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

أحد أهم النظريات التي تقوم عليها أنظمة التشغيل اليوم هي نظرية حل “مشكلة عشاء الفلاسفة”.

ما هي المشكلة؟

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

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

 

diningphilosophers

أحد الحلول قد يكون الخوارزمية الآتية:

  1. فكر حتى تكون الشوكة التي على يسارك متاحة.
  2. أمسك بالشوكة التي على يسارك.
  3. فكر حتى تكون الشوكة التي على يمينك متاحة.
  4. أمسك بالشوكة التي على يمينك.
  5. أبدأ بالأكل لمدة 10 ثواني.
  6. ضع الشوكة التي في يمينك على الطاولة.
  7. ضع الشوكة التي في يسارك على الطاولة.
  8. أفعل هذا مجددا.

قد يبدو هذا الحل منطقيا من الوهلة الأولى، ولكنه ليس كذلك. لماذا؟ لإنه يعرض النظام إلى ما يسمى بساعة الموت. وهي حين لا يستطيع أي من الفلاسفة الأكل.

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

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

 

هناك العديد من النظريات لحل هذا التحدي، منها الحل الذي قدمه عالم الكمبيوتر الهولندي Dijkstra تعرف عليه من الرابط التالي :
http://www.isecur1ty.org/?p=6573