📋 الكبسولة المعزولة: تشريح sched/task.rs
النواة لا تعرف شيئاً اسمه "لعبة" أو "متصفح". كل ما تراه النواة هو كبسولة بيانات تسمى Task!
1. صورة المعالج (CpuContext)
لتجميد برنامج مؤقتاً، يجب التقاط صورة (Snapshot) لكل ما يدور في عقل المعالج:
rust
#[repr(C)]
pub struct CpuContext {
pub r15: u64, // مسجلات البيانات
// ...
pub rsp: u64, // مؤشر المكدس (أين كنت تقرأ؟)
pub rip: u64, // مؤشر الكود (أين كنت تنفذ؟)
}عندما يأتي دور البرنامج مجدداً، نصب هذه الصورة في المعالج فيكمل وكأنه لم يتوقف جزءاً من الثانية!
2. حالات الكبسولة (TaskState)
rust
pub enum TaskState {
Ready, // جاهز وينتظر دوره
Running, // يعمل الآن ويستحوذ على المعالج
Blocked, // في سبات عميق!
Dead, // انتهى وسيتم حذفه
}الذكاء الهندسي: إذا حاول البرنامج قراءة رسالة ولم يجد شيئاً، المجدول يغير حالته إلى Blocked فورا! هذا يعني أن المعالج لن يضيع وقتاً في تشغيل برنامج ينتظر، مما يحافظ على برودة المعالج وبطارية الجهاز.
3. منافذ الأمن (IpcPort) - (CVE-N5)
rust
pub struct IpcPort {
pub target_slot: usize, // إلى من يؤدي هذا المنفذ؟
pub active: bool,
}
// بداخل الـ Task:
pub ports: [IpcPort; 8],هذا هو تجسيد الأمن المبني على القدرات (Capability-based Security). البرنامج لا يرسل رسالة بذكر رقم PID 1 (فهذا خطر). البرنامج يرسل رسالة إلى "منفذه الأول Port 0"، وإذا كانت النواة قد ربطت المنفذ بـ PID 1، ستصل الرسالة!