انتقل إلى المحتوى الرئيسي

الفصل 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