Skip to Content

8 العفاريت

برامج الخدمات الخلفية - العفاريت (Deamons)

و هى برامج (العفريت) التى تدور فى الخلفية و تستجيب للأحداث الخارجية (مثل : الفارة و لوحة المفاتيح)

إذا حاولت تشغيل أمر ps aux سترى شيء كالأتى:

USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND root 2 0.0 0.0 0 0 ? SW 07:37 0:00 (kflushd) root 3 0.0 0.0 0 0 ? SW 07:37 0:00 (kupdate) root 4 0.0 0.0 0 0 ? SW 07:37 0:00 (kpiod) root 5 0.0 0.0 0 0 ? SW 07:37 0:00 (kswapd) root 52 0.0 10.7 1552 716 ? S 07:38 0:01 syslogd -m 0 root 54 0.0 7.1 1276 480 ? S 07:38 0:00 klogd root 56 0.3 17.3 2232 1156 1 S 07:38 0:13 -bash root 57 0.0 7.1 1272 480 2 S 07:38 0:01 /sbin/agetty 38400 tt root 64 0.1 7.2 1272 484 S1 S 08:16 0:01 /sbin/agetty -L ttyS1 root 70 0.0 10.6 1472 708 1 R Sep 11 0:01 ps aux

و هذا عبارة عن قائمة بالعمليات الجارى تنفيذها على النظام . المعلومات تأتى من نظام الملفات /proc التى ذكرناها فى الفقرة السابقة . لاحظ إن ال init هو العملية رقم واحد . العمليات رقم 2 و 3 و 4 و 5 هم kflushd, kupdate, kpiod and kswapd على الترتيب . على الرغم من هذا يوجد شيء غريب هنا : لاحظ أن فى كل من أعمدة حجم التخزين الإفتراضى و و أعمدة حجم التخزين الحقيقى , تحتوى على أصفار . كيف لعملية ألا تستخدم ذاكرة ؟

معظم برامج الخدمات الخلفية (Deamons) لا تبدى قوائم العملبات بالمرة . و لا يمكنك حساب الذاكرة التي تستخدمها النواة إلا عن طريق طرح الذاكرة المتاحة من حجم الذاكرة الكلى على جهازك . برامج الخدمات الخلفية (Deamons) تبدإ بعد ال init . لذا تحصل على ارقام عمليات تماما مثلما تفعل العمليات العادية , و لكن يبقى الكود و المعلومات الخاصة بها فى الجزء الخاص بالنواة فى الذاكرة .

يوجد أقواس حول المداخل فى عمود الأوامر لأن نظام الملفات /proc لا يحتوى على معلومات سطر الأوامر لهذه العمليات .

إذن , لأى غرض تستخدم برامج الخدمات الخلفية (Deamons) ؟ - الإصدارات السابقة من هذا المستند إحتوت على طلب للمساعدة , حيث أنى لا أعلم الكثير عن برامج الخدمات الخلفية (Deamons) . القصة القصيرة القادمة تم تجميعها من مختلف الردود لهذا الطلب , التى أمتن لها كثيرا . أرحب الحلول و المراجع و التصحيحات الإضافية.

الإدخال و الإخراج تتم عن طريق مناطق تخزين مؤقت (Buffer) فى الذاكرة . هذا يتيح للأشياء أن تنفذ أسرع . ما تكتبه البرامج يمكن حفظها فى الذاكرة قى (Buffer) ثم كتابتها على القرص فى قطع أكثر فعالية . يتولى هذا العمل كل من daemons kflushd and kupdate : kupdate يتم تنفيذه دوريا كل 5 ثوان للتحقق من وجود Buffers تم الكتابة عليها . إذا وجد , يحضر kflushd لكتابتهم على القرص .

العمليات عادة لا تجد ما تفعله , و هؤلاء الذين يتم تنفيذهم غالبا لا يكون هناك داعى لوجود الكود و البيانات الخاصة بهم فى الذاكرة . هذا يعنى أنه يمكنك أن تستغل ذاكرة جهازك بشكل أفضل ., عن طريق تبديل الأجزاء الغير مستخدمة من البرامج التى يتم تنفيذها و نقلها إلى قسم الذاكرة الإفتراضية (Swap Partition) من القوس السابق . تحريك هذه البيانات من و إلى الذاكرة حسب الحاجة يتم عن طريق kpiod and kswapd . كل ثانية ( أو ما إلى ذلك) kswapd يصحو للتحقق من حالة الذاكرة و ما إذا كان هناك شىinit script (/etc/rc.sysinit or /etc/rc.d/rc.sysinit)ء على القرص يجب إستدعاؤه للذاكرة و ما إذا كان هناك ذاكرة خالية كافية و يتم إستدعاء kpiod .

قد يكون أيضا هناك kapmd daemon تعمل على النظام إذا كنت قد نسقت إدارة الطاقة (Power Managemnet) أوتوماتيكيا فى النواة.

8.1 التنسيق :

تحديث البرنامج يسمح لك بتنسيق kflushd and kswapd . جرب update -h لمزيد من المعلومات.

يتم فتح مساحة الذاكرة الإفتراضية عن طريق swapon و غلقها عن طريق swapoff . سكريبت ال etc/rc.sysinit or /etc/rc.d/rc.sys) init) عادة ينادى swapon عند بداية النظام . علمت أن swapoff مفيد لحفظ الطاقة على الأجهزة المحمولة .

8.2 تمارين :

نفذ update -d لاحظ الحماقات فى السطر الأخير حول threshold for buffer fratricide . الأن يوجد مبدأ مخادع . إذهب إستثمر.

غير المجلد الحالى إلى /proc/sys/vm و إستخدم cat أمر لفتح الملفات هناك . أنظر ما يمكنك أن تفعل.

8.3 لمزيد من المعلومات :

المصدر البرمجى لنواة اللينوكس , إذا كانت لديك الشجاعة الكافية , كود ال kswapd موجود فى linux/mm/vmscan.c و kflushd and kupdate فى linux/fs/buffer.c .



Dr. Radut | book