الدرس 14: mmap() — الملفات المُعيَّنة في الذاكرة
يُعيِّن mmap() ملفًا أو ذاكرة مجهولة مباشرةً داخل الـ VAS. يتيح ذلك قراءة ملف كبير كما لو كان مصفوفة في الذاكرة، دون استدعاءات read() صريحة. في هذا الدرس نتعلم الـ API، والفرق بين MAP_PRIVATE و MAP_SHARED، والصلة بـ CUDA IPC.
mmap مثل فتح كتاب مباشرةً على مكتبك بدلًا من نسخ الفصول في كل مرة. أنت تقرأ مباشرةً من المصدر.
- mmap
- استدعاء نظام يُعيِّن ملفًا أو ذاكرة مجهولة مباشرةً داخل الـ VAS الخاص بالعملية. يُعيد pointer إلى بداية المنطقة.
- page fault
- استثناء يحدث عندما تصل عملية إلى صفحة ذاكرة غير موجودة في RAM. يُحمِّل الـ OS الصفحة (من الملف أو swap) ويستأنف التنفيذ.
- MAP_SHARED
- تُكتب التعديلات مرة أخرى إلى الملف وتكون مرئية للعمليات الأخرى التي تُعيِّن الملف نفسه. يُستخدم لـ IPC.
- MAP_PRIVATE
- copy-on-write: التعديلات خاصة بالعملية الحالية ولا تُكتب مرة أخرى إلى الملف. تُحمَّل ملفات ELF باستخدام MAP_PRIVATE.
- mapping مدعوم بملف
- mmap مدعوم بملف كمصدر لبياناته. تُحمِّل page faults البيانات من الملف. يتناقض مع anonymous mmap المدعوم بالأصفار.