在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). */
所以我的问题是:
fd_array和vm_file中的文件之间有什么关系?
fd_array中显示的所有文件是否也将以与图片中所示类似的方式映射到vm_area_struct中?或者,vm_area_struct中映射的所有文件是否都会显示在fd_array中?
谢谢,
a busy cat http://static.duartes.org/img/blogPosts/memoryDescriptorAndMemoryAreas.png
答案 0 :(得分:1)
fd_array
中的文件是当前具有与之关联的文件描述符的文件(例如,使用open()
,socket()
或类似文件打开),而通过VMA链接的文件是那些映射到进程内存(例如,使用mmap()
)。文件可以属于任何类别,也可以属于两者,因此fd_array
中的文件不一定由VMA链接,反之亦然。