الخميس، 1 أكتوبر 2020

صورة العملية

 

صورة العملية



Ad by Valueimpression

الآن وقد رأينا كيفية الحصول على المعلومات الأساسية للعملية والعملية الأصلية ، فقد حان الوقت للنظر في تفاصيل معلومات العملية / البرنامج.

ما هي بالضبط صورة العملية؟ صورة العملية هي ملف قابل للتنفيذ مطلوب أثناء تنفيذ البرنامج. تحتوي هذه الصورة عادة على الأقسام التالية -

  • قطعة كود أو جزء نص
  • مقطع البيانات
  • مقطع المكدس
  • جزء الكومة

فيما يلي التمثيل التصويري لصورة العملية.

معالجة الصور

مقطع الكود هو جزء من ملف الكائن أو مساحة العنوان الظاهرية للبرنامج والتي تتكون من تعليمات قابلة للتنفيذ. يكون هذا عادةً مقطع بيانات للقراءة فقط وله حجم ثابت.

مقطع البيانات من نوعين.

  • مهيأ
  • غير مهيأ

مقطع البيانات التي تمت تهيئتها هو جزء من ملف الكائن أو مساحة العنوان الظاهرية للبرنامج التي تتكون من متغيرات ثابتة وعالمية مهيأة.

مقطع البيانات غير المهيأ هو جزء من ملف الكائن أو مساحة العنوان الظاهرية للبرنامج التي تتكون من متغيرات ثابتة وعامة غير مهيأة. يُطلق على مقطع البيانات غير المهيأ أيضًا مقطع BSS (تم بدء الكتلة بواسطة رمز).

مقطع البيانات للقراءة والكتابة ، حيث يمكن تغيير قيم المتغيرات أثناء وقت التشغيل. هذا الجزء له حجم ثابت أيضًا.

مقطع المكدس هو مساحة من الذاكرة مخصصة للمتغيرات التلقائية ومعلمات الوظيفة. يقوم أيضًا بتخزين عنوان المرسل أثناء تنفيذ استدعاءات الوظائف. يستخدم Stack آلية LIFO (Last-In-First-Out) لتخزين المتغيرات المحلية أو التلقائية ، ومعلمات الوظيفة وتخزين العنوان التالي أو عنوان المرسل. يشير عنوان المرسل إلى العنوان الذي سيتم إرجاعه بعد الانتهاء من تنفيذ الوظيفة. حجم المقطع هذا متغير وفقًا للمتغيرات المحلية ومعلمات الوظيفة واستدعاءات الوظائف. ينمو هذا الجزء من عنوان أعلى إلى عنوان أقل.

مقطع الكومة هو مساحة الذاكرة المخصصة لتخزين الذاكرة الديناميكية مثل مكالمات malloc () و calloc (). حجم المقطع هذا متغير أيضًا حسب تخصيص المستخدم. ينمو هذا المقطع من عنوان أدنى إلى عنوان أعلى.

دعونا الآن نتحقق من كيفية اختلاف حجم المقاطع (مقاطع البيانات و bss) مع بعض نماذج البرامج. يُعرف حجم الجزء عن طريق تنفيذ الأمر "الحجم".

البرنامج الأولي

الملف: section_size1.c

#include<stdio.h>

int main() {
   printf("Hello World\n");
   return 0;
}

في البرنامج التالي ، تمت إضافة متغير ثابت غير مهيأ. هذا يعني أن حجم المقطع غير المهيأ (BSS) سيزيد بمقدار 4 بايت. ملاحظة - في نظام التشغيل Linux ، حجم int هو 4 بايت. حجم نوع البيانات الصحيح يعتمد على المترجم ودعم نظام التشغيل.

الملف: section_size2.c

#include<stdio.h>

int main() {
   static int mystaticint1;
   printf("Hello World\n");
   return 0;
}

في البرنامج التالي ، تمت إضافة متغير ثابت مهيأ. هذا يعني أن حجم المقطع المهيأ (البيانات) سيزيد بمقدار 4 بايت.

الملف: section_size3.c

#include<stdio.h>

int main() {
   static int mystaticint1;
   static int mystaticint2 = 100;
   printf("Hello World\n");
   return 0;
}

في البرنامج التالي ، تمت إضافة متغير عام مهيأ. وهذا يعني أن حجم المقطع المهيأ (البيانات) سيزيد بمقدار 4 بايت.

الملف: section_size4.c

#include<stdio.h>

int myglobalint1 = 500;
int main() {
   static int mystaticint1;
   static int mystaticint2 = 100;
   printf("Hello World\n");
   return 0;
}

في البرنامج التالي ، تمت إضافة متغير عالمي غير مهيأ. هذا يعني أن حجم المقطع غير المهيأ (BSS) سيزيد بمقدار 4 بايت.

الملف: section_size5.c

#include<stdio.h>

int myglobalint1 = 500;
int myglobalint2;
int main() {
   static int mystaticint1;
   static int mystaticint2 = 100;
   printf("Hello World\n");
   return 0;
}

خطوات التنفيذ

التحويل البرمجي

babukrishnam $ gcc segment_size1.c -o segment_size1
babukrishnam $ gcc segment_size2.c -o segment_size2
babukrishnam $ gcc segment_size3.c -o segment_size3
babukrishnam $ gcc segment_size4.c -o segment_size4
babukrishnam $ gcc segment_size5.c -o segment_size5

التنفيذ / الإخراج

babukrishnam size segment_size1 segment_size2 segment_size3 segment_size4 segment_size5
   text  data  bss  dec  hex  filename
   878   252    8   1138 472  segment_size1 
   878   252   12   1142 476  segment_size2 
   878   256   12   1146 47a  segment_size3 
   878   260   12   1150 47e  segment_size4 
   878   260   16   1154 482  segment_size5
babukrishnam

التسميات: