deadlock starvation operating-system computer-science process thread CPU

Deadlock vs. Starvation

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

تم التحديث في 2024-07-07
تعديل على GitHub
Deadlock vs. Starvation

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


Deadlock

قبل ما نشوف ايه هي الـ Deadlock من الناحية الـ Technical تعالوا نفهمها سوا بشكل بسيط من خلال المثال ده:

دلوقتي ولنفترض ان عندنا اوضتين وكل اوضة ليها باب ومفتاح خاص بيها , فعندنا محمود دخل الاوضة بتاعته والباب اتقفل عليه بالقفل , وعندنا يوسف دخل الاوضة التانية والباب اتقفل عليه كذلك بالقفل , طب ايه رأيكم لو محمود كان معاه مفتاح اوضة يوسف بالخطأ ويوسف معاها مفتاح اوضة محمود ؟

كل واحد فيهم عاوز يخرج من الاوضة اللي هو فيها ولكن كل واحد مش هيعرف يفتح اوضته لان المفتاح اللي عاوزه مع التاني فبالتالي بنقول ان حصل هنا Deadlock.

طب كـ Technical باه الكلام ده بيحصل ازاي او بنترجمه لايه ؟


خلونا نتخيل إن عندنا Network System فيه عمليتين (Processes) A و B وكل عملية عايزة تطبع على طابعتين P1 و P2 الاتنين مع بعض.

  • العملية A حجزت الطابعة P1 ومستنية الطابعة P2.
  • العملية B حجزت الطابعة P2 ومستنية الطابعة P1.

في الحالة دي، العملية A مش هتقدر تكمل لأن الطابعة P2 محجوزة من العملية B، والعكس صحيح. ده بيعمل Deadlock وكل عملية واقفة مستنية التانية.


Starvation

قبل ما نشوف ايه هي الـ Starvation من الناحية الـ Technical تعالوا نفهما سوا بشكل بسيط من خلال المثال ده:

مثال على ده لو احنا في مستشفى او في عيادة , وفيه طابور اللي بيجي الاول بيدخل الاول , ولكن فيه استثناء هنا الا وهو ان الحالات الطارئة تقدر تدخل وليها اولوية عن المرضى اللي موجودين.

في الحالة دي لو فيه يوم كان عدد حالات الطوارئ كبير جدا , وقتها المرضى هيحصلهم Starvation ومش هيدخلوا للدكتور لان كل ما هيجي الدور على واحد , هيكون فيه حالة طارئة بتدخل.

مثال تاني على ده ولنفترض ان عندنا مجموعة من النباتات وفيه مصدر مياه بيعدي عليهم بالترتيب وده الـ Resource اللي هم محتاجينه ولكن تخيلوا معايا اننا حاطين مثلا جمب مصدر المياه ده في الأول نوع نبات معين بيستهلك مياه كتيرة اوي.

ده هينتج عنه ايه ؟ هينتج عنه ان على ما نوصل لباقي النباتات مش بعيد منلاقيش مياه خالص , والنباتات دي تموت فيحصلها Starvation وده لان فيه نباتات استنفذت الـ Resource اللي هو المورد قبل ما يوصل ليهم.

طب كـ Technical باه الكلام ده بيحصل ازاي او بنترجمه لايه ؟

خلونا نتخيل إن عندنا نظام تشغيل بيدير مجموعة من العمليات (Processes)، وكل عملية ليها أولوية معينة. والنظام بيستخدم خوارزمية زي Priority Scheduling، واللي بدورها بتدي الأولوية العالية للعمليات ذات الأولوية العالية.

وعندنا ثلاث عمليات: P1، P2، وP3.

  • الـ P1 ليها أولوية عالية جدًا.
  • الـ P2 ليها أولوية متوسطة.
  • الـ P3 ليها أولوية منخفضة.

لو العمليات اللي ليها أولوية عالية (زي P1) دايمًا بتجي طلباتها كتيرة وبتكون شغالة، العمليات اللي أولويتها منخفضة (زي P3) هتفضل مستنية لفترة طويلة جدًا جدًا، وده بيخلق حالة الـ Starvation.

فكل ما P1 بتخلص جزء من شغلها، بيجي طلب جديد ليها وبتاخد الأولوية تاني وهكذا ولو افترضنا ان مجاش طلب جديد ليها , فالـ P2 هتاخد الطلب وبعدين ممكن تيجي P1 تاني وده ممكن يخلي P3 متقدرش تحصل على الـ Resource او المورد اللي هي عاوزاه نهائيًا وده اللي بنسميه الـ Starvation.


مواضيع ذات صلة
Operating Systems

اشترك في النشرة البريدية

احصل على أحدث المحتوى والأخبار مباشرة في بريدك الإلكتروني

🔒 نحترم خصوصيتك. لن نشارك بريدك الإلكتروني مع أي طرف ثالث.