进程的文件,mm_struct和files_struct中文件之间的关系?

时间:2011-10-12 20:36:19

标签: c linux kernel

在task_struct中,我们可以找到:

struct mm_struct *mm, *active_mm;
struct files_struct *files;  

files_struct包含指向最多256个文件数据结构的指针,每个文件数据结构描述此进程正在使用的文件。

struct file * fd_array[NR_OPEN_DEFAULT];

mm_struct包含vm_area_struct。

struct vm_area_struct * mmap;           /* list of VMAs */

在vm_area_struct中,我们可以找到:

struct file * vm_file;          /* File we map to (can be NULL). */

所以我的问题是:

  1. fd_array和vm_file中的文件之间有什么关系?

  2. fd_array中显示的所有文件是否也将以与图片中所示类似的方式映射到vm_area_struct中?或者,vm_area_struct中映射的所有文件是否都会显示在fd_array中?

  3. 谢谢,

    a busy cat http://static.duartes.org/img/blogPosts/memoryDescriptorAndMemoryAreas.png

1 个答案:

答案 0 :(得分:1)

fd_array中的文件是当前具有与之关联的文件描述符的文件(例如,使用open()socket()或类似文件打开),而通过VMA链接的文件是那些映射到进程内存(例如,使用mmap())。文件可以属于任何类别,也可以属于两者,因此fd_array中的文件不一定由VMA链接,反之亦然。