2. Outlines
مقدمة في نظم التشغيل
Multithreading لماذا نحتاج إلى تعدد النياسب
Multithreaded كيف نقوم بإنشاء تطبيقات متعددة النياسب
)Thread Terminatation( إيقاف نيسب
Background Threads النياسب التي تعمل في الخلفية
Thread Class
05 2 تشرين الثاني، 14
3. مقدمة في نظم التشغيل
هي برنامج قيد التنفيذ . : Process المهمة
كيف يقوم النظام بتشغيل أكثر من برنامج بنفس الوقت ؟
جدولة المهام .
الشرائح الزمنية .
Code
Segment
Data
Segment
Stack
Segment
Heap
Segment
05 3 تشرين الثاني، 14
4. مقدمة في نظم التشغيل
)Stack( هو عبارة عن مسلك برمجي مستقل في المكدس :)Thread( تعريف النيسب
بعبارة أخرى : هو سياق من التعليمات , )Heap( ويشترك مع غيره من النياسب في الكومة
التي نريد تنفيذها على التوازي مع غيرها من التعليمات الأخرى.
مجموعة من السجلات الخاصة + Stack في الحقيقة كل نيسب هو عبارة عن
. )PC( بما فيها عداد البرنامج
واحد على الأقل . Thread تحوي )Process( كل مهمة
هي من مهمة نظام التشغيل . )Processes Management( إدارة المهام
فهي من مهمة المبرمج . )Threads Management( أما إدارة النياسب
جدولة النياسب , وجدولة المهام .
05 4 تشرين الثاني، 14
5. Multithreading لماذا نحتاج إلى تعدد النياسب
)Executing in Background( التنفيذ في الخلفية
إنجاز مهمة اكثر من مرة لتسريع العمل
استغلال أمثل للموارد المتاحة ) في تنفيذ برنامج لمعالجة صورة معينة يمكن تقسيم العمل على أكثر من نيسب
.)SMP حال وجود بنى
تعدد النياسب هو الطريقة الطبيعية لبناء نوع محدد من البرامج
المخدمات بكافة أنواعها .
05 5 تشرين الثاني، 14
6. Multithreaded كيف نقوم بإنشاء تطبيقات متعددة النياسب
هو مجموعة من التعليمات التي يتم تنفيذها على التوازي )Thread( علمنا إلى الآن أن النيسب
مع بقية البرنامج .
إلى مفوض )أو مندوب يُسمى Method يتم تمرير اسم هذا ال Method هذه التعليمات تمُثل
. Thread وهذا المندوب يتم تسليمه إلى غرض من الصف )Delegate
هي مفوض عن مجموعة من التوابع التي تحمل نفس التوقيع . : Delegate
05 6 تشرين الثاني، 14
7. )Thread Terminatation( إيقاف نيسب
كيف يتم إيقاف النيسب ومتى يتنهي عمله؟
. Abort() إيقاف النيسب بشكل قسري عن طريق المنهج
هذه الطريقة غير مُحبذة .
05 7 تشرين الثاني، 14
8. Background Threads النياسب التي تعمل في الخلفية
)Background( والتي تعمل في الخلفية )Processes( نظام التشغيل يستعمل مجموعة من المهام
خدمات ويندوز" أما في نظام " )Windows Services( وتسمى في نظام ويندوز باسم
. daemons فتسُمى Linux/Unix
المهام التي تعمل في الخلفية يكون لها أفضلية أقل من المهام التي تعمل في الأمام .
نفس الفكرة يمكن تطبيقها على النياسب حيث يمكننا أن نجعل نيسب معين يعمل في الخلفية.
والتي IsBackground عن طريق الخاصية )Background( يمكن أن نجعل نيسب ما يعمل في الخلفية
.true يتم ضبطها بالقيمة
.)forground( عند إنتهاء أخر نيسب أمامي )Background( تنتهي النياسب الخلفية
05 8 تشرين الثاني، 14
9. Thread Class
نيسب في مستوى نظام التشغيل . System.Threading.Thread يمثل الصنف
:Thread أهم الخصائص الموجود في الصنف
الخا ية الو ف
إلى النيسب المنفذ الي ا . )Reference ( تعيد مرجع CurrentThread
إذا كان النيسب قد بدأ ولم ينتهي بعد . true تعيد IsAlive
إذا كان النيسب يعم ي الخلفية . true تعيد ISBackground
اسم النيسب. )set or get( تعيد أو ت دد Name
أ لية النيسب. )set or get( تعيد أو ت دد Priority
الة النيسب. )set or get( تعيد أو ت دد ThreadState
05 9 تشرين الثاني، 14
10. Thread Class
:Thread أهم المناهج الموجود في الصنف
الو ف )method( ال ريقة
البدأ بتنفيذ بتنفيذ النيسب Start
تنهي تنفيذ النيسب ب ك وري. Abort
waitSleepJoin تقا ع النيسب الذي يكون ي الة Interrupt
إنت ار نيسب معين )النيسب ال مستدعي لهذا المنه ( تى ينتهي تنفيذ
هذا النيسب.
Join
إيقاف م قت-( -pause( إرجا عم النيسب لفترة ير م دودة Suspend
)Suspend( تب عم التابع السابق Resume
تنوم النيسب لفترة م ددة . Sleep
05 10 تشرين الثاني، 14
11. ThreadState مىTلمُس hا )Ernuem(a داد d ن التع Sضم t دةa وجو tم eهي s حل اكل لانيسب ت حا اللة نأيو عد سة حا بلا ت و
القيمة
النيسب يعم ا ن Running
)Abort( النيسب قد استقب ا ارة إيقاف StopRequested
)pause( النيسب قد استقب ا ارة إيقاف م قت SuspendRequested
النيسب يعم ي الخلفية Background
Start() النيسب تم إن ا ولكن لم يتم تنفيذ المنه Unstarted
النيسب تم إيقا ه ) ( Stopped
.Join Sleep أو wait النيسب متوقف ن استدعا WaitSleepJoin
النيسب متوقف ب ك م قت Suspended
يتنق النيسب إلى هذ ال الة عندما نكون قد استدعينا المنه AbortRequested
للنيسب. ولكن هذا النيسب لم يستقب بعد إ ارة ا يقاف Abort
)ThreadAbortException( والتي يتم التعبير عنها با ست نا
والذي ينهي عم هذا النيسب.
و النيسب قد توقف)مات( )AbortRequested( نف ال الة السابقة Aborted
.Stopped ولكن اته لم تت ير إلى ال الة
05 11 تشرين الثاني، 14
12. Thread Priority
)Process( لكل نيسب أفضلية)أولوية( بالنسبة لغيره من النياسب التي تشترك معه في نفس المهمة
.Normal يتم إنشاء جميع النياسب بأفضلية
القيمة الو ف
النيسب له ا لية العليا Highest
النيسب له أ لية أعلى من النيسب العادي AboveNormal
النيسب له أ لية عادية Normal
النيسب له أ لية أدنى من النيسب العادي BelowNormal
النيسب له ا لية الدنيا Lowest
05 12 تشرين الثاني، 14
13. Concurrency التنافس على الموارد
ذات فوائد عظيمة جد ا )Multithreaded Application ( التطبيقات متعددة النياسب
إدارة النياسب ليس أمرا سهلا أبدا .
إذا حاول نيسبان العمل على غرض مشترك في الذاكرة فإن النتائج ستكون خا ئة .
يجب التعرف على مفهومين أساسين لحل مشاكل التنافس على الموارد :
)Critical Sections( المقا ع ال رجة
وهي طريقة لتحقيق دخول نيسب وا د إلى المقطع الحرج. :)Lock( القف
ملا ات :
يجب علينا الحذر عند استعمال القفل بحيث نقفل أصغر جزء من الكود )الشيفرة( التي نحتاج إلى حمايته ضمن البرنامج .
وسنراها على نطاق )Processes( هذه الأفكار هي موجودة ومطبقة من قبل نظام التشغيل ولكن على نطاق المهام
النياسب .
05 13 تشرين الثاني، 14
14. استخدام المقاطع الحرجة والقفل
Lock
{
read value from DB
update value in RAM
writing value to DB
}
05 14 تشرين الثاني، 14
15. استخدام المقاطع الحرجة والقفل
Static int [] arr=new int [10];
Static int index++;
if (index>=10)
return;
Console.WriteLine(arr[index]);
05 15 تشرين الثاني، 14
16. Threads Synchronization التزامن بين النياسب
نحتاج إلى المزامنة بين النياسب لسببين هما:
استخدام موارد م تركة
)Concurrency( التواقت
Thread B
Globalx=4
Thread A
Globalx=3
//call function
Func(Globalx );
05 16 تشرين الثاني، 14
17. Synchronization Implementation تحقيق التزامن
مسألة ولوج أكثر من نيسب على حساب مصرفي والقيام بعمليات سحب مال من الرصيد .
سنقوم بعرض المثال مرة من دون تزامن و مرة مع تزامن .
فقط نيسب واحد في لحظة ما يدخل إلى المقطع الحرج )يضع قفل على الغرض وبقية النياسب تكون في حالة انت ار(.
بعد أن ينتهي هذ النيسب من تنفيذ كامل المقطع الحرج )والذي يم مناقلة كاملة( يقوم بت رير القف .
م يقوم ن ام الت ي بإختيار أحد النياسب التي ي الة إنت ار للدخول في المقطع الحرج.
05 17 تشرين الثاني، 14
18. Synchronization Classes أصناف التزامن
لتقديم )Safe( آمنة )method( يحتوي هذه الصنف على مناهج : Interlocked ال ف
العمليات ا منة على المتحولات المشتركة بين عدة نياسب.
إما )Transaction( أي أن المنهج هو عبارة عن مناقلة )atomic( هذه المناهج هي ذرية
أن تتم ب ك كام دون مقا عة من المعال أو أن لا تتم أبد ا .
من هذ المناه :
Decrement - Increment
يضع قيمة في مت و ويعيد القيمة ا لية )القديمة( للمتحول. :Exchange
: CompareExchange
05 18 تشرين الثاني، 14
19. Parallel Programming Example
n/p نيسب حيث يقوم كل نيسب بجمع الأعداد من 1 p ولدينا , n جمع الأعداد من 1
05 19 تشرين الثاني، 14
20. Semaphore Class
في مستوى )Processes( السيما ور : هو عبارة عن طريقة لتحقيق التزامن بين المهام
نظام التشغيل , يمكن أيض ا استعماله لتحقيق التزامن بين النياسب .
من )Pool( عبارة عن رقم يُمثل عدد م دود من النياسب التي تست يع ال و على مورد م ترك" أو ) وض
الموارد التي يتم التنا عليها من قِبَ أك ر من نيسب(.
مثال الطابعة .
لاحظة ه ة: قيمة السيمافور هي عدد كبر ي ي صفر ويعبر عن عدد
س التي تستطيع أن تحص على م رد ب شرة ن د ن إ تظ ر.
05 20 تشرين الثاني، 14
21. Mutex Class (Mutual Exclusion)
طريقة بسيطة للتزامن بحيث يسمح لنيسب وا د بالدخول إلى )Mutex( يعطي هذا الصف
المقطع الحرج مع إستبعاد البقية )بقية النياسب تبقى في حالة إنتظار إلى أن يقوم هذا النيسب بت رير
. )Mutex ا
.)Lock - unlock( آلية Mutex يستعمل ال
05 21 تشرين الثاني، 14
22. في شيفرة برنامجك )Deadlock( كيف يمكن أن تتجنب حدوث الإقفال المتبادل
عندما كل من النيسبين بحاجة إلى معطيات من الأخر )Two Threads( يحدث بين نيسبين
حتى يكمل عمله.
هذه المشكلة تعُتبر من أعقد المشاكل التي واجهت مصمي نظم التشغيل.
هي من مس ولية المبرم . )Threads( و لكن حلها على مستوى النياسب )Processes( تم لها على مستوى المهام
أيض ا . Mutex وعن إستخدام ال Locks عن إستخدام الأقفال )DeadLock( في الحقيقة تنتج هذه المشكلة
ن صع جد تصم م تطب ق تعددة س ح ث لا تحدث ف حلق فرغة
.)DeadLocks(
05 22 تشرين الثاني، 14
23. Monitor Class
قفليتم الحصول عليه من قبل نيسب واحد. .NET في )object( لكل كائن
يمللك المزايا التالية: Monitor الصف
عند الطلب . )Monitor( -1 مرتبطة بغرضويتم الحصول على المراقب
-2 غير مقيد. أي يمكن استدعائه في أي مكان ضمن الكود .
-3 لا يمكن إنشاء غرضمن هذا الصنف .
من أجل كل غرض متزامن )يتم الوصول إليه من أكثر من نيسب(:
نيسب وحيد يملك القفل .
يحوي النياسب التي تنتظر أن يختارها المعالج لكي تحصل على القفل مع :)Ready Queue( رت جاهزية
استبعاد بقية النياسب
يحوي النياسب التي في حالة إنتظارإشارة إيقاظ من نيسب أخر لتستعيد : )Waiting Queue( رت إنت ار
الحصول على القفل.
05 23 تشرين الثاني، 14