首页 > 编程知识 正文

多个磁盘挂载到同一个目录下,linux查看进程打开文件

时间:2023-05-04 16:34:15 阅读:145103 作者:2076

有很多人和我有同样的疑问吗? 文件在磁盘上,但操作文件在内存中。 这两者有什么联系呢? 到现在为止还没有找到更详细的答案,但是整理了linux基础的数据结构后,发现了一些线索。 和大家分享。

一、相关linux数据结构

1 .软盘

在编程语言中,打开文件的常见操作需要创建文件描述符软盘。

intFD=open(…;

软盘为int型,实际上是数组的下标,前三个0、1、2被输入、输出、错误占用

创建新软盘时,首先分配file对象,将其放入数组中,然后返回此数组的后缀,这就是软盘

2 .文件

结构文件{

file_operations *fop;

path *f_path;

loff_t f_pos;

}

file结构具有指向path结构的f_path指针。 其中,f_pos还保存文件的位置

3. path

结构路径{

登特里*登特里

.

}

path与dentry结构连接

4 .登特里

结构目录{

inode *d_inode;

.

}

dentry结构连接到I节点结构

5 .节点

结构索引{

地址_ space * I _ mapping;

地址_ space * I _ data;

}

inode结构体连接到address_space结构体

6 .地址_空间

结构地址_ space {

radix_tree_root page_tree;

}

page_tree是基本树,节点包含page节点,page是系统中的页面,因此address_space连接到page结构。

7. page

结构页面{

Void *隐私;

}

私有指向buffer_head

8. buffer_head

结构缓冲器_ head {

sector_t block_nr; //逻辑块编号

block_device *b_bdev; //磁盘设备编号

}

保存在block_nr中的数据的逻辑块编号可以通过逻辑块编号与磁盘相关联。

9. bio

结构bio {

bio_vec*bi_io_vec; //链表

sector_t bi_sector; //磁盘上的相关扇区

struct block_device *bi_bdev; //相关的块设备

}

一个bio连接到n个bio_vec结构,用于表示内容在page中的位置

10. bio_vec

struct bio_vec{

page *bv_page; //指向包含的页面

int bv_len; //长度

int bv_offset; //页面中的偏移量

}

11. task_struct

结构任务_结构{

struct bio *bio_list; 指向//BIO的链表头

}

二.读写操作

file的file_operations是包含对文件的读取、写入等操作的操作结构,对文件的所有操作都将转移到该文件的file-f_op-read/write等操作中。

三.内存到磁盘的路径

从linux2.6开始,使用bIO的结构来描述IO操作。 为了提高效率,使用buffer_head的场景较少,使用bio结构编写读/写操作,并使用io调度算法进行调度。

从以上结构体可以得到线索。

软盘-文件路径-目录-索引节点-地址_空间-页面-缓冲区_头-磁盘块编号

或者

task_struct-bio-磁盘块编号

的所有IO操作都是异步的,并且内容会根据特定条件从内存刷新到磁盘。

本作品的采用

知识共享签名-允许非商业使用4.0国际许可协议。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。