جميع الدروس →

الجدولة والأنوية والأحداث · الدرس 25 من 30 · نحو 15 دقيقة

الجدولة التعاونية

تناوب بين المهام وميّز سياسة الجدولة عن تعليمات المعالج.

01 / اشرح

افهم الفكرة

ينفّذ المعالج الواحد تعليمةً واحدة في كل مرة. يختار المجدوِل المهمة التالية. تتنازل المهام التعاونية عن التحكم طوعًا؛ وتمنح الجدولة الاستباقية كل مهمة حصةً محدودة من التعليمات. يعرض مختبر الأنظمة جدولةً دورية بحصة قابلة للتعديل وأحداث مهام صريحة.

تحدّي الآلة الافتراضية موزِّع تعاوني صغير: تزيد المهمة A عدّادها، ثم تزيد المهمة B عدّادها. تعبّر CALL وRETURN عن تبادل الأدوار. تسجّل SLEEP تأخيرًا مطلوبًا؛ لا تنتظر فحوص المعالج المتزامنة، بينما يحترمه المختبر الموقّت.

02 / جرّب

راقب ما يحدث

ترتيب المخرجات 1 ثم 101. شغّل بسرعة تسمح بملاحظة التأخير؛ وقارن أحجام حصة التعليمات في مختبر الأنظمة.

LOAD 1
CALL taskA
CALL taskB
HALT
taskA: PRINT
SLEEP 500
RETURN
taskB: LOAD 101
PRINT
RETURN

استخدم خطوة لاتّباع تعليمة واحدة في كل مرة. يمكنك تغيير المثال وإعادة تشغيله.

03 / التحدّي

اجعله يعمل

اقرأ عدد جولات من 0 إلى 3. ابدأ عدّاد المهمة A عند 0 وعدّاد B عند 100. في كل جولة استدعِ A لزيادة عدّادها وطباعته، ثم B لزيادة عدّادها وطباعته.

يشغّل الفاحص البرنامج الحالي في محرّرك على آلة جديدة لكل حالة من حالات الاختبار الـ3. ويوفّر المدخلات والذاكرة المهيّأة بنفسه؛ لا تحدّد مخرجات المختبر الحالية ولا ذاكرته نتيجتك.

INPUT
COPY R0 R3
LOAD 0 R1
LOAD 100 R2
LOOP R3
CALL taskA
CALL taskB
RETURN
HALT
taskA:
  #
RETURN
taskB:
  #
RETURN
هل تحتاج إلى تلميح؟

تملك كل مهمة سجلًا مختلفًا، ويجب أن تنفّذ كل منهما RETURN إلى الموزِّع.

اعرض حلًا محلولًا

اقرأ البرنامج، وتوقّع أثر كل تعليمة، ثم نفّذه خطوةً خطوة في المختبر.

INPUT
COPY R0 R3
LOAD 0 R1
LOAD 100 R2
LOOP R3
CALL taskA
CALL taskB
RETURN
HALT
taskA: LOAD R1
ADD 1
COPY R0 R1
PRINT
SLEEP 0
RETURN
taskB: LOAD R2
ADD 1
COPY R0 R2
PRINT
SLEEP 0
RETURN

مختبر معالج الرموز التعبيرية

جاهز · 0 دورات

برنامج الرموز التعبيرية

اكتب LOAD أو ADD أو تعليمة أخرى ثم مسافة لإدراج الرمز. يشغّل Ctrl/⌘ + Enter أو يوقف مؤقتًا؛ ويوقف Escape مؤقتًا؛ ويزيد Ctrl/⌘ + ] الإزاحة. ينقل Tab التركيز. تستخدم الوسوم نقطتين رأسيتين. تستخدم القفزات عناوين تعليمات تبدأ من صفر.

خريطة التعليمات ونقاط التوقّف (0)

توقف نقاط التوقّف قبل التعليمة. يتجاوز تشغيل نقطة التوقّف الحالية مرةً واحدة عند الاستئناف؛ وتنفّذ خطوة التعليمة مباشرةً. يمسح تحرير المصدر نقاط التوقّف القديمة وحالة الآلة.

    سجلات المعالج

    R0
    0
    R1
    0
    R2
    0
    R3
    0
    R4
    0
    R5
    0
    R6
    0
    R7
    0
    عدّاد البرنامج (PC)
    0
    مؤشّر المكدّس (SP)
    255
    الرايات
    الصفر: غير مفعّلة · السالب: غير مفعّلة · الفيض: غير مفعّلة
    طلب تأخير
    0 ms
    المكدّسات وأطر الحلقات

    SP = 255 − عمق البيانات − عمق الاستدعاءات. المكدّس منفصل عن الذاكرة.

    مكدّس البيانات (من الأسفل إلى الأعلى)

    فارغ

    عناوين عودة الاستدعاءات (من الأسفل إلى الأعلى)

    فارغ

    أطر الحلقات

    فارغ

    المخرجات والمدخلات

    نفّذ تعليمة PRINT لرؤية المخرجات.

    المدخلات في الطابور: فارغ

    الذاكرة · 256 بايت · 0 غير صفري

    تعرض كل خلية العنوان:القيمة. R = قراءة في هذه الخطوة؛ W = كتابة في هذه الخطوة. اختر خليةً لفحصها أو تهيئتها قبل التنفيذ. استخدم الأسهم للتنقّل، وHome/End للصف، وCtrl/⌘ + Home/End للذاكرة كلها.

    أعد الضبط قبل تهيئة الذاكرة. تلتف القيم المخزّنة ضمن 0–255.
    سجلّ التنفيذ · 0 عناصر

    العناصر الأخيرة أدناه. افحص أي فهرس يبدأ من صفر لرؤية الحالة الكاملة المنفصلة قبل التنفيذ وبعده.

    افحص تحدّيك

    يمكنك إجراء هذا الفحص في أي وقت. يجب أن تنجح كل حالة لتسجيل الإنجاز.

    يستخدم التقدّم localStorage فقط. يبقى في هذا المتصفّح ولا يُرسل إلى أي خادم.