TO DONATE : BTC => 1D8Aq4q2jQnvGD1GaK9vbNwKgm1K5zUEWL || PM => U4089661


اهم قوانين :1- منع الردود الباهتة مثل شكرااااا و أخواتها 2- لا يسمح بالمشاحنات الطائفية باآ شكل من الأشكال 3- عدم استعمال الألفاظ التافهة و الكلام البذىء 4- عدم وضع معرفات التواصل الأجتماعى بالردود 5- الأطلاع على كامل القوانين واجب 


العودة   الحماية للأبد -Security 4 Ever > قسم البرمجـــة > لغة البرمجة الكائنية

لغة البرمجة الكائنية قسم مختص بالبرمجة الكائنية مثال :
C, C++, C#, Delphi, visual basic, Ruby, Java, .NET, VB.NET, OOP

 
أدوات الموضوع انواع عرض الموضوع
  #1  
قديم 05-06-2019, 12:34 PM
الصورة الرمزية zero-cool
zero-cool
:: عضو خاص ::
 
حـالة التــواجـد : zero-cool غير متواجد حالياً
تاريخ التسجيل: Apr 2016
الجــــنــــــس: ذكـر
المشاركات: 74
شكراً:48
تم شكره 254 مرة في 59 مشاركة
معدل تقييم المستوى: 0
zero-cool بدون تقييم
افتراضي برمجة نظام بالسي: Process



السلام عليكم ورحمة الله وبركاته

إن شاء الله تكونوا في تمام الصحة والعافية إخواني





هذا الشرح على أساس عندك أساسيات لغة السي .

أولا عبرت على مصطلح system call fork بالدالة fork

نفس الشيء مع system call execvp





*)عندما يكون برنامج في طور التشغيل يسمى process.

عند إنشاء process يكون لها رقم يسمى PID

مثال نضغط ps على الشيل ونشوف قائمة ال process :





كل process لديها process أب التي قامت بإنشائها .


*)رقم بروسس الأب إسمه PPID

*)كل بروسس لديها بروسس أب واحدة فقط .

*) مثلما لدينا في الصورة السابقة :

آلبروسس 10575 هي بروسس الأب للبروسس 10636



*)كل بروسس لديها أب واحد وهذا الأب بإمكانه إنشاء العديد من البروسس إسمهم بروسس الأبناء .

يعني عبارة لدينا شجرة بروسسات .

الدالة ()fork

كود:
#include <unistd.h> 

int k =   fork  ()  ;

إستدعاء الدالة ()fork تنشى نسخة أخرى من بروسس البرنامج .

وبعد إستدعاء ()fork يتواصل تنفيذ الإثنين بروسس بصفة مستمرة .

يكمن الإختلاف الوحيد في القيمة التي ترجعها الدالة ()fork.

فإذا أرجعت لنا الدالة ()fork القيمة 0 فهذا يعني أننا في وسط بروسس الإبن .

وإذا أرجعت لنا الدالة () fork قيمة أكبر من 0 فهذا يعنني أننا في وسط بروسس الأب وهذه القيمة هي رقم بروسس الإبن (PID).

وإذا أرجعت لنا الدالة () fork القيمة -1 فهذا يعنني أن عملية إستنساخ البروسس قد فشلت .

وذلك يعود لأحد الأسباب التالية :

إما أنه لم يعد هناك مساحة في الذاكرة أو أن المستخدم أنشأ العديد من البروسوسات .

وهذه صورة توضحية للعملية :



الدالة () getpid و الدالة ()getppid


الدالة () getpid ترجع لنا رقم PID البروسس المنادية للدالة ()getpid

الدالة () getppid ترجع لنا رقم PID أب البروسس .

نشوف الكود التالي :


كود:
#include<unistd.h>  // fork لإستعمال  
#include<stdio.h>   // printf  لإستعمال  

int a=1;  
int main(int argc, char *argv)  

{  

         int k;  
         switch(k = fork())  
         {  
             case -1 :  /* فشل عملية إستنساخ البروسس */ 
                        break ;  


             case 0  :  /* فقط بروسس الإبن من تنفذ هذه التعليمة */ 
                        printf("I'm the child process and my PID is : %d \n\n" , getpid());  
                        a += 10 ;   
                        break;  

             default :  /* فقط بروسس الأب من تنفذ هذه التعليمة */ 
                        printf("We are inside the parent process with PID : %d \n\n" , getpid());  

                        a += 100;  
                          
}  
         // بروسس الأب وبروسس الإبن ينفذان التالي :  
         printf (" process finished with a = %d\n" , getpid(),a);  
         return 0;  

}
الناتج مبين في الصورة التالية :




يعني الدالة () fork تسمح لنا بإنشاء بروسس وبحيث بروسس الأب وبروسس الإبن يكون لديهم نفس الكود (binary ) ولكن لكل منهما مساحته الخاصة في الذاكرة

الدالة exec ()




*)عندما نكتب كومند على الشيل يقوم الشيل بإنشاء بروسس لتنفيذ هذه الكومند .

ثم ينتظر إنتهاء البروسس ليطلب كومند أخرى .

طيب يعني فوحدة من هاتان البروسس هي إبن الأخرى .

*)وطبعا لن تكون هناك فائدة من وجود نسختان لنفس البرنامج يشتغلان في النظام في نفس الوقت .

*)لذلك فإن بعد عملية الإستنساخ فالإبن حيقوم بإستبدال البرنامج وذلك بإستعمال الدالة ()exec .

*)هذه الدالة تحافظ على هوية البروسس ولكنها تستبدل الكود التنفيذي وبياناتها ببيانات وكود كومند أخرى .

مثلا تعالوا نشوف مذا يحصل حين يقوم الشيل بتنفيذ الكومند chmod التي تكمن مهمتها في إعطاء صلاحية معينة للملف :

كود:
chmod a+x file
1) تحصل عملية إستنساخ لبروسس الشيل فيكون لدينا 2 بروسس شيل متطابقان.

2) الشيل الأب يبقى في حالة إنتظار إنتهاء تنفيذ الشيل الإبن .

3) الشيل الإبن يستبدل كوده التنفيذي بكود الكومند chmod

4)تنفذ الكومند chmod وتعطي صلاحية للملف file وحين تنتهي ، يختفي الإبن .

5) الأب يرجع لنشاطه ليعرض الأمر التالي .

وهذه صورة توضيحية للخطوات السابقة التي ذكرناها :




نأخذ مثال :

كود:
#include<unistd.h> 
#include<stdlib.h> 
#include<stdio.h> 

int main() 

{ char* arg[] = {"ping" , "www.google.com" , NULL}; 
    
   printf("SALAM ALIKOM :) \n\n"); 
   execvp("ping", arg); 
    
  return 0; 
}
هذا الكود عند تنفيذه يكتب السلام عليكم ثم ينفذ الكومند pingعلى هوست الجوجل وكل هذا يقام على 5 خطوات اتي شرحتها مع الكومند chmodنفس الشي .



خلاصة

شفنا في هذا الشرح طريقتين لإنشاء بروسس :

الأولى : عبر الإستنساخ بالدالة () fork ننشئ بروسس إبن وبحيث بروسس الأب وبروسس الإبن يكون عندهم نفس الكود binary
وكل له مساحة خاصة في الذاكرة والإختلاف الوحيد يكون في القيمة التي ترجعها الدالة

الثانية : عبر الدالة () exec : هنا تصير عملية إستنساخ للبروسس ثم بروسس الأب تبقى في إنتضار بروسس الإبن
إلى أن تنتهي تنفيذها ثم تقوم الدالة exec بالبحث عن الكومند التي كتبناها وتقوم بإستبدال كود بروسس الإبن بكود الكومند
مع الحفاظ على هوية البروسس وحين تنتهي الكومند مهمتها تختفي بروسس الإبن وترجع بروسس الأب إلى نشاطها


في أمان الله


 

 

 

مايفعله الهكرز هو معرفة التكنولوجيا وتجربتها بطرق لايمكن ان يتخيلها الكثير من الناس .
ولديهم رغبة قوية في مشاركة هذه المعلومات مع الآخرين
وتوضيحها للاشخاص الذي قد تكون مؤهلاتهم الوحيدة الرغبة في التعلم.

[email protected]
رد مع اقتباس
7 أعضاء قالوا شكراً لـ zero-cool على المشاركة المفيدة:

  #ADS  
Google Adsense Google Adsense is online
اعلانات
 
تاريخ التسجيل: اليوم
الدولة: الحماية للأبد
العمر: 2010
المشاركات: 1
شكراً:48
تم شكره 254 مرة في 59 مشاركة


الكلمات الدلالية (Tags)
بالسي, برمجة, process, نظام


الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 
أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
Php tutorials register & login user login | كورس برمجة نظام تسجيل وتسجبل الدخول Unico Nico لغات البرمجة التفسيرية 3 26-02-2016 07:04 PM
# برنآمج Process من برمجتي xSecurity لغة البرمجة الكائنية 0 25-05-2012 05:18 PM
برمجة وتصميم نظام تشغيل Python_Dz لغة البرمجة الكائنية 1 11-05-2012 09:09 PM
برمجة نظام بروكسي basic pmoki لغات البرمجة التفسيرية 8 21-08-2011 04:17 PM


الساعة الآن 07:48 PM