في المقال السابق تطرقنا إلى مشكلة شهيرة ساهمت في عمل أنظمة التشغيل التي نراها اليوم.

تستطيع رؤية المقالة السابقة من هنا: http://www.isecur1ty.org/?p=6560

سنشرع أولا في شرح حلين للنظرية ومن ثم سنوضح كيف تم الإستفادة منها في أنظمة التشغيل.

حل التسلسل الهرمي للموارد:

هذا الحل قدمه عالم الكمبيوتر الهولندي Dijkstra ، ويقترح أن يتم ترقيم الموارد (الشوك في هذه الحالة) من الرقم 1 إلى الرقم خمسة. فإذا أراد أي من الفلاسفة أخذ أحد الشوكتين يجب أن يبدأ بالشوكة ذات الرقم الأقل، ومن ثم يأخذ الشوكة ذات الرقم الأعلى. وأما وضع الشوكتين بعد الإنتهاء، فلا يهم الترتيب.

دعونا نجرب هذا الحل، لنفرض أن أربعة من الفلاسفة (من الرقم 1 إلى 4 كما في الصورة) أخذوا الشوك التي أمامهم، لن يستطيع الفيلسوف الخامس أخذ الشوكة الخامسة لإنها بالتأكيد سيكون رقمها أعلى من الشوكة الآخرى (والتي أُخذت من الفيلسوف الأول). الآن سيقوم الفيلسوف الذي بجانب الفيلسوف الخامس (الفيلسوف الرابع) بأخذ الشوكة والأكل. وهكذا، حين ينتهي سيأخذ الشوكة رقم 4 الفيلسوف رقم 3 ويبدأ بالأكل، وهكذا.. وبهذه الطريقة لن نصل إلى ساعة الموت ولن يحصل تجويع لأحد الفلاسفة.

 

dphil1

 

حل النادل:

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

 

كيف تم الاستفادة من هذه المشكلة في أنظمة التشغيل؟

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