| 
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • You already know Dokkio is an AI-powered assistant to organize & manage your digital files & messages. Very soon, Dokkio will support Outlook as well as One Drive. Check it out today!

View
 

system call

Page history last edited by PBworks 16 years, 3 months ago
السلام عليكم ورحمة الله وبركاته
 
أولا: استدعاء النظام(system calls):
 
هو السطح البرمجي للخدمات التي يقدمها نظام التشغيل.
وعادة ماتكتب بلغة رفيعة المستوى(high-level language ) مثل السي والسي بلس بلس(C or C++)
*كما أستطيع الانتقال من أسلوب المستخدم(user mode) إلى أسلوب لب النظام (kernal mode) من خلال استدعاء النظام.
على سبيل المثال أمر الطباعة من المستخدم, يعمل  استدعاء النظام(system call)على  ربط أمر الطباعة  في لب النظام (kernal mode).
واستدعاء النظام يختلف من نظام تشغيل لآخر لأن الهدف دائما هو تحسين نظام التشغيل للأفضل.
 
ثانيا:الأوامر البرمجية application program interface(API) :
 
كل نظام تشغيل له مجموعة من الأوامر البرمجية(API's) وبالتالي لابد من الخضوع لقوانين  الأوامر البرمجية التابعة لنظام تشغيل معين.
وهذه الأوامر عند كتابتها تتحول إلى system call في لب النظام ((kernal mode ثم تنتقل إلى نظام التشغيل
مثلا عند عمل الأمر البرمجي فتح يتحول إلى استدعاء النظام  للأمر فتح
(  (open   >>>>>          open system call    .
وليس من الضروري الأمر البرمجي الواحد يعادله فقط  استدعاء واحد للنظام فقد يتطلب مئات من استدعاءات للنظام.
 
والثلاثة الأكثر شيوعا من الأوامر البرمجية: win32API للنوافذ ، posix API للposix النظم القائمة (بما فيها تقريبا جميع إصدارات يونيكس ، لينكس ، ونظام التشغيل ماك العاشر) ، وجافا API لآلة جافا الافتراضية (JVM)
 
وهذا شكل يوضح العلاقة بين التطبيق (application) وc library ولب النظام kernal من خلال استدعاء ()printf 
( ()The relationship between applications, the C library, and the kernel with a call to printf.)
 
 

 

والسؤال الآن :

لماذا يفضل استخدام الأوامر البرمجية بدلا من أوامر استدعاء النظام؟
للأسباب التالية:
1- قابلية النقل(Portability)
فمثلا: عند كتابة برنامج بلغة الجافا تستطيع تشغيله بأي نظام تشغيل مثل Windows وLinuxوMac
ماعليك سوى البرمجة بلغة الجافا وبالتالي  سيعمل على جميع أنظمة التشغيل بدون أي تغيير في أوامر استدعاء النظام .
2- أوامر استدعاء النظام أكثر تفصيلا ويصعب التعامل معها وتختلف من نظام لنظام بينما الأوامر البرمجية أسهل واقل تعقيدا.
 
تطبيق أوامر استدعاء النظام(system call implementation):
 
الأفضل ربط الأمر البرمجي (API) برقم (index) وهذا الرقم يربط بأمر استدعاء النظام
وتلك الأرقام تكون مدونة في جدول يسمى جدول النظام(system table) , ولكل  استدعاء للنظام رقم (index).
مثلا: عند عمل الأمر البرمجي فتح , أنتقل من أسلوب المستخدم إلى أسلوب لب النظام وبالتالي لابد من استدعاء النظام ,ويتم ذلك بعمل مناداة للرقم المرتبط باستدعاء النظام المطلوب  حتى يصل إلى أمر استدعاء النظام نفسه من خلال جدول النظام (system table)  .
أما الهدف من عمل جدول النظام؟ أسهل في عملية التعديل والحذف والإضافة حيث أنه يوجد لدينا ملايين من أوامر استدعاء النظام.
وهذا رسم يوضح كيفية تطبيق أوامر استدعاء النظام
 
 
 
 
وهذا شكل يوضح جدول النظام
حيث نلاحظ فيه كل أمر نظام مرتبط برقم(index)
 
 
وهذارسم توضيحي آخر
 
ثالثا:System Call Parameter Passing
 
 
أوامر استدعاء النظام تتعامل مع قيم للمتغيرات(Parameter) وهناك ثلاث طرق لإرسالها:
1- باستخدام السجل(register) المرتبط بالـ(CPU) .
وتتميز هذه الطريقة بالسرعة, لكن من عيوب هذه الطريقة: حجم السجل محدود وبالتالي المحدودية في عدد البراميتر (محدودة العدد).
 
 
2- باستخدام جدول أو قالب ,أضع فيه قيم المتغيرات(Parameter) وعنوان هذا الجدول يوضع في سجل(register) .
هذه الطريقة المستخدمة في obuntu ( اوبنتو) وتعتبر أفضل طريقه لأنها أسرع في الوصول
وتكمن الميزة فيها بأنها: أكثر فعالية(more efficient).
 
3- باستخدام طريقة بناء المعلومات وهي التكدس (stack) وعمل إدخال (pushed) للبراميتر بواسطة البرنامج و أخراج (popped) بواسطة نظام التشغيل
عيوب هذه الطريقة: يلزمها الترتيب.
 
_____________

خلال بحثي في google  وجدت

 powerpoint أعجبني جدا

يتحدث عن استدعاء النظام وأنواعها وكيفية بناءها

 

 

www-lb.cs.aub.edu.lb/pa07/272/Lectures/Ch01.ppt

 

وهذا آخر أعجبني أيضا فيه مجموعة من استدعاءات النظام وكيفية بناء كل منها

http://i30www.ira.uka.de/teaching/coursedocuments/88/6.3_Gross_VFS-Implementation-and-File-Locking.pdf

 

 وهذا رابط لجدول يحتوي على جميع استدعاءات النظام في اللينكس

http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html

 

 

اتمنى أن أكون وفقت فيما طرحت

أخيرا أقول:

الحمدالله على كل حال وأن أخطأت فمن نفسي وأن أصبت فمن الله

 

 

المرجع: المحاضرات والكتاب 

وموقع الجامعه الامريكية في بيروت

 

http://www-lb.cs.aub.edu.lb/.

و

 

http://www.ibm.com/developerworks/linux/library/l-system-calls/

و

جامعة المـــانــيا

http://i30www.ira.uka.de/

 

و

http://en.wikipedia.org/wiki/System_call#Examples_and_tools

 

وهذا عرض تقديمي كان مرجعاً لي  يمكنكم الرجوع اليه أيضا

race.gnu.kr/course/2007Spring/Love05_ch5.ppt

كتب بواسطة:منى البريه

 

 

 
 
 
 
 
 
 
 

 

Comments (3)

Anonymous said

at 3:39 pm on Nov 26, 2007

مشكوره عالموضوع بس لو تعدلين العناوين بلون مختلف يكون احلا جعله الله في ميزان حسناتك

Anonymous said

at 2:47 pm on Dec 23, 2007

Please format the text and add illustrative diagrams e.g. system call implementation, to make it easy to follow up!

Anonymous said

at 12:44 am on Jan 16, 2008

مشكوره منى
الموضوع رائع و واضح و فيه مراجع كثيره
الله يوفقك ولا يضيع لك تعب

You don't have permission to comment on this page.