2011-10-12 9 views
5

W task_struct, możemy znaleźć tam są:Pliki procesu, relacja między plikami w mm_struct i files_struct?

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

files_struct zawiera wskaźniki do maksymalnie 256 struktur danych plik, każdy opisujący plik używany przez ten proces.

struct file * fd_array[NR_OPEN_DEFAULT]; 

mm_struct zawiera vm_area_struct.

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

I vm_area_struct, możemy znaleźć:

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

Więc moje pytanie jest:

  1. jaka jest relacja między plikami w fd_array i vm_file?

  2. Czy wszystkie pliki pokazane w fd_array będą również odwzorowane w vm_area_struct w sposób podobny do tego na obrazku? Czy wszystkie pliki mapowane w vm_area_struct pojawią się w fd_array?

Dzięki,

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

Odpowiedz

1

pliki w fd_array są te, które obecnie mają deskryptor pliku z nimi związane (np. Otwarta z open(), socket() lub podobnym), a te połączone VMA to te, które są odwzorowane w pamięci procesu (np. z mmap()). Pliki mogą należeć do jednej lub obu kategorii, więc te pliki w fd_array niekoniecznie są połączone przez VMA i na odwrót.

Powiązane problemy