الفصل 4.4 - الأولويات وقيم Nice
أهداف التعلم
في نهاية هذا الفصل، ستكون قادرًا على:
- فهم أولويات العمليات
- استخدام قيم nice
- تغيير الأولويات باستخدام nice وrenice
- فهم المجدول في نظام Linux
ما هي الأولوية؟
تحدد أولوية العملية وصولها إلى وحدة المعالجة المركزية. كلما زادت الأولوية، حصلت العملية على وقت أكبر من وحدة المعالجة المركزية.
قيم Nice
المقياس
قيم Nice: -20 إلى +19
- -20: أعلى أولوية (للمستخدم الجذر فقط)
- 0: الأولوية الافتراضية
- +19: أدنى أولوية
القاعدة:
- كلما كانت القيمة أقل = كانت الأولوية أعلى
- كلما كانت القيمة أعلى = كانت الأولوية أقل
عرض الأولوية
# باستخدام ps
ps -o pid,ni,comm
ps aux | head
# العمود NI = قيمة Nice
# العمود PRI = الأولوية الحقيقية (المحسوبة)
# باستخدام top
top
# العمود NI يعرض قيمة nice
تغيير الأولوية
nice - عند البدء
# بدء بوقت أولوية منخفضة
nice -n 10 commande
nice -n +10 commande # نفس الشيء
# بدء بوقت أولوية عالية (للمستخدم الجذر)
sudo nice -n -10 commande
# التحقق
ps -o pid,ni,comm | grep commande
renice - عملية موجودة
# تغيير أولوية عملية
renice 10 PID
# بواسطة المستخدم
sudo renice 10 -u user1
# بواسطة المجموعة
sudo renice 10 -g developers
# بواسطة العملية والأطفال
sudo renice 10 -p PID
أمثلة:
# عملية تستهلك CPU → أولوية منخفضة
renice 15 $(pidof backup_script)
# عملية مهمة → أولوية عالية (للمستخدم الجذر)
sudo renice -10 $(pidof critical_app)
المجدول في نظام Linux (CFS)
المجدول العادل بالكامل
يستخدم المجدول في نظام Linux قيم nice لموازنة وقت CPU:
كيفية العمل:
- قيمة nice أقل = وقت CPU أكثر
- عدالة بين العمليات ذات الأولوية نفسها
- يأخذ في الاعتبار الوقت المستخدم بالفعل
عمليات الوقت الحقيقي
chrt - الوقت الحقيقي
للعمليات التي تحتاج إلى ضمان الوقت:
# عرض السياسات
chrt -m
# تعيين سياسة FIFO
sudo chrt -f 50 commande
# -f: FIFO
# 50: الأولوية (1-99)
# تعيين سياسة Round-Robin
sudo chrt -r 50 commande
# تغيير عملية موجودة
sudo chrt -f -p 50 PID
السياسات:
- SCHED_FIFO: First In First Out
- SCHED_RR: Round Robin
- SCHED_OTHER: عادي (CFS)
انتباه: يمكن لعمليات الوقت الحقيقي احتكار CPU!
أمثلة عملية
السيناريو 1: النسخ الاحتياطي الليلي
# تشغيل النسخ الاحتياطي بأولوية منخفضة جدًا
nice -n 19 backup_script.sh &
# لن يزعج العمليات الأخرى
السيناريو 2: عملية حرجة
# زيادة أولوية عملية مهمة
sudo renice -10 $(pidof database_server)
# ستحصل على وقت CPU أكثر
السيناريو 3: التوازن
# عدة عمليات، التوازن
renice 5 $(pidof app1)
renice 5 $(pidof app2)
renice 5 $(pidof app3)
# جميعها بنفس الأولوية
مراقبة الأولويات
top/htop
# عرض قيم nice
top
# العمود NI
# الترتيب حسب الأولوية
# في top: اضغط على 'r' ثم أدخل PID
ps مع الأولوية
# عرض nice والأولوية
ps -eo pid,ni,pri,comm
# الترتيب حسب الأولوية
ps -eo pid,ni,pri,comm --sort=-pri
ملخص
في هذا الفصل، تعلمت:
قيم Nice: -20 (عالية) إلى +19 (منخفضة)، 0 افتراضيًا
التغيير: nice (عند البدء)، renice (موجود)
المجدول: CFS يوازن حسب قيم nice
الوقت الحقيقي: chrt لضمانات الوقت الحقيقي
المراقبة: ps, top لعرض الأولويات
العملي: التعديل حسب أهمية العملية
الخطوات التالية
الفصل 4.5: العمليات والموارد
الفصل 4.6: الوظائف والمهام في الخلفية
تم إنشاء الفصل في: ديسمبر 2024