2011-10-12 5 views
5

In task_struct, troviamo ci sono:I file di un processo, la relazione tra i file in mm_struct e files_struct?

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

files_struct contiene i puntatori a un massimo di 256 strutture dati del file, ognuna descrive un file utilizzato da questo processo.

struct file * fd_array[NR_OPEN_DEFAULT]; 

mm_struct contiene una vm_area_struct.

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

E in vm_area_struct, possiamo trovare:

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

Quindi la mia domanda sono:

  1. qual è il rapporto tra i file nella fd_array e vm_file?

  2. Tutti i file visualizzati in fd_array verranno mappati anche in vm_area_struct in un modo simile a quello mostrato nell'immagine? Oppure, tutti i file mappati nel vm_area_struct verranno visualizzati in fd_array?

Grazie,

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

risposta

1

i file in fd_array sono quelli che attualmente hanno un descrittore di file ad essi associati (ad es. Aperta con open(), socket() o simili), e quelli legati da VMAs sono quelli che sono mappati nella memoria del processo (ad esempio con mmap()). I file possono essere in entrambe le categorie o in entrambi, quindi quei file in fd_array non sono necessariamente collegati da un VMA e viceversa.

Problemi correlati