Файлы процесса, связь между файлами в mm_struct и files_struct? - PullRequest
5 голосов
/ 13 октября 2011

В task_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?

Спасибо

занятой кот http://static.duartes.org/img/blogPosts/memoryDescriptorAndMemoryAreas.png

1 Ответ

1 голос
/ 13 октября 2011

Файлы в fd_array - это те, которые в настоящее время имеют дескриптор файла, связанный с ними (например, открытый с open(), socket() или подобным), и те, которые связаны с VMA, являются теми, которые отображаются в память процесса ( например, с mmap()). Файлы могут относиться либо к одной категории, либо к обеим, поэтому эти файлы в fd_array не обязательно связаны с VMA и наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...