Submitted by SamehRagheb on Thu, 08/07/2004 - 14:57.

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

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

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

USER       PID %CPU %MEM  SIZE   RSS TTY STAT START   TIME COMMAND
root         1  0.1  8.0  1284   536   ? S    07:37   0:04 init [2] 
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 لمزيد من المعلومات :

Linux Documentation Project's ``The Linux Kernel''

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