2011-10-12 22 views
5

Trong task_struct, chúng ta có thể tìm thấy ở đó là:Tệp của tiến trình, mối quan hệ giữa các tệp trong mm_struct và files_struct?

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

files_struct chứa con trỏ lên đến 256 cấu trúc tập tin dữ liệu, mỗi một mô tả một tập tin được sử dụng bởi quá trình này.

struct file * fd_array[NR_OPEN_DEFAULT]; 

mm_struct chứa vm_area_struct.

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

Và trong vm_area_struct, chúng ta có thể tìm thấy:

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

Vì vậy, câu hỏi của tôi là:

  1. mối quan hệ giữa các tập tin trong fd_array và vm_file là gì?

  2. Tất cả các tệp được hiển thị trong fd_array cũng sẽ được ánh xạ trong vm_area_struct theo cách tương tự như được hiển thị trong hình không? Hoặc, tất cả các tệp được ánh xạ trong vm_area_struct sẽ hiển thị trong fd_array không?

Cảm ơn,

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

Trả lời

1

Các tập tin trong fd_array là những người hiện đang có một bộ mô tả tập tin liên kết với chúng (ví dụ. Mở với open(), socket() hoặc tương tự), và những liên kết bởi VMAs là những thứ được ánh xạ vào bộ nhớ xử lý (ví dụ: với mmap()). Các tệp có thể thuộc một trong hai danh mục hoặc cả hai, do đó các tệp đó trong fd_array không nhất thiết được liên kết bởi VMA và ngược lại.

Các vấn đề liên quan