🛡️ الدرع التجريدي: تشريح hal/mod.rs
في عالم أنظمة التشغيل، أكبر خطأ يمكن أن ترتكبه هو أن تجعل "النواة" تعتمد على قطعة عتاد محددة. ماذا لو أردنا نقل نظام "QOS" من معالجات الحواسيب (x86_64) إلى معالجات الهواتف الذكية (ARM)؟ لو كانت النواة تكتب في شاشة الـ VGA مباشرة، فسنضطر لإعادة كتابة النواة بالكامل!
هنا يأتي دور طبقة التجريد العتادي (Hardware Abstraction Layer - HAL).
عقد الالتزام (The Trait Contract)
بدلاً من أن تقوم النواة بالطباعة المباشرة، هي تعلن عن "شروط" يجب أن يلتزم بها أي عتاد يريد العمل معها. في لغة Rust، نستخدم واجهات (Traits) لكتابة هذه العقود:
rust
pub trait TextOutput {
fn write_char(&mut self, c: u8);
fn write_str(&mut self, s: &str) {
for b in s.bytes() {
self.write_char(b);
}
}
// ... دوال تغيير الألوان ...
}كيف تستفيد النواة من هذا الدرع؟
بفضل هذا الكود، النواة في ملف lib.rs لم تعد تهتم بنوع الشاشة، ولا بعنوان الذاكرة، ولا بأي تعقيد فيزيائي. هي تستخدم هذا العقد فقط:
rust
// النواة تطلب من المعمارية أياً كانت إعطاءها كائن يحقق عقد TextOutput
let mut out = arch::x86_64::VgaTextOutput;
// النواة تستخدم الدالة بأناقة، والـ HAL يقرر كيف تُطبع فعلياً!
out.write_colored(">>> Booting QOS Kernel Microkernel... <<<
", Color::LightGreen, Color::Black);🎯 الخلاصة
ملف hal/mod.rs هو العقل الدبلوماسي للنظام. هو يحمي كود النواة (العبقري والمستقل) من التلوث بتفاصيل العتاد (المزعجة والمتغيرة).