Os 3rd Edition 2016sep18muteb

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 301

‫نظم التشغيل‬

‫‪Operating Systems‬‬

‫عبدالرمحن أمحد حممد عثمان‬

‫جامعة ام القرى ‪ -‬كلية احلاسب بالقنفذة‬

‫جامعة الشيخ عبداهلل البدري‬


‫الطبعة الثالثة ‪ -‬نسخة إلكرتونية جمانية (‪)6102‬‬

‫‪ 01‬سبتمرب ‪6102‬‬
‫اللَّ ُه َّم ا ْغ ِف ْر الخي وزميلي متعب الرويلي زميلي جبامعة اجلوف سابقا‬

‫وسع م ْدخلَه وا ْغ ِس ْله ِِب ِ‬


‫ملاء والثَّ ْل ِج والْ َربِد‬ ‫ِ‬ ‫ِِ‬ ‫ِ‬
‫‪،‬‬ ‫ُ‬ ‫ف عْنهُ ‪َ ،‬وأَك ِرْم ُنزلَهُ ‪َ ،‬و ْ ُ َ ُ‬ ‫اللَّ ُه َّم ا ْغف ْر له و ْارمحْهُ ‪ ،‬وعافه ‪ ،‬و ْاع ُ‬
‫ِ‬ ‫ِ‬ ‫ِ‬
‫الدنَس ‪َ ،‬وأَبْدلْهُ دارا خرياً م ْن َدا ِره ‪َ ،‬وأ َْهالً َخرياً ْ‬
‫من‬ ‫من َّ‬
‫ض َ‬ ‫ت الثَّوب األبْيَ َ‬ ‫من اخلَطَ َاَي‪ ،‬كما نَقَّْي َ‬
‫ونَقه َ‬
‫اب النَّار‬ ‫وزوجاً َخ ْرياً من َزوِج ِه ‪ ،‬و ْأد ِخ ْله اجلنَّةَ ‪ ،‬وأ َِع ْذه من َع َذ ِ‬
‫اب ال َق ِْرب ‪ ،‬وِمن َع َذ ِ‬ ‫ِِ‬
‫َ ْ‬ ‫ْ‬ ‫َ‬ ‫ْ ْ‬ ‫ْأهله‪ْ َ ،‬‬

‫‪2‬‬
‫مقدمة‬

‫احلمد هلل الذي علم ِبلقلم علم اإلنسان ما مل يعلم‪ ،‬والصالة والسالم على الرسول األكرم وعلى آله وصحبه وسلم‪ ،‬وبعد‬

‫لقد متت طباعة النسخة االوىل من هذا الكتاب يف عام ‪ ،0202‬نشر من قبل‪ :‬مكتبة الرشد‪( ،‬الرَيض)‪ ،‬من ‪ 583‬صفحة‪.‬‬

‫مث مت نشر الطبعة الثانية كطبعة الكرتونية جمانية حىت تعم الفائدة ويصل الكتاب لكل طالب علم‪ ،‬وقد كان ذلك يف العام ‪ .0205‬وقد مت‬
‫حتميل أكثر من ‪ 02‬ألف نسخة من الكتاب‪ ،‬مما شجع على إطالق الطبعة الثالثة الكرتونيا ِبذن هللا يف هذا العام (‪ .)0202‬مت اجراء‬
‫بعض التعديالت والتنقيحات على الكتاب يف هذه الطبعة مشلت اآليت‪::‬‬

‫االستشهاد املرجعي للمصادر اليت استخدمتها يف الكتاب (‪.)citation‬‬ ‫•‬


‫إعادة تنسيق الكتاب وتصحيح بعض االخطاء االمالئية‪.‬‬ ‫•‬
‫إجراء بعض التعديالت وإضافة صور جديدة عن بعض نظم احلاسب يف الباب األول‪.‬‬ ‫•‬
‫إضافة مناذج اخليوط إىل ِبب مفاهيم اخليوط‪ ،‬وإعادة ترتيب الباب‬ ‫•‬
‫إضافة حملق عملي عن التحكم ِبلذاكرة االفرتاضية ِبستخدام ويندوز ‪.02‬‬ ‫•‬
‫إضافة ملحق حيتوي شفرات مصدرية عن حماكاة جدولة املعاجل ِبستخدام جافا‪.‬‬ ‫•‬
‫إضافة ِبب عن االمن واحلماية‬ ‫•‬
‫حذف ِبب النظم املوزعة (ستكون يف كتاب خمصص لذلك)‪.‬‬ ‫•‬
‫حذف ملحق اعدادات نظام التشغيل ابونتو (نسخة قدمية)‪.‬‬ ‫•‬
‫أستندت يف معظم كتايب هذا على املرجعيني الرئيسني املشهورين يف جمال نظم التشغيل ومها‪:‬‬

‫‪‬‬ ‫‪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.‬‬

‫استخدمت مراجع أخرى اثبتها يف قائمة املراجع‪ ،‬وهي كلها مراجع أجنبية‪.‬‬

‫صور الغالف مت جتميعها من املوقع ‪.]0[ cliparts.co‬‬

‫‪3‬‬
‫مقدمة الطبعة االوىل والثانية‬

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

‫نرجو من القارئ الكرمي التواصل معنا عرب االمييل‬


‫‪operatingsystem13@gmail.com‬‬
‫الضافة مقرتحات أو تصويب اخطاء‪.‬‬

‫‪4‬‬
:‫هذا الكتاب متاح جماان كنسخة الكرتونية على الرابط التايل‬

https://www.researchgate.net/publication/306960494_Operating_Systems_In_Arabic

:‫توجد كتب أخرى ذات صلة ابملوضوع متاحة على الروابط التالية‬

:)‫ مدخل للنظم املوزعة (ابلعريب‬.0


https://www.researchgate.net/publication/307122357_Distributed_Systems_In_Arabic

:)‫ الربجمة املتوازية (ابلعريب‬.6

https://www.researchgate.net/publication/307955739_Parallel_Programming

5
6
‫جدول احملتوَيت املختصر‬

‫‪Contents‬‬

‫مقدمة ‪0 ...................................................................................................................‬‬

‫مقدمة الطبعة االوىل والثانية‪4 .................................................................................................‬‬

‫الباب األول‪ :‬املكوانت املادية ‪03 .............................................................................................‬‬

‫الباب الثاين‪ :‬احلاسب وبنية نظام التشغيل ‪53 ..................................................................................‬‬

‫الباب الثالث‪ :‬العمليات‪35 ..................................................................................................‬‬

‫الباب الرابع‪ :‬جدولة املعاجل ‪52 ...............................................................................................‬‬

‫الباب اخلامس‪ :‬خيوط التنفيذ ‪30 .............................................................................................‬‬

‫الباب السادس‪ :‬التزامن ‪028 ................................................................................................‬‬

‫الباب السابع‪ :‬االختناق ‪008 ...............................................................................................‬‬

‫الباب الثامن‪ :‬إدارة الذاكرة الرئيسية ‪032 .....................................................................................‬‬

‫الباب التاسع‪ :‬الذاكرة االفرتاضية ‪032 .......................................................................................‬‬

‫الباب العاشر‪ :‬مدير األجهزة ‪004 ...........................................................................................‬‬

‫الباب احلادي عشر‪ :‬مدير امللفات‪053 ......................................................................................‬‬

‫الباب الثاين عشر‪ :‬األمن واحلماية ‪034 ......................................................................................‬‬

‫املالحق ‪028 ..............................................................................................................‬‬

‫ملحق (أ)‪ :‬املصطلحات ‪023 ...........................................................................................‬‬

‫ملحق (ب)‪ :‬التحكم يف العمليات على لينكس (توزيعة أوبونتو) ‪052 ........................................................‬‬

‫ملحق (ج)‪ :‬تغيري اعدادت الذاكرة االفرتاضية يف ويندوز ‪053 ...............................................................‬‬

‫ملحق (د)‪ :‬حماكاة جدولة املعاجل ِبستخدام جافا ‪083 .....................................................................‬‬

‫املراجع ‪522 ...........................................................................................................‬‬

‫‪7‬‬
‫جدول احملتوَيت‬

‫‪Contents‬‬
‫مقدمة ‪2 ......................................................................................................‬‬

‫مقدمة الطبعة االوىل والثانية ‪4 .................................................................................‬‬

‫الباب األول‪ :‬املكوانت املادية ‪51 .............................................................................‬‬

‫‪ .0.0‬أجيال احلاسبات ‪61 ........................................................................................‬‬

‫‪ .0.1‬تعريف نظام التشغيل ‪61 ....................................................................................‬‬

‫‪ .0.1‬ما هو نظام التشغيل ؟ ‪61 ..................................................................................‬‬

‫‪ .0.1‬مكوانت نظام احلاسب ‪02 ..................................................................................‬‬

‫‪ .0.1.1.1‬نداء النظام ‪25 .................................................................. System call‬‬

‫‪ .0.2‬دعم تعددية الربامج ‪02 .....................................................................................‬‬


‫‪ .0.2.0‬األنظمة أحادية املهام ‪32 ............................................................................................‬‬
‫‪ 0.2.0‬تعدد الربامج (‪32 .......................................................................... )multiprogramming‬‬
‫‪ .0.2.5‬املشاركة الزمنية (‪32 .............................................................................. )Time-sharing‬‬

‫‪ .0.1‬نظم التشغيل املعاصرة‪02 ...................................................................................‬‬

‫‪ .0.1‬أنواع أنظمة احلاسوب ‪02 ...................................................................................‬‬


‫‪ .0.8.0‬احلاسبات املركزية (‪32 .................................................................... )Mainframe Systems‬‬
‫‪ .0.8.0‬احلاسبات الشخصية ‪32 .............................................................................................‬‬
‫‪ .0.8.5‬األجهزة متعددة املعاجلات (‪32 ................................................................. )Multiprocessor‬‬
‫‪ .0.8.4‬األنظمة املوزعة ‪23 ...................................................................................................‬‬
‫‪ .0.8.3‬األجهزة املتجمعة (‪23 ...................................................................... )Clustered Systems‬‬
‫‪ .0.8.2‬األجهزة ذات الزمن احلقيقي (‪23 ..................................................................... )Real-time‬‬
‫‪ .0.8.5‬األجهزة الكفية (‪23 ...................................................................................)hand held‬‬
‫‪ .0.8.8‬األنظمة املضمنة (‪23 ..................................................................... )Embedded Systems‬‬
‫‪ .0.8.3‬أنظمة البطاقات الذاكية (‪22 ..............................................................)Smart card Systems‬‬

‫‪ .0.1‬ملخص ‪23 .................................................................................................‬‬

‫‪ .0.01‬متارين حملولة ‪23 ..........................................................................................‬‬

‫‪8‬‬
‫‪ .0.00‬متارين غري حملولة ‪22 ......................................................................................‬‬

‫الباب الثاين‪ :‬احلاسب وبنية نظام التشغيل‪93 ..................................................................‬‬

‫‪ .6.0‬عملية احلوسبة (‪32 ........................................................................)computing‬‬

‫‪ .6.6‬أجزاء احلاسب ‪30 ..........................................................................................‬‬

‫‪ .6.1‬املقاطعات (‪32 ............................................................................. )Interrupts‬‬

‫‪ .6.1‬الوضع الثنائي (‪33 ......................................................................... )dual mode‬‬

‫‪ .6.1‬املؤقت (‪33 .......................................................................................)timer‬‬

‫‪ .6.2‬هرمية الذاكرة ‪32 ...........................................................................................‬‬

‫‪ .6.1‬التخزين الرقمي للبياانت ‪31 ................................................................................‬‬


‫‪ .0.5.0‬متثيل البياانت داخل احلاسب ‪22 ....................................................................................‬‬
‫‪ .0.5.0‬البت والبايت ‪13 ....................................................................................................‬‬

‫‪ .6.1‬كيف يعمل احلاسب ‪20 ....................................................................................‬‬


‫‪ .0.8.0‬اإلقالع (‪13 ............................................................................................ )Booting‬‬
‫‪ .0.8.0‬التعامل مع نظام التشغيل‪12 .........................................................................................‬‬

‫‪ .6.1‬ملخص ‪23 .................................................................................................‬‬

‫‪ .6.01‬متارين حملولة ‪22 ..........................................................................................‬‬

‫‪ .6.00‬متارين غري حملولة ‪22 ......................................................................................‬‬

‫الباب الثالث‪ :‬العمليات ‪15 ..................................................................................‬‬

‫‪ .1.0‬مقدمة ‪21 ..................................................................................................‬‬

‫‪ .1.6‬مفهوم العملية (‪21 ................................................................ )Process Concept‬‬

‫‪ .1.1‬حاالت العملية (‪21 .................................................................... )process states‬‬

‫‪ .1 .1‬إنشاء العملية ‪12 ..........................................................................................‬‬

‫‪ .1.1‬إهناء العملية ‪10 ............................................................................................‬‬

‫‪ .1.2‬مثال تشبيهي ‪12 ...........................................................................................‬‬

‫‪ .1.1‬معلومات العملية )‪13 ............................................ )Process Control Blocks (PCB‬‬

‫‪9‬‬
‫‪ .1.1‬العمليات يف ويندوز ‪12 .....................................................................................‬‬

‫‪ .1.01‬العمليات يف لينكس ‪12 ..................................................................................‬‬

‫‪ 1.00‬االتصال بني العمليات ‪12 .................................................................................‬‬

‫‪ .1.06‬متارين حملولة ‪11 ..........................................................................................‬‬

‫‪ .1.01‬متارين غري حملولة ‪11 ......................................................................................‬‬

‫الباب الرابع‪ :‬جدولة املعاجل ‪57 ...............................................................................‬‬

‫‪ .1.0‬دورة حياة العملية (‪26 ...................................................... )CPU I/O Burst Cycle‬‬

‫‪ .1.6‬أنواع اجملدول [‪20 .................................................................................... ]01‬‬

‫‪ .1.6‬معايري اجلدولة (‪23 ............................................................ )Scheduling Criteria‬‬

‫‪ .1.1‬حتسني األداء ‪22 ...........................................................................................‬‬

‫‪ .1.1‬خوارزميات اجلدولة (‪22 .................................................. )Scheduling Algorithms‬‬


‫‪ .4.3.0‬القادم أوال خيدم أوال (‪21 .......................................................... )First-Come, First served‬‬
‫‪ .4.3.0‬العملية األقصر أوال )‪22 ..............................................................Shortest-Job-First (SJF‬‬
‫‪ .4.3.5‬األولوية (‪23 ............................................................................................. )Priority‬‬
‫‪ .4.3.4‬التقسيم الزمين ()‪22 ......................................................................)Round Robin (RR‬‬

‫‪ .1.2‬برانمج حماكاة خوارزميات اجلدولة ‪12 .......................................................................‬‬

‫‪ .1.1‬متارين ‪11 ...................................................................................................‬‬

‫الباب اخلامس‪ :‬خيوط التنفيذ ‪32 .............................................................................‬‬

‫‪ .1.0‬مدخل ‪12 ..................................................................................................‬‬

‫‪ .1.6‬تعريف اخليط ‪13 ...........................................................................................‬‬


‫‪ .3.0.0‬مثال تشبيهي ‪21 ....................................................................................................‬‬

‫‪ .1.1‬أنواع اخليوط ‪12 ............................................................................................‬‬


‫‪ .3.5.0‬خيط املستخدم (‪21 .................................................................................)user thread‬‬
‫‪ .3.5.0‬خيط النواة ‪29 .......................................................................................................‬‬

‫‪ .1.1‬التحول بني العمليات ‪11 .............................................................Context Switch‬‬

‫‪ .1.2‬استخدامات اخليط‪622 ....................................................................................‬‬

‫‪10‬‬
‫‪ .3.2.0‬حمرر النصوص‪333 ..................................................................................................‬‬
‫‪ .3.2.0‬خمدم الويب ‪333 ....................................................................................................‬‬

‫‪ .1.1‬مكتبات اخليوط ‪620 .......................................................................................‬‬

‫‪ .1.1.0‬استخدام ‪620 ............................................................................. Pthreads‬‬


‫‪ .3.5.0.0‬إنشاء خيط ‪333 .................................................................................................‬‬
‫‪ .3.5.0.0‬إهناء خيط ‪332 ..................................................................................................‬‬

‫‪ .1.1.6‬خيوط جافا ‪623 ........................................................................................‬‬


‫‪ .3.5.0.0‬إنشاء اخليط ‪332 ................................................................................................‬‬
‫‪ .3.5.0.0‬التعامل مع اخليط ‪331 ...........................................................................................‬‬

‫‪ .1.1‬حاالت اخليط‪622 .........................................................................................‬‬

‫‪ .1.1‬مترين غري حملولة ‪621 ......................................................................................‬‬

‫الباب السادس‪ :‬التزامن ‪571 .................................................................................‬‬

‫‪ .2.0‬مقدمة ‪621 ................................................................................................‬‬

‫‪ .2.6‬مفهوم التوازي ‪621 ..................................................................... Concurrency‬‬

‫‪ .2.1‬تعاون العمليات ‪621 .......................................................................................‬‬

‫‪ .2.1‬النزاع (‪666 ............................................................................ )competition‬‬


‫‪ .2.4.0‬مشاكل النزاع ‪333 ..................................................................................................‬‬

‫‪ .2.1‬مشاكل التزامن الكالسيكية ‪663 ...........................................................................‬‬


‫‪ .2.3.0‬مشكلة القراءة والكتابة (‪332 ................................................ )reading and writing problem‬‬
‫‪ .2.3.0‬مشكلة املنتج واملستهلك (‪339 ......................................................... )producer-consumer‬‬
‫‪ .2.3.5‬مشكلة عشاء الفالسفة (‪333 .............................................. )Dining philosophers problem‬‬
‫‪ .2.3.4‬مشكلة مدخين السجاير (‪333 .................................................)Cigarette smokers problem‬‬
‫‪ .2.3.3‬اللقاء ‪332 ......................................................................................... Rendezvous‬‬
‫‪ .2.3.2‬مشكلة احلالق النائم (‪331 .................................................................... )sleeping barber‬‬

‫‪ .2.2‬متارين غري حملولة ‪601 ......................................................................................‬‬

‫الباب السابع‪ :‬االختناق ‪521 ................................................................................‬‬

‫‪ .1.0‬تعريف املورد (‪601 .......................................................................... )resource‬‬

‫‪11‬‬
‫‪ .1.6‬مفهوم االختناق ‪601 .......................................................................................‬‬

‫‪ .1.1‬أنواع املوارد ‪622 ..........................................................................................‬‬

‫‪ .1.1‬مسببات االختناق ‪622 ....................................................................................‬‬

‫‪ .1.1‬استخدام الرسومات ‪626 ...................................................................................‬‬

‫‪ .1.2‬التعامل مع االختناق ‪620 ..................................................................................‬‬

‫‪ .1.1‬حماكاة خوارزمية املصرف (‪632 ............................................... )Banker's algorithms‬‬

‫الباب الثامن‪ :‬إدارة الذاكرة الرئيسية ‪511 ....................................................................‬‬

‫‪ .1.0‬بنية الذاكرة الرئيسية ‪621 ..................................................................................‬‬

‫‪ .1.6‬أهداف مدير الذاكرة ‪621 ..................................................................................‬‬

‫‪ .1.1‬مواصفات الذاكرة املثالية ‪612 .............................................................................‬‬

‫‪ .1.1‬مثال توضيحي ‪612 ........................................................................................‬‬

‫‪ .1.1‬أنواع تعدد املهام ‪610 ......................................................................................‬‬

‫‪ .1.2‬نظام التشغيل أحادي املهام ‪610 ...........................................................................‬‬

‫‪ .1.1‬نظام التشغيل متعدد املهام ‪613 ............................................................................‬‬

‫‪ .1.1‬التجزئة الثابتة ‪611 .........................................................................................‬‬

‫‪ .1.1‬التجزئة الديناميكية ‪626 ...................................................................................‬‬

‫‪ .1.01‬مشاكل تعدد املهام ‪622 .................................................................................‬‬

‫‪ .1.00‬العناوين املنطقية (‪622 ......................................................... )Logical addresses‬‬

‫‪ .1.06‬الذاكرة ابلصفحات (‪612 .................................................................... )Paging‬‬

‫‪ .1.01‬التقطيع (‪612 ....................................................................... )segmentation‬‬

‫‪ .1.01‬خالصة ‪612 .............................................................................................‬‬

‫‪ .1.01‬متارين حملولة ‪616 ........................................................................................‬‬

‫‪ .1.02‬متارين غري حملولة ‪610 ....................................................................................‬‬

‫الباب التاسع‪ :‬الذاكرة االفرتاضية ‪531 .......................................................................‬‬

‫‪12‬‬
‫‪ .1.0‬يف املاضي ‪612 ............................................................................................‬‬

‫‪ .1.6‬تعريف الذاكرة االفرتاضية ‪612 .............................................................................‬‬

‫‪ .1.1‬التبديل ‪612 ................................................................................ Swapping‬‬

‫‪ .1.1‬الذاكرة االفرتاضية ‪611 ....................................................................................‬‬

‫‪ .1.1‬الذاكرة االفرتاضية يف الصفحات ‪611 ......................................................................‬‬

‫‪ .1.2‬خوارزميات استبدال الصفحات (‪020 ......................... )Page Replacement Algorithms‬‬

‫‪ .1.1‬متارين حملولة ‪021 ..........................................................................................‬‬

‫‪ .1.1‬متارين غري حملولة ‪066 ......................................................................................‬‬

‫الباب العاشر‪ :‬مدير األجهزة ‪254 ...........................................................................‬‬

‫‪ .01.0‬مقدمة ‪062 ..............................................................................................‬‬

‫‪ .01.6‬أجهزة الدخل واخلرج‪062 ................................................................................‬‬

‫‪ .01.1‬املتحكم (‪061 ........................................................................... )controller‬‬

‫‪ .01.1‬الوصول املباشر للذاكرة ()‪062 ................................ )Direct Memory Access (DMA‬‬

‫‪ .01.1‬أهداف مدير األجهزة ‪061 ...............................................................................‬‬

‫‪ .01.2‬قواعد برجميات الدخل واخلرج (‪002 ................................ )Principles of I/O Software‬‬

‫‪ .01.1‬طرق الدخل واخلرج ‪006 ................................................................................‬‬

‫‪ .01.1‬طبقات برجميات الدخل واخلرج (‪000 ......................................... )I/O software layers‬‬

‫‪ .01.1‬القرص الصلب ‪002 .....................................................................................‬‬

‫‪ .01.01‬جدولة القرص ‪001 ....................................................................................‬‬

‫‪.01.00‬حمكاة جدولة القرص ‪022 ...............................................................................‬‬

‫‪ .01.06‬متارين حملولة ‪022 ......................................................................................‬‬

‫‪ .01.01‬متارين غري حملولة ‪021 ..................................................................................‬‬

‫الباب احلادي عشر‪ :‬مدير امللفات ‪293 .....................................................................‬‬

‫‪ .00.0‬أهداف إدارة امللفات ‪032 ...............................................................................‬‬

‫‪13‬‬
‫‪ .00.6‬تعريف امللف ‪036 .......................................................................................‬‬

‫‪ .00.1‬صفات امللف (‪036 ................................................................ )File Attributes‬‬

‫‪ .00.1‬العمليات على امللفات ‪036 ..............................................................................‬‬

‫‪ .00.1‬أنواع امللفات ‪030 .......................................................................................‬‬

‫‪ .00.2‬طرق الوصول ‪030 .................................................................. access method‬‬

‫‪ .00.1‬بنية الدليل‪032 .............................................................. Directory structures‬‬

‫‪ .00.1‬احلماية‪032 ..............................................................................................‬‬

‫‪ .00.1‬طرق التخزين ‪031 .......................................................................................‬‬

‫الباب الثاين عشر‪ :‬األمن واحلماية ‪214 ......................................................................‬‬

‫المالحق ‪211 ...............................................................................................‬‬


‫ملحق (أ)‪ :‬املصطلحات ‪011 .....................................................................................‬‬

‫ملحق (ب)‪ :‬التحكم يف العمليات على لينكس (توزيعة أوبونتو) ‪022 ..............................................‬‬

‫ملحق (ج)‪ :‬تغيري اعدادت الذاكرة االفرتاضية يف ويندوز ‪021 .....................................................‬‬

‫ملحق (د)‪ :‬حماكاة جدولة املعاجل ابستخدام جافا ‪012 .............................................................‬‬

‫املراجع ‪222 ......................................................................................................‬‬

‫‪14‬‬
‫الباب األول‪ :‬املكوانت املادية‬

‫‪15‬‬
‫الباب األول‬

‫املكوانت املادية‬

‫احلاسب جهاز يتكون من مكوانت مادية (‪ )hardware‬ومكوانت برجمية (‪ .)software‬املكوانت‬


‫املادية هي األجهزة امللموسة من شاشة‪ ،‬ولوحة املفاتيح‪ ،‬ومعاجل‪ ،‬وذاكرة‪ ،‬وغريها (اجلسد)‪ .‬أما املكوانت الربجمية فهي‬
‫اليت تتحكم يف املكوانت املادية وتديرها (الروح)‪ .‬من العسري استخدام املكوانت املادية للحاسب بدون وجود برامج‬
‫توفر لك طريقة سهلة للتعامل معها‪ .‬فاحلاسب بدون برامج كاجلسد بال روح أو كالسيارة بال وقود‪ .‬أهم جزء يف‬
‫الربامج والذي تنزل عليه بقية الربامج هو نظام التشغيل‪.‬‬

‫‪ .0.0‬أجيال احلاسبات‬
‫بدأت احلاسبات قدميا بال برامج وبال نظم تشغيل‪ ،‬وكان العمل كله يتم بلغة اآللة (شفرة مكونة من أصفار‬
‫وآحاد)‪ ،‬وِبلتايل ال يتعامل مع احلاسب إال املهندسني املختصني‪ .‬كان احلاسب يف ذلك الوقت يستخدم البطاقة املثقبة‬
‫لإلدخال والطابعة لإلخراج‪ ،‬فال لوحة مفاتيح وال شاشة وال غريها‪.‬‬

‫شكل رقم ‪ :0-0‬البطاقة املثقبة [‪.]0‬‬

‫بدأ العمل بتصميم برامج تؤدي جزء من مهام املشغل وبدأت أعباؤه تقل تدرجييا‪ ،‬إىل أن مت إحالل كامل للمشغِل‬
‫بربامج تقوم بكل مهامه السابقة‪ ،‬فكانت نظم التشغيل اليت وفرت الكثري من الوقت املستغرق للتعامل مع احلاسب‬
‫ليستفاد منه يف تطوير نظام التشغيل والتطبيقات األخرى‪.‬‬

‫‪16‬‬
‫شكل رقم ‪ :0-0‬أول حاسب مركزي ‪.]0[ 0338‬‬

‫مث تطورت نظم التشغيل من نظم تكتب أوامرها يف شكل نصوص مثل ‪ DOS‬إىل نظم تشغيل رسومية يف‬
‫شكل أيقوانت ورموز يستطيع كل شخص التعامل معها‪ ،‬وِبلتايل أصبح الكل يتعامل مع احلاسب بكل سهولة ويسر‪.‬‬

‫اآلن وبعد التطور الكبري يف صناعة املكوانت املادية والربامج أصبحت أجهزة احلاسب حتمل على الكف‬
‫ونظم التشغيل والربامج تستخدم بنقرة من الفأرة أوضغطة على لوحة املفاتيح أو كلمة على املايكروفون‪.‬‬

‫شكل رقم ‪ :5-0‬حاسب حجمه واحد مليميرت [‪.]5‬‬

‫‪17‬‬
‫شكل رقم ‪ :4-0‬قانون بيل (‪.]0[ )Bell’s Law‬‬

‫‪ .0.5‬تعريف نظام التشغيل‬


‫نظام التشغيل هو ذلك الربانمج الذي نراه عندما نفتح احلاسب وال يفارقنا إال عند إغالق ه‪ .‬وه و أول ب رانمج‬
‫يثبت على احلاسب ليدير مجيع موارده ويتيح للمستخدم واجهة مستخدم (‪ )user interface‬متكنه من التعامل مع‬
‫املكوانت املادية بكل سهولة ويسر‪.‬‬

‫عرف ‪ Galvin‬نظام التشغيل أبنه‪:‬‬


‫برانمج يدير أجهزة احلاسب‪ .‬ويوفر أيضا أساسا لل ربامج التطبيقي ة ويعم ل كوس يط ب ني مس تخدمي أجه زة‬
‫احلاسب وأجهزة احلاسب‪.‬‬

‫‪ .0.5.0‬أهداف نظام التشغيل الرئيسية هي‪:‬‬

‫‪ ‬تنفيذ تطبيقات املستخدم‪.‬‬


‫‪ ‬توفري بيئة مناسبة ومالئمة لالستخدام (‪.)convenient‬‬
‫‪ ‬االستفادة القصوى من املوارد وذلك جبعلها تعمل بشكل فعال (‪.)efficient‬‬

‫‪18‬‬
‫‪ .0.5.0‬شرح تعريف نظام التشغيل‬
‫املوارد (‪:)resources‬‬
‫موارد احلاسب تشمل املكوانت املادية من لوحة مفاتيح وشاشة وطابعة‪ ،‬وغريها‪ ،‬وكذلك امللفات والربامج‬
‫وصفحات الويب وما شابه‪.‬‬

‫الواجهة (‪:)user interface‬‬


‫يتعامل املستخدم مع الربامج التطبيقية وموارد احلاسب من خالل واجهة استخدام (‪.)user interface‬‬
‫فمعظم نظم التشغيل اليوم توفر واجهة مستخدم رسومية ()‪ ،)graphical user interface (GUI‬حيث متثل‬
‫األيقوانت املزاَي املتوفرة ِبلنظام‪.‬‬

‫تنفيذ برامج املستخدم‪:‬‬


‫يقوم نظام التشغيل بتحميل برامج املستخدم يف الذاكرة وتشغيلها ِبملعاجل‪ ،‬وتوفر معظم نظم التشغيل احلديثة‬
‫حتميل وتشغيل اكثر من برانمج يف وقت واحد (تعدد الربامج)‪.‬‬

‫املقصود إبدارة املوارد هو‪:‬‬


‫‪ ‬حجز املورد (‪ )allocate‬للربانمج الذي يطلبه‪ ،‬مث حتريره (‪ )free‬بعد اإلنتهاء منه وإاتحته لتستفيد منه‬
‫برامج أخرى‪.‬‬
‫‪ ‬استخدام املورد بكفاءة واالستفادة منه االستفادة القصوى‪ :‬مثال إذا كان املعاجل ينفذ يف برانمج معني‪،‬‬
‫وأحتاج هذا الربانمج إىل معلومة من لوحة املفاتيح (قد يستغرق وصول املعلومة وقتا ليس ِبلقصري مقارنة مع‬
‫سرعة املعاجل) ‪ ،‬يف هذه احلالة سيقوم نظام التشغيل ِبالستفادة من املعاجل يف تنفيذ برانمج آخر ريثما تصل‬
‫املعلومة من لوحة املفاتيح‪ ،‬هنا يكون نظام التشغيل قد استفاد من زمن املعاجل يف هذه الفرتة‪.‬‬
‫‪ ‬العدل يف استخدام املوارد‪ :‬مينع نظام التشغيل الربامج من حجز املوارد واستخدامها ملدة طويلة‪.‬‬

‫‪ .0.5.5‬نظام التشغيل كربانمج حتكمي‪:‬‬

‫يتحكم نظام التشغيل يف تشغيل الربامج األخرى ويدير عملية تنفيذها لتفادي األخطاء وجتنب االستخدام‬
‫الغري مرشد ملوارد احلاسب ومحاية الربامج عن بعضها البعض وعن نظام التشغيل‪.‬‬

‫‪ .0.4‬ما الذي يشمله نظام التشغيل ؟‬


‫إذا قمت بتثبيت نظام التشغيل ويندوز ستجد معه الكثري من الربامج مثل متصفح اإلنرتنت‪ ،‬ومشغل‬
‫الوسائط (‪ ،)media player‬والرسام واملفكرة والكثري من األلعاب وغريها من الربامج‪ ،‬هل نعترب هذه الربامج جزء‬
‫من نظام التشغيل؟ للمستخدم العادي نقول نعم !‪ .‬أما علميا فنقول‪:‬‬

‫‪19‬‬
‫أن نظام التشغيل هو ذلك اجلزء الذي يتعامل ويدير املكوانت املادية مباشرة‪ ،‬وهو النواة (‪ )kernel‬اليت ال‬
‫نراها و ال نتعامل معها مباشرة‪ ،‬لكننا ال نستغين عن خدماهتا اليت هي سبب تشغيل بقية الربامج والواجهات اليت‬
‫نتعامل معها‪.‬‬

‫البعض يضيف إىل نظام التشغيل الواجهة الرسومية اليت من خالهلا نستخدم النظام‪.‬‬

‫‪ .0.3‬مكوانت نظام احلاسب‬


‫نظام احلاسب هو عبارة عن مكوانت املادية ومكوانت برجمية‪ ،‬ميكن تفصيل هذه املكوانت بصورة أدق إىل اآليت‪:‬‬

‫‪ ‬مكوانت احلاسب املادية (‪.)computer hardware‬‬


‫‪ ‬نظام التشغيل (‪.)operating system‬‬
‫‪ ‬الربامج والتطبيقات‪.‬‬
‫‪ ‬املستخدم (‪.)user‬‬

‫‪ .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‬‬

‫شكل رقم ‪ :3-0‬انفذة اوامر على ويندوز‪.‬‬

‫‪21‬‬
‫شكل رقم ‪ :2-0‬حمطة على أوبونتو‪.‬‬

‫ما الفرق بني احملطة (‪ ،)Terminal‬انفذة التحكم (‪ ،)window Console‬الغالف‬


‫(‪ ،)Shell‬وسطر االوامر (‪ )Command Line‬؟‬
‫هل هذه العبارة صحيحة ؟‬
‫‪Shell is just another word for the User Interface of an operating system‬‬

‫‪ .0.3.5‬نداء النظام ‪System call‬‬

‫إذا احتاجت برامج املستخدم خدمة معينة من نظام التشغيل تستخدم ما يسمى نداء النظام ( ‪system‬‬
‫‪ .)call‬ذلك ألن برامج املستخدم غري مسموح هلا ِبلوصول املباشر للمكوانت املادية‪ ،‬وإمنا نواة نظام التشغيل هي‬
‫اليت تستطيع فعل ذلك‪ .‬هبذه الطريقة نضمن سالمة املكوانت املادية ومحايتها من الربامج التطفلية ومن االستخدام‬
‫اخلاطئ هلا‪ .‬ولكن احياان حتتاج بعض تطبيقات املستخدم التعامل مع املكوانت املادية‪ ،‬وألن هذه التطبيقات ال‬
‫تستطيع الوصول للمكوانت املادية مباشرة‪ ،‬ستقوم إبرسال طلب إىل نظام التشغيل ليمدها ِبملعلومات اليت تريد من‬
‫املكون املادي املعني‪.‬‬

‫التعامل مع املكوانت املادية يوفرها نظام التشغيل يف شكل خدمات‪ ،‬حيث يتم الطلب يف شكل نداء‬
‫النظام املناسب‪ .‬حيث يوجد لكل خدمة نداء نظام خاص هبا‪.‬‬

‫يتم تنفيذ نداء النظام يف وضع النواة (‪ .)kernel mode‬ولكل استدعاء نظام رقم مرتبط به‪ .‬يرسل هذا‬
‫الرقم إىل النواة ليعرف نظام التشغيل ما هو استدعاء النظام املطلوب‪ .‬عندما يرسل املستخدم هذا الرقم فهو يف‬
‫احلقيقية يستدعى روتني مكتبة (‪ ،)library routine‬فيقوم الروتني إبرسال مقاطعة (‪ )issues a trap‬لنظام‬
‫التشغيل‪ ،‬مث ميرر رقم االستدعاء ومعطياته إىل النواة (ِبستخدام مسجالت معينة)‪ .‬تقوم النواة بتنفيذ الروتني وترسل‬
‫النتائج للمستخدم عرب مسجل معني‪ .‬إذا كانت النتائج كبرية احلجم (ال يستطيع املسجل ختزينها)‪ ،‬سرتسل بطريقة‬
‫أخرى مثل استدعاء الروتني ‪ copy_to_user‬لتخزينها يف موقع ما ِبلذاكرة‪.‬‬

‫أن نداءات النظام هي واجهة برجمية للخدمات اليت يوفرها نظام التشغيل وغالبا ما تكتب بلغة عالية‬
‫املستوى مثل ‪ .C/C++‬ومعظم الربامج تصل هلذه اخلدمات عن طريق واجهة برجمة تطبيقية (‪.)API‬‬

‫‪22‬‬
‫هنالك ثالث واجهات برجمية مشهورة لنداءات النظام هي‪:‬‬

‫‪Win32 API‬‬ ‫‪‬‬


‫‪POSIX API‬‬ ‫‪‬‬
‫‪Java API‬‬ ‫‪‬‬

‫من نداءات النظام املشهورة يف نظم التشغيل لينكس (وينكس)‪:‬‬

‫‪open, read, write, close, wait, fork, exit.‬‬

‫معظم نظم التشغيل اليوم حتتوي على كم هائل من نداءات النظام‪ .‬مثال يوجد يف لينكس حوايل ‪ 503‬نداء نظام‪ ،‬ويف‬
‫‪ FreeBSD‬توجد حوايل ‪ 552‬نداء نظام‪.‬‬

‫كم استدعاء نظام يوجد يف ويندوز ‪XP‬؟ وهل خيتلف عن عدد نداءات النظام املوجودة يف نسخ ويندوز األخرى (مثل فيستا‪،‬‬
‫ويندوز ‪ .... ،02‬اخل)؟ أذكر نداءات النظام املشهورة يف ويندوز ؟‬

‫من نداءات نظام ويندوز اليت تقابل نداءات نظام لينكس‪:‬‬

‫‪CreateFile, ReadConsole, WriteFile, CloseHandle, WaitForSingleObject,‬‬


‫‪CreateProcess, ExitProcess.‬‬

‫‪ .0.2‬دعم تعددية الربامج‬


‫نظم التشغيل يوفر بيئة لتنفيذ الربامج‪ ،‬ويركز نظام التشغيل على فعل ذلك بكفاءة تزيد من االستفادة من موارد‬
‫احلاسب‪ .‬قدميا كان نظام التشغيل يسمح لربانمج واحد ِبلعمل وهذا يسمى أحادية الربامج‪ ،‬أما اآلن فيدعم نظام‬
‫التشغيل تنفيذ أكثر من برانمج يف وقت واحد‪.‬‬

‫‪ .0.2.0‬األنظمة أحادية املهام‬

‫كان دور نظام التشغيل هو حتميل برانمج واحد وتنفيذه‪ ،‬مث بعد إكتماله‪ ،‬يتم حتميل برانمج آخر وتنفيذه‪،‬‬
‫وهكذا‪ .‬هذا النوع من نظم التشغيل ال يستفيد من املوارد استفادة كاملة (غري كفؤ)‪ ،‬ذلك ألنه حيمل برانمج واحد كل‬
‫مرة‪ ،‬ويظل هذا الربانمج يعمل إىل أن ينتهي‪ ،‬خالل عمل هذا الربانمج قد تكون هنالك موارد متاحة لكن ال يُستفاد‬
‫منها ألنه ال يوجد سوى برانمج واحد ِبلذاكرة‪ .‬أيضا يستغرق حتميل الربانمج وقتا ليس ِبلقصري‪ ،‬مما يؤثر على أداء‬
‫احلاسب‪ .‬يسمى هذا النوع من نظم التشغيل أحادي املهام‪ ،‬حيث يوجد برانمج واحد ِبلذاكرة ِبإلضافة إىل نظام‬
‫التشغيل‪ ،‬شكل (‪.)2-0‬‬

‫‪23‬‬
‫نظام التشغيل‬

‫برامج املستخدمني‬

‫شكل (‪ :)2-0‬شكل الذاكرة يف نظام التشغيل أحادي الربانمج‬

‫‪ 0.2.0‬تعدد الربامج (‪)multiprogramming‬‬

‫هنا يتعامل نظام التشغيل مع عدد من الربامج املخزنة ِبلقرص‪ ،‬حيث حيمل جزء من هذه الربامج ِبلذاكرة‬
‫(شكل ‪ .)5-0‬يبدأ نظام التشغيل بتنفيذ أحد هذه الربامج يف املعاجل‪ .‬إذا توقف هذا الربانمج عن التنفيذ ألي سبب‪،‬‬
‫يقوم نظام التشغيل بتشغيل برانمج آخر يف املعاجل‪ .‬هبذه الطريقة نكون قد استفدان من زمن املعاجل وجعلناه مشغوال‬
‫معظم الوقت‪ .‬فالغرض من تعدد الربجمة وجود أكثر من برانمج ِبلذاكرة حبيث جيد املعاجل دائما برانمج جاهز للتنفيذ‪.‬‬

‫نظام التشغيل‬
‫مهمة ‪0‬‬
‫مهمة ‪0‬‬
‫مهمة ‪5‬‬
‫مهمة ‪4‬‬
‫مهمة ‪3‬‬
‫شكل (‪ :)5-0‬شكل الذاكرة يف نظام التشغيل متعدد الربامج‪.‬‬

‫‪ .0.2.5‬املشاركة الزمنية (‪)Time-sharing‬‬

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

‫‪ .0.2.4‬مثال تشبيهي‬

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

‫أما إذا كانت السيارة لثالث أشخاص مثال‪ ،‬فيمكنهم التناوب يف قيادهتا‪ ،‬وِبلتايل ميكن أن تكون السيارة‬
‫تعمل ‪ 04‬ساعة ِبليوم‪ 5 ،‬أَيم ِبالسبوع‪ .‬يكون هنالك شخص من الثالث يقوم بقيادة السيارة مث إذا ما أحتاج أن‬
‫يراتح أو أن أيكل مثال يقوم شخص آخر من الثالث بقيادهتا (الشخص اجلاهز‪ ،‬أي ليس لديه أي إلتزامات أخرى)‪،‬‬
‫فهذا يشبه تعدد الربامج‪.‬‬

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

‫‪ .0.5‬أنواع نظم التشغيل‬


‫هنالك الكثري من نظم التشغيل‪ ،‬ختتلف ِبختالف األنظمة واألجهزة واألغراض اليت من أجلها صممت‪.‬‬
‫فمنها ما يستخدم إلدارة جهاز واحد شخصي ومنها ما يستخدم إلدارة أجهزة متعددة املعاجلات ومنها ما يستخدم‬
‫إلدارة أجهزة كفية ومنها يستخدم إلدارة أجهزة مضمنة ‪...‬اخل‪ .‬من نظم التشغيل الشهرية املستخدمة حاليا التايل‪:‬‬

‫‪ ‬ميكروسوفت ويندوز (‪ :)windows‬نسبة عالية من احلاسبات تستخدم ويندوز واليت تعمل على معاجلات‬
‫إنتل واملعاجلات املتوافقة معها‪ .‬توجد منها عدة نسخ‪ ،‬من ويندوز‪ ،‬مثل‪:‬‬

‫‪‬‬ ‫)‪Windows 1.0 (1985‬‬


‫‪‬‬ ‫)‪Windows 2.0 (1987‬‬
‫‪‬‬ ‫)‪Windows 3.x (1990, 1992‬‬
‫‪‬‬ ‫)‪Windows 95 (1995‬‬
‫‪‬‬ ‫)‪Windows 98 (1998‬‬
‫‪‬‬ ‫)‪Windows 2000 (2000‬‬
‫‪‬‬ ‫)‪Windows ME (2000‬‬
‫‪‬‬ ‫)‪Windows XP (2001‬‬
‫‪‬‬ ‫)‪Windows Vista (2006‬‬
‫‪‬‬ ‫)‪Windows 7 (2009‬‬
‫‪‬‬ ‫)‪Windows 8 (2012‬‬
‫‪‬‬ ‫)‪Windows 8.1 (2013‬‬

‫‪25‬‬
‫‪‬‬ ‫)‪Windows 10 (2015‬‬
‫‪‬‬ ‫)‪Windows 10 (Anniversary Update) (2016‬‬

‫‪From (https://en.wikipedia.org/wiki/List_of_Microsoft_operating_systems).‬‬

‫‪ ‬يونيكس (‪ :)UNIX‬صمم يف عام ‪ 0354‬بواسطة ‪ Dennis Ritchie‬و ‪Ken Thompson‬‬


‫بينما كاان يعمالن يف معامل ‪ .AT & T Bell‬كان اهلدف نظام تشغيل صغري ومتنقل‪ .‬مث أنتشر يف‬
‫اجلامعات مراكز البحوث يف عام ‪ .0382‬ومن نسخ ينكس املشهورة‪:‬‬

‫‪V Unix o‬‬

‫‪BSD o‬‬

‫وهو أول نظام تشغيل يكتب ِبلكامل بلغة برجمة عالية (‪ ،)high level language‬فهو مكتوب بلغة‬
‫‪.C‬‬

‫‪ ‬ماكنتوش (‪ :)Mac‬صمم ليعمل على أجهزة أبل ماكنتوش اليت تنتشر يف دور الطباعة والنشر‪ ،‬وهو قوي‬
‫وسهل االستخدام وقد أخذت ويندوز فكرة النوافذ وسطح املكتب من هذا النظام حيث كان أول نظم‬
‫تشغيل يدعم الواجهات الرسومية وااليقوانت والقوائم على سطح مكتب‪.‬‬

‫‪ ‬توزيعات لينكس (‪ :)Linux‬هي نسخة مصغرة من ينكس صممت لتعمل على احلاسبات الشخصية‪ ،‬وهو‬
‫مفتوح املصدر حيث يتيح حرية تعديل الشفرة وإعادة التوزيع ‪ .‬ويوجد منها مئات التوزيعات أحدثها وأشهرها‬
‫توزيعه أوبونتو اليت تدعم كل لغات العامل واجهة وكتابة (مبا فيها اللغة العربية)‪.‬‬

‫‪ ‬نظم تشغيل اهلاتف املتنقل‪ :‬مثل اندرويد(‪،Windows 10 Mobile ،iOS،)Android‬‬


‫و‪.Ubuntu phone‬‬

‫‪/https://www.uswitch.com/mobiles/guides/mobile-operating-systems‬‬

‫‪26‬‬
‫‪http://www.ubuntu.com/phone‬‬

‫نظم التشغيل للحاسبات املكتبية يوليو ‪0202‬‬


‫‪http://www.statista.com/statistics/218089/global-market-share-of-windows-7/‬‬

‫‪ .0.8‬أنواع أنظمة احلاسوب‬


‫نظام احلاسب هو عبارة عن مكوانت مادية (‪ )hardware‬وبرامج‪ .‬ختتلف أنظمة احلاسوب ِبختالف‬
‫االغراض اليت من أجلها صممت‪ ،‬وتتنوع يف السرعة واحلجم والشكل‪ ،‬سنتحدث عنها ِبختصار فيما يلي‪.‬‬

‫‪ .0.8.0‬احلاسبات املركزية (‪)Mainframe Systems‬‬


‫احلاسبات املركزية عبارة عن جهاز حاسوب مركزي واحد تتصل به عدة طرفيات تسمى الطرفيات العمياء ( ‪dump‬‬
‫‪ ، )terminal‬هذه الطرفيات عبارة عن شاشة ولوحة مفاتيح‪ ،‬ليس هبا ذاكرة أو معاجل وإمنا تستخدم معاجل وذاكرة‬
‫احلاسب املركزي‪.‬‬

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

‫شكل رقم ‪ :8-0‬احلاسب املركزي ‪( IBM Z900‬عام ‪.]0[ )0222‬‬

‫‪ .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‬منتشرة ومتوفرة وقد حلت حمل احلاسبات أحادية املعاجل‪ .‬السبب يف ظهور‬
‫تعدد املعاجلات هو اخنفاض سعر املعاجلات واحلاسبات الشخصية‪ .‬نظم التشغيل اليت تدير هذا النوع من النظم تنقسم‬
‫إىل نوعني مها‪:‬‬

‫‪ .0.8.5.0‬املعاجلات املتماثلة )‪Symmetric multiprocessing (SMP‬‬

‫معاجلات مربوطة ِبحكام (‪ )tightly coupled‬وتتشارك الذاكرة ونواقل الدخل واخلرج‪( .‬أو ممر‬
‫البياانت)‪.‬‬

‫عرفت ويكيبيدَي املعاجلات املتعددة واملتماثلة (‪ )symmetric multiprocessing : SMP‬أبهنا‪:‬‬


‫أجهزة حاسوب متلك عدة معاجلات متطابقة وترتبط بذاكرة واحدة مشرتكة ويديرها نظام تشغيل واحد‪ .‬وهي اهلندسة‬
‫األكثر استعماال بني معظم األنظمة متعددة املعاجلات‪ .‬كما تستعمل يف األنظمة متعددة األنوية حيث تعترب كل نواة‬
‫كوحدة معاجلة مستقلة‪.‬‬

‫‪ .0.8.5.0‬املعاجلات غري املتماثلة ‪Asymmetric multiprocessor‬‬

‫يوجد معاجل رئيسي واحد يتحكم يف النظام وينفذ مهمة رئيسية كبرية‪ ،‬بينما بقية املعاجلات تنفذ ما أيمرها به‬
‫هذا املعاجل الرئيسي‪ ،‬فهو قد يقسم املهمة الكبرية إىل أجزاء صغرية يوزعها على بقية املعاجلات مث جيمع النتائج بعد‬
‫التنفيذ‪.‬‬

‫‪29‬‬
‫‪ .0.8.4‬األنظمة املوزعة‬
‫توزيع العمل عرب الشبكة إىل عدة حاسبات‪ ،‬هذه احلاسبات قد تكون قريبة أو بعيدة‪ ،‬وكل حاسب لديه‬
‫معاجله‪ ،‬ذاكرته‪ ،‬وقرصه وأجهزته الطرفية اخلاصة به‪ .‬وقد تكون هذه األجهزة متباينة يف املكوانت املادية ونظم التشغيل‬
‫اليت تديرها‪.‬‬

‫امليزات‪:‬‬

‫‪ ‬التشارك يف املوارد‪.‬‬
‫‪ ‬زَيدة سرعة التنفيذ‪.‬‬
‫‪ ‬توزيع احلمل بني هذه احلاسبات (‪.)load balancing‬‬
‫العيوب‪:‬‬

‫‪ ‬زمن االتصال بني أجزاء النظام قد يؤثر على أداء النظام ككل‪.‬‬

‫‪ .0.8.3‬األجهزة املتجمعة (‪)Clustered Systems‬‬


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

‫شكل رقم ‪ :3-0‬جتمع حاسبات جبامعة السودان‪.‬‬

‫‪30‬‬
‫‪ .0.8.2‬األجهزة ذات الزمن احلقيقي (‪)Real-time‬‬
‫هي حواسيب موجودة يف أجهزة حتكم مثل‪:‬‬

‫‪ ‬أجهزة جتميع السيارات‪.‬‬


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

‫‪https://marine.rutgers.edu/pubs/private/Glenn_2000/tos2/figure1.jpg‬‬

‫شكل رقم ‪ :02-0‬العنكبوت اآليل [‪.]4‬‬

‫‪31‬‬
‫‪ .0.8.5‬األجهزة الكفية (‪)hand held‬‬
‫هذه األجهزة صغرية غالبا ما حتمل يف اجليب أو يف الكف ومن هنا جاءت تسميتها ِبألجهزة الكفية‬
‫(‪ )hand held‬أو اجليبية (‪ ،)pocket PC‬وتتصف ِبآليت‪:‬‬

‫‪ ‬حجم صغري‪.‬‬
‫‪ ‬ذاكرة حمدودة‪.‬‬
‫‪ ‬معاجل بطيء‪.‬‬
‫‪ ‬شاشة صغرية‪.‬‬
‫‪ ‬بطارية حمدودة التشغيل‪.‬‬
‫نظام التشغيل هلذا النوع من األجهزة يدعم احملاداثت التلفونية والتصوير الرقمي وتبادل البياانت مع األجهزة‬
‫األخرى عرب الشبكات الالسلكية والبلوتوث‪ .‬كما يهدف نظام التشغيل هنا على احملافظة على البطارية‪ ،‬والتعامل مع‬
‫الشاشات الصغرية وتوفري طرق سهلة للتعامل مع األوامر عرب شاشة ملس (يف شكل نقرات دون احلاجة الستخدام لوحة‬
‫املفاتيح اليت يكون التعامل معها صعبا لصغر حجمها)‪ .‬أمثلة لنظم التشغيل اليت تعمل على هذا النوع من األنظمة‪:‬‬
‫‪Palm, Windows Mobile, Symbian, Andriod.‬‬

‫‪ .0.8.8‬األنظمة املضمنة (‪)Embedded Systems‬‬


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

‫الفرق بني احلاسبات الكفية واملضمنة أن األخرية ال ميكن إضافة برامج جديدة إليها‪ ،‬فهي اتيت برباجمها خمزنة‬
‫يف ذاكرة ‪ ROM‬من الشركة‪.‬‬

‫شكل رقم ‪ :00-0‬االجهزة املضمنة [‪.]3‬‬


‫‪32‬‬
‫‪ .0.8.3‬أنظمة البطاقات الذاكية (‪)Smart card Systems‬‬
‫البطاقات الذكية هي كروت بالستيكية حبجم البطاقة اإلئتمانية مزودة برقاقة الكرتونية صغرية هلا القدرة على‬
‫معاجلة املعلومات‪ ،‬وهذا يعين اهنا متتلك القدرة على استقبال البياانت او املدخالت ومعاجلتها من خالل الربجميات‬
‫املثبتة على هذه الشرحية‪ .‬متتلك هذه البطاقة ذاكرة وطاقة حتويل إلكرتوين تتخذ أساليب دفع خمتلفة مثل الدفع‬
‫اإللكرتوين كبطاقة إئتمانية‪ ،‬التأمني الصحي‪ ،‬التعرف على الشخصية (بدل البطاقة الشخصية) وغريها من املهام‪.‬‬

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

‫عناصر البطاقة الذكية ("‪)Guo, Heng. "Smart Cards and their Operating Systems.‬‬

‫شكل رقم ‪ :00-0‬بطاقة ذكية [‪.]2‬‬

‫‪ .0.8.02‬أنظمة املخدمات (‪)Server Systems‬‬

‫هي أجهزة سريعة وقوية تستخدم لتوفري خدمات لبقية األجهزة يف الشبكة‪ .‬هنالك نظم تشغيل خاصة هبذه‬
‫االجهزة مثل ‪ .Ubuntu Server ،Windows Advanced Server‬حيث تدعم هذه النظم أهم صفة‬

‫‪33‬‬
‫تتصف هبا املخدمات وهي إاتحة املشاركة بني املستخدمني وخدمة أكرب عدد منهم يف وقت واحد‪ .‬مثال خمدم الويب‬
‫(‪ )web server‬يسمح لعدد كبري من املتصفحني من االتصال يف نفس الوقت وتصفح املواقع‪.‬‬

‫األنظمة أعاله متنوعة يف الشكل والغرض وِبلتايل البد من إدارة كل نوع بطريقة خمتلفة‪ .‬وِبلتايل خيتلف‬
‫اهلدف من بناء نظام تشغيل ِبختالف هذه األنظمة‪.‬‬

‫‪ .0.3‬ملخص‬
‫لقد بدأت احلاسبات من غري نظم تشغيل لذلك كان استخدامها حمصورا على املهندسني املختصني‪ ،‬مث‬
‫تطورت صناعة املكوانت املادية والربامج إىل أن وصلنا لنظم تشغيل متكن أي شخص عادي من التعامل مع احلاسب‬
‫بكل سهولة ويسر‪.‬‬

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

‫‪ .0.02‬متارين حملولة‬
‫أختار اإلجابة الصحيحة (قد تكون هنالك أكثر من إجابة صحيحة)‬

‫تنقسم نواة نظام التشغيل إىل ‪ 3‬أجزاء رئيسية منها‪:‬‬

‫‪ ‬مدير الشاشة‬

‫‪ ‬مدير األجهزة‪)0( .‬‬

‫‪ ‬مدير القرص الصلب‪.‬‬

‫‪ ‬مدير القرص الضوئي‬

‫ما الذي يعترب واجة من واجهات نظام التشغيل‪:‬‬

‫‪ ‬سطح املكتب (‪)0‬‬

‫‪34‬‬
‫‪ ‬املتصفح‬

‫‪ ‬واجهة نداء النظام (‪)0‬‬

‫‪ ‬ال شيء مما ذكر‪.‬‬

‫مثال لنظام تشغيل أحادي الربامج ‪:‬‬

‫‪)0( DOS ‬‬


‫‪ ‬ويندوز ‪XP‬‬
‫‪ ‬لينكس‬
‫‪ ‬ماك‬
‫من نظم التشغيل التايل‪:‬‬

‫‪ ‬رينكس‬

‫‪ ‬زينكس‬

‫‪ ‬ماك (‪)0‬‬

‫‪ ‬ال شيء مما ورد‬

‫يتميز تعدد املعاجلات أبنه‪:‬‬

‫‪ ‬كثري التكلفة‬

‫‪ ‬سريع (‪)0‬‬

‫‪ ‬معقد‬

‫‪ ‬إذا تعطل معاجل فسيتوقف النظام‬

‫من امليزات اليت ال توجد يف األنظمة املوزعة ‪:‬‬

‫‪ ‬التشارك يف املوارد‪.‬‬

‫‪ ‬زَيدة سرعة التنفيذ‪.‬‬

‫‪ ‬توزيع احلمل بني هذه احلاسبات‬

‫‪35‬‬
‫‪ ‬ال شيء مما ذكر (‪)0‬‬

‫األجهزة الكفية (‪ )hand held‬تتصف ِبآليت‪:‬‬

‫‪ ‬حجم صغري‪)0( .‬‬

‫‪ ‬ذاكرة كبرية‪.‬‬

‫‪ ‬معاجل سريع‪.‬‬

‫‪ ‬شاشة صغرية‪)0( .‬‬

‫من أمثلة نظم تشغيل احلاسبات الكفية ‪:‬‬

‫‪ِ ‬بمل ‪)0( Palm‬‬


‫‪ ‬ينكس ‪Unix‬‬
‫‪ ‬سيمبيان ‪)0( Symbian‬‬
‫‪ ‬زينكس ‪Zenex‬‬

‫الفرق بني احلاسبات الكفية واملضمنة أن األجهزة املضمنة‪:‬‬

‫‪ ‬صغرية املعاجل‬
‫‪ ‬ذاكرهتا حمدودة‬
‫‪ ‬ال ميكن إضافة برامج جديدة إليها (‪)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 .‬‬ ‫‪‬‬

‫‪ .0.00‬متارين غري حملولة‬


‫ما هي صفات احلاسبات القدمية ؟‬ ‫‪.0‬‬

‫هل ميكن استخدام احلاسب بدون نظام تشغيل (وضح) ؟‬ ‫‪.0‬‬

‫عرف نظام التشغيل ؟‬ ‫‪.5‬‬

‫كيف يدير نظام التشغيل موارد احلاسب ؟‬ ‫‪.4‬‬

‫ماذا نقصد إبن نظام التشغيل برانمج حتكمي ؟‬ ‫‪.3‬‬

‫أذكر مخسة أمثلة لنظم تشغيل ؟‬ ‫‪.2‬‬

‫ما هي أهداف نظام التشغيل ؟‬ ‫‪.5‬‬

‫أذكر ثالث أمثلة ألنظمة حاسوب خمتلفة ؟‬ ‫‪.8‬‬

‫ما هي مميزات األنظمة املوزعة ؟‬ ‫‪.3‬‬

‫ما هو الفرق بني األجهزة اجملمعة والنظم املوزعة ؟‬ ‫‪.02‬‬

‫ما الفرق بني تعدد املعاجلات واألنظمة املوزعة ؟‬ ‫‪.00‬‬

‫ما هي أهم صفة يف أنظمة الزمن احلقيقي (‪ )real-time‬؟‬ ‫‪.00‬‬

‫أذكر ثالث أمثلة ألجهزة حتتوي حاسوب مضمنة ؟‬ ‫‪.05‬‬

‫‪37‬‬
‫ما الفرق الرئيسي بني األنظمة الكفية واألنظمة املضمنة ؟‬ ‫‪.04‬‬

‫ما هي صفات األجهزة الكفية ؟‬ ‫‪.03‬‬

‫ماالفرق بني احلواسيب املتماثلة والغري متماثلة يف تعدد املعاجلات ؟‬ ‫‪.02‬‬

‫تتكون واجهات نظام التشغيل من ثالث مكوانت‪ ،‬ما هي؟‬ ‫‪.05‬‬

‫مالفرق الرئيسي بني تعدد الربامج واملشاركة الزمنية؟‬ ‫‪.08‬‬

‫وضح الفرق بني نظم التشغيل أحادية الربامج ونظم التشغيل متعددة الربامج مع ذكر مثال لنظام تشغيل‬ ‫‪.03‬‬
‫من كل نوع؟‬

‫هل لكل نظم التشغيل واجهة مستخدم رسومية ؟‬ ‫‪.02‬‬

‫كم نداء نظام يوجد يف ويندوز ‪ ،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‬عملية احلوسبة (‪)computing‬‬


‫تتم معظم عمليات احلوسبة يف أربعة خطوات رئيسية‪ ،‬الشكل (‪ ،)0-0‬هي‪:‬‬

‫‪ .0‬إدخال بياانت‪.‬‬

‫‪ .0‬معاجلة املدخالت‪.‬‬

‫‪ .5‬إخراج معلومات (نتيجة املعاجلة)‪.‬‬

‫‪ .4‬االحتفاظ ِبملدخالت و‪/‬أو ِبلنتائج (املخرجات) الستخدامها فيما بعد (التخزين الدائم)‪.‬‬

‫شكل رقم (‪ :)0-0‬عملية احلوسبة (‪.)computing‬‬

‫تتكرر هذه اخلطوات األربعة ِبستمرار‪ .‬وجند أن املكوانت املادية والربامج تدور يف حمور هذه اخلطوات‪.‬‬
‫فإلدخال معلومة إىل احلاسب سنحتاج جهاز وتحتاج برانمج يدير هذا اجلهاز‪ .‬وملعاجلة املدخالت (تنفيذها) البد من‬
‫جهاز للتنفيذ وبرانمج يدير هذا اجلهاز‪ .‬وإلخراج النتيجة البد من جهاز خيرج النتائج وبرانمج يقوم إبدارة هذا اجلهاز‪.‬‬
‫ولتخزين املدخل أو النتيجة البد من جهاز ختزين وبرانمج يدير عمليات التخزين هذه‪.‬‬

‫‪40‬‬
‫إذن ميكن تقسيم املكوانت املادية حسب اخلطوات أعاله إىل أربعة أجزاء رئيسية (كما مبني يف الشكل (‪،))0-0‬‬
‫وهي‪:‬‬

‫‪ .0‬أجهزة الدخل (‪.)Input devices‬‬

‫‪ .0‬أجهزة املعاجلة (املعاجل والذاكرة (‪.))Processor & main memory‬‬

‫‪ .5‬أجهزة اخلرج (‪.)Output devices‬‬

‫‪ .4‬أجهزة التخزين الثانوية (‪.)Secondary storage‬‬

‫شكل رقم (‪ :)0-0‬أجزاء احلاسب [‪.]5‬‬

‫نستخدم أجهزة الدخل إلدخال املعلومات واألوامر للحاسب‪ ،‬فتخزن مؤقتا يف الذاكرة الرئيسية مث تتم‬
‫معاجلتها بواسطة املعاجل‪ ،‬مث خترج النتائج ِبلذاكرة الرئيسية و تظهر غالبا على أجهزة اخلرج‪ ،‬وميكن اإلحتفاظ بنسخة‬
‫من املدخالت‪/‬املخرجات يف القرص الصلب أو أي جهاز ختزين اثنوي (حفظ دائم)‪.‬‬

‫الربامج اليت تدير أجزاء احلاسب هي أجزاء نظام التشغيل وهي مقسمة كالتايل‪:‬‬

‫‪ ‬مدير األجهزة‪ :‬يدير أجهزة الدخل واخلرج‪.‬‬

‫‪ ‬مدير العمليات‪ :‬يدير املعاجل ويقوم بتشغيل الربامج عليه‪.‬‬

‫‪ ‬مدير الذاكرة‪ :‬يدير الذاكرة الرئيسية‪.‬‬

‫‪ ‬مدير امللفات‪ :‬يقوم إبدارة امللفات وطرق ختزينها‪.‬‬

‫‪ ‬مدير الشبكة‪ :‬يدير موارد الشبكات واليت تتعلق ِبالتصاالت اخلارجية‪.‬‬

‫‪41‬‬
‫كل جزء من أجزاء نظام التشغيل أعاله مكلف إبعمال على املكوانت املادية اليت يديرها‪ ،‬مثل‪:‬‬

‫‪ ‬مراقبة املكوانت املادية بصورة مستمرة‪.‬‬

‫‪ ‬حتديد وتنفيذ السياسات اليت حتدد من يستخدم ماذا؟ مىت وكيف ؟‬

‫‪ ‬حجز املكوانت املادية يف الوقت املناسب‪.‬‬

‫‪ ‬حترير املكوانت املادية يف الوقت املناسب‪.‬‬

‫شكل رقم (‪ :)5-0‬أجزاء نظام التشغيل الرئيسية [‪.]8‬‬

‫‪ .0.0‬أجزاء احلاسب‬
‫تتكون احلاسبات احلديثة من معاجل أو أكثر‪ ،‬متحكمات‪ ،‬انقل يربط املعاجل واملتحكمات بذاكرة مشرتكة‪،‬‬
‫الشكل (‪.)4-0‬‬

‫شكل رقم (‪ :)4-0‬منوذج حلاسب شخصي [‪.]3‬‬

‫‪42‬‬
‫‪ .0.0.0‬املتحكم (‪)controller‬‬

‫كل جهاز مرتبط مبتحكم (‪ ،)controller‬حيث جند أن‪:‬‬

‫‪ ‬املتحكم يعمل دوما يف خدمة اجلهاز‪.‬‬

‫‪ ‬قد يكون اجلهاز معقد جدا فيوفر املتحكم واجهة بسيطة يتعامل هبا نظام التشغيل مع اجلهاز‪.‬‬

‫‪ ‬يوجد بكل متحكم ذاكرة تسمى اخلازن (‪ )buffer‬تساعد يف عملية نقل البياانت بني اجلهاز والذاكرة‬
‫الرئيسية‪.‬‬

‫‪ ‬يوجد يف بعض املتحكمات معاجل يقوم ِبلتعامل مع اجلهاز وتفاصيله املعقدة‪ ،‬مثال يقوم معاجل متحكم‬
‫الشاشة حبساب القيم والنقاط اليت جيب رمسها على الشاشة‪ ،‬بينما يرسل املعاجل الرئيسي املعلومات وأين جيب‬
‫أن تظهر يف الشاشة‪.‬‬

‫‪ ‬ميكن أن تعمل املتحكمات مع املعاجل يف وقت واحد ِبلتوازي (‪.)concurrently‬‬

‫‪ ‬متحكم الذاكرة الرئيسية يقوم بتنظيم وصول املتحكمات األخرى واملعاجل للذاكرة بصورة تزامنية‪.‬‬

‫‪ ‬خازن املتحكم يساعد يف تسريع نقل البياانت بني الذاكرة الرئيسية واجلهاز‪ .‬فاجلهاز غالبا يرسل البياانت يف‬
‫شكل ِبيتات‪ ،‬جتمع يف ذاكرة املتحكم حىت متتلئ مث ترسل دفعة واحدة إىل الذاكرة‪ ،‬بدال من إرساهلا ِبيت‬
‫بعد ِبيت‪.‬‬

‫‪ .0.5‬املقاطعات (‪)Interrupts‬‬
‫املعاجلات احلديثة توفر طريقة متكن املكوانت املادية (أجهزة الدخل‪/‬اخلرج) من إرسال إشارة للمعاجل‪ ،‬تعترب‬
‫هذه اإلشارة طلب مقاطعة للمعاجل‪ .‬هذه املقاطعة توقف عمل املعاجل مؤقتا‪ ،‬لينفذ خدمة مطلوبة ( ‪interrupt‬‬
‫‪ .)service routine‬هنالك جمموعة من اخلدمات ختتلف إبختالف نظام التشغيل‪ ،‬وهي عبارة عن دوال خاصة‬
‫ِبملقاطعات‪ ،‬فكل مقاطعة تقابلها جمموعة من الدوال‪ ،‬عندما يتم إرسال املقاطعة إىل املعاجل يوقف ما كان يعمل فيه‪ ،‬مث‬
‫ينفذ دالة معينة من دوال املقاطعة (حتدد الدالة برقم يف مسجل معني)‪ ،‬مث يرجع املعاجل مرة أخرى ليواصل ما أوقفه قبل‬
‫إستالمه للمقاطعة‪.‬‬

‫قد تصدر مقاطعات من أكثر من جهاز‪ ،‬وعلى املعاجل أن يرد عليها مجيعها ِبلطريقة املناسبة ويف وقت قصري‪.‬‬
‫هنالك أنواع خمتلفة من املقاطعات ‪:‬‬

‫‪ ‬خارجية وتصدر من أجهزة الدخل‪/‬اخلرج‪.‬‬

‫‪43‬‬
‫‪ ‬داخلية قد تصدر من املؤقت (‪ ،)timer‬أو نتيجة عطل يف مكون مادي (‪ ،)hardware failure‬أو‬
‫من برانمج‪.‬‬

‫مثال إذا كان هنالك برانمج حتت التنفيذ (‪ P1‬مثال) إحتاج ملعلومة من جهاز دخل‪ ،‬فسيقوم املعاجل إبرسال طلب‬
‫املعلومة إىل جهاز الدخل املعين‪ ،‬مث يتحول لتنفيذ برانمج آخر (‪ P2‬مثال)‪ .‬عندما يصبح جهاز الدخل مستعد لنقل‬
‫البياانت‪ ،‬سريسل إشارة مقاطعة إىل املعاجل خيربه فيها أبن البياانت جاهزة‪ .‬سريد املعاجل على املقاطعة بتوقيف الربانمج‬
‫الثاين (‪ ،)P2‬وينتقل لتشغيل دالة املقاطعة (‪ )interrupt handler‬اليت تقوم إبكمال نقل البياانت‪ .‬يف هذا‬
‫اللحظة ميكن للمعاجل أن يواصل تشغيل الربانمج األول (‪.)P1‬‬

‫‪ .0.4‬الوضع الثنائي (‪)dual mode‬‬


‫للتنفيذ الصحيح لنظام التشغيل وفصله عن برامج املستخدم البد من طريقة للتمييز بني الربامج التابعة له‬
‫وبرامج املستخدم‪ .‬ذلك ألن برامج نظام التشغيل هلا صالحيات أعلى من اليت لربامج املستخدم‪.‬‬

‫هنالك خانة (بت ‪ )bit‬تضاف للمكوانت املادية‪ ،‬إذا كانت قيمة هذه البت صفر فهذا يعين أن الربانمج‬
‫يف وضع النواة (‪ ،)kernel mode‬أما إذا كانت البت حتتوي على واحد فهذا يعين أن الربانمج يف وضع املستخدم‬
‫(‪ .)user mode‬هبذه الطريقة نستطيع معرفة يف أي وضع يتم تنفيذ الربامج‪.‬‬

‫أحياان قد حيتاج برانمج ما‪ ،‬إىل استدعاء خدمة من نظام التشغيل (نداء نظام ‪ ،)system call‬يف هذه‬
‫احلالة البد هلذا الربانمج من أن يتغري وضعه من وضع املستخدم إىل وضع النواة‪ ،‬مث بعد إكتمال تنفيذ نداء النظام‬
‫سريجع الربانمج إىل وضع املستخدم مرة أخرى‪.‬‬

‫‪ .0.3‬املؤقت (‪)timer‬‬
‫من مهام نظام التشغيل التحكم يف املعاجل ومنع برامج املستخدمني من االستئثار هبذا املورد اهلام والعمل ملدة‬
‫طويلة داخل املعاجل‪ .‬مثال إذا كان هنالك برانمج ينفذ يف تكرار غري منتهي (‪ )infinite loop‬أو استدعى دالة‬
‫خدمة ومل يُعيد السيطرة لنظام التشغيل‪ ،‬فهذا يسبب إهدار لزمن املعاجل‪ .‬هنا البد لنظام التشغيل من آلية متكنه من‬
‫توقيف مثل هذه الربامج‪ ،‬وكان املؤقت (‪ )timer‬هو احلل‪.‬‬

‫‪ .0.3.0‬كيف يعمل املؤقت‪:‬‬

‫‪ ‬قبل تشغيل برانمج املستخدم يتأكد نظام التشغيل من أن املؤقت مرتبط مع مقاطعة‪.‬‬

‫‪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‬السرعة‬

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

‫مثال الزمن املستغرق لقراءة ِبيت‪:‬‬

‫‪ ‬من الذاكرة املخبأة (الكاش) هو ‪ 02‬اننو اثنية (‪.)ns‬‬

‫‪ ‬من الذاكرة الرئيسية (الرام) هو ‪ 022‬اننو اثنية (‪.)ns‬‬

‫‪ ‬من القرص الصلب ‪ 03‬ملي اثنية (‪.)ms‬‬

‫‪ .0.2.5‬السعة والسعر‬

‫النوع األول صغري احلجم ذلك ألن صناعته مكلفة إذا زدان حجمه يصبح سعره ِبهظاً وِبلتايل يؤثر يف سعر‬
‫احلاسب ككل‪ .‬أما النوع الثاين كبري احلجم الن صناعته غري مكلفة‪ ،‬فهو رخيص جداً مقارنة ِبألول‪.‬‬

‫إذن هنالك أربع عوامل متيز بني أنواع اهلرمية هي التطاير‪ ،‬السعة‪ ،‬السعر‪ ،‬والسرعة كما مبني يف الشكل (‪.)3-0‬‬

‫‪46‬‬
‫شكل رقم (‪ :)3-0‬التدرج اهلرمي للذاكرة‪.‬‬

‫‪ .0.2.4‬الذاكرة املخبأة (الكاش ‪)cache‬‬

‫الغرض من الذاكرة املخبأة هو متكني املعاجل من الوصول لبياانت الذاكرة الرئيسية بشكل سريع جدا‪ ،.‬لذلك‬
‫فالذاكرة املخبأة تؤثرا أتثريا كبريا على أداء املعاجل‪ .‬بعض املخابئ تعمل بسرعة املعاجل وتسمى ‪ L1‬بينما املخابئ‬
‫األخرى تعمل بنصف السرعة أو اقل وتسمى ‪ .L2‬املخبأ الصغري الذي يعمل بسرعة كاملة قد تكون أكثر نفعا من‬
‫خمبأ كبري يعمل بنصف سرعة املعاجل‪.‬‬

‫‪ .0.2.4.0‬كيف تزيد الذاكرة املخبأة سرعة املعاجل؟‬

‫إن سرعة الوصول للبياانت يف القرص الصلب (الذاكرة الثانوية) أبطأ ماليني املرات من سرعة الوصول‬
‫للبياانت يف الرام‪ ،‬لذلك تعترب الذاكرة الرئيسية (الرام) متطلباً أساسياً لتنفيذ الربامج‪ ،‬فال ميكن تنفيذ برانمج ما مل حيمل‬
‫هبا‪.‬‬

‫يف بداَيت تصنيع احلاسب كانت سرعة الذاكرة الرئيسية يساوي سرعة املعاجل ولكن مبرور الزمن تطورت‬
‫صناعة املعاجلات وصارت سرعتها عالية جدا مقارنة مع التطور يف صناعة الذاكرة الرئيسية‪ ،‬فلم تزيد سرعة الذاكرة‬
‫بنفس نسبة زَيدة سرعة املعاجل مما ولد فرق كبري بني السرعتني‪ .‬ومبا أن سرعة احلاسب ككل مرتبطة بسرعة أبطأ جهاز‬
‫به‪ .‬سنجد أنه البد من معاجلة هذا الفرق بني السرعتني بتحسني أداء الذاكرة لنستفيد من سرعة املعاجل‪ .‬فاملعاجل‬
‫سيبطئ عمله ليعمل بسرعة الرام وِبلتايل لن نستفيد من سرعة املعاجل ولن يظهر هذا يف أداء احلاسب ككل‪.‬‬

‫هنا جاءت الذاكرة املخبأة (الكاش) بني املعاجل والرام لتحل هذه املشكلة‪ ،‬حيث تعترب الكاش ذاكرة سريعة‬
‫تعمل بسرعة املعاجل وِبلتايل لن يتأثر أداء املعاجل حني يتعامل مع الكاش‪ ،‬شكل (‪.)2-0‬‬

‫‪47‬‬
‫شكل رقم (‪ (a) :)2-0‬حساِبت بدون كاش‪ (b) ،‬احلساِبت احلديثة حتتوي على كاش [‪.]8‬‬

‫طريقة تعامل املعاجل مع الذاكرة املخبأة تتم كالتايل‪:‬‬

‫‪ ‬يتم حتميل الربانمج من القرص الصلب إىل الرام‪.‬‬


‫‪ ‬يتم حتميل جزء من الربانمج املوجود يف الرام إىل الكاش‪.‬‬
‫‪ ‬يطلب املعاجل ما يريد من الكاش(حيضر بياانته من الكاش إىل املسجالت) للعمل عليها‪.‬‬
‫‪ ‬ستبحث الكاش عن البياانت اليت يريدها املعاجل بداخلها وإذا مل جتدها ستقوم إبحضارها من الرام‪ ،‬الشكل‬
‫(‪.)7-0‬‬

‫شكل رقم (‪ :)7-0‬تعامل الكاش مع الرام [‪.]02‬‬

‫‪ .0.5‬التخزين الرقمي للبياانت‬


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

‫‪48‬‬
‫شكل رقم (‪ :)8-0‬حتويل البياانت من الشكل التقليدي إىل الشكل الرقمي والعكس [‪.]00‬‬

‫يتم ذلك عن طريق أجهزة وبرامج تقوم بتحويل البياانت من الشكل التقليدي إىل األرقام الثنائية عند‬
‫اإلدخال‪ ،‬فنقوم تحن ِبإلدخال ِبلصورة التقليدية وتقوم األجهزة والربامج الوسيطة بتحويل البياانت التقليدية إىل أصفار‬
‫و آحاد قبل ختزينها يف احلاسب وهبذا تتحول البياانت إىل الشكل الذي يفهمه احلاسب دون تدخل منا‪ .‬كذلك عند‬
‫ما تظهر املخرجات ِبلشكل التقليدي فهذا ألن هنالك أجهزة وبرامج وسيطة حتول املخرجات من أصفار و آحاد‬
‫(الشكل املخزن ِبحلاسب) إىل الشكل التقليدي قبل إظهارها يف الشاشة أو مساعها‪ ،‬أنظر الشكل (‪ .)8-0‬أي أن‬
‫كل معلوماتنا عندما ختزن يف ذاكرة احلاسب تكون خليط من اآلحاد و األصفار‪.‬‬

‫يظهر هنا سؤال هام هو‪ ،‬كيف مييز احلاسب بني املعلومات والرموز واألشكال إذا كانت كلها خليط من‬
‫األصفار واآلحاد ؟ اإلجابة ِبستخدام التشفري كما سنوضح يف الفقرة (‪.)0.0.0‬‬

‫ال تعترب أجهزة الدخل واخلرج جزء من احلاسب وإمنا هي أدوات إلدخال البياانت وإظهار النتائج‪،‬‬
‫فهي السبيل الذي نتعامل به مع احلاسب‪ .‬هنالك بعض احلاسبات ال حتتاج هذه األجهزة‪.‬‬

‫‪ .0.5.0‬متثيل البياانت داخل احلاسب‬


‫الرموز واألرقام واحلروف اليت نستخدمها يف لوحة املفاتيح هلا مقابل من األرقام الثنائية (خليط من األصفار‬
‫واآلحاد) ‪ ،‬فكل رقم وكل رمز وكل حرف يف لوحة املفاتيح له قيمة ثنائية متثله داخل احلاسب‪ ،‬مثال اجلدول (‪)0-0‬‬
‫يوضح قيم الرموز واحلروف للحاسبات اليت تستخدم شفرة آسكي (‪ ،)ASCII‬عندما نضغط على الرمز أو احلرف‬
‫يف لوحة املفاتيح ختزن القيمة املقابلة له (كما يف اجلدول) بذاكرة احلاسب‪.‬‬

‫‪49‬‬
‫هنالك العديد من الشفرات املستخدمة لتمثيل البياانت يف احلاسب مثل‪:‬‬

‫‪ ‬شفرة ‪ :EBCDIC‬الشفرة الثنائية املوسعة للتبادل العشري‬

‫‪ ‬شفرة آسكي (‪ : )ASCII‬الشفرة األمريكية النمطية لتبادل املعلومات‪.‬‬

‫‪ ‬الشفرة املوحدة ‪.Unicode‬‬

‫اآلن معظم نظم التشغيل تستخدم الشفرة املوحدة ‪ ،Unicode‬وهي تدعم اللغة العربية‪ ،‬أي ان هنالك قيمة ثنائية‬
‫لكل حرف من احلروف العربية‪.‬‬

‫جدول (‪ :)0-0‬شفرة آسكي لتمثيل الرموز [‪.]00‬‬

‫الشفرة املوحدة لتمثيل احلروف العربية‬


‫‪http://www.unicode.org/charts/PDF/U0600.pdf‬‬

‫‪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.8.0‬اإلقالع (‪)Booting‬‬
‫عندما نفتح احلاسب تتم اخلطوات التالية‪:‬‬

‫‪ ‬أول برانمج يشتغل هو برانمج خمزن بذاكرة القراءة فقط (‪ .)ROM‬يقوم هذا الربانمج ِبختبار املكوانت‬
‫املادية والتأكد من أن كل أجزاء احلاسب سليمة وموصلة بطريقة صحيحة‪ .‬يسمى هذا الربانمج برانمج‬
‫االختبار الذايت ()‪.)Power On Self Test (POST‬‬

‫‪ ‬بعد جناح عملية االختبار يشتغل برانمج آخر يسمى ‪ ، bootstrap loader‬وهو برانمج صغري جداً‬
‫وموجود بذاكرة القراءة فقط (‪ )ROM‬أو أي ذاكرة غري متطايرة‪ .‬مهمة هذا الربانمج هي البحث عن نظام‬
‫التشغيل وحتميله ِبلذاكرة الرئيسية وتسليمه التحكم ِبحلاسب‪.‬‬

‫‪ ‬هنا تنتهي مهمة هذا برانمج ‪ bootstrap loader‬ويستلم نظام التشغيل التحكم ِبحلاسب ليدير‬
‫املكوانت املادية ويوفر واجهة للمستخدم والتطبيقات‪.‬‬

‫‪52‬‬
‫‪ .0.8.0‬التعامل مع نظام التشغيل‬
‫بعد حتميل نظام التشغيل وتسليمه قيادة احلاسب‪ ،‬سيكون هو الواجهة اليت يتعامل معها املستخدم‪ ،‬فهو‬
‫الذي يستجيب لطلباته ويشغل براجمه ويقوم بكل ما يريده‪ .‬فهو مدير احلاسب وهو الذي يتعامل مباشرة مع املكوانت‬
‫املادية بينما نتعامل تحن وبراجمنا معه ونطلب منه ما نريد‪ ،‬ولديه مطلق احلرية يف تنفيذ طلباتنا أو رفضها حسب‬
‫إسرتاتيجيته وأمهية طلباتنا‪.‬‬

‫مثال عندما يظهر سطح املكتب يف ويندوز فهذا يعين أن نظام التشغيل جاهزا لتلقي أوامر املستخدمني اليت‬
‫قد تكون‪:‬‬

‫‪ ‬استخدام مباشرة للخدمات اليت توفرها الواجهة (سطح املكتب)‪.‬‬

‫‪ ‬تشغيل برانمج‪ :‬هنا يقوم املستخدم إبرسال طلب لنظام التشغيل أبنه يريد تشغيل برانمج معني وذلك ِبلنقر‬
‫املزدوج على أيقونة الربانمج فيقوم نظام التشغيل ِبلبحث عن الربانمج يف مكان ختزينه الدائم وحتميله إىل‬
‫الذاكرة الرئيسية وتسليمه القياد فرتى برانجمك يعمل أمامك‪.‬‬

‫البد من حتميل الربانمج للذاكرة الرئيسية قبل تنفيذه‪:‬‬


‫من املعلوم أن معظم براجمنا مبا فيها نظام التشغيل خمزنة ِبلقرص الصلب‪ ،‬ولكن املعاجل ال ينفذ أي‬
‫برانمج ما مل حيمل إىل الذاكرة الرئيسية‪ ،‬لذلك جند أن عملية تنفيذ الربامج تبدأ بتحميل الربانمج‬
‫إىل الذاكرة الرئيسية وهنا نقول أن الربانمج جاهز للتنفيذ (‪ ،)ready‬وكلما كان الربانمج كبريا‬
‫كلما استغرق حتميله وقتاً أطول‪.‬‬

‫‪ .0.8.5‬تنفيذ الربامج‬

‫الربانمج هو سلسلة من األوامر (التعليمات) تنفذ متسلسلة (أمر تلو اآلخر) (ليس يف الربجمة املتوازبة)‪ ،‬ويقوم‬
‫املعاجل بتنفيذ كل أمر يف مخس مراحل هي‪:‬‬

‫‪ ‬إحضار األمر (‪ :)fetch‬هنا تحضر األمر من الذاكرة الرئيسية وخنزنه يف مسجل (داخل املعاجل)‪.‬‬

‫‪ ‬فهم وتفسري األمر (‪ :)decode‬هنا يقوم املعاجل ِبلعمل على األمر لفهمه ومعرفة ما إذا كان حيتاج بياانت‬
‫إضافية من الذاكرة ام ال؟ مثال إذا كان األمر (أمجع) فهذا يعين أننا تحتاج إحضار الرقمني املراد مجعهم من‬
‫الذاكرة الرئيسية‪.‬‬

‫‪53‬‬
‫‪ ‬إحضار البياانت اإلضافية (‪ :)fetch operands‬هنا تحضر البياانت اليت حيتاجها األمر من الذاكرة‬
‫الرئيسية (إذا كان األمر حيتاج بياانت إضافية حسب اخلطوة ‪ 0‬أعاله) ونضعها يف مسجالت داخل املعاجل‪.‬‬

‫‪ ‬التنفيذ (‪ :)execute‬ينفذ األمر بواسطة وحدة احلساب واملنطق اليت تعترب جزءاً من املعاجل‪.‬‬

‫‪ ‬التخزين‪ :‬هنا ختزن نتائج يف مسجالت داخل املعاجل‪.‬‬

‫يكرر املعاجل اخلطوات أعاله على كل أمر من أوامر الربانمج حىت ينتهي التنفيذ‪ ،‬شكل (‪.)00-0‬‬

‫شكل رقم (‪ :)00-0‬دورة تنفيذ األوامر [‪.]00‬‬

‫‪ .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‬ميكرواثنية‪.‬‬

‫‪ .0.00‬متارين غري حملولة‬


‫‪ .0‬يقوم املعاجل بتنفيذ كل أمر يف مخس مراحل‪ ،‬ما هي ؟‬

‫‪ .0‬ما هي العوامل اليت تؤثر على هرمية الذاكرة (أربعة عوامل)‪.‬‬

‫‪ .5‬ما الفرق بني الكاش ‪ ، L1‬الكاش ‪ ،L2‬وأيهما أسرع وملاذا ؟‬

‫‪ .4‬ما معىن ‪ cache miss‬؟ و ما معىن ‪ cache hit‬؟‬

‫‪ .3‬ما هي مهام املتحكم (‪ )controller‬؟‬

‫‪ .2‬ما الفرق بني وضع املستخدم (‪ )user mode‬ووضع النواة (‪)kernel mode‬؟‬

‫‪ .5‬أذكر عناصر هرمية الذاكرة مرتبة من األبطأ إىل األسرع ؟‬

‫‪ .8‬ما هي العوامل اليت تؤثر يف ترتيب هرمية الذاكرة (‪ 4‬عوامل) ؟‬

‫‪ .3‬هنالك العديد من الشفرات املستخدمة لتمثيل البياانت يف احلاسب‪ ،‬أذكر ثالث منها ؟‬

‫‪55‬‬
‫‪ .02‬أذكر ِبختصار خطوات إقالع احلاسب ؟‬

‫‪ .00‬تتم معظم عمليات احلوسبة يف أربعة خطوات رئيسية‪ ،‬أذكر هذه اخلطوات مع حتديد املكوانت املادية اليت‬
‫حتتاجها كل خطوة ؟‬

‫‪ .00‬ملاذا ال خيزن احلاسب سوى األرقام الثنائية (الصفر والواحد) ؟‬

‫‪ .05‬أذكر أجزاء نظام التشغيل اخلمسة واليت تدير موارد احلاسب ؟‬

‫‪ .04‬كل جزء من أجزاء نظام التشغيل مسئول عن أعمال جتاه املوارد اليت يدير‪ ،‬ما هي هذه األعمال ؟‬

‫‪ .03‬ملاذا مل تكن هنالك ذاكرة خمبأة (كاش) بداَيت الثمانينات (‪ ،)0382‬وما هو سبب ظهور الكاش ؟‬

‫‪56‬‬
‫الباب الثالث‪ :‬العمليات‬

‫‪57‬‬
‫الباب الثالث‬

‫إدارة العمليات (‪)Processes Management‬‬

‫إدارة العمليات هو جزء هام من نظام التشغيل ويعتين بكل ما يتعلق ِبلعمليات من‪:‬‬

‫‪ ‬العمليات (‪.)processes‬‬

‫‪ ‬اخليوط أو العمليات اخلفيفة (‪.)Threads‬‬

‫‪ ‬جدولة املعاجل (‪.)CPU scheduling‬‬

‫‪ ‬تزامن العمليات (‪.)Process synchronization‬‬

‫‪ ‬االختناق بني العمليات (‪.)Deadlocks‬‬

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

‫‪ .5.0‬مقدمة‬
‫قدميا كانت نظم التشغيل تسمح فقط بتشغيل برانمج واحد يف اللحظة الواحدة‪ ،‬هذا الربانمج يتحكم‬
‫ويستأثر بكل موارد احلاسب من معاجل وذاكرة وأجهزة دخل وخرج وملفات‪ ،‬وغريها‪ .‬اآلن أصبحت نظم التشغيل‬
‫احلديثة تسمح ألكثر من برامج أبن يعمل يف وقت واحد متشاركة يف املوارد مما أسهم بشكل فعال يف حتسني أداء‬
‫احلاسب وزَيدة إنتاجيته‪.‬‬

‫أيضا اإلدارة اجليدة ملوارد احلاسب من قبل نظام التشغيل تؤثر أتثريا مباشرا على األداء‪ .‬من املوارد اهلامة اليت جيب‬
‫االعتناء هبا واالهتمام أبدائها هو املعاجل الذي يقوم تنفيذ كل براجمنا‪.‬‬

‫هذه الربامج قد تكون برامج نظام التشغيل‪ ،‬املرتمجات‪ ،‬األوفيس‪ ،‬األلعاب‪ ،‬وبرامج املستخدم األخرى‪.‬‬

‫يتحول الربانمج إىل عملية عند ما نقوم بتشغيله‪.‬‬

‫‪58‬‬
‫‪ .5.0‬مفهوم العملية (‪)Process Concept‬‬
‫الربانمج يكون يف شكل ملف عندما يكون خمزن ِبلقرص الصلب (أو أي وسيط ختزين اثنوي) وعندما ننقر‬
‫عليه نقرا مزدوجا فإننا نطلب من نظام التشغيل تنفيذه‪ ،‬فيقوم نظام التشغيل بتحميله من القرص الصلب (أو وسيط‬
‫التخزين املوجود به مثل الفالش أو األسطوانة) إىل الذاكرة الرئيسية (الرام) ليبدأ التنفيذ‪ ،‬هنا يتغري اسم الربانمج من‬
‫ملف إىل عملية‪.‬‬

‫العملية هي برانمج شغال (حتت التنفيذ)‪ ،‬أحياان نطلق عليها عمل (‪ )job‬أو مهمة (‪.)task‬‬

‫عند تنفيذ الربانمج داخل املعاجل تسلسليا (أمر تلو اآلخر) ستكون خطوات تنفيذه كما يلي‪:‬‬

‫‪ .0‬حتميل الربانمج يف الذاكرة الرئيسية‪.‬‬

‫‪ .0‬وضع عنوان بداية الربانمج (عنوان أول أمر ِبلربانمج) يف مسجل داخل املعاجل يسمى عداد الربانمج‬
‫()‪.)program counter (PC‬‬

‫‪ .5‬يقوم املعاجل إبحضار أول أمر ِبلربانمج‪( ،‬هذا األمر نعرف مكانه من خالل عداد الربانمج) من الذاكرة‬
‫الرئيسية ويتم ختزينه يف مسجل داخل املعاجل‪.‬‬

‫‪ .4‬زَيدة عداد الربامج ليشري إىل األمر الذي يليه‪.‬‬

‫‪ .3‬فهم وتنفيذ األمر الذي أحضرانه‪.‬‬

‫‪ .2‬إحضار األمر الذي يليه (الذي يشري له عداد الربامج)‬

‫‪ .5‬زَيدة عداد األوامر ليشري إىل األمر الذي يليه‪.‬‬

‫‪ .8‬فهم وتنفيذ االمر الذي ِبملعاجل‪.‬‬

‫‪ .3‬انتقل إىل اخلطوة ‪ ،2‬وهكذا نكرر هذه اخلطوات إىل أن ينتهي تنفيذ الربانمج‪.‬‬

‫‪ .5.5‬حاالت العملية (‪)process states‬‬


‫حتميل الربامج يف الذاكرة جيعل هذه الربامج جاهزة للتنفيذ (‪ ،)ready‬عند بداية تنفيذ الربانمج داخل املعاجل‬
‫يصبح شغال (‪ ،)running‬قد يستمر املعاجل يف تنفيذ الربانمج حىت يكتمل‪ ،‬وقد يوقف املعاجل الربانمج الشغال‬

‫‪59‬‬
‫(مؤقتا) لسبب ما‪ ،‬فيصبح الربانمج يف هذه احلالة حمجوز (‪ ،)blocked‬وقد يشتغل برانمج آخر أكثر أمهية (مثال)‪.‬‬
‫حتميل الربانمج ِبلذاكرة يسمى عملية‪ ،‬هذه العملية (أو الربانمج) يتغري وضعها من حال إىل حال‪ ،‬كما موضح أدانه‪:‬‬

‫‪ ‬جديد (‪ :)new‬العملية مت إنشاءها وجاهزة للتحميل‪.‬‬

‫‪ ‬حالة اجلاهزية (‪ :)ready state‬العملية مت حتميلها يف الذاكرة وأصبحت جاهزة للتنفيذ‪.‬‬

‫‪ ‬حالة التنفيذ (‪ :)running state‬العملية بدأت التنفيذ داخل املعاجل (يتابع مسجل عداد الربامج تسلسل‬
‫تنفيذ أوامر العملية)‪.‬‬

‫‪ ‬حالة احلجز أو االنتظار (‪ :)blocked state or waiting‬عندما يوقف املعاجل عملية‪ ،‬تصبح هذه‬
‫العملية حمجوزة‪ .‬يتم توقيف العملية ألسباب عدة مثل احلاجة لتشغيل عملية أخرى أكثر أمهية‪ ،‬أو أن العملية‬
‫تنتظر حدث (‪ )event‬معني مل يتم بعد‪ ،‬أو أن الزمن الذي خصص للعملية قد اكتمل (املشاركة الزمنية)‪.‬‬

‫‪ ‬االنتهاء (‪ :)terminated‬هنا تكون العملية قد انتهى عملها‪ ،‬فتقوم إبخالء طرفها (حترير املوارد اليت‬
‫كانت تستخدمها‪ ،‬وإخالء الذاكرة اليت كانت حتتجزها) قبل اخلروج‪.‬‬

‫شكل رقم (‪ :)0-5‬حاالت العملية [‪.]3‬‬

‫‪ .5 .4‬إنشاء العملية‬
‫عند إنشاء العملية تعرف وتدار برقم غري متكرر يسمى رقم تعريف العملية ( ‪Process Identification‬‬
‫)‪.)Number (PID‬‬

‫هنالك أسباب خمتلفة إلنشاء العملية مثل‪:‬‬

‫‪ ‬هتيئة النظام‪ :‬عند إقالع نظام التشغيل تنشأ العديد من العمليات‪ ،‬منها ما يعمل يف اخلفاء‬
‫(‪ ،)background‬ومنها ما يعمل ويتخاطب مع املستخدم‪.‬‬

‫‪60‬‬
‫‪ ‬عملية تستدعى النظام إلنشاء عملية أخرى‪ :‬أحياان تقوم عملية منفذة بتشغيل (إنشاء) عملية أخرى‬
‫تساعدها يف عملها‪ ،‬تعترب العملية األوىل أب (‪ )parent‬للعملية الثانية واليت تعترب ابن (‪ ،)child‬العملية‬
‫االبن ميكنها إنشاء عمليات أبناء هلا مما قد يكون شجرة من العمليات‪ .‬قد تعمل هذه العمليات معا يف‬
‫وقت واحد أو تنتظر بعضها البعض‪.‬‬

‫‪ ‬طلب املستخدم إنشاء عملية جديدة‪ :‬عند ما ينقر املستخدم نقرا مزدوجا على أيقونة برانمج فهذا طلب من‬
‫املستخدم إلنشاء عملية جديدة‪.‬‬

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

‫‪ 5.4.0‬إنشاء عملية جديدة على لينكس ()(‪)fork‬‬

‫ميكن استخدام استدعاء النظام )(‪ 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‬مثال‪ .‬خمرجات العملية احملذوفة ترسل للعملية األب عرب استدعاء النظام‬
‫التشغيل بتحرير كل موارد العملية ‪.‬‬

‫قد يقوم األب إبهناء العملية االبن )‪ (abort‬منها‪:‬‬

‫‪ ‬زاد االبن يف عدد املوارد املخصصة له‪.‬‬

‫‪ ‬مل يعد األب حيتاج ملا يقوم به االبن (املهمة املنفذة مل نعد حباجة هلا)‪.‬‬

‫‪ ‬إذا أهنى األب عمله ‪.exiting‬‬

‫‪ ‬بعض نظم التشغيل ال تسمح لألبن مبواصلة التنفيذ إذا أهنى األب عمله‪.‬‬

‫‪ ‬كل األبناء سينتهون ِبنتهاء األب ‪.cascading termination‬‬

‫أسباب إنتهاء العملية‪:‬‬

‫‪ ‬انتهاء طبيعي (إكتمل عملها)‪.‬‬

‫‪ ‬االنتهاء بسبب حدوث خطأ‪.‬‬

‫‪ ‬مت إهناءها بعملية أخرى ‪.‬‬

‫ميكن تطبيق استدعاء ات النظام اليت تنشئ أو تنهي عمليات على نظام التشغيل لينكس من داخل برانمج ‪.C‬‬
‫أمثلة الستدعاءات نظام موجودة يف لينكس‪:‬‬

‫‪62‬‬
‫‪ fork() ‬إلنشاء عملية جديدة‪.‬‬

‫‪ exec() ‬لتنفيذ عملية‪.‬‬

‫‪ exit() ‬إلهناء عملية واخلروج‪.‬‬

‫‪ wait() ‬لإلنتظار‪.‬‬

‫‪ Kill() ‬إلهناء عملية‪.‬‬

‫توجد بعض الربامج املكتوبة بلغة ‪ C‬واليت تستخدم هذه اإلستدعاءات ِبملالحق‪ .‬وتوجد خطوات تنفيذها على‬
‫نظام التشغيل أوبونتو (ميكن تطبيقها على أي توزيعة لينكس آخرى)‪ ،‬أرجع للمالحق‪.‬‬

‫‪ .5.2‬مثال تشبيهي‬
‫افرتض أن هنالك مكتب ما‪ ،‬يقدم خدمات للعمالء‪ .‬إذا كان هنالك موظف واحد ِبملكتب (وهذا يشبه‬
‫احلاسب ذو املعاجل الواحد (‪ .))single processor system‬فإن كل عميل حيضر للمكتب إلجناز معاملة‬
‫سيذهب هلذا املوظف‪ ،‬وقد جيد قبله عمالء قد حضروا مسبقا إلجناز معامالهتم (جيد صف انتظار)‪ ،‬فيضطر أن يقف‬
‫يف آخر الصف‪ .‬يف هذه احلالة سيكون كل العمالء املنتظرين يف الصف يف حالة جاهزية (‪ ،)ready‬وسيكون هنالك‬
‫عميل واحد فقط (أول من وصل) ُخيدم بواسطة موظف املكتب (هذا العميل نقول أنه يف حالة تنفيذ (‪،))running‬‬
‫وقد تنجز معاملته وخيرج من املكتب حامدا ربه وشاكرا (وهنا نقول أن هذا العميل قد اكتمل عمله‬
‫(‪ .)terminated‬ولكن ماذا حيدث إذا وجد املوظف املسئول أن أوراق العميل غري مكتملة مثال ؟ سيوقف‬
‫املوظف إجناز معاملة هذا العميل حلني إكمال أوراقة (حيجزه (‪ .))blocked‬هنا على العميل أن خيرج من املكتب‬
‫ويذهب ليحضر األوراق الناقصة‪ .‬فإذا بعد عناء ومشقة حتصل صاحبنا على بقية األوراق املطلوبة ورجع إىل املكتب‬
‫إلكمال معاملته (اآلن حتول من حالة احلجز (نقص األوراق) إىل حالة اجلاهزية (احلصول على األوراق املطلوبة))‪.‬‬
‫وسينتظر دوره مرة أخرى ليسمح له املوظف املسئول (املعاجل) إبكمال معاملته (التنفيذ)‪.‬‬

‫عندما يفرغ املوظف من معاملة العميل الذي أمامه‪ ،‬سيصبح جاهزاً الستقبال عميل جديد (غالبا العميل‬
‫الذي يكون يف بداية الصف)‪ ،‬هذا العميل اجلديد سيتحول اآلن من اجلاهزية إىل التنفيذ‪ ،‬وهكذا يسري النظام‪.‬‬

‫إذا كان لدينا يف املكتب أكثر من موظف فسيتم خدمة أكثر من عميل يف نفس الوقت (يشبه تعدد‬
‫املعاجلات يف نظام احلاسب)‪.‬‬

‫‪63‬‬
‫‪ .5.5‬معلومات العملية )‪)Process Control Blocks (PCB‬‬
‫لكل عملية بنية بياانت (‪ )data structure‬تسمى )‪ (PCB‬ختزن فيها املعلومات األساسية للعملية‪ ،‬شكل‬
‫رقم (‪ ، )4-5‬جتمع البنيات األساسية لكل العمليات يف جدول يسمى جدول العمليات (‪ ،)process table‬حيث‬
‫يكون هنالك خانة لكل بنية عملية ِبلنظام‪ .‬حتتوي بينة العملية على معلومات عن العملية مثل‪:‬‬

‫‪ ‬رقم تعريف العملية (‪.)process identification‬‬

‫‪ ‬حالة العملية (‪.)process state‬‬

‫‪ ‬حمتوى عداد الربامج (‪.)Program counter‬‬

‫‪ ‬مسجالت املعاجل ‪.CPU registers‬‬

‫‪ ‬معلومات جدولة املعاجل ‪.CPU scheduling information‬‬

‫‪ ‬معلومات إدارة الذاكرة ‪.Memory-management information‬‬

‫‪ ‬معلومات احلساِبت ‪.Accounting information‬‬

‫‪ ‬معلومات حاالت الدخل واخلرج ‪.I/O status information‬‬

‫‪ ‬مقدار ما نفذ من العملية‪.‬‬

‫‪ ‬مكان الذاكرة املستخدم من قبل العملية‪.‬‬

‫‪ ‬املوارد اليت تستخدمها العملية مثل امللفات املفتوحة بواسطة العملية‪.‬‬

‫‪ ‬أولية العملية‪.‬‬

‫مؤشر‬ ‫حالة العملية‬


‫رقم العملية‬
‫عداد الربامج‬
‫حمتوى املسجالت‬
‫حدود الذاكرة‬
‫امللفات املفتوحة‬
‫‪…..‬‬
‫شكل رقم (‪ :)0-5‬بينية معلومات العملية (‪.)PCB‬‬

‫‪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‬‬

‫مدير املهام يف ويندوز ‪.02‬‬

‫‪65‬‬
‫مدير املهام يف ويندوز ‪XP‬‬

‫شكل رقم (‪ :)5-5‬مشاهدة العمليات يف ويندوز‪.‬‬

‫من الشكل (‪ )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‬‬

‫شكل رقم (‪ :)4-5‬مشاهدة العمليات يف لينكس (أوبونتو) ِبألمر‪.ps us :‬‬

‫أيضا هنالك العديد من استدعاءات النظام اليت متكننا من التعامل مع العمليات واليت ذكرانها يف ‪،.5.4.0‬‬
‫كذلك توجد الكثري من االمثلة الربجمية ِبمللحق (د)‪.‬‬

‫لكل عملية رقم مفرد يسمى ‪ . PID‬وقد نطلق أحياان على العملية كلمة "مهمة" (‪ ،)task‬لذلك جند‬
‫"مدير املهام" (‪ )task manager‬يف ويندوز‪.‬‬

‫‪ 5.00‬االتصال بني العمليات‬


‫قد تكون العمليات املوجودة يف النظام مستقلة أو متعاونة (‪. )independent or cooperating‬‬
‫العمليات املتعاونة تؤثر وتتأثر مبا حوهلا من عمليات‪ ،‬أما العمليات املستقلة فال‪.‬‬

‫العمليات املتعاونة حتتاج اتصال فيما بينها )‪ ،interprocess communication(IPC‬حيث يوجد نوعني‬
‫من طرق االتصال‪ ،‬هي‪:‬‬

‫وجود ذاكرة مشرتكة ‪Shared memory‬‬ ‫‪‬‬


‫عن طريق تبادل الرسائل ‪Message passing‬‬ ‫‪‬‬

‫‪67‬‬
‫‪ .5.00‬متارين حملولة‬
‫أختار اإلجابة الصحيحة‪:‬‬

‫‪ .0‬العمليات املتعاونة تتصل فيما بينها لآليت‪:‬‬

‫‪ ‬لنشر املعلومات‪.‬‬
‫‪ ‬لتقليل سرعة التنفيذ‪.‬‬
‫‪ ‬للبعد اجلغرايف‪.‬‬
‫ال شيء مما ذكر (‪)0‬‬ ‫‪‬‬

‫‪ .0‬أجب بنعم أو ال مع تصحيح اإلجابة اخلاطئة‪:‬‬

‫‪ ‬عندما ينتقل املعاجل لتنفيذ عملية‪ ،‬على النظام حفظ ‪ PCB‬العملية القدمية وحتميل ‪ PCB‬العملية اجلدية‪.‬‬
‫نعم‬

‫‪ ‬قد يقوم األب إبهناء العملية االبن )‪ (abort‬إذا زاد األب يف عدد املوارد املخصصة له‪ .‬ال‪ ،‬إذا زاد األبن‬

‫‪ ‬نستخدم يف لينكس استدعاء النظام (‪ )exec system call‬إلنشاء عملية جديدة‪ .‬ال‪fork() ،‬‬

‫‪ ‬عندما تنشئ عملية عملية أخرى سيكون تنفذ العملية وأبناءها ِبلتوايل فقط‪ .‬ال‪ ،‬قد يكون ِبلتوايل أيضا‪.‬‬

‫‪ .5‬وضح أسباب االنتقال بني حاالت العمليات املبنية ِبلرسم أعاله‪:‬‬

‫‪ . 0‬دخول ‪ .0‬مقاطعة ‪ .5‬جمدول ‪ .4‬إكتمال حدث‪/‬دخل‪/‬خرج‬

‫‪. .3‬حدث‪/‬دخل‪/‬خرج ‪ .2‬خروج‬

‫‪68‬‬
‫‪ .5.05‬متارين غري حملولة‬
‫‪ .0‬عرف العملية (‪ )process‬؟‬

‫‪ .0‬أذكر حاالت العملية (‪ )process states‬مع توضيح العالقة بينهم ِبلرسم ؟‬

‫‪ .5‬ما هي حمتوَيت بنية معلومات العملية )‪ (PCB‬؟‬

‫‪ .4‬ما هي مسببات انشاء العملية ؟‬

‫‪ .3‬أذكر مسببات إهناء العملية ؟‬

‫‪ .2‬أجب بنعم أو ال (مع تصحيح اإلجابة اخلاطئة)‬

‫‪ ‬لتنفيذ الربانمج جيب حتميله من الرام إىل القرص الصلب أوال؟‬

‫‪ ‬عندما ينتقل املعاجل لتنفيذ عملية‪ ،‬على النظام حفظ معلومات العملية اليت نريد توقيفها (‪ )PCB‬وحتميل‬
‫‪ PCB‬العملية اجلديدة‪ ،‬عرب ما يسمى املشاركة‪.‬‬

‫‪ ‬قد يقوم األب إبهناء العملية االبن )‪ (abort‬إذا زاد األب يف عدد املوارد املخصصة له‪.‬‬

‫‪ ‬نستخدم يف لينكس استدعاء النظام (‪ )exec system call‬إلنشاء عملية جديدة‪.‬‬

‫‪ .5‬عندما تنشئ عملية عملية أخرى سيكون تنفذ العملية وأبنها ِبلتوايل أم ِبلتوازي ؟‬

‫‪ .8‬اذكر تنفيذ الربانمج (من حتميله يف الذاكرة إىل إكتماله)؟‬

‫‪69‬‬
‫الباب الرابع‪ :‬جدولة املعاجل‬

‫‪70‬‬
‫الباب الرابع‬

‫جدولة املعاجل (‪)CPU Scheduling‬‬

‫تعدد الربجمة (‪ )multiprogramming‬معناها أن هنالك أكثر من عملية جاهزة (ِبلذاكرة الرئيسية)‪.‬‬


‫مهمة اختيار عملية من العمليات اجلاهزة لتنفذ يف املعاجل هي مهمة اجملدول (‪ ،)scheduler‬والطريقة (اخلوارزمية)‬
‫اليت يستخدمها اجملدول النتقاء العملية تسمى خوارزمية اجلدولة (‪.)scheduling algorithm‬‬

‫الغرض من جدولة العمليات هي اختيار عملية من العمليات املوجودة ِبلذاكرة لتنفيذها يف املعاجل‪ ،‬حبيث‬
‫يكون املعاجل دوما مشغوال (كلما زاد انشغال املعاجل كلما زادت كفاءته ‪.)CPU utilization‬‬

‫‪ .4.0‬دورة حياة العملية (‪)CPU I/O Burst Cycle‬‬


‫اهلدف من تعدد الربجمة (‪ )multiprogramming‬هو أن تكون هنالك دائما عملية حتت التنفيذ‬
‫حبيث نستفيد إستفادة قصوى من املعاجل‪.‬‬

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

‫إذن العملية تكون يف املعاجل شغالة مث قد يتم توقفها عندما حتتاج دخل أوخرج مث ترجع لتعمل بعد إكتمال‬
‫الدخل أو اخلرج‪ ،‬وقد تتوقف مرة أخرى لدخل أو خرج مث ترجع لتعمل مرة أخرى وهكذا قد تتنقل العملية بني دخل‬
‫وخرج و معاجلة حىت تنتهي‪ .‬أي تقضي العملية وقتها بني تنفيذ داخل املعاجل (‪ )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‬وهو الذي‬
‫حيدد أي من الربامج جيب أن تدخل إىل النظام (حتمل من ال قرص إىل الذاكرة لتكون جاهزة للتنفيذ) ومىت‪.‬‬
‫أيضا حيدد أي من العمليات جيب أن خترج من النظام‪.‬‬

‫‪ ‬اجملدول متوسط األمد ‪ medium-term scheduler‬وهو يتحكم يف ايقاف العمليات الشغالة‬


‫بعد إنتفاء السبب‬ ‫(لسبب ما) لتصبح معلقة (‪ ،)suspend‬وتشغيل العمليات املوقفة‪/‬املعلقة‬
‫(‪.)resume‬‬

‫‪ ‬جمدول املعاجل (العمليات) ‪ short-term scheduler‬أواجملدول قصري األمد ‪(or CPU‬‬


‫)‪ scheduler‬وهو الذي حيدد أي من العمليات اجلاهزة ِبلذاكرة ُحيجز هلا موارد املعاجل وإىل كم من الوقت‬
‫تظل داخل املعاجل‪ .‬الفرق جمدول املهام وحمدول العمليات أن األول يكون بطيئا يف إحضار العمليات من‬
‫القرص إىل الذاكرة يكون الثاين سريعا يف إدخال العمليات من الذاكرة إىل املعاجل‪ ،‬الشكل (‪.)0-4‬‬

‫شكل رقم (‪ :)0-4‬أنواع اجملدوالت‪.‬‬

‫‪ .4.0.0‬جمدول العمل ‪Long term scheduler – job scheduler‬‬

‫‪ ‬اختيار العمليات اليت ستحمل ِبلذاكرة (إدخال العمليات إىل صف االنتظار)‪.‬‬

‫‪ ‬حيدد أي عملية ستبدأ اعتمادا على الرتتيب واألفضلية‪.‬‬

‫‪72‬‬
‫‪ ‬ال يستخدم يف أنظمة التقسيم الزمين (‪.)time sharing systems‬‬

‫‪ .4.0.0‬اجملدول املتوسط (‪)Medium term scheduler‬‬

‫‪ ‬جيدول العمليات بناءا على املوارد اليت حتتاج (ذاكرة‪ /‬دخل‪/‬خرج)‪.‬‬

‫‪ ‬يقوم بتعليق (‪ )suspend‬العمليات اليت مل تتوفر هلا مواردها حاليا‪.‬‬

‫‪ ‬عادة تكون الذاكرة مورد حمدود وهنا يعمل مدير الذاكرة كمجدول متوسط األمد (استخدام الذاكرة‬
‫االفرتاضية)‪.‬‬

‫‪ .4.0.5‬جمدول املعاجل (قصري األمد)‬

‫‪ ‬يقوم اجملدول ِبختيار عملية من العمليات املوجودة ِبلذاكرة واجلاهزة للتنفيذ (‪ )ready queue‬وحجز‬
‫املعاجل هلا‪.‬‬

‫‪ ‬حتديد العملية التالية اليت ستستخدم املعاجل بعد فراغه من العملية احلالية (الشكل ‪.)0-4‬‬

‫‪ ‬جيب أن يكون اجملدول سريع جدا‪.‬‬

‫‪ ‬إذا احتاجت عملية مورد أو دخل‪/‬خرج ستزال من املعاجل وحتول إىل حالة االنتظار وإدخال عملية أخرى من‬
‫صف االنتظار إىل املعاجل‪.‬‬

‫‪ ‬يتخذ اجملدول قراراته عند ما تتحول العملية من‪:‬‬

‫‪ .0‬من شغالة إىل منتظرة‬

‫‪ .0‬من شغالة إىل جاهزة‬

‫‪ .5‬من منتظرة إىل جاهزة‬

‫‪ .4‬انتهت ‪Terminates‬‬

‫‪ ‬يف احلاالت ‪ 0‬و‪ 4‬ستخرج العملية إجبارَي إما إلنتهاءها أو ألهنا حتتاج دخل أو خرج‪ ،‬يف هذه احلالة البد‬
‫للمجدول من إختيار عملية بديلة‪ ،‬فليس لديه خيار آخر‪ .‬يف هذه احلال نقول أن اجملدول ‪non-‬‬
‫‪.preemptive‬‬

‫‪73‬‬
‫‪ ‬أما ‪ 0،4‬فإن العملية خترج إختيارا‪ ،‬وقد تواصل‪ ،‬هنا للمجدول حق اإلختيار يف إخراجها أو ال‪ .‬هنا نقول‬
‫أن اجملدول ‪.preemptive‬‬

‫اجلدولة غري قابلة للتوقف (‪ : )non-preemptive scheduling‬عند ما تدخل عملية‬


‫املعاجل وتبدأ التنفيذ فإهنا لن ترتك املعاجل أبدا إال يف إحدى حالتني ‪:‬‬
‫‪ ‬االكتمال‪.‬‬
‫‪ ‬التحول إىل حالة االنتظار‪.‬‬

‫‪ .4.0.5.0‬املرسل ‪Dispatcher‬‬

‫املرسل هو جزء من اجملدول يقوم إبرسال العمليات اليت خيتارها جمدول املعاجل‪ ،‬ومن وظائفه‪:‬‬

‫‪ o‬التحول السياقي ‪ :switching context‬حفظ بياانت العملية املوقفة وحتميل بياانت العملية‬
‫اليت مت اختيارها لتعمل يف املعاجل‪.‬‬

‫‪ o‬التحول إىل وضع املستخدم ‪.user mode‬‬

‫‪ o‬القفز إىل املوقع املناسب يف برانمج املستخدم إلعادة تشغيل الربانمج‪.‬‬

‫املرسل البد من أن يكون سريع جدا‪ ،‬ألنه سيعمل مع كل عملية‪.‬‬

‫زمن اإلرسال ‪ :Dispatch latency‬هو الوقت الذي يستغرقه املرسل يف توقيف عملية وتشغيل أخرى (حتويل‬
‫عملية)‪.‬‬

‫‪ .4.0‬معايري اجلدولة (‪)Scheduling Criteria‬‬


‫تستخدم بعض املصطلحات والقياسات اليت متكننا من املقارنة بني طرق اجلدولة املختلفة‪ ،‬مثل‪:‬‬

‫‪ ‬استغالل املعاجل (‪ :)CPU utilization‬جعل املعاجل مشغوال بقدر ما نستطيع‪.‬‬

‫‪ ‬اإلنتاجية (‪ :)Throughput‬عدد ال عمليات اليت ميكن إجنازها يف فرتة زمنية معينة‪.‬‬

‫‪ ‬الزمن اإلكتمال (الزمن الكلي) (‪ :)Turnaround time‬الزمن املستغرق لتنفيذ عملية ما (من دخوهلا‬
‫(إنشاءها) حىت انتهاءها)‪.‬‬

‫‪74‬‬
‫‪ ‬زمن االنتظار (‪ :)Waiting time‬الزمن الذي تقضيه العملية يف صف االنتظار (‪،)ready queue‬‬
‫أي جمموع فرتات االنتظار اليت تقضيها العملية يف صف االنتظار (‪ )ready queue‬أثناء تنفيذها‪.‬‬

‫‪ ‬زمن االستجابة (‪ :)Response time‬الزمن املستغرق من دخول العملية (‪ )new‬إىل ظهور أول خمرج‬
‫(استجابة) من العملية‪.‬‬

‫‪ .4.4‬حتسني األداء‬
‫يسعى نظام التشغيل إىل حتسني أداء املعاجل بتحقيق اآليت‪:‬‬

‫‪ ‬زَيدة استغالل للمعاجل‪ :‬زَيدة استغالل املعاجل أبقصى ما ميكن‪.‬‬

‫‪ ‬زَيدة االنتاجية‪ :‬زَيدة عدد العمليات املنفذة يف فرتة زمنية معينة‪.‬‬

‫‪ ‬تقليل الزمن الكلي‪ :‬تقليل الزمن الكلي لتنفيذ العمليات بقدر ما ميكن‪.‬‬

‫‪ ‬تقليل زمن انتظار ‪ :‬تقليل زمن االنتظار لكل عملية بقدر ما ميكن‪.‬‬

‫‪ ‬تقليل زمن االستجابة (‪ :)response time‬جعل العمليات تستجيب وتبدأ إظهار خمرجاهتا بسرعة‪.‬‬

‫‪ .4.3‬خوارزميات اجلدولة (‪)Scheduling Algorithms‬‬


‫هنالك العديد من خوارزميات اجلدولة مثل‪:‬‬

‫‪ .4.3.0‬القادم أوال خيدم أوال (‪)First-Come, First served‬‬


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

‫‪ ‬حيذف اجملدول العملية من املعاجل إذا أرادت التحول إىل وضع االنتظار أو انتهت‪.‬‬

‫‪ ‬اخلوارزمية مناسبة للعمليات الكبرية عندما جتد فرصة للتنفيذ‪ ،‬وتسبب مشكلة للعمليات القصرية إذا‬
‫كانت خلف عمليات كبرية‬

‫‪75‬‬
‫مثال (‪)0‬‬

‫اجلدول التايل يوضح عمليات يف صف االنتظار ونريد تنفيذها حسب خوارزمية القادم أوال خيدم أوال‪ .‬حيث‬
‫ميثل عمود العملية اسم العملية والعمود الثاين ميثل الوقت الذي حتتاجه كل عملية لتكمل عملها داخل املعاجل‪ ،‬أحسب‬
‫اآليت ‪:‬‬

‫‪ .0‬متوسط زمن االنتظار (‪.)waiting time‬‬

‫‪ .0‬متوسط زمن االكتمال (‪.)completion time‬‬

‫‪ .5‬أحسب متوسط زمن االنتظار إذا كان ترتيب الوصول عكسي (‪ p3‬مث ‪ p2‬مث ‪ )p1‬مث وصح الفرق بني‬
‫املتوسطني‪.‬‬

‫العملية‬ ‫الزمن‬
‫‪P1‬‬ ‫‪24‬‬
‫‪P2‬‬ ‫‪3‬‬
‫‪P3‬‬ ‫‪3‬‬
‫احلل‬

‫إذا وصلت العمليات ِبلرتتيب ‪ P1‬مث ‪ P2‬مث ‪ ،P3‬ومت خدمتها برتتيب القادم أوال خيدم أوال‪ ،‬فإن‬
‫اجملدول سينفذ العمليات على املعاجل حسب ترتيبها كالرسم التايل (‪: )Gantt Chart‬‬

‫‪ .0‬متوسط زمن االنتظار = (‪05 = 5/)05+04+2‬ملي اثنية‪.‬‬

‫‪ .0‬متوسط زمن االكتمال = (‪ 05 = 5/)52+05+04‬ملي اثنية‪.‬‬

‫‪ .5‬إذا وصلت العمليات ِبلرتتيب العكسي فإن شكل العمليات داخل املعاجل سيكون كاآليت‪:‬‬

‫‪76‬‬
‫عليه فإن متوسط زمن االنتظار = (‪ 5 = 5/)2+5+2‬ملي اثنية‪.‬‬

‫ومتوسط زمن االكتمال سيكون = (‪ 05 = 5/)52+2+5‬ملي اثنية‪.‬‬

‫حيث نالحظ أن متوسط زمن االنتظار إذا نفذت العمليات الكبرية يف النهاية أفضل من متوسط زمن‬
‫االنتظار إذا مت تنفيذ العمليات الكبرية أوال‪.‬‬

‫‪ .4.3.0‬العملية األقصر أوال )‪Shortest-Job-First (SJF‬‬


‫‪ ‬إفرتاض أننا نعلم مقدما كم ستحتاج كل عملية بصف االنتظار من وقت داخل املعاجل‪ ،‬فإن اجملدول‬
‫سيختار العملية اليت حتتاج زمن أقل أوال‪.‬‬

‫‪ ‬تعترب هذه اخلوارزمية مثالية حيث إهنا تعطي أقل متوسط زمن انتظار‪.‬‬

‫‪ ‬املشكلة األساسية يف هذه اخلوارزمية هي معرفة طول الوقت الذي ستحتاجه العملية داخل املعاجل‬
‫مسبقا‪ ،‬فغالبا ال يعلم اجملدول ذلك مما يصعب معرفة العملية األقصر‪.‬‬

‫‪ ‬سيكون األداء ضعيف يف حالة وصول عمليات قصرية بعد بدء تنفيذ عملية طويلة‪.‬‬

‫‪ ‬كذلك قد حيدث حرمان للعمليات الطويلة (حترم من التنفيذ لوجود عمليات قصرية)‪.‬‬

‫‪ ‬يقدم خدمة جيدة للعمليات القصرية‪.‬‬

‫‪ ‬تفشل اخلوارزمية مع العمليات اليت كانت سابقا قصرية لكنها اآلن أصبحت طويلة‪.‬‬

‫تنقسم اخلوارزمية إىل نوعني مها ‪:‬‬

‫‪ ‬غري قابلة للتوقف (‪ :)Non-preemptive‬إذا بدأت عملية التنفيذ داخل املعاجل لن تتوقف لعملية‬
‫أخرى‪.‬‬

‫‪ ‬قابلة للتوقف (‪ :)Preemptive‬إذا وصلت عملية جديدة إىل صف االنتظار وكان زمنها أقصر من الزمن‬
‫املتبقي للعملية اليت تنفذ حاليا ِبملعاجل سيقوم اجملدول إبخراج األوىل وإدخال اليت وصلت حديثا‪.‬‬

‫‪77‬‬
‫مثال (‪)0‬‬

‫مثال على العمليات الغري قابلة للتوقيف واليت وصلت يف نفس الوقت (أي دون إعتار لزمن الوصول)‪.‬‬

‫العملية‬ ‫الزمن‬
‫‪P1‬‬ ‫‪6‬‬
‫‪P2‬‬ ‫‪8‬‬
‫‪P3‬‬ ‫‪7‬‬
‫‪P4‬‬ ‫‪3‬‬
‫جدول هذه العمليات ِبستخدام خوارزمية األقصر أوال ؟‬

‫احلل‬

‫سنقوم بعمل رسم شكل (‪ )Gantt chart‬يوضح كيف ستكون العمليات داخل املعاجل‪:‬‬

‫متوسط زمن االنتظار = (‪ 5 = 4/)02+3+5+2‬ملي اثنية‪.‬‬

‫متوسط زمن االكتمال = (‪ 05 = 4/)04+02+3+5‬ملي اثنية‪.‬‬

‫مثال (‪)5‬‬

‫مثال على عمليات مل تصل يف وقت واحد ِبستخدام خوارزمية األقصر أوال القابلة للتوقف‪.‬‬

‫العملية‬ ‫زمن الوصول‬ ‫الزمن‬


‫‪P1‬‬ ‫‪0‬‬ ‫‪8‬‬
‫‪P2‬‬ ‫‪1‬‬ ‫‪4‬‬
‫‪P3‬‬ ‫‪2‬‬ ‫‪9‬‬
‫‪P4‬‬ ‫‪3‬‬ ‫‪5‬‬

‫‪78‬‬
‫إذا كانت العمليات إىل صف االنتظار حسب عمود زمن الوصول املبني أمام كل عملية ِبجلدول فوضح‬
‫كيف يستخدم اجملدول خوارزمية األقصر أوال القابلة للتوقيف (‪.)preemptive‬‬

‫احلل‬

‫سيكون ترتيب العمليات داخل املعاجل كما يلي‪:‬‬

‫زمن انتظار العملية = زمن االنتظار الكلي – زمن الوصول‪ِ ،‬بلتايل فإن‪:‬‬

‫زمن انتظار ‪02 = 2 - )02 + 2( = P1‬‬

‫زمن انتظار ‪2 = 0 – 0 = P2‬‬

‫زمن انتظار ‪03 = 0 -05 = P3‬‬

‫زمن انتظار ‪0 = 5 -3 = P4‬‬

‫متوسط زمن االنتظار = (‪ 2.53 = 4/)0+03+2+02‬ملي اثنية‪.‬‬

‫متوسط زمن االكتمال = (‪ 04.3 =4/)02 +02 +3 +05‬ملي اثنية‪.‬‬

‫مثال (‪)4‬‬

‫مثال آخر على عمليات مل تصل يف وقت واحد ِبستخدام خوارزمية األقصر أوال الغري قابلة للتوقف‪.‬‬

‫العملية‬ ‫زمن الوصول‬ ‫زمن العملية‬


‫‪P1‬‬ ‫‪0‬‬ ‫‪7‬‬
‫‪P2‬‬ ‫‪2‬‬ ‫‪4‬‬
‫‪P3‬‬ ‫‪4‬‬ ‫‪1‬‬
‫‪P4‬‬ ‫‪5‬‬ ‫‪4‬‬

‫‪79‬‬
‫احلل‬

‫ترتيب العمليات داخل املعاجل يكون كما يلي‪:‬‬

‫زمن انتظار ‪2 = 2 - 2 = P1‬‬

‫زمن انتظار ‪2 = 0 - 8 = P2‬‬

‫زمن انتظار ‪5 = 4 - 5 = P3‬‬

‫زمن انتظار ‪5 = 3 - 00 = P4‬‬

‫متوسط زمن االنتظار = (‪ 4 = 4/)5+5+2+2‬ملي اثنية‪.‬‬

‫متوسط زمن اإلكتمال = (‪ 02.53 =4/)02+00+8+5‬ملي اثنية‪.‬‬

‫مثال (‪)3‬‬

‫هنا سنحل املثال (‪ )4‬السابق بطريقة األقصر أوال القابلة للتوقف‪.‬‬

‫العملية‬ ‫زمن الوصول‬ ‫زمن العملية‬


‫‪P1‬‬ ‫‪0‬‬ ‫‪7‬‬
‫‪P2‬‬ ‫‪2‬‬ ‫‪4‬‬
‫‪P3‬‬ ‫‪4‬‬ ‫‪1‬‬
‫‪P4‬‬ ‫‪5‬‬ ‫‪4‬‬
‫احلل‬

‫نرسم خارطة جانت (‪ )Gantt chart‬للجدول أعاله كما يلي‪:‬‬

‫‪80‬‬
‫زمن انتظار ‪3 = 2 – ))0-00(+2( = P1‬‬

‫زمن انتظار ‪0 = 0 – ))4-3(+0( = P2‬‬

‫زمن انتظار ‪2 = 4 – 4 = P3‬‬

‫زمن انتظار ‪0 = 3 – 5 = P4‬‬

‫متوسط زمن اإلنتظار = (‪ 5 = 4/)0+2+0+3‬ملي اثنية‪.‬‬

‫متوسط زمن االكتمال = (‪ 3.53 =4/)00+3+5+02‬ملي اثنية‪.‬‬

‫‪ .4.3.5‬األولوية (‪)Priority‬‬
‫ك ل عملي ة ل ديها رق م مرف ق معه ا‪ ،‬ه ذا ال رقم حي دد أمهي ة العملي ة‪ ،‬حي ث س يتم تنفي ذ العملي ة ذات األولوي ة‬
‫األعلى (أقل رقم)‪ .‬فإذا كنا نعترب أن الرقم األقل ميثل األولوية األعلى‪ ،‬فهذا يعين أنه إذا كان لدي عملية برقم األولوية ‪3‬‬
‫وهنال ك عملي ة ب رقم األولوي ة ‪ ،5‬فس ينفذ اجمل دول العملي ة ذات ال رقم ‪ 3‬قب ل العملي ة ذات ال رقم ‪ ،5‬ألن أولويته ا أعل ى‪.‬‬
‫هنالك نوعني مها‪:‬‬

‫‪ ‬قابلة للتوقف (‪.)Preemptive‬‬

‫‪ ‬غري قابلة للتوقف (‪.)non-preemptive‬‬

‫‪ .4.3.5.0‬احلرمان (‪)Starvation‬‬

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

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

‫مثال (‪)2‬‬

‫مثال على عمليات غري قابلة للتوقف (وصلت يف وقت واحد)‪.‬‬

‫‪81‬‬
‫العملية‬ ‫رقم األولوية‬ ‫زمن العملية‬
‫‪P1‬‬ ‫‪3‬‬ ‫‪10‬‬
‫‪P2‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪P3‬‬ ‫‪3‬‬ ‫‪2‬‬
‫‪P4‬‬ ‫‪4‬‬ ‫‪1‬‬
‫‪P5‬‬ ‫‪2‬‬ ‫‪5‬‬

‫احلل‬

‫ِبستخدام خوارزمية األولية سيكون شكل العمليات داخل املعاجل كما يلي‪:‬‬

‫حيث سيكون متوسط زمن االنتظار = (‪ 8.0 = 3/)0+08+02+2+2‬ملي اثنية‪.‬‬

‫متوسط زمن االكتمال = (‪ 00 = 3/)2+03+08+0+02‬ملي اثنية‪.‬‬

‫مثال (‪ :)5‬مترين‬

‫قم حبل املثال السابق بطريقة األولوية الغري قابلة للتوقف إبعتبار أن العمليات مل تصل يف وقت واحد (حمدد‬
‫زمن وصول كل عملية يف عمود "زمن الوصول")‪.‬‬

‫العملية‬ ‫رقم األولوية‬ ‫زمن العملية‬ ‫زمن الوصول‬


‫‪P1‬‬ ‫‪3‬‬ ‫‪10‬‬ ‫‪0‬‬
‫‪P2‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪2‬‬
‫‪P3‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪4‬‬
‫‪P4‬‬ ‫‪4‬‬ ‫‪1‬‬ ‫‪7‬‬
‫‪P5‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪9‬‬

‫‪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‬‬
‫العمليات داخل املعاجل ستكون كالشكل التايل‪:‬‬

‫زمن انتظار ‪2 = )4-02( + 2 = P1‬‬

‫زمن انتظار ‪4 = P2‬‬

‫زمن انتظار ‪5 = P3‬‬

‫متوسط زمن االنتظار = (‪ 3.25 = 5/05 = 5/)5+4+2‬ملي اثنية‪.‬‬

‫متوسط زمن االكتمال = (‪ 03.25 = 5/45 = 5/)02+5+52‬ملي اثنية‪.‬‬

‫مثال (‪)3‬‬

‫إذا كانت احلصة الزمنية لكل عملية هي ‪02‬ملي اثنية‪ ،‬أحسب متوسط زمن االنتظار‪.‬‬

‫الزمن‬ ‫العملية‬
‫‪53‬‬ ‫‪P1‬‬
‫‪17‬‬ ‫‪P2‬‬
‫‪68‬‬ ‫‪P3‬‬
‫‪24‬‬ ‫‪P4‬‬
‫احلل‬

‫الشكل التايل يوضح تنفيذ العمليات داخل املعاجل‪:‬‬

‫زمن انتظار ‪80 = )35-000(+)02-55(+2 = P1‬‬

‫زمن انتظار ‪02 = P2‬‬

‫‪84‬‬
‫زمن انتظار ‪34 = )005-054(+)35-35(+55 = P3‬‬

‫زمن انتظار ‪35 = )55-005(+35 = P4‬‬

‫متوسط زمن االنتظار = (‪ 55 = 4/)35+34+02+80‬ملي اثنية‪.‬‬

‫‪ .4.2‬برانمج حماكاة خوارزميات اجلدولة‬


‫ميكنك كتابة برانمج أبي لغة على فيجوال ستديو مثل ‪ C#‬أو ‪ VB.NET‬أو أي لغة أخرى مثل‬
‫‪ C,C++,JAVA‬حملاكاة عمل خوارزميات اجلدولة‪ ،‬حيث تظهر شاشة (كأدانه) تطلب من املستخدم إدخال‬
‫بياانت العمليات مث النقر على زر اخلوارزمية اليت نريد من الربانمج استخدامها حلساب متوسط زمن اإلنتظار‪.‬‬

‫أو ميكن استخدام تطبيق كونسول (‪ )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

Dim Awt As Double = Twt / x


Console.WriteLine("Total Weighting Time=" & twt)
Console.WriteLine("Average Weighting Time= " & Awt)
Console.Read()
End Module
:‫وهنا لقطة من الربانمج وهو يعمل‬

‫ أكتب برانمج حلساب متوسط زمن االنتظار لبقية اخلوارزميات ؟‬:‫مترين‬

87
‫‪ .4.5‬متارين‬
‫‪ .0‬أذكر ثالث أمثلة من خوارزميات اجلدولة ؟‬

‫‪ .0‬إذا كان لدينا العمليات التالية مبني فيها ما حتتاجه من وقت داخل املعاجل‪:‬‬

‫زمن العملية‬ ‫زمن الوصول‬ ‫العملية‬


‫‪9‬‬ ‫‪0‬‬ ‫‪P1‬‬
‫‪6‬‬ ‫‪2‬‬ ‫‪P2‬‬
‫‪2‬‬ ‫‪4‬‬ ‫‪P3‬‬
‫‪4‬‬ ‫‪5‬‬ ‫‪P4‬‬

‫إذا كان زمن االنتظار =(‪ ، 2 = 4/)2+3+05+2‬أجب على اآليت‪:‬‬

‫‪ ‬ما هي اخلوارزمية املستخدمة ؟‬

‫‪ ‬أرسم شكل (‪ )Gantt chart‬يوضح تنفيذ العمليات داخل املعاجل‪.‬‬

‫‪ ‬أثبت أن متوسط زمن االنتظار = ‪.2‬‬

‫‪ .5‬ماهو احلرمان (‪ ، )starvation‬وكيف نعاجله ؟‬

‫‪ِ .4‬بفرتاض أن هنالك جمموعة من العمليات موضحة يف اجلدول التايل‪:‬‬

‫األولوية‬ ‫زمن العملية‬ ‫زمن الوصول‬ ‫العملية‬


‫‪3‬‬ ‫‪9‬‬ ‫‪0‬‬ ‫‪P1‬‬
‫‪1‬‬ ‫‪7‬‬ ‫‪2‬‬ ‫‪P2‬‬
‫‪3‬‬ ‫‪5‬‬ ‫‪4‬‬ ‫‪P3‬‬
‫‪4‬‬ ‫‪10‬‬ ‫‪6‬‬ ‫‪P4‬‬
‫‪2‬‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪P5‬‬
‫املطلوب‪:‬‬
‫‪88‬‬
‫‪ ‬رسم خمطط جانت (‪)Gantt chart‬‬

‫‪ ‬حساب متوسط زمن اإلنتظار‬

‫‪ ‬حساب متوسط زمن اإلكتمال للعمليات أعاله ِبستخدام اخلوارزميات التالية‪:‬‬

‫‪ o‬القادم أوال خيدم أوال (‪ )FCFS‬بدون زمن وصول‬

‫‪ o‬القادم أوال خيدم أوال (‪ )FCFS‬مع زمن الوصول‬

‫‪ o‬األقصر أوال (‪ )SJF‬الغري قابلة للتوقف (بدون زمن وصول)‬

‫‪ o‬األقصر أوال (‪ )SJF‬الغري قابلة للتوقف (مع زمن الوصول)‬

‫‪ o‬األقصر أوال (‪ )SJF‬القابلة للتوقف (مع زمن الوصول)‬

‫‪ o‬األفضلية (األمهية) الغري قابلة للتوقف‬

‫‪ o‬األولوية (األمهية) القابلة للتوقف مع زمن الوصول‬

‫‪ o‬التقسيم الزمين (‪ )RR‬مع ‪ Q=2‬بدون زمن وصول‬

‫‪ o‬التقسيم الزمين (‪ )RR‬مع ‪ Q=2‬مع زمن الوصول‬

‫‪ o‬ما هي أفضل خوارزمية من واقع النتائج اليت حتصلت عليها ؟ وملاذا ؟‬

‫‪ .3‬أكتب برانمج بلغة ‪ C‬يقوم بقبول أزمان العمليات املوجودة ِبلسؤال رقم (‪ )4‬مث حساب متوسط زمن االنتظار‬
‫ِبستخدام أحدى اخلوارزميات التالية‪.FCFS, SJF, RR, Priority:‬‬

‫‪ِ .2‬بفرتاض أن هنالك جمموعة من العمليات موضحة يف اجلدول التايل‪:‬‬

‫األولوية‬ ‫زمن العملية‬ ‫زمن الوصول‬ ‫العملية‬


‫‪3‬‬ ‫‪10‬‬ ‫‪0‬‬ ‫‪P1‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪P2‬‬
‫‪3‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪P3‬‬
‫‪4‬‬ ‫‪1‬‬ ‫‪6‬‬ ‫‪P4‬‬
‫‪2‬‬ ‫‪5‬‬ ‫‪8‬‬ ‫‪P5‬‬

‫‪89‬‬
‫أحسب متوسط زمن االنتظار ِبستخدام خوارزميات اجلدولة التالية‪:‬‬

‫‪ .0‬األقصر أوال (‪ )SJF‬الغري قابلة للتوقف (بدون اعتبار لزمن الوصول)‪.‬‬


‫‪ .0‬األقصر أوال (‪ )SJF‬الغري قابلة للتوقف (مع زمن الوصول) ‪.‬‬
‫‪ .5‬األقصر أوال (‪ )SJF‬القابلة للتوقف (مع زمن الوصول)‪.‬‬
‫‪ .4‬التقسيم الزمين (‪ )RR‬مع ‪( Q=1‬من غري زمن وصول)‪.‬‬
‫‪ .3‬األولوية (األمهية) وذلك ِبستخدام عمود األفضلية يف اجلدول أعاله‪.‬‬

‫‪ِ .5‬بفرتاض أن هنالك جمموعة من العمليات وصلت مجيعها يف الزمن صفر‪ ،‬وموضح الزمن الذي حتتاجه للتنفيذ يف‬
‫اجلدول التايل‪:‬‬

‫زمن العملية‬ ‫العملية‬


‫‪7‬‬ ‫‪P1‬‬
‫‪1‬‬ ‫‪P2‬‬
‫‪3‬‬ ‫‪P3‬‬
‫‪2‬‬ ‫‪P4‬‬
‫‪4‬‬ ‫‪P5‬‬

‫‪ ‬أرسم خمطط جانت (‪ )Gantt chart‬يوضح تنفيذ العمليات أعاله ِبستخدام خوارزمية التقسيم (‪)RR‬‬
‫يف احلاالت التالية‪:‬‬

‫‪ o‬عندما تكون ‪Q=1‬‬

‫‪ o‬عندما تكون ‪Q=2‬‬

‫‪ o‬عندما تكون ‪Q=3‬‬

‫‪ ‬ما هو زمن إنتظار كل عملية من العمليات أعاله يف كل حالة‪.‬‬

‫‪ ‬ما هو الزمن الكلي لكل عملية (‪ )turnaround time‬يف كل حالة‪.‬‬

‫‪ ‬ما هي احلالة اليت تعطي أقل زمن إنتظار ؟ وماذا تستنتج من إجابتك ؟‬

‫‪90‬‬
‫تنبيه‪ :‬الزمن الكلي للعملية هو من زمن وصوهلا (صفر) إىل إكتماهلا‪.‬‬

‫‪ .8‬أحسب متوسط زمن االنتظار إذا كانت احلصة الزمنية لكل عملية هي ‪02‬ملي اثنية‪.‬‬

‫زمن الوصول‬ ‫الزمن‬ ‫العملية‬


‫‪0‬‬ ‫‪53‬‬ ‫‪P1‬‬
‫‪2‬‬ ‫‪17‬‬ ‫‪P2‬‬
‫‪4‬‬ ‫‪68‬‬ ‫‪P3‬‬
‫‪6‬‬ ‫‪24‬‬ ‫‪P4‬‬

‫‪91‬‬
‫الباب اخلامس‪ :‬خيوط التنفيذ‬

‫‪92‬‬
‫الباب اخلامس‬

‫خيوط التنفيذ‬

‫‪Thread of Execution‬‬

‫‪ .3.0‬مدخل‬
‫دعنا نضرب مثل تشبيهي يوضح فكرة اخليوط قبل الدخول يف تعريفها ومفهومها واستخدامها‪.‬‬

‫لننظر إىل املسألة احلسابية البسيطة التالية‪:‬‬

‫‪5+6+7+8‬‬

‫فإذا طلبنا من أي تلميذ حل هذه املسألة‪ ،‬فإنه سيحلها غالبا يف ثالث خطوات هي‪:‬‬

‫‪ ‬حساب ‪ 6+5‬والناتج هو ‪.13‬‬

‫‪ ‬مجع العدد ‪ 7‬للناتج ‪ 13‬فيكون الناتج هو ‪.20‬‬

‫‪ ‬مجع العدد ‪ 8‬لناتج العملية السابقة ‪ 20‬فتكون القيمة النهائية هي ‪.28‬‬

‫‪ .3.0.0‬العملية ذات اخليط الواحد (التوايل)‬

‫نالحظ أن اخلطوات هذه تتم متتالية‪ .‬فإذا أفرتضنا أن كل خطوة حتتاج اثنية من هذا التلميذ فإنه سينجز‬
‫العمل يف ‪ 3‬ثوان (أي ‪ .)20+8=28 ،13+7=20 ،5+6=13‬هنا ال يستطيع التلميذ القيام خبطوتني يف وقت‬
‫واحد‪ ،‬وهذا يشبه العملية العادية (ذات اخليط الواحد)‪.‬‬

‫‪ .3.0.0‬العملية متعددة اخليوط (التوازي)‬

‫اآلن لو احضر هذا التلميذ أحد زمالئيه ليساعده يف حل هذه املسألة‪ ،‬فيمكن للتلميذ األول أن حيسب ‪،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‬أنواع اخليوط‬
‫ختتلف اخليوط يف طريقة اإلدارة والدعم‪ ،‬فهنالك خيوط تدار وتدعم بواسطة نظام التشغيل وهنالك ما يدار‬
‫بواسطة املستخدم‪.‬‬

‫‪ .3.5.0‬خيط املستخدم (‪)user thread‬‬


‫قد يتعامل نظام التشغيل (خارجيا) مع العملية كعملية واحدة دون معرفة اخليوط الداخلية اليت توجد فيها‪،‬‬
‫بينما داخليا تنفذ العملية جمموعة من اخليوط يف وقت واحد‪ .‬هذا النوع من اخليوط يسمى خيط املستخدم‪ ،‬أي أن‬
‫إنشاء اخليط والتعامل معه يتم يف مستوى املستخدم (‪ )user level‬وال شأن لنظام التشغيل به‪ ،‬فهو يتعامل مع‬
‫العمليات دون التمييز بني اليت هبا خيط واحد واليت هبا العديد من اخليوط‪.‬‬

‫يتم تطبيق خيط املستخدم بواسطة مكتبات‪ ،‬مثل مكتبة ‪ ،pThreads‬حيث توفر مثل هذه املكتبات‬
‫االدارة والدعم الكامل للخيوط‪ ،‬فكل ما يتعلق ِبلتعامل مع اخليط من إنشاء‪ ،‬وإهناء‪ ،‬جدولة‪ ،‬وحفظ واسرتجاع يتم‬
‫من دون أي مساعدة أو تدخل من نظام التشغيل‪ ،‬ودون اإلرتباط بلغة برجمة معينة‪.‬‬

‫‪95‬‬
‫عيب هذا النوع أن نظام التشغيل ال يتعامل مع اخليوط املوجودة ِبلعملية‪ ،‬لذلك عندما حيجز عملية معينة‪،‬‬
‫فإنه حيجز العملية ككل مبا فيها من خيوط وال يستثىن أي خيط داخل العملية من احلجز‪ ،‬رغم أن بعض اخليوط قد‬
‫تكون قادرة على العمل‪ .‬أما ميزته فهي سرعة وسهولة إنشاء وإدارة اخليوط‪.‬‬

‫شكل رقم ‪ :0-3‬خيط املستخدم [‪.]04‬‬

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

‫هل هنالك نظم تشغيل تدعم النوعني‪ ،‬خيط املستخدم وخيط النواة‪.‬‬

‫‪ .3.4‬مناذج اخليوط‬

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

‫واحد لواحد‪.‬‬ ‫‪‬‬

‫‪96‬‬
‫متعدد لواحد‪.‬‬ ‫‪‬‬
‫متعدد ملتعدد‪.‬‬ ‫‪‬‬
‫واحد لواحد‬

‫يتميز هذا النوع أبنه عند استدعاء خيط لنداء نظام احلجز ميكن خليوط اخرى أن تعمل‪ .‬وميكن هلذا النوع ان يعمل‬
‫ِبلتوازي يف عدد من املعاجلات‪/‬األنوية‪ .‬عيبه أنه كل ما انشاءت خيط مستخدم البد من انشاء خيط نواة مقابل له‪،‬‬
‫وهذا يؤثر سلبا على االداء‪ ،‬لذلك جند معظم نظم التشغيل اليت تدعم هذه النماذج تسمح للتطبيقات إبنشاء عدد‬
‫معني من اخليوط ال تتجاوزه‪.‬‬

‫شكل رقم ‪ :5-3‬واحد لواحد [‪.]04‬‬

‫متعدد لواحد‬

‫ادارة اخليوط تتم يف مساحة املستخدم‪ ،‬لكن سيتم حجز العملية كاملة إذا استدعى اي خيط نداء حجز‬
‫(‪ .)blocking system call‬والن خيط واحد يستطيع الوصول للنواة يف اللحظة الواحدة‪ ،‬فلن تستطيع خيوط‬
‫املستخدم العمل ِبلتوازي ولن تستفيد من املعاجل متعدد األنوية‪.‬‬

‫‪97‬‬
‫شكل رقم ‪ :4-3‬متعدد لواحد [‪.]04‬‬

‫متعدد ملتعدد‬

‫خيوط املستخدم تقابل عدد أقل أو مساوي خليوط النواة‪ .‬يفيد هذا النوع يف التوازي حيث ميكن تنفيذ عدد من خيوط‬
‫املستخدم بعدد خيوط النواة املتاحة (درجة التعددية)‪ ،‬وإذا استدعى اي خيط نداء نظام للحجز ميكن خليوط مستخدم‬
‫أخرى أن تعمل مستفيدةً من املعاجل‪.‬‬

‫شكل رقم ‪ :3-3‬متعدد ملتعدد [‪.]04‬‬

‫‪98‬‬
‫جدول ‪ :0-3‬مقارنة بني خيط املستخدم وخيط النواة [‪.]04‬‬

‫خيط النواة‬ ‫خيط املستخدم‬


‫بطئ‬ ‫سريع يف االنشاء واالدارة‬
‫يدعم نظام التشغيل عملية انشاء اخليوط‬ ‫يتم تطبيقة مبكتبة يف مساحة املستخدم‬
‫خمصص لنظام تشغيل معني‬ ‫عام وميكن ان يعمل يف اي نظام تشغيل‬
‫روتينات النواة نفسها ميكن أن تكون متعددة‬ ‫الربامج متعددة اخليوط ال تستفيد من تعدد‬
‫اخليوط‬ ‫املعاجلات‪/‬األنوية‬

‫‪ .3.3‬التحول بني العمليات ‪Context Switch‬‬


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

‫‪ ‬املسجالت مبا فيها مسجل عداد الربامج (‪.)PC‬‬

‫‪ ‬املكدسة (‪.)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‬واليت حتتوي على املعطيات التالية‪:‬‬

‫‪ ‬املعطى األول تحصل من خالله على تعريف اخليط (‪.)thread identifier‬‬

‫‪ ‬املعطى الثاين مؤشر إىل مكان الكائن الذي حيدد صفات اخليط‪ ،‬إذا استخدمت ‪ null‬هنا فهذا يعين أنك‬
‫تريد الصفات االفرتاضية للخيط‪.‬‬

‫‪ ‬املعطى الثالث هو مؤشر إىل مكان الدالة اليت ينفذها اخليط‪.‬‬

‫‪ ‬املعطى األخري هو القيم (‪ )argument‬اليت نريد متريرها إىل الدالة املنفذة داخل اخليط‪ ،‬إذا مل يكن لديك‬
‫قيم تريد متريرها إىل الدالة ميكنك كتابة ‪ null‬يف هذه اخلانة‪.‬‬

‫مثال لو كتبت شفرة الدالة هبذه الطريقة‪:‬‬

‫;)‪pthread_create(&th_ID, NULL, th_fun, &value‬‬

‫فهذا يعين أنين أريد إنشاء خيط خيزن تعريف هذا اخليط يف املتغري ‪ ، 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;

/* ‫ كل خيط ينفذ نفس الدالة لكن مبعطى خمتلف‬،‫* ننشئ خيطني‬/


/* ‫* إنشاء اخليط األول‬/
r1 = pthread_create( &thread1, NULL, p_message, (void*) m1);
/* ‫* إنشاء اخليط الثاين‬/
r2 = pthread_create( &thread2, NULL, p_message, (void*) m2);
/* ‫* جنعل الدالة الرئيسية تنتظر حىت يكتمل تنفيذ اخليطني‬/
pthread_join( thread1, NULL);
pthread_join( thread2, NULL);
printf("Thread 1 returns: %d\n",r1);
printf("Thread 2 returns: %d\n",r2);
exit(0);
}

/* ‫* الدالة اليت تنفذ داخل كل خيط مع مدخل خمتلف‬/


void *print_message_function( void *ptr )
char *message;
message = (char *) ptr;
printf("%s \n", message);
}
0-3 ‫برانمج‬

:‫خمرج الربانمج‬

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‬واملوجودة مبكتبة جافا‪.‬‬
‫مثال األمر التايل‪:‬‬

‫‪class th extends Thread‬‬

‫ميكنك من وراثة الصف ‪ ،Thread‬حيث يكون لديك الصف ‪ th‬الذي يتعترب صف خيط‪ .‬حيتوي‬
‫الصف ‪ th‬على دالة تسمى ‪ ،run‬هذه الدالة هي اليت تنفذ اخليط‪ ،‬وقد ورثناها من الصف ‪ .Thread‬سنضع ما‬
‫نريد تنفيذه داخل هذه الدالة‪ ،‬مثال‪:‬‬

‫{)(‪public void run‬‬

‫}‪System.out.print("Inside thread"):‬‬

‫}‬

‫بعدها ننشئ كائن من الصف ‪ ،th‬مثال‪:‬‬

‫) (‪th t1 = new th‬‬

‫اآلن أصبح لدينا خيط هو ‪ ،t1‬ميكن تشغيله ِبألمر‪:‬‬

‫) (‪t1.start‬‬

‫‪104‬‬
‫تنبيه‪ :‬اخليط ‪ t1‬يعترب اخليط الثاين يف العملية ذلك ألن العملية يف األساس لديها خيط واحد يعترب اخليط‬
‫الرئيسي‪ .‬فكل عملية حتتوي عادة على خيط رئيسي واحد‪ ،‬إذن اآلن لدينا خيطني يف العملية‪ .‬تشغيل خيط العملية‬
‫األساسي يتم يف ‪ .main‬الربانمج (‪ )0-3‬هو برانمج صغري يوضح كيفية إنشاء ثريد وتشغيله من داخل ‪.main‬‬

‫‪class th extends Thread{//‬‬


‫{)(‪public void run‬‬
‫}‪System.out.print("Inside thread"):‬‬
‫}‬
‫{)] [‪public static void main(String args‬‬
‫إنشاء خيط ‪th t1 = new th( ); //‬‬
‫تشغيل اخليط ‪t1.start( ); //‬‬
‫};)"‪System.out.print("Inside main‬‬
‫}‬
‫برانمج ‪0-3‬‬
‫‪ .3.5.0.0‬التعامل مع اخليط‬

‫توفر جافا طرق (دوال) للتعامل مع اخليط‪ ،‬مثل‪:‬‬

‫توقيف اخليط‪ ،‬وميكن تشغيله مرة اثنية ِبألمر )(‪Resume‬‬ ‫)(‪Suspend‬‬


‫توقيف (تنومي) اخليط لفرتة زمنية حمددة يعود ليعمل مرة أخرى بعد انقضائها‪.‬‬ ‫)(‪Sleep‬‬
‫تشغيل اخليط مرة اثنية بعد توقيفه ِبألمر )(‪.suspend‬‬ ‫)(‪Resume‬‬
‫إهناء اخليط (قتله)‪ ،‬حيث يصبح اخليط ميت وال ميكن تشغيله مرة اثنية‪.‬‬ ‫)(‪Stop‬‬
‫عدل الربانمج (‪ ،)0-3‬لتطبق عليه الدوال أعاله‪.‬‬

‫‪ .3.8‬حاالت اخليط‬
‫للخيط حاالت ينتقل بينها أثناء التنفيذ‪ ،‬الشكل ‪ ،8-3‬هي‪:‬‬

‫‪ ‬جديد (‪ :)new‬عند إنشائه ِبألمر ‪ .new‬يف الربانمج ‪ ،0-3‬يعترب اخليط ‪ th‬يف حالة جديد عند‬
‫استخدام األمر‪:‬‬

‫;)(‪th t1 = new th‬‬

‫‪ ‬شغال (منفذ) ‪ :Runnable‬األمر )(‪ start‬حيجز مساحة ِبلذاكرة للخيط‪ ،‬ويستدعى الطريقة )(‪run‬‬
‫ِبلكائن ‪( t1‬يف املثال ‪ ،)8-3‬هنا نقول أن حالة اخليط ‪ t1‬هي ‪.Runnable‬‬

‫‪105‬‬
‫‪ ‬حمجوز (‪ )blocked‬أو غري شغال (‪ :)not Runnable‬إذا كان اخليط يقوم بعملية دخل أو خرج‪ ،‬أو‬
‫مت استدعاء )(‪ suspend‬أو )(‪.sleep‬‬

‫‪ ‬ميت (‪ :)Dead‬يصبح اخليط ميتاً إذا انتهى عمل الطريقة )(‪ run‬أو استدعينا )(‪.stop‬‬

‫شكل رقم (‪ :)8-3‬حاالت اخليط‪.‬‬

‫من الصعب معرفة حالة اخليط‪ ،‬ولكن قد تعرف هل اخليط حي يرزق أم ال ِبستخدام الطريقة )(‪ isAlive‬واليت ترجع‬
‫قيمة منطقية (نعم (حي) ‪ ،‬أم ال (مات))‪.‬‬

‫‪ .3.3‬مترين غري حملولة‬


‫عرف اخليط ؟‬ ‫‪.0‬‬

‫ما الفرق بني اخليط والعملية ؟‬ ‫‪.0‬‬

‫ال ترتبط اخليوط أبي مورد‪ ،‬وضح ذلك ؟‬ ‫‪.5‬‬

‫إنشاءه اخليط وتدمريها أسهل من إنشاء العمليات ملذا ؟‬ ‫‪.4‬‬

‫"إنشاء اخليط أسرع مبئة مرة من إنشاء العملية" ‪ ،‬أثبت أن هذه العبارة صحيحة (أحبث يف اإلنرتنت عن‬ ‫‪.3‬‬
‫ذلك) ؟‬

‫ما الفرق بني خيط املستخدم وخيط النواة ؟‬ ‫‪.2‬‬

‫هل يعترب اخليط يف جافا خيط مستخدم ؟‬ ‫‪.5‬‬

‫هل تعترب ‪ pthreads‬خيط مستخدم ام نواة ؟‬ ‫‪.8‬‬

‫أذكر مثال لنظام تشغيل يدعم خيط املستخدم ومثال لنظام تشغيل يدعم خيط النواة ؟‬ ‫‪.3‬‬
‫‪106‬‬
‫ما هي مكوانت بنية معلومات اخليط اليت حيتاج حلفظها عند التحول من حالة التنفيذ إىل حالة أخرى؟‬ ‫‪.02‬‬

‫أذكر حاالت اخليط املختلفة ؟‬ ‫‪.00‬‬

‫أذكر دوال اخليط يف جافا واليت تستخدم يف تشغيل وتوقيف وإهناء اخليط ؟‬ ‫‪.00‬‬

‫‪107‬‬
‫الباب السادس‪ :‬التزامن‬

‫‪108‬‬
‫الباب السادس‬

‫التزامن (‪)synchronization‬‬

‫‪ .2.0‬مقدمة‬
‫إذا كنت تربمج على حاسب شخصي وتكتب برامج عادية‪ ،‬فسيكون مهك األكرب هل املخرج أو الناتج‬
‫الذي يظهره الربانمج وهل هو املطلوب أم ال ؟‬

‫ولكن للتطور تبعاته‪ ،‬فإذا صممت برانمج ليعمل يف شبكة ويتشارك البياانت مع برامج أخرى‪ ،‬فستظهر مهوم‬
‫أخرى مع اهلموم اليت كانت مسبقا ‪ ،‬مثل هل البياانت متوافقة؟ وهل ما قراءته من معلومات هو آخر ما مت حتديثه‪ ،‬وهل‬
‫على برانجمك االنتظار يف حلظة معينة حىت يتزامن عمله مع بقية الربامج اليت تتشارك معه يف البياانت أو الربامج اليت‬
‫تتعاون معه يف اجناز مهمة مشرتكة؟ و ما إىل ذلك من مشاكل اليت جلبتها علينا التعددية والتشارك يف البياانت‪.‬‬

‫‪ .2.0‬مفهوم التوازي ‪Concurrency‬‬


‫نقصد ِبلتوازي تنفيذ أكثر من عملية يف وقت واحد‪ .‬قد تكون هذه العمليات املتوازية مستقلة عن بعضها‬
‫البعض (‪ )independent processes‬أو متعاونة مع بعضها البعض (‪ .)cooperative processes‬مثال‬
‫قد أقوم بتشغيل حمرر النصوص (‪ )WinWord‬ألكتب عليه‪ ،‬واستمع إىل مادة صوتية بواسطة مشغل الوسائط‬
‫(‪ ،)media player‬ويكون املتصفح يعمل يف تنزيل ملفات من االنرتنت‪ ،‬هذه العمليات تنفذ ِبلتوازي يف وقت‬
‫واحد ولكنها مستقلة عن بعضها البعض‪.‬‬

‫التوازي قد يطبق على مستوى العمليات (‪ )concurrent processes‬أو على مستوى اخليوط‬
‫(‪.)concurrent threads‬‬

‫العملية املستقلة هي اليت ال تؤثر وال تتأثر ِبلعمليات اليت تعمل معها يف نفس الوقت‪.‬‬
‫العملية تكون متعاونة إذا أثرت و‪/‬أو أتثرت ِبلعمليات األخرى اليت تعمل معها ِبلتوازي‪.‬‬

‫‪ .2.5‬تعاون العمليات‬
‫إذا احتاجت العمليات املتوازية أن تتشارك يف بعض املوارد أو أن تؤدي عمال مشرتكا‪ ،‬فالبد هلا من أن‬
‫تتعاون مع بعضها البعض‪ .‬هذا التعاون يتطلب اتصال بني العمليات (أواخليوط) وعملية تزامن‬
‫(‪.)synchronization‬‬

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

‫العمليات املتزامنة غالبا ما تتنافس على استخدام املوارد املشرتكة بينها بصورة احتكارية (‪،)mutually exclusive‬‬
‫حبيث ال ميكن لعمليتني استخدام نفس املورد يف نفس الوقت‪ .‬اي أنه يف أي حلظة يسمح فقط لعملية واحدة‬
‫ِبستخدام املورد املشرتك‪.‬‬

‫ملاذا حتتاج العمليات املتوازية التعاون فيما بينها ؟‬

‫‪ ‬طلب عملية خلدمة من عملية أخرى‪ :‬يف هذه احلالة على العملية اليت طلبت اخلدمة انتظار العملية اليت طُلب‬
‫منها اخلدمة حىت تفرغ منها‪ .‬مثال إذا طلبت عملية من نظام التشغيل معلومة معينة من القرص الصلب‪،‬‬
‫ستظل هذه العملية يف انتظار املعلومة حىت تصلها من القرص إىل الذاكرة‪ ،‬أو إذا طلب املتصفح من خمدم‬
‫ويب ِبالنرتنت موقع معني فعلى املتصفح االنتظار حىت يرسل املخدم املوقع املطلوب‪ ،‬فيقوم املتصفح وقتها‬
‫بعرضه على املستخدم‪.‬‬

‫‪ ‬زَيدة سرعة التنفيذ‪ :‬وذلك بتقسيم مهمة واحدة كبرية إىل مهام صغرية (عمليات صغرية) ويتم تنفيذها‬
‫ِبلتوازي‪ .‬قد تسبق عملية يف تنفيذها عمليات أخرى معها‪ ،‬فإذا تركنا هذه العملية لتكمل تنفيذها دون‬
‫انتظار العمليات األخرى فقد يتسبب هذا يف نتائج غري متوقعة أو غري صحيحة‪ ،‬لذلك البد من وضع نقاط‬
‫تزامن التتعداها العمليات السريعة ما مل تصل بقية العمليات هذه النقاط‪.‬‬

‫‪ ‬قد تعتمد بعض العلميات يف عملها على خمرج عمليات أخرى‪ .‬مثال إذا استخدمنا األانبيب االنسيابية‬
‫(‪ )pipeline‬بني عمليات فهذا يعين أن خمرج العملية األوىل سيكون مدخل للعملية الثانية‪ ،‬يف هذه احلالة‬
‫ال ميكن للعملية الثانية أن تسبق العملية األوىل‪ .‬مثال األمر التايل (يف ينكس)‪:‬‬

‫‪$ ls | wc‬‬

‫هو أمر لتنفيذ عمليتني مها ‪ ، ls‬اليت تعرض حمتوَيت الدليل احلايل‪ ،‬و ‪ wc‬لعد الكلمات‪ .‬هنا البد من تزامن‬
‫(ستنتظر العملية الثانية خمرجات العملية األوىل لتعمل عليها (حتسب عدد كلمات املخرج))‪.‬‬

‫‪ ‬قد يكون من املالئم للعمليات أن تعمل مع بعضها الجناز عمل مشرتك‪ ،‬مثال يف نظام الوسائط املتعددة‬
‫ميكن أن تقوم عملية إبحضار أجزاء املادة الوسائطية من القرص ووضعها يف ذاكرة مؤقتة (خازن‬
‫(‪ ،))buffer‬بينما عملية أخرى أتخذ املادة من اخلازن وترسلها إىل جهاز الذي يصدر الصوت‪/‬الصورة‪ .‬هنا‬
‫تعترب العملية األول منتج (‪ )producer‬بينما العملية الثانية مستهلك (‪ .)consumer‬وعلى املنتج‬
‫‪110‬‬
‫العمل على جعل اخلازن ممتلئا دوما حبيث ال يتوقف املستهلك عن العمل (ال جيد اخلازن فارغا)‪ ،‬ألن‬
‫املستهلك إذا وجد اخلازن فارغا سيتوقف عن العمل وينتظر وصول بياانت للخازن مما يتسبب يف تقطع‬
‫الفيديو‪/‬الصوت أو تشويشه‪.‬‬

‫أَي كان نوع التعاون بني العمليات‪ ،‬فيجب أن يكون هنالك‪:‬‬


‫‪ ‬تزامن بينها‪.‬‬
‫‪ ‬اتصال فيما بينها‪.‬‬

‫‪ .2.0.0‬احلجز غري املتوقع للعمليات‬

‫قد يقوم اجملدول (يف نظام التشغيل) حبجز أي عملية يف أي وقت وألي سبب‪ ،‬هذا احلجز سيوقف العملية‬
‫اليت تنفذ حاليا يف املعاجل‪ ،‬ويُدخل عملية أخرى مكاهنا (ِبلطبع سيكون هنالك حتول (‪،)context switching‬‬
‫حيث يتم حفظ معلومات العملية احملجوزة ويتم حتميل معلومات العملية اليت سيتم تنفيذها)‪.‬‬

‫ال يستطيع املربمج معرفة مىت سيقوم اجملدول حبجز برانجمه (عمليته)‪.‬‬

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

‫‪ .2.4‬النزاع (‪)competition‬‬
‫قد تكون للعمليات املتعاونة بياانت مشرتكة تستطيع الوصول إليها‪ .‬إذا مل يكن هنالك حتكم يف طريقة‬
‫الوصول هلذه البياانت ستكون النتيجة وصول غري منظم هلا أو تنازع حوهلا وِبلتايل نتائج غري صحيحة‪ .‬هذا الوصول‬
‫غري املنظم للبياانت املشرتكة يسمى حالة السباق (‪ .)race condition‬حيث تتسابق العمليات يف تغيري قيمة‬
‫البياانت املشرتكة‪.‬‬

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

‫‪111‬‬
‫‪ .2.4.0‬مشاكل النزاع‬
‫فيما يلي نسرد بعض األمثلة اليت حتدث فيها مشاكل نتيجة لإليقاف غري املتوقع لبعض العمليات بواسطة‬
‫اجملدول‪.‬‬

‫‪ .2.4.0.0‬مشكلة تعديل ملف على اخلادم امللفات (‪)file server‬‬

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

‫الصحيح هو أنه عندما تعمل عمليتنان يف وقت واحد جيب أن تكون النتيجة متشاهبة بغض النظر أي عملية‬
‫أنتهت أول‪ .‬ولكن عندما يؤثر ترتيب تنفيذ العمليات يف النتيجة يسمى هذا حالة السباق (‪.)race condition‬‬
‫ألن ذلك ميثل سباق بني العمليات لنعرف من ينتهي أوال‪.‬‬

‫‪ .2.4.0.0‬مشكلة نظام احلجز املوزع‬

‫إذا كان هنالك نظام حجز على خطوط طريان معينة‪ ،‬يعمل على عدة فروع‪ .‬وكان هنالك مقعد واحد فارغ‬
‫يف رحلة ما‪ ،‬وجاء عميل حلجز هذا املقعد يف الفرع أ‪ ،‬ويف نفس الوقت كان هنالك عميل ِبلفرع ب ‪ ،‬يريد حجز نفس‬
‫املقعد‪ ،‬وقام املوظفني يف الفرعني بعملية طلب حجز للمقعد يف نفس الوقت‪ ،‬ماذا حيدث ؟‬

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

‫‪ 2.4.0.5‬مشكلة احلساب املشرتك‬

‫‪112‬‬
‫إذا كان هنالك حساب مفتوح ببنك ما‪ ،‬وكان هذا احلساب مشرتك بني عميلني‪ ،‬فقد يتفق وأن يطلب‬
‫العميلني سحب مبلغ من املال من احلساب املشرتك يف وقت واحد من فرعني خمتلفني‪ .‬هنا ستنفذ عمليتني على‬
‫احلساب املشرتك‪ ،‬حيث ستقوم العمليتني ِبختبار الرصيد (نفرتض أنه كان ‪ 0322‬دوالر)‪ ،‬مث إذا أوقفت إحدى‬
‫العمليتني بواسطة اجملدول لسبب ما‪ ،‬ونفذت العملية األخرى سحب املبلغ املطلوب (مثال ‪ 022‬دوالر)‪ ،‬سيكون‬
‫الرصيد اآلن ‪ 0422‬دوالر‪ .‬بعد أن يتم فك حجز العملية الثانية ستواصل من بعد آخر أمر كانت قد نفذته‪ ،‬وهو‬
‫اختبار الرصيد (‪ 0322‬دوالر)‪ ،‬وستنفذ السحب وختصم املبلغ من الرصيد (مثال إذا كان املبلغ املراد سحبه هو ‪022‬‬
‫دوالر ‪ ،‬فسيكون الرصيد املتبقي هو (‪ 0522‬دوالر)‪ .‬وتعترب هذه العملية خطأ‪ ،‬ولو عمل البنك هبذه الطريقة سيغلق‬
‫أبوابه قريبا‪.‬‬

‫النتيجة اخلاطئة اليت وصلنا إليها كان سببها الوصول غري املنظم لقاعدة البياانت وإجراء تعديل على احلساب‬
‫املشرتك بصورة غري منسقة (غري تزامين) مما نتج عنه خطأ يسمى حالة السباق (‪ .)race condition‬حل مشكلة‬
‫مثل هذه يتم ِبلتأكد من أن عملية واحدة فقط يف حلظة معينة تقوم بتعديل البياانت املشرتكة‪.‬‬

‫‪ .2.4.0.4‬حالة السباق (‪ )race condition‬واملنطقة احلرجة (‪)critical section‬‬

‫املشاكل اليت سرندانها مسبقا معظمها تعاين من حالة السباق‪ ،‬ولنوضح حالة السباق وطريقة حلها سنأخذ املثال‬
‫التايل‪:‬‬

‫إذا كان لدينا متغري ‪ ،x‬مشرتك بني عمليتني‪ ،‬وقامت كل عملية ِبآليت‪:‬‬

‫‪ o‬قراءة قيمة املتغري ‪.)read x( x‬‬

‫‪ o‬زَيدة قيمة املتغري بواحد (‪.)x=x+1‬‬

‫‪ o‬حفظ قيمة املتغري اجلديدة )‪.(writet x‬‬

‫املشكلة ستظهر عندما تقوم أحد العمليات بقراءة قيمة املتغري‪ ،‬مث تقوم العملية الثانية بقراءة قيمة املتغري قبل‬
‫أن تقوم العملية األوىل حبفظ القيمة اجلديدة يف املتغري‪ .‬فستكون النتيجة النهائية بعد تنفيذ العمليتان أن املتغري سيزيد‬
‫بواحد بدال من ‪.2‬‬

‫احلل هو أن مننع أي عملية أخرى من الوصول للمتغري ‪ x‬إذا كانت هنالك عملية تستخدم هذا املتغري‪.‬‬

‫‪113‬‬
‫املنطقة اليت تتعامل مع املتغري املشرتك يف العملية نسميها املنطقة احلرجة (‪ .)critical section‬ستكون منطقة‬
‫املتغري املشرتكة هي املنطقة احلرجة‪ ،‬وحلل مشكلة حالة السباق جيب أن نتأكد من أن هنالك عملية واحدة تنفذ داخل‬
‫املنطقة احلرجة‪ .‬وال يسمح للعملية الثانية ِبلدخول إىل املنطقة احلرجة إال بعد خروج العملية األوىل منها‪.‬‬

‫‪ .2.3‬مشاكل التزامن الكالسيكية‬


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

‫‪ .2.3.0‬مشكلة القراءة والكتابة (‪)reading and writing problem‬‬


‫يف مشكلة احلجز املوزع ومشكلة احلساب املشرتك ِبلبنك‪ ،‬تعترب عملية التعديل على قاعدة البياانت‪ ،‬عملية‬
‫كتابة‪ ،‬بينما عملية احلصول على معلومات من قاعدة البياانت‪ ،‬تعترب قراءة‪ .‬مثال معرفة املقاعد الفارغة يف رحلة طريان‬
‫أو معرفة الرصيد حلساب بنك هي عمليات قراءة‪ ،‬بينما سحب مبلغ من الرصيد أو حجز مقعد يف رحلة طريان هي‬
‫عمليات كتابة‪.‬‬

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

‫توفر نظم قواعد البياانت مثل أوراكل وأكسس إمكانية غلق السجالت اليت جنري عليها التعديل ( ‪lock‬‬
‫‪ )records‬واستخدامها بصورة احتكارية (‪ )exclusively‬حىت مننع الوصول إليها من قبل أي عملية أخرى أثناء‬
‫التعديل‪ ،‬وهبذا نضمن توافقية البياانت (‪.)consistency‬‬

‫إذا كانت قاعدة البياانت مشرتكة‪ ،‬فالبد لعملية الكتابة من الوصول‬


‫للبياانت املشرتكة بصورة احتكارية (‪.)exclusive access‬‬

‫إذن استخدام االحتكار يعترب أحد احللول ملشكلة القراءة والكتابة‪.‬‬

‫‪114‬‬
‫‪ .2.5.0.0‬مشكلة القراءة والكتابة األوىل‬

‫‪The first readers-writers problem‬‬

‫إذا كانت هنالك عملية كتابة فلن نسمح ألي عملية أخرى ِبلوصول للبياانت املشرتكة‪ ،‬ولكن إذا كانت‬
‫العملية اليت تتعامل مع البياانت عملية قراءة ‪ ،‬فيمكن ألي عملية قراءة أخرى من الوصول للبياانت املشرتكة‪ .‬أي أن‬
‫عمليات القراءة تنفذ مبجرد وصوهلا‪ ،‬بينما توقف عملية الكتابة حىت ال يكون هنالك عملية قراءة‪.‬‬

‫‪ .2.3.0.0‬مشكلة القراءة والكتابة الثانية‬

‫‪The second readers-writers problem‬‬

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

‫‪ .2.3.0.5‬مشكلة القراءة والكتابة الثالثة‬

‫‪The third readers-writers problem‬‬

‫مشكلة القراءة والكتابة األوىل تتسبب يف حرمان عمليات الكتابة‪ ،‬ألن عمليات القراءة قد أتيت تباعا وتظل‬
‫عملية الكتابة يف انتظار دائم ال ينتهي‪.‬‬

‫مشكلة القراءة والكتابة الثانية تتسبب يف حرمان عمليات القراءة ألن عمليات الكتابة عندما أتيت لصف‬
‫االنتظار يسمح هلا ِبلعمل عند أول فرصة هلا‪ِ ،‬بلتايل قد أتيت عمليات الكتابة تباعا وتستأثر ِبلوصول للبياانت دون‬
‫عمليات القراءة‪.‬‬
‫‪115‬‬
‫احلل الثالث جاء ليقول أنه مينع احتكار الوصول للبياانت إذا تعدى فرتة زمنية حمددة‪ ،‬ولكل عملية قيد زمين‬
‫يف استخدامها للبياانت ال تتجاوزه‪ ،‬فإذا كانت هنالك عملية تستخدم البياانت احتكارَي فعليها أن ترتك هذا االحتكار‬
‫وتنهي عملها إذا تعدى الفرتة املقررة للعملية‪.‬‬

‫‪ .2.3.0‬مشكلة املنتج واملستهلك (‪)producer-consumer‬‬


‫مشكلة املنتج واملستهلك أحياان تسمى مشكلة اخلازن احملدود (‪ .)bounded-buffer‬هنا يكون لدينا‬
‫عمليتان تستخدمان خازن مشرتك‪ ،‬العملية األوىل تضع به بياانت بينما أتخذ العملية األخرى البياانت منه‪ .‬وعلى‬
‫العمليتني التنسيق فيما بينهما حبيث الحتاول العملية األوىل وضع بياانت يف اخلازن إذا كان ممتلئاً‪ ،‬وال حتاول العملية‬
‫الثانية أخذ بياانت من اخلازن إذا كان فارغاً‪.‬‬

‫شكل رقم (‪ :)0-2‬املنتج واملستهلك‪.‬‬

‫‪ .2.3.0.0‬حل مشكلة املنتج واملستهلك‬

‫ميكن حل هذه املشكلة إبجبار عملية املنتج على التوقف عن إحضار البياانت للخازن إذا كان ممتلئا‬
‫(‪ .)sleep‬وعندما يفرغ اخلازن تقوم عملية املستهلك من إيقاظ املنتج ليبدأ يف تعبئة اخلازن‪ .‬بنفس الطريقة تتوقف‬
‫عملية املستهلك (‪ )sleep‬إذا كان اخلازن فارغا‪ ،‬وعندما حيضر املنتج بياانت للخازن‪ ،‬يقوم إبيقاظها لتبدأ يف أخذ‬
‫البياانت من اخلازن‪ .‬ميكن تطبيق هذا احلل ِبستخدام السيمافور (‪ )semaphore‬الذي يعتمد على االتصال بني‬
‫العمليتني (‪.)inter-process communication‬‬

‫‪ .2.3.0.0.0‬حل يقود إىل اختناق‬

‫الربانمج (‪ )0-2‬يعترب حل للمشكلة‪ ،‬حيث ميثل ‪ count‬عدد العناصر املوجودة ِبخلازن‪ ،‬و املتغري ‪item‬‬
‫ميثل اخلازن‪ .‬هذا الربانمج يعمل كما يلي‪:‬‬

‫ستخترب عملية املنتج اخلازن‪ ،‬هل هو ممتلئ أم ال ؟ وذلك ِبألمر‪:‬‬

‫)‪if (count == BUFFER_SIZE‬‬

‫‪116‬‬
‫إذا كان األمر صحيحا سيتوقف املنتج عن تعبئة اخلازن ويذهب لينام (‪ ،)sleep‬ولن يرجع لعمله ما مل يوقظه‬
‫املستهلك‪ ،‬أما إذا كان اخلازن غري ممتلئ فسيواصل املنتج يف إحضار عناصر للخازن ِبألمر‪:‬‬

‫)‪putItemIntoBuffer(item‬‬

‫مث يزيد ‪ count‬بواحد كما يلي‪:‬‬

‫‪count = count + 1‬‬


‫املستهلك سيخترب هل اخلازن فارغ أم ال؟ ِبألمر‪:‬‬
‫)‪if (count == 0‬‬
‫إذا كان األمر صحيحا سيتوقف عن أخذ البياانت من اخلازن ويذهب لينام ولن يرجع لعمله ما مل يوقظه املنتج (عندما‬
‫حيضر بياانت للخازن)‪ .‬أما إذا كانت هنالك بياانت ِبخلازن فسيواصل املستهلك عمله أبخذ عنصر كل مرة من اخلازن‬
‫ِبألمر‪:‬‬

‫)(‪item = removeItemFromBuffer‬‬

‫مث ينقص ‪ِ count‬بألمر‪:‬‬

‫‪count = count – 1‬‬

‫‪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‬‬

‫‪ ‬فيذهب املستهلك لينام ولن يستيقظ مرة أخرى (فهو ال يعلم أن أمر اإليقاظ قد فُقد)‪.‬‬

‫‪ ‬سيستمر املنتج يف عمله إبحضار عناصر جديدة إىل اخلازن حىت ميتلئ‪:‬‬

‫)‪if (count == BUFFER_SIZE‬‬

‫‪ ‬بعدها سيذهب لينام ِبفرتاض أن املستهلك سيوقظه مرة أخرى‪ ،‬ولكن هذا لن حيدث‪.‬‬

‫‪ ‬ومبا أن العمليتني غارقتان يف نومهما‪ ،‬وتنتظر كل واحدة من األخرى إيقاظها (وال يوجد منبه)‪ ،‬فستظالن‬
‫انئمتني إىل األبد مما ينتج عنه اختناق ال حمالة‪.‬‬

‫ملن لدية الرغبة يف التبحر يف هذا املوضوع هنالك اوراق حبثية عديدة يف اجملال مثل‪:‬‬
‫‪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‬‬

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

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

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

‫يف الربانمج (‪ )0-2‬سنستخدم السيمافور ‪ fillCount‬والسيمافور ‪ emptyCount‬لتجنب جتاهل طلبات‬


‫اإليقاظ وحلل مشكلة االختناق‪.‬‬

‫يف هذا الربانمج يغلق املنتج السيمافور ‪( ،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‬‬

‫‪ .2.3.5‬مشكلة عشاء الفالسفة (‪)Dining philosophers problem‬‬


‫هي مشكلة قدمية يف التوازي‪ ،‬وهي عبارة عن مشكلة عمليات متعددة غري متزامنة‪ .‬يف عام ‪ ، 0350‬أعد‬
‫العامل ديكاسرتا (‪ )Edsger Dijkstra‬سؤال عن التزامن بني العمليات وهو يتحدث عن ‪ 3‬حاسبات تتنازع على‬
‫‪ 3‬سواقات أشرطة ممغنطة مشرتكة‪ .‬وبعدها بفرتة قليلة أمساها العامل توين هوار (‪ )Tony Hoare‬مشكلة عشاء‬
‫الفالسفة‪ .‬وهي متثيل نظري لعملية االختناق واحلرمان‪ ،‬حيث يقوم كل فيلسوف أبخذ شوكة واحدة يف البداية مث‬
‫يبحث عن الشوكة األخرى‪.‬‬

‫‪120‬‬
‫شكل رقم (‪ :)0-2‬عشاء الفالسفة [‪.]02‬‬

‫تعريف املشكلة‬

‫كان هنالك مخسة فالسفة جيلسون على طاولة مستديرة‪ ،‬وكانوا إما أن أيكلون أو أن يفكرون‪ ،‬فإذا أكل‬
‫أحدهم فال يفكر إن فكر فال أيكل‪ .‬وكانت لديهم مخسة شوك‪ ،‬واحدة بني كل فيلسوفني (على ميني كل فيلسوف‬
‫شوكة وعلى يساره أخرى)‪ .‬وحيتاج كل فيلسوف أن يستخدم شوكتني لألكل‪ .‬والبد من أن يستخدم الشوكتني اللتني‬
‫على ميينه وعلى يساره مباشرة‪ ،‬الشكل (‪ .)0-2‬إذا أخذ كل الفالسفة شوكاهتم اليسرى‪ ،‬عندها لن يستطيع أي منهم‬
‫احلصول على الشوكة اليمىن‪ ،‬وسيظل كل فيلسوف منتظرا الشوكة اليمىن حىت تفرغ‪ ،‬أي أن الفيلسوف ف‪ ،0‬سيكون‬
‫يف انتظار الفيلسوف ف‪ 0‬ليرتك شوكته‪ ،‬والفيلسوف ف‪ 0‬سينتظر الفيلسوف ف‪ 5‬ليرتك شوكته‪ ،‬وهكذا (انتظار‬
‫دائري)‪ ،‬مما يسبب إختناق (‪.)deadlock‬‬

‫حل غري جمدي‪:‬‬

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

‫‪121‬‬
‫ميكن حل هذه املشكلة جبعل فرتات انتظار الفالسفة عشوائية وِبلتايل إحتمال أهنا تكون متساوية قد يكون‬
‫ضعيفا جدا‪ ،‬وهذا ما يطبق ِبلفعل ىف كثري من األنظمة‪ ،‬لكن أحياان نكون حباجة إىل حل ال حيتمل الفشل بسبب‬
‫تطابق الفرتات العشوائية‪ .‬ذلك ألن هنالك من االنظمة ما تدير أجهزة حساسة ال تقبل إحتمال أي فشل مثل أنظمة‬
‫مراقبة املفاعل النووية‪.‬‬

‫حل آخر‪:‬‬

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

‫حل اثلث‪:‬‬

‫هنا نتتبع حالة الفيلسوف هل هو‪:‬‬

‫‪ ‬أيكل‪.‬‬

‫‪ ‬يفكر‪.‬‬

‫‪ ‬جائع (يريد أن حيصل على شوكة)‪.‬‬

‫حبيث يستطيع الفيلسوف اجلائع أن أيكل فقط إذا كان جاريه ال أيكالن‪.‬‬

‫‪ .2.3.4‬مشكلة مدخين السجاير (‪)Cigarette smokers problem‬‬


‫هي أحد مشاكل التوازي اليت تتحدث عن التزامن بني عن أربعة برامج‪ .‬ظهرت يف ‪ .0350‬وقصتها كتايل‪:‬‬

‫إفرتض أن السيجارة تتكون من ثالث أجزاء هي‪:‬‬

‫‪ ‬تبغ ‪.Tobacco‬‬

‫‪ ‬ورق ‪.paper‬‬

‫‪ ‬عود ثقاب ‪.match‬‬

‫فإذا كان هنالك ثالث مدخنني جيلسون حول طاولة‪ ،‬كل مدخن لديه خمزون كايف من أحد أجزاء السيجارة‪.‬‬
‫وهنالك شخص رابع غري مدخن مهمته اختيار أثنني من املدخني الثالثة عشوائيا‪ ،‬ليضع كل واحد من هؤالء اإلثنني‬
‫‪122‬‬
‫قطعة وا حدة من مما ميتلك من خمزونه على الطاولة‪ ،‬فمثال إذا اخرتان صاحب التبغ وصاحب الورق‪ ،‬فسيضع كل منهما‬
‫ما يكفي لعمل سيجارة واحدة‪ .‬ويطلب من املدخن الثالث عمل السيجارة فيقوم ِبخذ ما يف الطاولة مث إضافة املكون‬
‫الذي ليده لعمل السيجارة‪ ،‬مثال إذا كان املدخن الثالث صاحب الثقاب‪ ،‬فسياخذ الورقة ويلف عليها التبغ املوجودين‬
‫ِبلطاولة مث يشعل السيجارة بعود ثقاب من عنده‪ .‬عند ما تصبح الطاولة فارغة يقوم الشخص الرابع ِبختيار أثنني من‬
‫املدخنني عشوائيا لتتم نفس اخلطوات السابقة‪ .‬ويظل تكرار هذه اخلطوات دون توقف‪ .‬ال يتم ختزين سجاير وامنا‬
‫تصنع السيجارة مث تدخن مباشرة‪ ،‬مث تصنع أخرى وتدخن وهكذا‪ ،‬فليس من املسموح به عمل أكثر من سيجارة يف‬
‫نفس الوقت‪ .‬إذا مت وضع ورق وتبغ على الطاولة وكان صاحب اعواد الثقاب يدخن ستظل هذه املكوانت على الطاولة‬
‫دون ان يلمسها احد حىت يكمل صاحب الثقاب التدخني مث يقوم بعمل السيجارة‪.‬‬

‫املشكلة حتاكي ِبربعة برامج متثل االدوار االربعة (ثالث مدخنني و شخص رابع لالختيار)‪ .‬مسموح ِبستخدام‬
‫السيمافور للتزامن‪ ،‬وممنوع ألي واحد من الربامج االربعة بعمل قفز شرطي‪ ،‬فقط ميكن استخدام االنتظار املشروط‬
‫ِبستخدام ‪.wait‬‬

‫احلل‬

‫‪ ‬حتل هذه املشكلة ِبستخدام سيمافرو ثنائي أو ‪.mutexes‬‬

‫‪ ‬نعرف مصفوفة من السيمافورات الثنائية ‪ A‬واحدة لكل مدخن‪.‬‬

‫‪ ‬سيمافور ثنائي للطاولة ‪.T‬‬

‫‪ ‬هيئ كل سيمافورات املدخنني بقيمة إبتدائية صفر‪.‬‬

‫‪ ‬وأجعل قيمة سيمافور الطاولة يبدأ بواحد‪.‬‬

‫‪.‬ستكون شفرة الشخص الذي خيتار املدخنني هي‪:‬‬

‫{‪while true‬‬

‫)‪wait(T‬‬

‫‪choose smokers i and j nondeterministically‬‬

‫‪making the third smoker k‬‬

‫‪123‬‬
‫)]‪signal(A[k‬‬

‫}‬

‫وشفرة املدخن ‪ i‬هي‪:‬‬

‫{ ‪while true‬‬

‫)]‪wait(A[i‬‬

‫‪make a cigarette‬‬

‫)‪signal(T‬‬

‫‪smoke the cigarette‬‬

‫}‬

‫‪ .2.3.3‬اللقاء ‪Rendezvous‬‬
‫نفرتض أن شابني قد تواعدا على أن يلتقيا يف منتزه مل يرَيه من قبل‪ِ ،‬بلفعل قد حضرا كل واحد على حدا‪،‬‬
‫ولكنهما إندهشا من كرب حجم املنتزه‪ ،‬وِبلتايل صعوبة أن جيد أحدمها اآلخر‪ .‬هنا على كل شاب أن خيتار واحد من‬
‫أمرين‪:‬‬

‫‪ ‬أن ينتظر يف مكان واحد ويتوقع أن اآلخر سيبحث عنه‪.‬‬

‫‪ ‬أن يبدأ ِبلبحث إبفرتاض أن اآلخر سينتظر يف مكان واحد‪.‬‬

‫السؤال هنا أي اسرتاتيجية جيب أن خيتارا حىت يكون إحتمال اللقاء أكرب ؟‬

‫‪ ‬إذا قرر اإلثنني اإلنتظار فبالتأكيد لن جيد أحدمها اآلخر أبدا‪.‬‬

‫‪ ‬إن قررا أن يبحثا عن بعضهما فهنالك فرصة يف ان يتقابال‪.‬‬

‫‪ ‬إذا قرر أحدمها أن ينتظر واآلخر أن يبحث فحتما سيلتقيا (من انحية نظرية)‪.‬‬

‫‪124‬‬
‫‪ .2.3.2‬مشكلة احلالق النائم (‪)sleeping barber‬‬
‫إذا افرتضنا أن لدينا صالون حالقة به حالق واحد وكرسي حالقة واحد وعدد من الكراسي لإلنتظار‪ .‬إذا مل‬
‫يكن هنالك زِبئن سيجلس احلالق يف كرسي احلالقة وينام‪ ،‬وعندما يصل زبون فسيقوم إبيقاظ احلالق‪ .‬إذا جاء زبون‬
‫آخر وكان احلالق حيلق للزبون األول فسيجلس الزبون الثاين على أحد كراسي اإلنتظار‪ .‬وكلما يصل زبون سيجلس يف‬
‫كرسي إنتظار إىل أن متتلي كراسي اإلنتظار‪ .‬إذا جاء زبون ووجد كراسي اإلنتظار مشغولة فعليه مغادرة الصالون‪.‬‬

‫احلل‬

‫حلل هذه املشكلة نستخدم ثالث سيمافورات‪:‬‬

‫‪ ‬سيمافور للزِبئن املنتظرين‬

‫‪ ‬سيمافور للحالق (لنعرف هل هو انئم (عاطل) أم يعمل)‬

‫‪ ‬سيمافور لتحقيق والتأكد من املنع املتبادل (‪ :)mutual exclusion‬حبيث ال نسمح لشخصني‬


‫ِبحلالقة يف وقت واحد‪.‬‬

‫كل ما حيضر زبون سيحاول احلصول على كرسي احلالقة (‪ )mutex‬وسيظل كذلك حىت ينجح‪ .‬على الزبون‬
‫الذي حيضر للصالون أن حيسب عدد الزِبئن املنتظرين فإذا كان أقل من عدد الكراسي فسيجلس وإال فسيغادر (حياول‬
‫احلصول على كرسي سواء يف غرفة اإلنتظار أو كرسي احلالق نفسه)‪.‬‬

‫إذا وجد الزبون كرسي سيجلس وينقص عدد الكراسي الفارغة بواحد (‪.)critical section‬‬

‫يقوم الزبون إبسال إشارة إىل احلالق إليقاظه‪ ،‬وسيحرر ‪ mutex‬للسماح للزِبئن (أو احلالق) ِبملقدرة على‬
‫احلصول عليه‪ .‬إذا كان احلالق مشغول فعلى الزِبئن االنتظار‪ .‬سيجل احلالق يف إنتظار دائم‪ ،‬يتم ايقاظه أبي زبون من‬
‫املنتظرين‪ ،‬وعندما يستيقظ سريسل إشارات للزِبئن املنتظرين بواسطة السيمافور للسماح هلم ِبحلالقة ‪ ،‬واحد كل مرة‪.‬‬
‫هذه املشكلة حتتوي على حالق واحد لذلك تسمى أحياان (‪ .)single sleeping barber problem‬فيما‬
‫يلي شفرات مبدئية (‪،)pseudo-code‬تضمن التزامن بني احلالق والزِبئن خالية من االختناق‪ ،‬ولكنها قد تقود إىل‬
‫حرمان الزبون‪.‬‬

‫جند ‪ P‬و ‪ V‬مها دالتني توفرمها السيمافورات‪.‬‬

‫‪Semaphore Customers = 0‬‬


‫‪Semaphore Barber = 0‬‬
‫‪Semaphore accessSeats (mutex) = 1‬‬
‫‪125‬‬
‫عدد املقاعد الفارغة ‪int NumberOfFreeSeats = N //‬‬

‫عملية أو خيط احلالق‪:‬‬

‫تكرار غري منتهي ‪while(true) { //‬‬


‫حماولة احلصول على زبون وإذا اليوجد زِبئن ينام ‪P(Customers) //‬‬
‫يف هذه اللحظة مت إيقاظه‪ ،‬يريد تعديل عدد املقاعد املتاحة ‪P(accessSeats) //‬‬
‫لقد أصبح هنالك مقعد فارغ‪NumberOfFreeSeats++ //‬‬
‫احلالق جاهز ليبدأ احلالقة‪V(Barber) //‬‬
‫النريد إغالق الكراسي ‪V(accessSeats) //‬‬
‫احلالق اآلن حيلق لزبون ‪//‬‬
‫}‬

‫عملية أو خيط الزبون‪:‬‬

‫تكرار ال منتهي‪while(true) { //‬‬


‫حماولة احلصول على مقعد ‪P(accessSeats) //‬‬
‫إذا كان هنالك مقعد فارغ ‪if ( NumberOfFreeSeats > 0 ) { //‬‬
‫إجلس على املقعد ‪NumberOfFreeSeats-- //‬‬
‫أخرب احلالق ‪ ،‬الذي هو يف انتظار زبون ‪V(Customers) //‬‬
‫ال تحتاج إىل إغالق الكراسي ‪V(accessSeats) //‬‬
‫اآلن حان دور الزبون‪ ،‬لكنه سينتظر إذا كان احلالق مشغول ‪P(Barber) //‬‬
‫هنا سيتمكن الزون من احلالقة ‪//‬‬
‫ال توجد مقاعد فارغة ‪} else { //‬‬
‫حرر إغالق املقاعد ‪V(accessSeats) //‬‬
‫سيغادر الزيون دون أن حيلق‪//‬‬
‫}‬
‫}‬

‫‪ .2.2‬متارين غري حملولة‬


‫ما هو مفهوم التزامن ؟‬ ‫‪.0‬‬

‫ما املقصود ِبلنزاع ؟‬ ‫‪.0‬‬

‫ما الفرق بني العملية املستقلة والعملية املتعاونة ؟‬ ‫‪.5‬‬

‫‪126‬‬
‫ملاذا حتتاج العمليات املتوازية التعاون فيما بينها ؟‬ ‫‪.4‬‬

‫ما املقصود حبالة السباق (‪ )race condition‬؟ وما هي مسبباهتا ؟ وكيف يتم حلها ؟‬ ‫‪.3‬‬

‫عرف املنطقة احلرجة (‪ )crtitical section‬؟‬ ‫‪.2‬‬

‫عرف اللقاء ‪ Rendezvous‬؟‬ ‫‪.5‬‬

‫أذكر مخسة من مشاكل التزامن الكالسكية ؟‬ ‫‪.8‬‬

‫تتصل العمليات املتعاونة فيما بينها بطريقتني‪ ،‬ما مها ؟‬ ‫‪.3‬‬

‫‪127‬‬
‫الباب السابع‪ :‬االختناق‬

‫‪128‬‬
‫الباب السابع‬

‫االختناق (‪)deadlock‬‬

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

‫يف هذا الباب سنتحدث عن االختناق وحاالته وكيف يتعامل نظام التشغيل معه‪.‬‬

‫‪ .5.0‬تعريف املورد (‪)resource‬‬


‫امل ورد ه و ك ل م ا يس تخدمه ال ربانمج م ن مك وانت مادي ة (مث ل الطابع ة‪ ،‬الق رص الص لب‪ ،‬وال ذاكرة) وب رامج‬
‫وملفات (مثل جدول قاعدة بياانت‪ ،‬برانمج ما‪ ،‬صفحة إنرتنت)‪.‬‬

‫‪ .5.0‬مفهوم االختناق‬
‫إذا كان لدينا عمليتني (أ و ب)‪ ،‬وكانت العملية أ تستخدم عدة موارد (من بينها املورد م‪ )0‬وحتتاج إىل مورد‬
‫إضايف هو املورد م‪ ،0‬يف نفس الوقت ل دينا العملي ة ب ال يت تس تخدم امل ورد م‪ 0‬وحتت اج إىل م ورد آخ ر لتكم ل تنفي ذها‬
‫هو املورد م‪( 0‬الذي حبوزة العملية أ) ‪ ،‬هنا ستظل العمليتان يف هذا الوضع إىل ما شاء هللا‪ ،‬فكل عملية لن تكتمل ألهنا‬
‫حتتاج مورد العملية األخرى‪ ،‬هنا حيدث االختناق ألن كل عملية حتتكر مواردها اليت تستخدمها وال ترتكها أبدا‪.‬‬

‫‪ .5.0.0‬مثال توضيحي‬

‫إذا كنت تقود سيارة (عملية) مث دخلت يف جسر ضيق (مورد) يتسع لسيارة واحدة فقط‪ ،‬وجاءت سيارة من‬
‫االجتاه املعاكس (عملية أخرى) ودخلت نفس اجلسر ‪ ،‬فالتقت السياراتن يف منتصف اجلسر وكل سيارة تريد املرور ع رب‬
‫اجلسر‪ ،‬هنا نقول أن هنالك اختناق يف املمر‪ ،‬شكل (‪.)0-5‬‬

‫شكل رقم (‪ :)0-5‬اختناق داخل جسر‪.‬‬


‫‪129‬‬
‫مثال آخر‪ ،‬إذا كان هنالك تقاطعات طرق كما يف الشكل (‪ ،)0-5‬فإن أي سيارة ال ميكنها التحرك ما مل‬
‫خنرج بعض السيارات خارج الطريق‪.‬‬

‫شكل رقم (‪ :)0-5‬اختناق سيارات يف تقاطعات طرق [‪.]3‬‬

‫‪ .5.0.0‬معاجلة االختناق‬

‫نالحظ أن االختناق دوما ميكن حله‪ ،‬فمثال يف اختن اق اجلس ر ميك ن لس يارة أن ترج ع للخل ف لت رتك الس يارة‬
‫األخرى لتمر (إجبار احدى السيارتني على التخلي عن اجلسر)‪.‬‬

‫يف مثال تقاطع الطرق جند أن إزاحة بعض السيارات خارج الطريق حيل االختناق‪.‬‬

‫‪ .5.5‬أنواع املوارد‬
‫تنقسم املوارد إىل نوعني مها‪:‬‬

‫‪ ‬م وارد قابل ة للن زع (‪ :)preemptable resources‬ميك ن ن زع ه ذا الن وع م ن امل وارد م ن العملي ة ال يت‬
‫تستخدمه دون أن يسبب ذلك مشاكل‪ ،‬مثل الذاكرة‪.‬‬

‫‪ ‬م وارد غ ري قابل ة للن زع (‪ :)non-preemptable resources‬ق د حي دث خل ل ِبلعملي ة (تتعط ل) إذا‬


‫انتزعنا منها املورد‪ ،‬مثل الطابعة‪ ،‬مسجل األسطواانت الضوئية (‪.)CD writer‬‬

‫عندما تريد عملية استخدام مورد فإهنا تقوم بطلب املورد أوال‪ ،‬مث‬
‫تستخدمه‪ ،‬وعند االنتهاء منه تتخلى عنه لتستفيد منه عملية أخرى‪.‬‬

‫‪ .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‬‬

‫شكل رقم (‪ :)5-5‬رسومات توضح العالقة بني املوارد والعمليات [‪.]03‬‬

‫‪131‬‬
‫‪ .5.3.0‬متثيل االنتظار الدائري ِبلرسم‬

‫مثال يف الشكل (‪ ،)4-5‬جند أن هنالك انتظار دائري حي ث جن د أن العملي ة ‪ D‬تس تخدم امل ورد ‪ U‬وحتت اج‬
‫إىل املورد ‪ ،R‬وجند أن املورد ‪ R‬تستخدمه العملية ‪ E‬اليت تريد املورد ‪ V‬الذي يستخدم بواسطة العملية ‪ ،G‬وجند أن‬
‫‪ G‬تريد املورد ‪ U‬الذي تستخدم العملية ‪ D‬وهكذا جند أنفسنا يف دائرة انتظار‪.‬‬

‫شكل رقم (‪ :)4-5‬انتظار دائري [‪.]03‬‬

‫إذا ابتدأت من أي عملية أو مورد يف أي شكل ‪ ،‬وتتبعت اجتاه األسهم فقادتك إىل نفس‬
‫النقطة اليت بدأت منها فأنت يف انتظار دائري بال شك‪ ،‬مثال يف الشكل (‪ ،)4-5‬إذا بدأت‬
‫من أي نقطة (‪ )R‬مثال وحتركت مع اجتاه االسم ستصل مرة أخرى إىل ‪ R‬مما يدل على‬
‫وجود انتظار دائري‪.‬‬

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

‫ميكن التعامل مع االختناق بطريقتني ‪:‬‬


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

‫‪ .5.2.0‬جتاهل االختناق (خوارزمية النعامة (‪))The Ostrich Algorithm‬‬

‫‪132‬‬
‫أبس ط خوارزمي ة تس تخدم يف جتاه ل االختن اق ه ي خوارزمي ة النعام ة (أدف ن رأس ك يف الرم ل وتظ اهر أبن ه ال توج د‬
‫مشكلة)‪.‬‬

‫التظاهر بعدم حدوث االختناق أو اهلروب من املشكلة نلجأ إليها لسببني مها‪:‬‬

‫‪ ‬إذا كان االختناق حيدث اندرا‪.‬‬

‫‪ ‬إذا كان عالجه مكلفا‪.‬‬

‫‪ .5.2.0‬اكتشاف االختناق‬

‫هنالك طرق عديدة الكتشاف االختناق‪.‬‬

‫‪ .5.2.0.0‬اكتشاف االختناق ملورد واحد من كل نوع‬

‫هن ا سنس تخدم الرس م لالكتش اف االختن اق يف نظ ام ب ه م ورد م ن ك ل ن وع (م ثال طابع ة واح دة‪ ،‬ماس حة‬
‫واحدة‪.. ،‬اخل)‪.‬‬

‫مثال‬

‫إذا كان لدينا ‪ 5‬عمليات من ‪ A‬إىل ‪ G‬و مورد واحد من كل نوع‪ ،‬وكانت طلبات العمليات كما يلي‪:‬‬

‫‪ ‬العملية ‪ A‬تستخدم املورد ‪ R‬وتريد املورد ‪ S‬إلمتام عملها‪.‬‬

‫‪ ‬العملية ‪ B‬ال تستخدم أي مورد وتريد املورد ‪ T‬إلمتام عملها‪.‬‬

‫‪ ‬العملية ‪ C‬ال تستخدم أي مورد وتريد املورد ‪ S‬إلمتام عملها‪.‬‬

‫‪ ‬العملية ‪ D‬تستخدم املورد ‪ U‬وتريد املورد ‪ S‬و املورد ‪ T‬إلمتام عملها‪.‬‬

‫‪ ‬العملية ‪ E‬تستخدم املورد ‪ T‬وتريد املورد ‪ V‬إلمتام عملها‪.‬‬

‫‪ ‬العملية ‪ F‬تستخدم املورد ‪ W‬وتريد املورد ‪ S‬إلمتام عملها‪.‬‬

‫‪ ‬العملية ‪ G‬تستخدم املورد ‪ V‬وتريد املورد ‪ U‬إلمتام عملها‪.‬‬

‫نريد أن نعرف هل سيكون هنالك اختناق أم ال (اكتشاف االختناق) ؟‬

‫احلل‬

‫‪133‬‬
‫س نقوم إبنش اء رس م لك ل امل وارد م ع العملي ات ال يت تس تخدمها وال يت تري دها‪ ،‬فيك ون الرس م كم ا يف الش كل‬
‫(‪.)3-5‬‬

‫شكل رقم (‪ :)3-5‬رسم يبني املوارد [‪.]03‬‬

‫نالحظ من الشكل (‪ ، )3-5‬أن هنالك اختناق‪ ،‬ألنين مثال إذا بدأت من املورد ‪ U‬مث تتبع ت اجت اه األس هم‬
‫سأجد نفسي يف ‪ U‬مرة أخرى وهذا يعين وجود انتظار دائري‪ ،‬مع وجود مسببات االختناق األخرى‪.‬‬

‫‪ .5.2.0.0‬اكتشاف االختناق لعدة موارد‬

‫قد يكون لدينا عدد من املوارد من كل نوع (مثال ‪ 3‬طابعات‪ 4 ،‬ماسحات‪... ،‬اخل)‪ ،‬يف هذه احلالة يصعب‬
‫استخدام الرسومات للتعبري عن املوارد املتعددة لذلك سنستخدم طريقة احملددات (‪ )matrix‬الكتشاف االختناق‪.‬‬

‫إذا ك ان ل دينا ع دد ‪ n‬عملي ة و ع دد ‪ m‬ن وع م ن امل وارد‪ ،‬حي ث ميث ل ‪ E1‬ع دد امل وارد م ن الن وع األول (م ثال ع دد‬
‫املاس حات) ‪ E2 ،‬ميث ل ع دد امل وارد م ن الن وع الث اين (م ثال ع دد الطابع ات)‪ ،‬وهك ذا إىل ‪ .Em‬حبي ث ننش ي متج ه‬
‫(‪ )vector‬للموارد اليت توجد ِبلنظام‪ .‬مثال إذا كان لدى ‪ 5‬طابعات‪ 2 ،‬ماسحات‪ 3 ،‬أقراص‪ ،‬فإن املتجه الذي ميثل‬
‫هذه املوارد سيكون كالتايل‪:‬‬

‫‪)5‬‬ ‫‪6‬‬ ‫(‪7‬‬

‫شكل رقم (‪)2-5‬‬

‫إذا ك ان ل دينا ع دد ‪ 3‬طابع ات‪ 4 ،‬ماس حات‪ ،‬و ‪ 5‬أق راص مس تخدمة بواس طة عملي ات خمتلف ة‪ ،‬ف إن املتج ه‬
‫الذي ميثل املوارد املستخدمة سيكون‪:‬‬

‫‪134‬‬
‫‪)3‬‬ ‫‪4‬‬ ‫(‪5‬‬

‫شكل رقم (‪)5-5‬‬

‫وم ن هن ا ميكنن ا إنش اء متج ه ميث ل امل وارد املتاح ة (غ ري املس تخدمة) وذل ك بط رح امل وارد املس تخدمة م ن امل وارد‬
‫الكلية كما يلي‪:‬‬

‫‪ = )5‬املوارد الكلية‪.‬‬ ‫‪6‬‬ ‫(‪7‬‬

‫‪ = )3‬املوارد املستخدمة‪.‬‬ ‫‪4‬‬ ‫(‪5‬‬

‫‪ = )2‬املوارد املتاحة‬ ‫‪2‬‬ ‫(‪2‬‬

‫شكل رقم (‪)8-5‬‬

‫حمددة االستخدام (املوارد اليت تستخدمها العمليات حاليا)‬

‫ميكننا تكوين حمددة للم وارد املس تخدم بواس طة ع دة عملي ات‪ ،‬حي ث ميث ل ك ل ص ف يف احمل ددة م وارد عملي ة‬
‫معينة‪ .‬مثال لو أردان إنشاء حمددة ألربع عمليات كانت تستخدم املوارد أعاله‪ ،‬فإن احملددة ستكون كما يلي‪:‬‬

‫نوع املورد‬

‫األقراص‬ ‫املاسحات‬ ‫الطابعات‬

‫‪1‬‬ ‫‪1‬‬ ‫‪5‬‬ ‫املوارد اليت تستخدمها العملية األوىل‬

‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫املوارد اليت تستخدمها العملية الثانية‬

‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫املوارد اليت تستخدمها العملية الثالثة‬

‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫املوارد اليت تستخدمها العملية الرابعة‬

‫شكل رقم (‪)3-5‬‬

‫‪135‬‬
‫من الشكل (‪ )3-5‬جند أن‪:‬‬

‫‪ ‬العملية األوىل تستخدم ‪ 3‬طابعات‪ ،‬ماسحة‪ ،‬وقرص‪.‬‬

‫‪ ‬العملية الثانية تستخدم ماسحة وقرص‪.‬‬

‫‪ ‬العملية الثالثة تستخدم ماسحة واحدة فقط‪.‬‬

‫‪ ‬العملية الرابعة ماسحة وقرص‪.‬‬

‫حمددة الطلبات (املوارد اليت حتتاجها العمليات)‬

‫بنفس الطريقة ميكن إنشاء حمددة للموارد اليت حتتاجها كل عملية من كل مورد‪ ،‬كما يف املثال التايل‪:‬‬

‫األقراص‬ ‫املاسحات‬ ‫الطابعات‬

‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫املوارد اليت حتتاجها العملية األوىل‬

‫‪7‬‬ ‫‪6‬‬ ‫‪5‬‬ ‫املوارد اليت حتتاجها العملية الثانية‬

‫‪3‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫املوارد اليت حتتاجها العملية الثالثة‬

‫‪4‬‬ ‫‪4‬‬ ‫‪4‬‬ ‫املوارد اليت حتتاجها العملية الرابعة‬

‫شكل رقم (‪)02-5‬‬

‫من الشكل (‪ )02-5‬جند أن‪:‬‬

‫‪ ‬العملية األوىل حتتاج إىل طابعتني وماسحة وقرصني‪.‬‬

‫‪ ‬العملية الثانية حتتاج إىل ‪ 3‬طابعات‪ 2 ،‬ماسحات و‪ 5‬أقراص‪.‬‬

‫‪ ‬العملية الثالثة حتتاج ‪ 4‬طابعات‪ 5 ،‬ماسحات‪ ،‬و‪ 5‬أقراص‪.‬‬

‫‪ ‬العملية الرابعة حتتاج إىل ‪ 4‬طابعات‪ 4 ،‬ماسحات‪ ،‬و ‪ 4‬أقراص‪.‬‬

‫‪136‬‬
‫اكتشاف االختناق ِبحملددات‬

‫اآلن ل دي ع دد امل وارد الكلي ة (ش كل ‪ ،)2-5‬وع دد امل وارد احل رة (ش كل ‪ ،)8-5‬وع دد امل وارد املس تخدمة‬
‫(ش كل ‪ ،)3-5‬وع دد امل وارد املطلوب ة ال يت حتتاجه ا العملي ات إلمت ام عمله ا (ش كل ‪ ،)02-5‬س نقوم ِبس تخدام ه ذه‬
‫املعطيات الكتشاف هل سيحدث اختناق أم ال ؟‬

‫طريقة احلل‬

‫سنقوم أوال مبقارن ة امل وارد احل رة (ش كل ‪ )8-5‬م ع ص فوف حم ددة امل وارد املطلوب ة‪ ،‬مث خنت ار الص ف (العملي ة)‬
‫الذي تكون موارده املطلوبة أقل أو تساوي املوارد احلرة املتوفرة‪ .‬مبقارن ة ص فوف احمل ددة يف الش كل (‪ )02-5‬م ع امل وارد‬
‫احلرة يف الشكل (‪ )8-5‬سنجد أن العملية األوىل ميكنها إكمال عملها ِبستخدام املوارد احلرة املتاحة‪ .‬سنعطي العملية‬
‫األوىل ما حتتاج من املوارد املتاحة وخنصم ذلك من املوارد احلرة كما يلي‪:‬‬

‫‪ = )2‬املوارد احلرة‬ ‫‪2‬‬ ‫(‪2‬‬

‫‪ = )2‬املوارد اليت حتتاجها العملية األوىل‬ ‫‪2‬‬ ‫(‪2‬‬

‫‪ = )0‬املتبقي من املوارد احلرة‪.‬‬ ‫‪0‬‬ ‫(‪0‬‬

‫شكل رقم (‪)00-5‬‬

‫إذا كانت املوارد احلرة تكفي لواحد من عمليتني‪ ،‬فاألفضل اختيار العملية اليت تستخدم موارد أكثر‬
‫ذلك ألين سأحصل على موارد حرة أكثر بعد أن تكمل العملية عملها وحترر ما تستخدم من موارد‪.‬‬

‫اآلن ستكمل العملية األوىل عملها مث حترر ما لديها من موارد (اليت كانت تستخدم مسبقا واليت إعطيناها هلا‬
‫يف اخلطوة السابقة)‪ِ ،‬بلتايل سيكون لدي من املوارد احلرة ما يلي‪:‬‬

‫‪ = )0‬املوارد احلرة املتبقية بعد إعطاء العملية األوىل ما حتتاج من موارد‬ ‫‪0‬‬ ‫(‪0‬‬

‫‪ = )1‬املوارد اليت كانت تستخدمها العملية األوىل من قبل (من حمددة االستخدام)‬ ‫‪1‬‬ ‫(‪5‬‬

‫‪ =)2‬املوارد اليت استخدمتها العملية األوىل مؤخرا (من حمددة املطلوب)‬ ‫‪2‬‬ ‫(‪2‬‬

‫‪ = )3‬املوارد احلرة بعد انتهاء العملية األوىل وحتريرها ملواردها‬ ‫‪3‬‬ ‫(‪7‬‬

‫شكل رقم (‪)00-5‬‬

‫‪137‬‬
‫اآلن سنقارن املوارد احلرة اليت حصلنا عليها بع د انته اء العملي ة األوىل وحتري ر موارده ا م ع املتبق ي م ن ص فوف‬
‫حم ددة املطل وب (ش كل ‪ .)02-5‬س نجد أن العملي ة ال يت ميك ن أن تكفيه ا امل وارد احل رة ه ي العملي ة الثالث ة‪ ،‬فنخص م‬
‫املوارد اليت تريد من املوارد احلرة اليت لدينا كما يف الشكل (‪.)05-5‬‬

‫‪ = )3‬املوارد احلرة‬ ‫‪3‬‬ ‫(‪7‬‬

‫‪ = )3‬املوارد اليت حتتاجها العملية الثالثة‬ ‫‪3‬‬ ‫(‪4‬‬

‫‪ = )0‬املتبقي من املوارد احلرة‪.‬‬ ‫‪0‬‬ ‫(‪3‬‬

‫شكل رقم (‪)05-5‬‬

‫اآلن س تكمل العملي ة الثالث ة عمله ا مث حت رر م ا ل ديها م ن م وارد (الق دمي واجلدي د)‪ِ ،‬بلت ايل س يتوفر ل دي م ن‬
‫املوارد التايل (بعد انتهاء العملية الثالثة)‪:‬‬

‫‪ = )0‬املوارد احلرة املتبقية بعد إعطاء العملية األوىل ما حتتاج من موارد‬ ‫‪0‬‬ ‫(‪3‬‬

‫‪ = )0‬املوارد اليت كانت تستخدمها العملية الثالثة من قبل (من حمددة االستخدام)‬ ‫‪1‬‬ ‫(‪0‬‬

‫‪ =)3‬املوارد اليت استخدمتها العملية الثالثة مؤخرا (من حمددة املطلوب)‬ ‫‪3‬‬ ‫(‪4‬‬

‫‪ = )3‬املوارد احلرة بعد انتهاء الثالثة وحتريرها ملواردها‬ ‫‪4‬‬ ‫(‪7‬‬

‫شكل رقم (‪)04-5‬‬

‫اآلن س نقارن امل وارد احل رة ال يت حص لنا عليه ا بع د انته اء العملي ة الثالث ة وحتري ر موارده ا كم ا يف الش كل (‪-5‬‬
‫‪ ،)04‬مع املتبقي م ن العملي ات ال يت مبح ددة املطل وب (ش كل ‪ .)02-5‬س نجد أن امل وارد املت وفرة ل دينا ال تكف ي ألي‬
‫عملية من العمليات املتبقية‪ .‬وِبلتايل ميكننا القول أن هنالك اختناق حدث يف هذه النقطة‪.‬‬

‫‪138‬‬
‫مثال (‪)6‬‬

‫اآلن سنعرض مثاال آخر بدون شرح مفصل يوضح حالة ال حيدث فيها اختناق‪.‬‬

‫املعطيات‪:‬‬

‫‪)1‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫املوارد املوجودة ِبلنظام =(‪4‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫املستخدم منها =‬

‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪2‬‬

‫‪0‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪0‬‬

‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪2‬‬ ‫املوارد املطلوبة =‬

‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬

‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬

‫املطلوب‪ :‬هل يوجد اختناق أم ال ؟‬

‫احلل‬

‫أوال تحسب املوارد املتوفرة وذلك بطرح املوارد املستخدمة (جمم وع أعم دة حم ددة امل وارد املس تخدمة) م ن امل وارد‬
‫كما يلي‪:‬‬

‫‪)1‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫(‪4‬‬ ‫موارد النظام‬

‫‪)1‬‬ ‫‪3‬‬ ‫‪1‬‬ ‫(‪2‬‬ ‫املوارد املستخدمة‬

‫‪)0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫(‪2‬‬ ‫املوارد املتوفرة‬

‫مث نقارن املتاح مع صفوف املطلوب (يف حمددة املطلوب)‪ ،‬فنجد أن الصف الثالث ميكنه العمل ‪ ،‬فنعطيه م ا‬
‫يريد من موارد كما يلي‪:‬‬

‫‪139‬‬
‫‪)0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫(‪2‬‬ ‫املوارد املتوفرة =‬

‫‪)0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫(‪2‬‬ ‫املوارد املطلوبة (صف ‪)5‬‬

‫‪)0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫(‪0‬‬ ‫املوارد املتوفرة بعد إعطاء صف ‪ 5‬موارده‬

‫بعد انتهاء العملية صف ‪ ،5‬سنستفيد من موارده‪ ،‬فيصبح لدينا املوارد املتاحة التالية‪:‬‬

‫‪)0‬‬ ‫(‪0 0 0‬‬ ‫املوارد املتوفرة بعد إعطاء صف ‪ 5‬موارده‬

‫‪)0‬‬ ‫(‪2 1 0‬‬ ‫موارد صف‪ 5‬يف حمددة املستخدم‬

‫‪)0‬‬ ‫(‪0 1 2‬‬ ‫موارد صف‪ 5‬يف حمددة املطلوب‬

‫‪)0‬‬ ‫(‪2 2 2‬‬ ‫املوارد املتوفرة بعد انتهاء صف ‪ 5‬من عمله‬

‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪2‬‬ ‫املوارد املطلوبة =‬

‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬

‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬

‫اآلن سنقارن املتاح مع صفوف املطلوب (يف حمددة املطلوب)‪ ،‬فنجد أن الصف الثاين ميكنه العمل ‪ ،‬فنعطي ه‬
‫ما يريد من موارد كما يلي‪:‬‬

‫‪)0‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫(‪2‬‬ ‫املوارد املتوفرة =‬

‫‪)0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫(‪1‬‬ ‫املوارد املطلوبة (صف ‪)0‬‬

‫‪)0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫(‪1‬‬ ‫املوارد املتوفرة بعد إعطاء صف ‪ 0‬موارده‬

‫بعد انتهاء العملية صف ‪ ،0‬سنستفيد من موارده‪ ،‬فيصبح لدينا املوارد املتاحة التالية‪:‬‬

‫‪)0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫(‪1‬‬ ‫املوارد املتوفرة بعد إعطاء صف ‪ 0‬موارده‬

‫‪)1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫(‪2‬‬ ‫موارد صف‪ 0‬يف حمددة املستخدم‬

‫‪140‬‬
‫‪)0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫(‪1‬‬ ‫موارد صف‪ 0‬يف حمددة املطلوب‬

‫‪)1‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫(‪4‬‬ ‫املوارد املتوفرة بعد انتهاء صف ‪ 0‬من عمله‬

‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪2‬‬ ‫املوارد املطلوبة =‬

‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬

‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬

‫جن د أن الص ف املتبق ي يف حم ددة املطل وب تكفي ه امل وارد املت وفرة بع د انته اء ص ف‪ ،0‬وه ذا يع ين أن ه ال يوج د‬
‫اختناق‪.‬‬

‫‪ .5.2.5‬معاجلة االختناق‬

‫اخلط وة الس ابقة وض حت كي ف ميكنن ا اكتش اف االختن اق‪ ،‬هن ا س نقوم مبعاجل ة االختن اق بع د إكتش افه‪ ،‬وي تم‬
‫ذلك بعدة طرق منها‪:‬‬

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

‫‪ ‬إيقاف بعض العمليات اليت تش ارك يف االختن اق‪ :‬ميك ن توقي ف عملي ة (قتله ا كم ا يق ال يف لي نكس (‪))kill‬‬
‫واالستفادة من مواردها لتشغيل بقية العمليات‪ .‬يف هذه احلالة سنحاول قتل العمليات اليت ميكن تشغيلها من‬
‫جديد بسهولة ودون أن تسبب مشاكل‪.‬‬

‫‪141‬‬
‫‪ .5.2.4‬الوقاية‬

‫ميكننا أن نقي النظام من حدوث االختناق وذلك بطريقتني‪:‬‬

‫‪ ‬جتنبه‬

‫‪ ‬منعه‬

‫‪ .5.2.4.0‬جتنب االختناق ِبستخدام خوارزمية املصرف ‪Banker's Algorithms‬‬

‫هن ا حي اول النظ ام التأك د م ن أن امل وارد ميك ن حجزه ا بص ورة آمن ة‪ ،‬وذل ك قب ل الش روع يف حجزه ا‪ .‬هنال ك‬
‫العديد من اخلوارزميات اليت ميكن استخدامها للتأكد من أن املوارد ميكن حجزها ب دون أن حي دث اختن اق (ص ورة آمن ة‬
‫‪.)safe state‬‬

‫مثال‬

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

‫يكفيها‬ ‫لديها‬ ‫العملية‬


‫‪3‬‬ ‫‪5‬‬ ‫أ‬
‫‪4‬‬ ‫‪0‬‬ ‫ب‬
‫‪5‬‬ ‫‪0‬‬ ‫ج‬
‫املوارد املتوفرة ‪5 :‬‬

‫شكل رقم (‪ :)03-5‬العمليات‪ ،‬املوارد املستخدم واملطلوبة‪.‬‬

‫العملي ة أ تس تخدم ‪ 5‬م وارد وحتت اج أن تص ل إىل ‪ 3‬م وارد‪ ،‬العملي ة ب ل ديها م وردين وتري د أن تص ل إىل ‪4‬‬
‫موارد‪ ،‬العملية ج لديها موردين وتريد أن تكمل مواردها إىل ‪ 5‬م وارد لتعم ل‪ .‬و ل دينا ث الث م وارد متاح ة‪ .‬نري د التأك د‬
‫من أننا لو استخدمنا هذه املوارد املتوفرة ميكن أن نصل إىل حالة آمنة (ال حيدث اختناق)‪.‬‬

‫احلل‬
‫‪142‬‬
‫مبقارن ة املت وفر م ع املطل وب‪ ،‬جن د أن العملي ة ب ميك ن أن تعم ل وذل ك إبعطائه ا م وردين م ن املت وفر فيك ون‬
‫لدى مورد واحد متوفر كما يف الشكل ( ‪.)02-5‬‬

‫يكفيها‬ ‫لديها‬ ‫العملية‬


‫‪3‬‬ ‫‪5‬‬ ‫أ‬
‫‪4‬‬ ‫‪4‬‬ ‫ب‬
‫‪5‬‬ ‫‪0‬‬ ‫ج‬
‫املوارد املتوفرة‪0 :‬‬

‫شكل رقم (‪)02-5‬‬

‫بعد انتهاء العملية ب سترتك املوارد اليت كانت تستخدم (‪ 4‬موارد)‪ ،‬فيصبح املتوفر هو ‪ ،3‬كما يف الشكل (‪.)05-5‬‬

‫يكفيها‬ ‫لديها‬ ‫العملية‬


‫‪3‬‬ ‫‪5‬‬ ‫أ‬
‫‪-‬‬ ‫‪-‬‬ ‫ب‬
‫‪5‬‬ ‫‪0‬‬ ‫ج‬
‫املوارد املتوفرة‪3 :‬‬

‫شكل رقم (‪)05-5‬‬

‫مبقارنة املتوفر مع املطلوب‪ ،‬جند أن العملية ج ميكن أن تعمل وذلك إبعطائها ‪ 3‬موارد وهي كل ما يتوفر كما يف‬
‫الشكل ( ‪.)08-5‬‬

‫يكفيها‬ ‫لديها‬ ‫العملية‬


‫‪3‬‬ ‫‪5‬‬ ‫أ‬
‫‪-‬‬ ‫‪-‬‬ ‫ب‬
‫‪5‬‬ ‫‪5‬‬ ‫ج‬
‫املوارد املتوفرة‪2 :‬‬

‫شكل رقم (‪)08-5‬‬

‫بعد انتهاء العملية ج سترتك املوارد اليت كانت تستخدم (‪ 5‬موارد)‪ ،‬فيصبح املتوفر هو ‪ ،5‬كما يف الشكل (‪.)08-5‬‬

‫‪143‬‬
‫يكفيها‬ ‫لديها‬ ‫العملية‬
‫‪3‬‬ ‫‪5‬‬ ‫أ‬
‫‪-‬‬ ‫‪-‬‬ ‫ب‬
‫‪-‬‬ ‫‪-‬‬ ‫ج‬
‫املوارد املتوفرة‪5 :‬‬

‫شكل رقم (‪)08-5‬‬

‫مبقارنة املتوفر مع املطلوب‪ ،‬جن د أن العملي ة أ ميك ن أن تعم ل وذل ك إبعطائه ا ‪ 2‬م وارد ويبق ى يل م ورد واح د‬
‫غري مستخدم كما يف الشكل ( ‪.)03-5‬‬

‫يكفيها‬ ‫لديها‬ ‫العملية‬


‫‪3‬‬ ‫‪3‬‬ ‫أ‬
‫‪-‬‬ ‫‪-‬‬ ‫ب‬
‫‪-‬‬ ‫‪-‬‬ ‫ج‬
‫املوارد املتوفرة‪0 :‬‬

‫شكل رقم (‪)03-5‬‬

‫بعد انتهاء العملي ة أ س ترتك امل وارد ال يت كان ت تس تخدم (‪ 3‬م وارد)‪ ،‬فيص بح املت وفر ه و ‪ ،02‬كم ا يف الش كل‬
‫(‪.)02-5‬‬

‫يكفيها‬ ‫لديها‬ ‫العملية‬


‫‪-‬‬ ‫‪-‬‬ ‫أ‬
‫‪-‬‬ ‫‪-‬‬ ‫ب‬
‫‪-‬‬ ‫‪-‬‬ ‫ج‬
‫املوارد املتوفرة‪02 :‬‬

‫شكل رقم (‪)02-5‬‬

‫هذا يدل أن املوارد ميكن استخدامها دون حدوث اختناق (حالة آمنة)‪.‬‬

‫‪144‬‬
‫مثال‬

‫إذا مل نس تخدم امل وارد حب ذر لتجن ب االختن اق ‪ ،‬فق د نص ل إىل حال ة غ ري آمن ة (‪ )unsafe‬مم ا يتس بب يف‬
‫اختناق‪ .‬املثال السابق ميكن استخدامه لتوضيح كيف ميكن أن حيدث اختناق كما يف الشكل (‪.)00-5‬‬

‫‪3‬‬ ‫‪5‬‬ ‫أ‬


‫‪4‬‬ ‫‪0‬‬ ‫ب‬
‫‪5‬‬ ‫‪0‬‬ ‫ج‬
‫املوارد املتوفرة ‪5 :‬‬

‫‪3‬‬ ‫‪4‬‬ ‫أ‬


‫‪4‬‬ ‫‪0‬‬ ‫ب‬
‫‪5‬‬ ‫‪0‬‬ ‫ج‬
‫املوارد املتوفرة‪0 :‬‬

‫‪3‬‬ ‫‪4‬‬ ‫أ‬


‫‪4‬‬ ‫‪4‬‬ ‫ب‬
‫‪5‬‬ ‫‪0‬‬ ‫ج‬
‫املوارد املتوفرة‪2 :‬‬

‫‪3‬‬ ‫‪4‬‬ ‫أ‬


‫‪-‬‬ ‫‪-‬‬ ‫ب‬
‫‪5‬‬ ‫‪0‬‬ ‫ج‬
‫املوارد املتوفرة‪4 :‬‬

‫شكل رقم (‪)00-5‬‬

‫هنا وصلنا إىل حالة غري آمنة وحدث االختناق‪ ،‬الن املتوفر (‪ 4‬موارد) ال يكفي ألي عملية‪.‬‬

‫‪145‬‬
‫‪ .5.2.4.0‬منع االختناق‬

‫جتنب االختناق قد يكون غري ممكن ألنه يتطلب دراية مسبقة ع ن الطلب ات املس تقبلية وال يت ال ميك ن معرفته ا‬
‫يف غالبا األحيان‪ ،‬لذلك سنجد أن الوقاية من االختناق ميكن أن تتحقق بنفي واح د أو أكث ر م ن مس ببات االختن اق‪.‬‬
‫فم ن املعل وم أن مس ببات االختن اق الب د م ن توافره ا مجيعه ا (أربع ة مس ببات) ح ىت حي دث اختن اق‪ِ ،‬بلت ايل إذا اس تطعنا‬
‫نفي سبب واحد من هذه املسببات األربع سنكون وقينا أنفسنا من االختناق‪.‬‬

‫‪ .5.2.4.0.0‬نفي املنع املتبادل‬

‫إذا ك ان ل دى م ورد ال تقب ل املش اركة وال ميك ن اس تخدام أبكث ر م ن عملي ة يف نف س الوق ت‪ ،‬ميكن ين جتن ب‬
‫االحتكار وذلك بتخصيص عملية تكون مسئولة عن هذا املورد‪ ،‬حبيث منن ع بقي ة العملي ات م ن اس تخدام امل ورد مباش رة‬
‫وإمنا تتعامل هذه العمليات مع العملية املسئولة من املورد‪ ،‬وتقوم األخرية ِبلتعامل مع املورد‪.‬‬

‫مثال م دير الطباع ة يف وين دوز ميث ل عملي ة مس ئولة ع ن الطابع ة‪ ،‬حي ث عن دما يرس ل أي ب رانمج (عملي ة) أم ر‬
‫طباع ة‪ ،‬ف إن املل ف امل راد طباعت ه سريس ل إىل م دير الطباع ة ‪ ،‬ويتعام ل م دير الطباع ة م ع الطابع ة حي ث يرس ل هل ا مل ف‬
‫كلما فرغت من عملها حسب ورود امللفات إليه (القادم أوال خيدم أوال)‪ .‬مثال الشكل (‪ )00-5‬جند أن هنالك ملفني‬
‫أرسال للطابعة ولكن قام ِبستالم هذه امللفات مدير الطباعة مث ينظم هو التعامل مع الطابعة‪.‬‬

‫شكل رقم (‪ :)00-5‬مدير الطباعة يف ويندوز‪.‬‬

‫‪ .5.2.4.0.0‬نفي االحتفاظ واالنتظار‬

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

‫‪146‬‬
‫‪ .5.2.4.0.5‬نفي االحتكار (عدم التخلي عن املوارد)‬

‫غ ري قاب ل للتطبي ق‪ :‬الن انت زاع م ورد م ن عملي ة وه ي تس تخدمه أحي اان ق د يتس بب يف فش ل العملي ة‪ .‬م ثال‬
‫إيقاف الطابعة وه ي تطب ع يف مل ف ق د ين تج عن ه طباع ة غ ري مكتمل ة‪ ،‬وإيق اف مس جل االس طواانت الض وئي ( ‪CD‬‬
‫‪ )writer‬وهو ينسخ بياانت يف اسطوانة ‪ CD‬قد يتسبب يف تلف االسطوانة وفشل عملية النسخ‪.‬‬

‫‪ .5.2.4.0.4‬نفي االنتظار الدائري‬

‫نرقم كل املوارد‪ ،‬مث نسمح للعمليات بطل ب امل وارد بص ورة تص اعدية وال نس مح لعملي ة أبن تطل ب م ورد رقم ه‬
‫أصغر من املورد الذي طلبته من قبل‪ ،‬فمثال إذا طلبت عملية ما املورد رقم ‪ ،5‬فال نسمح هلا بطلب مورد رقمه أق ل م ن‬
‫‪ 5‬وميكنه طلب مورد رقمه أكرب من ‪.5‬‬

‫مثال‬

‫يف الشكل (‪ ،)05-5‬إذا طلبت العملية أ املاسحة ورقمها هو ‪ ،0‬فال ميكن هل ذه العملي ة أن تطل ب الطابع ة‬
‫ألن رقمه ا أق ل م ن رق م املاس حة‪ .‬اف رتض أن العملي ة ب قام ت بطل ب الش ريط املمغ نط (ذو ال رقم ‪ ،)4‬ف ال ميك ن هل ذه‬
‫العملية طلب أي مورد رقمه أقل من ‪ ،4‬يعين ال ميكنها طلب املاسحة اليت تستخدمها العملية أ‪ .‬هبذه الطريقة ال ميكن‬
‫أن حيدث انتظار دائري‪.‬‬

‫‪0‬‬ ‫الطابعة‬
‫‪0‬‬ ‫املاسحة‬
‫‪5‬‬ ‫سواقة األقراص الضوئية‬
‫‪4‬‬ ‫الشريط املمغنط‬
‫‪3‬‬ ‫الراسم‬
‫شكل رقم (‪ :)05-5‬ترقيم املوارد تسلسليا‪.‬‬

‫‪ .5.5‬حماكاة خوارزمية املصرف (‪)Banker's algorithms‬‬


‫لكتابة برانمج يطبق فكرة خوارزمية املصرف‪ ،‬مثال لنفرتض أن لدينا احملددات التالية‪:‬‬

‫‪3‬‬ ‫‪1‬‬ ‫‪1‬‬


‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬
‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬
‫‪Pmax‬‬

‫‪147‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪2‬‬ ‫‪0‬‬ ‫‪1‬‬
‫‪2‬‬ ‫‪3‬‬ ‫‪1‬‬
‫‪Pcurr‬‬

‫واملوارد املتاحة ‪A=(3,1,1) :‬‬

‫مثال ميكننا إنشاء مصفوفة املوارد املطلوبة ‪ Pmax‬ومصفوفة املوارد احلالية ‪ Pcurr‬كما يلي‪:‬‬

‫‪Dim Pmax(2, 2), Pcurr(2, 2), avl(2) As Integer‬‬


‫‪Pmax(0, 0) = 3‬‬
‫‪Pmax(0, 1) = 3‬‬
‫‪Pmax(0, 2) = 2‬‬
‫‪Pmax(1, 0) = 1‬‬
‫‪Pmax(1, 1) = 2‬‬
‫‪Pmax(1, 2) = 3‬‬
‫‪Pmax(2, 0) = 1‬‬
‫‪Pmax(2, 1) = 1‬‬
‫‪Pmax(2, 2) = 5‬‬
‫‪Pcurr(0, 0) = 1‬‬
‫‪Pcurr(0, 1) = 2‬‬
‫‪Pcurr(0, 2) = 2‬‬
‫‪Pcurr(1, 0) = 1‬‬
‫‪Pcurr(1, 1) = 0‬‬
‫‪Pcurr(1, 2) = 3‬‬
‫‪Pcurr(2, 0) = 1‬‬
‫‪Pcurr(2, 1) = 1‬‬
‫‪Pcurr(2, 2) = 1‬‬
‫ميكن إنشاء مصفوفة للموارد املتاحة حاليا‪:‬‬
‫‪avl(0) = 3‬‬
‫‪avl(1) = 1‬‬
‫‪avl(2) = 1‬‬
‫معرفة احتياجات ‪ j‬العملية من املوارد ‪:‬‬

‫‪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‬اذكر مثال ملورد قابل للنزع ومثال ملورد غري قابل للنزع ؟ الطابعة (غري قابلة) ‪ ،‬الذاكرة (قابل للنزع)‬

‫‪ .4‬هنالك أربع طرق للتعامل مع االختناق ‪ ،‬اذكرها ؟‬

‫‪ .0‬جتاهله‬

‫‪ .0‬اكتشافه وعالجه‬

‫‪ .5‬جتنبه‬

‫‪ .4‬منعه‬

‫‪ .3‬ما الفرق بني التجنب واملنع ؟ التجنب هو حجز املوارد بصورة آمنة (‪ ، )safe‬املنع هو نفي احد مسببات‬
‫االختناق‬

‫‪ .2‬كيف يتم منع االختناق ؟‬

‫‪ .0‬نفي املنع املتبادل‬

‫‪ .0‬نفي االحتفاظ واالنتظار‬

‫‪ .5‬نفي االحتكار‬

‫‪ .4‬نفي االنتظار الدائري‬

‫‪.5‬ما هي مسببات االختناق األربعة ؟‬

‫‪ .0‬املنع املتبادل‬

‫‪ .0‬االحتفاظ واالنتظار‬

‫‪ .5‬االحتكار‬

‫‪ .4‬االنتظار الدائري‬

‫‪150‬‬
‫‪ .8‬ما هي خوارزمية النعامة ؟ ومىت نستخدمها ؟‬

‫تظاهر أبنه ال يوجد اختناق ‪ ،‬ونستخدمها إذا كان ‪:‬‬

‫‪ ‬االختناق حيدث اندراً‬

‫‪ ‬تكلفة الوقاية من االختناق عالية جداً‬

‫‪.3‬مسألة‬

‫[‪]03‬‬

‫إذا كان ‪ E‬متثل موارد النظام‪ ،‬واملصفوفة ‪ C‬متثل املوارد املستخدمة منها‪ ،‬واملصفوفة ‪ R‬متثل املوارد املطلوبة إلمتام‬
‫العمل‪.‬‬

‫‪ ‬اوجد املوارد املتوفر ة غري املستخدمة ؟‬

‫‪ ‬وضح هل سيحدث اختناق أم ال ؟‬

‫احلل‬

‫(أ) املوارد املتوفرة ‪ A‬هي (‪)2 1 0 0‬‬

‫(ب) احلل‬

‫اخلطوة األوىل‬

‫نقارن ‪ A‬مع صفوف ‪ C‬لنرى هل هنالك صف حجمه أقل أو يساوي ‪ A‬؟‬

‫وِبملقارنة سنجد أن ‪ A‬يكفي للصف الثالث (العملية الثالثة) حيث يتساوَين‬

‫‪151‬‬
‫وإبعطاء املوارد املوجودة يف ‪ A‬للعملية الثالثة ستصبح ‪ A‬فارغة (‪)2 2 2 2‬‬

‫وستكمل العملية الثالثة عملها فتحرر املوارد اليت كانت حتتجزها (‪ )C‬واملوارد اليت طلبتها (‪ )R‬فتكون قيمة ‪A‬‬
‫اجلديدة هي (‪)2 2 2 0‬‬

‫وستصبح ‪ C‬و ‪ R‬كالتايل‪:‬‬

‫اخلطوة الثانية‬

‫اآلن سنقارن ‪ new A‬مع صفوف ‪ R‬فنجد أهنا تكفي إلكمال الصف الثالثة‬

‫بعد االنتهاء من الصف الثالثة ستكون املوارد احملررة هي (‪.)4 2 2 1‬‬

‫اآلن ستصبح ‪ C‬و ‪ R‬كالتايل‪:‬‬

‫اخلطوة الثالثة‬

‫سيتوفر لدينا اآلن من املوارد التايل ()‪ A‬كافية لتنفيذ الصف املتبقي (األول) وهذا يعين أنه ال يوجد اختناق (حالة‬
‫آمنة)‪.‬‬

‫‪.02‬مسألة‬

‫‪152‬‬
‫ضح هل يوجد اختناق أم ال ؟‬

‫احلل‬

‫املوارد املتوفرة هي‬

‫ننفذ العملية األوىل (الصف األول يف ‪ )R‬وبعد تنفيذها ستحرر املوارد التالية‪:‬‬

‫(‪)1 0 1 1‬‬

‫وستصبح ‪ C‬و ‪ R‬كالتايل‪:‬‬

‫ننفذ العملية الثانية وبعد تنفيذها ستحرر املوارد التالية (‪.)3 0 1 2‬‬

‫اآلن ستصبح ‪ C‬و ‪ R‬كالتايل‪:‬‬

‫جند أن املتبقي(‪ )3 0 1 2‬ال يكفي للعملية الثالثة وهذا يعين أن هنالك اختناق‪.‬‬

‫‪153‬‬
‫‪ .00‬كيف تتم معاجل االختناق ؟‬

‫‪ .0‬انتزاع املورد من أحدي العمليات املشاركة يف االختناق‬

‫‪ .0‬إيقاف (قتل ‪ )Kill‬بعض العمليات اليت تشارك يف االختناق وِبلتايل استخدام مواردها لبقية العمليات‬

‫‪ .00‬مسألة‬

‫إذا كان لدى ثالث عمليات ‪ A,B,C‬لديها املوارد املبينة ِبلعمود ‪ Has‬وحتتاج أن تصل مواردها للعمود ‪Max‬‬
‫لتنفذ عملها ‪ ،‬وليدان ثالث موارد متاحة (كما مبني يف اجلدول أعاله)‪.‬‬

‫وضح كيف ميكننا تنفيذ الربامج الثالث دون حدوث اختناق (حالة آمنة) ؟‬

‫وضح كيف ميكن أن حيدث اختناق إذا وزعنا املوارد بصورة أخرى ؟‬

‫احلل‬

‫(أ)‬

‫(ب)‬

‫‪154‬‬
‫‪ .5.3‬متارين غري حملولة‬

‫إذا كان لدي نظام حيتوي على العمليات التالية مع ما متلك (املستخدم) وما يكفيها من موارد (أي أن‬ ‫‪.0‬‬
‫ما حتتاج من موارد هو مايكفي انقص ما تستخدم)‪ ،‬كما يف اجلدول التايل‪:‬‬

‫املستخدم‬ ‫ما يكفي‬ ‫املتاح‬


‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D A B C D‬‬
‫‪P0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪2 2 6 2 1‬‬
‫‪P1‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪7‬‬ ‫‪5‬‬ ‫‪0‬‬
‫‪P2‬‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪4‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪5‬‬ ‫‪6‬‬
‫‪P3‬‬ ‫‪0‬‬ ‫‪6‬‬ ‫‪4‬‬ ‫‪2‬‬ ‫‪0‬‬ ‫‪6‬‬ ‫‪5‬‬ ‫‪2‬‬
‫‪P4‬‬ ‫‪0‬‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪0‬‬ ‫‪6‬‬ ‫‪5‬‬ ‫‪6‬‬

‫‪ ‬مثال العملية ‪ P0‬تستخدم ‪ 0‬من املورد ‪ ،A‬و حتتاج ‪ 0‬من هذا املورد‪ ،‬إذن حتتاج ‪ 0‬من املورد ‪ .A‬أيضا‬
‫تستخدم ‪ 0‬من املورد ‪ D‬ويكفيها ‪ ،0‬أي الحتتاج أي مورد إضايف من ‪.D‬‬

‫أجب على اآليت‪:‬‬

‫‪ ‬كون حمددة املطلوب (ما يكفي – املستخدم) ؟‬


‫‪ ‬هل النظام آمن (‪ )safe state‬؟ أي هل سيحدث إختناق أم ال ؟‬
‫‪ ‬إذا كانت طلبات العملية ‪ P0‬هي ‪ 0 1 1 0‬هل سيتم خدمتها مباشرة ؟‬
‫‪ ‬إذا كانت طلبات العملية ‪ P1‬هي ‪ 0 3 3 0‬هل سيتم خدمتها مباشرة ؟‬
‫معطى حمددة املوارد (على اليسار) وحمددة االحتياجات (على اليمني)‪ ،‬هل سيحدث إختناق أم ال‬ ‫‪.0‬‬
‫(خوارزمية املصرف متعددة املوارد) ؟‬

‫[‪]03‬‬

‫‪155‬‬
‫الباب الثامن‪ :‬إدارة الذاكرة الرئيسية‬

‫‪156‬‬
‫الباب الثامن‬

‫إدارة الذاكرة الرئيسية‬

‫‪Main Memory Management‬‬

‫اليعمل جهاز احلاسب بدون ذاكرة رئيسية (‪ ،)ram‬وعندما تذهب لتشرتي جهاز حاسب فتجد مواصفات‬
‫مثل ‪ ،2MB Ram‬واليت تعين أنك حاسبك ميتلك ذاكرة رئيسية حجمها ‪ 2‬ميغاِبيت أي ‪2* 1024 * 1024‬‬
‫= ‪ِ 2097152‬بيت‪ ،‬والبايت يعادل حرف‪،‬أي أكثر من أثنني مليون حرف‪.‬‬

‫تعترب الذاكرة الرئيسية متطلباً أساسياً لتنفيذ الربامج‪ ،‬فال ميك ن تنفي ذ ب رانمج م ا مل حيض ر إليه ا‪ .‬ألن املع اجل ال‬
‫يتعامل إال م ع ال ذاكرة الرئيس ية واملس جالت ال يت داخل ه‪ .‬يك ون تعام ل املع اجل م ع املس جالت س ريعا ج دا (دورة س اعة‬
‫واح دة (‪ )one CPU clock‬أو أق ل)‪ ،‬بينم ا الوص ول لل ذاكرة الرئيس ية يك ون أق ل س رعة (ع دة دورات)‪ .‬تعت رب‬
‫الذاكرة املخبأة (الكاش) بني الذاكرة الرئيسية واملسجالت‪.‬‬

‫كرب حجم الذاكرة ميكنها من خدمة عدد كبري من العمليات‪ ،‬بينما سرعتها تزيد من سرعة الوصول للمعلومة‬
‫فيها‪ .‬لذلك البد من إدارهتا ِبلطريقة املثلى اليت تؤثر أتثري إجيابيا على أداء احلاسب‪.‬‬

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

‫لإلستفادة من هذه الذواكر املختلفة ميكن استخدام القرص الصلب مثال للتخزين الدائم والكبري‪ ،‬بينما‬
‫نستخدم الذاكرة الرئيسية والكاش واملسجالت للتنفيذ السريع‪ .‬يدير هذه الذواكر جزء من نظام التشغيل يسمى مدير‬
‫الذاكرة ويتمثل عمله يف اآليت‪:‬‬

‫‪ ‬تتبع أجزاء الذاكرة املستخدمة والغري مستخدمة‪.‬‬


‫‪ ‬حجز الذاكرة للعمليات اليت حتتاجها‪.‬‬
‫‪ ‬حتديد أين يتم وضعها‪.‬‬
‫‪ ‬حتميل العمليات ِبلذاكرة‪.‬‬
‫‪ ‬تفريغ (حترير) الذاكرة عند إنتهاء العمليات من استخدامها‪.‬‬
‫‪ ‬إدارة التبديل بني الذاكرة الرئيسية والقرص الصلب (‪.)swap‬‬
‫‪ ‬محاية العمليات يف الذاكرة من بعضها البعض ومن نظام التشغيل‪.‬‬

‫‪157‬‬
‫‪ .8.0‬بنية الذاكرة الرئيسية‬
‫تتكون الذاكرة من جمموعة من اخلالَي الثنائية موزعة بطريقة تشبه املصفوفة حيث حيدد عدد اخلالَي يف السطر‬
‫األول ط ول الكلم ة‪ ،‬وحتم ل ك ل خلي ة عن وان (رق م) فري د ال يتك رر تس تطيع م ن خالل ه وح دة املعاجل ة حتدي د مك ان‬
‫الكلمة املطلوبة يف الذاكرة‪ .‬يقاس حجم الذاكرة عادة مبجموع اخلالَي الثنائي ة املت وفرة‪ .‬م ثال إذا ك ان يف حاس بك ذاك رة‬
‫حجمها ‪ 0‬ميغاِبيت (‪ ،)MB‬فهذا يعين أن لدينا‪:‬‬

‫‪ِ 0248352 = 0204 * 0204 * 0‬بيت‬

‫الباي ت خي زن رم ز أو ح رف‪ ،‬ف إذا ك ان ك ل ِبي ت ميث ل خان ة ِبل ذاكرة فس يكون ل دينا أكث ر م ن ملي ون خان ة‬
‫ِبل ذاكرة وك ل خان ة ل ديها عن وان خيتل ف ع ن عن وان اخلان ة األخ رى وِبلت ايل س يكون ل دينا أكث ر ملي ون عن وان‪ ،‬الش كل‬
‫(‪.)0-8‬‬

‫عنوان اخللية‬ ‫اخللية‬


‫‪0‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬

‫‪...‬‬

‫‪1048576‬‬

‫شكل رقم (‪ :)0-8‬عناوين ذاكرة حجمها واحد ميغاِبيت‪.‬‬

‫‪ .8.0‬أهداف مدير الذاكرة‬


‫هنالك العديد من األهداف من وراء تصميم مدير الذاكرة‪ ،‬مثل‪:‬‬
‫‪ ‬حجز املواقع وحتريرها‪.‬‬
‫‪ ‬التعامل مع هرمية الذاكرة‪.‬‬
‫‪ ‬العناوين املنطقية‪ :‬استخدام العناوين املنطقية للتعامل مع الذاكرة‪.‬‬
‫‪ ‬احلماية‪ :‬محاية الربامج عن بعضها البعض‪.‬‬
‫‪ ‬املشاركة‪ :‬توفري املشاركة بني الربامج دون التأثري على احلماية‪.‬‬
‫‪ ‬توسيع الذاكرة‪ :‬متديد الذاكرة لتستوعب برامج أكرب من حجمها وذلك ِبستخدام جزء من القرص الصلب‪.‬‬

‫‪158‬‬
‫‪ .8.0.0‬حجز املواقع‬

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

‫‪ .8.0.0‬هرمية الذاكرة‬

‫يف الثمانينات كانت الذاكرة تعمل بسرعة املعاجل‪ ،‬مث بدأ سباق التطور‪ ،‬فوصل املعاجل بسرعته إىل أضعاف ما‬
‫وصلت إليه الذاكرة‪ .‬وأصبحت سرعة الذاكرة الرئيسية ال تستطيع جماراة سرعة املعاجل‪ ،‬وهذا تس بب يف أن يعم ل املع اجل‬
‫بسرعه الذاكرة‪.‬‬

‫مل تكن هنالك ذاكرة خمبأة يف ‪ ،0382‬ملاذا ؟‬

‫مت ع الج ه ذا الف ارق ب ني س رعيت املع اجل وال ذاكرة الرئيس ية بوض ع ذاك رة س ريعة بينهم ا ه ي ال ذاكرة املخب أة‪،‬‬
‫الشكل (‪ ،)0-8‬واليت تعمل بسرعة املعاجل أو قريبة منه‪.‬‬

‫شكل رقم (‪ :)0-8‬الذاكرة املخبأة بني الذاكرة الرئيسية واملعاجل‪.‬‬

‫عند تشغيل برانمج كب ري (أك رب م ن حج م ال ذاكر الرئيس ية) س يكون ِبلق رص‪ ،‬مث س يحمل م دير ال ذاكرة ج زء‬
‫من هذا الربانمج إىل الذاكرة الرئيسية (نسخة من اجلزء وستظل نسخة أخ رى ِبلق رص ‪ ،‬أي أن ال ربانمج ك امال س يكون‬
‫ِبلقرص)‪ .‬هذا اجلزء هو الذي تحتاجه اآلن‪ ،‬سيحمل جزء من اجلزء الذي ِبلذاكرة الرئيسية إىل ال ذاكرة املخب أة‪ِ ،‬بلت ايل‬
‫سيكون هذا اجلزء الصغري مكرر يف ثالث أماكن ‪ ،‬يف القرص وِبلذاكرة الرئيسية ويف الذاكرة املخبأة‪ .‬مث سنأخذ كل مرة‬
‫أمر وبضع بياانت من الذاكرة املخبأة لتنسخ يف مسجالت املعاجل حيث يتم تنفي ذها‪ .‬س نجد أن النس خ اآلن أص بحت‬
‫أربعة نسخ‪ ،‬وقد يكون لدينا مخس نسخ إذا اس تخدمنا مس تويني م ن ال ذاكرة املخب أة (‪ L1‬و ‪ ،)L2‬الش كل (‪.)0-8‬‬
‫ه ذا س يجعل مهم ة م دير ال ذاكرة أص عب‪ ،‬فعلي ه التأك د م ن أن ه ذه النس خ املوزع ة عل ى ع دة ذواك ر متوافق ة‬
‫(‪ .)consistent‬هذا ِبإلضافة إىل متابعة حركة البياانت بني هذه الذواكر املختلفة املستوَيت‪.‬‬
‫‪159‬‬
‫‪ .8.5‬مواصفات الذاكرة املثالية‬
‫يتمىن كل شخص منا سواء كان مستخدما للحاسب أم مربجما أن تكون لديه ذاكرة ِبملواصفات التالية‪:‬‬

‫‪ ‬كبرية‬
‫‪ ‬سريعة‬
‫‪ ‬رخيصة‪.‬‬
‫‪ ‬غري متطايرة (‪ – )non volatile‬أي ال تفقد حمتواها‪.‬‬
‫ولك ن هيه ات هيه ات‪ ،‬فل م جتتم ع ه ذه املواص فات يف ن وع واح د م ن ال ذواكر ح ىت يومن ا ه ذا‪ .‬ميك ن اس تخدام‬
‫ع دة ذواك ر خمتلف ة تكم ل بعض ها ال بعض لتك ون هرمي ة مثالي ة‪ .‬فم ثال نس تخدم ال ذاكرة املخب أة (الك اش) لنحص ل عل ى‬
‫السرعة العالية‪ ،‬ولكنها يف جانب اآلخر‪ ،‬صغرية ومتطايرة (ال حتتفظ مبحتوَيهتا)‪ ،‬وغالية ‪.‬‬

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

‫‪ .8.4‬مثال توضيحي‬
‫أراد أمحد وهو مدخل بياانت طباعة كتاب ِبستخدام ميكروسوفت وورد‪ ،‬فقام‪:‬‬
‫‪ ‬بفتح احلاسب فظهر سطح املكتب‪.‬‬
‫‪ ‬نقر نقرا مزدوجا على الوورد ففتح الربانمج وظهرت انفذته‪.‬‬
‫‪ ‬بدأ أمحد إبدخال البياانت‪.‬‬
‫‪ ‬أدخل جزء من البياانت مثال ‪ 5‬صفحات مث قام حبفظ امللف (ملف – حفظ)‪.‬‬
‫‪ ‬أدخ ل ‪ 4‬ص فحات أخ رى ولك ن قب ل حف ظ املل ف م رة أخ رى إنفص ل التي ار الكه ريب ع ن احلاس ب ف أ ُغلق‬
‫اجلهاز‪.‬‬
‫‪ ‬إذا فتح أمحد احلاسب مرة أخرى وفتح ملف وورد السابق حفظه ؟ ه ل س يجد ‪ 5‬ص فحات أم ‪ 5‬ص فحات‬
‫؟ وملاذا ؟‬
‫داخليا جيري اآليت‪:‬‬
‫عن د ف تح احلاس ب يتحم ل نظ ام التش غيل يف ج زء م ن ال رام‪ ،‬فظه ور س طح املكت ب أم ام أمح د دالل ة عل ى‬
‫ذلك‪ .‬النقر املزدوج على أيقونة وورد هو طلب من أمحد لنظام التشغيل ليقوم بتشغيل برانمج وإنشاء عملية جديدة منه‪،‬‬

‫‪160‬‬
‫وظهور انفذة وورد أمامه دليل على أن العملية مت إنشاءها وهي تعمل اآلن‪ ،‬وهذا يدل على أن نس خة م ن ب رانمج وورد‬
‫اآلن حمملة ِبلذاكرة (يف مساحة أخرى غري املساحة اليت يوجد هبا نظام التشغيل)‪.‬‬

‫أين كان برانمج وورد قبل أن يعمل ؟ عندما ب دأ أمح د ِبإلدخ ال ب دأت تظه ر امل دخالت عل ى الشاش ة وه ذا‬
‫ي دل عل ى أن البي اانت تنتق ل م ن لوح ة املف اتيح إىل ال ذاكرة وم ن ال ذاكرة إىل الشاش ة دون أن يك ون هل ا عالق ة ِبلق رص‬
‫الصلب أو أي ذاكرة اثنوية أخرى‪.‬‬

‫عملية حفظ امللف تعين نسخ ما أدخله أمحد (‪ 5‬صفحات) والذي يوجد اآلن ِبلرام إىل القرص الصلب‪.‬‬

‫شكل رقم (‪ :)0-8‬شكل الربامج البياانت يف الذاكرة الرئيسية‪.‬‬

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

‫عندما يفتح أمح د اجله از م رة اثني ة ويف تح ملف ه الس ابق س يجد فق ط ‪ 5‬ص فحات‪ ،‬أي ن بقي ة الص فحات ال يت‬
‫أدخلها ؟‬

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

‫‪161‬‬
‫كلم ا نف تح احلاس ب يق وم ب رانمج موج ود ِبل روم (‪ )rom‬بتحمي ل نظ ام التش غيل ِبل رام‪ ،‬أي أن‬
‫الروم هي املسئولة عن حتميل نظام التشغيل‪ ،‬أما بقية الربامج فنحن من يطلبها ونظام التشغيل هو‬
‫من يقوم بتشغيلها لنا‪ .‬إذن الروم تشغل نظام التشغيل ونظام التشغيل يشغل براجمنا‪.‬‬

‫‪ .8.3‬أنواع تعدد املهام‬


‫من الش كل (‪ ، )0-8‬جن د أن نظ ام التش غيل وب رانمج وورد والبي اانت املدخل ة كله ا موج ودة ِبل ذاكرة الرئيس ية‬
‫(الرام) ‪ ،‬مل وضعت هبذه الطريق ة ؟ أي ن س يتم وض ع ال ربامج األخ رى إذا قم ت بطل ب تش غيلها‪ ،‬وم ن ال ذي يت وىل حتمي ل‬
‫الربامج ِبلذاكرة وكيف نتأكد أن برانمج مل يتحمل يف مكان برانمج آخر؟ كل ه ذه االستفس ارات واألس ئلة ت دور ح ول‬
‫الذاكرة وكيف يتم ختزين الربامج والبياانت فيها‪.‬‬

‫تعتم د اإلجاب ة عل ى أس ئلتنا ه ذه عل ى م دير ال ذاكرة وطريق ة عمل ه‪ .‬س نقوم فيم ا يل ي بش رح إدارات ال ذاكرة‬
‫املختلفة لتخزين عدة برامج (تعدد املهام) ِبلذاكرة‪.‬‬

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

‫حيث سنتحدث عن‪:‬‬

‫‪ ‬الذاكرة أحادية املهام (النظم القدمية)‪.‬‬

‫‪ ‬الذاكرة متعددة املهام (النظم احلديثة)‪.‬‬

‫‪ ‬التجزئة الثابتة (‪.)fixed partitions‬‬

‫‪ ‬التجزئة الديناميكية‪.‬‬

‫‪ ‬جتميع الفراغات‪.‬‬

‫‪ ‬الذاكرة ِبلصفحات‪.‬‬

‫‪ ‬الذاكرة ِبلتقطيع‪.‬‬

‫‪ .8.2‬نظام التشغيل أحادي املهام‬


‫ق دميا كان ت ال ذاكرة ص غرية وتعم ل ِبلنظ ام األح ادي (‪ ،)single program‬حي ث يس مح للمس تخدم‬
‫بتش غيل ب رانمج واح د فق ط ِبإلض افة إىل نظ ام التش غيل وِبلت ايل ف إن ال ذاكرة الرئيس ية تك ون مقس ومة إىل ج زئني‪ ،‬ج زء‬

‫‪162‬‬
‫خمص ص لنظ ام التش غيل وج زء خمص ص للمس تخدم لينف ذ في ه ب رانمج واح د فق ط ك ل م رة‪ ،‬ه ذا الن وع م ن نظ م التش غيل‬
‫يسمى نظم التشغيل أحادية املهام (‪ )single task‬أو أحادية الربامج (‪ ،)single program‬شكل ‪.5-8‬‬

‫شكل رقم (‪ :)5-8‬شكل الذاكرة يف النظام أحادي املهام‪.‬‬

‫‪ .8.2.0‬عيوب النظام األحادي‬

‫هنالك برانمج واحد فق ط ِبل ذاكرة ح ىت ل و ك ان ه ذا ال ربانمج ص غري ج دا وال يس تغل إال القلي ل م ن مس احة‬
‫املستخدم‪ ،‬وهذا يتسبب يف اآليت‪:‬‬

‫‪ ‬إهدار مساحة الذاكرة‪ ،‬وذلك لآليت‪:‬‬

‫‪ o‬هنال ك مس احات فارغ ة تكف ي لتحمي ل ب رامج أخ رى ولك ن النظ ام ال يس مح بتحمي ل أكث ر م ن‬
‫برانمج‪ ،‬شكل رقم (‪.)4-8‬‬

‫‪ o‬ق د يك ون ِبل ربانمج املنف ذ بي اانت أو أوام ر اندرة االس تخدام‪ ،‬فه ي حتج ز حي زا ِبل ذاكرة (ألن‬
‫الربانمج البد من أن يكون كامال ِبلذاكرة)‪.‬‬

‫‪ o‬لن نستطيع تشغيل برامج حجمها أكرب من مساحة املستخدم‪.‬‬

‫‪ ‬إه دار زم ن املع اجل ‪ :‬غ ري مس تفاد م ن زم ن املع اجل‪ ،‬ألن املع اجل ينف ذ ب رانمج واح د فق ط يف اللحظ ة الواح دة‪،‬‬
‫وإذا توقف هذا الربانمج عن العمل ألي سبب كأن يكون يف انتظار دخل أو حدوث حدث‪ ،‬يف هذه احلال ة‬
‫سيكون املعاجل عاطال ال يعمل شيئا وغري مستفاد منه‪.‬‬

‫‪163‬‬
‫شكل رقم (‪ :)4-8‬إهدار مساحة املستخدم‪.‬‬

‫‪ .8.2.0‬كيف يدير نظام التشغيل الذاكرة‬

‫يق وم م دير ال ذاكرة مبعرف ة حج م ال ربانمج ال ذي طلبن ا تنفي ذه ‪ ،‬مث يق ارن ه ذا احلج م م ع حج م مس احة‬
‫املس تخدم‪ ،‬إذا ك ان حج م ال ربانمج أص غر أو يس اوي ه ذه مس احة املس تخدم س يتم حتميل ه يف ال ذاكرة‪ ،‬وإال فس يمنع‬
‫حتميله وقد تظهر رسالة توضح ذلك (ال توجد ذاكرة كافية ‪.)not enough memory‬‬

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

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

‫‪ .8.5‬نظام التشغيل متعدد املهام‬


‫إذا مسح نظام التشغيل للمس تخدم بتش غيل أكث ر م ن ب رانمج يف وق ت واح د‪ ،‬فأن ت تتعام ل م ع نظ ام تش غيل‬
‫متع دد امله ام (‪ )multitasking‬أو متع دد ال ربامج (‪ .)multiprogramming‬حي ث ميك ن حتمي ل أكث ر م ن‬
‫ب رانمج ِبل ذاكرة‪ .‬م ثال يف نظ ام التش غيل وين دوز ميكن ك تش غيل ب رانمج وورد لتكت ب وثيق ة واإلس تماع إىل مش غل‬

‫‪164‬‬
‫الوسائط (‪ )media player‬وإنزال ملفات من اإلنرتنت ت يف نف س الوق ت‪ .‬وه ذا ي دل عل ى أن وين دوز نظ ام متع دد‬
‫املهام‪.‬‬

‫إذا أردت أن تقوم مبثل هذا العمل يف نظام تش غيل أح ادي امله ام (مث ل ‪ )DOS‬فل ن تس تطيع‪ ،‬وإمن ا علي ك‬
‫تشغيل هذه الربامج يف أوقات خمتلفة (واحد تلو اآلخر‪.).‬‬

‫السؤال اهلام الذي يطرح نفسه هنا هو ‪ :‬هل هنالك تعدد مهام حقيقي ؟‬
‫اإلجابة ترتبط بنوع املكوانت املاجية اليت نستخدم‪.‬‬

‫إذا كن ت تس تخدم حاس ب ذو مع اجل واح د (‪ ،)single processor‬فل ن يك ون هنال ك تع دد مه ام‬


‫حقيقي وإمنا استغالل جيد لزمن املعاجل‪ .‬أما إذا كنت تستخدم معاجل متعدد األنوية‪ ،‬أو كنت تس تخدم حاس ب متع دد‬
‫املعاجلات (‪ ،)multiprocessor‬فسيكون نظامك يعمل بتعدد مهام حقيقي‪.‬‬

‫‪ .8.5.0‬مثال تشبيهي‬

‫لتوضيح الفرق بني تعدد املهام احلقيقي والومهي دعنا نشرح ذلك مبثال تشبيهي‪.‬‬

‫‪ .8.5.0.0‬تعدد املهام الومهي (املوظف النشيط)‬

‫ِبلرج وع للمث ال التش بيهي ِبلب اب الثال ث (‪ ،)5.8‬جن د أن ه إذا ك ان املوظ ف نش يط وس ريع فيمكن ه العم ل بطريق ة‬
‫متعددة (غري حقيقية)‪ ،‬حيث سينجز أعماله كما يلي‪:‬‬

‫‪ ‬يدخل عميل ويبدأ يف خدمته‪.‬‬

‫‪ ‬إذا أحتاج املوظف بعض البياانت من العميل سيطلب منه تعبئة هذه البياانت‪.‬‬

‫‪ ‬يف ه ذه اللحظ ة يس تدعي املوظ ف عمي ل آخ ر ويب دأ خبدمت ه ريثم ا ينته ي العمي ل الس ابق م ن تعبئ ة بياانت ه‬
‫(االستفادة من وقت الفراغ)‪.‬‬

‫‪ ‬إذا أحتاج العميل الثاين مثال لتصوير مستندات‪ ،‬سيذهب لفعل ذلك‪.‬‬

‫‪ ‬العميل األول يعبئ يف بياانت والثاين ذهب ليصور مستندات‪ ،‬اآلن املوظف ال يعمل (فارغ)‪.‬‬

‫‪ ‬ميكن للموظف أن حيضر عميل اثلث ويبدأ يف إجناز معاملته‪.‬‬

‫‪ ‬إذا فرغ العميل األول من تعبئة البياانت سيكون جاهزا إلكمال معاملته‪.‬‬

‫‪165‬‬
‫‪ ‬بع د ف راغ املوظ ف م ن العمي ل الثال ث س يدخل العمي ل األول ليكم ل ل ه معاملت ه‪ ،‬أو ق د ي دخل عمي ل راب ع‪،‬‬
‫حسب ما يرى (اجلدولة)‪ ،‬وهكذا‪.‬‬

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

‫‪ .8.5.0.0‬أحادية املهام‬

‫أما ِبلنسبة لنظام التشغيل أحادي املهام فهو يشبه املوظف الكسالن‪ ،‬حي ث س يبدأ املوظ ف خبدم ة عمي ل مث‬
‫إذا قام العميل بتعبئة منوذج أو تصوير مستند أو البحث عن معلومة يف أوراقه‪ ،‬ظل املوظف جالسا ال ي ؤدي أي مه ام‬
‫حىت يفرغ العميل من تعبئيه بياانته مث يرجع مرة أخرى للموظف وقد يتوقف العمي ل أكث ر م ن م رة لتكمل ة أوراق أو أي‬
‫شي آخر ويظل املوظف منتظرا هذا العميل‪.‬‬

‫‪ .8.5.0.5‬تعدد املهام احلقيقي (عدد من املوظفني)‬

‫إذا كان لدينا عدد ثالث موظفني مثال‪ ،‬فيمكن لكل موظف أن خيدم عميل ‪ِ ،‬بلت ايل س يكون ع دد العم الء‬
‫الذين سيتم خدمتهم يف اللحظة الواحدة يساوي عدد املوظفني املوجودين‪ .‬هنا يعترب التعدد تعدد حقيقي للمهام‪ ،‬ألنه‬
‫من املمكن للموظفني الثالث التحدث واالستماع والتعامل مع ثالث عمالء يف وقت واحد‪.‬‬

‫إذا كان لديك معاجل واحد فليس هنالك تعدد مهام حقيقي وإمنا استغالل جيد لزمن‬
‫املعاجل‪ .‬أما تعدد املهام احلقيقي فيتوفر يف احلواسيب اليت متتلك أكثر من نواة ِبملعاجل‬
‫(‪ ،)multi-core‬أو أكثر من معاجل يف احلاسب (‪.)multiprocessor‬‬

‫‪ .8.8‬التجزئة الثابتة‬
‫يقسم نظام التش غيل ال ذاكرة إىل من اطق اثبت ة خمتلف ة األحج ام وذل ك إلاتح ة الفرص ة لتحمي ل ب رامج أبحج ام‬
‫خمتلفة يف هذه املناطق‪ .‬تستخدم إدارة الذاكرة مسجلي حدود لكل منطقة من من اطق ال ذاكرة حي ث خي زن يف املس جل‬
‫األول احلد األعلى للمنطقة بينما خيزن يف املسجل الثاين احلد األسفل للمنطقة‪.‬‬

‫‪166‬‬
‫شكل ر قم (‪ :)3-8‬شكل الذاكرة جلدول احلجز (‪.)0-8‬‬

‫‪ .8.8.0‬كيف يعمل مدير الذاكرة‬

‫يقوم مدير الذاكرة ِبستخدام جدول يسمى جدول احلجز‪ ،‬حيتوي هذا اجلدول على رقم كل منطقة وحجمها‬
‫وأين توجد ِبلذاكرة وهل هي مستخدمة أم فارغة‪.‬‬

‫جدول رقم (‪ :)0-8‬جدول حجز الذاكرة‪.‬‬


‫استخدامها‬ ‫بدايتها‬ ‫حجم املنطقة‬ ‫رقم املنطقة‬
‫فارغ‬ ‫‪244‬‬ ‫‪10‬‬ ‫‪1‬‬
‫فارغ‬ ‫‪20‬‬ ‫‪2‬‬
‫مشغول‬ ‫‪50‬‬ ‫‪3‬‬
‫فارغ‬ ‫‪200‬‬ ‫‪4‬‬

‫مثال جدول احلجز (‪ )0-8‬ميثل الذاكرة ِبلشكل (‪ .)3-8‬حيث نستنتج منه اآليت‪:‬‬

‫‪ ‬درجة تعدد املهام هي ‪( 4‬ميكن حتميل ‪ 4‬برامج يف وقت واحد)‪.‬‬

‫‪ ‬املنطقة ‪ 5‬مشغولة (هبا برانمج اآلن‪ ،‬وال ميكن حتميل برامج هبا)‪.‬‬

‫‪ ‬حجم أكرب برانمج ميكن حتميله هنا هو ‪ 022‬كيلوِبيت (منطقة رقم ‪.)4‬‬

‫‪ ‬شكل الذاكرة للجدول (‪ )0-8‬هي الشكل (‪.)2-8‬‬

‫‪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‬‬

‫مثاال (‪ – )0-8‬غري حملول‬

‫إذا كان لدان جدول احلجز التايل‪:‬‬

‫‪169‬‬
‫‪ .0‬أرسم شكل الذاكرة جلدول احلجز أعاله‪.‬‬

‫‪ .0‬وضح كيف ميكن حتميل العمليات التالية يف الذاكرة ‪:‬‬

‫‪ِ P1=5, p2=100, p3=40, p4=500, p5=200‬بستخدام ‪:‬‬

‫‪ ‬األول ‪ff‬‬

‫‪ ‬األنسب ‪bf‬‬

‫‪ ‬األسوأ ‪wf‬‬

‫مثال (‪)5-8‬‬

‫إذا كانت لدينا ذاكرة تتكون من األقسام التالية (ِبلرتتيب)‪:‬‬

‫‪100k, 500k, 200k, 300k, 600k‬‬

‫وضح كيف تضع كل من اخلوارزميات‪ ،‬األول (‪ ،)ff‬األنسب (‪ ،)bf‬واألسوأ (‪ ،)wf‬العمليات التالية ِبلذاكرة‪:‬‬

‫‪P1=212k, p2=417k, p3=112k, p4=426k‬‬

‫أي خوارزمية هي األفضل يف استخدام الذاكرة ؟‬

‫‪170‬‬
‫تنبيه‪ :‬إذا مت حتميل عملية يف قسم‪ ،‬ميكن إنشاء قسم جديد من الفراغ املتبقي هبذا القسم (إذا كان يكفي لتحميل‬
‫عملية أخرى)‪.‬‬

‫احلل‬

‫األول (‪:)ff‬‬ ‫(أ)‬

‫ضع ‪ 212‬يف القسم ‪ 417 ،500‬يف القسم ‪ 112 ،600‬يف القسم ‪( 288‬قسم نتج من‬
‫‪ 426 ،)500-212=288‬تنتظر‪.‬‬

‫األفضل (‪:)bf‬‬ ‫(ب)‬

‫نضع ‪ 212‬يف ‪ 417 ،300‬يف ‪ 112 ،500‬يف ‪ 426 ،200‬يف ‪600‬‬

‫األسوأ (‪:)wf‬‬ ‫(ت)‬

‫‪ 212‬يف ‪ 417 ،600‬يف ‪ 112 ،500‬يف ‪ 426 ،388‬تنتظر‪.‬‬

‫يف هذا املثال جند أن األفضل (‪ )bf‬هي أفضل خوارزمية‪.‬‬

‫‪ .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‬‬

‫هل ميكن حتميل عملية حجمها ‪ 250k‬يف الشكل (‪h )3-8‬؟‬

‫نعم إذا قمن ا بض غط الفراغ ات اخلارجي ة‪ ،‬حي ث س يكون ذل ك ف راغ حبج م ‪ 96+96+64=256K :‬وه و‬
‫كايف لتحميل العملية‬

‫‪173‬‬
‫شكل رقم (‪ :)3-8‬الفراغات‪.‬‬

‫سؤال (‪)0-8‬‬

‫هل ميكن حتميل عملية حجمها ‪ 250k‬يف الشكل (‪)02-8‬؟ ال‪ ،‬ألن الفراغات داخلية وال ميكن‬
‫ضغطها‪.‬‬

‫شكل ر قم (‪ :)02-8‬ذاكرة ِبلتجزئية الثابتة‪.‬‬

‫‪ .8.3.0‬جتميع الفراغات (‪ )defrag‬أو الضغط (‪)compaction‬‬

‫إذا مل تتوفر منطقة لتحميل برانمج معني (ألنه أكرب من أي منطقة فارغة)‪ ،‬قد تستخدم بعض إدارات الذاكرة‬
‫عملية الضغط أو جتميع الفراغات لتوفري مساحة أكرب وذلك حبساب جمموع الفراغات املتوفرة‪ ،‬فإذا كان حجمها أكرب‬
‫أو يساوي حجم الربانمج جتمع هذه الفراغات لتكون فراغ واحد كبري يستطيع حتميل الربانمج‪ .‬مثال يف الشكل (‪-8‬‬
‫‪ ،)h( )02‬إذا استخدمنا الضغط سنجد أن الفراغ الذي سيجمع هو ‪.96+96+64=256K‬‬

‫‪174‬‬
‫‪ .8.02‬مشاكل تعدد املهام‬
‫ال ذاكرة متع ددة امله ام س واء كان ت ِبلتجزئي ة الثابت ة أو التجزئي ة الديناميكي ة أو غريه ا‪ ،‬هب ا مش اكل انجت ة ع ن‬
‫تعدد الربامج (أي وجود أكثر من برانمج ِبلذاكرة)‪ ،‬هذه املشاكل سنوضحها ِبلتفصيل أدانه ونبني كيف تتم معاجلتها‪.‬‬

‫‪ .8.02.0‬مشكلة تغيري املوقع ‪Relocation‬‬

‫عند حتميل برانمج ما للتنفيذ‪ ،‬ال نعرف يف أي منطقة ِبلذاكرة سيتحمل‪ ،‬أو إذا حدث تبديل (‪ )swap‬أي‬
‫مت إخراج الربانمج من الذاكرة لسبب ما‪ ،‬مث مت إرجاعه مرة اثنية إىل الذاكرة‪ ،‬قد يرجع الربانمج يف منطقة أخرى ِبلذاكرة‬
‫غ ري ال يت ك ان فيه ا‪ .‬ع دم معرف ة مك ان حتمي ل ال ربانمج ِبل ذاكرة جيع ل التعام ل م ع املتغ ريات وال دوال املرتبط ة بعن اوين‬
‫ال ذاكرة غ ري ممك ن‪ ،‬ألنن ا ال نع رف أي ن س تكون متغرياتن ا ودوالن ا ِبل ذاكرة‪ .‬م ثال إذا حتم ل ب رانمج مبوق ع يب دأ ِبلعن وان‬
‫‪ ،300‬وكان هنالك متغري داخل الربانمج ِبملوقع ‪ ،222‬وأراد الربانمج ختزين قيمة ما داخل هذا املتغري فإنه سيستخدم‬
‫العنوان ‪ 222‬للتعامل مع املتغري‪ ،‬شكل رقم (‪.)00-8‬‬

‫عنوان الذاكرة‬ ‫اخللية‬


‫‪0‬‬

‫‪ 521‬بداية الربانمج‬
‫‪...‬‬
‫‪ 600‬مكان املتغري‬ ‫‪75‬‬

‫شكل رقم (‪ :)00-8‬استخدام العنوان الفيزَيئي‪.‬‬

‫اآلن إذا مت حتمي ل ال ربانمج يف موق ع آخ ر يب دأ ِبلعن وان ‪ 200‬م ثال‪ ،‬الش كل (‪ .)00-8‬ف إن ال ربانمج‬
‫سيستخدم عنوان الذاكرة ‪ 222‬للوصول للمتغري‪ ،‬ولكن العنوان ‪ 222‬اآلن أصبح خارج منطقة الربانمج‪.‬‬

‫عنوان الذاكرة‬ ‫اخللية‬


‫‪0‬‬
‫‪...‬‬
‫‪ 600‬مكان املتغري إذا استخدمنا العنوان احلقيقي‬ ‫‪75‬‬
‫‪...‬‬
‫‪ 621‬بداية الربانمج‬
‫‪...‬‬
‫‪ 700‬مكان املتغري احلقيقي‬
‫‪...‬‬
‫شكل رقم (‪ :)00-8‬استخدام العنوان احلقيقي‬

‫‪175‬‬
‫أح د احلل ول هل ذه املش كلة ه و تع ديل أوام ر ال ربانمج قب ل حتميل ه ِبل ذاكرة‪ ،‬حي ث نض يف رق م بداي ة عن وان‬
‫املنطقة اليت سيحمل فيها الربانمج إىل كل أوامر الربانمج‪ .‬مثال إذا حتمل الربانمج مبنطقة تبدأ ِبلعنوان ‪ ،522‬فك ل أم ر‬
‫سيضاف إليه الرقم ‪ ،522‬فإذا كان الربانمج يتعامل مع متغري ِبلعنوان ‪ 022‬فسيتغري العنوان إىل ‪ .022+522‬هبذه‬
‫الطريقة حتل مشكلة تغيري املوقع‪.‬‬

‫‪ .8.02.0‬مشكلة احلماية ‪Protection‬‬

‫وصول برانمج إىل منطقة برانمج آخر يسبب مشكلة تداخل قد تؤدي إىل تنفيذ خاطئ هلذه الربامج‪ .‬فمثال‬
‫ق د تس تخدم ب رامج ختريبي ة (‪ )malicious program‬ه ذه املش كلة كثغ رة للوص ول لل ربامج والبي اانت األخ رى‬
‫(وذل ك إبنش اء أوام ر متكنه ا م ن القف ز (‪ )jump‬إىل أي مك ان ِبل ذاكرة)‪ .‬ومب ا أنن ا نس تخدم عن اوين حقيقي ة‪ ،‬فل يس‬
‫هنالك طريقة لتوقيف مثل هذه الربامج من الوصول إىل أي خلية والكتابة أو القراءة منها‪.‬‬

‫‪ .8.02.5‬حل مشكليت تغيري املواقع واحلماية‬

‫هنالك حل ميكن استخدامه ملعاجلة مشكليت إعادة تغيري املواقع واحلماية يف آن واحد‪ ،‬أال وهو استخدام‬
‫مسجلي األساس (‪ )base‬والطول (‪.)limit‬‬

‫عند حتميل أي برانمج سيحتوي مسجل األساس على عنوان بداية املنطقة اليت سيتحمل هبا‪ ،‬ومسجل الطول‬
‫سيخزن به طول هذا املنطقة‪ ،‬الشكل (‪.)05-8‬‬

‫شكل رقم (‪ :)05-8‬استخدام مسجلي األساس واحلد‪.‬‬

‫‪176‬‬
‫يس تخدم املع اجل عن اوين منطقي ة (ت رقيم تسلس لي م ن ‪ 2‬إىل ط ول احل د) للتعام ل م ع ال ربانمج‪ ،‬وس يتم إض افة‬
‫حمت وى مس جل األس اس (عن وان بداي ة املنطق ة) إىل العن وان املنطق ي قب ل إرس اله لل ذاكرة‪ .‬م ثال إذا أردان تنفي ذ أي أم ر‬
‫يتعامل مع الذاكرة‪ ،‬مثل األمر (‪ ، )Load 345‬فإنه البد من إجراء اخلطوات التالية قبل تنفيذ‪:‬‬

‫‪ ‬هل الرقم ‪ 543‬أكرب من طول املنطقة (‪)limit‬؟ (للحماية)‬

‫‪ ‬إذا كانت اإلجابة نعم سريسل إشعار أبن العنوان خطأ (‪.)trap: address error‬‬

‫‪ ‬إذا كان ت اإلجاب ة ال س نحول العن وان املنطق ي إىل عن وان حقيق ي وذل ك إبض افة حمت وى مس جل األس اس‬
‫للعنوان الذي يستخدمه األمر‪:‬‬

‫)‪Load (123+16000‬‬

‫مث يرسل إىل الذاكرة‪ ،‬الشكل (‪.)04-8‬‬

‫من عيوب هذه الطريقة أنه البد من إجراء اخلط وات أع اله عل ى ك ل أم ر يتعام ل م ع ال ذاكرة مم ا يتس بب يف إبط اء‬
‫التنفيذ‪.‬‬

‫شكل رقم (‪ :)04-8‬حتويل العنوان املنطقي إىل حقيقي [‪.]3‬‬

‫‪ .8.00‬العناوين املنطقية (‪)Logical addresses‬‬


‫تتك ون ال ذاكرة م ن خ الَي مص طفة وراء بعض ها ال بعض وأتخ ذ ك ل خلي ة عن وان غ ري متك رر يس مى العن وان‬
‫احلقيقي (تسمى أحياان عناوين فيزَيئية (‪ ،))physical addresses‬هذه العناوين هي اليت تستخدمها الذاكرة‪ .‬أما‬
‫املع اجل وال ربامج فيس تخدم عن اوين منطقي ة (تس مى أحي اان عن اوين ظاهري ة (‪ .))virtual addresses‬ه ذه العن اوين‬
‫تبدأ من الصفر وتزيد تسلسليا إىل هناية الربانمج أو هناية املنطقة (‪ 053‬مثال)‪ ،‬الشكل (‪.)03-8‬‬

‫‪177‬‬
‫عنوان الذاكرة‬ ‫اخللية‬ ‫العنوان املنطقي‬
‫‪222‬‬
‫‪...‬‬
‫‪222‬‬ ‫‪53‬‬
‫‪...‬‬
‫‪ 200‬بداية املنطقة‬ ‫‪222‬‬
‫‪200‬‬ ‫‪220‬‬
‫‪205‬‬ ‫‪220‬‬
‫‪204‬‬ ‫‪225‬‬
‫‪203‬‬ ‫‪224‬‬
‫‪...‬‬ ‫‪...‬‬ ‫‪...‬‬
‫‪535‬‬ ‫‪052‬‬
‫‪538‬‬ ‫‪055‬‬
‫‪533‬‬ ‫‪058‬‬
‫‪ 822‬هناية املنطقة‬ ‫‪053‬‬

‫شكل رقم (‪ :)03-8‬العناوين املنطقية و العناوين احلقيقية‪.‬‬

‫السؤال هنا من يقوم بعملية حتويل العنوان ؟ اإلجابة‪ :‬وحدة إدارة الذاكرة ( ‪Memory Management Unit‬‬
‫)‪.)(MMU‬‬

‫‪ .8.00.0‬ما هي وحدة إدارة الذاكرة (‪ )MMU‬؟‬

‫هي عبارة عن جهاز صغري (عتاد) موجود ِبملعاجل يقوم بتحويل العناوين املنطقية اليت يستخدمها املعاجل إىل‬
‫عناوين حقيقية‪ ،‬حبيث ال يهتم وال يعرف املعاجل كيف يتم ذلك‪ ،‬فاملعاجل يقوم إبرسال عنوانه املنطقي إىل ‪MMU‬‬
‫(مثال العنوان رقم ‪ ،)542‬فيقوم ‪ MMU‬بتحويل العنوان املنطقي إىل حقيقي مث يرسله للذاكرة (العنوان ‪،)04542‬‬
‫فتصل املعلومة للمعاجل وهو اليعرف موقعها األصلي ِبلذاكرة‪ ،‬الشكل (‪.)04-8‬‬

‫‪ .8.00.0‬مسجل األساس‬

‫عند حتميل الربانمج نضع عنوان بداية الربانمج يف مسجل يسمى مسجل األساس (‪،)base register‬‬
‫هذا املسجل يستخدمه ‪ MMU‬مع العنوان املنطقي (تسمى أحياان اإلزاحة) لتوليد العنوان احلقيقي‪.‬‬

‫‪178‬‬
‫مثال يف الشكل (‪ ،)03-8‬سيكون حمتوى مسجل األساس هو ‪ ،200‬ويستخدم املعاجل العناوين املنطقية‬
‫من صفر إىل ‪ .053‬أما ‪ MMU‬فيمكنه توليد أي عنوان فيزَيئي مبجمع العنوان املنطقي إىل حمتوى مسجل‬
‫األساس‪.‬‬

‫تنبيه‪:‬‬

‫‪ ‬العنوان املنطقي يبدأ من الصفر إىل مسجل احلد‪0-‬‬

‫‪ ‬العنوان احلقيقي‪ :‬يبدأ من مسجل األساس إىل مسجل األساس‪+‬مسجل احلد‪0-‬‬

‫‪ ‬هل العنوان املنطقي الذي تساوي قيمته قيمة مسجل الطول يعترب عنوان صحيح؟ ال‪ ،‬ألن أكرب عنوان‬
‫منطقي جيب أن يكون أقل من مسجل احلد بواحد‪.‬‬

‫قارن العناوين املنطقية مع العناوين الفيزَيئية ِبلشكل (‪ )03-8‬وذلك جبمع ‪ 200‬للعنوان‬


‫املنطقي وستجده يساوي العنوان احلقيقي لنفس املوقع‪.‬‬

‫األمثلة التالية توضح كيف يقوم ‪ MMU‬بعملية التحويل‪.‬‬

‫مثال(‪)3-8‬‬

‫ِبلرجوع للشكل (‪ ،)04-8‬وضح كيف تحول العناوين املنطقية التالية إىل حقيقية‪:‬‬

‫‪4 ‬‬

‫‪055 ‬‬

‫‪022 ‬‬

‫احلل‬

‫من الشكل (‪ )04-8‬جند أن حمتوى مسجل األساس (‪ )200‬وسيخزن يف مسجل الطول طول املنطقة (‪.)053‬‬
‫للتحوي ل س يقوم ‪ MMU‬مبقارن ة العن اوين املنطقي ة م ع حمت وى مس جل احل د‪ ،‬ف إذا كان ت أص غر س يقوم ض افة حمت وى‬
‫مسجل األساس إىل العنوان املنطقي فينتج العنوان احلقيقي وعليه ستكون النتيجة كالتايل‪:‬‬

‫‪203 = 200 + 4 ‬‬

‫‪179‬‬
‫‪538 = 200 + 055 ‬‬

‫‪ ‬خطأ‪ ،‬العنوان املنطقي أكرب من حمتوى مسجل احلد‪.‬‬

‫مثال (‪)2-8‬‬

‫حول العناوين احلقيقية التالية إىل منطقية‪:‬‬

‫‪203 ‬‬

‫‪538 ‬‬

‫‪0222 ‬‬

‫سنقوم بطرح مسجل األساس من العنوان احلقيقي فينتج عنه عنوان منطقي‪ ،‬وذلك كما يلي‪:‬‬

‫‪4 = 200 – 203 ‬‬

‫‪055 = 200 – 538 ‬‬

‫‪( 053 = 200 – 0222 ‬خطأ ألن العنوان احلقيقي خارج حد العملية)‪.‬‬

‫‪ .8.00‬الذاكرة ِبلصفحات (‪)Paging‬‬


‫نالحظ أنه إذا قسمنا الربانمج جلزأين كبريين فإن‪:‬‬

‫‪ ‬يتطلب كل جزء فراغ كبري لتحميله به‪.‬‬

‫‪ ‬املبادلة ستكون بطيئة جدا وذلك لكرب حجم األجزاء املتبادلة‪.‬‬

‫‪ ‬إذا احتجنا إىل جزئية صغرية من النصف الذي ِبلقرص فسنضطر إىل تبديله (كله) مع اجلزء ال ذي ِبل ذاكرة‪،‬‬
‫بعد تنفيذ اجلزئية الصغرية املطلوبة من ه ذا اجل زء وأردان الرج وع إلكم ال تنفي ذ اجل زء األول ال ذي مت إخ راجهن‬
‫فسنضطر لتبديل اجلزأين مرة أخرى‪ ،‬مما يتسبب يف أبطاء العمل بصورة واضحة‪ ،‬ذلك ألن التعامل مع القرص‬
‫الصلب يؤثر أتثريا كبريا يف األداء‪.‬‬

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

‫‪180‬‬
‫‪ .8.00.0‬الصفحات‬

‫تقسيم الربانمج إىل أجزاء صغرية متساوية يف احلجم تس مى ص فحات (‪ ،)pages‬وتقس م ال ذاكرة إىل من اطق‬
‫ص غرية متس اوية يف احلج م (ومس اوية حلج م الص فحة) تس مى إط ارات (‪ .)frames‬حبي ث يك ون ك ل إط ار ق ادرا عل ى‬
‫ختزين صفحة‪.‬‬

‫لتنفيذ برانمج بعدد ن صفحة‪ ،‬فسنحتاج إىل ن إطار فارغ ِبلذاكرة‪ ،‬وإالسنحتاج إىل ذاكرة ظاهرية‪.‬‬

‫ق د تنش أ فراغ ات داخلي ة يف ‪ Internal fragmentation‬يف ذاك رة الص فحات‪ .‬م ثال إذا ك ان حج م‬
‫الصفحة ‪ 4kb‬وكان لدينا برانمج حجمه ‪ ، 110kb‬فإننا سنقسم الربانمج كالتايل‪:‬‬

‫‪ 110/4 = 27‬الب اقي ‪ ،2‬إذن س أحتاج إىل ‪ 27‬ص فحة ِبإلض افة إىل الب اقي م ن ال ربانمج وه و ‪2kb‬‬
‫فأضطر إىل وضعها يف صفحة (ومبا أن الصفحة حجمها أربعة فإن الباقي وهو ‪ 2kb‬سنض عه يف ص فحة ويك ون ل دينا‬
‫ف راغ داخل ي حجم ه ‪ ،)2kb‬ل ذلك س نحتاج إىل ‪ 28‬ص فحة لل ربانمج م ع ف راغ داخل ي حجم ه ‪ 2kb‬يف الص فحة‬
‫األخرية‪.‬‬

‫‪ .8.00.0‬التعامل مع العناوين يف الصفحات‬

‫يتكون العنوان املنطقي من شقني‪:‬‬

‫‪ ‬عنوان الصفحة (رقم الصفحة)‪.‬‬

‫‪ ‬عنوان اخلانة داخل الصفحة (اإلزاحة ‪.)offset‬‬

‫شكل رقم (‪ :)02-8‬العنوان املنطقي‪.‬‬

‫فإذا كان ‪ ،p=7‬و ‪ ،d=20‬فهذا ينعي أننا نريد اخلانة رقم ‪( 00‬ألن أول خانة يف الصفحة رقمها هو صفر)‬
‫ِبلصفحة السابعة‪.‬‬

‫ويتكون العنوان احلقيقي من شقني مها‪:‬‬

‫‪ ‬عنوان اإلطار الذي ختزن به الصفحة يف الذاكرة‪.‬‬

‫‪181‬‬
‫‪ ‬عنوان اخلانة داخل اإلطار (اإلزاحة)‪.‬‬

‫عملية حتويل العنوان املنطقي إىل حقيقي يتم جبهاز (‪ )hardware‬يستقبل العناوين املنطقية من املعاجل وحيوهلا‬
‫إىل حقيقية قبل إرساهلا للذاكرة‪ .‬تعتمد عملية التحويل هذه على جداول الصفحات‪.‬‬

‫شكل رقم (‪ :)05-8‬جهاز حتويل العنوان منطقي إىل حقيقي [‪.]3‬‬

‫يف الشكل (‪ ،)05-8‬يستخدم املعاجل عنوان الصفحة ومكان اخلانة داخل الصفحة (اإلزاحة)‪ ،‬فيقوم اجلهاز‬
‫ِبلبحث عن رقم اإلطار الذي وضعت به الصفحة ِبلذاكرة من جدول الصفحات‪ ،‬حيث ميثل عنوان الصفحة فهرس‬
‫نصل به إىل رقم اإلطار الذي ختزن به الصفحة يف الذاكرة‪ .‬ندمج رقم اإلطار مع اإلزاحة فينتج العنوان احلقيقي‬

‫يتم إنشاء جدول صفحات لكل عملية حبيث حيتوي هذا اجلدول على رقم الصفحات اليت مت حتميلها ِبلذاكرة‬
‫وأرقام اإلطارات اليت وضعت فيها هذه الصفحات‪ ،‬كما يف الشكل (‪.)08-8‬‬

‫‪182‬‬
‫شكل رقم (‪ :)08-8‬جدول الصفحات يوضح مكان الصفحات ِبلذاكرة [‪.]3‬‬

‫مثال (‪)5-8‬‬

‫حول العناوين املنطقية التالية إىل عناوين حقيقية (ِبلرجوع للشكل (‪:))3-3‬‬

‫احلل‬

‫سنبحث عن اإلطار الذي توجد به الصفحة من جدول الصفحات ونستبدله برقم الصفحة (ونضع الغزاحة‬
‫كما هي) فتكون العناوين احلقيقية كما يلي‪:‬‬

‫مثال (‪)8-8‬‬

‫الشكل التايل يوضح البياانت اليت توجد داخل الصفحات‪ ،‬ومكان تواجد هذه الصفحات ِبلذاكرة‪.‬‬
‫املطلوب هنا معرفة مكان معلومة معينة داخل الصفحة مثال احلرف ‪ a‬أين يوجد ِبلذاكرة ؟‬

‫احلل‬

‫‪183‬‬
‫احلرف ‪ a‬يوجد الصغحة االوىل (رقم صفر)‪ ،‬ويوجد يف أول خانة داخل الصفحة (اإلزاحة=صفر) ‪ ،‬سنقوم‬
‫بتحويل رقم الصفحة إىل رقم اإلطار من جدول الصفحات حيث سنجد أن الصفحة رقم صفر توجد يف اإلطار رقم‬
‫مخسة‪ ،‬لنصل للمعلومة مباشرة نضرب رقم اإلطار يف طول الصفحة (‪ )4‬ونضيف إليه اإلزاحة‪:‬‬

‫‪5 x 4 + 0 = 20‬‬

‫فنجد أن العنوان رقم ‪ِ 02‬بلذاكرة حيتوي فعال على احلرف ‪.a‬‬

‫أيضا احلرف ‪ p‬مثال يف الصفحة رقم ‪ ،3‬يف اخلانة رقم ‪ ،3‬الصفحة ‪ 3‬توجد ِبإلطار ‪( 2‬من جدول الصفحات)‪،‬‬
‫ملعرفة مكان احلرف ‪ِ p‬بلذاكرة سنجري العمليية التالية‪:‬‬

‫‪2 x 4 + 3 =11‬‬

‫وجند ‪ 11‬هي مكان احلرف ‪ِ p‬بلذاكرة‪.‬‬

‫شكل رقم (‪ :)03-8‬مثال لصفحات ِبلذاكرة مع جدول الصفحات [‪.]3‬‬

‫مثال (‪)3-8‬‬

‫‪184‬‬
‫إذا كان لدي عملية تتكون من ‪ 4‬صفحات ولدي إطارات فراغة كما موضح ِبلشكل ‪ ،02-8‬إنشي‬
‫جدول الصفحات بعد حتميل العملية ِبلذاكرة‪.‬‬

‫شكل رقم (‪ :)02-8‬عملية جديدة نريد حتميلها يف الذاكرة [‪.]3‬‬

‫احلل‬

‫احلل هو الشكل ‪.00-8‬‬

‫شكل رقم (‪ :)00-8‬حتميل عملية ِبلذاكرة [‪.]3‬‬

‫‪ .8.00.5‬محاية الذاكرة‬

‫‪185‬‬
‫كيف أعرف أن صفحة معينة تنتمي إىل عملية معينة ؟ ميكن ختصيص خانة (‪ )bit‬يف كل إطار هلذا‬
‫الغرض‪ ،‬حبيث حتدد قيمة هذه اخلانة هل تنتمي الصفحة للعملية أم ال‪ .‬فإذا كانت قيمة البت هي ‪ v‬وتعين (‪)valid‬‬
‫فهذا يعين أن الصفحة تنتمي للعملية‪ ،‬اما إذا كانت قيمة البت ‪ i‬وتعين (‪ ،)in-valid‬فهذا خيربان أبن الصفحة ال‬
‫تنتمي للعملية‪ .‬يكون هنالك عمود محاية جلدول الصفحات كما يف الشكل (‪.)00-8‬‬

‫شكل رقم (‪ :)00-8‬عمود احلماية يضاف إىل جدول الصفحات [‪.]3‬‬

‫من الشكل (‪ )00-8‬جند أن الصفحات الصحيحة هي ‪ 0,1,2,3,4,5‬واليت تظهر يف اليسار‪ ،‬لذلك‬


‫جند أمامها ‪ v‬يف جدول الصفحات‪ ،‬أما الصفحات ‪ 5,7‬فهي غري صحيحة لذلك جند أماها ‪ i‬ويف رقم اإلطار صفر‪.‬‬

‫‪ .8.00.4‬الصفحات املشرتكة ‪Shared Pages‬‬

‫ميكن جعل الصفحات املتشاهبة بني عدة عمليات مشرتكة يف الذاكرة لتوفري مساحة ِبلذاكرة وإزالة التكرار‪،‬‬
‫فبدال من وضع نسخة من هذه الصفحات لكل عملية نضع نسخة واحدة وجنعلها مشرتكة بني العمليات‪ .‬أما‬
‫الصفحات اليت ختص كل عملية فتكون غري مشرتكة‪.‬‬

‫‪ .8.00.4.0‬الشفرات املشرتكة ‪Shared code‬‬

‫نسخة واحدة للقراءة فقط لكل العمليات مثل حمرر النصوص‪ ،‬املرتمجات‪.‬‬

‫‪186‬‬
‫الشفرة املشرتكة جيب أن تكون يف نفس املكان يف جمال العنوان املنطقي ‪ logical address space‬لكل‬
‫العمليات‪ ،‬مثال الشكل (‪ )05-8‬جند عنوان ‪ ed‬متشابه يف كل العمليات (‪.)5،4،2‬‬

‫‪ .8.04.4.0‬الشفرات والبياانت اخلاصة ‪Private code and data‬‬

‫كل عملية يكون لديها نسخة منفصلة لشفراهتا وبياانهتا‪.‬‬

‫الصفحات اليت حتتوي شفرات وبياانت خاصة ميكن أن تكون يف أي مكان يف جمال العنوان‬
‫املنطقي‪ ،logical address space‬مثال يف الشكل (‪ )04-8‬جند أن لكل عملية عنوان خمتلف لبياانهتا اخلاصة‬
‫(‪.)p1=1, p3=2, p2=7‬‬

‫شكل رقم (‪ :)05-8‬صفحات مشرتكة بني عدة عمليات [‪.]3‬‬

‫‪ .8.05‬التقطيع (‪)segmentation‬‬
‫هو طريقة إلدارة الذاكرة تدعم نظرة املستخدم للذاكرة‪ ،‬حيث نقوم بتقسيم الربانمج إىل أجزاء منطقية‪،‬‬
‫فالربانمج الرئيسي يكون يف مقطع‪ ،‬الدوال يف مقطع والبياانت يف مقطع آخر‪ ،‬وهكذا‪.‬‬

‫يعترب املقطع وحدة منطقية مثل الربانمج الرئيسي‪ ،‬دالة معينة‪ ،‬كائن‪ ،‬املتغريات العامة واخلاصة‪ ،‬املكدس‬
‫(‪ ،)stack‬املصفوفات‪.‬‬

‫بعد تقسيم الربانمج إىل مقاطع نضع كل مقطع يف خانة ِبلذاكرة‪ ،‬الشكل (‪.)04-8‬‬

‫‪187‬‬
‫شكل رقم (‪ :)04-8‬حتميل مقاطع الربانمج يف الذاكرة‪.‬‬

‫‪ .8.05.0‬العناوين يف التقطيع‬

‫يتكون العنوان املنطقي من ‪ :‬رقم املقطع‪ ،‬ورقم اإلزاحة (‪.) offset،segment-number‬‬

‫تتم عملية التحويل بني العنوان املنطقي والعنوان احلقيقي استخدام مسجلي أساس وحد‪ ،‬حيث حيتوي‬
‫مسجل األساس عنوان بداية املقطع يف الذاكرة ومسجل الطول حيتوي على طول املقطع (‪ .)limit‬توضع مسجالت‬
‫األساس والطول لكل املقاطع يف جدول واحد يسمى جدول املقاطع (‪ ،)segment table‬حيث هنالك جدول‬
‫مقاطع لكل عملية‪.‬‬

‫هنالك جهاز يقوم بعملية حتويل العناوين من منطقية إىل حقيقية يعمل كما يف الشكل (‪.)03-8‬‬

‫‪188‬‬
‫شكل رقم (‪ :)03-8‬حتويل العنوان املنطقي إىل حقيقي [‪.]3‬‬

‫مثال (‪)3-8‬‬

‫الشكل (‪ )02-8‬يوضح برانمج مكون من ‪ 5‬مقاطع‪ ،‬ويبني جدول املقاطع مكان كل مقطع ِبلذاكرة‬
‫الرئيسية‪.‬‬

‫شكل رقم (‪ :)02-8‬مثال ملقاطع برانمج يف الذاكرة مع جدول املقاطع [‪.]3‬‬

‫لتوضيح كيف يتم التحويل من العنوان املنطقي إىل احلقيقي‪ ،‬لنحول العنوان املنطقي التايل إىل حقيقي‪:‬‬

‫هذا العنوان يعين أنين أريد معلومة من املقطع رقم ‪ 0‬اإلزاحة رقم ‪.20‬‬

‫احلل‬

‫‪ ‬أحبث يف جدول املقاطع عن قيمة مسجل األساس للمقطع ‪ 20‬وهي ‪.1400‬‬

‫‪ ‬قارن قيمة اإلزاحة مع مسجل الطول (أي هل ‪ 20‬أصغر من ‪ )1000‬؟ إذا كانت اإلجابة نعم فسأقوم‬
‫ِبلتحول وإال سيكون هنالك خطأ يف اإلزاحة‪.‬‬
‫‪189‬‬
‫‪ ‬إذن العنوان احلقيقي سيكون حمتوى مسجل األساس ‪ +‬اإلزاحة أي ‪1420 =20+1400‬‬

‫مثال (‪)02-8‬‬

‫حول العنوان املنطقي التايل إىل حقيقي ‪:‬‬

‫احلل‬

‫‪ ‬مسجل األساس للمقطع هو ‪1400‬‬

‫‪ ‬مسجل الطول للمقطع هو ‪1000‬‬

‫‪ ‬عند مقارنة مسجل الطول مع اإلزاحة جند ان اإلزاحة أكرب من مسجل الطول وهذا يعين أننا سنكون‬
‫خارج املقطع (وصول خاطئ)‪.‬‬

‫هذا يعين أننا ال نستطيع حتويل هذا العنوان ألنه عنوان خطأ‪.‬‬

‫‪ .8.04‬خالصة‬
‫حت دثنا يف ه ذا الب اب أه داف إدارة ال ذاكرة‪ ،‬وع ن أن واع إدارات ال ذاكرة وه ي األحادية‪،‬والتجزئي ة الثابت ة‬
‫والتجزئية الديناميكية والصفحات والتقطيع‪ .‬حيث تعترب الذاكرة األحادية قدمية وغري مستخدمة حاليا‪ ،‬والتجزئية الثابتة‬
‫تول د فراغ ات داخلي ة ال ميك ن اإلس تفادة منه ان بينم ا تول د التجزئي ة الديناميكي ة فراغ ات خارجي ة ميك ن ض غطتها‬
‫لإلستفادة منه ا‪ .‬ال ذاكرة ِبلتص فح تس اعد يف االس تفادة م ن فراغ ات ال ذاكرة الص غرية حي ث ميك ن حتمي ل ص فحات يف‬
‫فراغات صغرية مبعثرة‪ .‬التقطيع هو إدارة لتقسيم العملية إىل مقاطع ونضع كل مقطع يف جزء من االذاكرة‪ .‬أيضا وضحنا‬
‫أن العنوان املنطقي هو العنوان الذي يستخدمه املعاجل والربامج بينما تستخدم ال ذاكرة عن اوين حقيقي ة‪ .‬وس نتحدث ع ن‬
‫إمكانية تنفيذ برامج أكرب من حجم الذاكرة الرئيسية فيما يسمى الذاكرة االفرتاضية‪.‬‬

‫‪190‬‬
‫‪ .8.03‬متارين حملولة‬
‫‪ .0‬إذا كان لدينا جدول املقاطع (‪ )segment table‬التايل‪:‬‬

‫احلد‪/‬الطول (‪)limit‬‬ ‫األساس (‪)base‬‬ ‫رقم املقطع‬


‫‪600‬‬ ‫‪300‬‬ ‫‪0‬‬
‫‪20‬‬ ‫‪7000‬‬ ‫‪1‬‬
‫‪300‬‬ ‫‪0‬‬ ‫‪2‬‬
‫‪6000‬‬ ‫‪1000‬‬ ‫‪3‬‬
‫‪100‬‬ ‫‪900‬‬ ‫‪4‬‬

‫حول العناوين املنطقية التالية إىل عناوين حقيقية ‪:‬‬

‫‪ 0, 500‬‬
‫‪ 1, 10‬‬
‫‪ 2, 500‬‬
‫‪ 3, 2400‬‬
‫‪ 4, 99‬‬
‫أرسم شكل الذاكرة مع توضيح هل توجد فراغات خارجية أم ال ؟‬

‫احلل‪:‬‬

‫العنوان املنطقي ‪ 2,500‬ال ميكن حتويله ألن ‪ 500‬أكرب من طول املقطع (احلد هو ‪.)300‬‬

‫‪191‬‬
‫من الشكل أعاله جند أنه ال يوجد فراغ خارجي‪.‬‬

‫‪ .8.02‬متارين غري حملولة‬


‫‪ .0‬أذكر مخسة من أهداف إدارة الذاكرة ؟‬

‫‪ .0‬ما الفرق بني العنوان املنطقي والعنوان احلقيقي ؟‬

‫‪ .5‬أذكر مشكليت تعدد املهام ‪ ،‬مع توضيح احلل هلا ؟‬

‫‪ .4‬ما الفرق بني الذاكرة ِبلتجزئية الثابتة والذاكرة الديناميكية ؟ و ماهي عيوب كل منهما ؟‬

‫‪ .3‬ماهي الفراغات وما عالجها ؟‬

‫‪ .2‬هنالك نوعني من الفراغات إذكرمها مع تبيني يف أي نوع من إدارات الذاكرة تنشأ كل واحدة منها؟ وما الفرق‬
‫الرئيسي بينهما ؟‬

‫‪ .5‬ضع دائرة حول اإلجابة‪/‬اإلجاِبت الصحيحة (قد يكون هنالك أكثر من إجابة صحيحة)‬

‫‪ .5.0‬ما الذي ال نرغب به يف الذاكرة‪:‬‬

‫‪ ‬سريعة‬

‫‪ ‬كبرية‬

‫‪192‬‬
‫‪ ‬متطايرة‬

‫‪ ‬غري متطايرة‬

‫‪ .5.0‬إذا كان لدينا ذاكرة مقسمة إىل األجزاء التالية‪:‬‬

‫‪222 ،522 ،022 ،322 ،022‬‬

‫وأردان حتميل العمليات التالية فيها‪:‬‬

‫‪P1=5, p2=100, p3=300, p4=500, p5=200, P6=600‬‬

‫فإن ‪:‬‬

‫‪ P6 ‬ستنتظر يف طريقة األول ‪ff‬‬

‫‪ P6 ‬ستنتظر يف طريقة األنسب ‪،bf‬‬

‫‪ P6 ‬ستنتظر يف طريقة األسوأ ‪wf‬‬

‫‪ .5.5‬اجلهاز الذي يقوم بتحويل العنوان املنطقي إىل عنوان حقيقي يسمى‪:‬‬

‫‪CPU ‬‬

‫‪MPU ‬‬

‫‪MMU ‬‬

‫‪MNU ‬‬

‫‪ .5.4‬إذا كان لدي ‪ 5‬فراغات داخلية‪ ،‬الفراغ األول حبجم ‪ ،100K‬والفراغ الثاين حبجم ‪ ،90K‬والفراغ الثالث‬
‫حجمه ‪ ،110K‬فهل ميكنين حتميل عملية حجمها ‪ ، 300K‬علما أبن جمموع هذه الفراغات يساوي ‪.300K‬‬

‫‪ ‬نعم‪ ،‬إذا استخدمت الضغط‪.‬‬

‫‪ ‬ال ميكن ألين ال استطيع ضغط الفراغات‪.‬‬

‫‪ ‬اإلجابتان خطأ‪.‬‬

‫‪ ‬اإلجابتان خطأ‪.‬‬
‫‪193‬‬
‫إذا كان لدينا برانمج حجمه ‪ 100 K‬وكان حجم الصفحة ‪ ، 3 K‬فإنه سيكون لدينا‪:‬‬ ‫‪.5.3‬‬

‫‪ 55 o‬صفحة بدون فراغ داخلي يف الصفحة األخرية‬

‫‪ 54 o‬صفحة بفراغ داخلي يف الصفحة األخرية‬

‫‪ 55 o‬صفحة بفراغ داخلي يف الصفحة األخرية‬

‫‪ 54 o‬صفحة بدون فراغ داخلي يف الصفحة األخرية‬

‫‪ .8‬أجب بنعم أو ال (مع تصحيح اإلجابة اخلاطئة)‬

‫‪ ‬يتعامل برانمج املستخدم مع العناوين احلقيقية وال يرى أبدا العناوين املنطقية‪.‬‬

‫‪ ‬الفراغات الداخلية ال ميكن ضغطتها‪.‬‬

‫‪ ‬التجزئة الديناميكية تولد فراغات داخلية بينما التجزئة الثابتة تولد فراغات خارجية‪.‬‬

‫‪ .3‬الرجوع للشكل (‪ ،)05-8‬أجب على األسئلة اليت تليه‪.‬‬

‫شكل رقم (‪ :)05-8‬الصفحات [‪.]3‬‬

‫إبفرتاض أن مسجل األساس حيتوي على ‪ ،522242‬ومسجل الطول حيتوي على ‪ ،002322‬كما يف الشكل‬
‫أعاله‪.‬‬

‫‪194‬‬
‫حول العناوين املنطقية التالية إىل عناوين حقيقية‪:‬‬

‫‪0003 ،000 ،005432‬‬

‫حول العناوين احلقيقية التالية إىل منطقية‪:‬‬

‫‪422242 ،522253 ،522242‬‬

‫‪ .02‬ما هو مفهوم الصفحات ؟‬

‫‪ .00‬أكمل الرسم ‪ 08-8‬بتوضيح أماكن حتميل الصفحات ِبلذاكرة وتوضيح الصفحات الصحيحة من الغري‬
‫صحيحة يف جدول الصفحات بوضح احلرف ‪ v‬أمام الصفحات الصحيحة واحلرف ‪ i‬أمام الصفحات الغري صحيحة ؟‬

‫شكل رقم ‪]3[ 08-8‬‬

‫‪195‬‬
‫الباب التاسع‪ :‬الذاكرة االفرتاضية‬

‫‪196‬‬
‫الباب التاسع‬

‫الذاكرة االفرتاضية (‪)Virtual Memory‬‬

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

‫‪ ‬ستكون مكلفة‪.‬‬

‫‪ ‬مهما كانت الذاكرة كبرية ستكون هنالك برامج أكرب‪.‬‬

‫هنالك أمساء متعددة تستخدم للذاكرة االفرتاضية (‪ ،)virtual memory‬فقد يطلق‬


‫عليها الذاكرة الظاهرية أو الذاكرة اخليالية أو الذاكرة الومهية‪ ،‬كلمات كثرية ملعىن واحد‪.‬‬

‫‪ .3.0‬تعريف الذاكرة االفرتاضية‬


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

‫يبدأ املعاجل يف تنفيذ جزء الربانمج املوجود ِبلذاكرة‪ ،‬وإذا أحتاج إىل أوامر أو بياانت من اجلزء اآلخر (املوجود‬
‫ِبلقرص) سيقوم مدير الذاكرة بتبديل اجلزئني (‪.)swap‬‬

‫‪ .3.5‬التبديل ‪Swapping‬‬
‫التب ديل ه و حتوي ل ال ربانمج (أو ج زء من ه) م ن ال ذاكرة الرئيس ية إىل الق رص أو العك س‪ .‬ت تم املبادل ة عل ى‬
‫مرحلتني‪ ،‬الشكل (‪ ،)0-3‬مها‪:‬‬

‫‪ ‬حتويل الربانمج (أو جزء منه) من الذاكرة إىل القرص (‪.)swap out‬‬

‫‪197‬‬
‫‪ ‬حتميل الربانمج (أو جزء منه) من القرص إىل الذاكرة (‪.)swap in‬‬

‫شكل رقم (‪ :)0-3‬التبديل [‪.]3‬‬

‫‪ .3.4‬الذاكرة االفرتاضية‬
‫تعترب الذاكرة االفرتاضية فصل بني ذاكرة املستخدم املنطقية والذاكرة احلقيقية وختتلف عن الذاكرة احلقيقية يف‬
‫اآليت‪:‬‬

‫‪ o‬فقط جزء من الربانمج يكون ِبلذاكرة‪.‬‬

‫‪ o‬قد يكون جمال العنوان املنطقي أكرب من جمال العنوان احلقيقي‪.‬‬

‫‪ o‬ميكن لعدة عمليات التشارك يف جمال عناوين‪.‬‬

‫ميكن تطبيق الذاكرة االفرتاضية يف ‪:‬‬

‫‪ o‬إدارة الذاكرة ِبلصفحات‪.‬‬

‫‪ o‬إدارة الذاكرة ِبملقاطع‪.‬‬

‫‪ .3.3‬الذاكرة االفرتاضية يف الصفحات‬


‫إذا كان صفحات الربانمج أقل أو تساوي اإلطارات ِبلذاكرة فلن تحتاج إىل ذاكرة ظاهرية‪ .‬ولكن تحتاج‬
‫للذاكرة االفرتاضية إذا كانت صفحات الربانمج أكرب من اإلطارات املتوفرة ِبلذاكرة‪ .‬مثال يف الشكل (‪ )0-3‬جند أن‬
‫الذاكرة مقسمة إىل ‪ 8‬إطارات‪ ،‬والربانمج مقسم إىل ‪ 02‬صفحة‪ .‬سيكون هنالك ‪ 8‬صفحات ِبلذاكرة من الربانمج‬
‫(أمامها عالمة ‪ )X‬والبقية ستكون يف القرص الصلب (ذاكرة ظاهرية)‪.‬‬

‫‪198‬‬
‫شكل رقم (‪ :)0-3‬الصفحات [‪.]03‬‬

‫التعامل مع الذاكرة االفرتاضية‪:‬‬

‫‪ ‬إحضار الصفحة اليت تحتاجها إىل الذاكرة‪.‬‬


‫‪ ‬نبحث عن الصفحة املطلوبة املطلوبة يف جدول الصفحات‬
‫‪ o‬إذا كانت الصفحة غري صحيحة ‪ ،‬نتوقف‬
‫‪ o‬إذا كانت ليست ِبلذاكرة‪ ،‬تحضرها إىل الذاكرة‬
‫‪ ‬ال تحضر صفحة إىل الذاكرة ما مل تحتاجها‬
‫هنالك خوارزمي ات عدي دة يس تخدمها م دير ال ذاكرة ليح دد أي ص فحة خي رج م ن ال ذاكرة عن د م ا نري د إط ار‬
‫فارغ لتخزين الصفحة املطلوبة به (فمن الصفحة الضحية)؟‬

‫قبل إخراج الصفحة (استخدام مكاهنا)‪ ،‬سيقوم مدير الذاكرة ِبختبار هل الصفحة املراد استخدام‬
‫مكاهنا قد مت تعديلها أم ال ؟ إذا مت تعديلها جيب أن حتفظ ِبلقرص‪ ،‬أما إذا مل يتم تعديلها فنكتفي‬
‫بنسختها القدمية املوجودة ِبلقرص‪.‬‬

‫‪199‬‬
‫‪ .3.3.0‬خطأ صفحة (‪)page fault‬‬

‫عندما يطلب برانمج صفحة غري موجودة ِبلذاكرة (إفتقاد صفحة)‪ ،‬سيسبب ذلك قفز إىل نظام التشغيل‬
‫برسالة تقول أن هنالك خطأ صفحة ‪ ، page fault‬أي أن الربانمج يريد صفحة ومل جيدها ِبلذاكرة‪ .‬على نظام‬
‫التشغيل توفري الصفحة املفتقدة للربانمج الذي إفتقدها حسب اخلطوات التالية‪:‬‬

‫‪ ‬إذا كانت الصفحة ليست صحيحة‪ ،‬يتوقف ‪.abort‬‬

‫‪ ‬إذا كانت الصفحة صحيحة لكنها ليست ِبلذاكرة‪:‬‬

‫‪ o‬احلصول على إطار فارغ‪.‬‬

‫‪ o‬وضع الصفحة املطلوبة يف هذا اإلطار الفارغ‪.‬‬

‫‪ o‬حتديث جداول الصفحات بوضع رقم الصفحة ورقم اإلطار الذي وضع هبا‪.‬‬

‫‪ o‬تعديل بت التصحيح إىل ‪ ، v‬وهذا يعين أن الصفحة صحيحة‪.‬‬

‫‪ ‬إعادة تنفيذ األمر الذي سبب خطأ صفحة ‪.page fault‬‬

‫شكل رقم ‪ :5-3‬خطأ صفحة [‪]3‬‬

‫ماذا حيدث إذا مل جند إطار فارغ ؟‬

‫إذا طلبنا صفحة غري موجودة ِبلذاكرة ومل جيد نظام التشغيل إطار فارغ إلحضار الصفحة املطلوبة فيه‪ ،‬ماذا‬
‫يفعل نظام التشغيل ؟‬
‫‪200‬‬
‫سيقوم بعملية استبدال (‪ ،)swap‬أي إخراج صفحة من الذاكرة (نسميها الصفحة الضحية) وإدخال‬
‫الصفحة املطلوبة مكاهنا‪.‬‬

‫هنا يظهر سؤال هام وهو أي صفحة سيخرج من الصفحات اليت ِبلذاكرة (من ستكون الصفحة الضحية) ؟‬
‫هنالك عدة خوارزميات حتدد أي صفحة سنخرج‪.‬‬

‫يستخدم نظام التشغيل أحد هذه اخلوارزميات‪ ،‬مع وضع إعتبار لألداء يف اختيار اخلوارزمية (نريد خوارزمية‬
‫خترج صفحة ال تحتاجها يف القريب العاجل وهذا يقلل عدد أخطاء الصفحات ‪.)page faults‬‬

‫‪ .3.3.0‬استبدال الصفحات ‪Page Replacement‬‬

‫نستفيد من استبدال الصفحات يف استخدام إطارات قليلة لتنفيذ عملية بصفحات كثرية‪ ،‬وهي الفكرة الرئيسية يف‬
‫الذاكرة االفرتاضية‪.‬‬

‫خطوات استبدال الصفحة‪:‬‬

‫‪ .0‬أحبث عن موقع الصفحة يف القرص‬

‫‪ .0‬أحبث عن إطار فارغ‪ ،‬إذا وجد إطار نستخدمه‪.‬‬

‫‪ .5‬إذا مل يوجد إطار فارغ‪ ،‬نستخدم خوارزمية إلختيار اإلطار الضحية ‪.victim frame‬‬

‫‪ .4‬إخراج الصفحة الضحية من اإلطار الضحية‪.‬‬

‫‪ .3‬إحضار الصفحة املطلوبة إىل اإلطار الضحية‪.‬‬

‫‪ .2‬تعديل جدول الصفحات‪.‬‬

‫‪ .5‬إعادة تنفيذ األمر الذي سبب خطأ الصفحة‪.‬‬

‫‪201‬‬
‫شكل رقم ‪ :4-3‬استبدال الصفحات [‪.]3‬‬

‫‪ .3.2‬خوارزميات استبدال الصفحات (‪)Page Replacement Algorithms‬‬


‫هنالك العديد من اخلوارزميات اليت تستخدم يف استبدال الصفحات منها‪:‬‬

‫‪ ‬إخراج الصفحة األقدم (األول أوال خترج أوال)‪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‬‬

‫ما هي عدد خطأ الصفحات (‪ )page fault‬إذا استخدمنا ‪ 5‬إطارات فارغة‪.‬‬

‫احلل‬

‫يف البداية ستكون اإلطارات الثالثة فارغة‪ ،‬سنحتاج أوال للصفحة رقم ‪ 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‬‬

‫ما هي عدد أخطاء الصفحات (‪ )page fault‬إذا استخدمنا ‪ 3‬إطارات فارغة‪.‬‬

‫احلل‬

‫يف البداية ستكون اإلطارات الثالثة فارغة‪ ،‬سنحضر الصفحات ‪ 3 ،2 ،1‬يف اإلطارات الثالث الفارغة مما يولد‬
‫‪ 3‬خطأ صفحة‪ .‬بعدها سنحتاج إىل الصفحات ‪ 1 ،2‬ومها ِبلذاكرة فنستخدمهما دون حدوث خطأ صفحة‪ .‬بعدها‬
‫سنحتاج الصفحة ‪ ،5‬وهي ليست ِبلذاكرة لذلك البد من إخراج صفحة وإدخاهلا مكاهنا‪ .‬سنخرج الصفحة اليت ال‬
‫نطلبها قريبا (لدينا اآلن ِبلذاكرة الصفحات ‪ )3 ،2،1‬فإيها سنخرج‪:‬‬

‫‪ ‬الصفحة ‪ 1‬سنطلبها بعد صفحتني من الصفحة ‪5‬ز‬

‫‪ ‬الصفحة ‪ 2‬سنطلبها بعد الصفحة ‪ 5‬مباشرة‪.‬‬

‫‪ ‬الصفحة ‪ 3‬سنطلبها بعد ‪ 6‬صفحات‪ ،‬وهي األبعد لذلك سنخرجها ونضع ‪ 5‬مكاهنا‪ ،‬اآلن لدينا ِبلذاكرة‬
‫الصفحات ‪.5 ،2،1‬‬

‫سنحتاج الصفحة ‪ 2‬وهي موجودة ِبلذاكرة‪ ،‬وبعدها سنحتاج الصفحة ‪ 1‬وهي ِبلذاكرة‪ ،‬بعدها سنحتاج الصفحة ‪6‬‬
‫اليت ال توجد ِبلذاكرة لذلك سنتبدهلا ِبلصفحة ‪ 1‬ألهنا األبعد‪ .‬وهكذا إىل أن نصل للحل التايل‪:‬‬

‫سيكون لدينا يف النهاية ‪ 9‬خطأ صفحة‪.‬‬

‫‪ .3.2.5‬اليت مل تستخدم حديثا ()‪)least recently used (LRU‬‬

‫‪204‬‬
‫إبفرتاض أن الصفحة اليت استخدمت حديثا هي اليت سنحتاجها وهي اليت ستستخدم مرة اثنية‪ ،‬أما اليت مل‬
‫تستخدم حديثا فغالبا لن تحتاجها يف القريب العاجل‪ .‬لذلك سنخرج الصفحة اليت مل تستخدم حديثا (األقدم‬
‫استخداما)‪.‬‬

‫مثال (‪)8-3‬‬

‫إذا كان لدي سلسلة طلبات الصفحات التالية‪:‬‬

‫‪1,2,3,2,1,5,2,1,6,2,5,6,3,1,3,6,1,2,4,3‬‬

‫ما هي عدد أخطاء الصفحات (‪ )page fault‬إذا استخدمنا ‪ 3‬إطارات فارغة‪.‬‬

‫احلل‬

‫يف البداية ستكون اإلطارات الثالثة فارغة‪ ،‬سنحضر الصفحات ‪ 3 ،2 ،1‬يف اإلطارات الثالث الفارغة مما يولد‬
‫‪ 3‬خطأ صفحة‪ .‬بعدها سنحتاج إىل الصفحات ‪ 1 ،2‬ومها ِبلذاكرة فنستخدمهما دون حدوث خطأ صفحة‪ .‬بعدها‬
‫سنحتاج الصفحة ‪ ،5‬وهي ليست ِبلذاكرة لذلك البد من إخراج صفحة وإدخاهلا مكاهنا‪ .‬سنخرج الصفحة األقل‬
‫استخداما (لدينا اآلن ِبلذاكرة الصفحات ‪ )3 ،2،1‬فإيها سنخرج‪:‬‬

‫‪ ‬الصفحة ‪ 1‬استخدمت آخر شئ‪.‬‬

‫‪ ‬الصفحة ‪ 2‬استخدمت قبل الصفحة ‪.1‬‬

‫‪ ‬الصفحة ‪ 3‬استخدمت قبل الصفحة ‪،2‬أي هي األول استخداما بني الصفحات الثالث اليت ِبلذاكرة‪،‬‬
‫لذلك سنخرجها ونضع ‪ 5‬مكاهنا‪ ،‬اآلن لدينا ِبلذاكرة الصفحات ‪.5 ،2،1‬‬

‫سنحتاج الصفحة ‪ 2‬وهي موجودة ِبلذاكرة‪ ،‬وبعدها سنحتاج الصفحة ‪ 1‬وهي ِبلذاكرة‪ ،‬بعدها سنحتاج الصفحة ‪6‬‬
‫وهي ليست ِبلذاكرة لذلك سنتبدهلا ِبلصفحة ‪ 5‬ألهنا األقل استخداما‪ .‬وهكذا إىل أن نصل للحل التايل‪:‬‬

‫سيكون لدينا يف النهاية ‪ 11‬خطأ صفحة‪.‬‬

‫‪ .3.2.4‬اخلوارزميات املعتمدة على العدد (‪)counting-based‬‬

‫‪205‬‬
‫تعتمد هذه اخلوارزميات على وجود عدادات حلساب عدد مرات استخدام الصفحات‪ .‬حيث يكون هنالك‬
‫عداد لكل صفحة وكلما استخدمت صفحة يزيد عدادها بواحد‪ .‬منها‪:‬‬

‫‪ .3.2.4.0‬خوارزمية الصفحة األقل استخداما ()‪)least frequently used (LFU‬‬

‫إبفرتاض أن الصفحات االكثر استخدامها (قيمة عداداها أكرب) هي النشطة وهي اليت ستستخدم كثريا‪،‬‬
‫فنقوم إبخراج الصفحة اليت هلا أقل رقم يف عدادها‪ ،‬أي عدد مرات استخدامها أقل من بقية الصفحات‪.‬‬

‫لكن هذه اخلوارزمية قد يكون هبا مشكلة إذا كانت الصفحة ذات العداد األكرب لن تعمل مرة أخرى‪ ،‬فتظل‬
‫يف الذاكرة دون فائدة منها‪ .‬وميكن حل مثل هذه املشكلة بنقص عدادها بفرتات منتظمة‪.‬‬

‫‪ .3.2.4.0‬خوارزمية الصفحة األكثر استخداما ()‪)most frequently use (MFU‬‬

‫هنا نفرتض أن الصفحات اليت هلا قيمة عداد أقل هي اليت وصلت حديثا وهي اليت حتتاج إىل وقت اكثر يف‬
‫الذاكرة‪ ،‬لذلك سنخرج الصفحة اليت هلا رقم أكرب يف عدادها (اليت استخدمت كثريا)‪.‬‬

‫تعترب هذه اخلوارزميات غري شائعة ألن تطبيقها مكلف‪.‬‬

‫‪ .3.2.3‬خوارزمية الفرصة الثانية (‪)Second chance‬‬

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

‫شكل رقم ‪ :3-3‬خوارزمية الفرصة الثانية [‪.]03‬‬

‫تنبيه‪:‬‬

‫‪206‬‬
‫نتعرف على الصفحة هل استخدمت أم ال إبختبار خانة االستخدام اليت توجد يف كل صفحة فإذا كانت‬
‫هذه اخلانة حتتوى على صفر (‪ )clear‬فهذا يعين أنه مل تستخدم حاليا‪ ،‬أما إذا كانت حتتوي قيمة (‪ )set‬فيعين هذا‬
‫أنه مت استخدامها حديثا‪ .‬عند وجود خانة االستخدام حتتوي قيمة سنقوم تفريغها من القيمة (‪ )clearit‬قبل أن‬
‫نرجعها إىل هناية الصف‪.‬‬

‫‪ .3.2.2‬خوارزمية الساعة (‪)Clock‬‬

‫أشبه يف طريقة عملها خبوارزمية الفرصة الثانية لكنها أكثر كفاءة يف التطبيق‪ .‬سيتم إختبار الصفحة اليت يشري‬
‫إليها مؤشر الساعة هل استخدمت حديثا أم ال‪ ،‬فإذا استخدمت حديثا تحول مؤشر الساعة ليشري إىل الصفحة اليت‬
‫تليها وخنتربها هل استخدمت حديثا أم ال‪ ،‬فإذا استخدمت ننقل املؤشر للصفحة اليت تليها‪ ،‬وهكذا حىت نعثري على‬
‫صفحة مل تستخدم فنخرجها‪.‬‬

‫يف الشكل التايل سنخترب الصفحة ‪ C‬فإذا استخدمت سيتحول املؤشر إىل الصفحة ‪ D‬وخنتربها هل‬
‫استخدمت أم ال‪ ،‬وهكذا حىت نعثر على صفحة مل تستخدم فنستبدهلا ويتحول املؤشر إىل الصفحة اليت تليها‪.‬‬

‫شكل رقم ‪ :2-3‬خوارزمية الساعة [‪.]03‬‬

‫‪ .3.2.5‬برانمج حماكاة خوارزميات إستبدال الصفحات‬

‫ميكنك كتابة برانمج أبي لغة (‪ C/C++‬أو جافا) مثال‪ ،‬حملكاة عمل خوارزميات استبدال الصفحات‪،‬‬
‫حيث يطلب الربانمج من املستخدم إدخال نوع اخلوارزمية وعدد اإلطارات الفارغة وسلسلة الصفحات فيحسب‬
‫خطوات االستبدال وعدد أخطاء الصفحات ‪ .‬مثال‪:‬‬

‫‪Choose page replacement algorithm:‬‬


‫‪1. FIFO‬‬
‫‪2. Optimal‬‬

‫‪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‬خطأ صفحة‪.‬‬

‫‪ .3.8‬متارين غري حملولة‬


‫‪ .0‬عرف الذاكرة االفرتاضية ؟‬

‫‪ .5‬تكون الربامج اليت تستخدم الذاكرة االفرتاضية بطيئة نوع ما‪ ،‬ملاذا ؟‬

‫‪ .4‬ما هي املبادلة (‪ )swapping‬؟‬

‫‪ .3‬تنقسم املبادلة إىل نوعني ‪ ،‬ما مها ؟‬

‫‪ .2‬اذكر ثالث من خوارزميات تبديل الصفحات ؟‬

‫‪ .5‬إذا كان لدي سلسلة طلبات الصفحات التالية‪:‬‬

‫‪1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5‬‬

‫‪ ‬أحسب عدد أخطاء الصفحات (‪ )page fault‬إذا استخدمنا خوارزمية ‪ FIFO‬لعدد‪:‬‬

‫‪ o‬إطار واحد فارغ‪.‬‬

‫‪ o‬إطارين فارغني ‪.‬‬

‫‪ o‬ثالث إطارات فارغة‪.‬‬

‫‪ o‬أربع إطارات فارغة‪.‬‬

‫‪ o‬مخسة إطارات فارغة‪.‬‬

‫‪ o‬ستة إطارات فارغة‪.‬‬

‫‪211‬‬
‫‪ o‬سبعة إطارات فارغة‪.‬‬

‫‪ ‬كم ستتوقع عدد أخطاء الصفحات لثمانية إطارات فارغة ؟‬

‫‪ ‬ما هي العالقة اليت ميكن استنتاجها بني عدد اإلطارات الفارغة وعدد خطأ الصفحات ؟‬

‫‪ .8‬أحسب عدد خطأ الصفحات للسلسلة التالية‪:‬‬

‫‪7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1‬‬

‫إذا كان لدينا ثالث إطارات فارغة‪ِ ،‬بستخدام‪:‬‬

‫‪ o‬خوارزمية ‪ FIFO‬؟‬

‫‪ o‬اخلوارزمية املثلى (‪ )optimal‬؟‬

‫‪ o‬خوارزمية ‪ LRU‬؟‬

‫‪ o‬أي خوارزمية هي األفضل (أقل عدد أخطاء صفحات) ؟ وملاذا ؟‬

‫‪ .3‬أختار اإلجابة الصحيحة (قد يكون لدينا أكثر من إجابة صحيحة)‬

‫‪ ‬إذا كان لدينا السلسلة التالية من الصفحات ‪:‬‬

‫‪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‬ال شي مما ذكر صحيح والعدد هو ____________‬

‫تبديل العملية خارج الذاكرة يسمى ‪:‬‬

‫‪SWAP IN‬‬ ‫‪‬‬


‫‪SWAP OUT‬‬ ‫‪‬‬

‫‪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‬احلصول على إطار فارغ‪.‬‬

‫‪ o‬تبديل الصفحة املطلوبة يف الفرمي‪.‬‬

‫‪ o‬حتديث اجلداول‪.‬‬

‫‪ o‬التأكد من أن ليست الصفحة ليست صحيحة‪.‬‬

‫‪ o‬التأكد من أن الصفحة ليست ِبلذاكرة‪.‬‬

‫‪ o‬تعديل بت التصحيح إىل ‪.v‬‬

‫‪ o‬إعادة تنفيذ األمر الذي سبب ال ‪page fault‬‬

‫‪213‬‬
‫الباب العاشر‪ :‬مدير األجهزة‬

‫‪214‬‬
‫الباب العاشر‬

‫مدير األجهزة (‪)Devices Manager‬‬

‫‪ .02.0‬مقدمة‬
‫معظم أجهزة اليت ترتبط ِبحلاسب هي بغرض إدخال بياانت لوحدة املعاجلة (اليت تتكون من الذاكرة واملعاجل)‬
‫أو إلظهار نتائج من هذه الوحدة‪ .‬التعامل مع هذه األجهزة مباشرة يعترب عملية معقدة وصعبة وتتطلب إملام بتفاصيل‬
‫عمل اجلهاز وكيف يتم برجمته (بلغة اآللة) لينفذ عمل ما‪ .‬احلمد هلل على نعمة نظام التشغيل‪ ،‬فقد أغناان عن معرفة‬
‫هذه التفاصيل الدقيقة وتعلم لغة اآللة وبرجمة كل جهاز على حدة‪ .‬فقد قام هو بذلك نيابة عنا وتوىل التعامل مع هذه‬
‫التفاصيل‪ .‬فهنالك جزء بنظام التشغيل يسمى مدير األجهزة قد صمم من أجل التحكم يف األجهزة وإدارهتا‪ .‬فهو يرسل‬
‫األوامر لألجهزة‪ ،‬يتلقى معلومات منها‪ ،‬يكتشف أخطاءها ويعاجلها‪.‬‬

‫خيفي نظام التشغيل تفاصيل أجهزة الدخل واخلرج ويوفر واجهة موحدة للتعامل معها‪ ،‬يتم ذلك عرب برجميات‬
‫تسمى برجميات الدخل واخلرج ‪.‬‬

‫‪ .02.0‬أجهزة الدخل واخلرج‬


‫ختتلف األجهزة يف مهامها وسعة ختزينها وسرعاهتا‪ ،‬وتقاس سرعة اجلهاز بكمية البياانت اليت ميكنه التعامل‬
‫معها يف فرتة زمنية معينة‪ .‬فمثال لوحة املفاتيح تقاس سرعتها بكمية البايتات اليت يتعامل معها يف الثانية‪.‬‬

‫نالحظ أننا اآلن نتحدث عن مقاسات ِبلثواين‪ ،‬بينما كان حديثا يف املعاجل والذاكرة عن‬
‫مقاسات ِبلنانواثنية‪.‬‬

‫نظام التشغيل مسئول من التعامل مع العديد من األجهزة الطرفية (‪ )peripheral devices‬منها األقراص وفيها‬
‫لوحة املفاتيح ‪ ،‬املاوس‪ ،‬الشاشة ‪ ،‬الطابعات ‪ ،‬كرت الشبكة ‪ ،‬املودم ‪ ،‬موانئ الدخل واخلرج‪.‬‬

‫ميكن أن نطلق كلمة جهاز (‪ )device‬على أي قطعة إلكرتونية أو إلكرتوميكانيكية من املكوانت املادية‬
‫تساهم يف إدخال أو إخراج معلومة للحاسب‪.‬‬

‫ميكن تقسيم األجهزة إىل نوعني‪:‬‬

‫‪ ‬أجهزة تعمل بنظام الكتل (‪.)block‬‬

‫‪215‬‬
‫‪ ‬أجهزة تعمل بنظام احلروف (‪.)character‬‬

‫النوع األول يرسل املعلومات يف شكل كتل ذات حجم اثبت ولكل كتلة عنوان‪ ،‬مثال هلذا النوع القرص الصلب‪.‬‬
‫النوع اآلخر يرسل املعلومات يف شكل سلسلة من احلروف‪ ،‬ليس هلا عنوان وال جنري عليها عمليات حبث‪ ،‬مثل‬
‫الطابعة‪ ،‬كرت الشبكة‪ ،‬ولوحة املفاتيح‪.‬‬

‫هنالك بعض األجهزة ال تنتمي إىل أي نوع من النوعني أعاله مثل الساعة‪ ،‬اليت فقط تقوم إبنشاء املقاطعات‬
‫(‪.)interrupts‬‬

‫يقوم مدير األجهزة بنظام التشغيل ِبلتعامل مع هذه األجهزة خمفياً عنا تفاصيلها املزعجة وموفرا لنا طريقة سهلة‬
‫للتعامل معها‪.‬‬

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

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

‫‪ .02.5‬املتحكم (‪)controller‬‬
‫يتكون كل جهاز من شقني‪:‬‬

‫‪ .0‬املتحكم (‪ )controller‬أو احملول (‪.)adapter‬‬

‫‪ .0‬اجلهاز نفسه‪.‬‬

‫شكل رقم (‪ :)0-02‬املتحكم بني اجلهاز واحلاسب‪.‬‬


‫‪216‬‬
‫املتحكم يعترب وسيط بني احلاسب واجلهاز‪ ،‬فهو الذي يعرف التفاصيل الدقيقة لطريقة عمل اجلهاز وهو‬
‫الذي يتعامل مع اجلهاز مباشرة‪ .‬أما احلاسب فيتعامل اجلهاز بصورة غري مباشرة وذلك عرب املتحكم‪.‬‬

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

‫القيم اليت يضعها مدير األجهزة يف مسجالت التحكم ترسل أوامره للجهاز واليت قد تكون‪:‬‬

‫‪ ‬إرسال أو استالم بياانت‪.‬‬

‫‪ ‬فتح أو غلق اجلهاز (‪.)On or off‬‬

‫‪ ‬تنفيذ أي مهمة أخرى‪.‬‬

‫ِبإلضافة إىل هذه املسجالت‪ ،‬يوجد لدى بعض األجهزة خازن بياانت (‪ ،)buffer‬يستخدمه مدير األجهزة‬
‫للقراءة أو الكتابة من اجلهاز‪.‬‬

‫مثال (‪)0-02‬‬

‫يوجد خازن يف كرت الشاشة يسمى ذاكرة الفيديو (‪ ،)video ram‬لعرض أي معلومات على الشاشة‪،‬‬
‫يقوم مدير األجهزة بكتابة ما يريد عرضه يف هذه الذاكرة‪ ،‬ويضع يف مسجالت التحكم أمر إظهار حمتوي ذاكرة الفيديو‬
‫على الشاشة‪.‬‬

‫‪ .02.4‬الوصول املباشر للذاكرة ()‪)Direct Memory Access (DMA‬‬


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

‫يف احلواسيب القدمية واليت ال يوجد هبا ‪ DMA‬يكون املعاجل يف حالة متابعة لعمليات الدخل‬
‫واخلرج‪ ،‬حيث يتابع عملية نقل البياانت من اجلهاز إىل الذاكرة‪ .‬يف هذه األثناء لن يستطيع املعاجل‬
‫تنفيذ أي أوامر أخرى مما يقلل أداءه‪ .‬فعمليات الدخل واخلرج أتخذ الكثري من زمن املعاجل‪.‬‬

‫‪217‬‬
‫يعمل ‪ DMA‬كمدير تنفيذي للمعاجل‪ ،‬حيث يقوم بعمليات الدخل واخلرج نيابة عن املعاجل‪ .‬فإذا أراد املعاجل‬
‫معلومات من جهاز يقوم ِبآليت‪:‬‬

‫‪ ‬يهيئ ‪ DMA‬لعمليات نقل البياانت (حجم البياانت املراد نقلها‪ ،‬اجلهاز املنقولة منه البياانت‪ ،‬املكان الذي‬
‫سيتم ختزينها فيه ِبلذاكرة (عنوان الذاكرة))‪.‬‬

‫‪ ‬مث يذهب املعاجل ألداء أعمال أخرى (مستفيدا من وقته)‪.‬‬

‫‪ ‬يف هذه األثناء يقوم ‪ DMA‬بعمليات نقل البياانت‪.‬‬

‫‪ ‬عند ما يفرغ ‪ DMA‬من عمله يرسل إشارة مقاطعة (‪ )interrupt‬للمعاجل خيربه فيها أبن عملية نقل‬
‫البياانت قد متت‪.‬‬

‫شكل رقم (‪ :)0-02‬كيف يعمل ‪.DMA‬‬

‫‪ .02.4.0‬تشغيل أو تعطيل ‪ DMA‬يف ويندوز ‪XP‬‬

‫ميكنك تعطيل أو تفعيل ‪ DMA‬جبهازك وذلك بفتح مدير األجهزة (‪ ،)device manager‬مث النقر‬
‫على ‪ IDE ATA/ATAPI controllers‬لتتوسع فتظهر إيقوانت فرعية هي لألقراص الصلبة وسواقات‬
‫االسطواانت‪ .‬أنقر على أي إيقونة أمامها كلمة ‪ channel‬بيمني املاوس مث اختار خصائص (‪،)properties‬‬
‫فتظهر شاشة‪ ،‬أختار منها التبويب ‪ ،Advanced settings‬مث أختار من أمام ‪ Transfer Mode‬للجهاز‬
‫الذي تريد‪ ،‬حالة منط النقل‪ ،‬الشكل (‪ .)-5-02‬تفعيل ‪ DMA‬جيعل القرص الصلب واالسطواانت الضوئية من‬
‫نقل البياانت للذاكرة مباشرة (دون مرورها ِبملعاجل)‪ ،‬مما يقلل اجلهد على املعاجل‪.‬‬
‫‪218‬‬
‫شكل رقم (‪ :)5-02‬تفعيل ‪ DMA‬أو تعطيلها‪.‬‬

‫‪ .02.3‬أهداف مدير األجهزة‬


‫‪ .02.3.0‬الكفاءة‬

‫من املعلوم أن األجهزة تعترب بطيئة إذا ما قورنت بسرعة املعاجل وسرعة الذاكرة‪ .‬وِبلتايل فإن كفاءة احلاسب‬
‫ككل وسرعته مرتبطة بسرعة أبطأ جهاز فيه‪ ،‬فمثال قد ينقل القرص البياانت بسرعة ‪ 0‬ميغاِبيت يف الثانية بينما تنقلها‬
‫لوحة املفاتيح بسرعة ‪ِ 5‬بيت يف الثانية‪ .‬مهمة مدير األجهزة هنا أن حيسن الكفاءة وذلك بتقليل زمن انتظار املعاجل‬
‫ألجهزة الدخل واخلرج بقدر املستطاع‪ .‬اخلازن املوجود ِبملتحكم وجهاز ‪ DMA‬مت إضافتهم للمسامهة يف هذا‬
‫التحسني‪.‬‬

‫‪ .02.3.0‬استقاللية األجهزة‬

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

‫‪ .02.3.5‬املشاركة‬

‫‪219‬‬
‫الكثري من األجهزة تحتاج أن تكون مشرتكة بني املستخدمني والربامج‪ ،‬فعلى نظام التشغيل أن يوفر هذه‬
‫األجهزة بني املستخدمني بصورة عادلة‪ ،‬حبيث ال حيتكر أحد الربامج اجلهاز املشرتك دون بقية الربامج‪.‬‬

‫‪ .02.3.4‬احلماية‬

‫كل األجهزة جيب محايتها من االستخدام غري الرشيد‪ ،‬فاألجهزة املخصصة جيب محايتها من استخدامها‬
‫أبكثر من عملية يف نفس الوقت مثال‪.‬‬

‫‪ .02.3.3‬معاجلة األخطاء‬

‫إذا حدث خطأ يف جهاز‪ ،‬كأن تحاول الكتابة على جهاز دخل أو القراءة من جهاز خرج‪ ،‬فعلى مدير‬
‫األجهزة اكتشاف اخلطأ ومعاجلته إذا كان ِبإلمكان ذلك أو إرسال تقرير للربانمج الذي سبب اخلطأ‪.‬‬

‫‪ .02.2‬قواعد برجميات الدخل واخلرج (‪)Principles of I/O Software‬‬


‫القواعد اليت نراعيها يف تصميم برجميات الدخل واخلرج تسعى لتحقيق أهداف مدير األجهزة ‪ ،‬وهي كالتايل‪:‬‬

‫‪ ‬إستقاللية االجهزة (‪ ،)device independence‬كتابة برامج تتعامل مع األجهزة دون معرفة تفاصيل‬
‫األجهزة مسبقا‪ .‬مثال ميكن استدعاء نفس نداء النظام لقراءة ملف من القرص الصلب أو القرص املرن أو‬
‫األسطوانة الضوئية‪.‬‬

‫‪ ‬توحيد التسمية (‪ :)uniform naming‬اسم امللف أو اجلهاز ال يعتمد على خصائص القرص‪ .‬مثال يف‬
‫ينكس كل شئ يتعرب ملف‪.‬‬

‫‪ ‬معاجلة األخطاء (‪ :)error handling‬معاجلة األخطاء يف أدىن مستوى هلا‪ .‬مثال إذا مت إكتشاف اخلطأ‬
‫فيحاول املتحكم معاجلة اخلطأ‪ ،‬وإال فعلى التعريف (‪ )device driver‬حماولة تصحيح اخلطأ‪ ،‬وميرر اخلطأ‬
‫للطبقات األعلى إذا فشل التعريف يف معاجل اخلطأ‪.‬‬

‫‪ ‬النقل املتزامن والغري متزامن (‪ :)Synchronous vs. asynchronous transfers‬معظم عمليات‬


‫الدخل واخلرج غري متزامنة‪ ،‬حيث يتم برجمة ‪ DMA‬ليقوم ِبلعمل مث القيام أبعمال اخرى وعندما يكتمل‬
‫العمل ترسل مقاطعة‪ .‬برامج املستخدم عادة ال حتتاج أن تري أو تتعامل مع املقاطعات‪ .‬وقد توفر التعريفات‬
‫(‪ )device driver‬نداءات نظام تقوم ِبحلجز (‪ )block‬عند اإلنتظار وفك احلجز (‪)unblock‬‬
‫عند وصول املقاطعات‪.‬‬

‫‪220‬‬
‫‪ ‬التخزين املؤقت (‪ :)buffering‬البياانت اليت ترد من اجلهاز ال ختزن يف وجهتها النهائية يف البداية وإمنا‬
‫جيب فحصها قبل إرساهلا إىل وجهتها النهائية‪ ،‬لذلك ختزن مؤقتا يف خازن قد يوجد يف متحكم اجلهاز‪.‬‬

‫‪ ‬األجهزة املشرتكة (‪ )shared devices‬واملخصصة (‪ :)dedicated‬هنالك بعض األجهزة اليت تكون‬


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

‫‪ .02.5‬طرق الدخل واخلرج‬


‫يتم الدخل واخلرج أبساليب خمتلفة منها‪:‬‬

‫‪ o‬الدخل واخلرج املربمج‪.‬‬

‫‪ o‬الدخل واخلرج ِبملقاطعات‪.‬‬

‫‪ o‬الدخل واخلرج ِبستخدام ‪.DMA‬‬

‫‪ .02.5.0‬الدخل واخلرج املربمج (‪)Programmed I/O‬‬

‫هنا يتم التعامل مع اجلهاز ِبخلطوات التالية‪:‬‬

‫‪ .0‬اختبار اجلهاز هل هو جاهز أم ال‬

‫‪ .0‬حماولة استقبال‪/‬إرسال جزء من البياانت من‪/‬إىل اجلهاز‬

‫‪ .5‬مت إرسال جزء من البياانت‪.‬‬

‫‪ .4‬إذا مل يكتمل اإلرسال‪/‬اإلستقبال ‪ ،‬إذهب للخطوة ‪.0‬‬

‫هنا مثال إذا أردان طباعة احلروف ‪ OSMAN‬يف الطابعة‪ ،‬تقوم العملية ِبلتايل‪:‬‬

‫‪ ‬طلب االستحواذ على الطابعة‪.‬‬

‫‪ ‬إذا كانت الطابعة غري متاحة ننتظر‬

‫‪ ‬الطابعة متاحة أرسل احلرف األول إىل ذاكرة الطابعة‬

‫‪ ‬إنتظار أن تنهي الطابعة من طباعة هذا احلرف‪.‬‬

‫‪221‬‬
‫‪ ‬اختبار الطابعة مرة أخرى وإرسال احلرف الثاين وهكذا‪.‬‬

‫هنا سيكون املعاجل متابعا إلرسال جيمع احلروف وينتظر طباعتها واحد تلو اآلخرن مما جيعله مشغوال حىت يتم‬
‫طباعة السلسلة‪.‬‬

‫خالصة القول أنه لن يستطيع املعاجل القيام بعمل آخر قبل أن ينتهي من هذا العمل‪.‬‬

‫‪ .02.5.0‬الدخل واخلرج ِبملقاطعات (‪)Interrupt-Driven I/O‬‬

‫يف الطريقة أعاله ينتظر املعاجل الطابعة حىت تفرغ من طباعة احلرف األول مث ترسل له احلرف الثاين وهكذا‪.‬‬

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

‫‪ .02.5.5‬الدخل واخلرج بواسطة ‪)I/O Using DMA( DMA‬‬

‫يف الدخل واخلرج ِبملقاطعات فإن املقاطعة حتدث عند إكتمال طباعة كل حرف‪ ،‬وهذا يتسبب يف هدر زمن‬
‫املعاجل‪ .‬عدد املقاطعات ستكون بعدد احلروف املراد طباعتها‪ .‬استخدام ‪ DMA‬يعين أن متحكم ‪ DMA‬يتابع‬
‫طباعة ا حلروف يف الطابعة واحد تلو اآلخر دون إزعاج املعاجل وهذا يقلل عدد املقاطعات من مقاطعة لكل حرف إىل‬
‫مقاطعة واحدة عند طباعة كل احلروف‪.‬‬

‫‪ .02.8‬طبقات برجميات الدخل واخلرج (‪)I/O software layers‬‬


‫تتكون برجميات الدخل واخلرج من طبقات‪ ،‬الطبقات الدنيا هتتم خبصوصيات أجهزة الدخل واخلرج بينما توفر‬
‫الطبقات العليا واجهة موحدة للمستخدم‪ .‬هنالك أربع طبقات يف برجميات الدخل واخلرج‪ ،‬أنظر الشكل (‪،)4-02‬‬
‫حيث تقوم كل طبقة بوظيفة‪.‬‬

‫شكل رقم (‪ :)4-02‬طبقات برجميات الدخل واخلرج [‪.]03‬‬

‫‪222‬‬
‫‪ .02.8.0‬معاجلة املقاطعات‬

‫من األفضل إخفاء املقاطعات‪ ،‬وأفضل طريقة لذلك هي جعل برانمج التعريف (‪ )driver‬الذي طلب‬
‫عملية الدخل أو اخلرج التوقف ريثما ينتهي الدخل أو اخلرج وحدوث املقاطعة‪ .‬بعدها يقوم إجراء املقاطعة مبهمته‪ ،‬مث‬
‫يواصل برانمج التعريف‪.‬‬

‫‪ .02.8.0‬التعريفات (‪)device drivers‬‬

‫عادة تكتب الشركة املصنعة للجهاز التعريفات اخلاصة هبذا اجلهاز‪ .‬وعند شرائك ألي جهاز جتد أسطوانة‬
‫تعريف مرفقة معه‪ .‬نقوم عادة بتثبيت التعريف يف نظام التشغيل مما جيعله جزءا من نظام التشغيل‪ .‬وِبلتايل يستطيع نظام‬
‫التشغيل من التعامل مع اجلهاز‪ .‬تعمل هذه التعريفات إلدارة اجلهاز عرب متحكم اجلهاز‪ .‬ويتعامل نظام التشغيل مع‬
‫اجلهاز عرب تعريف اجلهاز‪ ،‬الشكل (‪.)3-02‬‬

‫شكل رقم (‪ :)3-02‬األجهزة والتعريفات وربطها من نظام التشغيل [‪.]03‬‬

‫‪ .02.8.5‬بقية نظام التشغيل املستقلة عن األجهزة‬

‫الربامج املستقلة عن األجهزة يف نظام التشغيل تشمل‪:‬‬

‫‪ o‬الواجهة مع التعريفات‪.‬‬

‫‪ o‬اخلازن املؤقت ‪.buffer‬‬

‫‪ o‬اإلعالن عن األخطاء‪.‬‬
‫‪223‬‬
‫‪ o‬حجز وحترير األجهزة املخصصة‪.‬‬

‫‪ o‬تقدمي حجم كتل مستقل عن األجهزة‪.‬‬

‫‪ .02.8.5.0‬الواجهة املوحدة مع التعريفات‬

‫على نظام التشغيل توفري واجهة متكن التعريفات من اإلندماج مع نظام التشغيل ومتكن نظام التشغيل من‬
‫استخدام التعريف‪ ،‬وعلى مصممي التعريفات معرفة كيف يكتبوا تعريفاهتم حبيث تشبك مع نظام التشغيل عرب هذه‬
‫الواجهة‪.‬‬

‫شكل رقم (‪ )b( :)2-02‬الواجهة املوحدة لربط التعريفات مع نظام التشغيل [‪.]03‬‬

‫(‪ )a‬واجهات خمتلفة لربط التعريفات مع نظام التشغيل‪.‬‬

‫من األفضل أن تكون الواجهة موحدة لكل األجهزة‪ ،‬فطريقة ربط تعريف الطابعة تكون شبيهة بطريقة تعريف‬
‫سواقة القرص‪ ،‬تشبه طريقة تعريف املودم‪ ،‬تشبه طريقة تعريف األجهزة األخرى‪ ،‬أنظر الشكل (‪.)2-02‬‬

‫‪ .02.8.5.0‬اخلازن املؤقت‬

‫األجهزة بنوعيها احلرفية والكتلية حتتاج خازن مؤقت‪ ،‬حيث توضع فيه البياانت الواردة من اجلهاز (يف حالة‬
‫جهاز دخل)ن أو الداخلة للجهاز (إذا كان جهاز خرج) ومن مث إرساهلا للجهة اليت تطلبها‪ .‬وجود اخلازن حيسن األداء‬
‫حبيث جيعل التعامل مع االجهزة أسرع‪.‬‬

‫قد يكون هنالك خازن واحد يف مساحة املستخدم أو خازن واحد يف مساحة النواة أو خازنني واحد يف‬
‫مساحة املستخدم وآخر يف مساحة النواة‪ .‬واألخري هو األفضل‪.‬‬

‫‪ .02.8.5.5‬اإلعالن عن األخطاء‬

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

‫بعض األخطاء اجلسيمة جتعل نظام التشغيل إرسال تقرير ِبخلطأ مث التوقف إجبارَي‪.‬‬

‫‪ .02.8.5.4‬حجز وحترير األجهزة املخصصة (غري قابلة للمشاركة)‬

‫هنا تقوم عملية واحدة فقط ِبستخدام اجلهاز لذلك على نظام التشغيل حجزه يف حالة ان مستخدم وحتريره‬
‫عندما تفرغ العملية منه لتتمكن عمليات أخرى من استخدامه‪.‬‬

‫‪ 02.8.5.3‬أحجام كتل موحدة‬

‫قد ختتلف احجام الكتل بني األجهزة‪ ،‬مثال قد تكون هنالك أحجام قطاعات خمتلفة بني األقراص املختلفة‪.‬‬
‫هنا على نظام التشغيل إخفاء اإلختالف وتقدمي حجم كتلة موحد‪.‬‬

‫‪ .02.8.4‬برجميات الدخل واخلرج يف مستوى املستخدم‬

‫معظم برجميات الدخل واخلرج موجودة ضمن نظام التشغيل‪ ،‬وتوجد مكتبات تسمح للمستخدم التعامل مع‬
‫هذه الربجميات‪ .‬فيستطيع املستخدم استدعاء نداء النظام املناسب من املكتبة للتعامل مع اجلهاز الذي يريد‪.‬‬

‫‪ .02.3‬القرص الصلب‬
‫سندرس القرص الصلب دراسة مستفيضة كدراسة حالة ألجهزة الدخل واخلرج‪ ،‬ذلك النه من أهم أجهزة الدخل‬
‫واخلرج وال خيلو جهاز حاسب منه‪ ،‬وهو ِبإلضافة على ذلك يعترب جهاز دخل وخرج يف نفس الوقت‪.‬‬

‫يتكون القرص الصلب مثله مثل أي جهاز من شقني ‪:‬‬

‫‪ ‬شق املتحكم وهو كرت يوجد ِبللوحة األم غالبا ويتصل بشريط (انقل بياانت) مع القرص الصلب‪.‬‬

‫‪ ‬شق اجلهاز وهو القرص الصلب‪ ،‬الشكل (‪ ،)5-02‬وهو يتكون من جزء ميكانيكي وجزء إلكرتوين‪.‬‬

‫‪225‬‬
‫‪‬‬

‫شكل (‪ :)5-02‬القرص الصلب‪.‬‬

‫خيزن القرص الصلب البياانت يف شكل مغناطيسي‪.‬‬

‫‪ .02.3.0‬مكوانت اجلزء امليكانيكي‬

‫يتكون من أسطواانت مركبة على حمور مشرتك‪ ،‬وكل اسطوانة مكونة من سطحني‪ ،‬لكل سطح رأس قراءة‬
‫وكتابة‪ ،‬ترتبط رؤؤس القراءة والكتابة مجيعها بذراع واحد حبيث عندما يتحرك الذراع حيرك معه كل الرؤؤس‪ ،‬وحركة‬
‫الذراع تكون أفقية مما جيعل رؤؤس القراءة والكتابة متر عرب مسارات األسطح مع بعضها وتصل لنفس املسارات يف كل‬
‫األسطح يف نفس الوقت‪ ،‬شكل (‪.)8-02‬‬

‫‪ .02.3.0‬طريقة عمل القرص الصلب‬

‫لقراءة أو كتابة معلومة يتحرك الذارع الذي ترتبط به رؤؤس القراءة والكتابة ليصل املسار املطلوب‪ ،‬هذه‬
‫العملية تستغرق من ‪ 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‬تكون‬
‫املسارات الثمانية اخلارجية أسطوانة‪ .‬لذلك من األفضل ختزين البياانت يف شكل اسطواانت ذلك ألن رؤؤس القراءة‬
‫والكتابة تكون معا يف مكان واحد وهذا يوفر وقت فال تحتاج أن تحرك رؤؤس القراءة والكتابة كذا مرة‪.‬‬

‫شكل رقم (‪ :)02-02‬املسارات املتشاهبة يف كل األسطح متثل أسطواانت‪.‬‬

‫مثال (‪)0-02‬‬

‫إذا كان لدينا مخسة أقراص واملسارات يف كل سطح مرقمة من صفر إىل ‪ 202‬فإن ‪:‬‬

‫‪ ‬عدد املسارات = ‪203‬‬

‫‪ ‬عدد األسطح = ‪10‬‬

‫‪ ‬عدد رؤوس الكتابة والقراءة = ‪10‬‬

‫‪ ‬عدد األسطواانت = ‪203‬‬

‫‪228‬‬
‫مثال (‪)0-02‬‬

‫يف املثال (‪ )0-02‬إذا كان سعة املسار الواحد هي ‪ 40000‬حرف أوجد‪:‬‬

‫‪ ‬سعة الوجه (السطح) الواحد ‪.‬‬

‫‪ ‬سعة االسطوانة الواحدة‪.‬‬

‫‪ ‬السعة الكلية للقرص‪.‬‬

‫‪ ‬عدد املمرات الالزمة لتخزين حمتوَيت ملف مكون من ‪ 800000‬حرف‪.‬‬

‫‪ ‬عدد االسطواانت الالزمة لتخزين حمتوَيت هذا امللف‪.‬‬

‫احلل‬

‫‪ ‬سعة الوجه الواحد = عدد املسارات × سعة املسار‬

‫‪203 x 40000 = 8120000‬‬

‫‪ ‬سعة االسطوانة = عدد مسارات االسطوانة × سعة املسار = ‪400000‬‬

‫‪ ‬السعة الكلية = سعة االسطوانة × عدد االسطواانت‬

‫‪203 x 400000 = 81200000‬‬

‫‪ ‬عدد املسارات ‪:‬‬

‫‪800000 / 40000 = 20‬‬

‫‪ ‬عدد االسطواانت ‪20/10 =10 :‬‬

‫‪ .02.02‬جدولة القرص‬
‫هنا يريد نظام التشغيل الوصول السريع للبياانت يف القرص الصلب لتحقيق الكفاءة املطلوبة‪ .‬وعملية الوصول‬
‫للبياانت يف القرص الصلب تعتمد على عوامل كثرية مثل الزمن املستغرق لقراءة أو كتابة كتلة يف القرص الصلب‪ ،‬وهذا‬
‫أيضا يعتمد على ثالث عوامل هي‪:‬‬

‫‪ ‬زمن البحث (‪.)seek time‬‬

‫‪229‬‬
‫‪ ‬زمن دوران االسطوانة لتصل الكتلة حتت رؤؤس القراءة والكتابة (‪.)rotational latency‬‬

‫‪ ‬زمن نقل البياانت (‪.)transfer rate‬‬

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

‫طريقة اختيار الطلب التايل من صف الطلبات يعتمد على اخلوارزمية اليت يستخدمها نظام التشغيل‪ .‬من‬
‫اخلوارزميات املستخدمة ما يلي‪:‬‬

‫‪ ‬األقدم أوال (‪.)First come first served‬‬

‫‪ ‬خوارزمية الزمن األقل أوال (‪.)shortest seek time first‬‬

‫‪ ‬خوارزمية املصعد (‪ )elevator‬أو املسح ‪.Scan‬‬

‫‪ ‬خوارزمية ‪LOOK‬‬

‫‪ ‬خوارزمية املسح الدائري (‪.)C-Scan‬‬

‫‪ ‬خوارزمية ‪C-LOOK‬‬

‫وأفضل طريقة لتوضيح طريقة عمل هذه اخلوارزميات هو عرب املثال التايل‪.‬‬

‫مثال (‪)5-02‬‬

‫إذا كان لدى صف من الطلبات (مرتبة حسب زمن وصوهلا)ن تريد التعامل مع بياانت ِبالسطواانت التالية‬
‫ِبلقرص الصلب‪:‬‬

‫‪98, 183, 122, 37, 14, 124, 65, 67‬‬

‫‪230‬‬
‫وإذا كان رأس القراءة والكتابة اآلن يف األسطوانة رقم ‪ .53‬وضح كيف سيقوم نظام التشغيل خبدمة هذه‬
‫الطلبات جبميع أنواع اخلوارزميات أعاله‪.‬‬

‫احلل‬

‫يف خوارزمية ‪ FCFS‬سيتحرك رأس القراءة والكتابة لتلبية الطلبات (األقدم أوال) حسب الرتتيب التايل‬
‫(نفس الرتتيب املوجود يف املسألة)‪:‬‬

‫‪53, 98, 183, 122, 37, 14, 124, 65, 67‬‬

‫شكل رقم ‪.]3[ 00-02‬‬

‫يف خوارزمية ‪ SSTF‬سيتحرك رأس القراءة والكتابة لتلبية الطلبات حسب قرهبا من رأس القراءة والكتابة‬
‫(األقرب أوال) ‪ ،‬حيث نقيس املسافة بني مكان رأس القراءة والكتابة وبني الطلبات‪ ،‬فنخدم الطلب الذي يعطي مسافة‬
‫أقل‪ .‬فيكون ترتيب خدمة الطلبات كما يلي‪:‬‬

‫‪53, 65, 67, 37, 14, 98, 122, 124, 183‬‬

‫شكل رقم ‪.]3[ 00-02‬‬

‫يف خوارزمية ‪ SCAN‬سيتحرك رأس القراءة والكتابة لتلبية الطلبات بدأ من مكان رأس القراءة والكتابة‬
‫(متجها تحو البداية)‪ ،‬فيخدم كل اسطوانة مير هبا‪ ،‬مث يعكس وجهته عندما يصل الصفر ليخدم كل اسطوانة مير هبا إىل‬
‫‪231‬‬
‫أن يصل النهاية (يعمل بطريقة املصعد‪ ،‬لذلك أحياان يطلق عليه خوارزمية املصعد)‪ ،‬وِبلتايل فإن ترتيب خدمة الطلبات‬
‫النهائي سيكون كالتايل‪:‬‬

‫‪53, 37, 14, 0, 65, 67, 98, 122, 124, 183, 199‬‬

‫شكل رقم ‪.]3[ 05-02‬‬

‫يف خوارزمية ‪ LOOK‬سيتحرك رأس القراءة والكتابة لتلبية الطلبات بدأ من مكان رأس القراءة والكتابة‬
‫(متجها تحو البداية)‪ ،‬فيخدم كل اسطوانة مير هبا إىل أن يصل أخر طلب قبل موجود يف طريقه إىل البداية (ليس‬
‫ِبالضرورة أن يصل الصفر)‪ ،‬مث يعكس وجهته ليخدم كل الطلبات اليت تقابله يف طريق الرجعة إىل آخر طلب طلب‬
‫موجود (ليس ِبلضرورة أن يصل النهاية)‪ .‬خدمة الطلبات ستكون كالتايل‪:‬‬

‫‪53, 37, 14, 65, 67, 98, 122, 124, 183‬‬

‫يف خوارزمية ‪ C-SCAN‬سيتحرك رأس القراءة والكتابة لتلبية الطلبات بدأ من مكان رأس القراءة والكتابة‬
‫(متجها تحو النهاية) ‪ ،‬فيخدم كل اسطوانة مير هبا‪ ،‬عندما يصل إىل هناية القرص يعكس إجتاهه راجعا ليبدأ من البداية‬
‫(دون أن خيدم أي طلب يف رجعته للبداية)‪ ،‬ليبدأ من الصفر وخيدم كل ما مير به إىل أن يصل هناية القرص‪ .‬يشبه‬
‫املصعد الذي حيمل الصاعدين فقط مث يرجع فارغ وحيمل الصاعدين مرة أخرى وهكذا (مصعد اجتاه واحد)‪ .‬وهكذا‪.‬‬
‫ترتيب خدمة الطلبات النهائي سيكون كالتايل‪:‬‬

‫‪53, 65, 67, 98, 122, 124, 183, 14, 37‬‬

‫‪232‬‬
‫شكل رقم ‪.]3[ 04-02‬‬

‫يف خوارزمية ‪ C-LOOK‬هي مطورة من ‪ ،C-SCAN‬فهنا يتحرك رأس القراءة والكتابة لتلبية‬
‫الطلبات بدأ من مكان رأس القراءة والكتابة (متجها تحو النهاية)‪ ،‬فيخدم كل اسطوانة مير هبا إىل أن يصل آخر طلب‬
‫(قد يكون قبل هناية القرص) مث يرجع ليبدأ من البداية (دون أن يليب أي طلب يف رجعته للبداية)‪ ،‬ليبدأ من أول طلب‬
‫موجود (ليس ِبلضرورة أن يصل إىل بداية القرص )‪ ،‬ويستمر مرة اثنية إىل أخر طلب ِبلقرص‪ .‬ترتيب خدمة الطلبات‬
‫النهائي سيكون كالتايل‪:‬‬

‫‪53, 65, 67, 98, 122, 124, 183, 14, 37‬‬

‫شكل رقم ‪.]3[ 03-02‬‬

‫‪.02.00‬حمكاة جدولة القرص‬


‫ميكن كتابة برانمج حلساب حركة الذراع بنفس الطريقة أعاله‪ .‬مثال ميكننا وضع الطلبات يف مصفوفة مث نستخدم‬
‫التكرار حلساب الفرق بني مكان الذراع احلاىل والطلبات‪ .‬مثال حلساب مسافة الطلبات خبوارزمية ‪ ،FCFS‬ميكن كتابة‬
‫شفرة كالتايل‪:‬‬

‫‪Dim req(10), Current_Track, distance As Integer‬‬


‫‪req(0) = 86‬‬

‫‪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‬صف الطلبات اليت نريد خدمتها حسب ترتيب وصوهلا هو‪:‬‬

‫‪86, 1470, 913, 1774, 948, 1509, 1022, 1750, 130‬‬

‫بداية من موقع رأس القراءة والكتابة احلايل (‪ ،)143‬ماهي املسافة اليت يقطعها ذراع القرص يف حركته خلدمة هذه‬
‫الطلبات‪ِ ،‬بستخدام كل من اخلوارزميات التالية‪:‬‬

‫‪FCFS ‬‬
‫‪SSTF ‬‬
‫‪SCAN ‬‬
‫‪LOOK ‬‬
‫‪C-SCAN ‬‬
‫‪C-LOOK ‬‬
‫احلل‬

‫(أ) ِبستخدام ‪ :FCFS‬ستتم خدمة الطلبات ِبلرتتيب التايل‪:‬‬

‫‪143, 86, 1470, 913, 1774, 948, 1509, 1022, 1750, 130‬‬

‫جمموع املسافة املقطوعة هو ‪7081‬‬

‫(ب) ِبستخدام ‪ :SSTF‬ستخدم الطلبات ِبلرتتيب التايل‪:‬‬

‫‪143, 130, 86, 913, 948, 1022, 1470, 1509, 1750, 1774‬‬

‫حيث سيكون جمموع املسافة املقطوعة هو ‪1745‬‬

‫(ج) ِبستخدام ‪ SCAN‬ستخدم الطلبات كما يلي‪:‬‬

‫‪143, 913, 948, 1022, 1470, 1509, 1750, 1774, 4999, 130, 86‬‬

‫مبجموع مسافة هو ‪9769‬‬

‫(د) خوارزمية ‪ LOOK‬ختدم الطلبات ِبلرتتيب التايل‪:‬‬

‫‪235‬‬
‫‪143, 913, 948, 1022, 1470, 1509, 1750, 1774, 130, 86‬‬

‫مبجموع مسافة يساوي ‪3319‬‬

‫(ه ) خورازمية ‪ :C-SCAN‬تتم خدمة الطلبات كما يلي‪:‬‬

‫‪143, 913, 948, 1022, 1470, 1509, 1750, 1774, 4999, 0, 86, 130‬‬

‫حيث يكون جمموع املسافة املقطوعة تساوي ‪9813‬‬

‫(و) خوارزمية ‪ :C-LOOK‬خدمة الطلبات يف هذه اخلوارزمية يكون كالتايل‪:‬‬

‫‪143, 913, 948, 1022, 1470, 1509, 1750, 1774, 86, 130‬‬

‫مبجموع مسافة يساوي ‪3363‬‬

‫‪ .0‬كيف تزيد ‪ DMA‬من كفاءة املعاجل ؟ ذلك ألهنا جتعل املعاجل حرا من اإلرتباط مبتابعة عمليات الدخل واخلرج‬
‫ويستطيع القيام أبعمال أخرى‪.‬‬

‫‪ .5‬إذا كان لدينا املعطيات التالية‪:‬‬

‫* صف الطلبات ‪23, 89, 132, 42, 187 :‬‬

‫* اسطواانت القرص‪ 200 :‬أسطوانة مرقمة من ‪ 0‬إىل ‪199‬‬

‫* رأس القراءة والكتابة‪ :‬حاليا يف ‪100‬‬

‫أحسب املسافة اليت يقطعها ذراع القرص يف حركته خلدمة هذه الطلبات‪ِ ،‬بستخدام كل من اخلوارزميات التالية‪:‬‬

‫‪FCFS ‬‬
‫‪SSTF ‬‬
‫‪SCAN ‬‬
‫‪LOOK ‬‬
‫‪C-SCAN ‬‬
‫‪C-LOOK ‬‬
‫احلل‬

‫(أ) ِبستخدام ‪ :FCFS‬املسافة املقطوعة ‪276 :‬‬

‫‪236‬‬
‫(ب) ِبستخدام ‪ :SSTF‬املسافة املقطوعة ‪273 :‬‬

‫(ج) ِبستخدام ‪ : SCAN‬جمموع مسافة ‪101 :‬‬

‫(د) خوارزمية ‪ LOOK‬جمموع مسافة ‪241 :‬‬

‫(ه ) خورازمية ‪ :C-SCAN‬جمموع املسافة ‪366 :‬‬

‫‪237‬‬
‫(و) خوارزمية ‪ :C-LOOK‬جمموع املسافة‪296 :‬‬

‫‪ .02.05‬متارين غري حملولة‬


‫‪ .0‬يتكون اجلهاز من شقني‪ ،‬ما مها ؟‬

‫‪ .0‬هنالك نوع من األجهزة أحدمها يتعامل بطريقة الكتل والثاين يتعامل بطريقة __________؟‬

‫‪ .5‬وضح طريقة عمل ‪ DMA‬؟‬

‫‪ .4‬أذكر مخس من خوارزميات جدولة القرص ؟‬

‫‪ .3‬أذكر أهداف مدير األجهزة ؟‬

‫‪238‬‬
‫الباب احلادي عشر‪ :‬مدير امللفات‬

‫‪239‬‬
‫الباب احلادي عشر‬

‫مدير امللفات (‪)Files Manager‬‬

‫يعتين مدير الذاكرة ِبلبياانت واملعلومات أثناء وجودها ِبلذاكرة الرئيسية ويسمى هذا النوع من التخزين‪،‬‬
‫التخزين قصري املدى (‪ ،)short-term storage‬ولكننا غالبا سنحتاج حلفظ معظم املعلومات لفرتة طويلة أو ما‬
‫يسمى ِبلتخزين طويل املدى (‪ .)long-term storage‬التخزين طويل املدى يكون يف ذاكرة اثنوية حتتفظ‬
‫مبحتوَيهتا ألَيم وليايل‪ ،‬هذه األجهزة (مثل القرص الصلب والقرص املرن واألقراص الضوئية والفالش) يتعامل معها نظام‬
‫التشغيل بطريقة موحدة هي امللف (‪ .)file‬يقوم مدير امللفات كجزء من نظام التشغيل بعمليات ختزين واسرتجاع‬
‫امللفات يف هذه األجهزة (أجهزة التخزين الدائم)‪.‬‬

‫بدون مدير امللفات ستكون بياانتنا أبنواعها سواء كانت نصوصا أو براجما أو أصواات‪ ،‬خمزنة يف شكل أصفار‬
‫وآحاد (أرقام ثنائية) ‪ ،‬ولن نستطيع التمييز بينها فهي خمزنة يف مكان واحد دون حدود واضحة بينها‪ ،‬فلن نعرف أين‬
‫بداية امللف وال هنايته‪ ،‬ولن نعرف نوعه وال طرق محايته‪.‬‬

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

‫‪ .00.0‬أهداف إدارة امللفات‬


‫هي القيام بكل ما يتعلق ِبلتعامل مع امللفات‪ ،‬مثل‪:‬‬

‫‪ ‬إنشاء وحذف امللفات‪.‬‬

‫‪ ‬إخفاء تفاصيل مكان امللف يف القرص‪.‬‬

‫‪ ‬عمليات الوصول إىل امللفات من قراءة وكتابة‪.‬‬

‫‪ ‬توفري مشاركة امللفات‪.‬‬

‫‪ ‬توفري احلماية على امللفات‪.‬‬

‫‪ ‬توفري االعتمادية بعمليات النسخ االحتياطي‪.‬‬

‫‪240‬‬
‫‪ .00.0‬تعريف امللف‬
‫امللف هو جمموعة من املعلومات ذات عالقة وبنية منطقية‪ ،‬فالوثيقة مثال تتألف من كلمات وسطور وفقرات‬
‫وصفحات (بنية منطقية) وحتتوي على موضوع واحد (معلومات ذات عالقة)‪.‬‬

‫امللفات قد تكون حرة البنية (غري مهيكلة) مثل ملفات النصوص ‪ ،‬حيث يتكون امللف من ِبيتات وحروف‬
‫وسطور‪ ،‬وقد تكون مهيكلة مثل ملفات قواعد البياانت اليت تتكون من حقول وسجالت‪.‬‬

‫يدعم نظام التشغيل ينكس امللفات غري مهيكلة واليت تكون عبارة عن سلسلة من البايتات واحلروف‪.‬‬

‫‪ .00.5‬صفات امللف (‪)File Attributes‬‬


‫اسم امللف عادة هو سلسلة من احلروف مثل (‪ )example .doc‬بعض نظم التشغيل مثل ينكس متيز‬
‫بني احلروف الكبرية والصغرية يف االسم مثالً (‪ ) Example .doc‬غري االسم (‪.)example .doc‬‬

‫و لكل ملف صفات مثل ‪:‬‬

‫‪ ‬االسم (‪.)name‬‬

‫‪ ‬النوع (‪.)type‬‬

‫‪ ‬املوقع (‪.)location‬‬

‫‪ ‬احلجم (‪.)size‬‬

‫‪ ‬احلماية (‪. )protection‬‬

‫‪ ‬كلمة املرور‪.‬‬

‫‪ ‬املنشئ (‪.)creator‬‬

‫‪ ‬املالك (‪.)owner‬‬

‫‪ ‬الزمن والتاريخ واملستخدم (‪ )time , data , and user identification‬مثالً (زمن واتريخ‬
‫اإلنشاء ‪ ،‬زمن واتريخ آخر تعديل)‪.‬‬

‫‪ .00.4‬العمليات على امللفات‬


‫هنالك عمليات خمتلفة ميكن أن تنفذ على امللفات ختتلف ِبختالف النظم‪ ،‬نذكر منها‪:‬‬

‫‪241‬‬
‫‪ ‬إنشاء امللف (‪.)create a file‬‬

‫‪ ‬فتح ملف‪.‬‬

‫‪ ‬الكتابة يف ملف‪.‬‬

‫‪ ‬القراءة من ملف ‪.‬‬

‫‪ ‬إضافة بياانت يف هناية ملف موجود (‪.)append‬‬

‫‪ ‬البحث عن معلومة يف ملف (‪.)seek‬‬

‫‪ ‬حذف ملف‪.‬‬

‫‪ ‬تفريغ ملف (مسح حمتوَيته)‪.‬‬

‫‪ ‬معرفة صفات ملف (‪.)get attributes‬‬

‫‪ ‬إضافة أو تعديل صفات ملف (‪.)set attributes‬‬

‫‪ ‬تغيري اسم ملف‪.‬‬

‫‪ .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‬‬ ‫جمموعة من مللفات يتم ضغتها يف ملف واحد‬

‫‪ .00.2‬طرق الوصول ‪access method‬‬


‫‪ ‬ميكن تسلسلي أو تتابعي (‪.)sequential access‬‬

‫‪242‬‬
‫‪ ‬وصول مباشر ( ‪.)direct access‬‬

‫‪ .00.5‬بنية الدليل ‪Directory structures‬‬


‫يتم تقسيم نظام امللفات إىل أقسام (‪ )partitions‬أحياانً تسمي (‪ )minidisks‬أو (‪،)volumes‬‬
‫وكل قسم (‪ )partitions‬حيتوى معلومات عن امللفات املخزنة به‪.‬‬

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

‫‪ .00.5.0‬مستوى الدليل الواحد ‪Single – level directory‬‬

‫أبسط نوع وفيه تكون كل امللفات حمفوظة يف مكان (جملد) واحد‪ ،‬لذلك ال ميكن تسمية ملفني ِبسم واحد‪،‬‬
‫الشكل (‪.)0-00‬‬

‫شكل رقم (‪ :)0-00‬مستوى الدليل الواحد‪.‬‬

‫‪ .00.5.0‬مستوى الدليلني ‪Two – level directory‬‬

‫كل مستخدم لديه دليل خاص به‪ ،‬وِبلتايل كل مستخدم ميكنه استخدام أمساء حىت ولو كانت مستخدمة‬
‫عند اآلخرين (ميكن تكرار اسم امللف لكن كل اسم يف دليل خمتلف‪.‬‬

‫‪243‬‬
‫شكل رقم (‪ :)0-00‬مستوى الدليلني‪.‬‬

‫‪ .00.5.5‬الدليل الشجري ‪Tree structured directory‬‬

‫يف الدليل الثنائي يستطيع كل مستخدم تسمية ملفاته كما يريد حىت ولو كانت موجودة أمساء مثلها عند‬
‫املستخدمني اآلخرين‪ ،‬ولكن ماذا لو أراد تسمية ملفني ِبسم واحد أو جتميع كل ملفات ذات صلة يف دليل لوحدها‪،‬‬
‫أكيد لن يستطيع فعل ذلك يف الدليل الثنائي‪ ،‬لذلك جاء الدليل الشجري حلل مثل هذه املشاكل‪ ،‬فكل مستخدم له‬
‫مطبق احلرية يف بناء ما يرد من جملدات وألي درجة من املستوَيت وِبلتايل يستطيع تنظيم جملدات وملفات بطريق‬
‫خمتلفة وهبرمية خمتلفة كما يردي ووقت ما يشاء‪ .‬وهذا هو النظام املتبع حاليا يف معظم نظم التشغيل احلديثة‪.‬‬

‫شكل رقم (‪ :)5-00‬الدليل الشجري أو اهلرمي‪.‬‬

‫‪244‬‬
‫‪ .00.8‬احلماية‬
‫عند حفظ املعلومات يف احلاسب عليك العمل على محايتها خاصة إذا كانت هامة وسرية‪ .‬ولكن ممن أمحيها ؟‬
‫من‪:‬‬

‫‪ ‬األعطال (‪ ،)damage‬لتوفري االعتمادية واالستمرارية (‪.)reliability‬‬

‫‪ ‬التطفل (الوصول غري مسموح به (‪ ،))improper access‬لضمان سريتها وخصوصيتها‪.‬‬

‫‪ .00.8.0‬النسخ االحتياطي‬

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

‫توفر بعض نظم التشغيل خدمات النسخ االحتياطي جلزء من القرص أو القرص كامال‪ ،‬مثال ويندوز توفر‬
‫برانمج يقوم بعملية النسخ واالسرتجاع يسمى ‪ Backup‬يوجد يف ‪ accessories‬داخل القائمة ‪System‬‬
‫‪ ،tools‬شكل رقم (‪ .)4-00‬حيث يستخدم هذا الربانمج لتخرين امللفات املوجودة يف القرص إىل وحدة ختزين‬
‫أخري‪ .‬وميكن اسرتجاع النسخة االحتياطية إىل القرص مرة أخرى بنفس الربانمج (‪.)restores‬‬

‫شكل رقم (‪ :)4-00‬برانمج النسخ االحتياطي يف ويندوز ‪.XP‬‬

‫عملية النسخ االحتياطي تضمن على األقل سالمة البياانت إذا تعطل القرص الصلب الذي حيويها‪ ،‬فنستطيع‬
‫مثال استبدال القرص املعطوب آبخر جديد واسرتجاع بياانتك من مكان النسخ االحتياطي‪.‬‬

‫‪245‬‬
‫‪ .5.8.0‬أذوانت الوصول‬

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

‫قوائم الوصول حتدد أنواع املستخدمني الذين ميكن منحهم أو منعهم الوصول إىل امللفات‪ ،‬مثل‪:‬‬

‫‪ ‬املالك ‪.Owner‬‬

‫‪ ‬جمموعة معينة ‪.Group‬‬

‫‪ ‬الكل ‪.Universe‬‬

‫إذ أن أذوانت الوصول حتدد نوع الوصول إىل امللفات وقوائم الوصول حتدد من سيصل‪.‬‬

‫‪ .5.8.0.0‬أذوانت الوصول يف ويندوز ‪XP‬‬

‫إذا أردت عمل مشاركة جمللد يف ويندوز ‪ XP‬ستظهر انفذة هبا تبويب يسمى ‪ Security‬حيتوي على‬
‫قوائم وصول (‪ )group or user name‬وأذوانت وصول لكل نوع من أنواع قوائم الوصول(‪،)permissions‬‬
‫مثال إذا نقرت على ‪ Administrator‬يف قوائم الوصول سيظهر يف انفذة أذوانت الوصول‪ ،‬األذوانت اليت ميكن‬
‫منحها للمشرف (‪ )permissions for Administrators‬مثل التحكم الكامل (‪ )full control‬أو القراءة‬
‫والتنفيذ (‪ ،)Read & Execute‬وما إىل ذلك من أذوانت تظهر يف الشكل (‪.)3-00‬‬

‫‪246‬‬
‫شكل رقم (‪ :)3-00‬أذوانت الوصول يف ويندوز ‪.XP‬‬

‫‪ .5.8.0.0‬أذوانت الوصول يف أوبونتو‬

‫كل شيء يف ينكس ولينكس يعترب ملف‪ .‬وكل ملف لديه أذوانت تسمح أو متنع الوصول إليه‪ .‬هنالك‬
‫ثالث أنواع من الوصول للملف هي القراءة (‪ r‬أو ‪ ،)4‬الكتابة (‪ w‬أو ‪ ،)0‬والتنفيذ (‪ E‬أو ‪ .)0‬وهنالك ثالث أنواع‬
‫من املستخدمني هم‪:‬‬

‫املستخدم‬ ‫‪ls output‬‬

‫‪ -rwx------‬املالك (‪)owner‬‬

‫‪ ----rwx---‬جمموعة ما (‪)group‬‬

‫‪ -------rwx‬أخرى (‪)other‬‬

‫مثال ميكنين معرفة احلماية املوجودة على امللف ‪ِ hosts‬بألمر التايل‪:‬‬

‫‪ls -l /etc/hosts‬‬

‫فيكون انتج تنفيذ األمر كما يلي‪:‬‬

‫‪-rw-r--r-- 1 root root 288 2005-11-13 19:24 /etc/hosts‬‬


‫‪247‬‬
‫تفسري الناتج أعاله‪:‬‬

‫‪ -rw-r--r--‬تفسر كما يلي‪:‬‬

‫)‪owner = Read & Write (rw-‬‬

‫)‪group = Read (r--‬‬

‫)‪other = Read (r--‬‬

‫أي أن املالك لديه صالحيات القراءة والكتابة‪ ،‬اجملموعة لديها صالحية القراءة فقط‪ ،‬اآلخرين لديهم صالحية القراءة‬
‫فقط‪.‬‬

‫نستطيع تغيري نوع احلماية ِبستخدام األمر ‪ chmod‬واليت تكون صيغته كالتايل‪:‬‬

‫‪Usage: chmod {options} filename‬‬

‫حيث ‪ Options‬ميكن اختيارها من اجلدول (‪.)0-00‬‬

‫جدول (‪ :)0-00‬خيارات تغيري نوع الوصول‪.‬‬

‫‪Options‬‬ ‫‪Definition‬‬

‫‪u‬‬ ‫‪Owner‬‬

‫‪g‬‬ ‫‪Group‬‬

‫‪o‬‬ ‫‪Other‬‬

‫‪x‬‬ ‫‪Execute‬‬

‫‪w‬‬ ‫‪Write‬‬

‫‪r‬‬ ‫‪Read‬‬

‫‪+‬‬ ‫‪add permission‬‬

‫‪-‬‬ ‫‪remove permission‬‬

‫=‬ ‫‪set permission‬‬

‫‪.‬‬

‫‪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‬‬

‫‪ .00.3.0.0‬ختزين متتال (‪)contiguous allocation‬‬

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

‫عندما يقوم مدير امللفات بتخزين امللف يف القرص (يف كتل متتالية)‪ ،‬سيخزن معلومات امللف يف جدول‬
‫احلجز بوضع عنوان أول كتلة مت ختزين امللف هبا‪ ،‬وطول امللف (عدد الكتل اليت حيجزها) مع اسم امللف‪ ،‬الشكل‬
‫(‪.)5-00‬‬

‫شكل رقم (‪ :)5-00‬ختزين متتايل [‪.]3‬‬

‫‪250‬‬
‫‪ .00.3.0.0‬ختزين رابطي (‪)linked allocation‬‬

‫هذه الطريقة تعاجل مشاكل طريقة التخزين املتتايل‪ .‬حيث خيزن كل ملف يف كتل مرتبطة مع بعضها‪ ،‬حيث‬
‫تشري كل كتلة إىل الكتلة اليت تليها‪ ،‬بينما تؤشر آخر كتلة يف امللف إىل ‪ .0-‬قد تكون الكتل موزعة يف أماكن متباعدة‬
‫داخل القرص (ال توجد فراغات خارجية)‪ .‬عند ختزين امللف يف القرص يسجل مدير امللفات معلومات امللف يف جدول‬
‫الدليل (اسم امللف‪ ،‬وعنوان أول كتلة)‪ ،‬الشكل (‪.)8-00‬‬

‫شكل رقم (‪ :)5-00‬ختزين رابطي [‪.]3‬‬

‫هذا النوع يستخدم يف نظام التشغيل ‪ DOS‬ويسمى )‪.File Allocation Table (FAT‬‬

‫‪ .00.3.0.5‬ختزين فهرسي (‪)indexed allocation‬‬

‫حل التخزين الرابطي مشكلة الفراغات الغري مستفاد منها يف التخزين املتتايل‪ ،‬ولكن املشكلة فيه أن املؤشرات‬
‫منتشرة يف الكتل‪ ،‬حيث حتتوي كل كتلة على مؤشر للكتلة اليت تليها‪ ،‬وِبلتايل لن نستطيع إىل كتلة معينة مباشرة وإمنا‬
‫علينا املرور على كل الكتل واحدة تلو اآلخرة لنصل لكتلة معينة مما يؤثر على األداء‪.‬‬

‫حل التخزين الفهرسي هذه املشكلة وذلك بوضع عناوين كل الكتل يف كتلة واحدة تسمى كتلة الفهرس‪ .‬فيكون لكل‬
‫ملف خيزن ِبلقرص كتلة ختزن فيها عناوين بقية الكتلة اليت يستخدمها امللف‪ ،‬شكل (‪.)8-00‬‬

‫‪251‬‬
‫شكل رقم (‪ :)8-00‬التخزين الفهرسي [‪.]3‬‬

‫النظام الفهرسي ال يوجد به فراغات‪ ،‬ليس لديه مشكلة للوصول مباشرة إىل أي كتلة‪ ،‬ولكنه حيجز كتلة أو أكثر‬
‫ليخزن فيها عناوين الكتلة األخرى‪.‬‬

‫‪ .00.3.0.4‬ما هي الطريقة املناسبة‬

‫اختيار طريقة احلجز اليت ستطبق يف نظام التشغيل تعتمد على الكفاءة وسرعة الوصول‪ ،‬ولكن هنالك عوامل‬
‫أخرى تؤثر يف اختياران لطريقة الوصول املناسبة مثل طريقة استخدام النظام‪.‬‬

‫‪252‬‬
‫متارين‬

‫ما هي أهداف مدير امللفات ؟‬ ‫‪.0‬‬

‫عرف امللف ؟‬ ‫‪.0‬‬

‫أذكر مخس من صفات امللفات ؟‬ ‫‪.5‬‬

‫أذكر مخس من العمليات اليت تتم على امللفات ؟‬ ‫‪.4‬‬

‫تتم محاية امللفات من أمرين‪ ،‬ما مها ؟‬ ‫‪.3‬‬

‫كيف تحمي ملفاتنا من األعطال ؟‬ ‫‪.2‬‬

‫كيف تحمي ملفاتنا من التطفل ؟‬ ‫‪.5‬‬

‫أذكر ثالث من طرق التخزين ؟‬ ‫‪.8‬‬

‫ما هو جدول احلجز ‪ ،allocation table‬وما هي أمهيته ؟‬ ‫‪.3‬‬

‫أحبث يف اإلنرتنت عن أنواع جداول احلجز ‪ Fat‬و ‪ FAT32‬و ‪ NTFS‬وقارن بينها ؟‬ ‫‪.02‬‬

‫‪253‬‬
‫الباب الثاين عشر‪ :‬األمن واحلماية‬

‫‪254‬‬
‫الباب الثاين عشر‬

‫األمن واحلماية‬

‫"الوقاية خري من العالج" عبارة ذائعة شائعة‪ ،‬وأكثر ما تستعمل يف جمال الصحة‪ .‬لكننا احوج ما نكون هلا يف‬
‫جمال محاية نظم احلاسب والبياانت اليت عليه‪ .‬فاحد اسهل وابسط طرق الوقاية هو النسخ االحتياطي لكامل النظام‪.‬‬

‫فالنسخ االحتياطي للنظام بصورة دورية هو احد طرق احلماية البدائية واهلامة واليت جيب القيام هبا بصورة دورية‪ .‬فهو‬
‫ضرورة من ضرورات احلماية خاصة يف حالة تعرض النظام لكوراث طبيعية أو تعطل كامل يف النظام الي سبب‪.‬‬

‫أحد طرق جدولة النسخ االحتياطي اليت ميكن أن تستخدم هي نسخ النظام بكامله كل اسبوع مرة مثال‪،‬‬
‫ونسخ امللفات اليت يتم تعديلها يوميا‪ .‬وزَيدة يف االحتياط ميكن االحتفاظ ِبلنسخ االحتياطية ملدة ترتاوح بني ‪ 5‬إىل ‪2‬‬
‫شهور‪ .‬ووضع نسخة احتياطية بعيد عن املوقع يزيد احلماية خاصة يف حالة الكوارث‪.‬‬

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

‫ِبختصار احلماية يقصد هبا الوقاية والتحوط قبل وقوع الكارثة‪ ،‬والتأمني‬
‫يقصد به اغالق كل الثغرات اليت قد تُؤتى من قِبلها‪.‬‬

‫‪ .00.0‬محاية املوارد‬

‫أن من مهام نظام التشغيل محاية موارد نظام احلاسب من أجهزة وبرامج وبياانت‪ .‬وذلك مبنع املستخدمني‬
‫غري املصرح هلم ِبلوصول هلذه املوارد‪ .‬لذلك جيب محاية النظام من الربامج الضارة اليت قد تسبب اتالف لالجهزة أو‬
‫البياانت‪.‬‬

‫هنالك الكثري من الطرق للقيام بذلك مثل التحقق من املستخدمني (املصادقة ‪ )Authentication‬و منح‬
‫الصالحيات للمستخدمني حبيث يكون لكل مستخدم صالحية وصول ملا هو مسموح له به (‪.)authorization‬‬

‫‪255‬‬
‫إن اي ثغرة توجد بنظام التشغيل ستعرض نظام احلاسب كله لالخرتاق‪ .‬لذلك تعترب محاية النظام هي مهمة نظام‬
‫التشغيل يف الدرجة االوىل [‪.]05‬‬

‫‪ .00.0‬املصادقة (‪ )authentication‬والصالحيات‬

‫من أولوَيت التأمني اليت يوفرها نظام التشغيل هي التحقق من هوية املستخدم وحتديد صالحياته‪ .‬حيث يتم حتديد كل‬
‫مستخدم للنظام وربطه ِبملوارد املسموح له ِبستخدمها‪ .‬وتقع على عاتق نظام التشغيل مسئولية إنشاء نظام محاية‬
‫يضمن أن املستخدم الذي يقوم ِبستخدام مورد معني هو مصدق له بذلك‪.‬‬

‫توفر أنظمة التشغيل طرق خمتلفة للمصادقة والتحقق من هوية املستخدم‪ ،‬منها‪:‬‬

‫‪ .0‬اسم املستخدم ‪ /‬كلمة املرور ‪ -‬حيتاج املستخدم إىل إدخال اسم املستخدم وكلمة املرور املسجلة مع نظام‬
‫التشغيل للدخول يف النظام‪.‬‬

‫‪ .0‬بطاقة املستخدم ‪ /‬مفتاح ‪ -‬العضو حباجة فتحة للبطاقة أو توليد مفتاح دخول يوفره نظام التشغيل للدخول‬
‫يف النظام‪.‬‬

‫‪ .5‬مسة املستخدم ‪ -‬البصمة ‪ -‬منط شبكية العني ‪ -‬توقيع‪ :‬العضو يف حاجة لتمرير مسته عن طريق جهاز إدخال‬
‫معني يستخدمه نظام التشغيل للدخول يف النظام‪.‬‬

‫هنالك مصطلحات ترتبط مع التأمني مثل‪:‬‬


‫‪ ‬املتطفل (‪ )intruder‬والكراكر (‪ )cracker‬وهم الذين حياولون اإلخالل ِبألمن ( ‪breach‬‬
‫‪.)security‬‬
‫‪ ‬التهديد (‪ )threat‬الذي يعين احتمال انتهاك أمان النظم كأن تكتشف ثغرة يف النظام‪.‬‬
‫‪ ‬اهلجوم (‪ )attack‬الذي يعين حماولة كسر أتمني النظام (‪.]3[ )break security‬‬

‫‪ .00.5‬صفات‪/‬أهداف التأمني‬

‫على النظام أن يتصف ببعض الصفات اليت جتعله قوَي وحمميا محاية جيدة منها ماذُكر يف [‪ ]08‬وهو كالتايل‪:‬‬

‫‪ ‬السرية (‪ :)Confidentiality‬ضمان ان البياانت ال يتم الوصول اليها من االشخاص غري املخولني‪.‬‬

‫‪256‬‬
‫‪ ‬التكاملية (‪ :)Integrity‬ضمان عدم تغيري البياانت من االشخاص غري املخولني دون علم االشخاص‬
‫املخولني‪ .‬ان يدخل شخص ما اىل هاتفك احملمول دون ان تعلم ويقوم حبذف بعض االمساء‬

‫‪ ‬املصادقة (‪ :)Authentication‬ضمان ان االشخاص املستخدمني ميثلون االشخاص الذين يدعون اهنم‬


‫هم‪ .‬ما الذي يثبت جلهاز احلاسوب انك انت املستخدم املقصود؟ البد من شئ ال يعلمه احد سواك او ال‬
‫ميلكه احد سواك‪.‬‬

‫‪ ‬التحكم ِبلدخول (‪ : )Access control‬ضمان ان املستخدمني ال يدخلون اال اىل االماكن املخصصة‬
‫هلم‪.‬‬

‫‪ ‬عدم االنكار (‪ : )Non repudiation‬ضمان ان مرسل الرسالة ال ميكن ان ينكر انه ارسل‬
‫طرف االتصال يستدعي عدم انكار اي من‬
‫الرسالة(هذه اخلاصية مهمة عند وجود نوع من االتفاق بني ْ‬
‫الطرفني ارساله اي من الرسائل املوجودة)‪.‬‬

‫‪ ‬التوفر (‪ : )Availability‬تعين ان النظام موجود ويعمل عند احلاجة اليه‪.‬‬

‫‪ ‬اخلصوصية (‪ : )Privacy‬حق املستخدمني ِبلتحكم مبا سيعرفه االخرون عنهم وعن معلوماهتم املوجودة يف‬
‫النظام‬

‫اذكر امثلة توضح الفرق بني السرية (‪ )Confidentiality‬واخلصوصية (‪.)Privacy‬‬

‫‪ .00.4‬اجراءات وقائية للتقليل من اهلجمات‬

‫ميكن محاية النظام ضد اهلجمات اليت قد تقع عليه ِباليت‪:‬‬

‫‪ ‬جتنب اخلطر (‪ : )Risk avoidance‬وذلك ِبلغاء الفقرات الزائدة من النظام اليت ميكن ان تعرضه‬
‫للهجوم مثل الغاء اتصال االنرتنت ضمن شبكة معينة ال حاجة مبوظفيها ِبالتصال ِبالنرتنت‪.‬‬

‫‪ ‬الردع (‪ : )Deterrence‬من خالل استخدام بعض تقنيات االتصال اليت تضمن معرفة ومتييز املهامجني‬
‫قبل تنفيذهم اهلجوم على بياانت النظام مثال‪.‬‬

‫‪ ‬املنع (‪ : )Prevention‬منع حدوث اهلجوم‪.‬‬

‫‪ ‬كشف اهلجوم (‪ : )Detection‬للحيلولة دون احداثه للضرر بعد نفاذه‪.‬‬

‫‪257‬‬
‫‪ ‬االصالح (‪ : )Recovery‬اصالح االضرار اليت احدثها اهلجوم‪.‬‬

‫‪ .00.3‬ما الذي نريد محايته؟‬

‫‪ ‬االجهزة ومكوانهتا اخلارجية (‪)Physical security‬‬

‫‪ ‬محاية العمليات (‪ )Operational/procedural security‬مثل االوامر االدارية والتقارير وما جيري‬


‫داخل النظام من عمليات‪.‬‬

‫‪ ‬احلماية الشخصية (‪ : )Personnel security‬كل ما يتعلق ِبملستخدمني داخل النظام من مراقبة‬


‫للدخول واخلروج وبدأ االستخدام ومراقبة االستخدام‪.‬‬

‫‪ ‬محاية النظام (‪ : )System security‬من هم املخولون ِبلدخول اىل النظام‪ ,‬عملية النسخ االحتياطي‬
‫(‪ ،)backup‬ادارة قاعدة البياانت‪ ،‬ادارة امللفات‪.‬‬

‫‪ ‬محاية الشبكة (‪ : )Network security‬محاية معدات الشبكة واخلوادم (‪ )servers‬ومقاومة وكشف‬


‫التجسس وحماوالت الدخول غري املرخصة‪.‬‬

‫‪ .00.2‬التهديدات [‪]05‬‬

‫‪ .00.2.0‬هتديدات الربامج (‪)program threats‬‬

‫عادة تقوم الربامج ِبعمال مفيدة سواء كانت هذه الربامج برامج مستخدمني او برامج نظم تشغيل وتعمل يف النواة‪.‬‬

‫فاذا قام برانمج مستخدم ِبعمال ضارة فيسمى ِبلرانمج الضار أو املهدد‪ .‬مثال لذلك الربانمج الذي يتثبت يف جهاز‬
‫املستخدم ويرسل بياانت دخوله إىل بعض اهلاكرز‪.‬‬

‫أمثلة للربامج الضارة‪:‬‬

‫‪ ‬حصان طروادة (‪ -)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‬‬

‫هناك أنواع متعددة من اهلجوم الذي من املمكن أن حيدث عندما يتم نقل البياانت عرب الشبكة من جهاز إىل آخر‪.‬‬
‫يسمى مثل هذا اهلجوم "الرجل الذي يف الوسط"‪.‬‬

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

‫عندما يتم االتصال بني أجهزة الكمبيوتر عند مستوَيت منخفضة من طبقة الشبكة‪ ،‬قد ال تكون أجهزة الكمبيوتر‬
‫قادرة على حتديد مع من تتصل وتتبادل البياانت‪.‬‬

‫اهلجوم يبدا ِبنتحال شخص هلويتك من أجل االطالع على رسائلك مثال‪ .‬الشخص على الطرف اآلخر قد يعتقد أنه‬
‫هو أنت ألن املهاجم قد يقوم بنشاط ويرد كما لو كنت انت للحفاظ على تبادل املعلومات واحلصول على مزيد‬
‫منها‪.‬‬

‫أنواع االخرتاق‪ ،‬كما موضحة ِبلشكل ‪ ،0-00‬هي‪:‬‬

‫‪ ‬االعرتاض (التجسس) (‪ :)interception‬حتويل البياانت اىل طرف اثلث متنصت دون تغيريها او تزييفها‬

‫‪ ‬املقاطعة (‪ :)Interruption‬ال ميكن للبياانت ان تصل اىل الطرف االخر‪.‬‬

‫‪ ‬التعديل (‪ :)modification‬تغيري البياانت بعد التنصت عليها من قبل الطرف الثالث واعادهتا اىل‬
‫املستلم‬

‫‪ ‬التكرار(‪ :)replay‬إعادة االرسال البياانت الصحيحة (مثل اعادة طلب احلصول على مبلغ مايل)‪.‬‬

‫‪ ‬التزييف(‪ :)fabrication‬تزييف االتصال من قبل الطرف الثالث واالدعاء ِبن الطرف الثالث هو الطرف‬
‫املتصل يف حني ان املتصل ليس موجودا‪.‬‬

‫‪260‬‬
‫شكل ‪ :0-00‬انواع االخرتاق [‪.]03‬‬

‫‪ .00.8‬تصنيف اهلجمات‬

‫تصنيف مبسط يوضح أنواع بعض اهلجمات اليت قد تقع على النظام [‪:]08‬‬

‫‪ ‬اهلجوم السليب (‪ : )Passive Attack‬اهلدف منه احلصول على معلومات الستخدامها يف انواع اخرى‬
‫من اهلجمات مثل احلصول على كلمات السر‪.‬‬

‫‪ ‬اهلجوم النشط (‪ : )Active Attack‬الدخول على النظام واحداث الضرر املقصود‪.‬‬

‫‪ ‬اهلجوم املوزع (‪ : )Distributed Attack‬توزيع عنصر اهلجوم مثل فريوس حصان طروادة ( ‪Trojan‬‬
‫‪ )horse‬على عدة جهات ومستخدمني هبدف احداث ضرر او تغيري يف البياانت او يف املعدات‬
‫(‪.)hardware‬‬

‫‪ ‬اهلجوم الداخلي (‪ : )Insider Attack‬ميكن للمهاجم الداخلي الذي هو جزء من النظام ان يقوم‬
‫بكافة االضرار للجزء الذي يعمل به والذي هو خمول ِبلعمل به وقد يتجاوزه اىل اجزاء اخرى‪.‬‬

‫‪ ‬هجوم التقرب (‪ : )Close-in Attack‬وصول شخص غري خمول اىل الشبكة ملعرفة كيفية عملها‬
‫واالطالع على طرق الربط فيها‪.‬‬

‫‪261‬‬
‫‪ ‬هجوم التصيد (‪ : )Phishing Attack‬يقوم املهاجم بتكوين موقع انرتنت شبيه ِبحد املواقع الشهرية‬
‫مثل (‪ )Paypal‬اخلاص ِبلدفع عرب االنرتنت والتعامالت املالية وينتظر جمئ مستخدم متواضع اخلربة ليدخل‬
‫رقم بطاقته او معلوماته الشخصية فيحصل عليها املتصيد وحيقق مقصده منها‪.‬‬

‫‪ ‬هجوم احملاكاة (‪ : )Spoof attack‬يقوم املهاجم ِبصدار اشارة معينة تؤدي اىل توجيه البياانت له‪ .‬مثل‬
‫تغيري عناوين الشبكة حبيث حيصل هو على البياانت اليت يفرتض ان حيصل عليها غريه‪.‬‬

‫‪ ‬هجوم اغراق املخزن املؤقت (‪ : )Buffer overflow‬ارسال كم كبري غري متوقع من البياانت لوسيلة‬
‫خزن معينة مما يؤدي اىل عدم استيعاب هذا املخزن هلذه البياانت وتوقفه‪.‬‬

‫‪ ‬اهلجوم االستغاليل (‪ : )Exploit attack‬استغالل نقطة ضعف‪/‬ثغرة يف نظام معني‪.‬‬

‫‪ ‬مهامجة كلمة السر (‪ :)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‬‬

‫ولدينا مادتني‪ :‬مها (‪.)Role1, Role2‬‬

‫احلقوق حتدد يف خاانت التقاء الكائن مع املادة‪ ،‬مثال احلقوق املسموح هبا للمادة ‪ 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‬فقط‪.‬‬

‫عمليات ‪ D2‬لديه صالحية للطباعة يف الطابعة فقط‪.‬‬

‫عمليات ‪ D3‬يستطيع أن يقرا من امللف ‪ F2‬وتنفيذ امللف ‪.F3‬‬

‫عمليات ‪ D4‬لديه صالحيات القراءة والكتابة من وإىل امللف ‪ F1‬وامللف ‪.F3‬‬

‫حمددة وصول ]‪.[9‬‬

‫‪ .00.02‬تصنيفات أمن احلاسوب‬

‫حسب معايري تقييم نظام الكمبيوتر املوثوق به ( ‪Trusted Computer System's Evaluation‬‬
‫‪ )Criteria‬لوزارة الدفاع االمريكية ‪ ،‬فإن هناك أربعة تصنيفات أمنية يف أنظمة الكمبيوتر هي ‪ ،C ،B ،A‬و ‪.D‬‬

‫هذه املواصفات املستخدمة على نطاق واسع تستخدم لتحديد ومنذجة أمن النظم واحللول األمنية‪ .‬فيما يلي وصف‬
‫موجز لكل تصنيف‪.‬‬

‫التوصيف‬ ‫نوع التصنيف‬ ‫تسلسل‬


‫اعلى مستوى‪ .‬يستخدم مواصفات التصميم الرمسية وتقنيات التحقق‪ .‬مينح درجة عالية‬ ‫‪Type A‬‬ ‫‪0‬‬
‫من ضمان العملية االمنية‪.‬‬
‫يوفر نظام محاية إلزامي‪ .‬به كل خصائص النوع ‪ .C2‬إضافة لعالمة حساسية‬ ‫‪Type B‬‬ ‫‪0‬‬

‫‪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‬‬
‫الفئة‪.‬‬

‫‪ .00.00‬مصطلحات يف أمن املعلومات‬

‫مصادقة‬ ‫‪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‬‬

‫‪#define MAX_COUNT 200‬‬

‫‪void ChildProcess(void); /* child process prototype */‬‬

‫‪void ParentProcess(void); /* parent process prototype */‬‬

‫{ )‪void main(void‬‬

‫;‪pid_t pid‬‬

‫;)(‪pid = fork‬‬

‫)‪if (pid == 0‬‬

‫;)(‪ChildProcess‬‬

‫‪270‬‬
else ParentProcess();

void ChildProcess(void) {

int i=5;

printf(" This line is from child, value = %d\n", i);

printf(" *** Child process is done ***\n");

void ParentProcess(void) {

int i=9;

printf("This line is from parent, value = %d\n", i);

printf("*** Parent is done ***\n");

‫جرب الربانمج أعاله ووضح ما هو املخرج ؟‬

)6( ‫برانمج‬

‫ حيث مت إلنشاء عملية‬،C++ ‫الربانمج التايل يوضح كيفية استخدام استدعاءات النظام بواسطة برانمج‬
.‫ للتميز بني العملية اإلبن والعليمة األب‬،‫ مث اختبار القيمة الراجعة منها‬،fork() ‫ِبستدعاء‬

#include <iostream>
#include <string>

// Required by for routine


#include <sys/types.h>
#include <unistd.h>

271
using namespace std;

int globalVariable = 2;

main()
{
string sIdentifier;
int iStackVariable = 20;

pid_t pID = fork();


if (pID == 0) // child
{
// Code only executed by child process

sIdentifier = "Child Process: ";


globalVariable++;
iStackVariable++;
}
else if (pID < 0) // failed to fork
{
cerr << "Failed to fork" << endl;
exit(1);
// Throw exception
}
else // parent
{
// Code only executed by parent process

sIdentifier = "Parent Process:";


}

// Code executed by both parent and child.

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;

printf("fork program starting");


‫استدعاء األمر الذي ينشي (يفرخ) عملية جديدة وخيزن رقم العملية يف متغري‬
pid = fork();

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‬‬

‫إذا كان هنالك خطأ يف التنفيذ ستكون القيمة الراجعة ‪.-1‬‬

‫أيضا ميكننا إهناء عملية ِبستخدام األمر‪:‬‬

‫‪kill -9 [PID] $‬‬

‫حيث ميثل ‪ PID‬رقم العملية املراد إهناءها‪ ،‬مثال إلهناء العملية رقم ‪ 0555‬سننفذ األمر التايل على الطرفية‪:‬‬

‫‪$ $kill -9 1337‬‬

‫أيضا ميكننا إهناء نفس العملية من داخل برانمج ‪ِ C‬بألمر‪:‬‬

‫;) ‪kill( 1337, SIGKILL‬‬

‫برانمج (‪)4‬‬

‫يف الربانمج التايل نقوم إبنشاء عملية ِبألمر )(‪ ،fork‬مث تتفذ العملية ِبالمر ‪ execlp‬أو ‪ exec‬أو غريها‬
‫من دوال التنفيذ‪ .‬كما ميكن إهناء العملية ِبألمر )(‪ .exit‬أيضا األمر ‪ wait‬يستخدم جلعل عملية تنتظر عملية أخرى‬
‫مثال‪.‬‬

‫)(‪int main‬‬

‫{‬

‫‪274‬‬
pid_t pid;

/* fork another process */

pid = fork();

if (pid < 0) { /* error occurred */

fprintf(stderr, "Fork Failed");

exit(-1);

else if (pid == 0) { /* child process */

execlp("/bin/ls", "ls", NULL);

else { /* parent process */

/* parent will wait for the child to complete */

wait (NULL);

printf ("Child Complete");

exit(0);

)3( ‫برانمج‬

275
‫خمرج الربانمج أعاله سيكون كما يلي‪:‬‬

‫جند عبارة ‪ Hello 2‬تظهر ‪ 12‬مرة‪ ،‬و ‪ Hello 1‬تظهر ‪ 8‬مرات‪ .‬ذلك ألن ‪ fork‬يف الدالة )(‪ funct‬تولد‬
‫نسختنني من التكرار ‪ .for‬ترتيب هذه العبارات غري حمدد وقد خيتلف من مرة ألخرى‪ .‬الرسم التايل يوضح خطوات‬
‫التنفيذ‪.‬‬

‫‪276‬‬
‫برانمج (‪)2‬‬

‫أكتب برانمج بلغة ‪ C‬ميثل العملية األب‪ ،‬يقوم إبنشاء عملية إبن مسيها ‪ِ child1‬بستدعاء )(‪.fork‬‬
‫والعملية اإلبن بدورها تنشئ عملية أبن امسها ‪ .child2‬العمليات األبناء هي صور من العملية األب‪ .‬بينما تقوم‬
‫العملية األب حبساب مربع العدد ‪ ،3‬والعملية ‪ child1‬حتسب مربع العدد ‪ِ 4‬بلتزامن مع العملية األب‪ ،‬والعملية‬
‫‪ child2‬تقوم حبساب مربع العدد ‪ .5‬كل العمليات تظهر نتائجها يف الشاشة مباشرة بعد عملية احلساب‪ .‬أتكد من‬
‫إهناء العمليات بطريقة سليمة‪.‬‬

‫;)(‪int pid = fork‬‬

‫{)‪if (pid==0‬‬

‫;)(‪pid=fork‬‬

‫{ )‪if (pid==0‬‬

‫;)‪printf(child 2 %d \n", 3*3‬‬

‫)(‪exit‬‬

‫}‬

‫;)‪printf("child2 %d\n", 4*4‬‬

‫;)(‪exit‬‬

‫}‬

‫‪277‬‬
Printf("parent %d\n", 5*5);

Wait(NULL);}

.‫ توقف تنفيذ العملية احلالية حىت تنتهي العملية اإلبن‬:Wait()

)2( ‫برانمج‬

:‫ما هو خمرج الربانمج التايل‬

int pid=fork()

if (pid==0){

while(1)

printf("child…");

} else {

while(1)

printf("Parent …");}

278
‫ملحق (ج)‪ :‬تغيري اعدادت الذاكرة االفرتاضية يف ويندوز‬

‫نظم التشغيل مثل ويندوز حتجز جزء من القرص الصلب ليستخدم كذاكرة افرتاضية‪ ،‬ويتيح لنا نظام التشغيل إمكانية‬
‫زَيدة أو تقليل هذه املساحة احملجوزة للذاكرة االفرتاضية‪.‬‬

‫ولكن ملاذا نغري حجم الذاكرة االفرتاضية؟ ألن هنالك برامج كبرية ال تكفي الذاكرة االفرتاضية احلالية لتخزينها‪ ،‬أو قد‬
‫تظهر رسالة ختربك أبن الذاكرة االفرتاضية غري كافية‪ .‬ظهور مثل هذه الرسالة هو بسبب أنك أردت تشغيل برانمج كبري‬
‫احلجم وال تكفى الذاكرة االفرتاضية لتشغيله‪ ،‬لذلك عليك زَيدة حجم الذاكرة االفرتاضية جبهازك‪.‬‬

‫اخلطوات التالية توضح كيف ميكنين تغيري مساحة الذاكرة االفرتاضية يف ويندوز ‪:XP‬‬

‫أنقر ميني املاوس على ‪ My Computer‬مث خنتار ‪.Properties‬‬

‫أنقر على التبويب ‪ Advanced‬مث على ‪ Settings‬يف ‪Performance‬‬

‫‪279‬‬
‫من النافذة التالية اختار التبويب ‪ Advanced‬مث ‪Change‬‬

‫‪280‬‬
‫عدل القيمة أمام ‪ِ Initial size‬بمليغاِبيت مث انقر على ‪Set‬‬

‫‪281‬‬
‫التحكم يف الذاكرة االفرتاضية (ويندوز ‪]00[ )02‬‬

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

‫لتغيري اعدادات هذه املساحة من القرص الصلب اليت تستخدم كذاكرة افرتاضية نتتبع اخلطوات التالية‪:‬‬

‫يف سطح املكتب اختار ‪settings‬‬

‫تظهر النافذة التالية‪:‬‬

‫اكتب ‪ performance‬يف مكان البحث مث اختار‪:‬‬

‫‪Adjust the appearance and performance of Windows‬‬

‫‪282‬‬
‫تظهر النافذة التالية‪:‬‬

‫اختار ‪ Advanced:‬مث انقر على ‪:change‬‬

‫‪283‬‬
‫تظهر الشاشة التالية‪:‬‬

‫اذا اردت تغيري املساحة الغي التاكيد مث اتبع الشكل التايل‪:‬‬

‫يف ‪ 5‬و ‪ 4‬أكتب أدىن وأعلى قيمة حلجم ملف الصفحة (‪ ،)pagefile‬مث اعد تشغيل احلاسب‪.‬‬

‫‪284‬‬
‫ حماكاة جدولة املعاجل ِبستخدام جافا‬:)‫ملحق (د‬

‫] وذلك‬00[ ‫ وااتحها يف املوقع‬Dunne ‫يف هذا امللحق سنسرد بعض برامج حماكاة املعاجل اليت صممها‬
.‫ليستفيد منها القاري ويكون قادرا على استخدامها‬

‫ ميكن ملن يريد استخدامها حتميل‬.‫ وهي تعمل بصورة جيدة‬Netbeans ‫متت جتربة هذه الربامج على‬
.]00[‫اكوادها (الشفرات املصدرية) من املوقع املبني يف‬

:‫يتكون برانمج احملاكاة من ملفات هي‬


main.java, scheduler.java, process.java, Queue.java

:)main( ‫الربانمج الرئيسي‬


package cpu_scheduling_algorithms;
public class Main {
public static void main(String[] args){
Scheduler scheduler = new Scheduler;)(
scheduler.add(new Process;))(
scheduler.add(new Process;))(
scheduler.add(new Process;))(
scheduler.add(new Process;))(
scheduler.add(new Process;))(
scheduler.add(new Process;))(
scheduler.add(new Process;))(
scheduler.add(new Process;))(
scheduler.add(new Process;))(
scheduler.add(new Process;))(
scheduler.run;)(
}
}
Main.java

:)process( ‫العمليات‬

/**
* @author Mark Dunne
*/
package cpu_scheduling_algorithms;
import java.util.Random;

public class Process {

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
*/

public class Scheduler {

public static final int PRIORITY_LEVELS = 3;


private final Queue blockedQueue;
private final Queue[] runningQueues;

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);

//create the cpu queues


runningQueues = new Queue[PRIORITY_LEVELS];
for (int i = 0; i < PRIORITY_LEVELS; i++) {
runningQueues[i] = new Queue(this, 10 + i * 20, i, Queue.QueueType.CPU_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;

//work through blocked and cpu processes in parallel

//pass some time on the blocked processes


if (!blockedQueue.isEmpty()) {
blockedQueue.doBlockedWork(workTime);
}

//do cpu work


for (int i = 0; i < PRIORITY_LEVELS; i++) {
Queue queue = runningQueues[i];
if (!queue.isEmpty()) {
queue.doCPUWork(workTime);
break;
}
}

//if no processes left, simulate idle mode

288
if (allEmpty()) {
System.out.println("Idle mode");
break;
} else {
System.out.println(this);
}

//slow the program down for output to be more readable


try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

/**
* 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;

public class Queue extends LinkedList<Process> {

private long quantum;


private long quantumClock;
private Scheduler scheduler;
private int priorityLevel;
private QueueType queueType;

/**
* 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

:‫عند تشغيل الربانمج سيكون املخرج كما يلي‬


run:
2211
2611
4687
3341
4774
9738
1598
4442
7646
7481
[BlockedQueue Size:0][CPUQueue Size: 10][CPUQueue Size: 0][CPUQueue Size: 0]
[BlockedQueue Size:0][CPUQueue Size: 9][CPUQueue Size: 1][CPUQueue Size: 0]
[BlockedQueue Size:0][CPUQueue Size: 8][CPUQueue Size: 2][CPUQueue Size: 0]
[BlockedQueue Size:0][CPUQueue Size: 7][CPUQueue Size: 3][CPUQueue Size: 0]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 6][CPUQueue Size: 3][CPUQueue Size: 0]
[BlockedQueue Size:0][CPUQueue Size: 6][CPUQueue Size: 4][CPUQueue Size: 0]
[BlockedQueue Size:0][CPUQueue Size: 5][CPUQueue Size: 5][CPUQueue Size: 0]
[BlockedQueue Size:0][CPUQueue Size: 4][CPUQueue Size: 6][CPUQueue Size: 0]
Process Blocked!
[BlockedQueue Size:1][CPUQueue Size: 3][CPUQueue Size: 6][CPUQueue Size: 0]
[BlockedQueue Size:0][CPUQueue Size: 3][CPUQueue Size: 7][CPUQueue Size: 0]
[BlockedQueue Size:0][CPUQueue Size: 2][CPUQueue Size: 8][CPUQueue Size: 0]
[BlockedQueue Size:0][CPUQueue Size: 1][CPUQueue Size: 9][CPUQueue Size: 0]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 10][CPUQueue Size: 0]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 9][CPUQueue Size: 1]
[BlockedQueue Size:0][CPUQueue Size: 0][CPUQueue Size: 8][CPUQueue Size: 2]
Process Blocked!

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 ‫توجد صفوف يف مكتبة‬
‫وميكنك استخدام هذه املعلومات ملعرفة حالة برانجمك احلايل أو للحصول على معلومات عن بقية العمليات اليت تعمل‬
.‫اآلن يف جهازك‬

visual basic.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( ‫ كذلك يظهر الربانمج أولوية العملية‬.‫حقيقية وذاكرة ظاهرية ومعاجل‬

:‫أيضا ميكننا معرفة املعلومات عن مجيع العمليات إبنشاء مصفوفة ختزن معلومات كل العمليات ِبلشفرة التالية‬

Dim allProc() as Process

allProc = Process.GetProcesses()

:‫مث نستخدم التكرار لعرض معلومات كل عملية كما يلي‬

Foreach thisProc as Process in allProc

‫أعرض معلومات العملية‬

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
*/

public class CrunchifyProducerConsumer {


private static Vector<Object> data = new Vector<Object>();

public static void main(String[] args) {


new Producer().start();
new Consumer().start();
}

public static class Consumer extends Thread {


Consumer() {
super("Consumer");
}

@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();
}
}
}

public static class Producer extends Thread {


Producer() {
super("Producer");
}

@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
‫املراجع‬

.1 cliparts.co. Transportation Pictures For Kids. 2016 [cited 2016


14 Sep.]; Available from: http://cliparts.co/transportation-pictures-
for-kids.
.2 Museum, C.H. Computer History Museum. 2016 [cited 2016 9
Sep.]; Available from: http://www.computerhistory.org./
.3 REPORTER, D.M. smallest computer that is just 1 SQUARE
MILLIMETRE. 2011 [cited 2016 10 Sep.]; Available from:
http://www.dailymail.co.uk/sciencetech/article-1360339/Scientists-
unveil-worlds-smallest-just-1-MILLIMETRE-square.html.
.4 Engineering, I.f.B.I. Bioinspired Robotics. 2016 [cited 2016 10
Sep.]; Available from:
http://wyss.harvard.edu/viewpage/204/bioinspired-robotics.
.5 Karamian, V. Robotics/Embedded Systems. 2006 [cited 2016 10
Sep.]; Available from:
http://www.codeproject.com/Articles/16165/Robotics-Embedded-
Systems-Part-I.
.6 WikiPedia. Contactless smart card. [cited 2016 10 Sep.];
Available from:
https://en.wikipedia.org/wiki/Contactless_smart_card.
.7 WIKIVERSITY. Computer hardware and software. 2015 [cited
2016 14 Sep.]; Available from:
https://en.wikiversity.org/wiki/Computer_hardware_and_software.
.8 McHoes, A. and I.M. Flynn, Understanding operating systems.
2013: Cengage Learning.
.9 Galvin, P.B., G. Gagne, and A. Silberschatz, Operating system
concepts. 2013: John Wiley & Sons, Inc.
.11 Dauber, K. Memory Hierarchy Locality of Reference Cache. 2015
[cited 2016 10 Sep.]; Available from:
http://images.slideplayer.com/13/4145290/slides/slide_11.jpg.
.11 Island, U.o.R. Data In The Computer. [cited 2016 10 Sep ;].
Available from:
http://homepage.cs.uri.edu/book/binary_data/binary_data.htm.
.12 WIKIBOOKS. Computer Organisation. [cited 2016 10 Sep.];
Available from:
https://en.wikibooks.org/wiki/IB/Group_4/Computer_Science/Com
puter_Organisation.
.13 Callari, F. Types of scheduling 1996 [cited 2016 10 Sep.];
Available from: http://www.cim.mcgill.ca/~franco/OpSys-304-
427/lecture-notes/node38.html.
.14 TutorialsPoint. Operating System - Multi-Threading. [cited 2016
10 Sep.]; Available from:
300
http://www.tutorialspoint.com/operating_system/os_multi_threadin
g.htm.
.15 Tanenbaum, A.S. and H. Bos, Modern operating systems. 2014:
Prentice Hall Press.
.16 WikiPedia. Dining philosophers problem. [cited 2016 10 Sep.];
Available from:
https://en.wikipedia.org/wiki/Dining_philosophers_problem.
.17 TutorialsPoint. Operating System - Security. [cited 2016 13 Sep.];
Available from:
http://www.tutorialspoint.com/operating_system/os_security.htm.
.18 Omar. Computer Security. 2012 [cited 2016 13 Sep.]; Available
from: http://real-sciences.com/?p=1315.
.19 Rawat, K. ‘man-in-the-middle’ attack on data being transfered
over Network. 2012 [cited 2016 13 Sep.]; Available from:
http://www.ritambhara.in/man-in-the-middle-attack-on-data-being-
transfered-over-network./
.21 Is, W. A Distributed Denial of Service (DDoS) [cited 2016 14
Sep.]; Available from:
http://www.dewebsite.org/whatis/ddos_attack.html.
.21 Microsoft. Change the size of virtual memory. 2016 [cited 2016
13 Sep.]; Available from: https://support.microsoft.com/en-
us/help/15055/windows-7-optimize-windows-better-performance.
.22 Dunne, M. A simulation of a CPU scheduling algorithm in Java.
2012 [cited 2016 10 Sep.]; Available from:
https://github.com/MarkDunne/cpu-scheduler.

301

You might also like