الحلاق النائم وعشاء الفلاسفة … أهم مشكلات المعالجة في أنظمة التشغيل منذ نشأتها

مشاكل انظمة التشغيل و المعالجة
1

سواء كنت متخصصاً أو غير متخصص بمجال الحاسوب، فبالتأكيد أنّك تسمع أخباراً عن اختراق أنظمة التشغيل، والثغرات التي يتم العثور عليها بين حين وآخر، ولطالما سألنا: ما يمكن أن تكون هذه الثغرة؟ وبأي جزء وجدت بالتحديد؟

يوجد العديد والعديد من الثغرات التي لا يمكن توقعها، ولكن وبما أنّنا جميعاً مهتمون بمعرفة تلك المشاكل التي واجهت أنظمتنا، فسأعرفك على أشهر مشاكل نظم التشغيل التي تمس قضايا التزامن والمعالجة التي تحدث في الداخل، والتي تم حلها فيما بعد، ولكن معرفتها ستعطيك فكرةً أعمق عن كيفية عمل الحاسوب، وأساليب معالجة البيانات.

مشكلة الحلاق النائم

وهي مشكلة من مشكلات التزامن في النظام، وقد سميت بهذا الاسم لأنّها تشابه تمامًا هذه القصة:

إن دخل زبون وكان الحلاق نائماً، يقوم الزبون بإيقاظ الحلاق والجلوس على الكرسي، فيقوم الحلاق بحلق شعره، ولكن في أثناء حلق الشعر قد يأتي زبون آخر، وهنا عليه الانتظار بغرفة الانتظار بينما ينهي الحلاق عمله.

في حال لم ينهِ الحلاق عمله، وقدم زبون آخر، وليكن 4 ولم يجد كرسياً، فسيهمّ بالمغادرة.

عندما ينهي الحلاق من الزبون الأول سيستبدله به الزبون الثاني، وعندما ينهي الحلاق من كل الزبائن يعود للنوم.

عملياً، كل شيء على ما يرام، ولكن في الحقيقة هناك عدة مشاكل تواجهنا، أولها الوقت: فالوقت المستغرق غير معروف أبداً، مثل: وقت انتهاء الحلاق من أحد الزبائن؟ كم سينتظر البقية؟ وكم زبوناً سيهم بالخروج لعدم توافر كرسي شاغر؟.

المشكلة الثانية: في حال انتهاء الحلاق وعدم وجود زبائن، حتى إن كان أحدهم قادماً، فسيذهب إلى النوم، وبقدوم الزبون الجديد سيضاف وقت آخر مع وقت الحلاقة، وهو وقت إيقاظ الحلاق.

المشكلة الثالثة: في حال أتى زبونان مع بعضهما مع وجود كرسي شاغر واحد، سيبدأ التناحر.

تمثل هذه القصة عملية الجدولة للمعالج، أو بما يسمى عملية ترتيب المهام التي يجب أن يقوم بها الحاسب، فالحلاق هو المعالج، والعملية هي الزبون، وعند عدم توافر أية عملية، لن يبقى المعالج في حالة ترقب.

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


مشكلة عشاء الفلاسفة

يحكى أنّه يوجد خمسة فلاسفة مجتمعون على مائدة طعام، ويوجد خمس أشواك على المائدة، لكن هؤلاء الفلاسفة غريبي الأطوار، لا يأكلون إلّا وشوكتين بيدهم، بالتالي سيتشاركون بأدوات الطعام، حيث يقوم الفيلسوف بالتفكير والتأمل، ومن ثم إن جاع أكل.

وبشكل منطقي لايمكن استخدام شوكة لاثنين من الفلاسفة معاً، وبالتالي في حال لم يحصل أحد الفلاسفة على شوكتين بآن واحد سيجوع، وبعد فترة سيموت.

كيف يمكن حل هذه المشكلة؟

كان أحد الحلول أن يفكر الفيلسوف حتى تصبح الشوكة اليمين متاحةً، ثم ينتظر لتتاح الشوكة اليسارية، من ثم الأكل لعشر ثواني ثم وضعهم جانباً.

يبدو ذلك الكلام منطقياً أليس كذلك؟

بالطبع لا؛ لأنّه من الممكن أن يقدم كل من الفلاسفة باحتلال الشوكة اليمينية لهم، وبالتالي لن تتاح لهم أبداً الشوكة اليسارية على الإطلاق وسوف يموتون جميعهم جوعاً، وهذا ما يسمى بساعة الموت.

كانت أحد الحلول التي قدمها عالم الحاسوب الهولندي Dijkstra، هو جعل فترات الانتظار عشوائيةً للعمليات، بحيث تكون احتمال أن تتساوى ضعيفةً جداً، أو عن طريق تتبع حالة الفيلسوف (العملية) هل هو جائع؟ يفكر؟ يأكل؟ بحيث يأكل الجائع في حال كان جاريه ليسا جائعين.


مشكلة مدخني السجائر

يحكى أنّ هناك ثلاثة مدخنين، وشخص رابع غير مدخن. المدخن الأول في جعبته التبغ، الثاني لديه ورق السجائر، والثالث أعواد الثقاب.

مهمة الرابع هي جمع هؤلاء المدخنين، وتوزيع الموارد فيما بينهم ليتسنى لهم تدخين السجائر، ولكن هذا الرابع لا يقدم سوى موردين لهؤلاء الثلاثة، وبشكل عشوائي أيضاً.

يعني أنّه قد يوزع التبغ و الورق فقط، فيقوم حامل أعواد الثقاب بالتدخين، من ثم يقوم أيضاً بتوزيع التبغ والورق، بالتالي لن يدخن سوى الثالث، ويدخل الآخران ساعة الموت.

الحل:

يجب أن يحسب الرابع ماذا وضع من قبل ومن قام بالتدخين. فمثلاً بعد تدخين الشخص الثالث، يضع الرابع أعواد الثقاب والتبغ من أجل الثاني، وأعواد الثقاب والورق من أجل الأول ومن ثم يتم التكرار.

يمثل الشخص الرابع هنا النظام، أمّا المدخنون فيمثلون العمليات.


مشكلة القراءة والكتابة

كلنا نعلم أنّ الحاسب يمكنه القراءة والكتابة على الذاكرة، كما يمكن إجراء عملتي قراءة معاً، ولكن لا يمكن إجراء عمليتي كتابة في وقت واحد. لذا، قامت بعض برامج مثل: excel و oracle باحتكار العملية أثناء التعديل بحيث لا يمكن لأي عملية الوصول حتى فك الاحتكار.

المشكلة الأولى:

إذا كانت هناك عملية كتابة، وعملية قراءة، وتم احتكار عملية القراءة، ستنفذ عملية القراءة في الحال، دون إعطاء هذه الصلاحية للكتابة.

المشكلة الثانية:

في حال استبدال الأدوار، أي كان هناك عملية قراءة، وجاءت عملية كتابة، فلا يجب أن تنتظر عملية قراءة ثانية وثالثة ورابعة؛ لأنّ ذلك يؤدي إلى حرمانها. لذا، يجب أن تبدأ عملية الكتابة فور وصولها، بينما تنتظر عمليات القراءة.

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


مشكلة المنتج والمستهلك

هي عبارة عن عنصرين، منتج للبيانات، ومستهلك للبيانات يوجد فيما بينهما خازن. يجب على المنتج ملء الخازن وعندما ينتهي يذهب للنوم، ويتم إيقاظه في حال تم إفراغه كلياً. أمّا المستهلك، فالعكس تماماً، يتم إيقاظه في حال الامتلاء، والنوم في حال الإفراغ، ولكن ذلك قد يقود إلى الاختناق، لماذا؟

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

كانت أحد الحلول هي استبدال الإيقاظ بإشارة ممتلِئ أو فارغ -لها اسم في عالم البرمجة- وهنا فقط في حال تمت إضافة عنصر أو فقد عنصر سيرسل ذلك على شكل إشارة إلى المنتج والمستهلك، لتقضي بذلك على حالة الاختناق.

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

1

شاركنا رأيك حول "الحلاق النائم وعشاء الفلاسفة … أهم مشكلات المعالجة في أنظمة التشغيل منذ نشأتها"

  1. Hashem Al Masharika

    جهد مشكور ولكن أسلوب التعبير عن هذه الحالات أو المشاكل غير واضح بتاتاً وغير مفهوم بالكاد فهمت بعضها بعد قراءة النص عدة مرات

  2. Mohammed Masri

    الموضوع شيق ومميز
    لكن الشرح غير كافي لأغلب النقاط, إلا النقطة الأولى (الحلاق والزبائن)

أضف تعليقًا