CS330 - أنظمة التشغيل
نماذج الخيوط المتعددة، الفوائد، والتطبيق
الخيط هو وحدة أساسية لاستغلال المعالج. ويسمى أيضًا عملية خفيفة الوزن. يتكون الخيط من معرف الخيط، عداد البرنامج، مجموعة المسجلات، والمكدس.
| النوع | الوصف | الخصائص |
|---|---|---|
| عملية ثقيلة الوزن | عملية تقليدية بخيط واحد | مسار تحكم واحد |
| عملية خفيفة الوزن | اسم آخر للخيط | وحدة أساسية لاستغلال المعالج |
| عملية متعددة الخيوط | عملية بخيوط متعددة | خيوط متعددة تشارك موارد العملية |
[إدراج مخطط يوضح هيكل عملية أحادية الخيط مقابل متعددة الخيوط]
الخيوط داخل نفس العملية تشارك الذاكرة والموارد، مما يجعل التواصل بين الخيوط فعالاً ولكنه يتطلب مزامنة دقيقة لتجنب حالات السباق.
تسمح للبرنامج بالاستمرار في العمل حتى لو كان جزء منه محجوبًا. مثال: متصفح الويب يسمح بتفاعل المستخدم في خيط بينما يتم تحميل الصور في خيط آخر.
الخيوط تشارك الذاكرة والموارد للعملية التي تنتمي إليها. أسهل من الذاكرة المشتركة أو تمرير الرسائل بين العمليات.
إنشاء الخيوط أسرع من إنشاء العمليات. تبديل السياق بين الخيوط له عبء أقل. في Solaris، إنشاء عملية أبطأ ٣٠ مرة من إنشاء خيط.
يمكن الاستفادة من معماريات متعددة المعالجات. خيوط متعددة يمكن أن تعمل بالتوازي على وحدات معالجة مختلفة. عملية أحادية الخيط يمكن أن تعمل فقط على معالج واحد.
س: اذكر الفوائد الأربع الرئيسية للبرمجة متعددة الخيوط.
الإجابة:
الخيوط متداخلة عبر الزمن
الخيوط تعمل في وقت واحد على نوى مختلفة
| الجانب | التزامن | التوازي |
|---|---|---|
| التعريف | مهام متعددة تتقدم | مهام متعددة تُنفذ في وقت واحد |
| العتاد | يمكن العمل على نواة واحدة | يحتاج نوى متعددة |
| التنفيذ | تنفيذ متداخل | تنفيذ متزامن |
يوزع مجموعات فرعية من نفس البيانات عبر نوى متعددة، نفس العملية على كل مجموعة.
مثال: جمع عناصر مصفوفة - تقسيم المصفوفة إلى أجزاء، جمع كل جزء بالتوازي.
توزيع الخيوط عبر النوى، كل خيط يقوم بعملية فريدة.
مثال: خادم ويب - خيط يتعامل مع الطلبات، آخر يعالج البيانات، آخر يحدّث السجلات.
خيوط تُدار بواسطة مكتبة خيوط على مستوى المستخدم، وليس في النواة. تُجدول بواسطة مكتبة الخيوط.
| المزايا | العيوب |
|---|---|
|
|
أمثلة: POSIX Pthreads, Java threads, Win32 threads
كل إدارة الخيوط تتم بواسطة النواة نفسها. النواة تقوم بالإنشاء والجدولة والإدارة.
| المزايا | العيوب |
|---|---|
|
|
أمثلة: ويندوز، لينكس، ماك أو إس، iOS، أندرويد
س: أحد عيوب خيوط المستخدم مقارنة بخيوط النواة هو:
أمثلة: Solaris Green Threads, GNU Portable Threads
أمثلة: ويندوز، لينكس
أمثلة: Solaris قبل الإصدار ٩، ويندوز مع ThreadFiber
مشابه لـ M:M، لكنه يسمح بربط خيط مستخدم بخيط نواة.
أمثلة: IRIX, HP-UX, Tru64 UNIX, Solaris ٨ والإصدارات الأقدم
مكتبة الخيوط توفر للمبرمج واجهة برمجة لإنشاء وإدارة الخيوط.
| الدالة | الوصف |
|---|---|
pthread_create() |
إنشاء خيط جديد |
pthread_join() |
انتظار إنهاء الخيط |
pthread_exit() |
إنهاء الخيط الحالي |
pthread_attr_init() |
تهيئة سمات الخيط |
pthread_self() |
الحصول على معرف الخيط الحالي |
pthread_equal() |
مقارنة معرفي خيطين |
عندما تستدعي عملية متعددة الخيوط fork():
الأنظمة المختلفة تتعامل مع هذا بشكل مختلف. exec() عادةً تستبدل العملية بأكملها.
أين يجب تسليم الإشارة؟
| النوع | الوصف | المشكلات |
|---|---|---|
| غير متزامن | إنهاء الخيط المستهدف فورًا | قد لا يتم تحرير الموارد، قد تكون البيانات غير متناسقة |
| مؤجل | الخيط المستهدف يتحقق من علامة بشكل دوري | أكثر أمانًا لكن يحتاج تعاونًا |
يسمح لكل خيط بأن يكون له نسخته الخاصة من البيانات. مفيد عندما لا تتحكم في عملية إنشاء الخيط.
إنشاء عدد من الخيوط عند بدء التشغيل ووضعها في تجمع حيث تنتظر العمل.
س١. أي مما يلي لا تشاركه الخيوط؟
س٢. عملية لها مسارات تحكم متعددة يمكنها أداء أكثر من مهمة في وقت واحد. هذا يسمى:
س٣. في نموذج الخيوط متعدد إلى واحد، إذا نفذ خيط استدعاء نظام محجوب:
س٤. إنشاء الخيط هو:
س٥. تأمل مقطع الكود هذا. كم عدد العمليات والخيوط الفريدة التي تم إنشاؤها؟
س٦. في نظام متعدد المعالجات بنموذج خيوط متعدد إلى متعدد، ناقش الأداء عندما:
أ) عدد خيوط النواة < عدد المعالجات
ب) عدد خيوط النواة = عدد المعالجات
أ) بعض المعالجات تبقى خاملة لأن الجدول يربط خيوط النواة فقط بالمعالجات، وليس خيوط المستخدم.
ب) يمكن استخدام كل المعالجات في وقت واحد. لكن إذا انحجب خيط نواة (خطأ صفحة، استدعاء نظام)، يصبح المعالج المقابل خاملاً.
س٧. ما الفرق بين التزامن والتوازي؟
| المصطلح | التعريف |
|---|---|
| خيط | وحدة أساسية لاستغلال المعالج؛ عملية خفيفة الوزن |
| تعدد الخيوط | قدرة نظام التشغيل على دعم خيوط متعددة في عملية واحدة |
| خيط مستخدم | خيط يُدار بواسطة مكتبة على مستوى المستخدم بدون دعم النواة |
| خيط نواة | خيط يُدار مباشرة بواسطة نواة نظام التشغيل |
| تجمع خيوط | مجموعة من الخيوط المنشأة مسبقًا تنتظر العمل |
| TLS | تخزين محلي للخيط - تخزين بيانات لكل خيط |
| pthread | مواصفة مكتبة خيوط POSIX |
| التزامن | مهام متعددة تتقدم (ربما متداخلة) |
| التوازي | مهام متعددة تُنفذ في وقت واحد |
| حالة السباق | عندما تعتمد النتيجة على توقيت أحداث غير متحكم فيها |
[إدراج مخطط من Chapter_4.pdf صفحة ٦]
[إدراج مخطط يوضح فصل مساحة المستخدم/النواة]
[إدراج مخطط هيكل الخادم من الشرائح]
[إدراج نماذج متعدد إلى واحد، واحد إلى واحد، متعدد إلى متعدد]
ملاحظة: يرجى توفير المخططات الفعلية من شرائح Chapter_4.pdf لاستبدال هذه العناصر النائبة.