2011-10-12 47 views
5

在task_struct中,我們可以發現有:進程的文件,mm_struct和files_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中?

感謝,

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

回答

1

fd_array的文件是那些目前沒有與他們相關的文件描述符(例如與open()socket()或類似開業),以及由音樂錄影帶大獎鏈接是那些映射到進程內存中的(例如使用mmap())。文件可以在任何一個類別中,也可以在兩個文件中,因此fd_array中的這些文件不一定由VMA鏈接,反之亦然。

相關問題