Professional Documents
Culture Documents
Os 3rd Edition 2016sep18muteb
Os 3rd Edition 2016sep18muteb
Os 3rd Edition 2016sep18muteb
Operating Systems
01سبتمرب 6102
اللَّ ُه َّم ا ْغ ِف ْر الخي وزميلي متعب الرويلي زميلي جبامعة اجلوف سابقا
2
مقدمة
احلمد هلل الذي علم ِبلقلم علم اإلنسان ما مل يعلم ،والصالة والسالم على الرسول األكرم وعلى آله وصحبه وسلم ،وبعد
لقد متت طباعة النسخة االوىل من هذا الكتاب يف عام ،0202نشر من قبل :مكتبة الرشد( ،الرَيض) ،من 583صفحة.
مث مت نشر الطبعة الثانية كطبعة الكرتونية جمانية حىت تعم الفائدة ويصل الكتاب لكل طالب علم ،وقد كان ذلك يف العام .0205وقد مت
حتميل أكثر من 02ألف نسخة من الكتاب ،مما شجع على إطالق الطبعة الثالثة الكرتونيا ِبذن هللا يف هذا العام ( .)0202مت اجراء
بعض التعديالت والتنقيحات على الكتاب يف هذه الطبعة مشلت اآليت::
Galvin, P.B., G. Gagne, and A. Silberschatz, Operating system concepts. 2013:
John Wiley & Sons, Inc.
Tanenbaum, A.S. and H. Bos, Modern operating systems. 2014: Prentice Hall
Press.
استخدمت مراجع أخرى اثبتها يف قائمة املراجع ،وهي كلها مراجع أجنبية.
3
مقدمة الطبعة االوىل والثانية
احلمد هلل الذي علم ِبلقلم علم اإلنسان ما مل يعلم ،والصالة والسالم على الرسول األكرم وعلى آله وصحبه وسلم ،وبعد
لقد أصبح احلاسب مستخدما يف كل جمال ويف كل مكان ،فهو يتحكم يف السيارة ويف الطائرة ،وهو يف اجليب ،وهو يف املطبخ
وهو ِبملصنع وهو ِبلصرافات اآللية يتحكم يف أموالنا ،وهو يف األرصاد اجلوي يتنبأ ِبألحوال اجلوية ،وهو يف اإلذاعة والتلفزيون يعرض
الربامج واألخبار وهو يف املكتب يدير أعمالنا وهو يف البيت يساهم يف الرتفيه واالتصاالت ..اخل..
ال غىن لنا عن احلاسب ،وال غىن للحاسب عن نظام التشغيل .فهو قلب احلاسب وحمركه وبدونه الميكن التعامل مع احلاسب
وال تشغيله وال استخدامه .لذلك معرفة نظام التشغيل وفهم طريقة عمله من األساسيات اليت يبىن عليها الكثري من علوم احلاسب ،فكل
دارس يريد سرب أغوار احلاسب والتمكن منه البد له من معرفة نظام التشغيل معرفة متعمقة ومتفحصة توسع إدراكه ومتكنه من التعامل مع
احلاسب ِبلصورة املثلى.
جاء هذا ال كتاب ليخدم هذا الغرض ،فهو يشرح مفاهيم نظم التشغيل وطريقة عمله ،وقد قسم الكتاب إىل أحد عشر ِبِب هي
كما يلي:
مفهوم نظام التشغيل يف الباب األول ،احلاسب وبنية نظام التشغيل يف الباب الثاين ،العمليات كانت ِبلباب الثالث ،اجلدولة
وكيفية تقسيم زمن املعاجل بني العمل يات أفردان هلا الباب الرابع ،بينما حتدثنا عن اخليط وبرجمته يف الباب اخلامس ،وِبلباب السادس حتدثنا
عن تزامن العمليات وكيفية تعاون عدد من العمليات إلجناز عمل واحد ،اختناق العمليات على املوارد وكيفية الوقاية منه ومعاجلته ِبلباب
السابع ،أما كيف يدير نظام التشغ يل الذاكرة الرئسية فقد أفردان هلا الباب الثامن ،ويف الباب التاسع كان املوضوع كيف يستخدم نظام
التشغيل القرص الصلب كإمتداد للذاكرة الرئيسية فيما يسمى الذاكرة االفرتاضية .أجهزة الدخل واخلرج اليت تتحكم يف دخول وخروج
املعلومات من وإىل احلاسب وكيف يتحكم نظام التشغيل فيها كانت يف الباب العاشر .طرق ختزين البياانت وحفظها يف شكل ملفات
وكيف يقوم نظام التشغيل بذلك كانت ِبلباب احلادي عشر .ويف الباب الثاين عشر حتدثنا عن النظم املوزعة وكيف يدير نظام التشغيل
جمموعة معاجلات أو أحهزة حبيث تبدو للمستخدم كأهنا نظام واحد إفرتاضي.
يف اخلتام نقول أن هذا الكتاب هو جهد املقل ،فإن كانت فيه أخطاء فمن أنفسنا ومن الشيطان وإن وفقنا فيه فمن رب
العاملني ،نسأل هللا أن يقينا به حر جهنم وينفع به طالبنا يف اجلامعات العربية.
أخريا ،ال خيلو عمل من أخطاء والكمال هلل وحده ،لذلك نرجو من القارئ الكرمي مساعدتنا ِبلتصويبات واإلقرتاحات اليت
تفيدان يف الطبعة القادمة إبذن هللا.
4
:هذا الكتاب متاح جماان كنسخة الكرتونية على الرابط التايل
https://www.researchgate.net/publication/306960494_Operating_Systems_In_Arabic
:توجد كتب أخرى ذات صلة ابملوضوع متاحة على الروابط التالية
https://www.researchgate.net/publication/307955739_Parallel_Programming
5
6
جدول احملتوَيت املختصر
Contents
مقدمة 0 ...................................................................................................................
ملحق (ب) :التحكم يف العمليات على لينكس (توزيعة أوبونتو) 052 ........................................................
7
جدول احملتوَيت
Contents
مقدمة 2 ......................................................................................................
8
.0.00متارين غري حملولة 22 ......................................................................................
9
.1.1العمليات يف ويندوز 12 .....................................................................................
10
.3.2.0حمرر النصوص333 ..................................................................................................
.3.2.0خمدم الويب 333 ....................................................................................................
11
.1.6مفهوم االختناق 601 .......................................................................................
12
.1.0يف املاضي 612 ............................................................................................
13
.00.6تعريف امللف 036 .......................................................................................
.00.1احلماية032 ..............................................................................................
ملحق (ب) :التحكم يف العمليات على لينكس (توزيعة أوبونتو) 022 ..............................................
14
الباب األول :املكوانت املادية
15
الباب األول
املكوانت املادية
.0.0أجيال احلاسبات
بدأت احلاسبات قدميا بال برامج وبال نظم تشغيل ،وكان العمل كله يتم بلغة اآللة (شفرة مكونة من أصفار
وآحاد) ،وِبلتايل ال يتعامل مع احلاسب إال املهندسني املختصني .كان احلاسب يف ذلك الوقت يستخدم البطاقة املثقبة
لإلدخال والطابعة لإلخراج ،فال لوحة مفاتيح وال شاشة وال غريها.
بدأ العمل بتصميم برامج تؤدي جزء من مهام املشغل وبدأت أعباؤه تقل تدرجييا ،إىل أن مت إحالل كامل للمشغِل
بربامج تقوم بكل مهامه السابقة ،فكانت نظم التشغيل اليت وفرت الكثري من الوقت املستغرق للتعامل مع احلاسب
ليستفاد منه يف تطوير نظام التشغيل والتطبيقات األخرى.
16
شكل رقم :0-0أول حاسب مركزي .]0[ 0338
مث تطورت نظم التشغيل من نظم تكتب أوامرها يف شكل نصوص مثل DOSإىل نظم تشغيل رسومية يف
شكل أيقوانت ورموز يستطيع كل شخص التعامل معها ،وِبلتايل أصبح الكل يتعامل مع احلاسب بكل سهولة ويسر.
اآلن وبعد التطور الكبري يف صناعة املكوانت املادية والربامج أصبحت أجهزة احلاسب حتمل على الكف
ونظم التشغيل والربامج تستخدم بنقرة من الفأرة أوضغطة على لوحة املفاتيح أو كلمة على املايكروفون.
17
شكل رقم :4-0قانون بيل (.]0[ )Bell’s Law
18
.0.5.0شرح تعريف نظام التشغيل
املوارد (:)resources
موارد احلاسب تشمل املكوانت املادية من لوحة مفاتيح وشاشة وطابعة ،وغريها ،وكذلك امللفات والربامج
وصفحات الويب وما شابه.
يتحكم نظام التشغيل يف تشغيل الربامج األخرى ويدير عملية تنفيذها لتفادي األخطاء وجتنب االستخدام
الغري مرشد ملوارد احلاسب ومحاية الربامج عن بعضها البعض وعن نظام التشغيل.
19
أن نظام التشغيل هو ذلك اجلزء الذي يتعامل ويدير املكوانت املادية مباشرة ،وهو النواة ( )kernelاليت ال
نراها و ال نتعامل معها مباشرة ،لكننا ال نستغين عن خدماهتا اليت هي سبب تشغيل بقية الربامج والواجهات اليت
نتعامل معها.
البعض يضيف إىل نظام التشغيل الواجهة الرسومية اليت من خالهلا نستخدم النظام.
.0.3.0املكوانت املادية
يتكون احلاسب من معاجل أو أكثر ،ذاكرة رئيسية ،أجهزة ختزين دائم مثل القرص الصلب ،أجهزة دخل
وخرج ،نواقل لتوصيل هذه األجهزة مع بعضها.
.0.3.0نظام التشغيل
.0.3.0.0النواة
تدير النواة مكوانت احلاسب املادية .وتنقسم إىل مخسة أجزاء رئيسية هي:
جزء مسئول عن إدارة املعاجل يسمى مدير العملية.
جزء مسئول عن الذاكرة الرئيسية يسمى مدير الذاكرة.
20
جزء مسئول عن إدارة أجهزة الدخل واخلرج يسمى مدير األجهزة.
جزء مسئول عن أجهزة التخزين ويسمى مدير امللفات.
جزء مسئول عن التعامل مع الشبكة يسمى مدير الشبكة.
.0.3.0.0وجهات نظام التشغيل
هنالك عدة طرق يستطيع املستخدم التعامل من خالهلا مع نظام التشغيل .منها:
واجهة املستخدم الرسومية ().)Graphical User Interfaces (GUI
مرتجم األوامر ().)command line interpreter (CLI
.0.3.0.0.0واجهة املستخدم الرسومية ()GUI
تعترب أعلى مستوى حيث نتعامل معها مباشرة عرب اإليقوانت والقوائم والنوافذ اليت نشاهدها على سطح
املكتب .هذه الواجهة تسمح للمستخدم ِبلتعامل مع نظام التشغيل بطريقة سهلة ومالئمة له ،فمثال يستطيع املستخدم
طلب أمر بنقرة على املاوس .من أمثلة واجهات املستخدم سطح املكتب يف ويندوز ،و X-Windowيف لينكس.
يف هذا املستوى ال يعلم املستخدم وال يهتم بتفاصيل النواة .ال يعترب هذا املستوى جزء من نظام التشغيل بل
يعترب مكون برجمي أضيف ليمكن املستخدم من التعامل مع نظام التشغيل.
.0.3.0.0.0مرتجم األوامر ()CLI
يستطيع املستخدم من خالل هذه الواجهة كتابة األوامر يف انفذة أوامر (حمطة ( )terminalأو انفذة حتكم
( ،))console windowللتفاعل مع نظام التشغيل .حيث يكتب املستخدم االوامر على سطر اوامر ويتلقي رد
من النظام .وحتتاج كل مهمة أمر أو سلسلة من األوامر لتنفيذها ،شكل .2-0 ،3-0
21
شكل رقم :2-0حمطة على أوبونتو.
إذا احتاجت برامج املستخدم خدمة معينة من نظام التشغيل تستخدم ما يسمى نداء النظام ( system
.)callذلك ألن برامج املستخدم غري مسموح هلا ِبلوصول املباشر للمكوانت املادية ،وإمنا نواة نظام التشغيل هي
اليت تستطيع فعل ذلك .هبذه الطريقة نضمن سالمة املكوانت املادية ومحايتها من الربامج التطفلية ومن االستخدام
اخلاطئ هلا .ولكن احياان حتتاج بعض تطبيقات املستخدم التعامل مع املكوانت املادية ،وألن هذه التطبيقات ال
تستطيع الوصول للمكوانت املادية مباشرة ،ستقوم إبرسال طلب إىل نظام التشغيل ليمدها ِبملعلومات اليت تريد من
املكون املادي املعني.
التعامل مع املكوانت املادية يوفرها نظام التشغيل يف شكل خدمات ،حيث يتم الطلب يف شكل نداء
النظام املناسب .حيث يوجد لكل خدمة نداء نظام خاص هبا.
يتم تنفيذ نداء النظام يف وضع النواة ( .)kernel modeولكل استدعاء نظام رقم مرتبط به .يرسل هذا
الرقم إىل النواة ليعرف نظام التشغيل ما هو استدعاء النظام املطلوب .عندما يرسل املستخدم هذا الرقم فهو يف
احلقيقية يستدعى روتني مكتبة ( ،)library routineفيقوم الروتني إبرسال مقاطعة ( )issues a trapلنظام
التشغيل ،مث ميرر رقم االستدعاء ومعطياته إىل النواة (ِبستخدام مسجالت معينة) .تقوم النواة بتنفيذ الروتني وترسل
النتائج للمستخدم عرب مسجل معني .إذا كانت النتائج كبرية احلجم (ال يستطيع املسجل ختزينها) ،سرتسل بطريقة
أخرى مثل استدعاء الروتني copy_to_userلتخزينها يف موقع ما ِبلذاكرة.
أن نداءات النظام هي واجهة برجمية للخدمات اليت يوفرها نظام التشغيل وغالبا ما تكتب بلغة عالية
املستوى مثل .C/C++ومعظم الربامج تصل هلذه اخلدمات عن طريق واجهة برجمة تطبيقية (.)API
22
هنالك ثالث واجهات برجمية مشهورة لنداءات النظام هي:
معظم نظم التشغيل اليوم حتتوي على كم هائل من نداءات النظام .مثال يوجد يف لينكس حوايل 503نداء نظام ،ويف
FreeBSDتوجد حوايل 552نداء نظام.
كم استدعاء نظام يوجد يف ويندوز XP؟ وهل خيتلف عن عدد نداءات النظام املوجودة يف نسخ ويندوز األخرى (مثل فيستا،
ويندوز .... ،02اخل)؟ أذكر نداءات النظام املشهورة يف ويندوز ؟
كان دور نظام التشغيل هو حتميل برانمج واحد وتنفيذه ،مث بعد إكتماله ،يتم حتميل برانمج آخر وتنفيذه،
وهكذا .هذا النوع من نظم التشغيل ال يستفيد من املوارد استفادة كاملة (غري كفؤ) ،ذلك ألنه حيمل برانمج واحد كل
مرة ،ويظل هذا الربانمج يعمل إىل أن ينتهي ،خالل عمل هذا الربانمج قد تكون هنالك موارد متاحة لكن ال يُستفاد
منها ألنه ال يوجد سوى برانمج واحد ِبلذاكرة .أيضا يستغرق حتميل الربانمج وقتا ليس ِبلقصري ،مما يؤثر على أداء
احلاسب .يسمى هذا النوع من نظم التشغيل أحادي املهام ،حيث يوجد برانمج واحد ِبلذاكرة ِبإلضافة إىل نظام
التشغيل ،شكل (.)2-0
23
نظام التشغيل
برامج املستخدمني
هنا يتعامل نظام التشغيل مع عدد من الربامج املخزنة ِبلقرص ،حيث حيمل جزء من هذه الربامج ِبلذاكرة
(شكل .)5-0يبدأ نظام التشغيل بتنفيذ أحد هذه الربامج يف املعاجل .إذا توقف هذا الربانمج عن التنفيذ ألي سبب،
يقوم نظام التشغيل بتشغيل برانمج آخر يف املعاجل .هبذه الطريقة نكون قد استفدان من زمن املعاجل وجعلناه مشغوال
معظم الوقت .فالغرض من تعدد الربجمة وجود أكثر من برانمج ِبلذاكرة حبيث جيد املعاجل دائما برانمج جاهز للتنفيذ.
نظام التشغيل
مهمة 0
مهمة 0
مهمة 5
مهمة 4
مهمة 3
شكل ( :)5-0شكل الذاكرة يف نظام التشغيل متعدد الربامج.
هي استمرار منطقي لتعدد الربامج .يقوم املعاجل خبدمة العديد من املهام وذلك إبعطاء كل مهمة فرتة زمنية
قصرية داخل املعاجل ،ويتنقل املعاجل بني املهام بسرعة عالية جدا لدرجة أن كل مهمة تعمل وكأهنا تستخدم املعاجل
لوحدها .إذا احتاجت مهمة أن تنتظر عملية دخل أو خرج ،ميكن االنتقال ملهمة أخرى مما يكسب النظام استغالل
جيد لزمن املعاجل.
.0.2.4مثال تشبيهي
24
إذا كنت متتلك سيارة أجرة (املورد) ،وأردت االستفادة منها استفادة قصوي فلن تستطيع ،ألنك ستنام
وستأكل وستقوم مبهام أخرى غري العمل (قيادة السيارة) .إذن سيكون هنالك أوقات تكون فيها السيارة غري مستخدمة
( ،)idleهذا يشبه نظم التشغيل احادية املهام.
أما إذا كانت السيارة لثالث أشخاص مثال ،فيمكنهم التناوب يف قيادهتا ،وِبلتايل ميكن أن تكون السيارة
تعمل 04ساعة ِبليوم 5 ،أَيم ِبالسبوع .يكون هنالك شخص من الثالث يقوم بقيادة السيارة مث إذا ما أحتاج أن
يراتح أو أن أيكل مثال يقوم شخص آخر من الثالث بقيادهتا (الشخص اجلاهز ،أي ليس لديه أي إلتزامات أخرى)،
فهذا يشبه تعدد الربامج.
أما إذا كانت السيارة لثالث أشخاص ،وحددان أن لكل شخص فرتة زمنية معينة (مثال لكل شخص ثالث
ساعات) يقود فيها السيارة ،فسيقود الشخص األول السيارة الثالث ساعات األوىل مث الثاين ثالث ساعات أخرى مث
الثالث ثالث ساعات ،مث مرة أخرى األول ثالث ساعات ،وهكذا ،نقسم زمن استخدام السيارة بني مالكيها .هذا
يشبة التقسيم الزمين يف نظم التشغيل .حيث متثل السيارة املعاجل أو موارد احلاسب والثالث أشخاص يشبهوا الربامج اليت
تتشارك يف استخدام هذه املوارد.
ميكروسوفت ويندوز ( :)windowsنسبة عالية من احلاسبات تستخدم ويندوز واليت تعمل على معاجلات
إنتل واملعاجلات املتوافقة معها .توجد منها عدة نسخ ،من ويندوز ،مثل:
25
)Windows 10 (2015
)Windows 10 (Anniversary Update) (2016
From (https://en.wikipedia.org/wiki/List_of_Microsoft_operating_systems).
BSD o
وهو أول نظام تشغيل يكتب ِبلكامل بلغة برجمة عالية ( ،)high level languageفهو مكتوب بلغة
.C
ماكنتوش ( :)Macصمم ليعمل على أجهزة أبل ماكنتوش اليت تنتشر يف دور الطباعة والنشر ،وهو قوي
وسهل االستخدام وقد أخذت ويندوز فكرة النوافذ وسطح املكتب من هذا النظام حيث كان أول نظم
تشغيل يدعم الواجهات الرسومية وااليقوانت والقوائم على سطح مكتب.
توزيعات لينكس ( :)Linuxهي نسخة مصغرة من ينكس صممت لتعمل على احلاسبات الشخصية ،وهو
مفتوح املصدر حيث يتيح حرية تعديل الشفرة وإعادة التوزيع .ويوجد منها مئات التوزيعات أحدثها وأشهرها
توزيعه أوبونتو اليت تدعم كل لغات العامل واجهة وكتابة (مبا فيها اللغة العربية).
/https://www.uswitch.com/mobiles/guides/mobile-operating-systems
26
http://www.ubuntu.com/phone
27
تركز أنظمة تشغيل هذا النوع من احلاسبات على التقسيم الزمين ،فهنالك مستخدمني كثر متصلني بطرفيات
يريدون االستفادة القصوى من موارد حساب مركزي واحد ،وِبلتايل على نظام التشغيل إدارة اجلهاز املركزي خلدمة هذا
الكم من املستخدمني حبيث يكون زمن االستجابة لكل مستخدم سريع (أقل من اثنية) ،وحىت يشعر كل مستخدم أن
اجلهاز املركزي خيدمه لوحده.
.0.8.0احلاسبات الشخصية
هي حاسبات غالبا تكون مبعاجل واحد وشاشة ولوحة مفاتيح وختدم شخصا واحدا.
تركز انظمة تشغيل هذا النواع من احلاسبات على خدمة مستخدم واحد ودعم تعدد الربامج حبيث يستطيع
املستخدم تشغيل أكثر من برانمج يف وقت واحد .أيضا يهدف هذا النوع من نظم التشغيل على توفري بيئة مالئمة
للمستخدم واستجابة سريعة لطلبات املستخدم.
أمثلة هلذا النوع نظام التشغيل ويندوز ،ماكنتوش ،لينكس ،و .FreeBSDهذا النوع يسمى مستخدم
واحد متعدد املهام ()Single user Multi-task
نظم تشغيل القدمية للحاسبات الشخصية مثل دوس ( Disk Operating System
) .)(DOSال تدعم تعدد الربجمة ،فهي ال تنفيذ أكثر من برانمج يف نفس الوقت ،ونطلق عليها
مستخدم واحد أحادي املهام (.))Single user Single task
28
.0.8.5األجهزة متعددة املعاجلات ()Multiprocessors
بعض الربامج حتتاج سرعة عالية حبيث ال تكفي سرعة املعاجل الواحد مهما بلغت ،احلل هو استخدام أكثر
من معاجل لتنفيذ املهام وقد تتواجد عدة معاجلات يف صندوق واحد فيما يسمى تعدد املعاجلات .ويتميز تعدد املعاجلات
أبنه:
قليل التكلفة مقارنة ِبألنظمة األخرى (حيث تتشارك املعاجلات يف بقية موارد اجلهاز ،فالذاكرة مشرتكة
واللوحة األم واحدة).
سريع (ألن تكلفة االتصال قليلة ،فغالبا تستخدم املعاجلات النواقل الداخلية يف تبادل املعلومات).
بسيط ألنه يستخدم ذاكرة مشرتكة ،فكل املعاجلات تتشارك فيها.
زَيدة اإلعتمادية :إمكانية االستمرارية حىت ولو تعطلت بعض املعاجلات.
أصبحت احلساِبت ذات املعاجلات متعددة النواة ( ،)multi-coreمثل املعاجل ثنائي النواة ()dual core
واملعاجل رِبعي النواة ( ،)quad coreمنتشرة ومتوفرة وقد حلت حمل احلاسبات أحادية املعاجل .السبب يف ظهور
تعدد املعاجلات هو اخنفاض سعر املعاجلات واحلاسبات الشخصية .نظم التشغيل اليت تدير هذا النوع من النظم تنقسم
إىل نوعني مها:
معاجلات مربوطة ِبحكام ( )tightly coupledوتتشارك الذاكرة ونواقل الدخل واخلرج( .أو ممر
البياانت).
يوجد معاجل رئيسي واحد يتحكم يف النظام وينفذ مهمة رئيسية كبرية ،بينما بقية املعاجلات تنفذ ما أيمرها به
هذا املعاجل الرئيسي ،فهو قد يقسم املهمة الكبرية إىل أجزاء صغرية يوزعها على بقية املعاجلات مث جيمع النتائج بعد
التنفيذ.
29
.0.8.4األنظمة املوزعة
توزيع العمل عرب الشبكة إىل عدة حاسبات ،هذه احلاسبات قد تكون قريبة أو بعيدة ،وكل حاسب لديه
معاجله ،ذاكرته ،وقرصه وأجهزته الطرفية اخلاصة به .وقد تكون هذه األجهزة متباينة يف املكوانت املادية ونظم التشغيل
اليت تديرها.
امليزات:
التشارك يف املوارد.
زَيدة سرعة التنفيذ.
توزيع احلمل بني هذه احلاسبات (.)load balancing
العيوب:
زمن االتصال بني أجزاء النظام قد يؤثر على أداء النظام ككل.
30
.0.8.2األجهزة ذات الزمن احلقيقي ()Real-time
هي حواسيب موجودة يف أجهزة حتكم مثل:
https://marine.rutgers.edu/pubs/private/Glenn_2000/tos2/figure1.jpg
31
.0.8.5األجهزة الكفية ()hand held
هذه األجهزة صغرية غالبا ما حتمل يف اجليب أو يف الكف ومن هنا جاءت تسميتها ِبألجهزة الكفية
( )hand heldأو اجليبية ( ،)pocket PCوتتصف ِبآليت:
حجم صغري.
ذاكرة حمدودة.
معاجل بطيء.
شاشة صغرية.
بطارية حمدودة التشغيل.
نظام التشغيل هلذا النوع من األجهزة يدعم احملاداثت التلفونية والتصوير الرقمي وتبادل البياانت مع األجهزة
األخرى عرب الشبكات الالسلكية والبلوتوث .كما يهدف نظام التشغيل هنا على احملافظة على البطارية ،والتعامل مع
الشاشات الصغرية وتوفري طرق سهلة للتعامل مع األوامر عرب شاشة ملس (يف شكل نقرات دون احلاجة الستخدام لوحة
املفاتيح اليت يكون التعامل معها صعبا لصغر حجمها) .أمثلة لنظم التشغيل اليت تعمل على هذا النوع من األنظمة:
Palm, Windows Mobile, Symbian, Andriod.
الفرق بني احلاسبات الكفية واملضمنة أن األخرية ال ميكن إضافة برامج جديدة إليها ،فهي اتيت برباجمها خمزنة
يف ذاكرة ROMمن الشركة.
شرحية البطاقة الذكية تستطيع معاجلة البياانت ِبإلضافة إىل ختزينها .نظام التشغيل املصمم هلذا النوع من
األجهزة يعترب صغري جدا.
عناصر البطاقة الذكية (")Guo, Heng. "Smart Cards and their Operating Systems.
هي أجهزة سريعة وقوية تستخدم لتوفري خدمات لبقية األجهزة يف الشبكة .هنالك نظم تشغيل خاصة هبذه
االجهزة مثل .Ubuntu Server ،Windows Advanced Serverحيث تدعم هذه النظم أهم صفة
33
تتصف هبا املخدمات وهي إاتحة املشاركة بني املستخدمني وخدمة أكرب عدد منهم يف وقت واحد .مثال خمدم الويب
( )web serverيسمح لعدد كبري من املتصفحني من االتصال يف نفس الوقت وتصفح املواقع.
األنظمة أعاله متنوعة يف الشكل والغرض وِبلتايل البد من إدارة كل نوع بطريقة خمتلفة .وِبلتايل خيتلف
اهلدف من بناء نظام تشغيل ِبختالف هذه األنظمة.
.0.3ملخص
لقد بدأت احلاسبات من غري نظم تشغيل لذلك كان استخدامها حمصورا على املهندسني املختصني ،مث
تطورت صناعة املكوانت املادية والربامج إىل أن وصلنا لنظم تشغيل متكن أي شخص عادي من التعامل مع احلاسب
بكل سهولة ويسر.
التطور يف نظم التشغيل جعل تفاصيل املكوانت املادية املعقدة خمفية عن املستخدم وعن التطبيقات فيما
يسمى اآللة االفرتاضية ،فاملستخدم يتعامل مع برجميات متثل نظام التشغيل وكأهنا احلاسب ،يف بيئة سهلة االستخدام،
بينما تقوم طبقات نظام التشغيل ِبلعمل املعقد والتعامل مع املكوانت املادية دون أن يرى املستخدم هذه التفاصيل أو
يهتم هبا .التباين يف أنواع األجهزة واألغراض اليت من اجلها صممت ،ولدت تباين يف نظم التشغيل اليت صممت هلا،
فهنالك نظم تشغيل لكل نوع ،تتناسب معه وتديره ِبلطريقة املثلى.
.0.02متارين حملولة
أختار اإلجابة الصحيحة (قد تكون هنالك أكثر من إجابة صحيحة)
مدير الشاشة
34
املتصفح
رينكس
زينكس
ماك ()0
كثري التكلفة
سريع ()0
معقد
التشارك يف املوارد.
35
ال شيء مما ذكر ()0
ذاكرة كبرية.
معاجل سريع.
صغرية املعاجل
ذاكرهتا حمدودة
ال ميكن إضافة برامج جديدة إليها ()0
براجمها خمزنة يف ذاكرة ROMمن الشركة)0( .
ال يؤثر االتصال بني أجزاء النظام املوزع على أداء النظام .ال ،يؤثر
تعترب األنظمة اجملمعة ( )clusterجمموعة من األجهزة املتواجدة يف أماكن خمتلفة واملتصلة مع بعضها البعض بشبكة عاملية .ال
،متواجدة يف مكان واحد ومرتبطة بشبكة حملية.
يف تعدد املعاجلة ( )multiprocessorميكن تعريف املعاجلات املتماثلة أبهنا جمموعة من املعاجلات حبيث يكون فيها معاجل
رئيسي واحد يتحكم يف النظام وينفذ مهمة رئيسية كبرية ،بينما بقية املعاجلات تنفذ ما أيمرها به هذا املعاجل الرئيسي .ال ،
املعاجلات غري املتماثلة.
تعمل احلاسبات املركزية بنظام التقسيم الزمين ( .)Round Robinنعم
الفرق بني النظم املوزعة واحلاسبات اجملمعة التباين يف األجهزة والبعد اجلغرايف .نعم
األجهزة اليت تتكون من معاجل واحد متعدد األنوية ( ،)multi-coreميكن اعتبارها أجهزة متعددة املعاجلات .نعم
36
تعمل نظم التشغيل القدمية مثل DOSبنظام مستخدم واحد مهام متعددة ( .)Single user Multi-taskال ،
مستخدم واحد مهمة واحدة single user single task
تعمل ويندوز فيستا بنظام مستخدم واحد مهام متعددة ( .)Single user Multi-taskنعم
البطاقات الذكية هي كروت بالستيكية حبجم البطاقة االئتمانية ال حتتوي على معاجل .ال ،بل حتتوي على معاجل.
تعمل نظم التشغيل القدمية مثل DOSبنظام مستخدم واحد مهام متعددة (F .)Single user Multi-task
تعترب ويندوز فيستا مناسبة للمخدمات (F .)servers
قدميا كانت تستخدم البطاقة املثقبة لتثقيب املخرجات F
نظام التشغيل هو برانمج يدير بقية الربامج T
ميكن أن يتعامل املستخدم مع الربامج التطبيقية وموارد احلاسب من خالل سطح املكتب يف وويندوز T
ليس من الضروري أن أتعامل مع نواة نظام التشغيلT .
37
ما الفرق الرئيسي بني األنظمة الكفية واألنظمة املضمنة ؟ .04
وضح الفرق بني نظم التشغيل أحادية الربامج ونظم التشغيل متعددة الربامج مع ذكر مثال لنظام تشغيل .03
من كل نوع؟
كم نداء نظام يوجد يف ويندوز ،XPوهل هي نفس نداءات النظام لويندوز فيستا ؟ .00
أذكر أشهر نداءات النظام املوجودة يف ويندوز ، XPمث وضح كيف ميكن استخدامها داخل برامج .00
جافا وبرامج C++؟
هل هنالك فرق بني نداءات نظام ويندوز و( Windows APIوضح) ؟ .05
قم بتشغيل اسطوانة أوبونتو احلية ( ،)live CDلتجربة نظام تشغيل أوبونتو دون حتميله على جهازك، .04
قارن بينه وبني ويندوز XPأو بينه وبني ويندوز فيستا؟
أكتب األمر cmdيف قائمة ويندوز (تشغيل ،)runلتنتقل إىل مرتجم األوامر ( command .03
،)line interpreterوأكتب بعض أوامر DOSمثل cls, dir, time, date, verلتعرف
كيف ميكن للمستخدم اصدار اوامر نصية إىل نظام التشغيل ؟
كيف اكتب أوامر نصية يف توزيعة لينكس (مثل توزيعة أوبونتو) ؟ ِبستخدام الطرفية (.)terminal .02
قم بفتح الطرفية يف أوبونتو ونفذ عليها بعض األوامر النصية مثل؟ .05
38
الباب الثاين :احلاسب وبنية نظام التشغيل
39
الباب الثاين
من املهام الرئيسية اليت يقوم هبا نظام التشغيل هي إدارة املكوانت املادية للحاسب اآليل ،لذلك لن نفهم
عمل نظام التشغيل ما مل نفهم املكوانت املادية اليت يديرها .هلذا السبب سندرس هنا املكوانت املادية وأجزاء نظام
ا لتشغيل اليت تدير هذه املكوانت ،وكيف يوفر نظام التشغيل واجهات متكن التطبيقات واملستخدم من التعامل مع هذه
املكوانت ِبلصورة املثلى.
.0إدخال بياانت.
.0معاجلة املدخالت.
.4االحتفاظ ِبملدخالت و/أو ِبلنتائج (املخرجات) الستخدامها فيما بعد (التخزين الدائم).
تتكرر هذه اخلطوات األربعة ِبستمرار .وجند أن املكوانت املادية والربامج تدور يف حمور هذه اخلطوات.
فإلدخال معلومة إىل احلاسب سنحتاج جهاز وتحتاج برانمج يدير هذا اجلهاز .وملعاجلة املدخالت (تنفيذها) البد من
جهاز للتنفيذ وبرانمج يدير هذا اجلهاز .وإلخراج النتيجة البد من جهاز خيرج النتائج وبرانمج يقوم إبدارة هذا اجلهاز.
ولتخزين املدخل أو النتيجة البد من جهاز ختزين وبرانمج يدير عمليات التخزين هذه.
40
إذن ميكن تقسيم املكوانت املادية حسب اخلطوات أعاله إىل أربعة أجزاء رئيسية (كما مبني يف الشكل (،))0-0
وهي:
نستخدم أجهزة الدخل إلدخال املعلومات واألوامر للحاسب ،فتخزن مؤقتا يف الذاكرة الرئيسية مث تتم
معاجلتها بواسطة املعاجل ،مث خترج النتائج ِبلذاكرة الرئيسية و تظهر غالبا على أجهزة اخلرج ،وميكن اإلحتفاظ بنسخة
من املدخالت/املخرجات يف القرص الصلب أو أي جهاز ختزين اثنوي (حفظ دائم).
الربامج اليت تدير أجزاء احلاسب هي أجزاء نظام التشغيل وهي مقسمة كالتايل:
41
كل جزء من أجزاء نظام التشغيل أعاله مكلف إبعمال على املكوانت املادية اليت يديرها ،مثل:
.0.0أجزاء احلاسب
تتكون احلاسبات احلديثة من معاجل أو أكثر ،متحكمات ،انقل يربط املعاجل واملتحكمات بذاكرة مشرتكة،
الشكل (.)4-0
42
.0.0.0املتحكم ()controller
قد يكون اجلهاز معقد جدا فيوفر املتحكم واجهة بسيطة يتعامل هبا نظام التشغيل مع اجلهاز.
يوجد بكل متحكم ذاكرة تسمى اخلازن ( )bufferتساعد يف عملية نقل البياانت بني اجلهاز والذاكرة
الرئيسية.
يوجد يف بعض املتحكمات معاجل يقوم ِبلتعامل مع اجلهاز وتفاصيله املعقدة ،مثال يقوم معاجل متحكم
الشاشة حبساب القيم والنقاط اليت جيب رمسها على الشاشة ،بينما يرسل املعاجل الرئيسي املعلومات وأين جيب
أن تظهر يف الشاشة.
متحكم الذاكرة الرئيسية يقوم بتنظيم وصول املتحكمات األخرى واملعاجل للذاكرة بصورة تزامنية.
خازن املتحكم يساعد يف تسريع نقل البياانت بني الذاكرة الرئيسية واجلهاز .فاجلهاز غالبا يرسل البياانت يف
شكل ِبيتات ،جتمع يف ذاكرة املتحكم حىت متتلئ مث ترسل دفعة واحدة إىل الذاكرة ،بدال من إرساهلا ِبيت
بعد ِبيت.
.0.5املقاطعات ()Interrupts
املعاجلات احلديثة توفر طريقة متكن املكوانت املادية (أجهزة الدخل/اخلرج) من إرسال إشارة للمعاجل ،تعترب
هذه اإلشارة طلب مقاطعة للمعاجل .هذه املقاطعة توقف عمل املعاجل مؤقتا ،لينفذ خدمة مطلوبة ( interrupt
.)service routineهنالك جمموعة من اخلدمات ختتلف إبختالف نظام التشغيل ،وهي عبارة عن دوال خاصة
ِبملقاطعات ،فكل مقاطعة تقابلها جمموعة من الدوال ،عندما يتم إرسال املقاطعة إىل املعاجل يوقف ما كان يعمل فيه ،مث
ينفذ دالة معينة من دوال املقاطعة (حتدد الدالة برقم يف مسجل معني) ،مث يرجع املعاجل مرة أخرى ليواصل ما أوقفه قبل
إستالمه للمقاطعة.
قد تصدر مقاطعات من أكثر من جهاز ،وعلى املعاجل أن يرد عليها مجيعها ِبلطريقة املناسبة ويف وقت قصري.
هنالك أنواع خمتلفة من املقاطعات :
43
داخلية قد تصدر من املؤقت ( ،)timerأو نتيجة عطل يف مكون مادي ( ،)hardware failureأو
من برانمج.
مثال إذا كان هنالك برانمج حتت التنفيذ ( P1مثال) إحتاج ملعلومة من جهاز دخل ،فسيقوم املعاجل إبرسال طلب
املعلومة إىل جهاز الدخل املعين ،مث يتحول لتنفيذ برانمج آخر ( P2مثال) .عندما يصبح جهاز الدخل مستعد لنقل
البياانت ،سريسل إشارة مقاطعة إىل املعاجل خيربه فيها أبن البياانت جاهزة .سريد املعاجل على املقاطعة بتوقيف الربانمج
الثاين ( ،)P2وينتقل لتشغيل دالة املقاطعة ( )interrupt handlerاليت تقوم إبكمال نقل البياانت .يف هذا
اللحظة ميكن للمعاجل أن يواصل تشغيل الربانمج األول (.)P1
هنالك خانة (بت )bitتضاف للمكوانت املادية ،إذا كانت قيمة هذه البت صفر فهذا يعين أن الربانمج
يف وضع النواة ( ،)kernel modeأما إذا كانت البت حتتوي على واحد فهذا يعين أن الربانمج يف وضع املستخدم
( .)user modeهبذه الطريقة نستطيع معرفة يف أي وضع يتم تنفيذ الربامج.
أحياان قد حيتاج برانمج ما ،إىل استدعاء خدمة من نظام التشغيل (نداء نظام ،)system callيف هذه
احلالة البد هلذا الربانمج من أن يتغري وضعه من وضع املستخدم إىل وضع النواة ،مث بعد إكتمال تنفيذ نداء النظام
سريجع الربانمج إىل وضع املستخدم مرة أخرى.
.0.3املؤقت ()timer
من مهام نظام التشغيل التحكم يف املعاجل ومنع برامج املستخدمني من االستئثار هبذا املورد اهلام والعمل ملدة
طويلة داخل املعاجل .مثال إذا كان هنالك برانمج ينفذ يف تكرار غري منتهي ( )infinite loopأو استدعى دالة
خدمة ومل يُعيد السيطرة لنظام التشغيل ،فهذا يسبب إهدار لزمن املعاجل .هنا البد لنظام التشغيل من آلية متكنه من
توقيف مثل هذه الربامج ،وكان املؤقت ( )timerهو احلل.
قبل تشغيل برانمج املستخدم يتأكد نظام التشغيل من أن املؤقت مرتبط مع مقاطعة.
44
يتم إعداد املؤقت ليصدر املقاطعة بعد فرتة حمددة (ال تزيد عن اثنية).
عندما يصل العداد صفر تصدر املقاطعة وينتقل التحكم تلقائيا إىل نظام التشغيل.
لنظام التشغيل حق التصرف يف إعتبار أن هذه املقاطعة خطأ جسيم ( )fatal errorأو قد يعطي الربانمج
مهلة أكثر (زَيدة زمن).
.0.3.0مثال
إذا كان لدينا برانمج حيتاج 5دقائق من التنفيذ ،فسيتم وضع (( )402 =)22*5يف العداد ،وكلما متر اثنية
سريسل املؤقت مقاطعة وينقص العداد بواحد ،ويظل التحكم لدى الربانمج (ما دام حمتوى العداد موجب) ،إذا وصل
العداد إىل صفر سيقوم نظام التشغيل إبهناء الربانمج.
.0.2هرمية الذاكرة
تتكون هرمية الذاكرة من التايل:
املسجالت .registers
الذاكرة املخبأة (الكاش) .cache
الذاكرة الرئيسية (الرام) .main memory
األقراص املمغنطة .magnetic disk
األقراص الضوئية .optical disks
األشرطة املمغنطة .magnetic tape
التطاير. .0
السرعة. .0
السعة. .5
45
السعر. .4
.0.2.0التطاير ()volatility
أعلى اهلرم :خيزن البياانت ختزيناً مؤقتاً يزول عند إغالق احلاسب (متطايرة )volatile
أسفل اهلرم :خيزن البياانت ختزيناً دائماً ال يزول (غري متطايرة .)non-volatile
.0.2.0السرعة
النوع األول خيزن البياانت يف شكل نبضات إلكرتونيه (مثل الرام) ،بينما النوع الثاين خيزن البياانت مغنطيسياً
أو ضوئياً ويعمل بطريقة ميكانيكية (مثل القرص الصلب واألقراص الضوئية والشرائط املمغنطة) .لذلك جند أن سرعة
الوصول للبياانت يف األول عالية جداً مقارنة مع سرعتها يف النوع الثاين.
.0.2.5السعة والسعر
النوع األول صغري احلجم ذلك ألن صناعته مكلفة إذا زدان حجمه يصبح سعره ِبهظاً وِبلتايل يؤثر يف سعر
احلاسب ككل .أما النوع الثاين كبري احلجم الن صناعته غري مكلفة ،فهو رخيص جداً مقارنة ِبألول.
إذن هنالك أربع عوامل متيز بني أنواع اهلرمية هي التطاير ،السعة ،السعر ،والسرعة كما مبني يف الشكل (.)3-0
46
شكل رقم ( :)3-0التدرج اهلرمي للذاكرة.
الغرض من الذاكرة املخبأة هو متكني املعاجل من الوصول لبياانت الذاكرة الرئيسية بشكل سريع جدا ،.لذلك
فالذاكرة املخبأة تؤثرا أتثريا كبريا على أداء املعاجل .بعض املخابئ تعمل بسرعة املعاجل وتسمى L1بينما املخابئ
األخرى تعمل بنصف السرعة أو اقل وتسمى .L2املخبأ الصغري الذي يعمل بسرعة كاملة قد تكون أكثر نفعا من
خمبأ كبري يعمل بنصف سرعة املعاجل.
إن سرعة الوصول للبياانت يف القرص الصلب (الذاكرة الثانوية) أبطأ ماليني املرات من سرعة الوصول
للبياانت يف الرام ،لذلك تعترب الذاكرة الرئيسية (الرام) متطلباً أساسياً لتنفيذ الربامج ،فال ميكن تنفيذ برانمج ما مل حيمل
هبا.
يف بداَيت تصنيع احلاسب كانت سرعة الذاكرة الرئيسية يساوي سرعة املعاجل ولكن مبرور الزمن تطورت
صناعة املعاجلات وصارت سرعتها عالية جدا مقارنة مع التطور يف صناعة الذاكرة الرئيسية ،فلم تزيد سرعة الذاكرة
بنفس نسبة زَيدة سرعة املعاجل مما ولد فرق كبري بني السرعتني .ومبا أن سرعة احلاسب ككل مرتبطة بسرعة أبطأ جهاز
به .سنجد أنه البد من معاجلة هذا الفرق بني السرعتني بتحسني أداء الذاكرة لنستفيد من سرعة املعاجل .فاملعاجل
سيبطئ عمله ليعمل بسرعة الرام وِبلتايل لن نستفيد من سرعة املعاجل ولن يظهر هذا يف أداء احلاسب ككل.
هنا جاءت الذاكرة املخبأة (الكاش) بني املعاجل والرام لتحل هذه املشكلة ،حيث تعترب الكاش ذاكرة سريعة
تعمل بسرعة املعاجل وِبلتايل لن يتأثر أداء املعاجل حني يتعامل مع الكاش ،شكل (.)2-0
47
شكل رقم ( (a) :)2-0حساِبت بدون كاش (b) ،احلساِبت احلديثة حتتوي على كاش [.]8
48
شكل رقم ( :)8-0حتويل البياانت من الشكل التقليدي إىل الشكل الرقمي والعكس [.]00
يتم ذلك عن طريق أجهزة وبرامج تقوم بتحويل البياانت من الشكل التقليدي إىل األرقام الثنائية عند
اإلدخال ،فنقوم تحن ِبإلدخال ِبلصورة التقليدية وتقوم األجهزة والربامج الوسيطة بتحويل البياانت التقليدية إىل أصفار
و آحاد قبل ختزينها يف احلاسب وهبذا تتحول البياانت إىل الشكل الذي يفهمه احلاسب دون تدخل منا .كذلك عند
ما تظهر املخرجات ِبلشكل التقليدي فهذا ألن هنالك أجهزة وبرامج وسيطة حتول املخرجات من أصفار و آحاد
(الشكل املخزن ِبحلاسب) إىل الشكل التقليدي قبل إظهارها يف الشاشة أو مساعها ،أنظر الشكل ( .)8-0أي أن
كل معلوماتنا عندما ختزن يف ذاكرة احلاسب تكون خليط من اآلحاد و األصفار.
يظهر هنا سؤال هام هو ،كيف مييز احلاسب بني املعلومات والرموز واألشكال إذا كانت كلها خليط من
األصفار واآلحاد ؟ اإلجابة ِبستخدام التشفري كما سنوضح يف الفقرة (.)0.0.0
ال تعترب أجهزة الدخل واخلرج جزء من احلاسب وإمنا هي أدوات إلدخال البياانت وإظهار النتائج،
فهي السبيل الذي نتعامل به مع احلاسب .هنالك بعض احلاسبات ال حتتاج هذه األجهزة.
49
هنالك العديد من الشفرات املستخدمة لتمثيل البياانت يف احلاسب مثل:
اآلن معظم نظم التشغيل تستخدم الشفرة املوحدة ،Unicodeوهي تدعم اللغة العربية ،أي ان هنالك قيمة ثنائية
لكل حرف من احلروف العربية.
50
.0.5.0البت والبايت
ملاذا ال خيزن احلاسب سوى األرقام الثنائية (الصفر والواحد) ؟ ألن أجزاء احلاسب الداخلية هي عبارة عن
مفاتيح تكون على أحدى حالتني ،إما ONأو ،OFFحيث متثل حالة ONالقيمة ،0بينما متثل حالة OFF
القيمة صفر ،وكل مفتاح ميثل بت أي رقم ثنائي واحد ،شكل رقم ( ،)3-0كل موقع ختزين يف الذاكرة الرئيسية يتكون
من مثانية مفاتيح ويسمى ِبيت ( 8بتات) ،.وكل ِبيت يستطيع ختزين رمزاَ أو حرفا واحداَ ،الشكل (.)3-0
شكل رقم ( :)3-0كل مفتاح ميثل بت وكل 8بتات متثل ِبيت [.]00
مثال إذا ضغطت على زر يف لوحة املفاتيح (احلرف ،)Aفإن القيمة الثنائية ( 20222220لو كنت تعمل بشفرة
آسكي (اجلدول ( )))0-0سيتم إدخاهلا يف ذاكرة احلاسب ،كما يف الشكل (.)00-0
شكل رقم ( :)02-0كل موقع ِبلذاكرة الرئيسة يتألف من مثانية مفاتيح [.]00
إذن كل شيء داخل احلاسب هو خليط من ONو OFFأو خليط من 2و .0هذا اخلليط قد يكون
ملف نصي مدخل عرب لوحة مفاتيح أو سورة قرآنية مسجلة ِبملايكروفون ،أو صورة مدخلة بواسطة املاسحة أو برانمج
جافا كتبه مربمج ،أو حىت نظام التشغيل .فالكل داخل احلاسب أرقاماً ثنائية.
51
شكل رقم ( :)00-0متثيل احلرف Aداخل ذاكرة احلاسب [.]00
هنا يربز سؤال جديد هو كيف مييز احلاسب بني هذا الكم اهلائل من األصفار واآلحاد ،وكيف مييز بني
امللفات وأنواعها ؟
اإلجابة هي :جزء من نظام التشغيل يسمى مدير امللفات هو الذي مييز بني امللفات وأنواعها وأماكن ختزينها
داخل أجهزة التخزين ،وبني الربامج وأنواعها وأماكن تواجدها ِبلذاكرة الرئيسية.
.0.8.0اإلقالع ()Booting
عندما نفتح احلاسب تتم اخلطوات التالية:
أول برانمج يشتغل هو برانمج خمزن بذاكرة القراءة فقط ( .)ROMيقوم هذا الربانمج ِبختبار املكوانت
املادية والتأكد من أن كل أجزاء احلاسب سليمة وموصلة بطريقة صحيحة .يسمى هذا الربانمج برانمج
االختبار الذايت ().)Power On Self Test (POST
بعد جناح عملية االختبار يشتغل برانمج آخر يسمى ، bootstrap loaderوهو برانمج صغري جداً
وموجود بذاكرة القراءة فقط ( )ROMأو أي ذاكرة غري متطايرة .مهمة هذا الربانمج هي البحث عن نظام
التشغيل وحتميله ِبلذاكرة الرئيسية وتسليمه التحكم ِبحلاسب.
هنا تنتهي مهمة هذا برانمج bootstrap loaderويستلم نظام التشغيل التحكم ِبحلاسب ليدير
املكوانت املادية ويوفر واجهة للمستخدم والتطبيقات.
52
.0.8.0التعامل مع نظام التشغيل
بعد حتميل نظام التشغيل وتسليمه قيادة احلاسب ،سيكون هو الواجهة اليت يتعامل معها املستخدم ،فهو
الذي يستجيب لطلباته ويشغل براجمه ويقوم بكل ما يريده .فهو مدير احلاسب وهو الذي يتعامل مباشرة مع املكوانت
املادية بينما نتعامل تحن وبراجمنا معه ونطلب منه ما نريد ،ولديه مطلق احلرية يف تنفيذ طلباتنا أو رفضها حسب
إسرتاتيجيته وأمهية طلباتنا.
مثال عندما يظهر سطح املكتب يف ويندوز فهذا يعين أن نظام التشغيل جاهزا لتلقي أوامر املستخدمني اليت
قد تكون:
تشغيل برانمج :هنا يقوم املستخدم إبرسال طلب لنظام التشغيل أبنه يريد تشغيل برانمج معني وذلك ِبلنقر
املزدوج على أيقونة الربانمج فيقوم نظام التشغيل ِبلبحث عن الربانمج يف مكان ختزينه الدائم وحتميله إىل
الذاكرة الرئيسية وتسليمه القياد فرتى برانجمك يعمل أمامك.
.0.8.5تنفيذ الربامج
الربانمج هو سلسلة من األوامر (التعليمات) تنفذ متسلسلة (أمر تلو اآلخر) (ليس يف الربجمة املتوازبة) ،ويقوم
املعاجل بتنفيذ كل أمر يف مخس مراحل هي:
إحضار األمر ( :)fetchهنا تحضر األمر من الذاكرة الرئيسية وخنزنه يف مسجل (داخل املعاجل).
فهم وتفسري األمر ( :)decodeهنا يقوم املعاجل ِبلعمل على األمر لفهمه ومعرفة ما إذا كان حيتاج بياانت
إضافية من الذاكرة ام ال؟ مثال إذا كان األمر (أمجع) فهذا يعين أننا تحتاج إحضار الرقمني املراد مجعهم من
الذاكرة الرئيسية.
53
إحضار البياانت اإلضافية ( :)fetch operandsهنا تحضر البياانت اليت حيتاجها األمر من الذاكرة
الرئيسية (إذا كان األمر حيتاج بياانت إضافية حسب اخلطوة 0أعاله) ونضعها يف مسجالت داخل املعاجل.
التنفيذ ( :)executeينفذ األمر بواسطة وحدة احلساب واملنطق اليت تعترب جزءاً من املعاجل.
يكرر املعاجل اخلطوات أعاله على كل أمر من أوامر الربانمج حىت ينتهي التنفيذ ،شكل (.)00-0
.0.3ملخص
حتدثنا يف هذا الباب عن العالقة بني عملية احلوسبة واملكوانت املادية وأجزاء نظام التشغيل .مث بينا كيف يتم
متثيل البياانت دا خل احلاسب يف شكل أرقام ثنائية وكيف خيفي نظام التشغيل هذه التفاصيل والتعقيدات عن املستخدم
موفرا بيئة سهلة ومالئمة للمستخدم.
54
.0.02متارين حملولة
ملاذا يعترب الشريط املمغنط أبطأ أنواع الذاكرة الثانوية ؟ ألن الوصول إليه يكون تتابعي ( sequential .0
)accessبينما التعامل مع القرص الصلب مثال يكون عشوائيا (.)random access
ما اسم الربانمج الذي يبحث عن نظام التشغيل وينفذه ؟ وأين يوجد ؟ ،Bootstrap loader .0
يوجد هذا الربانمج بذاكرة القراءة فقط (.)ROM
ما اسم الربانمج الذي خيترب اجزاء احلاسب ويتأكد منها ؟ وأين يوجد ؟ برانمج االختبار الذايت .5
( )POSTويوجد بذاكرة القراءة فقط (.)ROM
يتكون املعاجل من ثالث أجزاء ،ما هي هذه األجزاء ؟ وحدة التحكم ( ،)CUوحدة احلساب واملنطق .4
( ،)ALUاملسجالت (.)registers
سرعة احلاسب ككل مرتبطة بسرعة أبطأ جهاز به (وضح مبثال) ؟ مثال قد يدخل املستخدم حرف يف .3
كل اثنية عرب لوحة املفاتيح ،بينما حيتاج املعاجل 0ميكرواثنية لنقل حرف إىل الذاكرة .الثانية الواحدة
حتتوي على 0222ميكرواثنية .هذا يعين أن هنالك 338ميكرواثنية هتدر من زمن املعاجل يف كل
0222ميكرواثنية.
.2ما الفرق بني وضع املستخدم ( )user modeووضع النواة ()kernel mode؟
.3هنالك العديد من الشفرات املستخدمة لتمثيل البياانت يف احلاسب ،أذكر ثالث منها ؟
55
.02أذكر ِبختصار خطوات إقالع احلاسب ؟
.00تتم معظم عمليات احلوسبة يف أربعة خطوات رئيسية ،أذكر هذه اخلطوات مع حتديد املكوانت املادية اليت
حتتاجها كل خطوة ؟
.04كل جزء من أجزاء نظام التشغيل مسئول عن أعمال جتاه املوارد اليت يدير ،ما هي هذه األعمال ؟
.03ملاذا مل تكن هنالك ذاكرة خمبأة (كاش) بداَيت الثمانينات ( ،)0382وما هو سبب ظهور الكاش ؟
56
الباب الثالث :العمليات
57
الباب الثالث
إدارة العمليات هو جزء هام من نظام التشغيل ويعتين بكل ما يتعلق ِبلعمليات من:
العمليات (.)processes
سنتحدث يف هذا الباب عن العمليات ،بينما سنتحدث يف الباب الذي يليه (الرابع) عن جدولة املعاجل ،ويف
الباب اخلامس سنتحدث عن اخليوط ،والباب السادس سيكون عن تزامن العمليات ،أما الباب السابع فقد خصصناه
لالختناق.
.5.0مقدمة
قدميا كانت نظم التشغيل تسمح فقط بتشغيل برانمج واحد يف اللحظة الواحدة ،هذا الربانمج يتحكم
ويستأثر بكل موارد احلاسب من معاجل وذاكرة وأجهزة دخل وخرج وملفات ،وغريها .اآلن أصبحت نظم التشغيل
احلديثة تسمح ألكثر من برامج أبن يعمل يف وقت واحد متشاركة يف املوارد مما أسهم بشكل فعال يف حتسني أداء
احلاسب وزَيدة إنتاجيته.
أيضا اإلدارة اجليدة ملوارد احلاسب من قبل نظام التشغيل تؤثر أتثريا مباشرا على األداء .من املوارد اهلامة اليت جيب
االعتناء هبا واالهتمام أبدائها هو املعاجل الذي يقوم تنفيذ كل براجمنا.
هذه الربامج قد تكون برامج نظام التشغيل ،املرتمجات ،األوفيس ،األلعاب ،وبرامج املستخدم األخرى.
58
.5.0مفهوم العملية ()Process Concept
الربانمج يكون يف شكل ملف عندما يكون خمزن ِبلقرص الصلب (أو أي وسيط ختزين اثنوي) وعندما ننقر
عليه نقرا مزدوجا فإننا نطلب من نظام التشغيل تنفيذه ،فيقوم نظام التشغيل بتحميله من القرص الصلب (أو وسيط
التخزين املوجود به مثل الفالش أو األسطوانة) إىل الذاكرة الرئيسية (الرام) ليبدأ التنفيذ ،هنا يتغري اسم الربانمج من
ملف إىل عملية.
العملية هي برانمج شغال (حتت التنفيذ) ،أحياان نطلق عليها عمل ( )jobأو مهمة (.)task
عند تنفيذ الربانمج داخل املعاجل تسلسليا (أمر تلو اآلخر) ستكون خطوات تنفيذه كما يلي:
.0وضع عنوان بداية الربانمج (عنوان أول أمر ِبلربانمج) يف مسجل داخل املعاجل يسمى عداد الربانمج
().)program counter (PC
.5يقوم املعاجل إبحضار أول أمر ِبلربانمج( ،هذا األمر نعرف مكانه من خالل عداد الربانمج) من الذاكرة
الرئيسية ويتم ختزينه يف مسجل داخل املعاجل.
.3انتقل إىل اخلطوة ،2وهكذا نكرر هذه اخلطوات إىل أن ينتهي تنفيذ الربانمج.
59
(مؤقتا) لسبب ما ،فيصبح الربانمج يف هذه احلالة حمجوز ( ،)blockedوقد يشتغل برانمج آخر أكثر أمهية (مثال).
حتميل الربانمج ِبلذاكرة يسمى عملية ،هذه العملية (أو الربانمج) يتغري وضعها من حال إىل حال ،كما موضح أدانه:
حالة التنفيذ ( :)running stateالعملية بدأت التنفيذ داخل املعاجل (يتابع مسجل عداد الربامج تسلسل
تنفيذ أوامر العملية).
حالة احلجز أو االنتظار ( :)blocked state or waitingعندما يوقف املعاجل عملية ،تصبح هذه
العملية حمجوزة .يتم توقيف العملية ألسباب عدة مثل احلاجة لتشغيل عملية أخرى أكثر أمهية ،أو أن العملية
تنتظر حدث ( )eventمعني مل يتم بعد ،أو أن الزمن الذي خصص للعملية قد اكتمل (املشاركة الزمنية).
االنتهاء ( :)terminatedهنا تكون العملية قد انتهى عملها ،فتقوم إبخالء طرفها (حترير املوارد اليت
كانت تستخدمها ،وإخالء الذاكرة اليت كانت حتتجزها) قبل اخلروج.
.5 .4إنشاء العملية
عند إنشاء العملية تعرف وتدار برقم غري متكرر يسمى رقم تعريف العملية ( Process Identification
).)Number (PID
هتيئة النظام :عند إقالع نظام التشغيل تنشأ العديد من العمليات ،منها ما يعمل يف اخلفاء
( ،)backgroundومنها ما يعمل ويتخاطب مع املستخدم.
60
عملية تستدعى النظام إلنشاء عملية أخرى :أحياان تقوم عملية منفذة بتشغيل (إنشاء) عملية أخرى
تساعدها يف عملها ،تعترب العملية األوىل أب ( )parentللعملية الثانية واليت تعترب ابن ( ،)childالعملية
االبن ميكنها إنشاء عمليات أبناء هلا مما قد يكون شجرة من العمليات .قد تعمل هذه العمليات معا يف
وقت واحد أو تنتظر بعضها البعض.
طلب املستخدم إنشاء عملية جديدة :عند ما ينقر املستخدم نقرا مزدوجا على أيقونة برانمج فهذا طلب من
املستخدم إلنشاء عملية جديدة.
املهام احملزمة ( :)batchقد يضع املستخدم حزمة من العمليات ويطلب من نظام التشغيل تنفيذها مرة
واحدة ،فيقوم النظام بتنفيذ العملية األوىل يف احلزمة ،مث مىت ما أتيحت له موارد يقوم بتنفيذ العملية الثانية
وهكذا إىل أن ينفذ كل العمليات املوجودة ِبحلزمة.
ميكن استخدام استدعاء النظام )( forkإلنشاء عملية جديدة ،وهي ال حتتاج مدخالت (،)arguments
وعند استدعاءها ترجع لنا رقم تعريف العملية اليت أنشأهتا ( .)process IDإذن هدف )( forkهو إنشاء عملية
جديدة تكون أبن للعملية اليت استدعتها .بعد أن يتم إنشاء العملية األبن ،تنفذ العملية االبن والعملية األب األمر
الذي يلي )( .forkلذلك البد من التمييز بني العملية االبن والعملية األب وذلك ِبختبار القيمة الراجعة من
)(:fork
فإذا كانت القيمة الراجعة من )( forkسالبة ،فهذا يعين أن إنشاء العملية قد فشل.
إذا أرجعت الدالة )( forkصفر للعملية االبن ،فهذا يعين أن العملية قد مت إنشاءها بنجاح.
ترجع )( forkرقم موجب للعملية األب اليت استدعتها ميثل رقم العملية (.)process ID
رقم العملية هو متغري من النوع pid_tاملعرف يف .sys/types.hوميكن متثيل رقم العملية برقم ،وميكننا
استخدام األمر )( getpidللحصول على رقم العملية .الربانمج التايل يوضح كيفية استخدام )(،fork
حيث قمنا إبنشاء عملية إبستدعاء )(، forkمث حصلنا على رقم تعريف العملية ِبالمر )( ،getpidأمر
printfسينفذ مرة بواسطة العملية األب ومرة بواسطة العملية اإلبن ،خمرجا قيمتني خمتلفتني للمتغري .pid
ميكن اختصار خطويت إنشاء العملية واحلصول على رقم العملية ()( )fork(); pid=getpidيف أمر
واحد هو )(.pid=fork
61
>#include <stdio.h
>#include <sys/types.h
{ )void main(void
;pid_t pid
;)(fork
;)(pid = getpid
;)printf("This line is from pid %d, value = %d\n", pid, i
}
ميكن استخدام استدعاءت نظام أخرى يف لينكس مثل استدعاء النظام ( )execللتنفيذ exit ،إلهناء العملية.
.5.3إهناء العملية
بعد تنفيذ العملية آلخر أمر فيها ستطلب من نظام التشغيل أن يقوم حبذفها وذلك إبستدعاء نداء
،waitبينما يقوم نظام النظام exitمثال .خمرجات العملية احملذوفة ترسل للعملية األب عرب استدعاء النظام
التشغيل بتحرير كل موارد العملية .
مل يعد األب حيتاج ملا يقوم به االبن (املهمة املنفذة مل نعد حباجة هلا).
بعض نظم التشغيل ال تسمح لألبن مبواصلة التنفيذ إذا أهنى األب عمله.
ميكن تطبيق استدعاء ات النظام اليت تنشئ أو تنهي عمليات على نظام التشغيل لينكس من داخل برانمج .C
أمثلة الستدعاءات نظام موجودة يف لينكس:
62
fork() إلنشاء عملية جديدة.
wait() لإلنتظار.
توجد بعض الربامج املكتوبة بلغة Cواليت تستخدم هذه اإلستدعاءات ِبملالحق .وتوجد خطوات تنفيذها على
نظام التشغيل أوبونتو (ميكن تطبيقها على أي توزيعة لينكس آخرى) ،أرجع للمالحق.
.5.2مثال تشبيهي
افرتض أن هنالك مكتب ما ،يقدم خدمات للعمالء .إذا كان هنالك موظف واحد ِبملكتب (وهذا يشبه
احلاسب ذو املعاجل الواحد ( .))single processor systemفإن كل عميل حيضر للمكتب إلجناز معاملة
سيذهب هلذا املوظف ،وقد جيد قبله عمالء قد حضروا مسبقا إلجناز معامالهتم (جيد صف انتظار) ،فيضطر أن يقف
يف آخر الصف .يف هذه احلالة سيكون كل العمالء املنتظرين يف الصف يف حالة جاهزية ( ،)readyوسيكون هنالك
عميل واحد فقط (أول من وصل) ُخيدم بواسطة موظف املكتب (هذا العميل نقول أنه يف حالة تنفيذ (،))running
وقد تنجز معاملته وخيرج من املكتب حامدا ربه وشاكرا (وهنا نقول أن هذا العميل قد اكتمل عمله
( .)terminatedولكن ماذا حيدث إذا وجد املوظف املسئول أن أوراق العميل غري مكتملة مثال ؟ سيوقف
املوظف إجناز معاملة هذا العميل حلني إكمال أوراقة (حيجزه ( .))blockedهنا على العميل أن خيرج من املكتب
ويذهب ليحضر األوراق الناقصة .فإذا بعد عناء ومشقة حتصل صاحبنا على بقية األوراق املطلوبة ورجع إىل املكتب
إلكمال معاملته (اآلن حتول من حالة احلجز (نقص األوراق) إىل حالة اجلاهزية (احلصول على األوراق املطلوبة)).
وسينتظر دوره مرة أخرى ليسمح له املوظف املسئول (املعاجل) إبكمال معاملته (التنفيذ).
عندما يفرغ املوظف من معاملة العميل الذي أمامه ،سيصبح جاهزاً الستقبال عميل جديد (غالبا العميل
الذي يكون يف بداية الصف) ،هذا العميل اجلديد سيتحول اآلن من اجلاهزية إىل التنفيذ ،وهكذا يسري النظام.
إذا كان لدينا يف املكتب أكثر من موظف فسيتم خدمة أكثر من عميل يف نفس الوقت (يشبه تعدد
املعاجلات يف نظام احلاسب).
63
.5.5معلومات العملية ))Process Control Blocks (PCB
لكل عملية بنية بياانت ( )data structureتسمى ) (PCBختزن فيها املعلومات األساسية للعملية ،شكل
رقم ( ، )4-5جتمع البنيات األساسية لكل العمليات يف جدول يسمى جدول العمليات ( ،)process tableحيث
يكون هنالك خانة لكل بنية عملية ِبلنظام .حتتوي بينة العملية على معلومات عن العملية مثل:
أولية العملية.
64
.5.8التحول السياقي ()Context switch
تستخدم معلومات العمليات عندما تتحول العملية من حالة التنفيذ إىل حالة اجلاهزية أو احلجز .عندها يقوم
املعاجل بتوقيف عملية وتنفيذ عملية أخرى ،حيث يتم حفظ معلومات العملية اليت مت توقيفها (مثال العملية )P0يف
،PCB0مث يتم حتميل معلومات العملية املراد تنفيذها (مثال )P1من .PCB1
إذا أراد نظام التشغيل تنفيذ P0مرة أخرى فسيقوم بتخزين معلومات P1يف PCB1مث حتميل معلومات P0
من PCB0حيث يستطيع مواصلة التنفيذ من آخر نقطة وقفت فيها العملية .P0
الزمن املستغرق يف اإلنتقال بني عمليتني يكون مهدور وغري مستفاد منه ،حيث ال يقوم النظام بعمل يف هذه
الفرتة.
.5.3العمليات يف ويندوز
عندما ننفذ براجمنا على ويندوز ،البد لنظام التشغيل من معرفة كيف يدير هذه الربامج للتأكد من أن كل
برانمج أخذ حصته من الوقت يف املعاجل ويف الوصول إىل الذاكرة وأجهزة الدخل واخلرج .ولتحقيق ذلك يتعامل نظام
التشغيل مع كل برانمج كعملية .فإذا قمنا بتشغيل برانمج فسينشئ عملية هلذا الربانمج ،وإذا نفذان نسخة من نفس
الربانمج فسيقوم نظام التشغيل إبنشاء عملية أخرى هلذه النسخة ،حبيث تكون هنالك عملية لكل نسخة شغالة من
الربانمج .وِبلتايل كل الربامج اليت تعمل يف نظامك هي عبارة عن عمليات يدير ويتابع عملها نظام التشغيل.
ملعرفة العمليات اليت تنفذ جبهازك حاليا قم ِبلضغط على Ctrl+Alt+Delمث اختار Task
،Managerفتظهر انفذة ،أنقر على تبويب Processesفرتى كل العمليات اليت تعمل اآلن يف جهازك مبا فيها
عمليات نظام التشغيل ومضادات الفريوسات والربامج اخلدمية وكل براجمك املفتوحة ،وترى حجم الذاكرة الذي
تستخدمه كل عملية ،الشكل (.)5-5
65
مدير املهام يف ويندوز XP
من الشكل ( )5-5جند أن كل عملية لديها مالك ( )user nameهو الذي شغلها .أيضا يظهر حتت
،CPUزمن املعاجل احلايل املستخدم لكل عملية ،كذلك املساحة املستخدمة من الذاكرة واليت ختزن فيها العملية
شفراهتا وبياانهتا ( .)Mem Usageمثال برانمج وورد ( )WINWORD.EXEهو عملية قام بتشغيلها
املستخدم ،awqوتستخدم ذاكرة حجمها .48,808k
ميكنك النقر على أي عملية وإيقافها من مدير املهام ِبلنقر على العملية مث النقر على الزر End
.Processمع التنبيه إىل أن كل مستخدم يستطيع أيقاف عملياته ،إذا كان مستخدم عادي ،وال يستطيع إيقاف
عمليات املستخدمني اآلخرين إال إذا كان مشرف .Administrator
ِبلرغم من أن ويندوز تبدو لك أهنا تشغل أكثر من برانمج (عملية) يف نفس الوقت ،إال أن هذا غري صحيح
لألجهزة ذات املعاجل الواحد .فاحلقيقة أن عملية واحدة فقط تعمل يف الوقت الواحد ،مث خترج عندما تكون عاطلة
( ،)idleوتنفذ عملية غريها .أما يف احلاسبات اليت متتلك أكثر من معاجل فيمكن تشغيل أكثر من عملية ،حبيث
تشتغل كل عملية يف معاجل ويف نفس الوقت.
66
.3.02العمليات يف لينكس
مي كنك يف لينكس معرفة العمليات اليت تعمل اآلن يف جهازك ،مبا فيها رقم تعريف العملية ( process
)ِ ،)identification number (PIDبدخال األمر التايل يف حمطة االوامر (:)terminal
ps ux.
ميكننا استخدام األمر psيف نظام التشغيل أوبونتو ( ،)Ubuntuوهو أحد توزيعات لينكس ،ملشاهدة
العمليات اليت تعمل اآلن يف النظام كما يف الشكل (.)4-5
أيضا هنالك العديد من استدعاءات النظام اليت متكننا من التعامل مع العمليات واليت ذكرانها يف ،.5.4.0
كذلك توجد الكثري من االمثلة الربجمية ِبمللحق (د).
لكل عملية رقم مفرد يسمى . PIDوقد نطلق أحياان على العملية كلمة "مهمة" ( ،)taskلذلك جند
"مدير املهام" ( )task managerيف ويندوز.
العمليات املتعاونة حتتاج اتصال فيما بينها ) ،interprocess communication(IPCحيث يوجد نوعني
من طرق االتصال ،هي:
67
.5.00متارين حملولة
أختار اإلجابة الصحيحة:
لنشر املعلومات.
لتقليل سرعة التنفيذ.
للبعد اجلغرايف.
ال شيء مما ذكر ()0
عندما ينتقل املعاجل لتنفيذ عملية ،على النظام حفظ PCBالعملية القدمية وحتميل PCBالعملية اجلدية.
نعم
قد يقوم األب إبهناء العملية االبن ) (abortإذا زاد األب يف عدد املوارد املخصصة له .ال ،إذا زاد األبن
نستخدم يف لينكس استدعاء النظام ( )exec system callإلنشاء عملية جديدة .الfork() ،
عندما تنشئ عملية عملية أخرى سيكون تنفذ العملية وأبناءها ِبلتوايل فقط .ال ،قد يكون ِبلتوايل أيضا.
68
.5.05متارين غري حملولة
.0عرف العملية ( )process؟
عندما ينتقل املعاجل لتنفيذ عملية ،على النظام حفظ معلومات العملية اليت نريد توقيفها ( )PCBوحتميل
PCBالعملية اجلديدة ،عرب ما يسمى املشاركة.
قد يقوم األب إبهناء العملية االبن ) (abortإذا زاد األب يف عدد املوارد املخصصة له.
.5عندما تنشئ عملية عملية أخرى سيكون تنفذ العملية وأبنها ِبلتوايل أم ِبلتوازي ؟
69
الباب الرابع :جدولة املعاجل
70
الباب الرابع
الغرض من جدولة العمليات هي اختيار عملية من العمليات املوجودة ِبلذاكرة لتنفيذها يف املعاجل ،حبيث
يكون املعاجل دوما مشغوال (كلما زاد انشغال املعاجل كلما زادت كفاءته .)CPU utilization
يف احلاسب ذو املعاجل الواحد ستكون هنالك عملية واحدة فقط تعمل داخل املعاجل يف اللحظة الواحدة.
ويستفاد من تعدد الربجمة هنا يف إمكانية تشغيل عملية أخرى إذا احتاجت العملية احلالية اليت ِبملعاجل انتظار دخل أو
خرج (وهذا يستغرق وقت كبري جدا مقارنة مع زمن املعاجلة) ،حىت ال يكون املعاجل عاطل اليعمل يف انتظار الدخل أو
اخلرج .عند إكتمال الدخل أو اخلرج تستطيع العملية السابقة مواصلة التنفيذ (عندما جتد فرصة يف املعاجل) ،ويعترب هذا
النوع تعدد برجمة ومهي وغري حقيقي.
إذن العملية تكون يف املعاجل شغالة مث قد يتم توقفها عندما حتتاج دخل أوخرج مث ترجع لتعمل بعد إكتمال
الدخل أو اخلرج ،وقد تتوقف مرة أخرى لدخل أو خرج مث ترجع لتعمل مرة أخرى وهكذا قد تتنقل العملية بني دخل
وخرج و معاجلة حىت تنتهي .أي تقضي العملية وقتها بني تنفيذ داخل املعاجل ( )CPU burstوإنتظار لدخل أو
خرج ( .)I/O burstإذا كانت الفرتات اليت تقضيها العملية داخل املعاجل أطول من اليت تقضيها يف إنتظار دخل أو
خرج فنقول أن العملية ( ، )CPU boundأما إذا كان وقتها الذي تقضيه يف إنتظار الدخل واخلرج أكرب من الذي
تقضيه داخل املعاجل فنقول أن العملية ( .)I/O boundيعتمد هذا على نوع العملية فهنالك عمليات حتتاج إجراء
حوسبة كثرية وال حتتاج وال تظهر معلومات كثرية ،فتكون هذه من النوع ،CPU boundأما العمليات اليت حتتاج
إىل دخل وخرج كثري ،مثل إدخال البياانت وختزينها فستكون من النوع .I/O bound
71
.4.0أنواع اجملدول
مهمة اجملدول هو تنظيم دخول العمليات إىل املعاجل .هنالك ثالث أنواع من اجملدوالت [ ،]05ولكل جمدول
عمل يقوم به ،هي:
جمدول املهام أو اجملدول طويل األمد ) long-term scheduler (or job schedulerوهو الذي
حيدد أي من الربامج جيب أن تدخل إىل النظام (حتمل من ال قرص إىل الذاكرة لتكون جاهزة للتنفيذ) ومىت.
أيضا حيدد أي من العمليات جيب أن خترج من النظام.
72
ال يستخدم يف أنظمة التقسيم الزمين (.)time sharing systems
عادة تكون الذاكرة مورد حمدود وهنا يعمل مدير الذاكرة كمجدول متوسط األمد (استخدام الذاكرة
االفرتاضية).
يقوم اجملدول ِبختيار عملية من العمليات املوجودة ِبلذاكرة واجلاهزة للتنفيذ ( )ready queueوحجز
املعاجل هلا.
حتديد العملية التالية اليت ستستخدم املعاجل بعد فراغه من العملية احلالية (الشكل .)0-4
إذا احتاجت عملية مورد أو دخل/خرج ستزال من املعاجل وحتول إىل حالة االنتظار وإدخال عملية أخرى من
صف االنتظار إىل املعاجل.
.4انتهت Terminates
يف احلاالت 0و 4ستخرج العملية إجبارَي إما إلنتهاءها أو ألهنا حتتاج دخل أو خرج ،يف هذه احلالة البد
للمجدول من إختيار عملية بديلة ،فليس لديه خيار آخر .يف هذه احلال نقول أن اجملدول non-
.preemptive
73
أما 0،4فإن العملية خترج إختيارا ،وقد تواصل ،هنا للمجدول حق اإلختيار يف إخراجها أو ال .هنا نقول
أن اجملدول .preemptive
.4.0.5.0املرسل Dispatcher
املرسل هو جزء من اجملدول يقوم إبرسال العمليات اليت خيتارها جمدول املعاجل ،ومن وظائفه:
oالتحول السياقي :switching contextحفظ بياانت العملية املوقفة وحتميل بياانت العملية
اليت مت اختيارها لتعمل يف املعاجل.
زمن اإلرسال :Dispatch latencyهو الوقت الذي يستغرقه املرسل يف توقيف عملية وتشغيل أخرى (حتويل
عملية).
الزمن اإلكتمال (الزمن الكلي) ( :)Turnaround timeالزمن املستغرق لتنفيذ عملية ما (من دخوهلا
(إنشاءها) حىت انتهاءها).
74
زمن االنتظار ( :)Waiting timeالزمن الذي تقضيه العملية يف صف االنتظار (،)ready queue
أي جمموع فرتات االنتظار اليت تقضيها العملية يف صف االنتظار ( )ready queueأثناء تنفيذها.
زمن االستجابة ( :)Response timeالزمن املستغرق من دخول العملية ( )newإىل ظهور أول خمرج
(استجابة) من العملية.
.4.4حتسني األداء
يسعى نظام التشغيل إىل حتسني أداء املعاجل بتحقيق اآليت:
تقليل الزمن الكلي :تقليل الزمن الكلي لتنفيذ العمليات بقدر ما ميكن.
تقليل زمن انتظار :تقليل زمن االنتظار لكل عملية بقدر ما ميكن.
تقليل زمن االستجابة ( :)response timeجعل العمليات تستجيب وتبدأ إظهار خمرجاهتا بسرعة.
حيذف اجملدول العملية من املعاجل إذا أرادت التحول إىل وضع االنتظار أو انتهت.
اخلوارزمية مناسبة للعمليات الكبرية عندما جتد فرصة للتنفيذ ،وتسبب مشكلة للعمليات القصرية إذا
كانت خلف عمليات كبرية
75
مثال ()0
اجلدول التايل يوضح عمليات يف صف االنتظار ونريد تنفيذها حسب خوارزمية القادم أوال خيدم أوال .حيث
ميثل عمود العملية اسم العملية والعمود الثاين ميثل الوقت الذي حتتاجه كل عملية لتكمل عملها داخل املعاجل ،أحسب
اآليت :
.5أحسب متوسط زمن االنتظار إذا كان ترتيب الوصول عكسي ( p3مث p2مث )p1مث وصح الفرق بني
املتوسطني.
العملية الزمن
P1 24
P2 3
P3 3
احلل
إذا وصلت العمليات ِبلرتتيب P1مث P2مث ،P3ومت خدمتها برتتيب القادم أوال خيدم أوال ،فإن
اجملدول سينفذ العمليات على املعاجل حسب ترتيبها كالرسم التايل (: )Gantt Chart
.5إذا وصلت العمليات ِبلرتتيب العكسي فإن شكل العمليات داخل املعاجل سيكون كاآليت:
76
عليه فإن متوسط زمن االنتظار = ( 5 = 5/)2+5+2ملي اثنية.
حيث نالحظ أن متوسط زمن االنتظار إذا نفذت العمليات الكبرية يف النهاية أفضل من متوسط زمن
االنتظار إذا مت تنفيذ العمليات الكبرية أوال.
تعترب هذه اخلوارزمية مثالية حيث إهنا تعطي أقل متوسط زمن انتظار.
املشكلة األساسية يف هذه اخلوارزمية هي معرفة طول الوقت الذي ستحتاجه العملية داخل املعاجل
مسبقا ،فغالبا ال يعلم اجملدول ذلك مما يصعب معرفة العملية األقصر.
سيكون األداء ضعيف يف حالة وصول عمليات قصرية بعد بدء تنفيذ عملية طويلة.
كذلك قد حيدث حرمان للعمليات الطويلة (حترم من التنفيذ لوجود عمليات قصرية).
تفشل اخلوارزمية مع العمليات اليت كانت سابقا قصرية لكنها اآلن أصبحت طويلة.
غري قابلة للتوقف ( :)Non-preemptiveإذا بدأت عملية التنفيذ داخل املعاجل لن تتوقف لعملية
أخرى.
قابلة للتوقف ( :)Preemptiveإذا وصلت عملية جديدة إىل صف االنتظار وكان زمنها أقصر من الزمن
املتبقي للعملية اليت تنفذ حاليا ِبملعاجل سيقوم اجملدول إبخراج األوىل وإدخال اليت وصلت حديثا.
77
مثال ()0
مثال على العمليات الغري قابلة للتوقيف واليت وصلت يف نفس الوقت (أي دون إعتار لزمن الوصول).
العملية الزمن
P1 6
P2 8
P3 7
P4 3
جدول هذه العمليات ِبستخدام خوارزمية األقصر أوال ؟
احلل
سنقوم بعمل رسم شكل ( )Gantt chartيوضح كيف ستكون العمليات داخل املعاجل:
مثال ()5
مثال على عمليات مل تصل يف وقت واحد ِبستخدام خوارزمية األقصر أوال القابلة للتوقف.
78
إذا كانت العمليات إىل صف االنتظار حسب عمود زمن الوصول املبني أمام كل عملية ِبجلدول فوضح
كيف يستخدم اجملدول خوارزمية األقصر أوال القابلة للتوقيف (.)preemptive
احلل
زمن انتظار العملية = زمن االنتظار الكلي – زمن الوصولِ ،بلتايل فإن:
مثال ()4
مثال آخر على عمليات مل تصل يف وقت واحد ِبستخدام خوارزمية األقصر أوال الغري قابلة للتوقف.
79
احلل
مثال ()3
80
زمن انتظار 3 = 2 – ))0-00(+2( = P1
.4.3.5األولوية ()Priority
ك ل عملي ة ل ديها رق م مرف ق معه ا ،ه ذا ال رقم حي دد أمهي ة العملي ة ،حي ث س يتم تنفي ذ العملي ة ذات األولوي ة
األعلى (أقل رقم) .فإذا كنا نعترب أن الرقم األقل ميثل األولوية األعلى ،فهذا يعين أنه إذا كان لدي عملية برقم األولوية 3
وهنال ك عملي ة ب رقم األولوي ة ،5فس ينفذ اجمل دول العملي ة ذات ال رقم 3قب ل العملي ة ذات ال رقم ،5ألن أولويته ا أعل ى.
هنالك نوعني مها:
.4.3.5.0احلرمان ()Starvation
املشكلة يف خوارزمية األولوي ة ه و احلرم ان (( ،)Starvationحي ث ل ن جت د العملي ات ذات األولوي ة ال دنيا
فرص ة للتنفي ذ داخ ل املع اجل طامل ا أن هنال ك عملي ات ذات أولوي ة أعل ى منه ا .حي ث س ينفذ املع اجل العملي ات ذات
األولوي ة العلي ا وكلم ا ق رب دور العملي ات ذات األولوي ة ال دنيا للتنفي ذ داخ ل املع اجل ق د تص ل عملي ات أخ رى هل ا أولوي ة
أعلى منها فتحرمها من استخدام املعاجل.
حل مش كلة احلرم ان ه و النض وج ( ،)Agingأي ك ل م ا م ر زم ن طوي ل عل ى عملي ة ذات أولوي ة دني ا نرف ع
أولويتها درجة ،وهكذا إذا مر وقت طويل على هذه العملية ستصبح ذات أولوية عليا ونكون هبذا مكناها من التنفيذ.
مثال ()2
81
العملية رقم األولوية زمن العملية
P1 3 10
P2 1 1
P3 3 2
P4 4 1
P5 2 5
احلل
ِبستخدام خوارزمية األولية سيكون شكل العمليات داخل املعاجل كما يلي:
مثال ( :)5مترين
قم حبل املثال السابق بطريقة األولوية الغري قابلة للتوقف إبعتبار أن العمليات مل تصل يف وقت واحد (حمدد
زمن وصول كل عملية يف عمود "زمن الوصول").
82
.4.3.4التقسيم الزمين ())Round Robin (RR
هذا النوع من اخلوارزميات صمم خصيصا لل نظم ال يت تس تخدم املش اركة الزمني ة ( ،)time sharingفلك ل
عملية حصة زمنية داخل املعاجل خترج بعدها من املعاجل لتدخل العملية اليت تليها فتأخذ نفس احلصة الزمنية اليت أخذهتا
العملي ة األوىل ،وهك ذا ي تم تقس يم زم ن املع اجل حبي ث أتخ ذ ك ل عملي ة حص ة ِبملع اجل ،مث تب دأ م ن جدي د .فاخلوارزمي ة
تعمل بطريقة تشبه خوارزمية القادم أوال خيدم أوال ،لكن مع إمكانية توقيف كل عملية إذا اكتمل ت الف رتة الزمني ة املق ررة
هل ا داخ ل املع اجل .حي ث حت دد احلص ة الزمني ة ( )quantum or time sliceبقيم ة ص غرية ت رتاوح ب ني 02إىل
022ملي اثنية.
يقوم اجملدول بتقسيم زمن املعاجل بني العمليات فتعطى كل عملية حصة زمنية حمددة داخل املعاجل ،ويتم حتديد
الف رتة الزمني ة لك ل العملي ات فيم ا يس مى ،Quantumف إذا كان ت قيم ة Quantumه ي ،02فه ذا يع ين أن
اجملدول سيسمح لكل عملية أن تنفذ يف املعاجل ملدة 02ملي اثنية ،مث خترج (ترج ع إىل هناي ة ص ف االنتظ ار) ،وت دخل
العملية اليت تليها ،لتأخذ 02ملي اثنية وهكذا.
تنيهات
إذا ك ان ال زمن ال ذي حتتاج ه العملي ة أق ل م ن احلص ة املق ررة ،فس تأخذ العملي ة م ا حتتاج ه م ن احلص ة وخت رج
لتدخل العملية اليت تليها .مثال إذا كان ت العملي ة حتت اج 5مل ي اثني ة وكان ت احلص ة املق ررة للعملي ة ه ي 02
ملي اثنية ،فستمكث العملية ِبملعاجل 5ملي اثنية وليست 02ملي اثنية.
ال توج د عملي ات غ ري قابل ة للتوق ف يف ه ذه اخلوارزمي ة فك ل العملي ات س تجرب عل ى التوق ف عن د إكتم ال
حصتها ِبملعاجل.
مثال ()8
يف اجلدول التايل عمليات حدد ت هلا حصة زمنية ( )Quantumتساوي 4ملي اثنية ،أحس ب ك ل م ن
متوسط زمن االنتظار ومتوسط زمن االكتمال هلذا العمليات.
العملية الزمن
P1 24
P2 3
P3 3
احلل
83
العمليات داخل املعاجل ستكون كالشكل التايل:
مثال ()3
إذا كانت احلصة الزمنية لكل عملية هي 02ملي اثنية ،أحسب متوسط زمن االنتظار.
الزمن العملية
53 P1
17 P2
68 P3
24 P4
احلل
84
زمن انتظار 34 = )005-054(+)35-35(+55 = P3
أو ميكن استخدام تطبيق كونسول ( )console applicationيف visual basic.NETإلدخال بياانت
العمليات كاآليت:
Dim x, y As Integer
)" Console.Write("Enter number of processes:
)(x = Console.ReadLine
Dim z(x - 1) As Integer
For y = 0 To x - 1
)Console.WriteLine(" Enter burst time for process " & y
)(z(y) = Console.ReadLine
85
Next
بعد إدخال بياانت العمليات (اسم العملية مثال ووقتها) ،سنقوم حبساب زمن اإلنتظار لكل العمليات ()FCFS
وذلك ِبلطريقة التالية:
wt(0) = 0
For i = 1 To x - 1
)wt(i) = z(i - 1) + wt(i - 1
Next
حيث سيكون متوسط زمن إنتظار العملية األوىل هو ، wt(0)=0وزمن إنتظار العملية الثانية هو )w(1
) ،= z(0) + wt(0أي زمن إنتظار العملية األوىل مضافا إليه زمن العملية األوىل .نستخدم التكرار حلساب كل
العمليات ،فيما يلي الشفرة الكاملة اليت تستخدم إلدخال أي عدد من العمليات وحساب زمن إنتظار العمليات
( )wtومتوسط زمن اإلنتظار لكل العمليات (:)awt
Module Module1
)(Sub Main
Dim x, y As Integer
)" Console.Write("Enter number of processes:
)(x = Console.ReadLine
Dim z(x - 1), z2(x - 1), wt(x - 1) As Integer
For y = 0 To x - 1
)Console.WriteLine(" Enter burst time for process " & y
)(z(y) = Console.ReadLine
Next
Dim twt As Double = 0.0
For i = 0 To x - 1
)z2(i) = z(i
))Console.WriteLine("Burst time for p" & i & " = " & z2(i
Next
wt(0) = 0
For i = 1 To x - 1
)wt(i) = z(i - 1) + wt(i - 1
Next
86
For i = 0 To x – 1
Console.WriteLine("waiting time for p" & i & " = " & wt(i))
twt = twt + wt(i)
Next
87
.4.5متارين
.0أذكر ثالث أمثلة من خوارزميات اجلدولة ؟
.0إذا كان لدينا العمليات التالية مبني فيها ما حتتاجه من وقت داخل املعاجل:
.3أكتب برانمج بلغة Cيقوم بقبول أزمان العمليات املوجودة ِبلسؤال رقم ( )4مث حساب متوسط زمن االنتظار
ِبستخدام أحدى اخلوارزميات التالية.FCFS, SJF, RR, Priority:
89
أحسب متوسط زمن االنتظار ِبستخدام خوارزميات اجلدولة التالية:
ِ .5بفرتاض أن هنالك جمموعة من العمليات وصلت مجيعها يف الزمن صفر ،وموضح الزمن الذي حتتاجه للتنفيذ يف
اجلدول التايل:
أرسم خمطط جانت ( )Gantt chartيوضح تنفيذ العمليات أعاله ِبستخدام خوارزمية التقسيم ()RR
يف احلاالت التالية:
ما هي احلالة اليت تعطي أقل زمن إنتظار ؟ وماذا تستنتج من إجابتك ؟
90
تنبيه :الزمن الكلي للعملية هو من زمن وصوهلا (صفر) إىل إكتماهلا.
.8أحسب متوسط زمن االنتظار إذا كانت احلصة الزمنية لكل عملية هي 02ملي اثنية.
91
الباب اخلامس :خيوط التنفيذ
92
الباب اخلامس
خيوط التنفيذ
Thread of Execution
.3.0مدخل
دعنا نضرب مثل تشبيهي يوضح فكرة اخليوط قبل الدخول يف تعريفها ومفهومها واستخدامها.
5+6+7+8
فإذا طلبنا من أي تلميذ حل هذه املسألة ،فإنه سيحلها غالبا يف ثالث خطوات هي:
نالحظ أن اخلطوات هذه تتم متتالية .فإذا أفرتضنا أن كل خطوة حتتاج اثنية من هذا التلميذ فإنه سينجز
العمل يف 3ثوان (أي .)20+8=28 ،13+7=20 ،5+6=13هنا ال يستطيع التلميذ القيام خبطوتني يف وقت
واحد ،وهذا يشبه العملية العادية (ذات اخليط الواحد).
اآلن لو احضر هذا التلميذ أحد زمالئيه ليساعده يف حل هذه املسألة ،فيمكن للتلميذ األول أن حيسب ،5+6
والتلميذ الثاين حيسب ، 7+8يف وقت واحد (اخلطوتني يف اثنية واحدة) ،ويقوم أحدمها جبمع النتيجتني ليحصل على
القيمة النهائية يف اثنية ،هنا جند أن املسألة حلت يف اثنتني بدال من ثالث ثوان (أي 33%أسرع من األوىل).
نالحظ أن اخلطوتني األوائل قد متتا يف وقت واحد ،لكن اخلطوة الثالثة ال ميكن أن تتم إال بعد إنتهاء اخلطوتني
السابقتني ألهنا تعتمد علي نتائجهما .من هنا نسنتج:
أن القيام أبكثر من عمل يف وقت واحد يعين عملية هلا أكثر من خيط.
93
ال ميكن للخيوط أن تعمل ِبلتوزاي إذا كانت تعتمد على بعضها (مثل حتصيل الناتج النهائي) ،البد من أن
تكون اخليوط مستقلة عن بعضها لتعمل معا يف وقت واحد ،وإال فلن نستفيد من وجود أكثر من خيط يف
العملية.
.3.0تعريف اخليط
العملية يف وضعها الطبيعي تنفذ عمل واحد ،ونطلق عليها عملية أحادية اخليط (.)single thread
ولكن ماذا لو أردان من العملية أن تنفذ أكثر من عمل يف نفس الوقت ،هنا البد من أن جنعل العملية متعددة اخليوط
( ،)multiple threadsالشكل ( .)0-3حيث تشتغل كل اخليوط اليت توجد يف العملية يف وقت واحد ِبلتوازي
مما حيقق التزامنية ( .)concurrencyتتشارك خيوط العملية الواحدة يف بنية معلومات واحدة ( ،)PCBلكن لكل
خيط بنية معلوماته اخلاصة به واليت ختتلف عن بقية بينية معلومات اخليوط األخرى اليت معه يف نفس العملية.
oاملكدس (.)stack
oاملسجالت (.)register
oعداد الربامج.
oحالة اخليط.
شكل رقم :0-3الفرق بني عملية خبيط وعملية متعددة اخليوط [.]04
94
أحياان نطلق على اخليط عملية خفيفة ( .)lightweight processذلك ألن اخليط ميتلك الكثري من
خصائص العمليات.
ال ترتبط اخليوط أبي مورد لذلك فإن إنشاءها وتدمريها أسهل من إنشاء وتدمري العمليات .وقد يكون إنشاء
اخليط يف بعض األنظمة أسرع مبئة مرة من إنشاء العملية.
.3.0.0مثال تشبيهي
إذا تعاملت مع شركة معمارية وطلبت منها تنفيذ عمل معني ،فأنت يف تعاملك مع الشركة ال هتتم وال
تعرف كم عامل سينفذ عملك ،فالشركة تشبه العملية ،والعمال هم (اخليوط) داخل الشركة (العملية) .إذا نفذ العمل
عامل واحد فأنت تتعامل مع الشركة كعملية تقليدية ذات خيط واحد (النظام القدمي) ،فعلى العامل هنا أن ينفذ العمل
ِبلتوايل جزئية تلو األخرى ،أما إذا نفذ العمل عدد من العمال فأنت تتعامل مع شركة (عملية) ذات خيوط متعددة،
حيث ينفذ العمال العمل ِبلتوازي ،كل عامل يقوم جبزئية من العمل يف وقت واحد .والفرق واضح بني االثنني.
تستخدم معلومات الشركة حينما تتعامل معها (يشبه ،)PCBوداخل الشركة توجد معلومات عن كل
عامل (معلومات اخليط) ،حيث يتشارك كل العمال يف عنوان الشركة ،ولكن خيتلفوا يف عناوينهم اخلاصة واليت متيزهم
عن بعضهم البعض.
.3.5أنواع اخليوط
ختتلف اخليوط يف طريقة اإلدارة والدعم ،فهنالك خيوط تدار وتدعم بواسطة نظام التشغيل وهنالك ما يدار
بواسطة املستخدم.
يتم تطبيق خيط املستخدم بواسطة مكتبات ،مثل مكتبة ،pThreadsحيث توفر مثل هذه املكتبات
االدارة والدعم الكامل للخيوط ،فكل ما يتعلق ِبلتعامل مع اخليط من إنشاء ،وإهناء ،جدولة ،وحفظ واسرتجاع يتم
من دون أي مساعدة أو تدخل من نظام التشغيل ،ودون اإلرتباط بلغة برجمة معينة.
95
عيب هذا النوع أن نظام التشغيل ال يتعامل مع اخليوط املوجودة ِبلعملية ،لذلك عندما حيجز عملية معينة،
فإنه حيجز العملية ككل مبا فيها من خيوط وال يستثىن أي خيط داخل العملية من احلجز ،رغم أن بعض اخليوط قد
تكون قادرة على العمل .أما ميزته فهي سرعة وسهولة إنشاء وإدارة اخليوط.
.3.5.0خيط النواة
هنا يتم دعم اخليط مباشرة بواسطة نظام التشغيل فهو الذي يوفر طرق التعامل مع اخليط من إنشاء وإهناء،
جدولة وإدارة .وألن إدارة اخليط تتم بواسطة نظام التشغيل فهذا جيعل خيط النواة بطئ نوعا ما مقارنة خبيط املستخدم.
ولكن إذا مت توقيف خيط لسبب ما ،فيمكن خليوط أخرى يف نفس العملية أن تعمل دون أن تتأثر حبجز رفيقاهتا.
عيب هذا النوع أنه أكثر بطء يف االنشاء واالدارة من خيط املستخدم.
هل هنالك نظم تشغيل تدعم النوعني ،خيط املستخدم وخيط النواة.
.3.4مناذج اخليوط
بعض نظم التشغيل املتوفرة حالية توفر دعم خليط النواة .بينما هنالك الكثري من املكتبات ولغات الربجمة اليت
تدعم خيط املستخدم .يف هذه احلالة البد من عالقة بني خيوط النواة وخيوط املستخدم وكيف تتعامل مع بعضها
البعض .يقسم أهل التخصص هذه العالقة إىل ثالثة أنواع:
96
متعدد لواحد.
متعدد ملتعدد.
واحد لواحد
يتميز هذا النوع أبنه عند استدعاء خيط لنداء نظام احلجز ميكن خليوط اخرى أن تعمل .وميكن هلذا النوع ان يعمل
ِبلتوازي يف عدد من املعاجلات/األنوية .عيبه أنه كل ما انشاءت خيط مستخدم البد من انشاء خيط نواة مقابل له،
وهذا يؤثر سلبا على االداء ،لذلك جند معظم نظم التشغيل اليت تدعم هذه النماذج تسمح للتطبيقات إبنشاء عدد
معني من اخليوط ال تتجاوزه.
متعدد لواحد
ادارة اخليوط تتم يف مساحة املستخدم ،لكن سيتم حجز العملية كاملة إذا استدعى اي خيط نداء حجز
( .)blocking system callوالن خيط واحد يستطيع الوصول للنواة يف اللحظة الواحدة ،فلن تستطيع خيوط
املستخدم العمل ِبلتوازي ولن تستفيد من املعاجل متعدد األنوية.
97
شكل رقم :4-3متعدد لواحد [.]04
متعدد ملتعدد
خيوط املستخدم تقابل عدد أقل أو مساوي خليوط النواة .يفيد هذا النوع يف التوازي حيث ميكن تنفيذ عدد من خيوط
املستخدم بعدد خيوط النواة املتاحة (درجة التعددية) ،وإذا استدعى اي خيط نداء نظام للحجز ميكن خليوط مستخدم
أخرى أن تعمل مستفيدةً من املعاجل.
98
جدول :0-3مقارنة بني خيط املستخدم وخيط النواة [.]04
املكدسة (.)stack
نالحظ هنا أن بنية اخليط صغرية احلجم مقارنة مع بنية العملية وِبلتايل حتول املعاجل بني اخليوط يكون أسرع
وأبسط من حتول املعاجل بني العمليات.
انتقال املعاجل بني العمليات أو اخليوط تتم إبخراج عملية من املعاجل (توقيفها أو حجزها) ،وإدخال عملية
أخرى للمعاجل للتنفيذ ،هنا نقول أن املعاجل انتقل من تنفيذ العملية األوىل إىل تنفيذ العملية الثانية .هذا االنتقال أو
التحول يسمى ( )context switchingويعترب مكلف زمنيا ،فلكي يتم االنتقال البد من حفظ معلومات العملية
( )PCBاملنفذة حاليا (املنتقل منها) ،وحتميل معلومات العملية ( )PCBاليت ستدخل املعاجل (املنتقل إليها).
وحيدث نفس األمر يف االنتقال بني اخليوط ،لكن الفرق هنا أن معلومات اخليط اليت ستحفظ ومعلومات
اخليط اآلخر اليت ستحمل قليلة وِبلتايل فإن الزمن املستغرق حلفظ وحتميل بياانت اخليط أقل بكثري من الزمن املستغرق
حلفظ وحتميل بياانت العملية ،لذلك يعترب زمن التحويل بني اخليوط أقل من زمن التحويل بني العمليات.
99
عملية حفظ بياانت العملي ة املوقفة وحتميل بياانت العملية املراد تشغيلها يستغرق وقتا من نظام
التشغيل ويسمى زمن التحويل ( .)context switching timeويعتمد الزمن املستغرق يف
التحول من عملية إىل أخرى على املكوانت املادية املستخدمة.
ملحوظة
يف األنظمة أحادية املعاجل (حاسب مبعاجل واحد) ،فإن املعاجل ال يستطيع تشغيل أكثر من عملية يف اللحظة
الواحدة ،ولكن ميكن االستفادة القصوى من املعاجل بتحميل عدد من العمليات يف الذاكرة مث جعل املعاجل ينتقل بني
هذه العمليات بسرعة عالية ،وكلما احتاجت عملية انتظار حدث يقوم نظام التشغيل (مدير املعاجلة) إبخراجها مث
تشغيل عملية أخرى مكاهنا وهكذا يظل املعاجل مشغوال .بينما يبدو للمستخدم أن املعاجل يشغل عدد من العمليات معا
(تعدد املهام).
.3.2استخدامات اخليط
كل الربامج احلديثة اليت نتعامل معها مكونة من جمموعة من اخليوط ،فمحرر النصوص ،واملتصفح ،الرسام ،
وكل الربامج اليت حولك جتدها مكونة من عدد من اخليوط .ذلك ألن معظم التطبيقات هبا العديد من األشياء اليت
حتدث يف وقت واحد.
.3.2.0حمرر النصوص
الشكل رقم ( )6-3يوضح مثال لعملية (برانمج حمرر نصوص) حيتوي على ثالث خيوط ،وكل خيط ينفذ
مهمة معينة ،فهنالك خيط يستجيب للمدخالت عرب لوحة املفاتيح واملاوس وينفذ األوامر اليت ترد عربها مثل االنتقال
لصفحة معينة .بينما هنالك خيط اثين يقوم بعملية إعادة شكل الوثيقة ،فإذا قمت حبذف مجله سيقوم هذا اخليط
إبعادة ترتيب النص كامال بعد حذف اجلملة ،وهنالك خيط اثلث يقوم بعملية احلفظ التلقائي (كل فرتة).
مثال لو كان برانمج حمرر النصوص يعمل خبيط واحد ،فلن تستطيع االنتقال إىل صفحة مع ظهور شكل
البياانت املعدلة يف نفس الوقت ،وعندما يعمل احلفظ التلقائي البد من توقف كل شيء حىت يكتمل احلفظ.
100
شكل رقم ( :)6-3برانمج حمرر نصوص مكون من ثالث خيوط [.]03
.3.2.0خمدم الويب
وظيفة خمدم الويب ( )web serverهي الرد على طلبات املتصفحني وإرسال ما يريدون من صفحات إىل
أجهزهتم .ويوجد يف كل جهاز خمدم ويب على اإلنرتنت مثال وفيه عدد من املواقع ،قد يتصل أكثر من شخص هبذا
اجلهاز ويطلب عرض أكثر من صفحة يف نفس الوقت ،هنا ينشي خمدم الويب خيط لكل متصل يتحاور معه ويرسل
له طلباته.
إذا اتصل مائة عميل هبذا املخدم يف وقت واحد ،سيكون هنالك خيط واحد خلدمة هؤالء العمالء ،واحد
تلو اآلخر (ِبلتتايل) ،فإذا أفرتضنا أن كل طلب يستغرق دقيقة واحدة ،فإن العميل رقم مائة ستتم خدمته بعد ساعة
وأربعون دقيقة .هل ستستخدم اإلنرتنت إذا كان املخدم يعمل هبذه الطريقة ؟
شكل رقم ( :)7-3عملية خمدم ويب تنشي خيط لكل طلب [.]03
101
.3.5مكتبات اخليوط
مكتبات اخليوط توفر للربمج واجهات تطبيقية النشاء وادرة اخليوط من داخل برانجمه .هنالك ثالث مكتبات شهرية
تدعم التعامل مع اخليوط هي ويندوز ،جافا ،و .pThreads
.3.5.0استخدام Pthreads
هنا سنوضح مثال بسيط الستخدام مكتبة Pthreadsليتضح الفرق بني استخدام اخليط يف جافا (على
مستوى لغة الربجمة) وبني استخدامه يف مكتبة غري مرتبطة بلغة برجمية معينة Pthreads .هي مكتبة متوفرة يف لينكس
قمنا ِبستخدامها مع لغة Cلتوضيح كيف ننشئ خيط وكيف نديره بواسطة هذه املكتبة.
.3.5.0.0إنشاء خيط
إلنشاء خيط تحتاج استخدام الدالة )( pthread_createواليت حتتوي على املعطيات التالية:
املعطى الثاين مؤشر إىل مكان الكائن الذي حيدد صفات اخليط ،إذا استخدمت nullهنا فهذا يعين أنك
تريد الصفات االفرتاضية للخيط.
املعطى األخري هو القيم ( )argumentاليت نريد متريرها إىل الدالة املنفذة داخل اخليط ،إذا مل يكن لديك
قيم تريد متريرها إىل الدالة ميكنك كتابة nullيف هذه اخلانة.
فهذا يعين أنين أريد إنشاء خيط خيزن تعريف هذا اخليط يف املتغري ، th_IDويستخدم هذا اخليط الصفات
االفرتاضية ،وينفذ هذا اخليط الدالة th_funاليت تكون مدخالهتا .value
إذا أردت إنشاء ثالث خيوط فعليك استدعاء الدالة )( pthread_createثالث مرات.
أيضا نستدعي الدالة )( pthread_joinمع كل خيط قمنا إبنشائه لضمان إنتهاء اخليوط قبل إنتهاء الدالة الرئيسية
.main
الربانمج ( )0-3يقوم إبنشاء خيطني ،حيث يقوم كل خيط بطباعة رسالة على الشاشة.
102
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *p_message( void *ptr );
main(){
pthread_t thread1, thread2;
char *m1 = "Thread 1";
char *m2 = "Thread 2";
int r1, r2;
:خمرج الربانمج
Thread 1
Thread 2
Thread 1 returns: 0
Thread 2 returns: 0
103
.3.5.0.0إهناء خيط
إلهناء خيط نستخدم الدالة )( ،pthread_cancelلكن عليك التأكد من أن اخليط الذي تريد إهناؤه ال
يستخدم موارد قبل إهناؤه .مثال إذا كان اخليط حيجز مساحة ِبلذاكرة وقمنا ِبستدعاء دالة اإلهناء
)( pthread_cancelسنفقد مكان هذه الذاكرة وستظل حمجوزة بال فائدة (.)memory leak
.3.5.0خيوط جافا
لغة جافا تعترب من اللغات اليت توفر دعم اخليط على مستوى اللغة ،فهي توفر مكتبة كاملة إلنشاء وإدارة
اخليوط.
.3.5.0.0إنشاء اخليط
أبسط طريقة إلنشاء اخليط يف اجلافا يكون بوراثة فئة اخليط املسماة ( )Threadواملوجودة مبكتبة جافا.
مثال األمر التايل:
ميكنك من وراثة الصف ،Threadحيث يكون لديك الصف thالذي يتعترب صف خيط .حيتوي
الصف thعلى دالة تسمى ،runهذه الدالة هي اليت تنفذ اخليط ،وقد ورثناها من الصف .Threadسنضع ما
نريد تنفيذه داخل هذه الدالة ،مثال:
}System.out.print("Inside thread"):
}
) (t1.start
104
تنبيه :اخليط t1يعترب اخليط الثاين يف العملية ذلك ألن العملية يف األساس لديها خيط واحد يعترب اخليط
الرئيسي .فكل عملية حتتوي عادة على خيط رئيسي واحد ،إذن اآلن لدينا خيطني يف العملية .تشغيل خيط العملية
األساسي يتم يف .mainالربانمج ( )0-3هو برانمج صغري يوضح كيفية إنشاء ثريد وتشغيله من داخل .main
.3.8حاالت اخليط
للخيط حاالت ينتقل بينها أثناء التنفيذ ،الشكل ،8-3هي:
جديد ( :)newعند إنشائه ِبألمر .newيف الربانمج ،0-3يعترب اخليط thيف حالة جديد عند
استخدام األمر:
شغال (منفذ) :Runnableاألمر )( startحيجز مساحة ِبلذاكرة للخيط ،ويستدعى الطريقة )(run
ِبلكائن ( t1يف املثال ،)8-3هنا نقول أن حالة اخليط t1هي .Runnable
105
حمجوز ( )blockedأو غري شغال ( :)not Runnableإذا كان اخليط يقوم بعملية دخل أو خرج ،أو
مت استدعاء )( suspendأو )(.sleep
ميت ( :)Deadيصبح اخليط ميتاً إذا انتهى عمل الطريقة )( runأو استدعينا )(.stop
من الصعب معرفة حالة اخليط ،ولكن قد تعرف هل اخليط حي يرزق أم ال ِبستخدام الطريقة )( isAliveواليت ترجع
قيمة منطقية (نعم (حي) ،أم ال (مات)).
"إنشاء اخليط أسرع مبئة مرة من إنشاء العملية" ،أثبت أن هذه العبارة صحيحة (أحبث يف اإلنرتنت عن .3
ذلك) ؟
أذكر مثال لنظام تشغيل يدعم خيط املستخدم ومثال لنظام تشغيل يدعم خيط النواة ؟ .3
106
ما هي مكوانت بنية معلومات اخليط اليت حيتاج حلفظها عند التحول من حالة التنفيذ إىل حالة أخرى؟ .02
أذكر دوال اخليط يف جافا واليت تستخدم يف تشغيل وتوقيف وإهناء اخليط ؟ .00
107
الباب السادس :التزامن
108
الباب السادس
التزامن ()synchronization
.2.0مقدمة
إذا كنت تربمج على حاسب شخصي وتكتب برامج عادية ،فسيكون مهك األكرب هل املخرج أو الناتج
الذي يظهره الربانمج وهل هو املطلوب أم ال ؟
ولكن للتطور تبعاته ،فإذا صممت برانمج ليعمل يف شبكة ويتشارك البياانت مع برامج أخرى ،فستظهر مهوم
أخرى مع اهلموم اليت كانت مسبقا ،مثل هل البياانت متوافقة؟ وهل ما قراءته من معلومات هو آخر ما مت حتديثه ،وهل
على برانجمك االنتظار يف حلظة معينة حىت يتزامن عمله مع بقية الربامج اليت تتشارك معه يف البياانت أو الربامج اليت
تتعاون معه يف اجناز مهمة مشرتكة؟ و ما إىل ذلك من مشاكل اليت جلبتها علينا التعددية والتشارك يف البياانت.
التوازي قد يطبق على مستوى العمليات ( )concurrent processesأو على مستوى اخليوط
(.)concurrent threads
العملية املستقلة هي اليت ال تؤثر وال تتأثر ِبلعمليات اليت تعمل معها يف نفس الوقت.
العملية تكون متعاونة إذا أثرت و/أو أتثرت ِبلعمليات األخرى اليت تعمل معها ِبلتوازي.
.2.5تعاون العمليات
إذا احتاجت العمليات املتوازية أن تتشارك يف بعض املوارد أو أن تؤدي عمال مشرتكا ،فالبد هلا من أن
تتعاون مع بعضها البعض .هذا التعاون يتطلب اتصال بني العمليات (أواخليوط) وعملية تزامن
(.)synchronization
االتصال بني العمليات يتم عن طريق متغريات مشرتكة ( )shared variablesأو بتبادل الرسائل
( .)message passingوالتزامن تحتاجه ليتم االتصال يف الوقت املناسب ،ويتحقق بوضع نقاط تزامن للعمليات
109
حبيث إذا سبقت عملية بقية العمليات ووصلت نقطة تزامن ،عليها أن تنتظر بقية العمليات األخرى لتصل هذه النقطة،
وإال سيكون لدينا نتائج غري متوقعة.
العمليات املتزامنة غالبا ما تتنافس على استخدام املوارد املشرتكة بينها بصورة احتكارية (،)mutually exclusive
حبيث ال ميكن لعمليتني استخدام نفس املورد يف نفس الوقت .اي أنه يف أي حلظة يسمح فقط لعملية واحدة
ِبستخدام املورد املشرتك.
طلب عملية خلدمة من عملية أخرى :يف هذه احلالة على العملية اليت طلبت اخلدمة انتظار العملية اليت طُلب
منها اخلدمة حىت تفرغ منها .مثال إذا طلبت عملية من نظام التشغيل معلومة معينة من القرص الصلب،
ستظل هذه العملية يف انتظار املعلومة حىت تصلها من القرص إىل الذاكرة ،أو إذا طلب املتصفح من خمدم
ويب ِبالنرتنت موقع معني فعلى املتصفح االنتظار حىت يرسل املخدم املوقع املطلوب ،فيقوم املتصفح وقتها
بعرضه على املستخدم.
زَيدة سرعة التنفيذ :وذلك بتقسيم مهمة واحدة كبرية إىل مهام صغرية (عمليات صغرية) ويتم تنفيذها
ِبلتوازي .قد تسبق عملية يف تنفيذها عمليات أخرى معها ،فإذا تركنا هذه العملية لتكمل تنفيذها دون
انتظار العمليات األخرى فقد يتسبب هذا يف نتائج غري متوقعة أو غري صحيحة ،لذلك البد من وضع نقاط
تزامن التتعداها العمليات السريعة ما مل تصل بقية العمليات هذه النقاط.
قد تعتمد بعض العلميات يف عملها على خمرج عمليات أخرى .مثال إذا استخدمنا األانبيب االنسيابية
( )pipelineبني عمليات فهذا يعين أن خمرج العملية األوىل سيكون مدخل للعملية الثانية ،يف هذه احلالة
ال ميكن للعملية الثانية أن تسبق العملية األوىل .مثال األمر التايل (يف ينكس):
$ ls | wc
هو أمر لتنفيذ عمليتني مها ، lsاليت تعرض حمتوَيت الدليل احلايل ،و wcلعد الكلمات .هنا البد من تزامن
(ستنتظر العملية الثانية خمرجات العملية األوىل لتعمل عليها (حتسب عدد كلمات املخرج)).
قد يكون من املالئم للعمليات أن تعمل مع بعضها الجناز عمل مشرتك ،مثال يف نظام الوسائط املتعددة
ميكن أن تقوم عملية إبحضار أجزاء املادة الوسائطية من القرص ووضعها يف ذاكرة مؤقتة (خازن
( ،))bufferبينما عملية أخرى أتخذ املادة من اخلازن وترسلها إىل جهاز الذي يصدر الصوت/الصورة .هنا
تعترب العملية األول منتج ( )producerبينما العملية الثانية مستهلك ( .)consumerوعلى املنتج
110
العمل على جعل اخلازن ممتلئا دوما حبيث ال يتوقف املستهلك عن العمل (ال جيد اخلازن فارغا) ،ألن
املستهلك إذا وجد اخلازن فارغا سيتوقف عن العمل وينتظر وصول بياانت للخازن مما يتسبب يف تقطع
الفيديو/الصوت أو تشويشه.
قد يقوم اجملدول (يف نظام التشغيل) حبجز أي عملية يف أي وقت وألي سبب ،هذا احلجز سيوقف العملية
اليت تنفذ حاليا يف املعاجل ،ويُدخل عملية أخرى مكاهنا (ِبلطبع سيكون هنالك حتول (،)context switching
حيث يتم حفظ معلومات العملية احملجوزة ويتم حتميل معلومات العملية اليت سيتم تنفيذها).
ال يستطيع املربمج معرفة مىت سيقوم اجملدول حبجز برانجمه (عمليته).
هذا يعين أن الربانمج قد يتوقف يف أي وقت (عندما حيجز) ،مث فيما بعد قد يواصل من آخر نقطة أوقف
فيها (بعد فك حجزه) .قد يتسبب هذا احلجز يف مشكلة إذا كانت العملية احملجوزة ضمن عمليات متعاونة.
.2.4النزاع ()competition
قد تكون للعمليات املتعاونة بياانت مشرتكة تستطيع الوصول إليها .إذا مل يكن هنالك حتكم يف طريقة
الوصول هلذه البياانت ستكون النتيجة وصول غري منظم هلا أو تنازع حوهلا وِبلتايل نتائج غري صحيحة .هذا الوصول
غري املنظم للبياانت املشرتكة يسمى حالة السباق ( .)race conditionحيث تتسابق العمليات يف تغيري قيمة
البياانت املشرتكة.
أيضا قد تكون العمليات مستقلة لكنها تتصل مع بعضها إلستخدام موارد مشرتكة ،مثال إفرتض أن لدينا
عمليتان ،كل عملية تريد طباعة ملف على الطابعة (كمورد مشرتك) ،ذلك البد هلما من اإلتصال بينمها ليقررا من
يستخدم الطابعة أوال ،وعلى العملية الثانية اإلنتظار جىت تفرغ األوىل من الطباعة .هذا يسمى هذا تنافس العمليات
( .)process competitionهذا الكالم حيدث يف غياب مدير يرشد وينظم استخدام املوارد.
111
.2.4.0مشاكل النزاع
فيما يلي نسرد بعض األمثلة اليت حتدث فيها مشاكل نتيجة لإليقاف غري املتوقع لبعض العمليات بواسطة
اجملدول.
إفرتض أن لدينا شبكة حواسيب حيث يتم ختزين كل ملفات املستخدمني يف خادم امللفات .إذا كان هنالك
مستخدمني يريدان تعديل ملف مشرتك بينهما يف نفس الوقت ،سيقوم كل مستخدم بفتح امللف يف جهازه (نسخة من
امللف) ،مث يقوم كل منهما بتعديل نسخته ،هذا التعديل لن يتم على امللف األصيل ِبخلادم وإمنا يف نسخة كل
مستخدم .وعندما يقوم املستخدم ِبحلفظ سيغري ذلك يف امللف األصلي .املشكلة هي أنه عندما يقوم املستخدم الثاين
حبفظ نسخة ملفه يف اخلادم سيكتب فوق تعديالت املستخدم الذي حفظ ملفه أوال ( .)overwriteهذه املشكلة
ينتج عنها خمرجات خاطئة.
الصحيح هو أنه عندما تعمل عمليتنان يف وقت واحد جيب أن تكون النتيجة متشاهبة بغض النظر أي عملية
أنتهت أول .ولكن عندما يؤثر ترتيب تنفيذ العمليات يف النتيجة يسمى هذا حالة السباق (.)race condition
ألن ذلك ميثل سباق بني العمليات لنعرف من ينتهي أوال.
إذا كان هنالك نظام حجز على خطوط طريان معينة ،يعمل على عدة فروع .وكان هنالك مقعد واحد فارغ
يف رحلة ما ،وجاء عميل حلجز هذا املقعد يف الفرع أ ،ويف نفس الوقت كان هنالك عميل ِبلفرع ب ،يريد حجز نفس
املقعد ،وقام املوظفني يف الفرعني بعملية طلب حجز للمقعد يف نفس الوقت ،ماذا حيدث ؟
العملية األوىل يف الفرع أ قامت ِبلتأكد من وجود مقعد فارغ ،وهذا ما فعلته أيضا العملية اليت نفذت يف
الفرع ب ،فالعمليتان قامتا ِبختبار وجود مقعد فارغ ،مث أجاب النظام للعمليتني "بنعم يوجد مقعد واحد فارغ" ،يف
هذه اإلثناء قام اجملدول (بنظام التشغيل) بتوقيف إحدى العمليتني لسبب ما ،فقامت العملية األخرى حبجز املقعد ،مث
بعد فك توقيف العملية األوىل ستكمل عملها وتنفذ األمر الذي يلي اختبار وجود مقعد فارغ (فهي اختربت املقعد
ووجدته فارغا قبل توقيفها) .فتقوم العملية حبجز املقعد الذي حجز من قبل ،وهبذا يتم حجز املقعد مرتني.
112
إذا كان هنالك حساب مفتوح ببنك ما ،وكان هذا احلساب مشرتك بني عميلني ،فقد يتفق وأن يطلب
العميلني سحب مبلغ من املال من احلساب املشرتك يف وقت واحد من فرعني خمتلفني .هنا ستنفذ عمليتني على
احلساب املشرتك ،حيث ستقوم العمليتني ِبختبار الرصيد (نفرتض أنه كان 0322دوالر) ،مث إذا أوقفت إحدى
العمليتني بواسطة اجملدول لسبب ما ،ونفذت العملية األخرى سحب املبلغ املطلوب (مثال 022دوالر) ،سيكون
الرصيد اآلن 0422دوالر .بعد أن يتم فك حجز العملية الثانية ستواصل من بعد آخر أمر كانت قد نفذته ،وهو
اختبار الرصيد ( 0322دوالر) ،وستنفذ السحب وختصم املبلغ من الرصيد (مثال إذا كان املبلغ املراد سحبه هو 022
دوالر ،فسيكون الرصيد املتبقي هو ( 0522دوالر) .وتعترب هذه العملية خطأ ،ولو عمل البنك هبذه الطريقة سيغلق
أبوابه قريبا.
النتيجة اخلاطئة اليت وصلنا إليها كان سببها الوصول غري املنظم لقاعدة البياانت وإجراء تعديل على احلساب
املشرتك بصورة غري منسقة (غري تزامين) مما نتج عنه خطأ يسمى حالة السباق ( .)race conditionحل مشكلة
مثل هذه يتم ِبلتأكد من أن عملية واحدة فقط يف حلظة معينة تقوم بتعديل البياانت املشرتكة.
املشاكل اليت سرندانها مسبقا معظمها تعاين من حالة السباق ،ولنوضح حالة السباق وطريقة حلها سنأخذ املثال
التايل:
إذا كان لدينا متغري ،xمشرتك بني عمليتني ،وقامت كل عملية ِبآليت:
املشكلة ستظهر عندما تقوم أحد العمليات بقراءة قيمة املتغري ،مث تقوم العملية الثانية بقراءة قيمة املتغري قبل
أن تقوم العملية األوىل حبفظ القيمة اجلديدة يف املتغري .فستكون النتيجة النهائية بعد تنفيذ العمليتان أن املتغري سيزيد
بواحد بدال من .2
احلل هو أن مننع أي عملية أخرى من الوصول للمتغري xإذا كانت هنالك عملية تستخدم هذا املتغري.
113
املنطقة اليت تتعامل مع املتغري املشرتك يف العملية نسميها املنطقة احلرجة ( .)critical sectionستكون منطقة
املتغري املشرتكة هي املنطقة احلرجة ،وحلل مشكلة حالة السباق جيب أن نتأكد من أن هنالك عملية واحدة تنفذ داخل
املنطقة احلرجة .وال يسمح للعملية الثانية ِبلدخول إىل املنطقة احلرجة إال بعد خروج العملية األوىل منها.
إذا مت تنفيذ عملييت كشف حساب ملعرفة الرصيد من حساب مشرتك ،فلن يسبب هذا مشكلة ،ألننا نريد
القراءة من قاعدة البياانت (يسمح أبكثر من عملية قراءة يف ذات الوقت) .ولكن ال يسمح بتنفيذ أي عملية على
الب ياانت املشرتكة إذا كانت هنالك عملية كتابة تعمل على هذه البياانت ،فإذا بدأت عملية يف تعديل البياانت املشرتكة
فعلى كل العمليات األخرى ،مبا فيها عمليات القراءة ،التوقف واالنتظار حىت تفرغ هذه العملية من عملها.
توفر نظم قواعد البياانت مثل أوراكل وأكسس إمكانية غلق السجالت اليت جنري عليها التعديل ( lock
)recordsواستخدامها بصورة احتكارية ( )exclusivelyحىت مننع الوصول إليها من قبل أي عملية أخرى أثناء
التعديل ،وهبذا نضمن توافقية البياانت (.)consistency
114
.2.5.0.0مشكلة القراءة والكتابة األوىل
إذا كانت هنالك عملية كتابة فلن نسمح ألي عملية أخرى ِبلوصول للبياانت املشرتكة ،ولكن إذا كانت
العملية اليت تتعامل مع البياانت عملية قراءة ،فيمكن ألي عملية قراءة أخرى من الوصول للبياانت املشرتكة .أي أن
عمليات القراءة تنفذ مبجرد وصوهلا ،بينما توقف عملية الكتابة حىت ال يكون هنالك عملية قراءة.
إذا كانت هنالك عملية قراءة ،مث جاءت عملية كتابة ،ستنتظر األخرية حىت تفرغ عملية القراءة ،يف هذه
االثناء إذا جاءت عملية قراءة أخرى (مسموح لعمليات القراءة أن تعمل مع بعضها) ،ولكن ليس من الالئق أن
تتخطى هذه العملية عملية الكتابة اليت طلبت قبلها استخدام البياانت املشرتكة .وإذا مسحنا لعملية القراءة الثانية
ِبلعمل فقد أتيت عملية قراءة اثلثة ورابعة وخامسة وهكذا ،مما يتسبب يف حرمان عملية الكتابة من العمل
( ،)starvationلذلك جيب على عملية الكتابة إذا وصلت صف االنتظار أال تنتظر أكثر من الالزم وأن تبدأ العمل
مبجرد وصوهلا .أي أن عمليات الكتابة تنفذ مبجرد وصوهلا ،بينما تنتظر عمليات القراءة حىت ال تكون هنالك عملية
كتابة.
مشكلة القراءة والكتابة األوىل تتسبب يف حرمان عمليات الكتابة ،ألن عمليات القراءة قد أتيت تباعا وتظل
عملية الكتابة يف انتظار دائم ال ينتهي.
مشكلة القراءة والكتابة الثانية تتسبب يف حرمان عمليات القراءة ألن عمليات الكتابة عندما أتيت لصف
االنتظار يسمح هلا ِبلعمل عند أول فرصة هلاِ ،بلتايل قد أتيت عمليات الكتابة تباعا وتستأثر ِبلوصول للبياانت دون
عمليات القراءة.
115
احلل الثالث جاء ليقول أنه مينع احتكار الوصول للبياانت إذا تعدى فرتة زمنية حمددة ،ولكل عملية قيد زمين
يف استخدامها للبياانت ال تتجاوزه ،فإذا كانت هنالك عملية تستخدم البياانت احتكارَي فعليها أن ترتك هذا االحتكار
وتنهي عملها إذا تعدى الفرتة املقررة للعملية.
ميكن حل هذه املشكلة إبجبار عملية املنتج على التوقف عن إحضار البياانت للخازن إذا كان ممتلئا
( .)sleepوعندما يفرغ اخلازن تقوم عملية املستهلك من إيقاظ املنتج ليبدأ يف تعبئة اخلازن .بنفس الطريقة تتوقف
عملية املستهلك ( )sleepإذا كان اخلازن فارغا ،وعندما حيضر املنتج بياانت للخازن ،يقوم إبيقاظها لتبدأ يف أخذ
البياانت من اخلازن .ميكن تطبيق هذا احلل ِبستخدام السيمافور ( )semaphoreالذي يعتمد على االتصال بني
العمليتني (.)inter-process communication
الربانمج ( )0-2يعترب حل للمشكلة ،حيث ميثل countعدد العناصر املوجودة ِبخلازن ،و املتغري item
ميثل اخلازن .هذا الربانمج يعمل كما يلي:
116
إذا كان األمر صحيحا سيتوقف املنتج عن تعبئة اخلازن ويذهب لينام ( ،)sleepولن يرجع لعمله ما مل يوقظه
املستهلك ،أما إذا كان اخلازن غري ممتلئ فسيواصل املنتج يف إحضار عناصر للخازن ِبألمر:
)putItemIntoBuffer(item
)(item = removeItemFromBuffer
int count
{ )(procedure producer
{ )while (true
)(item = produceItem
{ )if (count == BUFFER_SIZE
)(sleep
}
)putItemIntoBuffer(item
count = count + 1
{ )if (count == 1
)wakeup(consumer
}
}
}
{ )(procedure consumer
{ )while (true
{ )if (count == 0
)(sleep
}
)(item = removeItemFromBuffer
count = count - 1
117
{ )if (count == BUFFER_SIZE - 1
)wakeup(producer
}
)consumeItem(item
}
}
برانمج 0-2
هذا احلل سيقودان إىل اختناق .ملعرفة كيف حيدث االختناق دعنا نفرتض السيناريو التايل:
اخترب املستهلك countفوجده حيتوي على صفر () ،)if (count == 0لذلك سيذهب لينام
(.)sleep
ولكنه قبل أن يصل فراشه متت مقاطعته (قام نظام التشغيل بتوقيف املستهلك قبل تنفيذ .)sleep
بعدها سيضيف املنتج عنصر جديد إىل اخلازن (أصبحت countحتتوي .)0
حياول املنتج إيقاظ املستهلك ،ومبا أن املستهلك أصال مستيقظ فإن طلب اإليقاظ هذا الفائدة منه
(سيُفقد).
وألن املستهلك كان قد اخترب اخلازن (قبل إيقافه ) ووجده فارغا ،فإنه بعد أن يتم تشغيله مرة أخرى سيواصل
من آخر نقطة كان يعمل فيها وهي الذهاب للنوم (استدعاء ،)sleepولن يستيقظ مرة أخرى ،ألن أمر
اإليقاظ ( )wakeupقد فُقد (أصدره املنتج عند ما كان .)count=1
فيذهب املستهلك لينام ولن يستيقظ مرة أخرى (فهو ال يعلم أن أمر اإليقاظ قد فُقد).
سيستمر املنتج يف عمله إبحضار عناصر جديدة إىل اخلازن حىت ميتلئ:
بعدها سيذهب لينام ِبفرتاض أن املستهلك سيوقظه مرة أخرى ،ولكن هذا لن حيدث.
ومبا أن العمليتني غارقتان يف نومهما ،وتنتظر كل واحدة من األخرى إيقاظها (وال يوجد منبه) ،فستظالن
انئمتني إىل األبد مما ينتج عنه اختناق ال حمالة.
ملن لدية الرغبة يف التبحر يف هذا املوضوع هنالك اوراق حبثية عديدة يف اجملال مثل:
Mehmood, Syed Nasir, et al. "Implementation and experimentation of
consumer synchronization problem." Int J Comput Appl 14.3 (2011): 1-6.
118
.2.3.0.0.0احلل ِبستخدام السيمافور ()semaphore
حلل مثل هذه املشكلة ميكننا استخدام ما يسمى ِبلسيمافور .السيمافور هو عالمة كانت تستخدم قدميا
لتنظيم مرور القاطرات ،حيث سيكون للسيمافور حالتني ،إما حتت أو وفوق ،عندما تصل قاطرة وتريد الدخول
للمحطة سينظر السائق للسيمافور فإذا كانت وضعيته حتت فهذا يعين أن الطريق سالكة (تشبه إشارة املرور اخلضراء)،
وألن خط السكة حديد ال حيتمل تالقي قاطرتني ،فسريفع السيمافور إىل أعلى بعد دخول القاطرة حبيث ال يسمح
لقاطرة أخرى أن تدخل (اخلط مشغول) ويشبه هذا إشارة املرور احلمراء.
بنفس املفهوم سنستخدم متغري ميثل السيمافور (عدد صحيح حيتمل قيمتني) ،حيث متثل قيمة عالمة حتت
وقيمة أخرى عالمة فوق .مث إذا بدأت عملية استخدام بياانت مشرتكة ستضع القيمة اليت متثل عالمة فوق داخل متغري
السيمافور ،وإذا أرادت عملية أخرى استخدام البياانت املشرتكة ستخترب السيمافور ومبا أن عالمته فوق فهذا يعين أنه
ال يسمح هلا ِبستخدام البياانت املشرتكة اآلن.
دائما ختترب أي عملية السيمافور قبل الوصول للبياانت املشرتكة واعتمادا على وضعه تتخذ العملية
اإلجراء الالزم .وعلى أي عملية تستخدم البياانت املشرتكة أن تغري وضع السيمافور إىل فوق (ممنوع
االقرتاب أو التصوير) ،بعد أن تفرغ من البياانت املشرتكة ستغري وضع السيمافور إىل حتت (تصبح
البياانت متاحة للعمليات األخرى) .أهم خاصية يف نظام السيمافور هو أنه إذا وضعت العملية قيمة
فوق يف السيمافور فال ميكن لعملية أخرى الوصول إىل السيمافور حىت تكتمل العملية أو يتم توقيفها
(حجزها).
يف هذا الربانمج يغلق املنتج السيمافور ( ،emptyCountال يستطيع املستهلك تفريغ اخلازن يف هذه اللحظة) ،مث
بعد وضع عنصر يف اخلازن يفتح السيمافور .fillCount
عندما يريد املستهلك أخذ عنصر من اخلازن سيغلق السيمافور ،fillCountحبيث ال يستطيع املنتج التعبئة يف هذه
اللحظة ،مث بعد أخذ عنصر من اخلازن يفتح السيمافور .emptyCount
Semaphore fillCount=0
semaphore emptyCount = BUFFER_SIZE
{ )(procedure producer
{ )while (true
119
)(item = produceItem
)down(emptyCount
)putItemIntoBuffer(item
)up(fillCount
}
}
{ )(procedure consumer
{ )while (true
)down(fillCount
)(item = removeItemFromBuffer
)up(emptyCount
)consumeItem(item
}
برانمج 0-2
حل السيمافور مناسب إذا كان لدينا منتج واحد ومستهلك واحد .ولكن إذا كان هنالك أكثر من منتج
أو/و أكثر من مستهلك فإن هذا احلل قد ينتج عنه (.)race condition
120
شكل رقم ( :)0-2عشاء الفالسفة [.]02
تعريف املشكلة
كان هنالك مخسة فالسفة جيلسون على طاولة مستديرة ،وكانوا إما أن أيكلون أو أن يفكرون ،فإذا أكل
أحدهم فال يفكر إن فكر فال أيكل .وكانت لديهم مخسة شوك ،واحدة بني كل فيلسوفني (على ميني كل فيلسوف
شوكة وعلى يساره أخرى) .وحيتاج كل فيلسوف أن يستخدم شوكتني لألكل .والبد من أن يستخدم الشوكتني اللتني
على ميينه وعلى يساره مباشرة ،الشكل ( .)0-2إذا أخذ كل الفالسفة شوكاهتم اليسرى ،عندها لن يستطيع أي منهم
احلصول على الشوكة اليمىن ،وسيظل كل فيلسوف منتظرا الشوكة اليمىن حىت تفرغ ،أي أن الفيلسوف ف ،0سيكون
يف انتظار الفيلسوف ف 0ليرتك شوكته ،والفيلسوف ف 0سينتظر الفيلسوف ف 5ليرتك شوكته ،وهكذا (انتظار
دائري) ،مما يسبب إختناق (.)deadlock
ميكن حل املشكلة جبعل الفيلسوف يلتقط شوكته اليسرى مث خيترب هل الشوكة اليمىن متاحة ،فإن مل تكن
كذلك يضع الفيلسوف شوكته اليسرى وينتظر فرتة زمنية حمددة مث يعيد الكرة مرة أخرى .هذه الطريقة قد تفشل إذا قام
كل الفالسفة إبلتقاط شوكاهتم اليسرى يف وقت واحد ،فلن جيدوا شوكاهتم اليمىن ،فسيضعوا شوكاهتم اليسرى وينتظروا
ف رتة زمنية حمددة متساوية لكل الفالسفة ،مث يلتقطوا شوكاهتم اليسرى مرة اثنية ،ولن جيدوا اليمىن لذلك سيضعوا
شوكاهتم اليسرى مرة أخرى وينتظروا فرتة زمنية متساوية ،وهكذا يستمرون يف تكرار هذه احملاولة إىل ما ال هناية ،وتظل
املشكلة قائمة .هذا األمر حيرم مجيع الفالسفة من األكل (وحتصل جماعة) أو ما يسمى احلرمان (.)starvation
121
ميكن حل هذه املشكلة جبعل فرتات انتظار الفالسفة عشوائية وِبلتايل إحتمال أهنا تكون متساوية قد يكون
ضعيفا جدا ،وهذا ما يطبق ِبلفعل ىف كثري من األنظمة ،لكن أحياان نكون حباجة إىل حل ال حيتمل الفشل بسبب
تطابق الفرتات العشوائية .ذلك ألن هنالك من االنظمة ما تدير أجهزة حساسة ال تقبل إحتمال أي فشل مثل أنظمة
مراقبة املفاعل النووية.
حل آخر:
هنا نقوم ِبستخدام سيمافور ثنائي ( ،)semaphoreحيث يقوم الفيلسوف قبل احلصول على شوكة بغلق
السيمافور (حتت) ،مث بعد إعادة الشوكة يفتح السيمافور (فوق) .هذه الطريقة متكن فيلسوف واحد فقط أن أيكل يف
أي حلظة زمنية معينة ،ولكن مبا أن هنالك مخس شوك فمن املفرتض أن يكون هنالك فيلسوفني قادرين على األكل يف
اللحظة الواحدة.
حل اثلث:
أيكل.
يفكر.
حبيث يستطيع الفيلسوف اجلائع أن أيكل فقط إذا كان جاريه ال أيكالن.
تبغ .Tobacco
ورق .paper
فإذا كان هنالك ثالث مدخنني جيلسون حول طاولة ،كل مدخن لديه خمزون كايف من أحد أجزاء السيجارة.
وهنالك شخص رابع غري مدخن مهمته اختيار أثنني من املدخني الثالثة عشوائيا ،ليضع كل واحد من هؤالء اإلثنني
122
قطعة وا حدة من مما ميتلك من خمزونه على الطاولة ،فمثال إذا اخرتان صاحب التبغ وصاحب الورق ،فسيضع كل منهما
ما يكفي لعمل سيجارة واحدة .ويطلب من املدخن الثالث عمل السيجارة فيقوم ِبخذ ما يف الطاولة مث إضافة املكون
الذي ليده لعمل السيجارة ،مثال إذا كان املدخن الثالث صاحب الثقاب ،فسياخذ الورقة ويلف عليها التبغ املوجودين
ِبلطاولة مث يشعل السيجارة بعود ثقاب من عنده .عند ما تصبح الطاولة فارغة يقوم الشخص الرابع ِبختيار أثنني من
املدخنني عشوائيا لتتم نفس اخلطوات السابقة .ويظل تكرار هذه اخلطوات دون توقف .ال يتم ختزين سجاير وامنا
تصنع السيجارة مث تدخن مباشرة ،مث تصنع أخرى وتدخن وهكذا ،فليس من املسموح به عمل أكثر من سيجارة يف
نفس الوقت .إذا مت وضع ورق وتبغ على الطاولة وكان صاحب اعواد الثقاب يدخن ستظل هذه املكوانت على الطاولة
دون ان يلمسها احد حىت يكمل صاحب الثقاب التدخني مث يقوم بعمل السيجارة.
املشكلة حتاكي ِبربعة برامج متثل االدوار االربعة (ثالث مدخنني و شخص رابع لالختيار) .مسموح ِبستخدام
السيمافور للتزامن ،وممنوع ألي واحد من الربامج االربعة بعمل قفز شرطي ،فقط ميكن استخدام االنتظار املشروط
ِبستخدام .wait
احلل
{while true
)wait(T
123
)]signal(A[k
}
{ while true
)]wait(A[i
make a cigarette
)signal(T
}
.2.3.3اللقاء Rendezvous
نفرتض أن شابني قد تواعدا على أن يلتقيا يف منتزه مل يرَيه من قبلِ ،بلفعل قد حضرا كل واحد على حدا،
ولكنهما إندهشا من كرب حجم املنتزه ،وِبلتايل صعوبة أن جيد أحدمها اآلخر .هنا على كل شاب أن خيتار واحد من
أمرين:
السؤال هنا أي اسرتاتيجية جيب أن خيتارا حىت يكون إحتمال اللقاء أكرب ؟
إذا قرر أحدمها أن ينتظر واآلخر أن يبحث فحتما سيلتقيا (من انحية نظرية).
124
.2.3.2مشكلة احلالق النائم ()sleeping barber
إذا افرتضنا أن لدينا صالون حالقة به حالق واحد وكرسي حالقة واحد وعدد من الكراسي لإلنتظار .إذا مل
يكن هنالك زِبئن سيجلس احلالق يف كرسي احلالقة وينام ،وعندما يصل زبون فسيقوم إبيقاظ احلالق .إذا جاء زبون
آخر وكان احلالق حيلق للزبون األول فسيجلس الزبون الثاين على أحد كراسي اإلنتظار .وكلما يصل زبون سيجلس يف
كرسي إنتظار إىل أن متتلي كراسي اإلنتظار .إذا جاء زبون ووجد كراسي اإلنتظار مشغولة فعليه مغادرة الصالون.
احلل
كل ما حيضر زبون سيحاول احلصول على كرسي احلالقة ( )mutexوسيظل كذلك حىت ينجح .على الزبون
الذي حيضر للصالون أن حيسب عدد الزِبئن املنتظرين فإذا كان أقل من عدد الكراسي فسيجلس وإال فسيغادر (حياول
احلصول على كرسي سواء يف غرفة اإلنتظار أو كرسي احلالق نفسه).
إذا وجد الزبون كرسي سيجلس وينقص عدد الكراسي الفارغة بواحد (.)critical section
يقوم الزبون إبسال إشارة إىل احلالق إليقاظه ،وسيحرر mutexللسماح للزِبئن (أو احلالق) ِبملقدرة على
احلصول عليه .إذا كان احلالق مشغول فعلى الزِبئن االنتظار .سيجل احلالق يف إنتظار دائم ،يتم ايقاظه أبي زبون من
املنتظرين ،وعندما يستيقظ سريسل إشارات للزِبئن املنتظرين بواسطة السيمافور للسماح هلم ِبحلالقة ،واحد كل مرة.
هذه املشكلة حتتوي على حالق واحد لذلك تسمى أحياان ( .)single sleeping barber problemفيما
يلي شفرات مبدئية (،)pseudo-codeتضمن التزامن بني احلالق والزِبئن خالية من االختناق ،ولكنها قد تقود إىل
حرمان الزبون.
126
ملاذا حتتاج العمليات املتوازية التعاون فيما بينها ؟ .4
ما املقصود حبالة السباق ( )race condition؟ وما هي مسبباهتا ؟ وكيف يتم حلها ؟ .3
127
الباب السابع :االختناق
128
الباب السابع
االختناق ()deadlock
يف الربجم ة املتع ددة تتن افس العملي ات عل ى امل وارد ،وق د تطل ب العملي ة م ورد م ا ،إذا مل يك ن متاح اً يف ذل ك
الوق ت ،ستض طر ه ذه العملي ة إلنتظ اره (تتح ول إىل حال ة اإلنتظ ار) .ف إذا ك ان ه ذا امل ورد حب وزة عملي ة أخ رى ،وه ي
بدورها حتتاج وتنتظر املورد الذي تس تخدمه العملي ة األوىل ،فس تظل العمليت ان يف حال ة إنتظ ار غ ري منته ي ،ه ذا الوض ع
نسميه إختناق
يف هذا الباب سنتحدث عن االختناق وحاالته وكيف يتعامل نظام التشغيل معه.
.5.0مفهوم االختناق
إذا كان لدينا عمليتني (أ و ب) ،وكانت العملية أ تستخدم عدة موارد (من بينها املورد م )0وحتتاج إىل مورد
إضايف هو املورد م ،0يف نفس الوقت ل دينا العملي ة ب ال يت تس تخدم امل ورد م 0وحتت اج إىل م ورد آخ ر لتكم ل تنفي ذها
هو املورد م( 0الذي حبوزة العملية أ) ،هنا ستظل العمليتان يف هذا الوضع إىل ما شاء هللا ،فكل عملية لن تكتمل ألهنا
حتتاج مورد العملية األخرى ،هنا حيدث االختناق ألن كل عملية حتتكر مواردها اليت تستخدمها وال ترتكها أبدا.
.5.0.0مثال توضيحي
إذا كنت تقود سيارة (عملية) مث دخلت يف جسر ضيق (مورد) يتسع لسيارة واحدة فقط ،وجاءت سيارة من
االجتاه املعاكس (عملية أخرى) ودخلت نفس اجلسر ،فالتقت السياراتن يف منتصف اجلسر وكل سيارة تريد املرور ع رب
اجلسر ،هنا نقول أن هنالك اختناق يف املمر ،شكل (.)0-5
.5.0.0معاجلة االختناق
نالحظ أن االختناق دوما ميكن حله ،فمثال يف اختن اق اجلس ر ميك ن لس يارة أن ترج ع للخل ف لت رتك الس يارة
األخرى لتمر (إجبار احدى السيارتني على التخلي عن اجلسر).
يف مثال تقاطع الطرق جند أن إزاحة بعض السيارات خارج الطريق حيل االختناق.
.5.5أنواع املوارد
تنقسم املوارد إىل نوعني مها:
م وارد قابل ة للن زع ( :)preemptable resourcesميك ن ن زع ه ذا الن وع م ن امل وارد م ن العملي ة ال يت
تستخدمه دون أن يسبب ذلك مشاكل ،مثل الذاكرة.
عندما تريد عملية استخدام مورد فإهنا تقوم بطلب املورد أوال ،مث
تستخدمه ،وعند االنتهاء منه تتخلى عنه لتستفيد منه عملية أخرى.
.5.4مسببات االختناق
هنالك عدة أسباب إذا حتققت يف جمموعة عمليات سيحدث اختناق ال حمالة ،هذه األسباب األربع هي:
130
.0املن ع املتب ادل ( :)mutual exclusionعملي ة واح دة فق ط ه ي ال يت تس تخدم م ورد مع ني يف اللحظ ة
املعينة فال ميكن لعمليتني استخدام نفس املورد يف نفس الوقت.
.0االحتفاظ واالنتظار ( :)hold and waitحتتفظ العملية مبواردها اليت تستخدم وتريد موارد أخرى لتكمل
عملها.
.5االحتك ار أو ع دم التخل ي ع ن امل ورد ( : )non preemptionال ميك ن انت زاع امل ورد م ن العملي ة ال يت
تستخدمه ما مل يكتمل عملها.
.4االنتظار الدائري ( :)circular waitحيدث االنتظار ال دائري يف سلس لة م ن العملي ات إذا كان ت العملي ة
األوىل ِبجملموع ة تس تخدم م وارد معين ة وتري د م وارد أخ رى م ن العملي ة الثاني ة يف اجملموع ة ،والعملي ة الثاني ة
تستخدم املوارد اليت تريدها العملية األوىل ألهن ا مل تف رغ منه ا بع د ،ولتتخل ى ع ن موارده ا ال يت تس تخدم حتت اج
موارد أخرى تستخدمها العملية الثالث ة ،وهك ذا إىل العملي ة األخ رية يف اجملموع ة وال يت تس تخدم م وارد تري دها
العملية قبل األخرية ،وحتتاج موارد تستخدمها العملية األوىل مما يشكل دائرة من االنتظار.
.5.3استخدام الرسومات
ميكننا استخدام بعض الرسومات لتوضيح مسببات االختناق .مثال ميكن استخدام:
املربع ليدل على مورد ،يف الشكل ( ،)5-5يعترب كل من Rو Sموارد.
الدائرة لتدل على عملية ،يف الشكل ( ،)5-5يعترب كل من Aو Bعمليات.
السهم الذي خيرج من دائرة (عملية) ويشري إىل مرب ع (م ورد) يع ين أن العملي ة تري د (تطل ب ه ذا امل ورد) ،م ثال
يف الشكل ( ،)b( – )5-5جند أن العملية Bتريد املورد .S
السهم الذي خيرج من مربع (مورد) ويتجه إىل دائرة (عملية) يعين أن هذا املورد يستخدم بواسطة العملي ة ،يف
الشكل ( ،)a( – )5-5املورد Rمستخدم بواسطة العملية .A
131
.5.3.0متثيل االنتظار الدائري ِبلرسم
مثال يف الشكل ( ،)4-5جند أن هنالك انتظار دائري حي ث جن د أن العملي ة Dتس تخدم امل ورد Uوحتت اج
إىل املورد ،Rوجند أن املورد Rتستخدمه العملية Eاليت تريد املورد Vالذي يستخدم بواسطة العملية ،Gوجند أن
Gتريد املورد Uالذي تستخدم العملية Dوهكذا جند أنفسنا يف دائرة انتظار.
إذا ابتدأت من أي عملية أو مورد يف أي شكل ،وتتبعت اجتاه األسهم فقادتك إىل نفس
النقطة اليت بدأت منها فأنت يف انتظار دائري بال شك ،مثال يف الشكل ( ،)4-5إذا بدأت
من أي نقطة ( )Rمثال وحتركت مع اجتاه االسم ستصل مرة أخرى إىل Rمما يدل على
وجود انتظار دائري.
.5.2التعامل مع االختناق
ه ل تري د وقاي ة نفس ك م ن االختن اق أم تري د إص الحه بع د حدوث ه (الع الج) ؟ املث ل يق ول الوقاي ة خ ري م ن
الع الج ،ل ذلك األفض ل أن نق وم ِبس تخدام امل وارد وحجزه ا بص ورة ح ذرة ح ىت ال نق ع يف االختن اق (نق ي أنفس نا م ن
حدوثه) ،ولكن إذا حدث ِبلرغم من حذران فعلينا معاجلته أو جتاهله ،هكذا يقول علماء نظم التشغيل.
132
أبس ط خوارزمي ة تس تخدم يف جتاه ل االختن اق ه ي خوارزمي ة النعام ة (أدف ن رأس ك يف الرم ل وتظ اهر أبن ه ال توج د
مشكلة).
التظاهر بعدم حدوث االختناق أو اهلروب من املشكلة نلجأ إليها لسببني مها:
.5.2.0اكتشاف االختناق
هن ا سنس تخدم الرس م لالكتش اف االختن اق يف نظ ام ب ه م ورد م ن ك ل ن وع (م ثال طابع ة واح دة ،ماس حة
واحدة.. ،اخل).
مثال
إذا كان لدينا 5عمليات من Aإىل Gو مورد واحد من كل نوع ،وكانت طلبات العمليات كما يلي:
احلل
133
س نقوم إبنش اء رس م لك ل امل وارد م ع العملي ات ال يت تس تخدمها وال يت تري دها ،فيك ون الرس م كم ا يف الش كل
(.)3-5
نالحظ من الشكل ( ، )3-5أن هنالك اختناق ،ألنين مثال إذا بدأت من املورد Uمث تتبع ت اجت اه األس هم
سأجد نفسي يف Uمرة أخرى وهذا يعين وجود انتظار دائري ،مع وجود مسببات االختناق األخرى.
قد يكون لدينا عدد من املوارد من كل نوع (مثال 3طابعات 4 ،ماسحات... ،اخل) ،يف هذه احلالة يصعب
استخدام الرسومات للتعبري عن املوارد املتعددة لذلك سنستخدم طريقة احملددات ( )matrixالكتشاف االختناق.
إذا ك ان ل دينا ع دد nعملي ة و ع دد mن وع م ن امل وارد ،حي ث ميث ل E1ع دد امل وارد م ن الن وع األول (م ثال ع دد
املاس حات) E2 ،ميث ل ع دد امل وارد م ن الن وع الث اين (م ثال ع دد الطابع ات) ،وهك ذا إىل .Emحبي ث ننش ي متج ه
( )vectorللموارد اليت توجد ِبلنظام .مثال إذا كان لدى 5طابعات 2 ،ماسحات 3 ،أقراص ،فإن املتجه الذي ميثل
هذه املوارد سيكون كالتايل:
إذا ك ان ل دينا ع دد 3طابع ات 4 ،ماس حات ،و 5أق راص مس تخدمة بواس طة عملي ات خمتلف ة ،ف إن املتج ه
الذي ميثل املوارد املستخدمة سيكون:
134
)3 4 (5
وم ن هن ا ميكنن ا إنش اء متج ه ميث ل امل وارد املتاح ة (غ ري املس تخدمة) وذل ك بط رح امل وارد املس تخدمة م ن امل وارد
الكلية كما يلي:
ميكننا تكوين حمددة للم وارد املس تخدم بواس طة ع دة عملي ات ،حي ث ميث ل ك ل ص ف يف احمل ددة م وارد عملي ة
معينة .مثال لو أردان إنشاء حمددة ألربع عمليات كانت تستخدم املوارد أعاله ،فإن احملددة ستكون كما يلي:
نوع املورد
135
من الشكل ( )3-5جند أن:
بنفس الطريقة ميكن إنشاء حمددة للموارد اليت حتتاجها كل عملية من كل مورد ،كما يف املثال التايل:
136
اكتشاف االختناق ِبحملددات
اآلن ل دي ع دد امل وارد الكلي ة (ش كل ،)2-5وع دد امل وارد احل رة (ش كل ،)8-5وع دد امل وارد املس تخدمة
(ش كل ،)3-5وع دد امل وارد املطلوب ة ال يت حتتاجه ا العملي ات إلمت ام عمله ا (ش كل ،)02-5س نقوم ِبس تخدام ه ذه
املعطيات الكتشاف هل سيحدث اختناق أم ال ؟
طريقة احلل
سنقوم أوال مبقارن ة امل وارد احل رة (ش كل )8-5م ع ص فوف حم ددة امل وارد املطلوب ة ،مث خنت ار الص ف (العملي ة)
الذي تكون موارده املطلوبة أقل أو تساوي املوارد احلرة املتوفرة .مبقارن ة ص فوف احمل ددة يف الش كل ( )02-5م ع امل وارد
احلرة يف الشكل ( )8-5سنجد أن العملية األوىل ميكنها إكمال عملها ِبستخدام املوارد احلرة املتاحة .سنعطي العملية
األوىل ما حتتاج من املوارد املتاحة وخنصم ذلك من املوارد احلرة كما يلي:
إذا كانت املوارد احلرة تكفي لواحد من عمليتني ،فاألفضل اختيار العملية اليت تستخدم موارد أكثر
ذلك ألين سأحصل على موارد حرة أكثر بعد أن تكمل العملية عملها وحترر ما تستخدم من موارد.
اآلن ستكمل العملية األوىل عملها مث حترر ما لديها من موارد (اليت كانت تستخدم مسبقا واليت إعطيناها هلا
يف اخلطوة السابقة)ِ ،بلتايل سيكون لدي من املوارد احلرة ما يلي:
= )0املوارد احلرة املتبقية بعد إعطاء العملية األوىل ما حتتاج من موارد 0 (0
= )1املوارد اليت كانت تستخدمها العملية األوىل من قبل (من حمددة االستخدام) 1 (5
=)2املوارد اليت استخدمتها العملية األوىل مؤخرا (من حمددة املطلوب) 2 (2
= )3املوارد احلرة بعد انتهاء العملية األوىل وحتريرها ملواردها 3 (7
137
اآلن سنقارن املوارد احلرة اليت حصلنا عليها بع د انته اء العملي ة األوىل وحتري ر موارده ا م ع املتبق ي م ن ص فوف
حم ددة املطل وب (ش كل .)02-5س نجد أن العملي ة ال يت ميك ن أن تكفيه ا امل وارد احل رة ه ي العملي ة الثالث ة ،فنخص م
املوارد اليت تريد من املوارد احلرة اليت لدينا كما يف الشكل (.)05-5
اآلن س تكمل العملي ة الثالث ة عمله ا مث حت رر م ا ل ديها م ن م وارد (الق دمي واجلدي د)ِ ،بلت ايل س يتوفر ل دي م ن
املوارد التايل (بعد انتهاء العملية الثالثة):
= )0املوارد احلرة املتبقية بعد إعطاء العملية األوىل ما حتتاج من موارد 0 (3
= )0املوارد اليت كانت تستخدمها العملية الثالثة من قبل (من حمددة االستخدام) 1 (0
=)3املوارد اليت استخدمتها العملية الثالثة مؤخرا (من حمددة املطلوب) 3 (4
اآلن س نقارن امل وارد احل رة ال يت حص لنا عليه ا بع د انته اء العملي ة الثالث ة وحتري ر موارده ا كم ا يف الش كل (-5
،)04مع املتبقي م ن العملي ات ال يت مبح ددة املطل وب (ش كل .)02-5س نجد أن امل وارد املت وفرة ل دينا ال تكف ي ألي
عملية من العمليات املتبقية .وِبلتايل ميكننا القول أن هنالك اختناق حدث يف هذه النقطة.
138
مثال ()6
اآلن سنعرض مثاال آخر بدون شرح مفصل يوضح حالة ال حيدث فيها اختناق.
املعطيات:
احلل
أوال تحسب املوارد املتوفرة وذلك بطرح املوارد املستخدمة (جمم وع أعم دة حم ددة امل وارد املس تخدمة) م ن امل وارد
كما يلي:
مث نقارن املتاح مع صفوف املطلوب (يف حمددة املطلوب) ،فنجد أن الصف الثالث ميكنه العمل ،فنعطيه م ا
يريد من موارد كما يلي:
139
)0 0 1 (2 املوارد املتوفرة =
بعد انتهاء العملية صف ،5سنستفيد من موارده ،فيصبح لدينا املوارد املتاحة التالية:
اآلن سنقارن املتاح مع صفوف املطلوب (يف حمددة املطلوب) ،فنجد أن الصف الثاين ميكنه العمل ،فنعطي ه
ما يريد من موارد كما يلي:
بعد انتهاء العملية صف ،0سنستفيد من موارده ،فيصبح لدينا املوارد املتاحة التالية:
140
)0 1 0 (1 موارد صف 0يف حمددة املطلوب
)1 1 2 (4 املوارد املتوفرة بعد انتهاء صف 0من عمله
جن د أن الص ف املتبق ي يف حم ددة املطل وب تكفي ه امل وارد املت وفرة بع د انته اء ص ف ،0وه ذا يع ين أن ه ال يوج د
اختناق.
.5.2.5معاجلة االختناق
اخلط وة الس ابقة وض حت كي ف ميكنن ا اكتش اف االختن اق ،هن ا س نقوم مبعاجل ة االختن اق بع د إكتش افه ،وي تم
ذلك بعدة طرق منها:
انتزاع بعض املوارد من أحد عمليات اإلختناق :جيب التأكد من أن املوارد قابل للن زع ،حبي ث ال يس بب نزع ه
مش كلة للعملي ة ،م ثال إذا كان ت العملي ة تق وم بتس جيل بي اانت عل ى اس طوانة ض وئية (تس تخدم مس جل
األس طواانت الض وئية ( )CD writerف إن انت زاع ه ذا امل ورد م ن العملي ة يف ه ذه اللحظ ة ق د يتس بب يف
تعطل االسطوانة .كذلك انتزاع طابعة من عملية وهي تطبع قد جيعل خمرج الطابع ة مبت ور وغ ري واض ح .لك ن
إذا كان االختناق على الذاكرة فيمكن حتويل أحد العمليات املتسببة يف االختناق إىل الق رص الص لب (انت زاع
الذاكرة من العملية) ،وإرجاعها فيما بعد دون حدوث مشكلة.
إيقاف بعض العمليات اليت تش ارك يف االختن اق :ميك ن توقي ف عملي ة (قتله ا كم ا يق ال يف لي نكس ())kill
واالستفادة من مواردها لتشغيل بقية العمليات .يف هذه احلالة سنحاول قتل العمليات اليت ميكن تشغيلها من
جديد بسهولة ودون أن تسبب مشاكل.
141
.5.2.4الوقاية
جتنبه
منعه
هن ا حي اول النظ ام التأك د م ن أن امل وارد ميك ن حجزه ا بص ورة آمن ة ،وذل ك قب ل الش روع يف حجزه ا .هنال ك
العديد من اخلوارزميات اليت ميكن استخدامها للتأكد من أن املوارد ميكن حجزها ب دون أن حي دث اختن اق (ص ورة آمن ة
.)safe state
مثال
إذا ك ان ل دينا م وارد ،منه ا املس تخدم ومنه ا غ ري املس تخدم (احل ر) ،وهنال ك عملي ات تس تخدم م وارد وتري د
املزيد ،فيمكننا استخدام الطريقة التالي ة للتأك د م ن أن حج ز امل وارد احل رة للعملي ات ال يت تري د م وارد ال يس بب اختن اق،
م ثال الش كل ( )04-5يوض ح ث الث عملي ات (أ ،ب ،ج) ،وك ل عملي ة تس تخدم ع دد مع ني م ن امل وارد وحتت اج أن
تصل إىل عدد معني من املوارد لتعمل.
العملي ة أ تس تخدم 5م وارد وحتت اج أن تص ل إىل 3م وارد ،العملي ة ب ل ديها م وردين وتري د أن تص ل إىل 4
موارد ،العملية ج لديها موردين وتريد أن تكمل مواردها إىل 5م وارد لتعم ل .و ل دينا ث الث م وارد متاح ة .نري د التأك د
من أننا لو استخدمنا هذه املوارد املتوفرة ميكن أن نصل إىل حالة آمنة (ال حيدث اختناق).
احلل
142
مبقارن ة املت وفر م ع املطل وب ،جن د أن العملي ة ب ميك ن أن تعم ل وذل ك إبعطائه ا م وردين م ن املت وفر فيك ون
لدى مورد واحد متوفر كما يف الشكل ( .)02-5
بعد انتهاء العملية ب سترتك املوارد اليت كانت تستخدم ( 4موارد) ،فيصبح املتوفر هو ،3كما يف الشكل (.)05-5
مبقارنة املتوفر مع املطلوب ،جند أن العملية ج ميكن أن تعمل وذلك إبعطائها 3موارد وهي كل ما يتوفر كما يف
الشكل ( .)08-5
بعد انتهاء العملية ج سترتك املوارد اليت كانت تستخدم ( 5موارد) ،فيصبح املتوفر هو ،5كما يف الشكل (.)08-5
143
يكفيها لديها العملية
3 5 أ
- - ب
- - ج
املوارد املتوفرة5 :
مبقارنة املتوفر مع املطلوب ،جن د أن العملي ة أ ميك ن أن تعم ل وذل ك إبعطائه ا 2م وارد ويبق ى يل م ورد واح د
غري مستخدم كما يف الشكل ( .)03-5
بعد انتهاء العملي ة أ س ترتك امل وارد ال يت كان ت تس تخدم ( 3م وارد) ،فيص بح املت وفر ه و ،02كم ا يف الش كل
(.)02-5
هذا يدل أن املوارد ميكن استخدامها دون حدوث اختناق (حالة آمنة).
144
مثال
إذا مل نس تخدم امل وارد حب ذر لتجن ب االختن اق ،فق د نص ل إىل حال ة غ ري آمن ة ( )unsafeمم ا يتس بب يف
اختناق .املثال السابق ميكن استخدامه لتوضيح كيف ميكن أن حيدث اختناق كما يف الشكل (.)00-5
هنا وصلنا إىل حالة غري آمنة وحدث االختناق ،الن املتوفر ( 4موارد) ال يكفي ألي عملية.
145
.5.2.4.0منع االختناق
جتنب االختناق قد يكون غري ممكن ألنه يتطلب دراية مسبقة ع ن الطلب ات املس تقبلية وال يت ال ميك ن معرفته ا
يف غالبا األحيان ،لذلك سنجد أن الوقاية من االختناق ميكن أن تتحقق بنفي واح د أو أكث ر م ن مس ببات االختن اق.
فم ن املعل وم أن مس ببات االختن اق الب د م ن توافره ا مجيعه ا (أربع ة مس ببات) ح ىت حي دث اختن اقِ ،بلت ايل إذا اس تطعنا
نفي سبب واحد من هذه املسببات األربع سنكون وقينا أنفسنا من االختناق.
إذا ك ان ل دى م ورد ال تقب ل املش اركة وال ميك ن اس تخدام أبكث ر م ن عملي ة يف نف س الوق ت ،ميكن ين جتن ب
االحتكار وذلك بتخصيص عملية تكون مسئولة عن هذا املورد ،حبيث منن ع بقي ة العملي ات م ن اس تخدام امل ورد مباش رة
وإمنا تتعامل هذه العمليات مع العملية املسئولة من املورد ،وتقوم األخرية ِبلتعامل مع املورد.
مثال م دير الطباع ة يف وين دوز ميث ل عملي ة مس ئولة ع ن الطابع ة ،حي ث عن دما يرس ل أي ب رانمج (عملي ة) أم ر
طباع ة ،ف إن املل ف امل راد طباعت ه سريس ل إىل م دير الطباع ة ،ويتعام ل م دير الطباع ة م ع الطابع ة حي ث يرس ل هل ا مل ف
كلما فرغت من عملها حسب ورود امللفات إليه (القادم أوال خيدم أوال) .مثال الشكل ( )00-5جند أن هنالك ملفني
أرسال للطابعة ولكن قام ِبستالم هذه امللفات مدير الطباعة مث ينظم هو التعامل مع الطابعة.
ال تبدأ العملية يف العمل ما مل تتأكد من أن كل املوارد اليت حتتاجها متوفرة وغري مستخدمة من قبل عمليات
أخرى .ولكن هنا تظهر مشكلة هي أن معظم العملي ات ال تس تطيع م ا تري د م ن م وارد م ا مل تب دأ العم ل .أيض ا هنال ك
مشكلة أخرى هي أنه حىت ولو توفرت كل املوارد للعملية وبدأت عملها فهذا جيعل املوارد حمتكرة ألن العملية قد حتتاج
مورد لعمل ما وبعد نصف ساعة ستحتاج املورد الثاين ،فتكون العملية قد حجزت هذا امل ورد األخ ري مل دة نص ف س اعة
دون أن تستفيد منه بقية املوارد.
146
.5.2.4.0.5نفي االحتكار (عدم التخلي عن املوارد)
غ ري قاب ل للتطبي ق :الن انت زاع م ورد م ن عملي ة وه ي تس تخدمه أحي اان ق د يتس بب يف فش ل العملي ة .م ثال
إيقاف الطابعة وه ي تطب ع يف مل ف ق د ين تج عن ه طباع ة غ ري مكتمل ة ،وإيق اف مس جل االس طواانت الض وئي ( CD
)writerوهو ينسخ بياانت يف اسطوانة CDقد يتسبب يف تلف االسطوانة وفشل عملية النسخ.
نرقم كل املوارد ،مث نسمح للعمليات بطل ب امل وارد بص ورة تص اعدية وال نس مح لعملي ة أبن تطل ب م ورد رقم ه
أصغر من املورد الذي طلبته من قبل ،فمثال إذا طلبت عملية ما املورد رقم ،5فال نسمح هلا بطلب مورد رقمه أق ل م ن
5وميكنه طلب مورد رقمه أكرب من .5
مثال
يف الشكل ( ،)05-5إذا طلبت العملية أ املاسحة ورقمها هو ،0فال ميكن هل ذه العملي ة أن تطل ب الطابع ة
ألن رقمه ا أق ل م ن رق م املاس حة .اف رتض أن العملي ة ب قام ت بطل ب الش ريط املمغ نط (ذو ال رقم ،)4ف ال ميك ن هل ذه
العملية طلب أي مورد رقمه أقل من ،4يعين ال ميكنها طلب املاسحة اليت تستخدمها العملية أ .هبذه الطريقة ال ميكن
أن حيدث انتظار دائري.
0 الطابعة
0 املاسحة
5 سواقة األقراص الضوئية
4 الشريط املمغنط
3 الراسم
شكل رقم ( :)05-5ترقيم املوارد تسلسليا.
147
1 1 1
2 0 1
2 3 1
Pcurr
مثال ميكننا إنشاء مصفوفة املوارد املطلوبة Pmaxومصفوفة املوارد احلالية Pcurrكما يلي:
148
For i = 0 To 2
Console.Write(Pmax(j, i) - Pcurr(j, i) & " ")
Next
: كالتايلj ) لعمليةavl( مث خنترب هل يكفي املتوفر من املوارد
For i = 0 To 2
If ((Pmax(j, i) - Pcurr(j, i)) <= avl(i)) Then
Console.Write(avl(i) - (Pmax(j, i) - Pcurr(j, i)))
Else
Console.Write("not enough")
' stop
End If
Next
149
.5.8متارين حملولة
.0اذكر ثالث أمثلة ملوارد ؟ الطابعة ،القرص الصلب ،جدول قاعدة بياانت
.0تنقسم املوارد إىل نوعني ما مها ؟ قابلة للنزع وغري قابلة للنزع
.5اذكر مثال ملورد قابل للنزع ومثال ملورد غري قابل للنزع ؟ الطابعة (غري قابلة) ،الذاكرة (قابل للنزع)
.0جتاهله
.0اكتشافه وعالجه
.5جتنبه
.4منعه
.3ما الفرق بني التجنب واملنع ؟ التجنب هو حجز املوارد بصورة آمنة ( ، )safeاملنع هو نفي احد مسببات
االختناق
.5نفي االحتكار
.0املنع املتبادل
.0االحتفاظ واالنتظار
.5االحتكار
.4االنتظار الدائري
150
.8ما هي خوارزمية النعامة ؟ ومىت نستخدمها ؟
.3مسألة
[]03
إذا كان Eمتثل موارد النظام ،واملصفوفة Cمتثل املوارد املستخدمة منها ،واملصفوفة Rمتثل املوارد املطلوبة إلمتام
العمل.
احلل
(ب) احلل
اخلطوة األوىل
151
وإبعطاء املوارد املوجودة يف Aللعملية الثالثة ستصبح Aفارغة ()2 2 2 2
وستكمل العملية الثالثة عملها فتحرر املوارد اليت كانت حتتجزها ( )Cواملوارد اليت طلبتها ( )Rفتكون قيمة A
اجلديدة هي ()2 2 2 0
اخلطوة الثانية
اآلن سنقارن new Aمع صفوف Rفنجد أهنا تكفي إلكمال الصف الثالثة
اخلطوة الثالثة
سيتوفر لدينا اآلن من املوارد التايل () Aكافية لتنفيذ الصف املتبقي (األول) وهذا يعين أنه ال يوجد اختناق (حالة
آمنة).
.02مسألة
152
ضح هل يوجد اختناق أم ال ؟
احلل
ننفذ العملية األوىل (الصف األول يف )Rوبعد تنفيذها ستحرر املوارد التالية:
()1 0 1 1
ننفذ العملية الثانية وبعد تنفيذها ستحرر املوارد التالية (.)3 0 1 2
جند أن املتبقي( )3 0 1 2ال يكفي للعملية الثالثة وهذا يعين أن هنالك اختناق.
153
.00كيف تتم معاجل االختناق ؟
.0إيقاف (قتل )Killبعض العمليات اليت تشارك يف االختناق وِبلتايل استخدام مواردها لبقية العمليات
.00مسألة
إذا كان لدى ثالث عمليات A,B,Cلديها املوارد املبينة ِبلعمود Hasوحتتاج أن تصل مواردها للعمود Max
لتنفذ عملها ،وليدان ثالث موارد متاحة (كما مبني يف اجلدول أعاله).
وضح كيف ميكننا تنفيذ الربامج الثالث دون حدوث اختناق (حالة آمنة) ؟
وضح كيف ميكن أن حيدث اختناق إذا وزعنا املوارد بصورة أخرى ؟
احلل
(أ)
(ب)
154
.5.3متارين غري حملولة
إذا كان لدي نظام حيتوي على العمليات التالية مع ما متلك (املستخدم) وما يكفيها من موارد (أي أن .0
ما حتتاج من موارد هو مايكفي انقص ما تستخدم) ،كما يف اجلدول التايل:
مثال العملية P0تستخدم 0من املورد ،Aو حتتاج 0من هذا املورد ،إذن حتتاج 0من املورد .Aأيضا
تستخدم 0من املورد Dويكفيها ،0أي الحتتاج أي مورد إضايف من .D
[]03
155
الباب الثامن :إدارة الذاكرة الرئيسية
156
الباب الثامن
اليعمل جهاز احلاسب بدون ذاكرة رئيسية ( ،)ramوعندما تذهب لتشرتي جهاز حاسب فتجد مواصفات
مثل ،2MB Ramواليت تعين أنك حاسبك ميتلك ذاكرة رئيسية حجمها 2ميغاِبيت أي 2* 1024 * 1024
= ِ 2097152بيت ،والبايت يعادل حرف،أي أكثر من أثنني مليون حرف.
تعترب الذاكرة الرئيسية متطلباً أساسياً لتنفيذ الربامج ،فال ميك ن تنفي ذ ب رانمج م ا مل حيض ر إليه ا .ألن املع اجل ال
يتعامل إال م ع ال ذاكرة الرئيس ية واملس جالت ال يت داخل ه .يك ون تعام ل املع اجل م ع املس جالت س ريعا ج دا (دورة س اعة
واح دة ( )one CPU clockأو أق ل) ،بينم ا الوص ول لل ذاكرة الرئيس ية يك ون أق ل س رعة (ع دة دورات) .تعت رب
الذاكرة املخبأة (الكاش) بني الذاكرة الرئيسية واملسجالت.
كرب حجم الذاكرة ميكنها من خدمة عدد كبري من العمليات ،بينما سرعتها تزيد من سرعة الوصول للمعلومة
فيها .لذلك البد من إدارهتا ِبلطريقة املثلى اليت تؤثر أتثري إجيابيا على أداء احلاسب.
الكل يريد حاس ب ب ذاكرة رئيس ية كب رية وس ريعة وغ ري متط ايرة وف وق ذل ك رخيص ة .لك ن ه ذه املواص فات ال
جتتم ع يف ذاك رة واح دة (ح ىت كتاب ة ه ذه الس طور) .وتوج د ه ذه الص فات متفرق ة ي ن ع دة ذواك ر ،فم ثال ص فة الس رعة
توجد يف املسجالت والكاش (لكنها صغرية وغالية) ،بينما القرص الصلب كبري ورخيص لكنه بطئ جدا.
لإلستفادة من هذه الذواكر املختلفة ميكن استخدام القرص الصلب مثال للتخزين الدائم والكبري ،بينما
نستخدم الذاكرة الرئيسية والكاش واملسجالت للتنفيذ السريع .يدير هذه الذواكر جزء من نظام التشغيل يسمى مدير
الذاكرة ويتمثل عمله يف اآليت:
157
.8.0بنية الذاكرة الرئيسية
تتكون الذاكرة من جمموعة من اخلالَي الثنائية موزعة بطريقة تشبه املصفوفة حيث حيدد عدد اخلالَي يف السطر
األول ط ول الكلم ة ،وحتم ل ك ل خلي ة عن وان (رق م) فري د ال يتك رر تس تطيع م ن خالل ه وح دة املعاجل ة حتدي د مك ان
الكلمة املطلوبة يف الذاكرة .يقاس حجم الذاكرة عادة مبجموع اخلالَي الثنائي ة املت وفرة .م ثال إذا ك ان يف حاس بك ذاك رة
حجمها 0ميغاِبيت ( ،)MBفهذا يعين أن لدينا:
الباي ت خي زن رم ز أو ح رف ،ف إذا ك ان ك ل ِبي ت ميث ل خان ة ِبل ذاكرة فس يكون ل دينا أكث ر م ن ملي ون خان ة
ِبل ذاكرة وك ل خان ة ل ديها عن وان خيتل ف ع ن عن وان اخلان ة األخ رى وِبلت ايل س يكون ل دينا أكث ر ملي ون عن وان ،الش كل
(.)0-8
...
1048576
158
.8.0.0حجز املواقع
إذا أردت تش غيل ب رانمج ف إن م دير ال ذاكرة س يحجز مس احة ِبل ذاكرة هل ذا ال ربانمج مث إذا م ا أنتهين ا م ن
استخدام ال ربانمج وقمن ا بطل ب إغالق ه ،س يقوم م دير ال ذاكرة بتحري ر م ا حج ز هل ذا ال ربانمج م ن ال ذاكرة وتفري غ مكان ه
لالستفادة منه يف حتميل برامج أخرى.
.8.0.0هرمية الذاكرة
يف الثمانينات كانت الذاكرة تعمل بسرعة املعاجل ،مث بدأ سباق التطور ،فوصل املعاجل بسرعته إىل أضعاف ما
وصلت إليه الذاكرة .وأصبحت سرعة الذاكرة الرئيسية ال تستطيع جماراة سرعة املعاجل ،وهذا تس بب يف أن يعم ل املع اجل
بسرعه الذاكرة.
مت ع الج ه ذا الف ارق ب ني س رعيت املع اجل وال ذاكرة الرئيس ية بوض ع ذاك رة س ريعة بينهم ا ه ي ال ذاكرة املخب أة،
الشكل ( ،)0-8واليت تعمل بسرعة املعاجل أو قريبة منه.
عند تشغيل برانمج كب ري (أك رب م ن حج م ال ذاكر الرئيس ية) س يكون ِبلق رص ،مث س يحمل م دير ال ذاكرة ج زء
من هذا الربانمج إىل الذاكرة الرئيسية (نسخة من اجلزء وستظل نسخة أخ رى ِبلق رص ،أي أن ال ربانمج ك امال س يكون
ِبلقرص) .هذا اجلزء هو الذي تحتاجه اآلن ،سيحمل جزء من اجلزء الذي ِبلذاكرة الرئيسية إىل ال ذاكرة املخب أةِ ،بلت ايل
سيكون هذا اجلزء الصغري مكرر يف ثالث أماكن ،يف القرص وِبلذاكرة الرئيسية ويف الذاكرة املخبأة .مث سنأخذ كل مرة
أمر وبضع بياانت من الذاكرة املخبأة لتنسخ يف مسجالت املعاجل حيث يتم تنفي ذها .س نجد أن النس خ اآلن أص بحت
أربعة نسخ ،وقد يكون لدينا مخس نسخ إذا اس تخدمنا مس تويني م ن ال ذاكرة املخب أة ( L1و ،)L2الش كل (.)0-8
ه ذا س يجعل مهم ة م دير ال ذاكرة أص عب ،فعلي ه التأك د م ن أن ه ذه النس خ املوزع ة عل ى ع دة ذواك ر متوافق ة
( .)consistentهذا ِبإلضافة إىل متابعة حركة البياانت بني هذه الذواكر املختلفة املستوَيت.
159
.8.5مواصفات الذاكرة املثالية
يتمىن كل شخص منا سواء كان مستخدما للحاسب أم مربجما أن تكون لديه ذاكرة ِبملواصفات التالية:
كبرية
سريعة
رخيصة.
غري متطايرة ( – )non volatileأي ال تفقد حمتواها.
ولك ن هيه ات هيه ات ،فل م جتتم ع ه ذه املواص فات يف ن وع واح د م ن ال ذواكر ح ىت يومن ا ه ذا .ميك ن اس تخدام
ع دة ذواك ر خمتلف ة تكم ل بعض ها ال بعض لتك ون هرمي ة مثالي ة .فم ثال نس تخدم ال ذاكرة املخب أة (الك اش) لنحص ل عل ى
السرعة العالية ،ولكنها يف جانب اآلخر ،صغرية ومتطايرة (ال حتتفظ مبحتوَيهتا) ،وغالية .
ل ذلك ميكن ين اس تخدام ال ذاكرة الرئيس ية (ال رام) معه ا ألمتك ن م ن وض ع ب رامج كب رية ،ف الرام تعت رب س ريعة نوع ا م ا
مقارنة بسرعة الذاكرة الثانوية .وميكنين استخدام حجم أكرب منها ألن سعرها معقول (متوسطة السعر) ،لكن كس ابقتها
يف ع دم مق درهتا حلف ظ البي اانت بص ورة دائم ة .ل ذلك ل ن اس تطيع االس تغناء ع ن ال ذاكرة الثانوي ة ال يت تتمي ز ع ن بقي ة
الذوالكر السالف ذكرها يف أهنا حتتفظ مبحتوَيهتا حفظا دائما .هذا النوع من الذواكر ِبإلضافة إىل كونه غري متطاير (ال
يفقد حمتواه) ،جند أنه رخيص ،ولكنه بطئ جدا.
.8.4مثال توضيحي
أراد أمحد وهو مدخل بياانت طباعة كتاب ِبستخدام ميكروسوفت وورد ،فقام:
بفتح احلاسب فظهر سطح املكتب.
نقر نقرا مزدوجا على الوورد ففتح الربانمج وظهرت انفذته.
بدأ أمحد إبدخال البياانت.
أدخل جزء من البياانت مثال 5صفحات مث قام حبفظ امللف (ملف – حفظ).
أدخ ل 4ص فحات أخ رى ولك ن قب ل حف ظ املل ف م رة أخ رى إنفص ل التي ار الكه ريب ع ن احلاس ب ف أ ُغلق
اجلهاز.
إذا فتح أمحد احلاسب مرة أخرى وفتح ملف وورد السابق حفظه ؟ ه ل س يجد 5ص فحات أم 5ص فحات
؟ وملاذا ؟
داخليا جيري اآليت:
عن د ف تح احلاس ب يتحم ل نظ ام التش غيل يف ج زء م ن ال رام ،فظه ور س طح املكت ب أم ام أمح د دالل ة عل ى
ذلك .النقر املزدوج على أيقونة وورد هو طلب من أمحد لنظام التشغيل ليقوم بتشغيل برانمج وإنشاء عملية جديدة منه،
160
وظهور انفذة وورد أمامه دليل على أن العملية مت إنشاءها وهي تعمل اآلن ،وهذا يدل على أن نس خة م ن ب رانمج وورد
اآلن حمملة ِبلذاكرة (يف مساحة أخرى غري املساحة اليت يوجد هبا نظام التشغيل).
أين كان برانمج وورد قبل أن يعمل ؟ عندما ب دأ أمح د ِبإلدخ ال ب دأت تظه ر امل دخالت عل ى الشاش ة وه ذا
ي دل عل ى أن البي اانت تنتق ل م ن لوح ة املف اتيح إىل ال ذاكرة وم ن ال ذاكرة إىل الشاش ة دون أن يك ون هل ا عالق ة ِبلق رص
الصلب أو أي ذاكرة اثنوية أخرى.
عملية حفظ امللف تعين نسخ ما أدخله أمحد ( 5صفحات) والذي يوجد اآلن ِبلرام إىل القرص الصلب.
أدخل أمحد 4صفحات أخرى ولكن قب ل أن يق وم ِبحلف ظ أغل ق اجله از ،س تفقد ال رام حمتواه ا الهن ا متط ايرة
(وِبلتايل سيفقد أمحد األربعة صفحات األخرية ألنه مل حيفظها ِبلذاكرة الثانوية).
عندما يفتح أمح د اجله از م رة اثني ة ويف تح ملف ه الس ابق س يجد فق ط 5ص فحات ،أي ن بقي ة الص فحات ال يت
أدخلها ؟
من املثال أعاله تالحظ أنه ال غىن لنا عن الذاكرة الثانوية يف احلفظ ال دائم للمعلوم ات .فعن دما أغل ق اجله از
فقدان كل حمتوَيت الرام ،فإضطر أمحد عند فتحه للجهاز يف املرة الثانية لتشغيل وورد مرة أخرى ألنه أصبح غري موج ود
ِبل رام ،وأع اد إدخ ال الص فحات األربع ة (ال يت فق دت) م رة اثني ة .ك ذلك الغ ىن لن ا ع ن ال ذاكرة الرئيس ية يف تش غيل
الربامج ،وتحتاج الكاش يف تسريع العمل.
161
كلم ا نف تح احلاس ب يق وم ب رانمج موج ود ِبل روم ( )romبتحمي ل نظ ام التش غيل ِبل رام ،أي أن
الروم هي املسئولة عن حتميل نظام التشغيل ،أما بقية الربامج فنحن من يطلبها ونظام التشغيل هو
من يقوم بتشغيلها لنا .إذن الروم تشغل نظام التشغيل ونظام التشغيل يشغل براجمنا.
تعتم د اإلجاب ة عل ى أس ئلتنا ه ذه عل ى م دير ال ذاكرة وطريق ة عمل ه .س نقوم فيم ا يل ي بش رح إدارات ال ذاكرة
املختلفة لتخزين عدة برامج (تعدد املهام) ِبلذاكرة.
سنبدأ بتوضيح طريقة إدارة الذاكرة يف النظم القدمية (اليت مل تعد مستخدمة حاليا) ولكنها ستس اعدان يف فه م
احلديث ،مث نوضح بعدها كيف يدير نظام التشغيل احلديث الذاكرة.
التجزئة الديناميكية.
جتميع الفراغات.
الذاكرة ِبلصفحات.
الذاكرة ِبلتقطيع.
162
خمص ص لنظ ام التش غيل وج زء خمص ص للمس تخدم لينف ذ في ه ب رانمج واح د فق ط ك ل م رة ،ه ذا الن وع م ن نظ م التش غيل
يسمى نظم التشغيل أحادية املهام ( )single taskأو أحادية الربامج ( ،)single programشكل .5-8
هنالك برانمج واحد فق ط ِبل ذاكرة ح ىت ل و ك ان ه ذا ال ربانمج ص غري ج دا وال يس تغل إال القلي ل م ن مس احة
املستخدم ،وهذا يتسبب يف اآليت:
oهنال ك مس احات فارغ ة تكف ي لتحمي ل ب رامج أخ رى ولك ن النظ ام ال يس مح بتحمي ل أكث ر م ن
برانمج ،شكل رقم (.)4-8
oق د يك ون ِبل ربانمج املنف ذ بي اانت أو أوام ر اندرة االس تخدام ،فه ي حتج ز حي زا ِبل ذاكرة (ألن
الربانمج البد من أن يكون كامال ِبلذاكرة).
إه دار زم ن املع اجل :غ ري مس تفاد م ن زم ن املع اجل ،ألن املع اجل ينف ذ ب رانمج واح د فق ط يف اللحظ ة الواح دة،
وإذا توقف هذا الربانمج عن العمل ألي سبب كأن يكون يف انتظار دخل أو حدوث حدث ،يف هذه احلال ة
سيكون املعاجل عاطال ال يعمل شيئا وغري مستفاد منه.
163
شكل رقم ( :)4-8إهدار مساحة املستخدم.
يق وم م دير ال ذاكرة مبعرف ة حج م ال ربانمج ال ذي طلبن ا تنفي ذه ،مث يق ارن ه ذا احلج م م ع حج م مس احة
املس تخدم ،إذا ك ان حج م ال ربانمج أص غر أو يس اوي ه ذه مس احة املس تخدم س يتم حتميل ه يف ال ذاكرة ،وإال فس يمنع
حتميله وقد تظهر رسالة توضح ذلك (ال توجد ذاكرة كافية .)not enough memory
أيض ا يق وم م دير ال ذاكرة حبماي ة منطق ة نظ ام التش غيل م ن ب رامج املس تخدم حبي ث ي تم وض ع العن وان الفاص ل ب ني نظ ام
التش غيل ومس احة املس تخدم يف مس جل يس مى مس جل احلماي ة ( ،)Protection registerعن دما ينف ذ ب رانمج
ا ملس تخدم أي عملي ة وص ول لل ذاكرة س يقارن نظ ام التش غيل العن وان املس تخدم يف األم ر م ع العن وان املخ زن يف مس جل
احلماية إذا كان أعلى منه ،مينع الربانمج من تنفيذ األمر ألنه تعدي للحدود اإلقليمية وجتاوز ملنطقة املستخدم وحماولة
للوصول إىل منطقة نظام التشغيل.
من السه ل على مدير الذاكرة إدارة ذاكرة مثل هذه الذاكرة األحادية ،فك ل م ا علي ه ه و محاي ة نظ ام التش غيل
واختبار حجم الربانمج هل تكفي الذاكرة لتحميله أم ال ؟ وهذه تعترب احلسنة الوحيدة يف هذا النظام .مث ال هل ذا الن وع
من النظم هو نظام التشغيل .DOS
164
الوسائط ( )media playerوإنزال ملفات من اإلنرتنت ت يف نف س الوق ت .وه ذا ي دل عل ى أن وين دوز نظ ام متع دد
املهام.
إذا أردت أن تقوم مبثل هذا العمل يف نظام تش غيل أح ادي امله ام (مث ل )DOSفل ن تس تطيع ،وإمن ا علي ك
تشغيل هذه الربامج يف أوقات خمتلفة (واحد تلو اآلخر.).
السؤال اهلام الذي يطرح نفسه هنا هو :هل هنالك تعدد مهام حقيقي ؟
اإلجابة ترتبط بنوع املكوانت املاجية اليت نستخدم.
.8.5.0مثال تشبيهي
لتوضيح الفرق بني تعدد املهام احلقيقي والومهي دعنا نشرح ذلك مبثال تشبيهي.
ِبلرج وع للمث ال التش بيهي ِبلب اب الثال ث ( ،)5.8جن د أن ه إذا ك ان املوظ ف نش يط وس ريع فيمكن ه العم ل بطريق ة
متعددة (غري حقيقية) ،حيث سينجز أعماله كما يلي:
إذا أحتاج املوظف بعض البياانت من العميل سيطلب منه تعبئة هذه البياانت.
يف ه ذه اللحظ ة يس تدعي املوظ ف عمي ل آخ ر ويب دأ خبدمت ه ريثم ا ينته ي العمي ل الس ابق م ن تعبئ ة بياانت ه
(االستفادة من وقت الفراغ).
إذا أحتاج العميل الثاين مثال لتصوير مستندات ،سيذهب لفعل ذلك.
العميل األول يعبئ يف بياانت والثاين ذهب ليصور مستندات ،اآلن املوظف ال يعمل (فارغ).
إذا فرغ العميل األول من تعبئة البياانت سيكون جاهزا إلكمال معاملته.
165
بع د ف راغ املوظ ف م ن العمي ل الثال ث س يدخل العمي ل األول ليكم ل ل ه معاملت ه ،أو ق د ي دخل عمي ل راب ع،
حسب ما يرى (اجلدولة) ،وهكذا.
هب ذه الطريق ة نق ول أن املوظ ف خي دم ع دد م ن العم الء يف وق ت واح د ،لك ن احلقيق ة أن ه ال يس تطيع التعام ل وال
االس تماع وال ال تكلم إال م ع عمي ل واح د يف اللحظ ة الواح دة ،و لك ن اس تغالله اجلي د لوق ت فراغ ه مكن ه م ن خدم ة
عمالء كثر (كأنه خيدم عدة عمالء يف وقت واحد) .هذه الطريقة تشبه عمل املعاجل (املوظف) مع الربامج (العمالء) يف
مفهوم تعدد املهام الومهي.
.8.5.0.0أحادية املهام
أما ِبلنسبة لنظام التشغيل أحادي املهام فهو يشبه املوظف الكسالن ،حي ث س يبدأ املوظ ف خبدم ة عمي ل مث
إذا قام العميل بتعبئة منوذج أو تصوير مستند أو البحث عن معلومة يف أوراقه ،ظل املوظف جالسا ال ي ؤدي أي مه ام
حىت يفرغ العميل من تعبئيه بياانته مث يرجع مرة أخرى للموظف وقد يتوقف العمي ل أكث ر م ن م رة لتكمل ة أوراق أو أي
شي آخر ويظل املوظف منتظرا هذا العميل.
إذا كان لدينا عدد ثالث موظفني مثال ،فيمكن لكل موظف أن خيدم عميل ِ ،بلت ايل س يكون ع دد العم الء
الذين سيتم خدمتهم يف اللحظة الواحدة يساوي عدد املوظفني املوجودين .هنا يعترب التعدد تعدد حقيقي للمهام ،ألنه
من املمكن للموظفني الثالث التحدث واالستماع والتعامل مع ثالث عمالء يف وقت واحد.
إذا كان لديك معاجل واحد فليس هنالك تعدد مهام حقيقي وإمنا استغالل جيد لزمن
املعاجل .أما تعدد املهام احلقيقي فيتوفر يف احلواسيب اليت متتلك أكثر من نواة ِبملعاجل
( ،)multi-coreأو أكثر من معاجل يف احلاسب (.)multiprocessor
.8.8التجزئة الثابتة
يقسم نظام التش غيل ال ذاكرة إىل من اطق اثبت ة خمتلف ة األحج ام وذل ك إلاتح ة الفرص ة لتحمي ل ب رامج أبحج ام
خمتلفة يف هذه املناطق .تستخدم إدارة الذاكرة مسجلي حدود لكل منطقة من من اطق ال ذاكرة حي ث خي زن يف املس جل
األول احلد األعلى للمنطقة بينما خيزن يف املسجل الثاين احلد األسفل للمنطقة.
166
شكل ر قم ( :)3-8شكل الذاكرة جلدول احلجز (.)0-8
يقوم مدير الذاكرة ِبستخدام جدول يسمى جدول احلجز ،حيتوي هذا اجلدول على رقم كل منطقة وحجمها
وأين توجد ِبلذاكرة وهل هي مستخدمة أم فارغة.
مثال جدول احلجز ( )0-8ميثل الذاكرة ِبلشكل ( .)3-8حيث نستنتج منه اآليت:
املنطقة 5مشغولة (هبا برانمج اآلن ،وال ميكن حتميل برامج هبا).
حجم أكرب برانمج ميكن حتميله هنا هو 022كيلوِبيت (منطقة رقم .)4
167
شكل ر قم ( :)2-8شكل الذاكرة جلدول احلجز (.)0-8
.8.8.0خوارزميات التسكني
إذا كان هنالك عدة مناطق فارغة ونريد حتميل برامج هبا ،فكيف سيتم حتميل هذه الربامج ؟ هنالك خوارزميات
خمتلفة لتحميل الربامج ِبلذاكرة مثل:
األنسب ( :)best-fitيتم وضع الربانمج يف أقل فراغ ميكن أن يستوعبه ،حيث سيتم البحث عن كل
الفراغات املتاحة ِبلذاكرة وإختيار أقل فراغ ميكن أن يستوعب الربانمج (العملية) اليت نريد حتميلها ِبلذاكرة.
األول ( :)first-fitيتم وضع الربانمج يف أول فراغ ميكن أن يستوعبه ،هذه اخلوارزمية ال حتتاج حبث عن
كل الفراغات املوجودة ِبلذاكرة ،وإمنا ستضع الربانمج املراد حتميله يف أول فراغ جتده ِبلذاكرة يكون حجمه
أكرب أو يساوي حجم الربانمج.
األكرب ( :)worst-fitيتم وضع الربانمج يف أكرب فراغ ميكن أن يستوعب الربانمج ،حيث سيتم البحث
عن كل الفراغات املوجودة ِبلذاكرة وإختيار أكربها حجما لوضع الربانمج املراد حتميله فيه (حبيث يكون
الفراغ أكرب أو يساوي حجم الربانمج).
مثال ()0-8
إذا كان لدينا ثالث ب رامج ِبألحج ام ،P3=200 ،P2=50 ،P1=10معط ى ج دول احلج ز (،)0-8
فكيف سيتم حتميل هذه الربامج ِبستخدام خوارزميات التسكني أعاله ؟
168
احلل
طريق ة األنس ب ( :)best-fitسنض ع P1يف املنطق ة ،0و P2يف املنطق ة ،4و P3س يتنتظر (ميك ن
حتميله ألنه ال يوجد فراغ يكفيه) ،أنظر الشكل (.)8-8
طريق ة األول ( :)first-bestسنض ع P1يف املنطق ة ،0و P2يف املنطق ة ،4و P3س يتنتظر (ميك ن
حتميله ألنه ال يوجد فراغ يكفيه) ،أنظر الشكل (.)5-8
طريق ة األس وأ ( :)worst-fitسنض ع P1يف املنطق ة ،4و P2يف املتبق ي م ن املنطق ة -022( 4
P3 ،)032=02الميكن حتميله ِبلذاكرة ألنه ال يوجد فراغ يكفي.
شكل رقم ( :)5-8شكل الذاكرة للخوارزميات الثالثة عد حتميل الربامج يف املثال (.)0-8
169
.0أرسم شكل الذاكرة جلدول احلجز أعاله.
األول ff
األنسب bf
األسوأ wf
مثال ()5-8
وضح كيف تضع كل من اخلوارزميات ،األول ( ،)ffاألنسب ( ،)bfواألسوأ ( ،)wfالعمليات التالية ِبلذاكرة:
170
تنبيه :إذا مت حتميل عملية يف قسم ،ميكن إنشاء قسم جديد من الفراغ املتبقي هبذا القسم (إذا كان يكفي لتحميل
عملية أخرى).
احلل
ضع 212يف القسم 417 ،500يف القسم 112 ،600يف القسم ( 288قسم نتج من
426 ،)500-212=288تنتظر.
.8.3التجزئة الديناميكية
تك ون مس احة املس تخدم ِبل ذاكرة يف البداي ة غ ري مقس مة ،مث ينش أ ج زء كلم ا حتم ل ب رانمج ِبل ذاكرة (يك ون
حبجم الربانمج) وتكون ِبقي املساحة فارغة ،مث إذا مت حتميل برانمج آخر،سيبىن جزء اثين حبجم الربانمج الثاين ،وهكذا،
الشكل (.)8-8
171
شكل رقم ( )0( :)8-8ذاكرة املستخدم فارغة يف البداية ( )0الذاكرة بعد حتميل برانمج حبجم 32كيلوِبيت ()5
الذاكرة بعد حتميل برانمج آخر حبجم 022كيلوِبيت.
.8.3.0الفراغات ()fragmentations
الفراغات اخلارجية External Fragmentationمساحة فارغة غري متالصقة تنتج بسبب حتميل
العمليات وإخراجها من الذاكرة ،أنظر الشكل ( ،)8-8و الشكل (.)3-8
الفراغات الداخلية :Internal Fragmentationقد يتم حجز منطقة لعملية حبيث تكون العملية
اصغر من املنطقة مما يولد فراغ داخلي ال ميكن استخدامه ،مثل الفراغ الداخلي ِبملنطقة 4يف الشكل (.)5-8
ميكننا جتميع الفراغات اخلارجية مع بعضها ِبلضغط ،compactionلتكون فراغ خارجي واحد كبري
ميكن اإلستفادة منه.
ملحوظة:
172
مثال ()1-1
ذاكرة ديناميكية مبساحة حجمها 832كيلوِبيت .بعد حتميل ثالث عمليات فيها ِبالحجام ،502
،004و 088سيكون اجلزء احلر هبا هو 24كيلوِبيت ،كما يف الشكل رقم (( )02-8د) ،حيث سنحسبه
كاآليت:
24 = )088+004+502( – 832كيلوِبيت.
اآلن إذا أردان حتميل عملية رابعة حبجم 008كيلوِبيت ،سيجيب نظام التشغيل أبنه التوجد مساحة كافية
ِبلذاكرة ،ذلك ألن .24 > 008لذلك علي العملية الرابعة االنتظار حىت تتوفر مساحة كافية هلا.
إذا أخرج نظام التشغيل العملية الثانية ،ميكن للعملية الرابعة أن حتمل .لكن ستظهر فراغات
( )fragmentationكما يف الشكل (( )3-8و) .إذا اخرج نظام التشغيل العملية األوىل ،ودخلت مكاهنا
العملية الثانية مرة أخرى سينشأ فراغ آخر كما يف الشكل (( )3-8ح).
سؤال ()0-8
نعم إذا قمن ا بض غط الفراغ ات اخلارجي ة ،حي ث س يكون ذل ك ف راغ حبج م 96+96+64=256K :وه و
كايف لتحميل العملية
173
شكل رقم ( :)3-8الفراغات.
سؤال ()0-8
هل ميكن حتميل عملية حجمها 250kيف الشكل ()02-8؟ ال ،ألن الفراغات داخلية وال ميكن
ضغطها.
إذا مل تتوفر منطقة لتحميل برانمج معني (ألنه أكرب من أي منطقة فارغة) ،قد تستخدم بعض إدارات الذاكرة
عملية الضغط أو جتميع الفراغات لتوفري مساحة أكرب وذلك حبساب جمموع الفراغات املتوفرة ،فإذا كان حجمها أكرب
أو يساوي حجم الربانمج جتمع هذه الفراغات لتكون فراغ واحد كبري يستطيع حتميل الربانمج .مثال يف الشكل (-8
،)h( )02إذا استخدمنا الضغط سنجد أن الفراغ الذي سيجمع هو .96+96+64=256K
174
.8.02مشاكل تعدد املهام
ال ذاكرة متع ددة امله ام س واء كان ت ِبلتجزئي ة الثابت ة أو التجزئي ة الديناميكي ة أو غريه ا ،هب ا مش اكل انجت ة ع ن
تعدد الربامج (أي وجود أكثر من برانمج ِبلذاكرة) ،هذه املشاكل سنوضحها ِبلتفصيل أدانه ونبني كيف تتم معاجلتها.
عند حتميل برانمج ما للتنفيذ ،ال نعرف يف أي منطقة ِبلذاكرة سيتحمل ،أو إذا حدث تبديل ( )swapأي
مت إخراج الربانمج من الذاكرة لسبب ما ،مث مت إرجاعه مرة اثنية إىل الذاكرة ،قد يرجع الربانمج يف منطقة أخرى ِبلذاكرة
غ ري ال يت ك ان فيه ا .ع دم معرف ة مك ان حتمي ل ال ربانمج ِبل ذاكرة جيع ل التعام ل م ع املتغ ريات وال دوال املرتبط ة بعن اوين
ال ذاكرة غ ري ممك ن ،ألنن ا ال نع رف أي ن س تكون متغرياتن ا ودوالن ا ِبل ذاكرة .م ثال إذا حتم ل ب رانمج مبوق ع يب دأ ِبلعن وان
،300وكان هنالك متغري داخل الربانمج ِبملوقع ،222وأراد الربانمج ختزين قيمة ما داخل هذا املتغري فإنه سيستخدم
العنوان 222للتعامل مع املتغري ،شكل رقم (.)00-8
521بداية الربانمج
...
600مكان املتغري 75
اآلن إذا مت حتمي ل ال ربانمج يف موق ع آخ ر يب دأ ِبلعن وان 200م ثال ،الش كل ( .)00-8ف إن ال ربانمج
سيستخدم عنوان الذاكرة 222للوصول للمتغري ،ولكن العنوان 222اآلن أصبح خارج منطقة الربانمج.
175
أح د احلل ول هل ذه املش كلة ه و تع ديل أوام ر ال ربانمج قب ل حتميل ه ِبل ذاكرة ،حي ث نض يف رق م بداي ة عن وان
املنطقة اليت سيحمل فيها الربانمج إىل كل أوامر الربانمج .مثال إذا حتمل الربانمج مبنطقة تبدأ ِبلعنوان ،522فك ل أم ر
سيضاف إليه الرقم ،522فإذا كان الربانمج يتعامل مع متغري ِبلعنوان 022فسيتغري العنوان إىل .022+522هبذه
الطريقة حتل مشكلة تغيري املوقع.
وصول برانمج إىل منطقة برانمج آخر يسبب مشكلة تداخل قد تؤدي إىل تنفيذ خاطئ هلذه الربامج .فمثال
ق د تس تخدم ب رامج ختريبي ة ( )malicious programه ذه املش كلة كثغ رة للوص ول لل ربامج والبي اانت األخ رى
(وذل ك إبنش اء أوام ر متكنه ا م ن القف ز ( )jumpإىل أي مك ان ِبل ذاكرة) .ومب ا أنن ا نس تخدم عن اوين حقيقي ة ،فل يس
هنالك طريقة لتوقيف مثل هذه الربامج من الوصول إىل أي خلية والكتابة أو القراءة منها.
هنالك حل ميكن استخدامه ملعاجلة مشكليت إعادة تغيري املواقع واحلماية يف آن واحد ،أال وهو استخدام
مسجلي األساس ( )baseوالطول (.)limit
عند حتميل أي برانمج سيحتوي مسجل األساس على عنوان بداية املنطقة اليت سيتحمل هبا ،ومسجل الطول
سيخزن به طول هذا املنطقة ،الشكل (.)05-8
176
يس تخدم املع اجل عن اوين منطقي ة (ت رقيم تسلس لي م ن 2إىل ط ول احل د) للتعام ل م ع ال ربانمج ،وس يتم إض افة
حمت وى مس جل األس اس (عن وان بداي ة املنطق ة) إىل العن وان املنطق ي قب ل إرس اله لل ذاكرة .م ثال إذا أردان تنفي ذ أي أم ر
يتعامل مع الذاكرة ،مثل األمر ( ، )Load 345فإنه البد من إجراء اخلطوات التالية قبل تنفيذ:
إذا كانت اإلجابة نعم سريسل إشعار أبن العنوان خطأ (.)trap: address error
إذا كان ت اإلجاب ة ال س نحول العن وان املنطق ي إىل عن وان حقيق ي وذل ك إبض افة حمت وى مس جل األس اس
للعنوان الذي يستخدمه األمر:
)Load (123+16000
من عيوب هذه الطريقة أنه البد من إجراء اخلط وات أع اله عل ى ك ل أم ر يتعام ل م ع ال ذاكرة مم ا يتس بب يف إبط اء
التنفيذ.
177
عنوان الذاكرة اخللية العنوان املنطقي
222
...
222 53
...
200بداية املنطقة 222
200 220
205 220
204 225
203 224
... ... ...
535 052
538 055
533 058
822هناية املنطقة 053
السؤال هنا من يقوم بعملية حتويل العنوان ؟ اإلجابة :وحدة إدارة الذاكرة ( Memory Management Unit
).)(MMU
هي عبارة عن جهاز صغري (عتاد) موجود ِبملعاجل يقوم بتحويل العناوين املنطقية اليت يستخدمها املعاجل إىل
عناوين حقيقية ،حبيث ال يهتم وال يعرف املعاجل كيف يتم ذلك ،فاملعاجل يقوم إبرسال عنوانه املنطقي إىل MMU
(مثال العنوان رقم ،)542فيقوم MMUبتحويل العنوان املنطقي إىل حقيقي مث يرسله للذاكرة (العنوان ،)04542
فتصل املعلومة للمعاجل وهو اليعرف موقعها األصلي ِبلذاكرة ،الشكل (.)04-8
.8.00.0مسجل األساس
عند حتميل الربانمج نضع عنوان بداية الربانمج يف مسجل يسمى مسجل األساس (،)base register
هذا املسجل يستخدمه MMUمع العنوان املنطقي (تسمى أحياان اإلزاحة) لتوليد العنوان احلقيقي.
178
مثال يف الشكل ( ،)03-8سيكون حمتوى مسجل األساس هو ،200ويستخدم املعاجل العناوين املنطقية
من صفر إىل .053أما MMUفيمكنه توليد أي عنوان فيزَيئي مبجمع العنوان املنطقي إىل حمتوى مسجل
األساس.
تنبيه:
هل العنوان املنطقي الذي تساوي قيمته قيمة مسجل الطول يعترب عنوان صحيح؟ ال ،ألن أكرب عنوان
منطقي جيب أن يكون أقل من مسجل احلد بواحد.
مثال()3-8
ِبلرجوع للشكل ( ،)04-8وضح كيف تحول العناوين املنطقية التالية إىل حقيقية:
4
055
022
احلل
من الشكل ( )04-8جند أن حمتوى مسجل األساس ( )200وسيخزن يف مسجل الطول طول املنطقة (.)053
للتحوي ل س يقوم MMUمبقارن ة العن اوين املنطقي ة م ع حمت وى مس جل احل د ،ف إذا كان ت أص غر س يقوم ض افة حمت وى
مسجل األساس إىل العنوان املنطقي فينتج العنوان احلقيقي وعليه ستكون النتيجة كالتايل:
179
538 = 200 + 055
مثال ()2-8
203
538
0222
سنقوم بطرح مسجل األساس من العنوان احلقيقي فينتج عنه عنوان منطقي ،وذلك كما يلي:
( 053 = 200 – 0222 خطأ ألن العنوان احلقيقي خارج حد العملية).
إذا احتجنا إىل جزئية صغرية من النصف الذي ِبلقرص فسنضطر إىل تبديله (كله) مع اجلزء ال ذي ِبل ذاكرة،
بعد تنفيذ اجلزئية الصغرية املطلوبة من ه ذا اجل زء وأردان الرج وع إلكم ال تنفي ذ اجل زء األول ال ذي مت إخ راجهن
فسنضطر لتبديل اجلزأين مرة أخرى ،مما يتسبب يف أبطاء العمل بصورة واضحة ،ذلك ألن التعامل مع القرص
الصلب يؤثر أتثريا كبريا يف األداء.
هدفنا هنا إذن هو حتاشي التبديل بقدر املستطاع (تقليل التعامل مع القرص ما أمك ن ذل ك) ،واإلس تفادة م ن أي
مساحة فارغة ِبلذاكرة ( أي ليس من الضروي أن تكون املساحة املتاحة يف الذاكرة كافية لتحميل كل الربانمج أو ج زء
كبري منه حىت ننفذه) واحلل استخدام الصفحات.
180
.8.00.0الصفحات
تقسيم الربانمج إىل أجزاء صغرية متساوية يف احلجم تس مى ص فحات ( ،)pagesوتقس م ال ذاكرة إىل من اطق
ص غرية متس اوية يف احلج م (ومس اوية حلج م الص فحة) تس مى إط ارات ( .)framesحبي ث يك ون ك ل إط ار ق ادرا عل ى
ختزين صفحة.
لتنفيذ برانمج بعدد ن صفحة ،فسنحتاج إىل ن إطار فارغ ِبلذاكرة ،وإالسنحتاج إىل ذاكرة ظاهرية.
ق د تنش أ فراغ ات داخلي ة يف Internal fragmentationيف ذاك رة الص فحات .م ثال إذا ك ان حج م
الصفحة 4kbوكان لدينا برانمج حجمه ، 110kbفإننا سنقسم الربانمج كالتايل:
110/4 = 27الب اقي ،2إذن س أحتاج إىل 27ص فحة ِبإلض افة إىل الب اقي م ن ال ربانمج وه و 2kb
فأضطر إىل وضعها يف صفحة (ومبا أن الصفحة حجمها أربعة فإن الباقي وهو 2kbسنض عه يف ص فحة ويك ون ل دينا
ف راغ داخل ي حجم ه ،)2kbل ذلك س نحتاج إىل 28ص فحة لل ربانمج م ع ف راغ داخل ي حجم ه 2kbيف الص فحة
األخرية.
فإذا كان ،p=7و ،d=20فهذا ينعي أننا نريد اخلانة رقم ( 00ألن أول خانة يف الصفحة رقمها هو صفر)
ِبلصفحة السابعة.
181
عنوان اخلانة داخل اإلطار (اإلزاحة).
عملية حتويل العنوان املنطقي إىل حقيقي يتم جبهاز ( )hardwareيستقبل العناوين املنطقية من املعاجل وحيوهلا
إىل حقيقية قبل إرساهلا للذاكرة .تعتمد عملية التحويل هذه على جداول الصفحات.
يف الشكل ( ،)05-8يستخدم املعاجل عنوان الصفحة ومكان اخلانة داخل الصفحة (اإلزاحة) ،فيقوم اجلهاز
ِبلبحث عن رقم اإلطار الذي وضعت به الصفحة ِبلذاكرة من جدول الصفحات ،حيث ميثل عنوان الصفحة فهرس
نصل به إىل رقم اإلطار الذي ختزن به الصفحة يف الذاكرة .ندمج رقم اإلطار مع اإلزاحة فينتج العنوان احلقيقي
يتم إنشاء جدول صفحات لكل عملية حبيث حيتوي هذا اجلدول على رقم الصفحات اليت مت حتميلها ِبلذاكرة
وأرقام اإلطارات اليت وضعت فيها هذه الصفحات ،كما يف الشكل (.)08-8
182
شكل رقم ( :)08-8جدول الصفحات يوضح مكان الصفحات ِبلذاكرة [.]3
مثال ()5-8
حول العناوين املنطقية التالية إىل عناوين حقيقية (ِبلرجوع للشكل (:))3-3
احلل
سنبحث عن اإلطار الذي توجد به الصفحة من جدول الصفحات ونستبدله برقم الصفحة (ونضع الغزاحة
كما هي) فتكون العناوين احلقيقية كما يلي:
مثال ()8-8
الشكل التايل يوضح البياانت اليت توجد داخل الصفحات ،ومكان تواجد هذه الصفحات ِبلذاكرة.
املطلوب هنا معرفة مكان معلومة معينة داخل الصفحة مثال احلرف aأين يوجد ِبلذاكرة ؟
احلل
183
احلرف aيوجد الصغحة االوىل (رقم صفر) ،ويوجد يف أول خانة داخل الصفحة (اإلزاحة=صفر) ،سنقوم
بتحويل رقم الصفحة إىل رقم اإلطار من جدول الصفحات حيث سنجد أن الصفحة رقم صفر توجد يف اإلطار رقم
مخسة ،لنصل للمعلومة مباشرة نضرب رقم اإلطار يف طول الصفحة ( )4ونضيف إليه اإلزاحة:
5 x 4 + 0 = 20
أيضا احلرف pمثال يف الصفحة رقم ،3يف اخلانة رقم ،3الصفحة 3توجد ِبإلطار ( 2من جدول الصفحات)،
ملعرفة مكان احلرف ِ pبلذاكرة سنجري العمليية التالية:
2 x 4 + 3 =11
مثال ()3-8
184
إذا كان لدي عملية تتكون من 4صفحات ولدي إطارات فراغة كما موضح ِبلشكل ،02-8إنشي
جدول الصفحات بعد حتميل العملية ِبلذاكرة.
احلل
.8.00.5محاية الذاكرة
185
كيف أعرف أن صفحة معينة تنتمي إىل عملية معينة ؟ ميكن ختصيص خانة ( )bitيف كل إطار هلذا
الغرض ،حبيث حتدد قيمة هذه اخلانة هل تنتمي الصفحة للعملية أم ال .فإذا كانت قيمة البت هي vوتعين ()valid
فهذا يعين أن الصفحة تنتمي للعملية ،اما إذا كانت قيمة البت iوتعين ( ،)in-validفهذا خيربان أبن الصفحة ال
تنتمي للعملية .يكون هنالك عمود محاية جلدول الصفحات كما يف الشكل (.)00-8
ميكن جعل الصفحات املتشاهبة بني عدة عمليات مشرتكة يف الذاكرة لتوفري مساحة ِبلذاكرة وإزالة التكرار،
فبدال من وضع نسخة من هذه الصفحات لكل عملية نضع نسخة واحدة وجنعلها مشرتكة بني العمليات .أما
الصفحات اليت ختص كل عملية فتكون غري مشرتكة.
نسخة واحدة للقراءة فقط لكل العمليات مثل حمرر النصوص ،املرتمجات.
186
الشفرة املشرتكة جيب أن تكون يف نفس املكان يف جمال العنوان املنطقي logical address spaceلكل
العمليات ،مثال الشكل ( )05-8جند عنوان edمتشابه يف كل العمليات (.)5،4،2
الصفحات اليت حتتوي شفرات وبياانت خاصة ميكن أن تكون يف أي مكان يف جمال العنوان
املنطقي ،logical address spaceمثال يف الشكل ( )04-8جند أن لكل عملية عنوان خمتلف لبياانهتا اخلاصة
(.)p1=1, p3=2, p2=7
.8.05التقطيع ()segmentation
هو طريقة إلدارة الذاكرة تدعم نظرة املستخدم للذاكرة ،حيث نقوم بتقسيم الربانمج إىل أجزاء منطقية،
فالربانمج الرئيسي يكون يف مقطع ،الدوال يف مقطع والبياانت يف مقطع آخر ،وهكذا.
يعترب املقطع وحدة منطقية مثل الربانمج الرئيسي ،دالة معينة ،كائن ،املتغريات العامة واخلاصة ،املكدس
( ،)stackاملصفوفات.
بعد تقسيم الربانمج إىل مقاطع نضع كل مقطع يف خانة ِبلذاكرة ،الشكل (.)04-8
187
شكل رقم ( :)04-8حتميل مقاطع الربانمج يف الذاكرة.
.8.05.0العناوين يف التقطيع
تتم عملية التحويل بني العنوان املنطقي والعنوان احلقيقي استخدام مسجلي أساس وحد ،حيث حيتوي
مسجل األساس عنوان بداية املقطع يف الذاكرة ومسجل الطول حيتوي على طول املقطع ( .)limitتوضع مسجالت
األساس والطول لكل املقاطع يف جدول واحد يسمى جدول املقاطع ( ،)segment tableحيث هنالك جدول
مقاطع لكل عملية.
هنالك جهاز يقوم بعملية حتويل العناوين من منطقية إىل حقيقية يعمل كما يف الشكل (.)03-8
188
شكل رقم ( :)03-8حتويل العنوان املنطقي إىل حقيقي [.]3
مثال ()3-8
الشكل ( )02-8يوضح برانمج مكون من 5مقاطع ،ويبني جدول املقاطع مكان كل مقطع ِبلذاكرة
الرئيسية.
لتوضيح كيف يتم التحويل من العنوان املنطقي إىل احلقيقي ،لنحول العنوان املنطقي التايل إىل حقيقي:
هذا العنوان يعين أنين أريد معلومة من املقطع رقم 0اإلزاحة رقم .20
احلل
قارن قيمة اإلزاحة مع مسجل الطول (أي هل 20أصغر من )1000؟ إذا كانت اإلجابة نعم فسأقوم
ِبلتحول وإال سيكون هنالك خطأ يف اإلزاحة.
189
إذن العنوان احلقيقي سيكون حمتوى مسجل األساس +اإلزاحة أي 1420 =20+1400
مثال ()02-8
احلل
عند مقارنة مسجل الطول مع اإلزاحة جند ان اإلزاحة أكرب من مسجل الطول وهذا يعين أننا سنكون
خارج املقطع (وصول خاطئ).
هذا يعين أننا ال نستطيع حتويل هذا العنوان ألنه عنوان خطأ.
.8.04خالصة
حت دثنا يف ه ذا الب اب أه داف إدارة ال ذاكرة ،وع ن أن واع إدارات ال ذاكرة وه ي األحادية،والتجزئي ة الثابت ة
والتجزئية الديناميكية والصفحات والتقطيع .حيث تعترب الذاكرة األحادية قدمية وغري مستخدمة حاليا ،والتجزئية الثابتة
تول د فراغ ات داخلي ة ال ميك ن اإلس تفادة منه ان بينم ا تول د التجزئي ة الديناميكي ة فراغ ات خارجي ة ميك ن ض غطتها
لإلستفادة منه ا .ال ذاكرة ِبلتص فح تس اعد يف االس تفادة م ن فراغ ات ال ذاكرة الص غرية حي ث ميك ن حتمي ل ص فحات يف
فراغات صغرية مبعثرة .التقطيع هو إدارة لتقسيم العملية إىل مقاطع ونضع كل مقطع يف جزء من االذاكرة .أيضا وضحنا
أن العنوان املنطقي هو العنوان الذي يستخدمه املعاجل والربامج بينما تستخدم ال ذاكرة عن اوين حقيقي ة .وس نتحدث ع ن
إمكانية تنفيذ برامج أكرب من حجم الذاكرة الرئيسية فيما يسمى الذاكرة االفرتاضية.
190
.8.03متارين حملولة
.0إذا كان لدينا جدول املقاطع ( )segment tableالتايل:
0, 500
1, 10
2, 500
3, 2400
4, 99
أرسم شكل الذاكرة مع توضيح هل توجد فراغات خارجية أم ال ؟
احلل:
العنوان املنطقي 2,500ال ميكن حتويله ألن 500أكرب من طول املقطع (احلد هو .)300
191
من الشكل أعاله جند أنه ال يوجد فراغ خارجي.
.4ما الفرق بني الذاكرة ِبلتجزئية الثابتة والذاكرة الديناميكية ؟ و ماهي عيوب كل منهما ؟
.2هنالك نوعني من الفراغات إذكرمها مع تبيني يف أي نوع من إدارات الذاكرة تنشأ كل واحدة منها؟ وما الفرق
الرئيسي بينهما ؟
.5ضع دائرة حول اإلجابة/اإلجاِبت الصحيحة (قد يكون هنالك أكثر من إجابة صحيحة)
سريعة
كبرية
192
متطايرة
غري متطايرة
فإن :
.5.5اجلهاز الذي يقوم بتحويل العنوان املنطقي إىل عنوان حقيقي يسمى:
CPU
MPU
MMU
MNU
.5.4إذا كان لدي 5فراغات داخلية ،الفراغ األول حبجم ،100Kوالفراغ الثاين حبجم ،90Kوالفراغ الثالث
حجمه ،110Kفهل ميكنين حتميل عملية حجمها ، 300Kعلما أبن جمموع هذه الفراغات يساوي .300K
اإلجابتان خطأ.
اإلجابتان خطأ.
193
إذا كان لدينا برانمج حجمه 100 Kوكان حجم الصفحة ، 3 Kفإنه سيكون لدينا: .5.3
يتعامل برانمج املستخدم مع العناوين احلقيقية وال يرى أبدا العناوين املنطقية.
التجزئة الديناميكية تولد فراغات داخلية بينما التجزئة الثابتة تولد فراغات خارجية.
إبفرتاض أن مسجل األساس حيتوي على ،522242ومسجل الطول حيتوي على ،002322كما يف الشكل
أعاله.
194
حول العناوين املنطقية التالية إىل عناوين حقيقية:
.00أكمل الرسم 08-8بتوضيح أماكن حتميل الصفحات ِبلذاكرة وتوضيح الصفحات الصحيحة من الغري
صحيحة يف جدول الصفحات بوضح احلرف vأمام الصفحات الصحيحة واحلرف iأمام الصفحات الغري صحيحة ؟
195
الباب التاسع :الذاكرة االفرتاضية
196
الباب التاسع
.3.0يف املاضي
يف اخلمس ينيات وقب ل ظه ور ال ذاكرة االفرتاض ية ،ك ان ك ل ب رانمج نري د تنفي ذه الب د م ن أن يك ون يف ال ذاكرة
أوال ،ه ذا يع ين أن أي ب رانمج جي ب أن يك ون أق ل أو يس اوي حج م ال ذاكرة املت وفرة (الفارغ ة) .تعت رب ه ذه مش كلة يف
الربامج الكبرية ،إذ ال ميكن تشغيل برامج حجمها اكرب من حجم الذاكرة .هذا يعين أننا ال نستطيع تشغيل برامج كث رية
ِبلذاكرة .الربامج كب رية احلج م جي ب تقس يمها إىل ب رامج ص غرية وتنفي ذ ك ل ب رانمج عل ى ح دة ،إذ ال ميك ن حتمي ل أكث ر
من برانمج ِبلذاكرة .لذلك لتشغيل برانمج كبري فالبد من شراء ذاكرة تتسع له ،ولكن:
ستكون مكلفة.
يبدأ املعاجل يف تنفيذ جزء الربانمج املوجود ِبلذاكرة ،وإذا أحتاج إىل أوامر أو بياانت من اجلزء اآلخر (املوجود
ِبلقرص) سيقوم مدير الذاكرة بتبديل اجلزئني (.)swap
.3.5التبديل Swapping
التب ديل ه و حتوي ل ال ربانمج (أو ج زء من ه) م ن ال ذاكرة الرئيس ية إىل الق رص أو العك س .ت تم املبادل ة عل ى
مرحلتني ،الشكل ( ،)0-3مها:
حتويل الربانمج (أو جزء منه) من الذاكرة إىل القرص (.)swap out
197
حتميل الربانمج (أو جزء منه) من القرص إىل الذاكرة (.)swap in
.3.4الذاكرة االفرتاضية
تعترب الذاكرة االفرتاضية فصل بني ذاكرة املستخدم املنطقية والذاكرة احلقيقية وختتلف عن الذاكرة احلقيقية يف
اآليت:
198
شكل رقم ( :)0-3الصفحات [.]03
قبل إخراج الصفحة (استخدام مكاهنا) ،سيقوم مدير الذاكرة ِبختبار هل الصفحة املراد استخدام
مكاهنا قد مت تعديلها أم ال ؟ إذا مت تعديلها جيب أن حتفظ ِبلقرص ،أما إذا مل يتم تعديلها فنكتفي
بنسختها القدمية املوجودة ِبلقرص.
199
.3.3.0خطأ صفحة ()page fault
عندما يطلب برانمج صفحة غري موجودة ِبلذاكرة (إفتقاد صفحة) ،سيسبب ذلك قفز إىل نظام التشغيل
برسالة تقول أن هنالك خطأ صفحة ، page faultأي أن الربانمج يريد صفحة ومل جيدها ِبلذاكرة .على نظام
التشغيل توفري الصفحة املفتقدة للربانمج الذي إفتقدها حسب اخلطوات التالية:
oحتديث جداول الصفحات بوضع رقم الصفحة ورقم اإلطار الذي وضع هبا.
إذا طلبنا صفحة غري موجودة ِبلذاكرة ومل جيد نظام التشغيل إطار فارغ إلحضار الصفحة املطلوبة فيه ،ماذا
يفعل نظام التشغيل ؟
200
سيقوم بعملية استبدال ( ،)swapأي إخراج صفحة من الذاكرة (نسميها الصفحة الضحية) وإدخال
الصفحة املطلوبة مكاهنا.
هنا يظهر سؤال هام وهو أي صفحة سيخرج من الصفحات اليت ِبلذاكرة (من ستكون الصفحة الضحية) ؟
هنالك عدة خوارزميات حتدد أي صفحة سنخرج.
يستخدم نظام التشغيل أحد هذه اخلوارزميات ،مع وضع إعتبار لألداء يف اختيار اخلوارزمية (نريد خوارزمية
خترج صفحة ال تحتاجها يف القريب العاجل وهذا يقلل عدد أخطاء الصفحات .)page faults
نستفيد من استبدال الصفحات يف استخدام إطارات قليلة لتنفيذ عملية بصفحات كثرية ،وهي الفكرة الرئيسية يف
الذاكرة االفرتاضية.
.5إذا مل يوجد إطار فارغ ،نستخدم خوارزمية إلختيار اإلطار الضحية .victim frame
201
شكل رقم :4-3استبدال الصفحات [.]3
إخراج الصفحة األقدم (األول أوال خترج أوال)first come first out (fifo) ،
إخراج الصفحة اليت ال تحتاج هلا قريبا (اخلوارزمية املثلى )optimal
خوارزمية الصفحة االقل استخدام LRU
خوارزمية LRUالتقريبية approximation
خوارزمية الساعة.
خوارزمية الفرصة الثانية.
خوارزمية التعداد
نريد أقل معدل page-fault
سنتحدث عن طريقة عمل كل خوارزمية وسيكون هنالك مثال لكل طريقة ،وسنقيم كل اخلوارزمية حبساب عدد فقداهنا
للصفحات page faultsاليت قد حتدث على سلسلة معينة طلبات الصفحات.
وتكون سلسلة طلبات الصفحات هي كتابة أرقام الصفحات حسب ترتيب طلبها ،مثال السلسلة التالية:
1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
توضح أننا نريد الصفحة رقم ،0مث رقم ،0مث رقم ،5وهكذا.
202
.3.2.0خوارزمية الصفحة األقدم حتميال ()FIFO
استبدال الصفحة األقدم (أقدم صفحة مت حتميلها ِبلذاكرة) .أي التعامل مع الصفحات املوجودة ِبلذاكرة
حسب زمن وصوهلا ،فاليت تصل إىل الذاكرة أوال خترج من الذاكرة أوال .عيب هذه اخلوارزمية أنه قد يكون لدينا
صفحات يف الذاكرة لغري مستخدمة ملدة طويلة.
مثال ()2-3
1,2,3,2,1,5,2,1,6,2,5,6,3,1,3,6,1,2,4,3
احلل
يف البداية ستكون اإلطارات الثالثة فارغة ،سنحتاج أوال للصفحة رقم 0وألهنا غري موجودة (أول خطأ
صفحة) سنحضرها يف إطار من الثالثة ،بعدها سنحتاج الصفحة رقم ( 0غري موجودة مما سيسبب خطأ صفحة اثين)
سنحضرها يف اإلطار الثاين ،بعدها سنحتاج إىل الصفحة رقم ( 5غري موجودة أيضا لذلك سنحضرها إىل اإلطار
الثالث) .اآلن عدد خطأ الصفحات هو ،5واإلطارات الثالثة ممتلئية.
سنحتاج بعدها الصفحة رقم 0والصفحة رقم ( 0كلها موجودة ِبلذاكرة (ال يوجد خطأ صفحة)) .بعدها
سنحتاج الصفحة رقم 3وهي غري موجودة ِبلذاكرة لذلك سيبب ذلك خطأ صفحة ،هذا ِبإلضافة إىل أننا نريد
استبدال صفحة ألن اإلطارات الثالث مليئة ،لذلك سنخرج الصفحة األقدم وهي الصفحة رقم 0وندخل مكاهنا
الصفحة رقم ،3اآلن عدد خطأ الصفحات أصبح .4سنحتاج الصفحة 0وهي موجودة ،بعدها سنحتاج الصفحة
رقم ،0وألهنا غري موجودة فسيكون هنالك خطأ صفحة (أصبح عدد أخطاء الصفحات ،)2وسنستبدل الصفحة 0
مكان الصفحة 0ألهنا األقدم .وهكذا ستتم عمليات االستبدال إىل هناية السلسلة كما يف الشكل التايل حبصيلة عدد
14خطأ صفحة..
203
.3.2.0اخلوارزمية املثلى
مثال ()5-3
1,2,3,2,1,5,2,1,6,2,5,6,3,1,3,6,1,2,4,3
احلل
يف البداية ستكون اإلطارات الثالثة فارغة ،سنحضر الصفحات 3 ،2 ،1يف اإلطارات الثالث الفارغة مما يولد
3خطأ صفحة .بعدها سنحتاج إىل الصفحات 1 ،2ومها ِبلذاكرة فنستخدمهما دون حدوث خطأ صفحة .بعدها
سنحتاج الصفحة ،5وهي ليست ِبلذاكرة لذلك البد من إخراج صفحة وإدخاهلا مكاهنا .سنخرج الصفحة اليت ال
نطلبها قريبا (لدينا اآلن ِبلذاكرة الصفحات )3 ،2،1فإيها سنخرج:
الصفحة 3سنطلبها بعد 6صفحات ،وهي األبعد لذلك سنخرجها ونضع 5مكاهنا ،اآلن لدينا ِبلذاكرة
الصفحات .5 ،2،1
سنحتاج الصفحة 2وهي موجودة ِبلذاكرة ،وبعدها سنحتاج الصفحة 1وهي ِبلذاكرة ،بعدها سنحتاج الصفحة 6
اليت ال توجد ِبلذاكرة لذلك سنتبدهلا ِبلصفحة 1ألهنا األبعد .وهكذا إىل أن نصل للحل التايل:
204
إبفرتاض أن الصفحة اليت استخدمت حديثا هي اليت سنحتاجها وهي اليت ستستخدم مرة اثنية ،أما اليت مل
تستخدم حديثا فغالبا لن تحتاجها يف القريب العاجل .لذلك سنخرج الصفحة اليت مل تستخدم حديثا (األقدم
استخداما).
مثال ()8-3
1,2,3,2,1,5,2,1,6,2,5,6,3,1,3,6,1,2,4,3
احلل
يف البداية ستكون اإلطارات الثالثة فارغة ،سنحضر الصفحات 3 ،2 ،1يف اإلطارات الثالث الفارغة مما يولد
3خطأ صفحة .بعدها سنحتاج إىل الصفحات 1 ،2ومها ِبلذاكرة فنستخدمهما دون حدوث خطأ صفحة .بعدها
سنحتاج الصفحة ،5وهي ليست ِبلذاكرة لذلك البد من إخراج صفحة وإدخاهلا مكاهنا .سنخرج الصفحة األقل
استخداما (لدينا اآلن ِبلذاكرة الصفحات )3 ،2،1فإيها سنخرج:
الصفحة 3استخدمت قبل الصفحة ،2أي هي األول استخداما بني الصفحات الثالث اليت ِبلذاكرة،
لذلك سنخرجها ونضع 5مكاهنا ،اآلن لدينا ِبلذاكرة الصفحات .5 ،2،1
سنحتاج الصفحة 2وهي موجودة ِبلذاكرة ،وبعدها سنحتاج الصفحة 1وهي ِبلذاكرة ،بعدها سنحتاج الصفحة 6
وهي ليست ِبلذاكرة لذلك سنتبدهلا ِبلصفحة 5ألهنا األقل استخداما .وهكذا إىل أن نصل للحل التايل:
205
تعتمد هذه اخلوارزميات على وجود عدادات حلساب عدد مرات استخدام الصفحات .حيث يكون هنالك
عداد لكل صفحة وكلما استخدمت صفحة يزيد عدادها بواحد .منها:
إبفرتاض أن الصفحات االكثر استخدامها (قيمة عداداها أكرب) هي النشطة وهي اليت ستستخدم كثريا،
فنقوم إبخراج الصفحة اليت هلا أقل رقم يف عدادها ،أي عدد مرات استخدامها أقل من بقية الصفحات.
لكن هذه اخلوارزمية قد يكون هبا مشكلة إذا كانت الصفحة ذات العداد األكرب لن تعمل مرة أخرى ،فتظل
يف الذاكرة دون فائدة منها .وميكن حل مثل هذه املشكلة بنقص عدادها بفرتات منتظمة.
هنا نفرتض أن الصفحات اليت هلا قيمة عداد أقل هي اليت وصلت حديثا وهي اليت حتتاج إىل وقت اكثر يف
الذاكرة ،لذلك سنخرج الصفحة اليت هلا رقم أكرب يف عدادها (اليت استخدمت كثريا).
تعترب هذه اخلوارزمية تعديل خلوارزمية األقدم حتميال أوال ( ،)FIFOالفرق أننا سنخترب الصفحة األقدم فإذا
كانت قد استخدمت حديثا فإننا سنضعها يف هناية الصف ونعتربها وصلت حديثا وخنترب الصفحة اليت تليها ،أما إذا مل
تستخدم حديثا فسنخرجها .أنظر الشكل التايل.
تنبيه:
206
نتعرف على الصفحة هل استخدمت أم ال إبختبار خانة االستخدام اليت توجد يف كل صفحة فإذا كانت
هذه اخلانة حتتوى على صفر ( )clearفهذا يعين أنه مل تستخدم حاليا ،أما إذا كانت حتتوي قيمة ( )setفيعين هذا
أنه مت استخدامها حديثا .عند وجود خانة االستخدام حتتوي قيمة سنقوم تفريغها من القيمة ( )clearitقبل أن
نرجعها إىل هناية الصف.
أشبه يف طريقة عملها خبوارزمية الفرصة الثانية لكنها أكثر كفاءة يف التطبيق .سيتم إختبار الصفحة اليت يشري
إليها مؤشر الساعة هل استخدمت حديثا أم ال ،فإذا استخدمت حديثا تحول مؤشر الساعة ليشري إىل الصفحة اليت
تليها وخنتربها هل استخدمت حديثا أم ال ،فإذا استخدمت ننقل املؤشر للصفحة اليت تليها ،وهكذا حىت نعثري على
صفحة مل تستخدم فنخرجها.
يف الشكل التايل سنخترب الصفحة Cفإذا استخدمت سيتحول املؤشر إىل الصفحة Dوخنتربها هل
استخدمت أم ال ،وهكذا حىت نعثر على صفحة مل تستخدم فنستبدهلا ويتحول املؤشر إىل الصفحة اليت تليها.
ميكنك كتابة برانمج أبي لغة ( C/C++أو جافا) مثال ،حملكاة عمل خوارزميات استبدال الصفحات،
حيث يطلب الربانمج من املستخدم إدخال نوع اخلوارزمية وعدد اإلطارات الفارغة وسلسلة الصفحات فيحسب
خطوات االستبدال وعدد أخطاء الصفحات .مثال:
207
3. LRU
1
Enter number of pages in logical memory:
4
Enter number of frames in physical memory:
2
Enter reference string:
01213132131
Solution:
0: PAGE FAULT -- added at frame 0
1: PAGE FAULT -- added at frame 1
2: PAGE FAULT -- replaces page 0 at frame 0
1: found at frame 1
3: PAGE FAULT -- replaces page 1 at frame 1
1: PAGE FAULT -- replaces page 2 at frame 0
3: found at frame 1
2: PAGE FAULT -- replaces page 3 at frame 1
1: found at frame 0
3: PAGE FAULT -- replaces page 1 at frame 0
1: PAGE FAULT -- replaces page 2 at frame 1
Number of page fault= 8
:) إطارات فارغة8 طبق الربانمج على السلسلة التالية (يف
0 1 2 3 4 8 9 10 11 12 5 6 7 8 2 3 4 8 9 10 11 0 1 2
5 6 5 6 5 6 13 14 15 0 1 2 3 4 8 9 10 11 12 13 14 15
متارين حملولة.3.5
:)page reference string( إذا كان لدينا سلسلة الصفحات التالية.0
ثالث، إطارين،) للخوارزميات التالية إبفرتاض إطار واحدpage faults( أحسب عدد أخطاء الصفحات
: وسبعة إطارات، ستة إطارات، مخسة إطارات، أربع إطارات،إطارات
208
* خوارزمية FIFO
* خوارزمية LRU
احلل
خلوارزمية LRU
20خطأ صفحة
18خطأ صفحة
15خطأ صفحة
10خطأ صفحة
8خطأ صفحة.
7خطأ صفحة.
209
7خطأ صفحة
خلوارزمية :FIFO
20خطأ صفحة.
18خطأ صفحة.
16خطأ صفحة.
14خطأ صفحة.
10خطأ صفحة.
210
10خطأ صفحة.
5خطأ صفحة.
.5تكون الربامج اليت تستخدم الذاكرة االفرتاضية بطيئة نوع ما ،ملاذا ؟
1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
211
oسبعة إطارات فارغة.
ما هي العالقة اليت ميكن استنتاجها بني عدد اإلطارات الفارغة وعدد خطأ الصفحات ؟
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
oخوارزمية FIFO؟
oخوارزمية LRU؟
1, 2, 3, 4, 2, 1, 5, 6, 2, 1, 2, 3, 7, 6, 3, 2, 1, 2, 3, 6
فإن عدد خطأ الصفحات (يف أربعة إطارات) ِبستخدام اخلوارزمية :FIFO
3 o
00 o
04 o
02 o
oال شي مما ذكر صحيح والعدد هو ____________
212
SWAPPING
STORING
1, 2, 3, 4, 2, 1, 5, 6, 2, 1, 2, 3, 7, 6, 3, 2, 1, 2, 3, 6
فإن عدد خطأ الصفحات (يف سبعة إطارات) ِبستخدام اخلوارزمية FIFOهو:
3 o
00 o
04 o
02 o
oال شي مما ذكر صحيح والعدد هو ____________
عند ما حيدث خطأ صفحة فإن أول خطوة يقوم هبا نظام التشغيل هي:
oحتديث اجلداول.
213
الباب العاشر :مدير األجهزة
214
الباب العاشر
.02.0مقدمة
معظم أجهزة اليت ترتبط ِبحلاسب هي بغرض إدخال بياانت لوحدة املعاجلة (اليت تتكون من الذاكرة واملعاجل)
أو إلظهار نتائج من هذه الوحدة .التعامل مع هذه األجهزة مباشرة يعترب عملية معقدة وصعبة وتتطلب إملام بتفاصيل
عمل اجلهاز وكيف يتم برجمته (بلغة اآللة) لينفذ عمل ما .احلمد هلل على نعمة نظام التشغيل ،فقد أغناان عن معرفة
هذه التفاصيل الدقيقة وتعلم لغة اآللة وبرجمة كل جهاز على حدة .فقد قام هو بذلك نيابة عنا وتوىل التعامل مع هذه
التفاصيل .فهنالك جزء بنظام التشغيل يسمى مدير األجهزة قد صمم من أجل التحكم يف األجهزة وإدارهتا .فهو يرسل
األوامر لألجهزة ،يتلقى معلومات منها ،يكتشف أخطاءها ويعاجلها.
خيفي نظام التشغيل تفاصيل أجهزة الدخل واخلرج ويوفر واجهة موحدة للتعامل معها ،يتم ذلك عرب برجميات
تسمى برجميات الدخل واخلرج .
نالحظ أننا اآلن نتحدث عن مقاسات ِبلثواين ،بينما كان حديثا يف املعاجل والذاكرة عن
مقاسات ِبلنانواثنية.
نظام التشغيل مسئول من التعامل مع العديد من األجهزة الطرفية ( )peripheral devicesمنها األقراص وفيها
لوحة املفاتيح ،املاوس ،الشاشة ،الطابعات ،كرت الشبكة ،املودم ،موانئ الدخل واخلرج.
ميكن أن نطلق كلمة جهاز ( )deviceعلى أي قطعة إلكرتونية أو إلكرتوميكانيكية من املكوانت املادية
تساهم يف إدخال أو إخراج معلومة للحاسب.
215
أجهزة تعمل بنظام احلروف (.)character
النوع األول يرسل املعلومات يف شكل كتل ذات حجم اثبت ولكل كتلة عنوان ،مثال هلذا النوع القرص الصلب.
النوع اآلخر يرسل املعلومات يف شكل سلسلة من احلروف ،ليس هلا عنوان وال جنري عليها عمليات حبث ،مثل
الطابعة ،كرت الشبكة ،ولوحة املفاتيح.
هنالك بعض األجهزة ال تنتمي إىل أي نوع من النوعني أعاله مثل الساعة ،اليت فقط تقوم إبنشاء املقاطعات
(.)interrupts
يقوم مدير األجهزة بنظام التشغيل ِبلتعامل مع هذه األجهزة خمفياً عنا تفاصيلها املزعجة وموفرا لنا طريقة سهلة
للتعامل معها.
بعض نظم التشغيل مثل ينكس تقوم إبضافة برامج خاصة إلدارة والتعامل مع هذه األجهزة يسمى سواقات
األجهزة ( )device driversأو كما نطلق عليها تحن التعريفات .فمثال عندما تشرتي كرت مودم أو طابعة مثال
فإنك جتد برانمج تعريف مرفق مع اجلهاز ،هذا الربانمج يثبت على نظام التشغيل ليتمكن األخري من تشغيله والتعامل
معه.
التعريف ( )device driverهو برانمج يتم كتابته للجهاز اجلديد ()new device
بواسطة الشركة املصنعة للجهاز ،مث يضاف إىل نظام التشغيل حبيث يستخدم نظام التشغيل
هذا التعريف للتعامل مع اجلهاز اجلديد.
.02.5املتحكم ()controller
يتكون كل جهاز من شقني:
.0اجلهاز نفسه.
تحن وبراجمنا نتعامل مع نظام التشغيل حيث نطلب منه ما نريد ،فيقوم هو بدوره ِبلتعامل مع املتحكم (بوضع
قيم معينة يف مسجالت حتكم معينة) ،فيقوم املتحكم ِبالتصال ِبجلهاز ،فينفذ اجلهاز العمل املطلوب.
القيم اليت يضعها مدير األجهزة يف مسجالت التحكم ترسل أوامره للجهاز واليت قد تكون:
ِبإلضافة إىل هذه املسجالت ،يوجد لدى بعض األجهزة خازن بياانت ( ،)bufferيستخدمه مدير األجهزة
للقراءة أو الكتابة من اجلهاز.
مثال ()0-02
يوجد خازن يف كرت الشاشة يسمى ذاكرة الفيديو ( ،)video ramلعرض أي معلومات على الشاشة،
يقوم مدير األجهزة بكتابة ما يريد عرضه يف هذه الذاكرة ،ويضع يف مسجالت التحكم أمر إظهار حمتوي ذاكرة الفيديو
على الشاشة.
يف احلواسيب القدمية واليت ال يوجد هبا DMAيكون املعاجل يف حالة متابعة لعمليات الدخل
واخلرج ،حيث يتابع عملية نقل البياانت من اجلهاز إىل الذاكرة .يف هذه األثناء لن يستطيع املعاجل
تنفيذ أي أوامر أخرى مما يقلل أداءه .فعمليات الدخل واخلرج أتخذ الكثري من زمن املعاجل.
217
يعمل DMAكمدير تنفيذي للمعاجل ،حيث يقوم بعمليات الدخل واخلرج نيابة عن املعاجل .فإذا أراد املعاجل
معلومات من جهاز يقوم ِبآليت:
يهيئ DMAلعمليات نقل البياانت (حجم البياانت املراد نقلها ،اجلهاز املنقولة منه البياانت ،املكان الذي
سيتم ختزينها فيه ِبلذاكرة (عنوان الذاكرة)).
عند ما يفرغ DMAمن عمله يرسل إشارة مقاطعة ( )interruptللمعاجل خيربه فيها أبن عملية نقل
البياانت قد متت.
ميكنك تعطيل أو تفعيل DMAجبهازك وذلك بفتح مدير األجهزة ( ،)device managerمث النقر
على IDE ATA/ATAPI controllersلتتوسع فتظهر إيقوانت فرعية هي لألقراص الصلبة وسواقات
االسطواانت .أنقر على أي إيقونة أمامها كلمة channelبيمني املاوس مث اختار خصائص (،)properties
فتظهر شاشة ،أختار منها التبويب ،Advanced settingsمث أختار من أمام Transfer Modeللجهاز
الذي تريد ،حالة منط النقل ،الشكل ( .)-5-02تفعيل DMAجيعل القرص الصلب واالسطواانت الضوئية من
نقل البياانت للذاكرة مباشرة (دون مرورها ِبملعاجل) ،مما يقلل اجلهد على املعاجل.
218
شكل رقم ( :)5-02تفعيل DMAأو تعطيلها.
من املعلوم أن األجهزة تعترب بطيئة إذا ما قورنت بسرعة املعاجل وسرعة الذاكرة .وِبلتايل فإن كفاءة احلاسب
ككل وسرعته مرتبطة بسرعة أبطأ جهاز فيه ،فمثال قد ينقل القرص البياانت بسرعة 0ميغاِبيت يف الثانية بينما تنقلها
لوحة املفاتيح بسرعة ِ 5بيت يف الثانية .مهمة مدير األجهزة هنا أن حيسن الكفاءة وذلك بتقليل زمن انتظار املعاجل
ألجهزة الدخل واخلرج بقدر املستطاع .اخلازن املوجود ِبملتحكم وجهاز DMAمت إضافتهم للمسامهة يف هذا
التحسني.
.02.3.0استقاللية األجهزة
جيب على الربامج أن تعمل ِبستقاللية عن األجهزة اليت تتعامل معها ،فال جيدر يب أن أعرف نوع الطابعة
مثال أو الشركة املصنعة هلا ألتعامل معها .وإذا مت تغري الطابعة بطابعة أخرى فعلى الربامج أن ال تغري من شفراهتا وأن
تعمل بنفس الطريقة السابقة .ولكي نصل هلذا اهلدف البد لعمل واجهة برجمية لألجهزة يتعامل معها املستخدم وبراجمه
ت كون بعيدة كل البعد عن األجهزة ويقوم نظام التشغيل ِبلتعامل مع األجهزة احلقيقية بينما متثل الواجهة اليت يتعامل
معها املستخدم أجهزة افرتاضية تستقبل طلباتنا ومتررها لنظام التشغيل.
.02.3.5املشاركة
219
الكثري من األجهزة تحتاج أن تكون مشرتكة بني املستخدمني والربامج ،فعلى نظام التشغيل أن يوفر هذه
األجهزة بني املستخدمني بصورة عادلة ،حبيث ال حيتكر أحد الربامج اجلهاز املشرتك دون بقية الربامج.
.02.3.4احلماية
كل األجهزة جيب محايتها من االستخدام غري الرشيد ،فاألجهزة املخصصة جيب محايتها من استخدامها
أبكثر من عملية يف نفس الوقت مثال.
.02.3.3معاجلة األخطاء
إذا حدث خطأ يف جهاز ،كأن تحاول الكتابة على جهاز دخل أو القراءة من جهاز خرج ،فعلى مدير
األجهزة اكتشاف اخلطأ ومعاجلته إذا كان ِبإلمكان ذلك أو إرسال تقرير للربانمج الذي سبب اخلطأ.
إستقاللية االجهزة ( ،)device independenceكتابة برامج تتعامل مع األجهزة دون معرفة تفاصيل
األجهزة مسبقا .مثال ميكن استدعاء نفس نداء النظام لقراءة ملف من القرص الصلب أو القرص املرن أو
األسطوانة الضوئية.
توحيد التسمية ( :)uniform namingاسم امللف أو اجلهاز ال يعتمد على خصائص القرص .مثال يف
ينكس كل شئ يتعرب ملف.
معاجلة األخطاء ( :)error handlingمعاجلة األخطاء يف أدىن مستوى هلا .مثال إذا مت إكتشاف اخلطأ
فيحاول املتحكم معاجلة اخلطأ ،وإال فعلى التعريف ( )device driverحماولة تصحيح اخلطأ ،وميرر اخلطأ
للطبقات األعلى إذا فشل التعريف يف معاجل اخلطأ.
220
التخزين املؤقت ( :)bufferingالبياانت اليت ترد من اجلهاز ال ختزن يف وجهتها النهائية يف البداية وإمنا
جيب فحصها قبل إرساهلا إىل وجهتها النهائية ،لذلك ختزن مؤقتا يف خازن قد يوجد يف متحكم اجلهاز.
هنا مثال إذا أردان طباعة احلروف OSMANيف الطابعة ،تقوم العملية ِبلتايل:
221
اختبار الطابعة مرة أخرى وإرسال احلرف الثاين وهكذا.
هنا سيكون املعاجل متابعا إلرسال جيمع احلروف وينتظر طباعتها واحد تلو اآلخرن مما جيعله مشغوال حىت يتم
طباعة السلسلة.
خالصة القول أنه لن يستطيع املعاجل القيام بعمل آخر قبل أن ينتهي من هذا العمل.
يف الطريقة أعاله ينتظر املعاجل الطابعة حىت تفرغ من طباعة احلرف األول مث ترسل له احلرف الثاين وهكذا.
أما هنا فيقوم املعاجل إبرسال احلرف األول املراد طباعته إىل الطابعة مث القيام أبي عمل آخر ،وعندما تنتهي الطابعة منه
طباعتها ترسل مقاطعة للمعاجل لريسل احلرف التايل وهكذا لن يضطر املعاجل إلنتظار الطابعة وإمنا هي ختربه مىت ما
كانت جاهزة.
يف الدخل واخلرج ِبملقاطعات فإن املقاطعة حتدث عند إكتمال طباعة كل حرف ،وهذا يتسبب يف هدر زمن
املعاجل .عدد املقاطعات ستكون بعدد احلروف املراد طباعتها .استخدام DMAيعين أن متحكم DMAيتابع
طباعة ا حلروف يف الطابعة واحد تلو اآلخر دون إزعاج املعاجل وهذا يقلل عدد املقاطعات من مقاطعة لكل حرف إىل
مقاطعة واحدة عند طباعة كل احلروف.
222
.02.8.0معاجلة املقاطعات
من األفضل إخفاء املقاطعات ،وأفضل طريقة لذلك هي جعل برانمج التعريف ( )driverالذي طلب
عملية الدخل أو اخلرج التوقف ريثما ينتهي الدخل أو اخلرج وحدوث املقاطعة .بعدها يقوم إجراء املقاطعة مبهمته ،مث
يواصل برانمج التعريف.
عادة تكتب الشركة املصنعة للجهاز التعريفات اخلاصة هبذا اجلهاز .وعند شرائك ألي جهاز جتد أسطوانة
تعريف مرفقة معه .نقوم عادة بتثبيت التعريف يف نظام التشغيل مما جيعله جزءا من نظام التشغيل .وِبلتايل يستطيع نظام
التشغيل من التعامل مع اجلهاز .تعمل هذه التعريفات إلدارة اجلهاز عرب متحكم اجلهاز .ويتعامل نظام التشغيل مع
اجلهاز عرب تعريف اجلهاز ،الشكل (.)3-02
oالواجهة مع التعريفات.
oاإلعالن عن األخطاء.
223
oحجز وحترير األجهزة املخصصة.
على نظام التشغيل توفري واجهة متكن التعريفات من اإلندماج مع نظام التشغيل ومتكن نظام التشغيل من
استخدام التعريف ،وعلى مصممي التعريفات معرفة كيف يكتبوا تعريفاهتم حبيث تشبك مع نظام التشغيل عرب هذه
الواجهة.
شكل رقم ( )b( :)2-02الواجهة املوحدة لربط التعريفات مع نظام التشغيل [.]03
من األفضل أن تكون الواجهة موحدة لكل األجهزة ،فطريقة ربط تعريف الطابعة تكون شبيهة بطريقة تعريف
سواقة القرص ،تشبه طريقة تعريف املودم ،تشبه طريقة تعريف األجهزة األخرى ،أنظر الشكل (.)2-02
.02.8.5.0اخلازن املؤقت
األجهزة بنوعيها احلرفية والكتلية حتتاج خازن مؤقت ،حيث توضع فيه البياانت الواردة من اجلهاز (يف حالة
جهاز دخل)ن أو الداخلة للجهاز (إذا كان جهاز خرج) ومن مث إرساهلا للجهة اليت تطلبها .وجود اخلازن حيسن األداء
حبيث جيعل التعامل مع االجهزة أسرع.
قد يكون هنالك خازن واحد يف مساحة املستخدم أو خازن واحد يف مساحة النواة أو خازنني واحد يف
مساحة املستخدم وآخر يف مساحة النواة .واألخري هو األفضل.
.02.8.5.5اإلعالن عن األخطاء
224
إذا حدث خطأ يف جهاز ،كأن تحاول الكتابة على جهاز دخل أو القراءة من جهاز خرج ،فعلى نظام
التشغيل إرسال تقرير ِبخلطأ للعملية أو للمستخدم والسماح للمستخدم إبختيار ماذا يريد ،هل يريد إعادة احملاولة أو
جتاهل اخلطأ أو إلغاء العملية (قتلها).
بعض األخطاء اجلسيمة جتعل نظام التشغيل إرسال تقرير ِبخلطأ مث التوقف إجبارَي.
هنا تقوم عملية واحدة فقط ِبستخدام اجلهاز لذلك على نظام التشغيل حجزه يف حالة ان مستخدم وحتريره
عندما تفرغ العملية منه لتتمكن عمليات أخرى من استخدامه.
قد ختتلف احجام الكتل بني األجهزة ،مثال قد تكون هنالك أحجام قطاعات خمتلفة بني األقراص املختلفة.
هنا على نظام التشغيل إخفاء اإلختالف وتقدمي حجم كتلة موحد.
معظم برجميات الدخل واخلرج موجودة ضمن نظام التشغيل ،وتوجد مكتبات تسمح للمستخدم التعامل مع
هذه الربجميات .فيستطيع املستخدم استدعاء نداء النظام املناسب من املكتبة للتعامل مع اجلهاز الذي يريد.
.02.3القرص الصلب
سندرس القرص الصلب دراسة مستفيضة كدراسة حالة ألجهزة الدخل واخلرج ،ذلك النه من أهم أجهزة الدخل
واخلرج وال خيلو جهاز حاسب منه ،وهو ِبإلضافة على ذلك يعترب جهاز دخل وخرج يف نفس الوقت.
شق املتحكم وهو كرت يوجد ِبللوحة األم غالبا ويتصل بشريط (انقل بياانت) مع القرص الصلب.
شق اجلهاز وهو القرص الصلب ،الشكل ( ،)5-02وهو يتكون من جزء ميكانيكي وجزء إلكرتوين.
225
يتكون من أسطواانت مركبة على حمور مشرتك ،وكل اسطوانة مكونة من سطحني ،لكل سطح رأس قراءة
وكتابة ،ترتبط رؤؤس القراءة والكتابة مجيعها بذراع واحد حبيث عندما يتحرك الذراع حيرك معه كل الرؤؤس ،وحركة
الذراع تكون أفقية مما جيعل رؤؤس القراءة والكتابة متر عرب مسارات األسطح مع بعضها وتصل لنفس املسارات يف كل
األسطح يف نفس الوقت ،شكل (.)8-02
لقراءة أو كتابة معلومة يتحرك الذارع الذي ترتبط به رؤؤس القراءة والكتابة ليصل املسار املطلوب ،هذه
العملية تستغرق من 3إىل 02ملي اثنية.
226
شكل رقم ( :)8-02أجزاء القرص الصلب الداخلية.
مث تنتظر رؤؤس القراءة والكتابة دوران األسطواانت حىت تكون القواطع املطلوبة حتت رؤؤس القراءة والكتابة،
وتستغرق عملية الدوران هذه أيضا مدة ترتاوح بني 3و 02ميلي اثنية.
مث تبدأ رؤؤس القراءة والكتابة بنقل البياانت يف شكل كتل إىل ذاكرة املتحكم املرتبط ِبلقرص ،حيث يتم
ذلك بسرعة ترتاوح بني 3إىل 502ميغاِبيت يف الثانية.
.02.3.5األجزاء اإللكرتونية
عبارة عن لوح إلكرتوين مهمته حتويل اإلشارات الكهرِبئية (البياانت) إىل مناطق ممغنطة على القرص ،مث
استعادهتا مىت ما طلب منه ذلك .كذلك يتحكم اجلزء االلكرتوين ِبلتحكم يف دوران احملور (األقراص) وحركة الذراع
املثبت فيه رؤوس القراءة والكتابة.
شكل رقم ( :)3-02تقسم االسطوانة إىل مسارات وكل مسار إىل قطاعات.
227
.02.3.4املسار ( )tracksوالقطاع ()sector
يتم تقسيم كل أسطوانة إىل مسارات دائرية وكل مسار يقسم إىل أجزاء صغرية متساوية يف احلجم تسمى
القطاعات ،طول القطاع الواحد حوايل ِ 300بيت وهو أصغر وحدة قياس للتعامل مع القرص الصلب ،الشكل رقم
(.)3-02
.02.3.3االسطوانة (السلندر)
إن رؤوس القراءة والكتابة مثبتة يف حمور مشرتك وحمرك واحد وِبلتايل ستكون حركتها موحدة ،فإذا كان واحد
من الرؤوس على املسار اخلارجي األخري من قرص ما فإن الرؤوس األخرى مجيعها ستكون على املسار املشابه يف
االقراص األخرى .لذلك املسارات املتشاهبة على كل األسطح تكون أسطوانة .فمثالً يف الشكل ( )02-02تكون
املسارات الثمانية اخلارجية أسطوانة .لذلك من األفضل ختزين البياانت يف شكل اسطواانت ذلك ألن رؤؤس القراءة
والكتابة تكون معا يف مكان واحد وهذا يوفر وقت فال تحتاج أن تحرك رؤؤس القراءة والكتابة كذا مرة.
مثال ()0-02
إذا كان لدينا مخسة أقراص واملسارات يف كل سطح مرقمة من صفر إىل 202فإن :
228
مثال ()0-02
احلل
.02.02جدولة القرص
هنا يريد نظام التشغيل الوصول السريع للبياانت يف القرص الصلب لتحقيق الكفاءة املطلوبة .وعملية الوصول
للبياانت يف القرص الصلب تعتمد على عوامل كثرية مثل الزمن املستغرق لقراءة أو كتابة كتلة يف القرص الصلب ،وهذا
أيضا يعتمد على ثالث عوامل هي:
229
زمن دوران االسطوانة لتصل الكتلة حتت رؤؤس القراءة والكتابة (.)rotational latency
عندما يريد برانمج التعامل مع القرص الصلب ،سريسل طلبه لنظام التشغيل ،حيث حيتوي الطلب على نوع العمل
(قراءة ام كتابة) وعنوان املعلومة ِبلقرص وإىل أين نريد نقلها أو ختزينها .إذا كان املتحكم والقرص الصلب متاحني
فسيتم تنفيذ الطلب على الفور ،أما إذا كاان أحدمها أو كالمها مشغولني ،فسيتم وضع الطلب يف صف انتظار الطلبات
املوجه للقرص ( .)requests pending queueوعندما ينتهي القرص من اجناز هذا الطلب ،يستطيع نظام
التشغيل اختيار طلب آخر من صف االنتظار (إذا كان هنالك طلبات للتعامل مع القرص يف اإلنتظار).
طريقة اختيار الطلب التايل من صف الطلبات يعتمد على اخلوارزمية اليت يستخدمها نظام التشغيل .من
اخلوارزميات املستخدمة ما يلي:
خوارزمية LOOK
خوارزمية C-LOOK
وأفضل طريقة لتوضيح طريقة عمل هذه اخلوارزميات هو عرب املثال التايل.
مثال ()5-02
إذا كان لدى صف من الطلبات (مرتبة حسب زمن وصوهلا)ن تريد التعامل مع بياانت ِبالسطواانت التالية
ِبلقرص الصلب:
230
وإذا كان رأس القراءة والكتابة اآلن يف األسطوانة رقم .53وضح كيف سيقوم نظام التشغيل خبدمة هذه
الطلبات جبميع أنواع اخلوارزميات أعاله.
احلل
يف خوارزمية FCFSسيتحرك رأس القراءة والكتابة لتلبية الطلبات (األقدم أوال) حسب الرتتيب التايل
(نفس الرتتيب املوجود يف املسألة):
يف خوارزمية SSTFسيتحرك رأس القراءة والكتابة لتلبية الطلبات حسب قرهبا من رأس القراءة والكتابة
(األقرب أوال) ،حيث نقيس املسافة بني مكان رأس القراءة والكتابة وبني الطلبات ،فنخدم الطلب الذي يعطي مسافة
أقل .فيكون ترتيب خدمة الطلبات كما يلي:
يف خوارزمية SCANسيتحرك رأس القراءة والكتابة لتلبية الطلبات بدأ من مكان رأس القراءة والكتابة
(متجها تحو البداية) ،فيخدم كل اسطوانة مير هبا ،مث يعكس وجهته عندما يصل الصفر ليخدم كل اسطوانة مير هبا إىل
231
أن يصل النهاية (يعمل بطريقة املصعد ،لذلك أحياان يطلق عليه خوارزمية املصعد) ،وِبلتايل فإن ترتيب خدمة الطلبات
النهائي سيكون كالتايل:
53, 37, 14, 0, 65, 67, 98, 122, 124, 183, 199
يف خوارزمية LOOKسيتحرك رأس القراءة والكتابة لتلبية الطلبات بدأ من مكان رأس القراءة والكتابة
(متجها تحو البداية) ،فيخدم كل اسطوانة مير هبا إىل أن يصل أخر طلب قبل موجود يف طريقه إىل البداية (ليس
ِبالضرورة أن يصل الصفر) ،مث يعكس وجهته ليخدم كل الطلبات اليت تقابله يف طريق الرجعة إىل آخر طلب طلب
موجود (ليس ِبلضرورة أن يصل النهاية) .خدمة الطلبات ستكون كالتايل:
يف خوارزمية C-SCANسيتحرك رأس القراءة والكتابة لتلبية الطلبات بدأ من مكان رأس القراءة والكتابة
(متجها تحو النهاية) ،فيخدم كل اسطوانة مير هبا ،عندما يصل إىل هناية القرص يعكس إجتاهه راجعا ليبدأ من البداية
(دون أن خيدم أي طلب يف رجعته للبداية) ،ليبدأ من الصفر وخيدم كل ما مير به إىل أن يصل هناية القرص .يشبه
املصعد الذي حيمل الصاعدين فقط مث يرجع فارغ وحيمل الصاعدين مرة أخرى وهكذا (مصعد اجتاه واحد) .وهكذا.
ترتيب خدمة الطلبات النهائي سيكون كالتايل:
232
شكل رقم .]3[ 04-02
يف خوارزمية C-LOOKهي مطورة من ،C-SCANفهنا يتحرك رأس القراءة والكتابة لتلبية
الطلبات بدأ من مكان رأس القراءة والكتابة (متجها تحو النهاية) ،فيخدم كل اسطوانة مير هبا إىل أن يصل آخر طلب
(قد يكون قبل هناية القرص) مث يرجع ليبدأ من البداية (دون أن يليب أي طلب يف رجعته للبداية) ،ليبدأ من أول طلب
موجود (ليس ِبلضرورة أن يصل إىل بداية القرص ) ،ويستمر مرة اثنية إىل أخر طلب ِبلقرص .ترتيب خدمة الطلبات
النهائي سيكون كالتايل:
233
req(1) = 1470
req(2) = 913
req(3) = 1774
req(4) = 948
req(5) = 1509
req(6) = 1022
req(7) = 1750
req(8) = 130
distance = 0
Current_Track = 143
For i = 0 To 8
distance = distance + Math.Abs(Current_Track - req(i))
Current_Track = req(i)
Next
Console.WriteLine("Distance using FCFS = " & distance)
Console.Read()
ومكان رأس القراءة والكتابة احلايل يف املتغريreq يف الربانمج أعاله وضعنا الطلبات يف املصفوفة
فيما.distance حلساب الفروقات بني الطلبات ووضعها يف املتغريfor واستخدمنا تكرار،Current_Track
.يلي شكل خمرج الربانمج
234
.02.00متارين حملولة
.0إذا كان لدينا قرص به 5000أسطوانة مرقمة من 0إىل .4999حاليا يتم خدمة األسطوانة رقم ،143والطلب
السابق الذي مت خدمته كان يف األسطوانة .125صف الطلبات اليت نريد خدمتها حسب ترتيب وصوهلا هو:
بداية من موقع رأس القراءة والكتابة احلايل ( ،)143ماهي املسافة اليت يقطعها ذراع القرص يف حركته خلدمة هذه
الطلباتِ ،بستخدام كل من اخلوارزميات التالية:
FCFS
SSTF
SCAN
LOOK
C-SCAN
C-LOOK
احلل
143, 86, 1470, 913, 1774, 948, 1509, 1022, 1750, 130
143, 130, 86, 913, 948, 1022, 1470, 1509, 1750, 1774
143, 913, 948, 1022, 1470, 1509, 1750, 1774, 4999, 130, 86
235
143, 913, 948, 1022, 1470, 1509, 1750, 1774, 130, 86
143, 913, 948, 1022, 1470, 1509, 1750, 1774, 4999, 0, 86, 130
143, 913, 948, 1022, 1470, 1509, 1750, 1774, 86, 130
.0كيف تزيد DMAمن كفاءة املعاجل ؟ ذلك ألهنا جتعل املعاجل حرا من اإلرتباط مبتابعة عمليات الدخل واخلرج
ويستطيع القيام أبعمال أخرى.
أحسب املسافة اليت يقطعها ذراع القرص يف حركته خلدمة هذه الطلباتِ ،بستخدام كل من اخلوارزميات التالية:
FCFS
SSTF
SCAN
LOOK
C-SCAN
C-LOOK
احلل
236
(ب) ِبستخدام :SSTFاملسافة املقطوعة 273 :
237
(و) خوارزمية :C-LOOKجمموع املسافة296 :
.0هنالك نوع من األجهزة أحدمها يتعامل بطريقة الكتل والثاين يتعامل بطريقة __________؟
238
الباب احلادي عشر :مدير امللفات
239
الباب احلادي عشر
يعتين مدير الذاكرة ِبلبياانت واملعلومات أثناء وجودها ِبلذاكرة الرئيسية ويسمى هذا النوع من التخزين،
التخزين قصري املدى ( ،)short-term storageولكننا غالبا سنحتاج حلفظ معظم املعلومات لفرتة طويلة أو ما
يسمى ِبلتخزين طويل املدى ( .)long-term storageالتخزين طويل املدى يكون يف ذاكرة اثنوية حتتفظ
مبحتوَيهتا ألَيم وليايل ،هذه األجهزة (مثل القرص الصلب والقرص املرن واألقراص الضوئية والفالش) يتعامل معها نظام
التشغيل بطريقة موحدة هي امللف ( .)fileيقوم مدير امللفات كجزء من نظام التشغيل بعمليات ختزين واسرتجاع
امللفات يف هذه األجهزة (أجهزة التخزين الدائم).
بدون مدير امللفات ستكون بياانتنا أبنواعها سواء كانت نصوصا أو براجما أو أصواات ،خمزنة يف شكل أصفار
وآحاد (أرقام ثنائية) ،ولن نستطيع التمييز بينها فهي خمزنة يف مكان واحد دون حدود واضحة بينها ،فلن نعرف أين
بداية امللف وال هنايته ،ولن نعرف نوعه وال طرق محايته.
يقوم مدير امللفات بكل تفاصيل التخزين الدقيقة نيابة عنا ،فهو يعرف نوع امللفات ومكاهنا ِبلقرص وكيف
خيزهنا وكيف يسرتجعها ،وكيف حيذفها وما إىل ذلك (التعامل احلقيقي مع امللفات) .بينما يوفر للمستخدم واجهة
منطقية متكنه من التعامل مع امللفات بصورة ميسرة ،فهو يعرف نوع امللف من خالل ايقونة وحيفظ امللف ِبسم واضح
ومفهوم ،وحيذف ويعدل وينشئ امللفات دون أن يعرف أين مت ختزينها ويف أي مقاطع أو مسارات وضعت.
240
.00.0تعريف امللف
امللف هو جمموعة من املعلومات ذات عالقة وبنية منطقية ،فالوثيقة مثال تتألف من كلمات وسطور وفقرات
وصفحات (بنية منطقية) وحتتوي على موضوع واحد (معلومات ذات عالقة).
امللفات قد تكون حرة البنية (غري مهيكلة) مثل ملفات النصوص ،حيث يتكون امللف من ِبيتات وحروف
وسطور ،وقد تكون مهيكلة مثل ملفات قواعد البياانت اليت تتكون من حقول وسجالت.
يدعم نظام التشغيل ينكس امللفات غري مهيكلة واليت تكون عبارة عن سلسلة من البايتات واحلروف.
االسم (.)name
النوع (.)type
املوقع (.)location
احلجم (.)size
كلمة املرور.
املنشئ (.)creator
املالك (.)owner
الزمن والتاريخ واملستخدم ( )time , data , and user identificationمثالً (زمن واتريخ
اإلنشاء ،زمن واتريخ آخر تعديل).
241
إنشاء امللف (.)create a file
فتح ملف.
الكتابة يف ملف.
حذف ملف.
.00.3أنواع امللفات
نوع امللفات االمتداد املهمة
تنفيذي ()executable Exe ,com , bin جاهز للتنفيذ
Object Obj , o مت ترمجته لكن حيتاج ربطه مع مكتبات أخرى حىت
يصبح تنفيذي
مصدري ()source ….java, .c, .cs, برمناج مكتوب بلغة برجمة معينة لكن مل يتم ترمجته بعد
حزمة ()Batch Bat , sh جمموعة من أوامر نظام التشغيل جتمع يف ملف (مثل
)dir, cls
Text Txt , doc واثئق نصية كاليت تكتب على وورد واملفكرة.
أرشيف ()Archive Are ,zip , tar جمموعة من مللفات يتم ضغتها يف ملف واحد
242
وصول مباشر ( .)direct access
لتنظيم امللفات ووضع املتشابه منها يف صورة منظم نستخدم ما يسمى ِبلدليل أو اجمللد ،حيث كل جملد
حيتوي على جمموعة من امللفات .العمليات اليت جترى على اجمللدات كثرية وتشبه تلك اليت جترى على امللفات ،بل يعترب
اجمللد حبد ذاته ملف.
أبسط نوع وفيه تكون كل امللفات حمفوظة يف مكان (جملد) واحد ،لذلك ال ميكن تسمية ملفني ِبسم واحد،
الشكل (.)0-00
كل مستخدم لديه دليل خاص به ،وِبلتايل كل مستخدم ميكنه استخدام أمساء حىت ولو كانت مستخدمة
عند اآلخرين (ميكن تكرار اسم امللف لكن كل اسم يف دليل خمتلف.
243
شكل رقم ( :)0-00مستوى الدليلني.
يف الدليل الثنائي يستطيع كل مستخدم تسمية ملفاته كما يريد حىت ولو كانت موجودة أمساء مثلها عند
املستخدمني اآلخرين ،ولكن ماذا لو أراد تسمية ملفني ِبسم واحد أو جتميع كل ملفات ذات صلة يف دليل لوحدها،
أكيد لن يستطيع فعل ذلك يف الدليل الثنائي ،لذلك جاء الدليل الشجري حلل مثل هذه املشاكل ،فكل مستخدم له
مطبق احلرية يف بناء ما يرد من جملدات وألي درجة من املستوَيت وِبلتايل يستطيع تنظيم جملدات وملفات بطريق
خمتلفة وهبرمية خمتلفة كما يردي ووقت ما يشاء .وهذا هو النظام املتبع حاليا يف معظم نظم التشغيل احلديثة.
244
.00.8احلماية
عند حفظ املعلومات يف احلاسب عليك العمل على محايتها خاصة إذا كانت هامة وسرية .ولكن ممن أمحيها ؟
من:
.00.8.0النسخ االحتياطي
أحد حلول احلماية من األعطال هو عمل نسخ احتياطي دوري للمعلومات اهلامة .مثال يف النظام البنكي
ستكون بياانت العمالء وأرصدهتم والعمليات اليت قاموا هبا من سحب و إيداع ،هامة جدا والبد من عمل نسخ
احتياطي هلا بصورة دورية .قد يتم النسخ بواسطة فين أو بواسطة برامج صمم ليقوم بذلك تلقائيا.
توفر بعض نظم التشغيل خدمات النسخ االحتياطي جلزء من القرص أو القرص كامال ،مثال ويندوز توفر
برانمج يقوم بعملية النسخ واالسرتجاع يسمى Backupيوجد يف accessoriesداخل القائمة System
،toolsشكل رقم ( .)4-00حيث يستخدم هذا الربانمج لتخرين امللفات املوجودة يف القرص إىل وحدة ختزين
أخري .وميكن اسرتجاع النسخة االحتياطية إىل القرص مرة أخرى بنفس الربانمج (.)restores
عملية النسخ االحتياطي تضمن على األقل سالمة البياانت إذا تعطل القرص الصلب الذي حيويها ،فنستطيع
مثال استبدال القرص املعطوب آبخر جديد واسرتجاع بياانتك من مكان النسخ االحتياطي.
245
.5.8.0أذوانت الوصول
احلماية من التطفل تتم بطرق شىت منها أذوانت الوصول .حيث يوفر نظام التشغيل محاية ضد أنواع الوصول
من قراءة ،كتابة ،تنفيذ ...،اخل .تتم احلماية عادة بواسطة أذوانت الوصول ( )access permissionsاليت متنع أو
تسمح للمستخدمني من الوصول إىل امللفات احملمية.
قوائم الوصول حتدد أنواع املستخدمني الذين ميكن منحهم أو منعهم الوصول إىل امللفات ،مثل:
املالك .Owner
الكل .Universe
إذ أن أذوانت الوصول حتدد نوع الوصول إىل امللفات وقوائم الوصول حتدد من سيصل.
إذا أردت عمل مشاركة جمللد يف ويندوز XPستظهر انفذة هبا تبويب يسمى Securityحيتوي على
قوائم وصول ( )group or user nameوأذوانت وصول لكل نوع من أنواع قوائم الوصول(،)permissions
مثال إذا نقرت على Administratorيف قوائم الوصول سيظهر يف انفذة أذوانت الوصول ،األذوانت اليت ميكن
منحها للمشرف ( )permissions for Administratorsمثل التحكم الكامل ( )full controlأو القراءة
والتنفيذ ( ،)Read & Executeوما إىل ذلك من أذوانت تظهر يف الشكل (.)3-00
246
شكل رقم ( :)3-00أذوانت الوصول يف ويندوز .XP
كل شيء يف ينكس ولينكس يعترب ملف .وكل ملف لديه أذوانت تسمح أو متنع الوصول إليه .هنالك
ثالث أنواع من الوصول للملف هي القراءة ( rأو ،)4الكتابة ( wأو ،)0والتنفيذ ( Eأو .)0وهنالك ثالث أنواع
من املستخدمني هم:
-rwx------املالك ()owner
----rwx---جمموعة ما ()group
-------rwxأخرى ()other
ls -l /etc/hosts
أي أن املالك لديه صالحيات القراءة والكتابة ،اجملموعة لديها صالحية القراءة فقط ،اآلخرين لديهم صالحية القراءة
فقط.
نستطيع تغيري نوع احلماية ِبستخدام األمر chmodواليت تكون صيغته كالتايل:
Options Definition
u Owner
g Group
o Other
x Execute
w Write
r Read
.
248
شكل رقم ( :)2-00حروف احلماية.
.00.3طرق التخزين
مرونة الوصول املباشر تسمح لنا بتخزين معلوماتنا يف أي مكان ِبلقرص ،ولكن املشكلة اليت تظهر هنا هي
كيف تحجز مكان يف القرص لتخزين هذه املعلومات؟ هنالك طرق خمتلفة حلجز وختزين ملفاتنا يف القرص ،يسعى مدير
امللفات هنا أن خيزن ويسرتجع البياانت بكفاءة عالية تقلل الزمن املستغرق يف ذلك.
.00.3.0جدول احلجز
يستخدم مدير امللفات جدول كقاعدة بياانت ختزن فيها معلومات امللفات اليت توضح مكان امللف ِبلقرص،
مثل اسم امللف ومكان امللف ِبلقرص .عندما يطلب مستخدم ما ،من نظام التشغيل فتح ملف معني ،سيبحث مدير
امللفات عن اسم امللف يف جدول احلجز مث يستخدم املعلومات املوجودة ِبجلدول السرتجاع امللف.
إذا فقد مدير امللفات جدول احلجز لن يستطيع معرفة أماكن امللفات وال أمساءها ويصبح اسرتجاعها مشكلة كبرية.
مثال جلدول احلجز ،جدول حجز امللفات () )File Allocation Table (FATيف نظام تشغيل .DOSو
FAT32يف نظام التشغيل ويندوز.
249
.00.3.0وحدة ختزين امللف
أصغر وحدة يف القرص الصلب هي القاطع وطوله حوايل ِ 300بيت ،لكنها ال تستخدم لتخزين امللفات
لصغر حجمها ،فإذا استخدمت كوحدة لتخزين امللفات سيؤثر هذا على األداء .لذلك عادة تستخدم وحدة أكرب
للتخزين تسمى جتمع ( ،)clusterحيث يرتاوح حجم التجمع الواحد بني ِ 0248بيت إىل ِ 50528بيت أي ما
يعادل 4إىل 24قاطع.
هنالك طرق خمتلفة لتخزين امللفات سنتطرق لبعض منها .سنستخدم كلمة كتلة للداللة على القطاع أو
التجمع (.)cluster
هنا ختزن امللفات يف كتل متتالية .فإذا أراد نظام امللفات ختزين ملف حيتاج 3كتل ،فعليه البحث عن 3كتل
فارغة (متتالية) لتخزين امللف .زمن الوصول للقرص يف هذه الطريقة سريع ألن رأس القراءة والكتابة ِبلقرص لن حيتاج
إىل حركة .ولكن املشكلة تكمن يف وجود فراغات متباعدة تنتج بسبب احلذف والتخزين الكثري للملفات،و ال ميكن
اإلستفادة من هذه الفراغات ألهنا غري متتالية.
عندما يقوم مدير امللفات بتخزين امللف يف القرص (يف كتل متتالية) ،سيخزن معلومات امللف يف جدول
احلجز بوضع عنوان أول كتلة مت ختزين امللف هبا ،وطول امللف (عدد الكتل اليت حيجزها) مع اسم امللف ،الشكل
(.)5-00
250
.00.3.0.0ختزين رابطي ()linked allocation
هذه الطريقة تعاجل مشاكل طريقة التخزين املتتايل .حيث خيزن كل ملف يف كتل مرتبطة مع بعضها ،حيث
تشري كل كتلة إىل الكتلة اليت تليها ،بينما تؤشر آخر كتلة يف امللف إىل .0-قد تكون الكتل موزعة يف أماكن متباعدة
داخل القرص (ال توجد فراغات خارجية) .عند ختزين امللف يف القرص يسجل مدير امللفات معلومات امللف يف جدول
الدليل (اسم امللف ،وعنوان أول كتلة) ،الشكل (.)8-00
هذا النوع يستخدم يف نظام التشغيل DOSويسمى ).File Allocation Table (FAT
حل التخزين الرابطي مشكلة الفراغات الغري مستفاد منها يف التخزين املتتايل ،ولكن املشكلة فيه أن املؤشرات
منتشرة يف الكتل ،حيث حتتوي كل كتلة على مؤشر للكتلة اليت تليها ،وِبلتايل لن نستطيع إىل كتلة معينة مباشرة وإمنا
علينا املرور على كل الكتل واحدة تلو اآلخرة لنصل لكتلة معينة مما يؤثر على األداء.
حل التخزين الفهرسي هذه املشكلة وذلك بوضع عناوين كل الكتل يف كتلة واحدة تسمى كتلة الفهرس .فيكون لكل
ملف خيزن ِبلقرص كتلة ختزن فيها عناوين بقية الكتلة اليت يستخدمها امللف ،شكل (.)8-00
251
شكل رقم ( :)8-00التخزين الفهرسي [.]3
النظام الفهرسي ال يوجد به فراغات ،ليس لديه مشكلة للوصول مباشرة إىل أي كتلة ،ولكنه حيجز كتلة أو أكثر
ليخزن فيها عناوين الكتلة األخرى.
اختيار طريقة احلجز اليت ستطبق يف نظام التشغيل تعتمد على الكفاءة وسرعة الوصول ،ولكن هنالك عوامل
أخرى تؤثر يف اختياران لطريقة الوصول املناسبة مثل طريقة استخدام النظام.
252
متارين
أحبث يف اإلنرتنت عن أنواع جداول احلجز Fatو FAT32و NTFSوقارن بينها ؟ .02
253
الباب الثاين عشر :األمن واحلماية
254
الباب الثاين عشر
األمن واحلماية
"الوقاية خري من العالج" عبارة ذائعة شائعة ،وأكثر ما تستعمل يف جمال الصحة .لكننا احوج ما نكون هلا يف
جمال محاية نظم احلاسب والبياانت اليت عليه .فاحد اسهل وابسط طرق الوقاية هو النسخ االحتياطي لكامل النظام.
فالنسخ االحتياطي للنظام بصورة دورية هو احد طرق احلماية البدائية واهلامة واليت جيب القيام هبا بصورة دورية .فهو
ضرورة من ضرورات احلماية خاصة يف حالة تعرض النظام لكوراث طبيعية أو تعطل كامل يف النظام الي سبب.
أحد طرق جدولة النسخ االحتياطي اليت ميكن أن تستخدم هي نسخ النظام بكامله كل اسبوع مرة مثال،
ونسخ امللفات اليت يتم تعديلها يوميا .وزَيدة يف االحتياط ميكن االحتفاظ ِبلنسخ االحتياطية ملدة ترتاوح بني 5إىل 2
شهور .ووضع نسخة احتياطية بعيد عن املوقع يزيد احلماية خاصة يف حالة الكوارث.
ال تفرتق احلماية (الوقاية) عن التأمني .فهما كثريا ما يكوانن مرتادفان ومتداخالن ومتالزمان .ولكننا هنا يف
هذا الباب نقصد ِبحلماية أن تقي نظامك وبياانتك قبل أن تقع الكارثة وتضيع منك (الوقاية) .بينما نقصد ِبلتأمني
وضع معايري واسس للقيام خبطوات جتعل نظامك قادرا على صد اهلجمات واخلروقات االمنية اليت قد تقع عليه.
واكتشافها ومعاجلتها إذا حدثت.
ِبختصار احلماية يقصد هبا الوقاية والتحوط قبل وقوع الكارثة ،والتأمني
يقصد به اغالق كل الثغرات اليت قد تُؤتى من قِبلها.
.00.0محاية املوارد
أن من مهام نظام التشغيل محاية موارد نظام احلاسب من أجهزة وبرامج وبياانت .وذلك مبنع املستخدمني
غري املصرح هلم ِبلوصول هلذه املوارد .لذلك جيب محاية النظام من الربامج الضارة اليت قد تسبب اتالف لالجهزة أو
البياانت.
هنالك الكثري من الطرق للقيام بذلك مثل التحقق من املستخدمني (املصادقة )Authenticationو منح
الصالحيات للمستخدمني حبيث يكون لكل مستخدم صالحية وصول ملا هو مسموح له به (.)authorization
255
إن اي ثغرة توجد بنظام التشغيل ستعرض نظام احلاسب كله لالخرتاق .لذلك تعترب محاية النظام هي مهمة نظام
التشغيل يف الدرجة االوىل [.]05
.00.0املصادقة ( )authenticationوالصالحيات
من أولوَيت التأمني اليت يوفرها نظام التشغيل هي التحقق من هوية املستخدم وحتديد صالحياته .حيث يتم حتديد كل
مستخدم للنظام وربطه ِبملوارد املسموح له ِبستخدمها .وتقع على عاتق نظام التشغيل مسئولية إنشاء نظام محاية
يضمن أن املستخدم الذي يقوم ِبستخدام مورد معني هو مصدق له بذلك.
توفر أنظمة التشغيل طرق خمتلفة للمصادقة والتحقق من هوية املستخدم ،منها:
.0اسم املستخدم /كلمة املرور -حيتاج املستخدم إىل إدخال اسم املستخدم وكلمة املرور املسجلة مع نظام
التشغيل للدخول يف النظام.
.0بطاقة املستخدم /مفتاح -العضو حباجة فتحة للبطاقة أو توليد مفتاح دخول يوفره نظام التشغيل للدخول
يف النظام.
.5مسة املستخدم -البصمة -منط شبكية العني -توقيع :العضو يف حاجة لتمرير مسته عن طريق جهاز إدخال
معني يستخدمه نظام التشغيل للدخول يف النظام.
.00.5صفات/أهداف التأمني
على النظام أن يتصف ببعض الصفات اليت جتعله قوَي وحمميا محاية جيدة منها ماذُكر يف [ ]08وهو كالتايل:
256
التكاملية ( :)Integrityضمان عدم تغيري البياانت من االشخاص غري املخولني دون علم االشخاص
املخولني .ان يدخل شخص ما اىل هاتفك احملمول دون ان تعلم ويقوم حبذف بعض االمساء
التحكم ِبلدخول ( : )Access controlضمان ان املستخدمني ال يدخلون اال اىل االماكن املخصصة
هلم.
عدم االنكار ( : )Non repudiationضمان ان مرسل الرسالة ال ميكن ان ينكر انه ارسل
طرف االتصال يستدعي عدم انكار اي من
الرسالة(هذه اخلاصية مهمة عند وجود نوع من االتفاق بني ْ
الطرفني ارساله اي من الرسائل املوجودة).
اخلصوصية ( : )Privacyحق املستخدمني ِبلتحكم مبا سيعرفه االخرون عنهم وعن معلوماهتم املوجودة يف
النظام
جتنب اخلطر ( : )Risk avoidanceوذلك ِبلغاء الفقرات الزائدة من النظام اليت ميكن ان تعرضه
للهجوم مثل الغاء اتصال االنرتنت ضمن شبكة معينة ال حاجة مبوظفيها ِبالتصال ِبالنرتنت.
الردع ( : )Deterrenceمن خالل استخدام بعض تقنيات االتصال اليت تضمن معرفة ومتييز املهامجني
قبل تنفيذهم اهلجوم على بياانت النظام مثال.
257
االصالح ( : )Recoveryاصالح االضرار اليت احدثها اهلجوم.
محاية النظام ( : )System securityمن هم املخولون ِبلدخول اىل النظام ,عملية النسخ االحتياطي
( ،)backupادارة قاعدة البياانت ،ادارة امللفات.
.00.2التهديدات []05
عادة تقوم الربامج ِبعمال مفيدة سواء كانت هذه الربامج برامج مستخدمني او برامج نظم تشغيل وتعمل يف النواة.
فاذا قام برانمج مستخدم ِبعمال ضارة فيسمى ِبلرانمج الضار أو املهدد .مثال لذلك الربانمج الذي يتثبت يف جهاز
املستخدم ويرسل بياانت دخوله إىل بعض اهلاكرز.
حصان طروادة ( -)Trojan Horseمت تعريف فريوس حصان طروادة يف املوسوعة احلرة ،كاآليت:
"شفرة صغرية يتم حتميلها مع برانمج رئيسي من الربامج ذات الشعبية العالية ،ويقوم ببعض املهام اخلفية ،غالباً ما
ترتكز على إضعاف قوى الدفاع لدى الضحية أو اخرتاق جهازه وسرقة بياانته".
258
الباب الفخ ( )Trap Doorأو املصيدة -يطلق عليها احياان الباب اخللفي .إذا كان الربانمج الذي مت
تصميمه للعمل على النحو املطلوب ،به ثغرة أمنية يف شفرته الربجمية .وتستخدم هذه الثغرة للقيام ِبعمال
غري قانونية دون معرفة املستخدم ،فنقول أن هذا الربانمج به مصيدة.
القنبلة املنطقية ( -)Logic Bombهو برانمج يعمل بصورة طبيعية لكنه جيتوي على شفرة ختريبية تكون
خامدة وتبدا عملياهتا التخريبية عند استيفاء شروط معينة .ومن الصعب الكشف عن هذا النوع من
الشفرات.
الفريوس ( - )Virusالفريوس كما يوحي االسم هو برانمج يقوم بنسخ نفسه وإصابة ملفات الكمبيوتر.
وميكنه تعديل أوحذف ملفات املستخدم ،وتعطيل النظام .الفريوس هو بصفة عامة شفرة صغرية (جزءا ال
يتجزأ من الربانمج) .كلما يشغل املستخدم الربانمج املصاب يبدأ الفريوس ِبلعمل ولصق نفسه يف ملفات أو
برامج غري مصابة .وقد يؤدي هذا إىل تعطيل هذه امللفات والربامج مما جيعلها غري قابلة لالستخدام.
.00.2.0هتديدات النظام
هتديدات النظام تشري إىل سوء استخدام خدمات النظام وشبكة االتصاالت لوضع املستخدم يف مشكلة .هتديدات
النظام ميكن استخدامها إلطالق هتديدات برانمج على شبكة كاملة (تسمى هجوم الربانمج) .هتديدات النظام ختلق
بيئة يساء فيها استخدام ملفات وموارد نظام التشغيل /املستخدم .وفيما يلي قائمة بعض هتديدات النظام املعروفة.
الدودة -تعمل على تردي أداء النظام ( )system performanceعن طريق استخدام موارد النظام
إىل مستوَيت متعمقة .فالدودة تولد نسخ متعددة حيث تستخدم كل نسخة موارد النظام ،ومتنع مجيع
العمليات األخرى من احلصول على املوارد الالزمة .وميكن لعمليات الديدان أن توقف الشبكة بشكل كامل.
مسح املنفذ ( - )Port Scanningهو آلية أو وسيلة متكن اهلاكر من كشف نقاط الضعف يف نظام
لتنفيذ هجوم على النظام.
احلرمان من اخلدمة ( -)Denial of Serviceهجمات احلرمان من اخلدمة عادة متنع املستخدم من
االستفادة الشرعية من النظام ( .)legitimate use of the systemعلى سبيل املثال ،قد ال يكون
املستخدم قادرا على استخدام اإلنرتنت إذا متت هجمات حرمان على حمتوى إعدادات املتصفح .
259
.00.5انواع االخرتاق [.]03
هناك أنواع متعددة من اهلجوم الذي من املمكن أن حيدث عندما يتم نقل البياانت عرب الشبكة من جهاز إىل آخر.
يسمى مثل هذا اهلجوم "الرجل الذي يف الوسط".
حيدث هذا النوع من اهلجوم عندما يقوم شخص ما مبراقبة نشاط ،التقاط ،والسيطرة على االتصاالت بني جهازي
كمبيوتر (دون علم املرسل أو املتلقي) .وميكن للمهامجني تعديل البياانت ،واعادهتا ،أو جمرد االستماع إليها.
عندما يتم االتصال بني أجهزة الكمبيوتر عند مستوَيت منخفضة من طبقة الشبكة ،قد ال تكون أجهزة الكمبيوتر
قادرة على حتديد مع من تتصل وتتبادل البياانت.
اهلجوم يبدا ِبنتحال شخص هلويتك من أجل االطالع على رسائلك مثال .الشخص على الطرف اآلخر قد يعتقد أنه
هو أنت ألن املهاجم قد يقوم بنشاط ويرد كما لو كنت انت للحفاظ على تبادل املعلومات واحلصول على مزيد
منها.
االعرتاض (التجسس) ( :)interceptionحتويل البياانت اىل طرف اثلث متنصت دون تغيريها او تزييفها
التعديل ( :)modificationتغيري البياانت بعد التنصت عليها من قبل الطرف الثالث واعادهتا اىل
املستلم
التكرار( :)replayإعادة االرسال البياانت الصحيحة (مثل اعادة طلب احلصول على مبلغ مايل).
التزييف( :)fabricationتزييف االتصال من قبل الطرف الثالث واالدعاء ِبن الطرف الثالث هو الطرف
املتصل يف حني ان املتصل ليس موجودا.
260
شكل :0-00انواع االخرتاق [.]03
.00.8تصنيف اهلجمات
تصنيف مبسط يوضح أنواع بعض اهلجمات اليت قد تقع على النظام [:]08
اهلجوم السليب ( : )Passive Attackاهلدف منه احلصول على معلومات الستخدامها يف انواع اخرى
من اهلجمات مثل احلصول على كلمات السر.
اهلجوم املوزع ( : )Distributed Attackتوزيع عنصر اهلجوم مثل فريوس حصان طروادة ( Trojan
)horseعلى عدة جهات ومستخدمني هبدف احداث ضرر او تغيري يف البياانت او يف املعدات
(.)hardware
اهلجوم الداخلي ( : )Insider Attackميكن للمهاجم الداخلي الذي هو جزء من النظام ان يقوم
بكافة االضرار للجزء الذي يعمل به والذي هو خمول ِبلعمل به وقد يتجاوزه اىل اجزاء اخرى.
هجوم التقرب ( : )Close-in Attackوصول شخص غري خمول اىل الشبكة ملعرفة كيفية عملها
واالطالع على طرق الربط فيها.
261
هجوم التصيد ( : )Phishing Attackيقوم املهاجم بتكوين موقع انرتنت شبيه ِبحد املواقع الشهرية
مثل ( )Paypalاخلاص ِبلدفع عرب االنرتنت والتعامالت املالية وينتظر جمئ مستخدم متواضع اخلربة ليدخل
رقم بطاقته او معلوماته الشخصية فيحصل عليها املتصيد وحيقق مقصده منها.
هجوم احملاكاة ( : )Spoof attackيقوم املهاجم ِبصدار اشارة معينة تؤدي اىل توجيه البياانت له .مثل
تغيري عناوين الشبكة حبيث حيصل هو على البياانت اليت يفرتض ان حيصل عليها غريه.
هجوم اغراق املخزن املؤقت ( : )Buffer overflowارسال كم كبري غري متوقع من البياانت لوسيلة
خزن معينة مما يؤدي اىل عدم استيعاب هذا املخزن هلذه البياانت وتوقفه.
مهامجة كلمة السر ( :)Password attackاستخدام تقنيات كسر دوال التشفري ملعرفة كلمة السر او
استخدام طرق توقع كلمة السر من خالل معلومات املستخدم الشخصية او عن طريق حماولة استخدام مجيع
الرموز املوجودة لكشف كلمة السر ،جدول .0-00
هجوم ايقاف اخلدمة ( : )Denial of Service – DOSاحد انواع اهلجوم الشائعة ضد خوادم
مواقع االنرتنت ( )Web serversمن خالل اغراق اخلادم بكم من البياانت ال ميكنه استيعابه مما يؤدي
اىل ايقاف اخلدمة .وهو ينقسم اىل نوعني:
.0اغراق اخلادم بكم كبري من البياانت بشكل ال تستوعبه حزمة االتصال ( )Bandwidthويتم ذلك مثال
عن طريق القيام بطلب Pingبشكل مكرر ( Pingامر شائع االستخدام بني احلواسيب للتأكد من ان
االتصال موجود بني حاسوبني وذلك ِبرسال علبة من البياانت ذات حجم صغري).
.0القيام هبجوم موزع من عدة حواسيب جتاه الضحية ،شكل رقم .0-00
262
شكل رقم :0-00هجوم ايقاف اخلدمة [.]02
جدول :0-00متوسط الوقت الالزم لإلنسان والكمبيوتر لتخمني كلمات السر حىت 02أحرف أجبدية ()A-Z
ِبستخدام .]8[ brute force
263
.00.3حمددة التحكم ِبلوصول ()access control matrix
حمددة التحكم ِبلوصول هي منوذج أتمني رمسي حلاالت احلماية يف نظام احلاسب لتمييز حقوق كل مادة ِبلنسبة لكل
كائن يف النظام.
تعريف
وفقا هلذا النموذج ،فإن حاالت محاية نظام الكمبيوتر ميكن التعامل معها (جتريدَي) على أهنا جمموعة من الكائنات
(نرمز للكائن ِبحلرف ،)Oاي هي جمموعة من الكياانت اليت حتتاج إىل أن تكون حممية (مثل العمليات وامللفات
وصفحات الذاكرة) .وجمموعة املواد (نرمز هلا ِبحلرف ،)Sاليت تتكون من مجيع الكياانت النشطة (مثل املستخدمني،
والعمليات) .وعالوة على ذلك توجد جمموعة من احلقوق (نرمز هلا ِبحلرف )Rوتكون يف الصيغة ) .r(s,oحيث
تنتمي sإىل Sو oإىل Oو ) r(s,oإىل .Rحيث حيدد احلق ( )rightنوع الوصول املسموح به للمادة ملعاجلة
الكائن.
مثال ()0
يف اجلدول ادانه جند أن الكائنات اليت لدينا هنا هي ( )Asset 1, Asset2وملف ( )Fileوجهاز
(.)Device
احلقوق حتدد يف خاانت التقاء الكائن مع املادة ،مثال احلقوق املسموح هبا للمادة Role 1على الكائن Asset 2
هي .executeحق Role 2على Asset 2هي .read, write, execute, own
ليس ل Role 2اي حقوق على Fileو ،Deviceيعين غري مسموح له ِبلوصول إليهما او التعامل معهما.
حمددة وصول.
مثال ()0
من اجلدول ادانه جند أن لدينا اربعة اشياء (كائنات) هي ثالثة ملفات ( )F1, F2, F3وطابعة
(.)printer
264
ولدينا اربعة جماالت (.)D1, D2, D3, D4
العمليات اليت تعمل يف اجملال D1حقوقه املعرفة يف احملددة هي القراة من امللف F1ومن امللف F3فقط.
حسب معايري تقييم نظام الكمبيوتر املوثوق به ( Trusted Computer System's Evaluation
)Criteriaلوزارة الدفاع االمريكية ،فإن هناك أربعة تصنيفات أمنية يف أنظمة الكمبيوتر هي ،C ،B ،Aو .D
هذه املواصفات املستخدمة على نطاق واسع تستخدم لتحديد ومنذجة أمن النظم واحللول األمنية .فيما يلي وصف
موجز لكل تصنيف.
265
( )sensitivity labelمرفقة مع كل كائن .ويقسم إىل ثالثة أنواع.
حيافظ على عالمة أتمني ( )the security labelلكل كائن يف النظام .تستخدم B1 2-1
العالمة الختاذ قرارات التحكم ِبلوصول.
متتد عالمات احلساسية إىل كل موارد النظام ،مثل كائنات التخزين ( storage B2 2-2
،)objectsويدعم قنوات سرية ( )covert channelsوتدقيق األحداث
(.)auditing of events
يسمح إبنشاء قوائم أو جمموعات مستخدمني للتحكم ِبلوصول ملنح ( )grantحق B3 2-3
الوصول أو سحب ( )revokeالوصول إىل كائن مسمى معني.
يوفر احلماية ومساءلة املستخدم (ِ )user accountabilityبستخدام قدرات Type C 3
التدقيق ( .)audit capabilitiesوبه نوعني.
يشتمل على ضوابط حبيث ميكن للمستخدمني محاية معلوماهتم اخلاصة واحلفاظ على C1 3-1
املستخدمني اآلخرين من قراءة/حذف بياانهتم اخلاصة هبم من غري قصد .إصدارات
يونيكس غالبا ما تصنف من الدرجة .C1
إضافة عنصر حتكم الوصول على املستوى الفردي لقدرات مستوى. C1 C2 3-2
أدىن مستوى .احلد األدىن من احلماية ،MS-DOS .ويندوز 5.0تقع ضمن هذه Type D 4
الفئة.
مصادقة Authentication
تصريح Authorization
ضعيف vulnerable
تطفل intrusion
خبيث -ضار malicious
التهديد Threat
املقاطعة Interruption
االعرتاض Interception
التزييف Fabrication
266
إعادة ارسال املعلومة Replay
اخلصوصية Confidentiality
التكاملية Integrity
عدم االنكار Non repudiation
التوفر Availability
جتنب اخلطر Risk avoidance
الردع Deterrence
اهلجوم السليب Passive Attack
اهلجوم النشط Active Attack
هجوم التقرب Close-in Attack
هجوم التصيد Phishing Attack
هجوم احملاكاة Spoof attack
هجوم اغراق املخزن املؤقت Buffer overflow
اهلجوم االستغاليل Exploit attack
هجوم ايقاف اخلدمة Denial of Service – DOS
تشفري متناظر Symmetric encryption
اختصار كلمة االخرتاق BREACH (Browser
)Breach( Reconnaissance and
Exfiltration via Adaptive
Compression of Hypertext)
267
المالحق
268
ملحق (أ) :املصطلحات
Process عملية
Thread اخليط
Scheduling اجلدولة
Deadlock اإلختناق
Memory الذاكرة
Virtual memory الذاكرة الظاهرية /االفرتاضية
Performance األداء
Efficiency الكفاءة
Cluster جتمع
Multiprocessor حاسب متعدد املعاجلات
Multitasking تعدد املهام
Cache memory الذاكرة املخبأة
Main memory الذاكرة الرئيسية
Registers املسجالت
Processor املعاجل
Resource املورد
Page Fault خطأ الصفحة
Page
استبدال الصحفات
Replacement
Swap التبديل
Main memory الذاكرة الرئيسية
Cache memory الذاكرة املخباة
Device drivers التعريفات/سواقات األجهزة
269
ملحق (ب) :التحكم يف العمليات على لينكس (توزيعة أوبونتو)
يف هذا امللحق نسرد بعض الربامج اليت تستخدم استدعاءات النظام يف لينكس للتحكم يف العمليات من
داخل برامج .C
قبل البدء يف سرد أمثلة الربامج نوضح هنا خطوات كتابة وترمجة وتنفيذ برامج Cعلى لينكس (توزيعة أوبونتو):
أفتح الطرفية
أكتب األمر ( geditحمرر لكتابة شفرة الربانمج).
أكتب الربانمج أدانه يف احملرر.
أحفظ امللف ِبالسم creatProcess.c
ترجم الربانمج ِبألمر:
o cc -o creatProcess creatProcess.c
نفذ الربانمج بعد الرتمجة وتصحيح األخطاء ِبألمر:
o ./ creatProcess
برانمج ()0
>#include <stdio.h
>#include <sys/types.h
{ )void main(void
;pid_t pid
;)(pid = fork
;)(ChildProcess
270
else ParentProcess();
void ChildProcess(void) {
int i=5;
void ParentProcess(void) {
int i=9;
)6( برانمج
حيث مت إلنشاء عملية،C++ الربانمج التايل يوضح كيفية استخدام استدعاءات النظام بواسطة برانمج
. للتميز بني العملية اإلبن والعليمة األب، مث اختبار القيمة الراجعة منها،fork() ِبستدعاء
#include <iostream>
#include <string>
271
using namespace std;
int globalVariable = 2;
main()
{
string sIdentifier;
int iStackVariable = 20;
272
cout << sIdentifier;
cout << " Global variable: " << globalVariable;
cout << " Stack variable: " << iStackVariable << endl;
}
)1( الربانمج
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main() {
pid_t pid; /* * رقم العملية/
char *message;
int n;
switch(pid) {
case -1: exit(1);
case 0: message = "this is the child process"; n = 3;
break;
default: message = "this is the parent process"; n = 6;
break;
}
for(; n > 0; n-) {
puts(message);
sleep(1);
273
}
;)exit(0
}
شرح الربانمج
عندما نستدعى النظام ِبالمر ، forkفهذا يعين أننا نريد من نظام التشغيل إنشاء عملية ،سيتم تنفيذ األمر
بواسطة نظام التشغيل وترجع قيمة من بعد تنفيذ األمر:
;)(pid = fork
ختزن القيمة الراجعة ِبملتغري ،pidالذي يعترب رقم تعريف العملية (وهو رقم غري متكرر ،فكل عملية تنشأ سيكون ليدها
رقم تعريف فريد ( ))uniqueيسمى رقم تعريف العملية .pid
حيث ميثل PIDرقم العملية املراد إهناءها ،مثال إلهناء العملية رقم 0555سننفذ األمر التايل على الطرفية:
برانمج ()4
يف الربانمج التايل نقوم إبنشاء عملية ِبألمر )( ،forkمث تتفذ العملية ِبالمر execlpأو execأو غريها
من دوال التنفيذ .كما ميكن إهناء العملية ِبألمر )( .exitأيضا األمر waitيستخدم جلعل عملية تنتظر عملية أخرى
مثال.
)(int main
{
274
pid_t pid;
pid = fork();
exit(-1);
wait (NULL);
exit(0);
)3( برانمج
275
خمرج الربانمج أعاله سيكون كما يلي:
جند عبارة Hello 2تظهر 12مرة ،و Hello 1تظهر 8مرات .ذلك ألن forkيف الدالة )( functتولد
نسختنني من التكرار .forترتيب هذه العبارات غري حمدد وقد خيتلف من مرة ألخرى .الرسم التايل يوضح خطوات
التنفيذ.
276
برانمج ()2
أكتب برانمج بلغة Cميثل العملية األب ،يقوم إبنشاء عملية إبن مسيها ِ child1بستدعاء )(.fork
والعملية اإلبن بدورها تنشئ عملية أبن امسها .child2العمليات األبناء هي صور من العملية األب .بينما تقوم
العملية األب حبساب مربع العدد ،3والعملية child1حتسب مربع العدد ِ 4بلتزامن مع العملية األب ،والعملية
child2تقوم حبساب مربع العدد .5كل العمليات تظهر نتائجها يف الشاشة مباشرة بعد عملية احلساب .أتكد من
إهناء العمليات بطريقة سليمة.
{)if (pid==0
;)(pid=fork
{ )if (pid==0
)(exit
}
;)(exit
}
277
Printf("parent %d\n", 5*5);
Wait(NULL);}
)2( برانمج
int pid=fork()
if (pid==0){
while(1)
printf("child…");
} else {
while(1)
printf("Parent …");}
278
ملحق (ج) :تغيري اعدادت الذاكرة االفرتاضية يف ويندوز
نظم التشغيل مثل ويندوز حتجز جزء من القرص الصلب ليستخدم كذاكرة افرتاضية ،ويتيح لنا نظام التشغيل إمكانية
زَيدة أو تقليل هذه املساحة احملجوزة للذاكرة االفرتاضية.
ولكن ملاذا نغري حجم الذاكرة االفرتاضية؟ ألن هنالك برامج كبرية ال تكفي الذاكرة االفرتاضية احلالية لتخزينها ،أو قد
تظهر رسالة ختربك أبن الذاكرة االفرتاضية غري كافية .ظهور مثل هذه الرسالة هو بسبب أنك أردت تشغيل برانمج كبري
احلجم وال تكفى الذاكرة االفرتاضية لتشغيله ،لذلك عليك زَيدة حجم الذاكرة االفرتاضية جبهازك.
اخلطوات التالية توضح كيف ميكنين تغيري مساحة الذاكرة االفرتاضية يف ويندوز :XP
279
من النافذة التالية اختار التبويب Advancedمث Change
280
عدل القيمة أمام ِ Initial sizeبمليغاِبيت مث انقر على Set
281
التحكم يف الذاكرة االفرتاضية (ويندوز ]00[ )02
كما علما مسبقا أن مجيع أنظمة التشغيل تتطلب ذاكرة افرتاضية ،هي مزيج من الذاكرة الرئيسية وجزء من
القرص الصلب اخلاص بك ،تسمى ملف املبادلة أو ملف ترحيل الصفحات .فإذا كانت الذاكرة الرئيسية ال تكفي،
يستخدم ويندوز ملفات مبادلة لتخزين امللفات مؤقتا ومن مث اعادهتم اىل ذاكرة الرئيسية مرة أخرى عند احلاجة .وميكن
اعتبار الذاكرة االفرتاضية امتدادا للذاكرة الرئيسية للكمبيوتر.
لتغيري اعدادات هذه املساحة من القرص الصلب اليت تستخدم كذاكرة افرتاضية نتتبع اخلطوات التالية:
282
تظهر النافذة التالية:
283
تظهر الشاشة التالية:
يف 5و 4أكتب أدىن وأعلى قيمة حلجم ملف الصفحة ( ،)pagefileمث اعد تشغيل احلاسب.
284
حماكاة جدولة املعاجل ِبستخدام جافا:)ملحق (د
] وذلك00[ وااتحها يف املوقعDunne يف هذا امللحق سنسرد بعض برامج حماكاة املعاجل اليت صممها
.ليستفيد منها القاري ويكون قادرا على استخدامها
ميكن ملن يريد استخدامها حتميل. وهي تعمل بصورة جيدةNetbeans متت جتربة هذه الربامج على
.]00[اكوادها (الشفرات املصدرية) من املوقع املبني يف
:)process( العمليات
/**
* @author Mark Dunne
*/
package cpu_scheduling_algorithms;
import java.util.Random;
285
private Queue queue;
private Random random;
private long cpuTimeNeeded;
private long blockingTimeNeeded;
private boolean stateChanged;
public Process() {
random = new Random();
cpuTimeNeeded = random.nextInt(10000);
System.out.println(cpuTimeNeeded);
}
/**
* Set the queue that the Process is current in
*
* @param queue The queue that it is in
*/
public void setParentQueue(Queue queue) {
this.queue = queue;
}
/**
* Determine if the Process is finished execution
*
* @return True if it is finished execution
*/
public boolean isFinished() {
return cpuTimeNeeded == 0;
}
/**
* Do some computation
*
* @param time The amount of time given for the computation
*/
public void doCPUWork(long time) {
stateChanged = false;
if (blockingTimeNeeded == 0) {
cpuTimeNeeded -= time;
cpuTimeNeeded = cpuTimeNeeded > 0 ? cpuTimeNeeded : 0;
if (!isFinished()) {
//25% chance to enter blocked state
if (Math.random() < 0.25) {
System.out.println("Process Blocked!");
blockingTimeNeeded = random.nextInt(1000);
//process entered blocked state
queue.event(this, Scheduler.Interrupt.PROCESS_BLOCKED);
stateChanged = true;
}
}
}
286
}
/**
* Simulate working through a blocked process
*
* @param time The amount of time given to work through the block
*/
public void doBlockedWork(long time) {
stateChanged = false;
blockingTimeNeeded -= time;
blockingTimeNeeded = blockingTimeNeeded > 0 ? blockingTimeNeeded : 0;
//process entered running state
if (blockingTimeNeeded == 0) {
queue.event(this, Scheduler.Interrupt.PROCESS_READY);
stateChanged = true;
}
}
/**
* Determines if the Process has changed queues recently
*
* @return True if it has changed queues recently
*/
public boolean isStateChanged() {
return stateChanged;
}
@Override
public String toString() {
return "[Proc " + hashCode() + "time: " + cpuTimeNeeded + ":" + blockingTimeNeeded +
"]";
}
}
Process.java
)scheduler( اجملدول
package cpu_scheduling_algorithms;
/**
* @author Mark Dunne
*/
287
private long clock;
/**
* The types of interrupt that can happen
*/
public static enum Interrupt {
PROCESS_BLOCKED,
PROCESS_READY,
LOWER_PRIORITY
}
public Scheduler() {
//create new blocked queue
blockedQueue = new Queue(this, 50, 0, Queue.QueueType.BLOCKED_QUEUE);
clock = System.currentTimeMillis();
}
/**
* The main loop of the scheduler
* Each process is worked on for a time based on
* the time between loops to be more realistic
*/
public void run() {
while (true) {
long time = System.currentTimeMillis();
long workTime = time - clock;
clock = time;
288
if (allEmpty()) {
System.out.println("Idle mode");
break;
} else {
System.out.println(this);
}
/**
* Determine if any processes left
*
* @return returns true if there isn't anything left to do
*/
public boolean allEmpty() {
for (Queue queue : runningQueues) {
if (!queue.isEmpty()) {
return false;
}
}
return blockedQueue.isEmpty();
}
/**
* Add new process to be scheduled
*
* @param process The process to be added
*/
public void add(Process process) {
runningQueues[0].add(process);
}
/**
* Notify the scheduler of an Interrupt that needs its attention
* Used to move processes between different queses and priority levels
*
* @param queue The source queue
* @param process The source process
* @param interrupt The interrupt type that happened
*/
public void event(Queue queue, Process process, Interrupt interrupt) {
switch (interrupt) {
case PROCESS_BLOCKED:
blockedQueue.add(process);
289
break;
case PROCESS_READY:
add(process);
break;
case LOWER_PRIORITY:
if (queue.getType() == Queue.QueueType.CPU_QUEUE) {
//move process to back of next lowest priority queue
//if it is already in the lowest, just add it to the back
int priorityLevel = Math.min(PRIORITY_LEVELS - 1, queue.getPriorityLevel() +
1);
runningQueues[priorityLevel].add(process);
} else {
//just add process to back of blocking queue
blockedQueue.add(process);
}
break;
}
}
@Override
public String toString() {
String result = "[BlockedQueue Size:" + blockedQueue.size() + "]";
for (Queue runningQueue : runningQueues) {
result += "[CPUQueue Size: " + runningQueue.size() + "]";
}
return result;
}
}
Scheduler.java
)Queue( الصف
/**
* @author Mark Dunne
*/
package cpu_scheduling_algorithms;
import java.util.LinkedList;
/**
* The types of queue that can exist
290
*/
public static enum QueueType {
CPU_QUEUE,
BLOCKED_QUEUE
}
/**
* Creates a new Queue object
*
* @param scheduler The Scheduler instance the queue is tied to
* @param quantum The quantum time of the queue
* @param priorityLevel The priority of the queue
* @param queueType The type of the queue
*/
public Queue(Scheduler scheduler, long quantum, int priorityLevel, QueueType queueType) {
this.priorityLevel = priorityLevel;
this.scheduler = scheduler;
this.quantum = quantum;
this.quantumClock = 0;
this.queueType = queueType;
}
/**
* Manage changing between time slices
*
* @param currentProcess The process that is currently being worked on
* @param time The amount of time that has passed
*/
public void manageTimeSlice(Process currentProcess, long time) {
if (currentProcess.isStateChanged()) {
quantumClock = 0;
return;
}
quantumClock += time;
if (quantumClock > quantum) {
quantumClock = 0;
Process process = remove();
if (!process.isFinished()) {
//move down to next queue if we can
scheduler.event(this, process, Scheduler.Interrupt.LOWER_PRIORITY);
} else {
System.out.println("Process complete!");
}
}
}
/**
* Simulate doing some computation work on the process
*
* @param time The amount of time for computation given to the process
291
*/
public void doCPUWork(long time) {
Process process = element();
process.doCPUWork(time);
manageTimeSlice(process, time);
}
/**
* Simulate working through a blocked process
*
* @param time The amount of time given for working through the block
*/
public void doBlockedWork(long time) {
Process process = element();
process.doBlockedWork(time);
manageTimeSlice(process, time);
}
/**
* Determine if the queue is empty
*
* @return True if the queue is empty
*/
public boolean isEmpty() {
return size() == 0;
}
/**
* Notify the queue of any interrupts that happen on the process
*
* @param source The source process
* @param interrupt The interrupt type
*/
public void event(Process source, Scheduler.Interrupt interrupt) {
remove(source);
switch (interrupt) {
case PROCESS_BLOCKED:
//process entered blocked state
scheduler.event(this, source, Scheduler.Interrupt.PROCESS_BLOCKED);
break;
case PROCESS_READY:
scheduler.event(this, source, Scheduler.Interrupt.PROCESS_READY);
break;
}
}
/**
* Add a process to the queue and set its parent queue to this one
*
* @param process The queue to add
* @return True as usual with collections
*/
292
@Override
public boolean add(Process process) {
process.setParentQueue(this);
return super.add(process);
}
/**
* Get the priority level of the queue
*
* @return The priority level
*/
public int getPriorityLevel() {
return priorityLevel;
}
/**
* Get the type of the queue
*
* @return The type of the queue
*/
public QueueType getType() {
return queueType;
}
}
Queue.java
293
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 7][CPUQueue Size: 2]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 8][CPUQueue Size: 2]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 7][CPUQueue Size: 3]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 6][CPUQueue Size: 4]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 5][CPUQueue Size: 5]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 4][CPUQueue Size: 6]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 3][CPUQueue Size: 6]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 4][CPUQueue Size: 6]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 3][CPUQueue Size: 7]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 2][CPUQueue Size: 8]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 1][CPUQueue Size: 8]
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 9]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 9]
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 9]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 1][CPUQueue Size: 9]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 10]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 10]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 10]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 10]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 10]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 10]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 9]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 1][CPUQueue Size: 9]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 9]
Process complete!
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 9]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 9]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 9]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 9]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 9]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 9]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 9]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 8]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 1][CPUQueue Size: 8]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 9]
Process complete!
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 8]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 8]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 7]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 7]
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 7]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 1][CPUQueue Size: 7]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 7]
Process complete!
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 7]
Process complete!
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 6]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 6]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 6]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 5]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 1][CPUQueue Size: 5]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 6]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 5]
Process Blocked!
294
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 5]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 1][CPUQueue Size: 5]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 6]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 6]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 5]
Process complete!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 4]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 4]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 1][CPUQueue Size: 4]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 5]
Process complete!
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 4]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 3]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 1][CPUQueue Size: 3]
Process complete!
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 3]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 3]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 2]
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 2]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 1][CPUQueue Size: 2]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 3]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 3]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 3]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 3]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 2]
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 2]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 1][CPUQueue Size: 2]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 3]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 2]
Process Blocked!
[BlockedQueue Size:2][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 1]
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 1][CPUQueue Size: 1]
Process complete!
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 1][CPUQueue Size: 1]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 1]
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 1]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 1][CPUQueue Size: 1]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 2]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 2]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 1]
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 1]
Process complete!
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 1]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 0][CPUQueue Size: 0][CPUQueue Size: 0]
Process complete!
Idle mode
BUILD SUCCESSFUL (total time: 51 seconds)
295
للتعامل مع العمليات.NET استخدام مكتبة: ) ملحق (ه
. تسمح لرباجمك ِبلوصول لبياانت العمليات اليت تعمل يف جهازك.NET توجد صفوف يف مكتبة
وميكنك استخدام هذه املعلومات ملعرفة حالة برانجمك احلايل أو للحصول على معلومات عن بقية العمليات اليت تعمل
.اآلن يف جهازك
ملعرفة معلومات العملية احلالية (هذا.NET املوجود يف مكتبةprocess الربانمج التايل يستخدم الصف
: الشفرة التالية توضح ذلك.)الربانمج
Imports System
Imports System.Diagnostics
Module Module1
Sub Main()
Dim thisProcess As Process
thisProcess = Process.GetCurrentProcess
Dim pname As String = thisProcess.ProcessName
Dim started As DateTime = thisProcess.StartTime
Dim pID As Integer = thisProcess.Id
Dim mem As Integer = thisProcess.VirtualMemorySize64
Dim phymem As Integer = thisProcess.WorkingSet64
Dim primem As Integer = thisProcess.PrivateMemorySize64
Dim priority As Integer = thisProcess.BasePriority
Dim priClass As ProcessPriorityClass =
thisProcess.PriorityClass
Dim cpuTime As TimeSpan =
thisProcess.TotalProcessorTime
Console.WriteLine("Process : {0}, ID: {1}", pname,pID)
Console.WriteLine(" started: {0}", started.ToString)
Console.WriteLine(" CPU time: {0}", cpuTime.ToString)
Console.WriteLine(" priority class: {0}, priorty:
{1}", priClass, priority)
296
Console.WriteLine(" virtual memory: {0}", mem)
Console.WriteLine(" private memory: {0}", primem)
Console.WriteLine(" physical memory: {0}", phymem)
Console.WriteLine(" try to change priority ..")
thisProcess.PriorityClass = ProcessPriorityClass.High
priClass = thisProcess.PriorityClass
Console.WriteLine(" new priority class: {0}",
priClass)
Console.Read()
End Sub
End Module
ما يتسخدم من ذاكرة،ID مثل رقم العملية،عند تنفيذ الربانمج أعاله (يصبح عملية) وتظهر لنا معلوماته
.) مع إمكانية تغيري هذه األولويةpriority( كذلك يظهر الربانمج أولوية العملية.حقيقية وذاكرة ظاهرية ومعاجل
:أيضا ميكننا معرفة املعلومات عن مجيع العمليات إبنشاء مصفوفة ختزن معلومات كل العمليات ِبلشفرة التالية
allProc = Process.GetProcesses()
Next
297
مثال للمنتج واملستهلك ِبستخدام جافا:)ملحق (و
http://crunchify.com/java-producer-consumer-example-handle-concurrent-read-write/
package producer_consumer;
import java.util.Vector;
import java.util.Iterator;
/**
* @author Crunchify
*/
@Override
public void run() {
for (;;) {
try {
Thread.sleep(1);
} catch (Exception e) {
e.printStackTrace();
}
@SuppressWarnings("rawtypes")
Iterator it = data.iterator();
while (it.hasNext())
it.next();
}
}
}
@Override
public void run() {
for (;;) {
try {
Thread.sleep(1);
} catch (Exception e) {
e.printStackTrace();
}
data.add(new Object());
298
if (data.size() > 1000)
data.remove(data.size() - 1);
}
}
}
}
299
املراجع
301