Skip to content

💓 نبض القلب: تشريح arch/pit.rs ​

الـ PIT (Programmable Interval Timer) هو المذبذب الكريستالي الذي يرسل دقات متواصلة للمعالج. بدون هذا الملف، نظام التشغيل سيشغل البرنامج الأول، ولن يتمكن البرنامج الثاني من العمل أبداً (النظام سيتجمد على برنامج واحد)!

كيف نبرمج النبضات؟ ​

لنفترض أننا نريد تشغيل المجدول 1000 مرة في الثانية (1000Hz). الشريحة העتادية تعمل بتردد ثابت ومجنون وهو 1193182 Hz.

rust
pub unsafe fn init() {
    let hz = 1000;
    // نحسب معامل القسمة
    let divisor = 1193182 / hz; 

    // 1. أمر الشريحة (Command Port): "استعدي، سأرسل لك المعامل الجديد"
    let mut cmd = Port::new(0x43);
    cmd.write(0x36_u8); // 0x36 تعني: مولد نبضات متكرر (Square Wave)

    // 2. إرسال المعامل عبر منفذ البيانات (Port 0x40) على دفعتين (Low ثم High)
    let mut data = Port::new(0x40);
    data.write((divisor & 0xFF) as u8);        // البايت الأدنى
    data.write(((divisor >> 8) & 0xFF) as u8); // البايت الأعلى
}

ماذا يحدث بعد ذلك؟ ​

بمجرد تنفيذ هذا الكود، العتاد سيبدأ بإرسال شحنة كهربائية لمعالجك 1000 مرة كل ثانية! هذه الشحنة تُستقبل في interrupts/mod.rs تحت اسم timer_handler، والتي بدورها تقوم بإيقاظ الـ Scheduler لتبديل البرنامج. إنها الآلية التي تجعل حاسوبك قادراً على تشغيل متصفح وملف صوتي في نفس اللحظة (Preemptive Multitasking).

تم تطويره بحب بواسطة مجتمع Qtoom.