مبادئ أجزاء انظمة التشغيل 2 – process

الثلاثاء-10-2008

الجزء الثانى من هنا فى  linuxac : http://www.linuxac.org/forum/showthread.php?p=145722

فى الجزء السابق تعرفنا الى ماهى registers وماهى اهم ال registers الموجوده والتى تعتبر شئ حيوى جدا والجزء التالى بعد هذا قد يتأخر بسبب بعض ظروف لى , أدعولى

ننتقل الان الى اول جزء وهو البداية الحقيقة وهو process و threads واعتقد ان هناك اكثر من مقال تتكلم عن كيفية تنفيذ هذا عمليا عن طريق الـ c او c++ او حتى باثون وهى – كما رأيت – صغيره ولن يصعب تنفيذها ,

شئ أخر كلمة نظام تشغيل هنا تعنى غالبا kernel

أولا : processes: بكل بساطه هى البرنامج الذى تقوم بتشغيه .

ولكن الامر لايتوقف عند هذا بل هناك اعتبارات أخرى مثل

– IPC او InterProcessCommunications بالعربية طرق الاتصال الداخلية بين البرامج

– Process hierachy بالعربية : شجرة تنظيم الـبرامج ( اقصد البرنامج الذى تم تحميله فى الذاكره فعليا وبدأ فى العمل وليس مجرد البيانات )

– Process state : حالة البرنامج من حيث التشغيل

– Process schedule : جدول تنظيم البرمج

واشياء أخرى سوف نتعرف لها وسوف نبدا من اخر نقطة :

Process schedule كبداية بسيطه لتعطينا فكره عن بداية سير الأمور

اذا فرضنا ان لدينا جهازى يحتوى على ثلاثة برامج (process) ولنقل مثلا screen و emerge –sync و genkernal all , للعلم فقط : اخر امرين خاصين فقط بتوزيعة جنتو

كيف تعمل تلك الثلاثة اوامر معا على معالج واحد ؟

السر يكمن فى عمليه Time Division او تقسيم الوقت , ولنقل أن نظام التشغيل سوف يبدأ بتشغيل screen الى فتره زمنية من الوقت

ويقوم نظام التشغيل بإتاحة كافة موارد الجهاز – Computer Resources- ابتداءا من الذاكره وصولا الى لوحة المفاتيح الى البرنامج الذى يعمل الان حاليا

وبعد إنتهاء فترة تلك البرنامج التى حددها له النظام يقوم بحفظ معلومات تلك process مثل ProgrameCounter و StackPointer و جميع محتويات الـ registers التى استخدمتها process و state و رقم البرنامج process id و رقم الاب parent process id و id الذى قام بتشغيله و اطفاله process children وايضا اين تبدا بياناته المسجله فى الذاكره وغير ذلك من المعلومات الضخمة – غالبا عنما يكون النظام مكتوب بلغة سىC – تقوم لغة السى بإستدعاء كود assemply  – لغة التجميع – لتقوم هى بهذة المهمه حيث ان هذة كلها أشياء تتم علىمستوى low level ويصعب عملها عن طريق لغة C وبعد اداء المهمة تعود السيطره مرة اخرى الى المستوى الاعلى – لغة الـ C

وبعد ذلك ينتقل الـOperatingSystem الى البرنامج التالى ,وهو emerge –sync ويقوم بتشغيله الى ان ينتهى وقته المحدد ويتم تخزين معلوماته ايضا ثم البرنامج الثالث وهكذا

الى أن يحين الدور على البرنامج screen مرة أخرى فى العمل يبدأ نظام التشغيل بإعادة كل شئ كما كان وكل قيمة الى مكانها التى أخذت منه PC و PID و PPID و  bla bla bla كما قلنا عن طريق assemply

بحيث أنه عندما يعمل screen مرة أخرى فلن يشعر باى فرق بل سوف يستكمل عمله بطريقة طبيعية جدا جدا ( برنامج أحمق اليس كذلك 😀 )

ولكن الامر لايحدث بطريقة دورية كما تتصور ,

لنقل مثلا أنى أقوم بعمل Compile لشئ كبير جدا جدا وأريد برنامج make ان يقوم باستغلال الحاسوب أكبر وقت ممكن ؟

الموضوع بسيط , هناك شئ يرتبط بالـ process يسمى priority او الاولوية وفى لينكس غالبا يطلق عليه ( process niceness )  أى أنك تعطى ذلك البرنامج اولوية اكبر بحيث مثلا : يتم تشغيله خمس مرات بينما هناك برامج أخرى – ذات أولوية أقل – لم يتم تشغيلها سوى مرتين فقط وأخرى لم يتم تشغيلها مطلقا وهكذا دواليك

process state: هنا حيث نصف ما يتم من تغيير  شئ يسمى process state وهى حالة البرنامج , حالة البرنامج من حيث العمل او التوقف وهى ثلاثة أشياء ready || blocked || running

ومثال عملى سوف يوضح كل شئ : وسوف نستعير الامر التالى من الاخوه عباقرة الشل , أمر كالتالى  cat /etc/passwd  | wc -l لمعرفة كم مستخدم (نشط وغير نشط ) لديك على نظامك

أولا يتم انشاء الـ process cat و wc ولكن wc تحتاج الى input – مدخلات او بيانات – لكى تعمل عليها

ولذلك يقوم نظام التشغيل بعمل block لـ wc -اى أنها لن تعمل – حتى يصل interrupt – لنقل انها طريقة يفهم بها البرنامج ان ما ينتظره قد وصل فعلا – الى process

ويقوم نظام التشغيل بتغير حالة process الى ready لكى تدخل فى دورة التشغيل السابق الاشارة إليهاويعلم النظام أنها جاهزه فعلا للعمل

وعندما ياتى دورها للعمل وتصبح فعلا تعمل تكون حالتها running

Process hierachy : تفريعة البرامج او شجرة البرامج

لو قلنا لشخص ما ماهى شجرة عائلتك ؟ سوف يجيب قائلا أنا فلان الفلانى ووالدى الاستاذ كذا ووالد والدى الحاج كذا حتى يصل الى ما يستطيع من الاجداد – grand father –

البرامج ايضا لها عائلة – وصدقنى عائلة كبيرة جدا جدا – وعندما تقوم بعمل fork – fork  دالة فى لغة الC تقوم بعمل process جديدة – تقوم fork بعمل process جديدة لها نفس صفات الـprocess الحالية تماما ولكنها بالتاكيد منفصله عنها حيث تأخذ دورها فى دورة التنفيذ بطريقة عادية جدا وبالتالى يكون لها PC و ProcessIdentity PID , منفصل ولكن عندما تسألها من هو ابوها سوف تخبرك برقم process التى قامت بعمل fork لها هى – هنا طبعا لا يستطيع الاب الإنكار 😀 –

وسوف تجد ان الـ init هو صاحب PID – هو رقم process المميز وهو رقم خاص بكل برنامج ولا يتكرر أبدا أبدا – رقم 1 ومنه تنبثق باقى الـ processes

يمكنك تجربة الامر top من خلال terminal لرؤية جميع process التى تعمل على حاسوبك , PID الخاصة بها PPID   – PID الخاص بالاب –  بعد تشغيل البرنامج اضغط على حرف h وسوف تجد تعليمات سوف تساعدك فى اكتشاف الكثير

واعتقد ان هناك اعضاء فى linuxac فى البرمجه قد اوغلوا كثيرا ووصلو الى كل هذة الاشياء منذ زمن وقد يفيدونا أيضا بدرجه كبيره

أعتقد أنى أصبت بصداع

هنا ينتهى الجزء الثانى والمرة القادمة إن شاء الله سوف نتناول  threads و مشاكلها وقد نتعرض ثانية لموضوع schedule و  interupts

الرخصة : Creative Commons

المرجع الاول هنا هو : كتاب Modern Operating Systems By Andrew Tanenbum 2nd ED وبعض المقالات الاخرى سوف أشير اليها فى مقال منفصل لا حقا

Advertisements

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: