2011-10-12 7 views
5

En task_struct, podemos encontrar están:Archivos de un proceso, la relación entre los archivos en mm_struct y files_struct?

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

files_struct contiene punteros a un máximo de 256 estructuras de datos de archivos, cada uno describiendo un archivo utilizado por este proceso.

struct file * fd_array[NR_OPEN_DEFAULT]; 

mm_struct contiene un vm_area_struct.

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

Y en vm_area_struct, podemos encontrar:

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

Así que mi pregunta son:

  1. ¿cuál es la relación entre los archivos en fd_array y la vm_file?

  2. ¿Todos los archivos que se muestran en fd_array también se mapearán en vm_area_struct de forma similar a como se muestra en la imagen? O bien, ¿se mostrarán todos los archivos mapeados en vm_area_struct en fd_array?

Gracias,

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

Respuesta

1

los archivos en fd_array son los que actualmente tienen un descriptor de archivo asociado con ellos (por ejemplo. Abrió con open(), socket() o similar), y los vinculados por VMA son los que están mapeados en la memoria de proceso (por ejemplo, con mmap()). Los archivos pueden estar en cualquier categoría o en ambos, por lo que los archivos en fd_array no están necesariamente vinculados por un VMA y viceversa.

Cuestiones relacionadas