الانتقال إلى المحتوى

برمجيات النظام

A-Level علوم الحاسوب · الموضوع 16

درس فيديو لهذا الموضوع افتح صفحة الفيديو
14:07

الموارد والمُترجمات وRPN

افتح متصفحاً وعازف موسيقى ولعبة. لديك معالج واحد — ربما عدة أنوية — ومع ذلك يبدو وكأنها جميعاً تعمل في آنٍ واحد. وجميعها معاً تريد المزيد…

سرد باللغة الإنجليزية · ترجمة مدمجة بالإنجليزية + الصينية

16.1

كيف maximizing OS استخدام الموارد

المنهج
يجب أن يكون المرشحون قادرين على: ملاحظات وإرشادات
إظهار فهم لكيفية أن يمكن لـ نظام التشغيل تعظيم استخدام الموارد
وصف الطرق التي تخفي بها واجهة المستخدم تعقيدات الأجهزة من قبل المستخدم
إظهار فهم لإدارة العمليات مفهوم تعدد المهام والعملية حالات العملية: جارية، جاهزة ومقفوفة الحاجة إلى جدولة ووظيفة وفوائد برامج الجدولة المختلفة (بما في ذلك دوران دائري، أول عملية أقصر، أول قادم أول مُخدم، أقصر وقت متبقي) كيف يتصرف النواة الخاصة بنظام التشغيل كمعالج مقاطعات وكيف يُستخدم التعامل مع المقاطعات لإدارة جدولة المستوى الأدنى
إظهار فهم لـ الذاكرة الافتراضية والتقسيم والتجزئة لإدارة الذاكرة مفاهيم التقسيم، الذاكرة الافتراضية والتجزئة الفرق بين التقسيم والتجزئة كيف يمكن استبدال الصفحات كيف يمكن حدوث إرهاق القرص

المصدر: منهج كامبريدج الدولي

الحاسوب لديه موارد عديدة (وقت المعالج، الذاكرة، القرص، I/O) وبرامج عديدة تنافس عليها. يقوم نظام التشغيل بمشاركتها بعدل وكفاءة ليتم استغلال كل مورد جيداً ويبقى النظام مستجيباً:

نظام التشغيل يشارك وقت المعالج والذاكرة والقرص والإدخال/الإخراج بين البرامج
نظام التشغيل يشارك المعالج والذاكرة والقرص وI/O بين البرامج
  • متعدد المهام — تبديل المعالج بسرعة بين العمليات لتبدو وكأنها تعمل جميعاً في آنٍ واحد.
  • إدارة الذاكرة — منح كل عملية الذاكرة التي تحتاجها؛ استخدام paging للقرص عندما تمتلئ RAM.
  • التجميع والتخزين المؤقت — طابرة مهام الطباعة على القرص حتى لا ينتظر المعالج الطابعة.
  • التخزين المؤقت — الاحتفاظ بالبيانات الأخيرة المستخدمة من القرص في cache / RAM.
رقاقة CPU (وحدة المعالجة المركزية)
المعالج مورد رئيسي يشاركه نظام التشغيل بين المهام المتنافسة
وحدات الذاكرة (RAM)
نظام التشغيل يدير أيضاً الذاكرة (RAM)، يقرر ما يحفظ فيه وما ينقله للقرص
مفردات تدريب
English العربية
multi-tasking/ˈmʌlti ˈtæskɪŋ/ متعدد المهام
paging/ˈpeɪdʒɪŋ/ تجزئة
cache/kæʃ/ cache
16.1

واجهة المستخدم

تخفي واجهة المستخدم الأجهزة خلف تجريدات صديقة: يرى المستخدم النوافذ والقوائم والمجلدات، وليس العناوين أو القطاعات. يؤدي النقر مرة واحدة على أيقونة إلى قيام نظام التشغيل بالبحث عن البرنامج على القرص، وتخصيص الذاكرة، وتحميله وتشغيله. CLI (سطر الأوامر) قوي وقابل للبرمجة للخبراء؛ بينما GUI (الرسومي) أسهل في التعلم. توفر معظم الأنظمة كليهما.

"وصف طريقتين يتم من خلالهما إخفاء تعقيدات الأجهزة عن المستخدم." (1) يعمل المستخدم مع الملفات والمجلدات بأسمائها، ويقوم نظام التشغيل بتحويلها إلى مسارات وقطاعات وكتل القرص؛ (2) يقوم المستخدم بتشغيل برنامج بـ نقر أو أمر، ويقوم نظام التشغيل بتحميله، وتخصيص الذاكرة، وجدولته دون أن يعرف المستخدم أي عناوين؛ (3) تسمح برامج تعريف الأجهزة للمستخدم بالطباعة أو الحفظ دون معرفة كيفية التحكم في الطابعة أو القرص؛ (4) تستبدل الواجهة الرسومية أوامر مستوى الآلة بالأيقونات والنوافذ والقوائم. الفائدة للطالب، مع مثال: يجعل نظام التشغيل الأجهزة قابلة للاستخدام بدون معرفة تقنية، على سبيل المثال حفظ مستند على فلاش USB بسحب أيقونته.

"بين كيف ي maximise نظام التشغيل استخدام الموارد." يقوم بجدولة المعالج بحيث لا يكون خالياً أبداً طالما هناك عملية جاهزة؛ يدير الذاكرة، بتخصيصها للعمليات، واستردادها، وتمديد باستخدام الذاكرة الافتراضية؛ يدخل الإدخال والإخراج، باستخدام البوفرات والتجميع Spooling لكي تتداخل الأجهزة السريعة والبطيئة في عملها؛ ويدخل التخزين، بالتتبع الدقيق للمساحة الفارغة والملفات. كل نقطة تذكر موردًا وما يفعله به نظام التشغيل.

مفردات تدريب
English العربية
spooling/ˈspuːlɪŋ/ التجميع المؤقت
16.1

إدارة العمليات

العملية هي برنامج قيد التنفيذ — كودها، وحالتها الحالية، وذاكرتها، وملفتاتها المفتوحة.

الجدولة

يختار المجدول أي عملية جاهزة ستُنفّذ بعد ذلك، ولمدة كم:

  • دوراني — تحصل كل عملية على شريحة زمنية ثابتة، ثم تنتقل إلى آخر الطابور.
  • أول قادم أول مخدم؛ أقصر مهمة أولاً؛ أقصر وقت متبقي (تنفيذ المهمة المتبقية لها أقل عمل)؛ الأولوية؛ طوابير التغذية الراجعة متعددة المستويات.

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

"صف ما يُقصد بالتعدد المهام وكيف يفيد إدارة العمليات." تبقى عدة عمليات في الذاكرة في نفس الوقت، وي切换 المعالج بينها بسرعة كبيرة لدرجة أنها تبدو وكأنها تعمل بالتزامن، حيث تُمنح كل منها دوراً في وقت المعالج بالتناوب. الفائدة: المعالج لا يترك فارغاً أبداً بينما تنتظر عملية إدخالاً أو إخراجاً، لذا تكون الإنتاجية أعلى ويمكن للمستخدم العمل على عدة برامج في آن واحد. "اشرح الحاجة إلى الجدولة." هناك عمليات أكثر من المعالجات، لذا يجب اتخاذ قرار حول أي عملية ستُنفّذ بعد ذلك ولمدة كم؛ تضمن الجدولة أن كل عملية تحقق تقدماً، وأن المعالج يُستخدم بالكامل، وأن أوقات الاستجابة مقبولة، وأن يمكن احترام الأولويات.

خطان زمنيان لنفس ثلاث مهام: أول قادم أول مخدم ينفذ المهمة الطويلة أولاً وتنتظر المهام القصيرة وراءه، بينما أقصر مهمة أولاً تنفذ المهام القصيرة أولاً ويخفض متوسط وقت الانتظار من ⟦6.7⟧ إلى ⟦2.7⟧ وحدة
نفس العمل بترتيب مختلف: أقصر مهمة أولاً تزيل المهام القصيرة من الطريق، sehingga تنتظر معظم المهام وقتاً أقل، على خطر انتظار مهمة طويلة للأبد

رواتب الجدولة كما تريد الامتحان وصفها.

الروتين الوظيفة الفائدة العيب
أول قادم أول مخدم (FCFS) تُنفّذ العمليات بالترتيب الذي تصل فيه إلى طابور الاستعداد، لكل منها حتى اكتمالها بسيط؛ كل عملية تُعالج بالتناوب، لا واحدة تُحرَم عملية طويلة تحبس جميع القصيرة وراءها؛ استجابة سيئة
أقصر مهمة أولاً (SJF) العملية الجاهزة ذات أقصر وقت تشغيل مُقدَّر تُنفّذ بعد ذلك، حتى اكتمالها يقلل متوسط وقت الانتظار؛ تنتهي许多 المهام القصيرة بسرعة يجب معرفة أوقات التشغيل مسبقاً؛ قد لا تُنفّذ عملية طويلة أبداً (حرمان)
أقصر وقت متبقي (SRT) نسخة متقطعة من SJF: إذا وصلت عملية جديدة بوقت متبقي أقل من الجارية، تأخذ مكانها تُخدم العمليات القصيرة حتى أسرع؛ إنتاجية جيدة تبديل سياق أكثر؛ يمكن مقاطعة عملية طويلة مراراً وتكراراً ومحرمتها
دوراني (RR) تحصل كل عملية جاهزة على شريحة زمنية ثابتة بالتناوب؛ عند انتهاء الصلاحية تنتقل العملية إلى آخر الطابور عادل؛ تستجيب كل عملية ضمن وقت محدود، جيد للاستخدام التفاعلي عبء تبديل السياق؛ شريحة قصيرة جداً تضيع وقتاً، وطويلة تؤخر الآخرين
الأولوية تُنفّذ العملية الجاهزة ذات الأعلى أولوية أولاً الأعمال المهمة أو الحرجة زمنياً تُنفّذ أولاً قد تُحرَم عمليات منخفضة الأولوية إلا إذا تقدمت أولوياتها مع الوقت

مثال محلول. تصل ثلاثة عمليات معاً بأوقات CPU تبلغ 8 و 4 و 2 مللي ثانية. قارن متوسط وقت الانتظار تحت FCFS (بنظام الوصول A, B, C) وتحت أقصر مهمة أولاً.

FCFS: A تنتظر 0، B تنتظر 8، C تنتظر 12؛ متوسط $(0 + 8 + 12)/3 = 6.7\ \text{ms}$. SJF تنفذ C, B, A: C تنتظر 0، B تنتظر 2، A تنتظر 6؛ متوسط $2.7\ \text{ms}$. إجمالي العمل نفسه 14 مللي ثانية في كلا الحالتين؛ الترتيب يحدد من ينتظر. الدوراني بشريحة 2 مللي ثانية سيعطي A و B و C كل منها دوراً في أول 6 مللي ثانية، لذا تكمل C عند 6 مللي ثانية، و B عند 12 مللي ثانية، و A عند 14 مللي ثانية: الأكثر استجابة، ليس الأسرع في المتوسط.

خط زمني غانت يظهر P1 ثم P2, P3, P4 تُنفّذ واحداً تلو الآخر من الوقت 0 إلى 39، مع مفتاح يعطي وقت انفجار CPU لكل عملية
جدولة أول قادم أول مخدم لأربع عمليات
جدولة دورانية تظهر كخط زمني: P1, P2, P3 تحصل كل منها على شريحة زمنية ثابتة بالتناوب، ثم يتكرر الدورة، وتشارك CPU بينها
الدوراني: تحصل كل عملية على شريحة زمنية ثابتة بالتناوب، ثم التالية تعمل (على عكس أول قادم أول مخدم)

حالات العملية

العملية تكون جديدة، جاهزة (تنتظر المعالج)، قيد التشغيل، مقفلة (تنتظر الإدخال/الإخراج أو قفلًا)، أو منتهية. عندما ينتهي وقت تشغيلها، تنتقل من قيد التشغيل إلى جاهزة؛ وعندما تطلب إدخالًا/إخراجًا، تنتقل من قيد التشغيل إلى مقفلة؛ وعند انتهاء الإدخال/إخراج، تنتقل من مقفلة إلى جاهزة.

مخطط للحالات: جديدة إلى جاهزة (قبول)، جاهزة إلى قيد التشغيل (توزيع بواسطة المجدول)، قيد التشغيل إلى جاهزة (انقطاع أو انقضَاء الوقت)، قيد التشغيل إلى مقفلة (طلب إدخال/إخراج)، مقفلة إلى جاهزة (اكتمال الإدخال/الإخراج)، قيد التشغيل إلى منتهية (خروج)
تتحرك العملية بين حالات الجديدة، الجاهزة، قيد التشغيل، المقفلة والمنتهية

الحالات الثلاث ولماذا تتحرك العملية. قيد التشغيل: العملية تمتلك المعالج. جاهزة: يمكنها التشغيل لكنها تنتظر المعالج. مقفلة: لا يمكنها التشغيل حتى يحدث شيء آخر. أسباب كل انتقال، والتي يطرحها الامتحان واحدًا تلو الآخر: قيد التشغيل إلى جاهزة عندما ينتهي وقت تشغيلها، أو عندما تصبح عملية ذات أولوية أعلى جاهزة وتقتطعها (انقطاع)؛ قيد التشغيل إلى مقفلة عندما تطلب إدخال أو إخراج أو تنتظر موردًا أو عملية أخرى؛ مقفلة إلى جاهزة عندما تكتمل الإدخال/الإخراج الذي كانت تنتظره (يُشاع له بانتهاءه عبر انقطاع)؛ جاهزة إلى قيد التشغيل عندما يقوم المجدول بتوزيعها. لا يمكن للعملية المقفلة الانتقال مباشرة إلى قيد التشغيل: يجب أن تصبح جاهزة أولاً.

كتلة التحكم في العملية والتبديل بين السياقات

يحافظ نظام التشغيل لكل عملية على كتلة تحكم في العملية (PCB) — وهي عداد البرنامج المحفوظ، المسجلات، الحالة ومعلومات الذاكرة.

التبديل بين السياقات يحفظ حالة العملية أ (كتبتها PCB) ويحمل حالة العملية ب
التبديل بين السياقات يحفظ حالة عملية واحدة ويحمل حالة أخرى
  • التبديل بين السياقات يوقف عملية واحدة ويبدأ أخرى: يحفظ الحالة في كتبة PCB ويستعيدها من أخرى. هذه التكلفة البسيطة تُدفع في كل تبديل.
  • النواة (جوهر نظام التشغيل) تعمل كـ معالج انقطاعات. عندما يرفع جهاز أو المؤقت انقطاعاً، تقوم معالجة الانقطاعات بحفظ العملية قيد التشغيل وتشغيل الروتين المناسب — وهذا ما يقود جدولة المستوى المنخفض.

"صِف كيف تعمل النواة كمعالج انقطاعات (علامتان)." عند رفع انقطاع، تحفظ النواة حالة العملية قيد التشغيل (مسجلاتها وعداد برنامجها، في كتلة التحكم الخاصة بها)، تحديد مصدر الانقطاع وأولويته، تشغيل روتين خدمة الانقطاع المناسب، ثم استعادة العملية المقطوعة (أو ذات الأولوية الأعلى) لتستمر التنفيذ. هكذا ينهي المؤقت فترة زمنية وينطلق إدخال/إخراج مكتمل عملية كانت مقفلة.

التواصل بين العمليات

العمليات معزولة، لذلك يوفر نظام التشغيل التواصل بين العمليات: الأنابيب (خرج برنامج feeds دخل برنامج آخر)، الذاكرة المشتركة (منطقة يمكن لعدة عمليات استخدامها)، وإرسال الرسائل.

استكشف

دورة حياة العملية

تتبع العملية الحلقة التي تمر بها. لا تعمل إلا عندما يختارها المجدول؛ وطلبها للـ I/O يرسلها إلى حالة الحظر، وانتهاء شريحة زمنية يردّها إلى الاستعداد — دائريًا حتى تنتهي.

مفردات تدريب
English العربية
process/ˈprəʊses/ عملية
scheduler/ˈʃedjʊlə/ المجدول
round robin/raʊnd ˈrɒbɪn/ دوران دائري
time slice/taɪm slaɪs/ شريحة زمنية
pre-emptive/priː ˈemptɪv/ الاستباقية
blocked/blɒkt/ موقوف
process control block/ˈprəʊses kənˈtrəʊl blɒk/ كتلة التحكم في العملية
context switch/ˈkɒntekst swɪtʃ/ تبديل السياق
kernel/ˈkɜːnl/ النواة
interrupt handler/ˈɪntərʌpt ˈhændlə/ معالج الانقطاعات
interrupt handling/ˈɪntərʌpt ˈhændlɪŋ/ معالجة المقاطعات
inter-process communication/ˈɪntə ˈprəʊses kəˌmjuːnɪˈkeɪʃn/ اتصال بين العمليات
pipes/paɪps/ الأنابيب
shared memory/ʃeəd ˈmeməri/ ذاكرة مشتركة
virtual address space/ˈvɜːtʃuːəl əˈdres speɪs/ مساحة العناوين الافتراضية
pages/ˈpeɪdʒɪz/ صفحات
frames/freɪmz/ إطارات
16.1

الذاكرة الافتراضية، التقسيم (Paging)، التجزئة (Segmentation)

تحصل كل عملية على فضاء عناوين افتراضي خاص بها — نطاق نظيف ومتصل من العناوين يربطه نظام التشغيل بالذاكرة الفعلية. هذا يمنح كل عملية فضاءً بسيطاً، يحمي العمليات من بعضها البعض، ويسمح للذاكرة الكلية أن تتجاوز الذاكرة العشوائية (RAM).

في التقسيم (Paging)، يُقسم الفضاء الافتراضي إلى صفحات ذات حجم ثابت، والذاكرة الفعلية إلى إطارات بنفس الحجم. جدول الصفحات يربط كل صفحة بإطار. إذا لم تكن الصفحة المطلوبة في RAM — وهو خطأ في الصفحة (Page Fault) — يقرأها نظام التشغيل من ملف التبديل (swap file) إلى إطار، مستبدلاً صفحة أخرى إذا امتلأت RAM. الأخطاء المتكررة تسبب انهيار النظام (Thrashing) (انهيار القرص)، حيث يقضي نظام التشغيل معظم وقته في تبديل الصفحات بدلاً من القيام بأعمال مفيدة.

صفحات الذاكرة المنطقية مرتبطة عبر جدول الصفحات إلى إطارات الذاكرة الفعلية غير المتصلة
التقسيم (Paging) يربط كل صفحة من الذاكرة المنطقية بإطار من الذاكرة الفعلية

في التجزئة (Segmentation)، تُقسم الذاكرة إلى وحدات منطقية ذات أحجام متغيرة (كود، مكدس، منطقة مكدسة)، لكل منها صلاحيات خاصة بها. تستخدم العديد من الأنظمة التقسيم داخل التجزئة.

وحدات منطقية ذات أحجام متغيرة (كود، مكدسة، مكدس) مرتبطة عبر جدول التجزئة للأحجام وعناوين البداية إلى الذاكرة الفعلية
التجزئة تربط وحدات ذات أحجام متغيرة باستخدام جدول تجزئة

"اشرح ما يعنيه مصطلح الذاكرة الافتراضية (ثلاث علامات)." تُستخدم التخزين الثانوي (القرص) لتمديد الذاكرة RAM، بحيث يبدو memory المتاحة أكبر من الذاكرة الفعلية؛ يتم تقسيم فضاء عناوين العملية إلى صفحات، وتبقى فقط الصفحات اللازمة حالياً في RAM بينما تنتظر الباقي على القرص؛ يتم تبديل الصفحات بين RAM والقرص حسب الحاجة، ويقوم نظام التشغيل بترجمة كل عنوان افتراضي إلى عنوان فعلي. لماذا يحتاج نظام التشغيل إليها: البرامج التي تعمل قد تحتاج إلى ذاكرة أكثر مما هو مثبت في RAM؛ تسمح بتشغيل عدد أكثر (أو برامج أكبر) في نفس الوقت؛ يمكن أن يكون البرنامج أكبر من الذاكرة الفعلية؛ تُستخدم الذاكرة بكفاءة لأن الأجزاء النشطة فقط من البرامج تشغل RAM.

التقسيم مقابل التجزئة: الفرق الذي يطلبه الامتحان. التقسيم يقسم الذاكرة إلى كتل ذات حجم ثابت (صفحات وإطارات) تختارها الأجهزة، دون النظر إلى بنية البرنامج، والربط مخفي عن المبرمج؛ التجزئة تقسم البرنامج إلى وحدات منطقية ذات أحجام متغيرة (إجراء، مصفوفة، مكدس) whose sizes and boundaries follow the program, so a segment can be protected or shared as a unit. "وصف عملية التجزئة": يتم تقسيم البرنامج إلى وحدات ذات أحجام مختلفة، يُعطى كل منها رقم وحدة؛ يسجل جدول الوحدات أين تبدأ كل وحدة في الذاكرة وما هو طولها؛ العنوان المنطقي هو رقم وحدة زائد إزاحة، ويضيف نظام التشغيل الإزاحة إلى العنوان الأساسي للوحدة لإيجاد الموقع الفعلي.

"اشرح ما يُقصد بـ "تدحرج القرص" (Disk Thrashing) ومتى يحدث." تدحرج القرص هو الحالة التي يتم فيها تبديل الصفحات داخل وخارج الذاكرة العشوائية (RAM) بشكل متكرر للغاية لدرجة أن المعالج يقضي وقتًا أطول في نقل الصفحات بدلاً من تنفيذ التعليمات، مما يؤدي إلى بطء النظام تقريبًا حتى التوقف. يحدث هذا عندما تكون الذاكرة العشوائية صغيرة جدًا مقارنة بالصفحات التي تحتاجها العمليات الجارية (مجموعاتها النشطة): حيث يتم إخراج صفحة مؤخرًا وتحتاج إليها مرة أخرى على الفور، فتتم استعادتها، مما يدفع صفحة أخرى للخارج تُحتاجها قريبًا، وهكذا. كثرة العمليات أو برنامج يصل إلى الذاكرة بشكل غير قابل للتنبؤ يسببان هذه الحالة؛ ويمكن حلها بزيادة الذاكرة العشوائية أو تقليل عدد العمليات.

استكشف

ماذا يحدث عند خطأ الصفحة (Page Fault)?

مرر بخطوات خطأ الصفحة. عندما يلمس البرنامج صفحة ليست في ذاكرة RAM، يقوم نظام التشغيل بهدوء بسحبها من القرص وتحديث جدول الصفحات — بحيث يبدو أن البرنامج يمتلك ذاكرة أكبر مما هو موجود فعليًا.

مفردات تدريب
English العربية
page fault/peɪdʒ fɒlt/ خطأ الصفحة
swap file/swɒp faɪl/ ملف التبديل
thrashing/ˈθræʃɪŋ/ الانهيار
segmentation/ˌseɡmənˈteɪʃn/ التجزئة
disk thrashing/dɪsk ˈθræʃɪŋ/ إثارة القرص
interpreter/ɪnˈtɜːprɪtə/ مُفسِّر
compiler/kəmˈpaɪlə/ مُترجم
machine code/məˈʃiːn kəʊd/ كود الآلة
16.2

كيفية تشغيل المفسر للبرنامج

المنهج
يجب أن يكون المرشحون قادرين على: ملاحظات وإرشادات
إظهار فهم لكيفية أن يمكن لـ المفسر تنفيذ البرامج دون إنتاج نسخة مترجمة
إظهار فهم للمراحل المختلفة في ترجمة البرنامج بما في ذلك التحليل اللексический، التحليل النحوي، توليد الكود والتحسين
إظهار فهم لكيفية التعبير عن قواعد لغة باستخدام المخططات النحوية أو الصيغة باكنوس-ناور (BNF)
إظهار فهم لكيفية استخدام الصيغة البولندية العكسية (RPN) لإجراء تقييم التعبيرات

المصدر: منهج كامبريدج الدولي

المفسر يترجم وينفذ المصدر في نفس الوقت. لكل جملة، يقرأ السطر، يقوم بالتحليل اللغوي والنحوي، يتحقق من الأنواع، ثم ينفذ الإجراء، وينتقل إلى التالي. يتم الإبلاغ عن الأخطاء فورًا وعادةً ما يتوقف البرنامج؛ لا يتم إنتاج ملف تنفيذي. يتم إعادة الترجمة في كل مرة تشغيل (أبطأ)، لكنه يوفر تغذية راجعة سريعة أثناء التطوير وهو محمول (قابل للتنفيذ على منصات مختلفة).

"اشرح كيف ينفذ المفسر برنامجًا دون إنتاج نسخة مترجمة" (ثلاث درجات). يأخذ المفسر عبارة واحدة (سطر واحد) في كل مرة، يترجم (يحلل)ها، وينفذها مباشرةً، قبل الانتقال إلى التالية؛ لا يتم إنشاء أو تخزين نسخة مترجمة للبرنامج بأكمله، لذلك يتم ترجمة كل عبارة في كل مرة يتم تنفيذها، بما في ذلك كل مرور عبر حلقة تكرار؛ إذا احتوت العبارة على خطأ، فإن التنفيذ يتوقف عند تلك النقطة ويتم الإبلاغ عن الخطأ. وهذا ما يجعل المفسر جيدًا للتطوير والاختبار (يتم العثور على الأخطاء عند الوصول إليها، ويمكن تجربة التعديلات فورًا) ولكنه أبطأ في تشغيل البرامج المكتملة.

16.2

مراحل المترجم

المترجم يحول المصدر إلى كود الآلة عبر مراحل:

  1. التحليل اللغوي (Lexical Analysis) — يقوم المحلل اللغوي بتجميع الأحرف في رموز (كلمات مفتاحية، مُعرِّفات، مشغلات، ثوابت)، مع تجاهل المسافات الفارغة والتعليقات.
  2. التحليل النحوي (Parsing) — التحقق من أن الرموز تتوافق مع القواعد وبناء شجرة بناء نحوي مجردة (AST). قوس مفقود يسبب خطأ نحويًا.
  3. التحليل الدلالي — التحقق من أن البرنامج له معنى (تم إعلان المتغيرات، وأن الأنواع متطابقة).
  4. توليد الكود — traversal الشجرة وإصدار كود الهدف، باختيار المسجلات والتخطيطات.
  5. تحسين الكود — إزالة الأعمال الزائدة، دمج الثوابت، إعادة الترتيب لتحسين خط الأنابيب.

النتيجة هي ملف تنفيذي.

مراحل الترجمة: يمر كود المصدر عبر التحليل اللغوي (الرموز)، والتحليل النحوي (AST)، والتحليل الدلالي (الفحوصات)، وتوليد الكود والتحسين لإنتاج ملف تنفيذي
مراحل الترجمة، من كود المصدر إلى ملف تنفيذي مُحسّن

هدف كل مرحلة، بالكلمات التي تحصل عليها الدرجة. التحليل اللغوي: إزالة المسافات الفارغة والتعليقات؛ تحويل أحرف كود المصدر إلى رموز (كلمات مفتاحية، مُعرِّفات، مشغلات، ثوابت)، والتحقق من أن كل رمز صحيح في اللغة؛ إدخال المُعرِّفات في جدول الرموز. التحليل النحوي: التحقق من أن تسلسل الرموز يخضع لـ القواعد (قواعد النحو) الخاصة باللغة؛ بناء شجرة تحليل (شجرة بناء نحوي مجردة)؛ الإبلاغ عن الأخطاء النحوية؛ قد يُحسب فحص الأنواع وفحص إعلانات المتغيرات هنا ضمن التحليل الدلالي. توليد الكود: تحويل الشجرة المفحوصة إلى كود هدف أو كود آلة (ربما عبر كود وسيط)، مع تخصيص الذاكرة والمسجلات. التحسين: جعل الكود أسرع في التشغيل أو استخدام ذاكرة أقل، عن طريق إزالة التعليمات الزائدة، دمج أو تبسيط الحسابات، وإعادة تنظيم الحلقات، دون تغيير ما يفعله البرنامج. سؤال التوصيل يربط كل مرحلة بأحد هذه الوصفات.

استكشف

مراحل الترجمة

مرر عبر ما يفعله المترجم لمصدرك. كل مرحلة تسلّم ناتجها للمرحلة التالية — تتحول الأحرف إلى رموز، الرموز إلى شجرة، والشجرة إلى كود آلي مُحسّن.

مفردات تدريب
English العربية
lexical analysis/ˈleksɪkl əˈnæləsɪs/ التحليل اللغوي
tokens/ˈtəʊkənz/ رموز
syntax analysis (parsing)/ˈsɪntæks əˈnæləsɪs/ تحليل الصياغة (التحليل)
abstract syntax tree/ˈæbstrækt ˈsɪntæks triː/ شجرة النحو المجرد
syntax error/ˈsɪntæks ˈerə/ خطأ صياغة
semantic analysis/səˈmæntɪk əˈnæləsɪs/ التحليل الدلالي
code generation/kəʊd ˌdʒenəˈreɪʃn/ توليد الكود
code optimisation/kəʊd ˌɒptɪmaɪˈzeɪʃn/ تحسين الكود
symbol table/ˈsɪmbl ˈteɪbl/ جدول الرموز
grammar/ˈɡræmə/ النحو
Backus-Naur Form/ˈbækəs nɔː fɔːm/ صيغة باكوس-ناور
production rule/prəˈdʌkʃn ruːl/ قاعدة الإنتاج
16.2

القواعد: BNF والمخططات النحوية

القاعدة تحدد أي تسلسلات للرموز تُعد برامج صالحة.

صيغة باكوس-نور (BNF) نصية. قاعدة الإنتاج تأخذ الشكل:

<symbol> ::= alternative1 | alternative2 | ...

كل بديل هو تسلسل من الرموز النهائية (نص حرفي) والرموز غير النهائية (أسماء قواعد أخرى):

<digit>      ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<identifier> ::= <letter> | <identifier> <letter> | <identifier> <digit>

القاعدة الثالثة المتكررة تعبر عن "حرف يليه أي عدد من الحروف أو الأرقام". عبارة IF:

<if-statement> ::= IF <condition> THEN <statement> ENDIF
                 | IF <condition> THEN <statement> ELSE <statement> ENDIF

المخطط النحوي (المخطط السككي) يظهر نفس الشيء بيانيًا: مربعات للمُعرِّفات غير النهائية، ومربعات مستديرة للرموز النهائية، وأسهم للمسارات الصالحة، وحلقات للتكرار. الرمزان متكافئان. يستخدم المحلل القواعد للقرار فيما إذا كان البرنامج صالحًا.

مخطط سككي لعملية إسناد: مربع مُعرِّف مستطيل، ثم مربع رمزي مستدير للإسناد، ثم مربع تعبير مستطيل، متصلة من اليسار إلى اليمين
مخطط نحوي (سككي) لعملية إسناد
ثلاثة مخططات نحوية لحرف، ورقم، ومُعرِّف يبدأ بحرف ويستمر بأي عدد من الحروف أو الأرقام، بجانب قواعد BNF التي تعبر تمامًا عن نفس القواعد، مع أمثلة صحيحة وغير صحيحة
المخطط النحوي وقاعدة BNF يقولان نفس الشيء: الاختيار يصبح بدائلاً مفصولة بخطوط عمودية، والحلقة تصبح قاعدة تشير إلى نفسها

قراءة مخططات الامتحان. يُعرّف كل مخطط متغيراً غير نهائي واحد؛ اتبع الأسهم من نقطة الدخول إلى نقطة الخروج، وكل مسار يمكنك تتبعه هو سلسلة صالحة. الاختيار لمربعات بجانب بعضها البعض هو مجموعة بدائل؛ الحلقة المتكررة تعني "أعد التكرار عدد لا نهاية منه كما تشاء"؛ المربع الخاص بمتغير غير نهائي آخر يعني "أدخل أي شيء يسمح به هذا القانون". "اذكر السبب في عدم صحة السلسلة" يطلب القاعدة التي تخالفها، بكلمات: 9K غير صالح كمتغير لأن الحرف الأول يجب أن يكون حرفاً، وليس رقماً؛ JJ90 رمز مرور غير صالح إذا سمحت القاعدة بحرف واحد فقط قبل الأرقام، أو إذا كان J ليس ضمن مجموعة الأحرف المدرجة. تحقق دائماً من السلسلة مقابل مجموعة الأحرف التي يسمح بها المخطط فعلياً، وليس بما تقبله اللغة الحقيقية.

كتابة BNF من مخطط. يصبح كل مخطط قاعدة واحدة <name> ::= ...؛ يتم فصل البدائل بواسطة |؛ تُكتب التسلسل رمزاً تلو الآخر؛ والتكرار يُكتب بالتراجع (recursion)، لأن BNF لا يحتوي على رمز حلقة: "حرف واحد أو أكثر" هو <word> ::= <letter> | <letter><word>، و"صفر أو أكثر من الأرقام بعد حرف" هو <variable> ::= <letter> | <letter><digits> مع <digits> ::= <digit> | <digit><digits>.

مثال محلول. أكمل BNF لتسجيل مركبة يجب أن تبدأ بحرفين (من A B C) يليهما رقم واحد أو اثنان أو ثلاثة (من 0 1 2).

<letter>       ::= A | B | C
<digit>        ::= 0 | 1 | 2
<digits>       ::= <digit> | <digit><digit> | <digit><digit><digit>
<registration> ::= <letter><letter><digits>

AB12 صحيح؛ A12 ليس كذلك (حرف واحد فقط)؛ AB1234 ليس كذلك (أربعة أرقام)؛ AD1 ليس كذلك (D ليس حرفاً مدرجاً). طُلب إضافة قيد مثل "الحرف الثالث يمكن أن يكون أيضاً رمزاً"، أضف البديل الإضافي لقاعدة ذلك الموقع فقط، وعرّف <symbol> بقاعده الخاصة.

مثال محلول. اكتب BNF لتعبير يتكون من متغير، يليه عامل، يليه إما متغير أو رقم، حيث المتغير هو حرف صغير واحد من a b c والعامل هو + أو -.

<variable>   ::= a | b | c
<operator>   ::= + | -
<number>     ::= <digit> | <digit><number>
<expression> ::= <variable><operator><variable> | <variable><operator><number>

قاعدة <number> التراجعية تسمح بأي عدد من الأرقام؛ يغطي البديلان لـ <expression> كلتا الحالتين المذكورتين في التعريف. احتفظ بكل متغير غير نهائي بين قوسين زاوية وكل طرفي-terminal بدونها.

مفردات تدريب
English العربية
terminal/ˈtɜːmɪnl/ طرفي القائمة
non-terminal/nɒn ˈtɜːmɪnl/ غير طرفي
syntax diagram/ˈsɪntæks ˈdaɪəɡræm/ مخطط القواعد
16.2

صيغة بولندية العكسية (RPN)

في الصيغة بينية (infix) يقع العامل بين مؤثراته (3 + 4 * 2)، مما يتطلب أقواس وقواعد أولوية. في صيغة بولندية العكسية (RPN، صيغة ما بعد الـ postfix) يأتي العامل بعد مؤثراته (3 4 2 * +)، ولا يتطلب أقواساً.

تحويل الصيغة البينية إلى RPN

استخدم مكدس عوامل. امسح من اليسار إلى اليمين: أخرج المؤثرات؛ بالنسبة للعامل، قم أولاً بإخراج أي عوامل مكدسة ذات أولوية أعلى أو مساوية إلى المخرجات، ثم ادخله؛ أدخل (؛ عند ) أخرج إلى المخرجات حتىMatch (. في النهاية، أخرج جميع العوامل. مثال: (3 + 4) * 2 → 3 4 + 2 *.

تقييم RPN

استخدم مكدس للمؤثرات. امسح من اليسار إلى اليمين: أدخل كل مؤثر؛ عند encountering عامل، أخرج أعلى اثنين، طبقه، وأدخل النتيجة. تقييم 3 4 2 * +:

الرمز المكدس
3 3
4 3, 4
2 3, 4, 2
* 3, 8
+ 11

النتيجة: 11. RPN لا تحتاج إلى أقواس وقت التقييم وتلائم آلة المكدس — وهو كيف تعمل JVM والعديد من المفسرات للرموز الثنائية (bytecode).

"اشرح لماذا تُستخدم RPN لتقييم التعبيرات" (علامتان). في RPN تظهر العوامل بترتيب تطبيقها، لذا يمكن تقييم التعبير في مرور واحد من اليسار إلى اليمين مع لا أقواس ولا قواعد أولوية؛ لذلك فهو أبسط وأسرع للمعالج أو المفسر. "حدد، مع الأسباب، هيكلاً بياناتياً مناسباً": مكدس، لأن التقييم يحتاج إلى مؤثرات تم إدخالها أحدثاً أولاً (الأخيرة دخولاً، الأولى خروجاً): يتم إدخال كل مؤثر، ويقوم كل عامل بإخراج أعلى اثنين، وتطبيق نفسه، وإدخال النتيجة. اعرض محتويات المكدس بعد كل رمز عند الطلب.

تحويل الصيغة البينية إلى RPN يدوياً. (1) ضع الأقواس بالكامل للتعبير باستخدام قواعد الأولوية؛ (2) انقل كل عامل إلى مباشرة بعد القوس المغلق لزوجته؛ (3) أزل الأقواس. لذا $(a - b) * (a + c) / 7$ تصبح $((a - b) * (a + c)) / 7$، ثم a b - a c + * 7 /. لاحظ أن * و/ تطبق من اليسار إلى اليمين، لذا القسمة هي العامل الأخير، وليس الضرب. المزيد من التحويلات: $((7 + 3) - (2 * 8)) / 6$ هي 7 3 + 2 8 * - 6 /؛ $(7 - 2 + 8) / (9 - 5)$ هي 7 2 - 8 + 9 5 - /؛ $a * b + b - d + 15$ هي a b * b + d - 15 +؛ $(2 - 6) * (13 + 7) / 5$ هي 2 6 - 13 7 + * 5 /.

تحويل RPN مرة أخرى إلى الصيغة البينية. اعمل عبر RPN باستخدام مكدس للتعابير: أدخل كل مؤثر؛ لكل عامل أخرج اثنين، اكتبهما على جانبيه بين أقواس، وأدخل النتيجة. لذا a b / 4 * a b + - هي $((a / b) * 4) - (a + b)$؛ 5 2 + 9 3 - / 3 * هي $((5 + 2) / (9 - 3)) * 3$؛ b a c - + d b + * c / هي $((b + (a - c)) * (d + b)) / c$؛ a b - c + c a - * d / هي $(((a - b) + c) * (c - a)) / d$. احتفظ بالأقواس: إسقاطها يمكن أن يغير المعنى.

مثال محلول. قيّم a b - c d + * e / عندما $a = 17$، $b = 5$، $c = 7$، $d = 3$ و$e = 10$، مع إظهار المكدس.

الرمز الإجراء المكدس (الأعلى على اليمين)
a أدخل 17 17
b أدخل 5 17, 5
- أخرج 5 و17، أدخل $17 - 5$ 12
c أدخل 7 12, 7
d أدخل 3 12, 7, 3
+ أخرج 3 و7، أدخل $7 + 3$ 12, 10
* أخرج 10 و12، أدخل $12 \times 10$ 120
e أدخل 10 120, 10
/ أخرج 10 و120، أدخل $120 / 10$ 12

النتيجة 12. ترتيب الإخراج مهم لـ - و/: القيمة المخرجة ثانياً هي المؤثر الأيسر، لذا a b - هي $a - b$، وليست $b - a$. اثنان آخران، بنفس الطريقة: d a b + * c a - / مع $a = 6, b = 12, c = 15, d = 5$ يعطي $5 \times (6 + 12) / (15 - 6) = 90 / 9 = 10$؛ c a - b d + * b c + / مع $a = 4, b = 12, c = 24, d = 6$ يعطي $(24 - 4) \times (12 + 6) / (12 + 24) = 360 / 36 = 10$.

مثال محلول. حول $(A + B) \times (C - D)$ إلى RPN، ثم قّم $(3 + 4) \times (5 - 2)$. امسح من اليسار إلى اليمين باستخدام راصة تشغيل. ادفع (؛ أخرج A؛ ادفع +؛ أخرج B؛ عند ) اسحب للخلف لتتطابق مع (، مما يعطي A B + حتى الآن. ادفع ×، ويتصرف القوس الثاني بنفس الطريقة، مما يعطي C D -. في النهاية اسحب ×. النتيجة: A B + C D - ×. لتقييم الأرقام، استخدم راصة من المعاملات: ادفع 3، ادفع 4؛ + يسحب الاثنين ويدفع 7؛ ادفع 5، ادفع 2؛ - يسحب الاثنين ويدفع 3؛ × يسحب 7 و3 ويدفع 21. شيئان يجعلان هذه العملية موثوقة: المعاملات تحافظ على ترتيبها الأصلي خلال التحويل (فقط العمليات تتحرك)، وكل عملية تؤثر على القيمتين الفورييتين اللتين تحتها على الراصة.

استكشف

أولوية العمليات — وهو ما يلغيه رمز بولند العكسي

في الرياضيات العادية بالترتيب الوسطي، ترتبط عمليات × و ÷ بقوة أكبر من + و −، لذا يجب تطبيق القواعد بالترتيب الصحيح. يكتب رمز بولند العكسي المؤثرات أولاً (3 4 2 × + 1 −)، مما يثبت الترتيب دون الحاجة لقواعد أولوية.

مفردات تدريب
English العربية
infix/ˈɪnfɪks/ وسطي
Reverse Polish Notation/rɪˈvɜːs ˈpəʊlɪʃ nəʊˈteɪʃn/ ترميز بولند العكسي
postfix/ˈpəʊstfɪks/ اللاحق
stack/stæk/ مكدس
precedence/ˈpresɪdəns/ أولوية
bytecode/ˈbaɪtkəʊd/ bytecode
16.2

التعريفات التي يقبلها المصحح

تُصنّف أسئلة التعريف بناءً على صياغة ثابتة. احفظ هذه التعريفات بدقة، وقدم إجابة واحدة فقط.

مصطلح تعريف
تعدد المهام عدة عمليات محفوظة في الذاكرة في نفس الوقت، حيث يتبديل المعالج بينها لتبدو وكأنها تعمل بالتزامن
عملية برنامج تم تحميله في الذاكرة ويتم تنفيذه (أو جاهز للتنفيذ)
جاري التشغيل / جاهز / عالق يمتلك المعالج / ينتظر المعالج / لا يمكنه الاستمرار حتى يكتمل حدث مثل إدخال/إخراج
جدولة تحديد أي عملية جاهزة تحصل على المعالج التالي، ولمدة كم
جدولة استباقية يمكن إيقاف عملية التشغيل ونقلها إلى حالة الجاهزية لكي تعمل عملية أخرى
الذاكرة الافتراضية استخدام التخزين الثانوي لتوسيع RAM، مع احتفاظ فقط بالصفحات المطلوبة حالياً في الذاكرة الفعلية
التجزئة تقسيم الذاكرة والبرامج إلى صفحات ذات حجم ثابت يتم نقلها بين القرص و RAM حسب الحاجة
التقطيع تقسيم البرنامج إلى مقاطع منطقية ذات أحجام متغيرة، يتم ربط كل منها بالذاكرة عبر جدول المقاطع
تدهور القرص تبديل الصفحات بين RAM والقرص بشكل متكرر لدرجة أن القليل من المعالجة المفيدة يتم إنجازها
المترجم التفسيري يترجم وينفذ برنامجاً جملة بجملة، دون إنتاج نسخة مترجمة
المترجم يترجم برنامجاً كاملاً عالي المستوى إلى كود الآلة (الكود الهدف) قبل تشغيله
التحليل اللغوي يحول الكود المصدري إلى رموز، ويزيل المسافات الفارغة والتعليقات، ويبني جدول الرموز
التحليل النحوي يتحقق من أن الرموز تطبق قواعد اللغة وبناء شجرة التحليل
صيغة باكوس-ناور طريقة تدوين لقواعد لغة: قواعد بصيغة <name> ::= alternatives مبنية من رموز نهائية وغير نهائية
التدوين البولندي العكسي طريقة لكتابة التعبيرات بحيث يأتي كل عامل بعد معاملاته، مما يسمح بحسابها بمكدس وبدون أقواس
16.2

نصائح للامتحان

  • أسئلة نظام التشغيل تُدرَّس بناءً على آليات محددة: الجدولة، إدارة الذاكرة، تخزين مؤقت الإدخال/الإخراج والنقل الجماعي، إدارة الملفات؛ بالنسبة للواجهة، أسماء الملفات وليس العناوين، النقرات وليس الأوامر، التعريفات، واجهة المستخدم الرسومية.
  • حالات العمليات مع انتقالاتها وسبب كل منها؛ روتين الجدولة كدالة زائد فائدة زائد عيب؛ يحتفظ内核 بالحالة، يحدد المقطع، يخدمه، يستعيدها.
  • الذاكرة الافتراضية: القرص يوسع RAM، تبديل الصفحات، ترجمة العناوين؛ التجزئة ذات حجم ثابت وغير مرئية، التقطيع ذات حجم متغير ومنطقي؛ تدهور القرص هو التبديل بدلاً من العمل.
  • المترجم التفسيري: جملة بجملة، يُترجم ثم يُنفذ، لا شيء محفوظ. مراحل المترجم: الرموز وجدول الرموز، القواعد وشجرة التحليل، الكود، التحسين.
  • BNF: قاعدة لكل مخطط، | للاختيار، التكرار للتكرار، الرموز النهائية عارية وغير النهائية بين قوسين مربعين. قل أي قاعدة يخالفها السلسلة.
  • RPN: العوامل بعد المعاملات، احسب بمكدس، اعرض كل خطوة؛ حول بإضافة الأقواس بالكامل؛ عند التحويل عموماً، حافظ على الأقواس.

أخطاء شائعة

  • وصف تعدد المهام بأنه "تشغيل عدة برامج في نفس الوقت" دون ذكر تبديل المعالج بينها.
  • إرسال عملية معلقة مباشرة إلى حالة التشغيل، أو إعطاء "انتهت الشريحة الزمنية" كسبب للانتقال من التشغيل إلى المعلق.
  • الخلط بين أقصر مهمة أولاً (غير الاستباقية) وأقصر وقت متبقي (استباقية)، أو الدورانية بالأولوية.
  • تعريف الذاكرة الافتراضية بأنها "استخدام القرص الصلب كـ RAM" دون ذكر تبديل الصفحات.
  • قول إن المترجم التفسيري "يحول البرنامج إلى كود الآلة ثم يشغله"؛ هذا وصف للمترجم.
  • وضع التحقق النحوي في التحليل اللغوي، أو التحسين قبل توليد الكود في سؤال المطابقة.
  • كتابة تكرار BNF بصيغة <letter>* أو بنقاط؛ استخدم التكرار. ترك قوسين مربعين غير موجودة على الرموز غير النهائية.
  • عكس معاملات - أو / عند تقييم RPN، أو كتابة RPN لـ $a * b + c$ كـ a b c + *.

دروس تفاعلية حول هذا الموضوع

ا-working عليه خطوة بخطوة، مع تمارين تحقق فوري.

أوراق الامتحانات السابقة

المزيد من المواضيع في A-Level علوم الحاسوب

تسجيل الدخول أو إنشاء حساب

IGCSE، A-Level & AP