2011-10-12 4 views
5

task_struct में, हम देखते हैं पा सकते हैं:एक प्रक्रिया की फाइलें, mm_struct और files_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 में दिखाई देंगी?

धन्यवाद,

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

उत्तर

1

fd_array में फ़ाइलों को उन वर्तमान में उन लोगों के साथ जुड़े एक फ़ाइल वर्णनकर्ता होती है (जैसे। open(), socket() या इसी तरह के साथ खुला), और VMAs से जुड़े हुए उन वे हैं जो प्रक्रिया मेमोरी में मैप किए गए हैं (उदाहरण के लिए mmap() के साथ)। फ़ाइलें या तो श्रेणी में या दोनों में हो सकती हैं, इसलिए fd_array में उन फ़ाइलों को एक वीएमए और इसके विपरीत से जरूरी नहीं है।

संबंधित मुद्दे