0% found this document useful (0 votes)
4 views13 pages

CS477 - Module13

تناقش الوثيقة تصميم الذاكرة في البرامج، حيث يتم تنظيم الذاكرة إلى أجزاء منطقية مثل الكود والبيانات والـ Heap والـ Stack. توضح الوثيقة كيفية إدارة الذاكرة الديناميكية في لغات البرمجة مثل C و C++، بالإضافة إلى كيفية التعامل مع الأخطاء مثل Page Fault و Segmentation Fault. كما تتناول الوثيقة تطور تقنيات تقسيم الذاكرة من التقسيم الهاردويري إلى الـ Paging في الأنظمة الحديثة.

Uploaded by

marj00j2021
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views13 pages

CS477 - Module13

تناقش الوثيقة تصميم الذاكرة في البرامج، حيث يتم تنظيم الذاكرة إلى أجزاء منطقية مثل الكود والبيانات والـ Heap والـ Stack. توضح الوثيقة كيفية إدارة الذاكرة الديناميكية في لغات البرمجة مثل C و C++، بالإضافة إلى كيفية التعامل مع الأخطاء مثل Page Fault و Segmentation Fault. كما تتناول الوثيقة تطور تقنيات تقسيم الذاكرة من التقسيم الهاردويري إلى الـ Paging في الأنظمة الحديثة.

Uploaded by

marj00j2021
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 13

‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬

‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Compiler Design‬‬
‫‪Module 13 summary‬‬
‫‪Memory – The Conventional Approach‬‬
‫‪"We now discuss structure of internal memory of a running program":‬‬ ‫•‬
‫يعن هنبدأ ر‬
‫نشح إزاي الـ ‪( memory‬الذاكرة) بتاعة أي برنامج شغال بتشتغل من جوا‪.‬‬ ‫ي‬
‫‪"A program sees memory as a linear sequence of words...":‬‬ ‫•‬
‫البنامج بيشوف الـ ‪ memory‬عىل إنها خط مستقيم فيه عناوين )‪ (Addresses‬مرقمة من أول ‪ 0‬لحد‬
‫ر‬
‫ه‪max number‬‬ ‫الىل ي‬
‫آخر حاجة ي‬
‫‪"CPU is free to use memory in any way it sees fit":‬‬ ‫•‬
‫الىل تشوفها مناسبة‪ .‬ممكن البيانات‬
‫الـ ‪( CPU‬وحدة المعالجة المركزية) بتستخدم الـ ‪ memory‬بالطريقة ي‬
‫والكود يبقوا متداخلي‪.‬‬
‫‪"Programming this way would be complex...":‬‬ ‫•‬
‫ى‬ ‫ً‬ ‫البمجة بالطريقة دي ى‬
‫وهتالق أخطاء كتب وصعوبة يق التصحيح‬
‫ي‬ ‫بتبق صعبة جدا ألن كل حاجة مختلطة‪،‬‬ ‫ر‬
‫‪(Debugging).‬‬
‫‪Logical Segmentation‬‬
‫‪"Program memory is commonly laid out by separating it into logical segments":‬‬ ‫•‬
‫البنامج ألجزاء‪(Segments).‬‬ ‫ى‬
‫نخىل الموضوع منظم أكب‪ ،‬بنقسم الـ ‪ memory‬بتاعت ر‬
‫ي‬ ‫يعن علشان‬
‫ي‬
‫‪"Each segment is a sequential address range...":‬‬ ‫•‬
‫كل جزء ى‬
‫بيبق ليه عنوان خاص بيه وهو متقسم علشان يخدم غرض معي زي تخزين البيانات أو الكود‪.‬‬
‫‪"Format of a logical segment":‬‬ ‫•‬
‫هنا ر‬
‫بيشح شكل الـ ‪ memory‬بعد التقسيم ‪:‬‬
‫البنامج بيشتغل عليه‪.‬‬
‫الىل ر‬
‫‪Code‬الكود ي‬ ‫‪o‬‬

‫‪Data‬البيانات العامة)‪(Global Data‬‬ ‫‪o‬‬

‫الىل بتتخصص وقت التشغيل)‪(Runtime‬‬


‫‪Heap‬مساحة بتستخدم للداتا ي‬ ‫‪o‬‬

‫‪Stack‬لتسجيل بيانات التنفيذ زي المتغبات المؤقتة‪.‬‬ ‫‪o‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫)‪Logical Segmentation (Details‬‬


‫‪Code Section:‬‬ ‫•‬

‫الىل بيشتغل عليه الـ‪CPU‬‬ ‫ى‬


‫الجزء ده بيتخزن فيه الكود المبجم ي‬ ‫‪o‬‬

‫‪Data Section:‬‬ ‫•‬

‫الىل ممكن تعدلها أثناء التشغيل‪.‬‬


‫ده للبيانات العامة زي المتغبات الثابتة )‪ (Constants‬أو ي‬ ‫‪o‬‬

‫‪Heap Section:‬‬ ‫•‬

‫الىل بتتخصص أثناء التشغيل بالدوال زي )(‪malloc‬و )(‪ free‬يق لغة‪C‬‬


‫ده الجزء الخاص بالـ ‪ memory‬ي‬ ‫‪o‬‬

‫)‪Logical Segmentation (Stack and Faults‬‬


‫‪Stack Segment:‬‬ ‫•‬

‫البنامج‪ ،‬زي المتغبات المحلية)‪(Local Variables‬‬


‫الىل بتتغب أثناء تنفيذ ر‬
‫ده للبيانات ي‬ ‫‪o‬‬

‫‪Accessing Unused Area:‬‬ ‫•‬

‫البنامج حاول يدخل عىل منطقة مش مسموح بيها يق الـ‪ ، memory‬بيحصل خطأ اسمه‪Page Fault‬‬
‫لو ر‬ ‫‪o‬‬

‫‪Segmentation Fault:‬‬ ‫•‬

‫البنامج بيتوقف فجأة وبيظهر رسالة الخطأ دي‪.‬‬


‫لو حصلت أي مخالفة لتقسيمة الـ‪ ، memory‬ر‬ ‫‪o‬‬

‫‪Logical Segmentation‬‬
‫‪"The heap grows 'up'... while the stack grows 'down'":‬‬ ‫•‬
‫وتكب ناحية العناوين الكببة (بتطلع)‪ ،‬أما الـ ‪ Stack‬بتبدأ من العناوين‬
‫الـ ‪ Heap‬بتبدأ من العناوين الصغبة ر‬
‫الكببة وتبل ناحية الصغبة‪.‬‬
‫‪"In between the two segments is an invalid region...":‬‬ ‫•‬
‫ى‬
‫وبتبق‪Invalid Memory.‬‬ ‫الىل بي الـ ‪ Heap‬والـ ‪ Stack‬مش مستخدمة‬
‫المساحة ي‬
‫‪"Logical segments on a simple computer...":‬‬ ‫•‬
‫ى‬
‫يق األجهزة البسيطة( زي الـ)‪ ، Embedded Systems‬تقسيم الذاكرة بيكون مجرد تنظيم مش أكب‪.‬‬
‫‪"If the heap grows too large...":‬‬ ‫•‬
‫كبوا زيادة عن اللزوم‪ ،‬ممكن واحدة منهم تدخل يق التانية‪ ،‬وده يسبب‪:‬‬
‫لو الـ ‪ Heap‬أو الـ ‪ Stack‬ر‬
‫البنامج ينهار‬
‫‪ Crash‬ر‬ ‫‪o‬‬

‫‪Data Corruption‬البيانات تتبهدل‬ ‫‪o‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫)‪Logical Segmentation (Multi-Programmed Systems‬‬


‫‪"On a computer with an OS that uses multiprogramming...":‬‬ ‫•‬
‫الىل بتدعم الـ ‪ Multiprogramming‬والـ‪Memory Protection‬‬
‫يق أنظمة التشغيل الحديثة ي‬
‫كل برنامج بياخد مساحة ‪ Memory‬خاصة بيه‪.‬‬ ‫‪o‬‬

‫كل ‪( Process‬عملية) بتشوف العناوين الخاصة بيها بس ومش بتأثر عىل عمليات تانية‪.‬‬ ‫‪o‬‬

‫‪"Within its own space...":‬‬ ‫•‬


‫ه محتاجة‪.‬‬ ‫ّ‬
‫كل عملية بتقسم الـ ‪ Memory‬بتاعتها لجزء للكود‪ ،‬البيانات‪ ،‬الـ‪ ، Heap‬والـ ‪ Stack‬زي ما ي‬
‫)‪Logical Segmentation (Memory Access‬‬
‫‪"In some OSs, permissions are set...":‬‬ ‫•‬
‫البنامج‪ ،‬بيتم تحديد صالحيات كل جزء يق الـ‪Memory‬‬
‫يق أنظمة تشغيل كتب‪ ،‬لما يتم تحميل ر‬
‫القراءة فقط للـ ‪ Data‬و‪Stack.‬‬ ‫‪o‬‬

‫التنفيذ فقط للـ‪Code‬‬ ‫‪o‬‬

‫ال حاجة للمساحة غب المستخدمة)‪(Unused Area‬‬ ‫‪o‬‬

‫‪"If a process attempts to access...":‬‬ ‫•‬


‫البنامج حاول يدخل عىل منطقة مش مسموح بيها‪ ،‬بيحصل‪:‬‬
‫لو ر‬
‫‪Page Fault‬النظام ينقل التحكم لنفسه لمعالجة الخطأ‪.‬‬ ‫‪o‬‬

‫البنامج يتوقف‪.‬‬
‫‪ Segmentation Fault‬ر‬ ‫‪o‬‬

‫‪Logical Segmentation – The Heap‬‬


‫‪"Initially, a process is given a small amount of memory for the heap...":‬‬ ‫•‬
‫البنامج بياخد مساحة صغبة للـ ‪ Heap‬علشان ينفذ عليها دوال زي )(‪malloc‬و)(‪free‬‬
‫يق األول‪ ،‬ر‬
‫‪"If this area is exhausted...":‬‬ ‫•‬
‫البنامج يطلب مساحة جديدة من نظام التشغيل)‪(Operating System‬‬
‫لو المساحة خلصت‪ ،‬ر‬
‫‪"On Unix systems, this is done with the brk system call...":‬‬ ‫•‬
‫البنامج توسيع الـ‪ ، Heap‬بينفذ استدعاء للنظام)‪(brk‬‬
‫يق أنظمة يونكس‪ ،‬لو طلب ر‬
‫لو الـ ‪ OS‬وافق‪ ،‬يتم تخصيص مساحة جديدة‪.‬‬ ‫‪o‬‬

‫لو رفض‪ ،‬يرجع خطأ)‪(Error Code‬‬ ‫‪o‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Logical Segmentation – The Stack‬‬


‫‪"Similarly, the stack must be able to grow down":‬‬ ‫•‬
‫أكب)‪.‬‬
‫بتكب لتحت (بتاخد مساحة ر‬
‫بتكب لفوق‪ ،‬الـ ‪ Stack‬ر‬
‫زي ما الـ ‪ Heap‬ر‬
‫‪"It is not so easy for a program...":‬‬ ‫•‬
‫البنامج مش بيعرف بسهولة يحدد المساحة المطلوبة للـ‪ ، Stack‬ألن ده بيعتمد عىل‪:‬‬
‫ر‬
‫استدعاء دوال جديدة‪.‬‬ ‫‪o‬‬

‫تخصيص متغبات محلية جديدة‪.‬‬ ‫‪o‬‬

‫‪"Instead, modern OSs maintain a guard page...":‬‬ ‫•‬


‫يق األنظمة الحديثة‪ ،‬النظام بيحط صفحة حماية )‪ (Guard Page‬عند حدود الـ ‪ Stack‬علشان يمنع‬
‫األخطاء‪.‬‬
‫‪"When a process attempts to extend the stack...":‬‬ ‫•‬
‫البنامج حاول يستخدم منطقة ممنوعة‪:‬‬
‫لو ر‬
‫بيحصل‪Page Fault‬‬ ‫‪o‬‬

‫النظام )‪ (OS‬ياخد التحكم ويحدد لو كان هيوسع الـ ‪ Stack‬أو ال‪.‬‬ ‫‪o‬‬

‫‪Logical Segmentation – Hardware Implementation‬‬


‫‪"Every OS implements policies...":‬‬ ‫•‬
‫كل نظام تشغيل عنده قواعد بتحدد المساحة المسموح لكل برنامج يستهلكها‪.‬‬
‫‪"Idea of breaking a program into segments...":‬‬ ‫•‬
‫ً‬
‫البنامج ألجزاء كانت قوية جدا لدرجة إنها اتطبقت يق الهاردوير زمان‪:‬‬
‫فكرة تقسيم ر‬
‫الـ ‪ CPU‬كان بيحدد كل جزء )‪ (Segment‬بعناوين وصالحيات‪.‬‬ ‫‪o‬‬

‫األنظمة الحديثة استبدلت التقسيم ده بـ‪Paging.‬‬ ‫‪o‬‬

‫‪Logical Segmentation – Paging‬‬


‫‪"Hardware segmentation was widely used...":‬‬ ‫•‬
‫ى‬ ‫ر‬
‫منتش‪ ،‬لكن مع الوقت اتحولنا للـ ‪ Paging‬ألنه أسهل وأكب مرونة‪.‬‬ ‫زمان‪ ،‬تقسيم الـ ‪ Hardware‬كان‬
‫‪"Processor vendors have responded...":‬‬ ‫•‬
‫رشكات تصنيع المعالجات )‪ (Processors‬لغت الدعم للتقسيم الهاردويري يق التصميمات الجديدة‪.‬‬
‫‪"For example...":‬‬ ‫•‬

‫معالجات ‪ Intel X86‬كانت بتدعم التقسيم يق وضع ‪-bit.32‬‬ ‫‪o‬‬

‫معالجات ‪-bit 64‬الجديدة بتدعم ‪ Paging‬فقط‪ ،‬بدون تقسيم‪.‬‬ ‫‪o‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪"Logical segmentation continues...":‬‬ ‫•‬


‫البامج داخل الذاكرة‪.‬‬
‫مع إن الـ ‪ Segmentation‬كفكرة هاردوير قلت أهميتها‪ ،‬لسه طريقة فعالة لتنظيم ر‬

‫‪Heap Management‬‬
‫‪"Heap contains memory that is managed dynamically at runtime":‬‬ ‫•‬
‫البنامج‪.‬‬
‫ديناميك )‪ (Dynamic‬أثناء تشغيل ر‬
‫ي‬ ‫الىل بتتخصص بشكل‬
‫الـ ‪ Heap‬فيها ذاكرة )‪ (Memory‬ي‬
‫‪"OS does not control the internal organization...":‬‬ ‫•‬
‫الكىل‪.‬‬
‫نظام التشغيل )‪ (OS‬مش بيتحكم يق التفاصيل الداخلية للـ‪ ، Heap‬بس بيحدد حجمها ي‬
‫‪"In a C program, the functions malloc() and free()...":‬‬ ‫•‬
‫البنامج يخلص‬
‫يق لغة‪ ، C‬الدالة )(‪malloc‬بتخصص مساحة يق الـ‪ ، Heap‬و )(‪free‬بتحرر المساحة لما ر‬
‫استخدامها‪.‬‬
‫‪"In C++, new and delete...":‬‬ ‫•‬
‫يق‪ ، C++‬نفس الوظيفة بيقوم بيها ‪new‬و‪delete.‬‬
‫‪"Other languages manipulate the heap implicitly...":‬‬ ‫•‬
‫المبمج يتدخل)‪ ،‬لما الكائنات )‪ (Objects‬تتعمل أو تتدمر‪.‬‬ ‫ً‬
‫تلقائيا (من غب ما ر‬ ‫لغات تانية بتدير الـ ‪Heap‬‬
‫)‪Heap Management (Linked List‬‬
‫‪"The simplest implementation of malloc() and free()...":‬‬ ‫•‬
‫ه التعامل مع الـ ‪ Heap‬كـ ‪( Linked List‬قائمة مرتبطة) من‬
‫أبسط طريقة لتنفيذ )(‪malloc‬و )(‪ free‬ي‬
‫أجزاء)‪(Chunks‬‬
‫‪"Each entry in the list records the state...":‬‬ ‫•‬
‫كل جزء )‪ (Chunk‬يق القائمة بيكون عنده‪:‬‬
‫حالته (مستخدم أو ال)‪.‬‬ ‫‪o‬‬

‫حجمه‪.‬‬ ‫‪o‬‬

‫الىل قبله وبعده‪.‬‬


‫عناوين األجزاء ي‬ ‫‪o‬‬

‫‪Heap Management‬مثال‬
‫‪"Initial state of heap":‬‬ ‫•‬
‫يق األول‪ ،‬المساحة كلها بتكون‪ Free‬غب مستخدمة‬
‫‪"malloc(100)... larger than the requested size":‬‬ ‫•‬
‫لما تطلب مساحة ‪ 100‬بايت باستخدام )(‪malloc‬‬
‫يبق‪Free‬‬ ‫ى‬
‫والباق ى‬ ‫الـ ‪ Heap‬بتقسم المساحة الكببة لجزء ‪ 100‬بايت مستخدم‪،‬‬ ‫‪o‬‬
‫ي‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫بيتم الربط بي األجزاء دي باستخدام‪Linked List.‬‬ ‫‪o‬‬

‫‪ Heap Management‬تفاصيل إضافية‬


‫‪"malloc() returns the address of the data element...":‬‬ ‫•‬
‫الىل المساحة المطلوبة موجودة فيه‪.‬‬ ‫ى‬
‫بعد ما تعدل القائمة‪malloc() ،‬ببجع العنوان ي‬
‫‪"If there is no chunk available...":‬‬ ‫•‬
‫البنامج بيطلب مساحة جديدة من نظام التشغيل باستخدام ‪brk.‬‬
‫لو مفيش مساحة كفاية يق الـ‪ ، Heap‬ر‬
‫‪"When the user calls free()...":‬‬ ‫•‬
‫تستدع )(‪free‬لتحرير مساحة‪:‬‬
‫ي‬ ‫لما‬
‫بيتم تعليم الجزء ده كـ‪Free‬‬ ‫‪o‬‬

‫أكب‪.‬‬
‫لو يق أجزاء مجاورة كمان‪ ، Free‬بيتم دمجهم مع بعض لتوفب مساحة ر‬ ‫‪o‬‬

‫‪Heap Management – Fragmentation‬‬


‫‪"If program always frees memory in the opposite order...":‬‬ ‫•‬
‫الىل خصص )‪ (Allocate‬بيه‪ ،‬كان‬ ‫دايما بيحرر )‪ (Free‬المساحة بنفس ى‬
‫البنامج كان ً‬
‫العكس ي‬
‫ي‬ ‫البتيب‬ ‫لو ر‬
‫ى‬
‫هيبق كل حاجة منظمة وسهلة‪.‬‬
‫‪"In practice, this is not the case...":‬‬ ‫•‬
‫لكن يق الحقيقة‪:‬‬
‫عشوائ‪.‬‬
‫ي‬ ‫البيانات بتتخصص )‪ (Allocate‬وتتحرر )‪ (Free‬بشكل‬ ‫‪o‬‬

‫عشوائ من أجزاء كببة وصغبة‪.‬‬ ‫مع الوقت‪ ،‬الـ ‪ Heap‬ى‬


‫بتبق خليط‬ ‫‪o‬‬
‫ي‬
‫وده بنسميه ‪ Memory Fragmentation‬تفتت الذاكرة‬ ‫‪o‬‬

‫‪"Excessive fragmentation results in waste":‬‬ ‫•‬


‫لو التفتت زاد‪:‬‬
‫تلن طلبك‪.‬‬ ‫ى‬
‫‪ o‬ممكن يبق عندك مساحات صغبة كتب‪ ،‬بس وال واحدة منهم كببة كفاية ر ي‬
‫البنامج يضطر يطلب مساحة جديدة من نظام التشغيل‪.‬‬
‫بالتال‪ ،‬ر‬
‫ي‬ ‫‪o‬‬

‫إجمال استهالك الذاكر‪(Total Memory Consumption).‬‬


‫ي‬ ‫ده ببود الضغط عىل‬ ‫‪o‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Heap Management – Solutions to Fragmentation‬‬


‫‪"In C, memory chunks cannot be moved...":‬‬ ‫•‬
‫بالتال مشكلة‬
‫ي‬ ‫الىل بتستخدمها )‪ (Chunks‬مش ممكن تتحرك أثناء االستخدام‪،‬‬
‫يق لغة‪ ، C‬المساحات ي‬
‫التفتت مش بتتحل بمجرد الحجز‪.‬‬
‫‪"Memory allocator has some limited ability...":‬‬ ‫•‬
‫نظام تخصيص الذاكرة )‪ (Memory Allocator‬بيحاول يقلل التفتت عن طريق اختيار األماكن بعناية‪.‬‬
‫‪"Simple strategies to avoid memory fragmentation":‬‬ ‫•‬

‫‪Best Fit:‬‬ ‫‪o‬‬


‫أكب شوية من المساحة المطلوبة‪.‬‬
‫يدور عىل أصغر مساحة )‪ (Free Chunk‬ر‬
‫‪Worst Fit:‬‬ ‫‪o‬‬
‫أكب مساحة )‪ (Free Chunk‬متاحة‪.‬‬
‫يدور عىل ر‬
‫الهدف هنا استخدام المساحات الكببة علشان متبقاش شوية مساحات صغبة مشتتة‪.‬‬
‫‪First Fit:‬‬ ‫‪o‬‬
‫أول مساحة )‪ (Free Chunk‬يالقيها كفاية بيستخدمها‪.‬‬
‫‪Next Fit:‬‬ ‫‪o‬‬
‫يبدأ يدور من آخر مساحة فحصها يق القائمة‪ ،‬مش من األول‪.‬‬

‫‪Stack Management‬‬
‫‪"Stack is used to record the current state...":‬‬ ‫•‬
‫ُ‬
‫البنامج أثناء التشغيل‪ ،‬زي البيانات المحلية ومتغبات الوظائف‪.‬‬
‫الـ ‪ Stack‬بتستخدم علشان تحفظ حالة ر‬
‫‪"Most CPUs have a specialized register...":‬‬ ‫•‬
‫الىل هتضاف‬
‫الىل بيحدد عنوان المكان ي‬
‫أغلب الـ ‪ CPUs‬عندها سجل خاص اسمه )‪ ،Stack Pointer (SP‬ي‬
‫أو تتحذف منه البيانات‪.‬‬
‫‪"Because the stack grows down...":‬‬ ‫•‬
‫بما إن الـ ‪ Stack‬بتنمو لتحت (نحو عناوين ذاكرة أقل)‪:‬‬
‫لما تضيف حاجة جديدة‪ ،‬الـ ‪ SP‬يبل لتحت‪.‬‬ ‫‪o‬‬

‫لما تحذف حاجة‪ ،‬الـ ‪ SP‬يطلع لفوق‪.‬‬ ‫‪o‬‬

‫كده الجزء العلوي من الـ ‪ Stack‬هو عند أصغر عنوان‪.‬‬ ‫‪o‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Stack Frames‬‬
‫‪"Each invocation of a function occupies a range of memory...":‬‬ ‫•‬
‫تستدع فيها دالة)‪ ، (Function‬بتاخد جزء يق الـ ‪ Stack‬اسمه ‪Stack Frame.‬‬
‫ي‬ ‫كل مرة‬
‫‪"The stack frame contains...":‬‬ ‫•‬
‫كل ‪Stack Frame‬بيحتوي عىل‪:‬‬
‫الىل بتحتاجها الدالة‪.‬‬
‫‪Parameters‬المدخالت ي‬ ‫‪o‬‬

‫الىل بيتم تعريفها داخل الدالة‪.‬‬


‫‪Local Variables‬المتغبات المحلية ي‬ ‫‪o‬‬

‫‪"When a function is called...":‬‬ ‫•‬


‫ُ‬
‫لما دالة بتستدع‪:‬‬
‫يتم إضافة )‪ (Push‬الـ ‪ Stack Frame‬الخاص بالدالة‪.‬‬ ‫‪o‬‬

‫تنته الدالة‪ ،‬يتم حذفه )‪ (Pop‬والرجوع للدالة السابقة‪.‬‬


‫ي‬ ‫لما‬ ‫‪o‬‬

‫‪"A specialized register...":‬‬ ‫•‬


‫الحال‪.‬‬
‫ي‬ ‫فيه سجل خاص اسمه ( ‪Frame Pointer‬أو)‪ ، Base Pointer‬بيحدد بداية ‪Stack Frame‬‬

‫‪Stack Management‬مثال‬
‫‪"Assume main() calls f()...":‬‬ ‫•‬
‫لو عندنا برنامج بالشكل ده‪:‬‬
‫تستدع )(‪g‬‬
‫ي‬ ‫تستدع )(‪ ،f‬وبعدين )(‪f‬‬
‫ي‬ ‫)(‪main‬‬ ‫‪o‬‬

‫كل دالة ليها ‪ Stack Frame‬خاص بيها‪.‬‬ ‫‪o‬‬

‫ى‬
‫هيبق ‪:‬‬ ‫البنامج توقف أثناء تنفيذ )(‪ ،g‬شكل الـ ‪Stack‬‬
‫لو ر‬ ‫‪o‬‬

‫أول ‪ Frame‬لـ )(‪main‬‬ ‫▪‬

‫بعده ‪ Frame‬لـ )(‪f‬‬ ‫▪‬

‫ً‬
‫وأخبا ‪ Frame‬لـ )(‪g‬‬ ‫▪‬

‫‪"Order and details of elements...":‬‬ ‫•‬


‫ً‬
‫ترتيب البيانات داخل الـ ‪ Stack Frame‬ممكن يختلف بناء عىل نوع المعالج )‪ (CPU‬أو نظام التشغيل‪.‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Stack Management – Calling Conventions‬‬


‫‪"The agreement on the contents...":‬‬ ‫•‬
‫ُ‬
‫الىل هتحفظ يق الـ ‪ Stack‬أثناء االتصال‪ ،‬ده اسمه ‪Calling Convention.‬‬
‫لما الدوال تتفق عىل البيانات ي‬
‫‪"Two broad categories of calling conventions":‬‬ ‫•‬

‫‪Stack Calling Convention:‬‬ ‫‪o‬‬


‫بتحط المدخالت )‪ (Arguments‬يق الـ‪Stack.‬‬
‫‪Register Calling Convention:‬‬ ‫‪o‬‬
‫بتحط المدخالت يق السجالت)‪(Registers‬‬

‫‪Stack Calling Convention‬‬


‫‪"Conventional approach to calling a function...":‬‬ ‫•‬
‫العكس‪.‬‬ ‫ى‬
‫ه إنك تحط المدخالت )‪ (Arguments‬يق الـ ‪ Stack‬بالبتيب‬
‫ي‬ ‫الطريقة التقليدية الستدعاء دالة ي‬
‫‪"Most CPUs have a specialized CALL instruction...":‬‬ ‫•‬
‫أغلب الـ ‪ CPUs‬عندها تعليمات خاصة الستدعاء الدوال زي ‪CALL‬‬
‫"‪"Example, the assembly code to call f(10, 20):‬‬ ‫•‬

‫‪ o‬لما تستدع الدالة )‪ ،f(10, 20‬الكود ى‬


‫هيبق ‪:‬‬ ‫ي‬
‫‪ Stack‬تحط القيمة ‪ 20‬يق الـ ; ‪PUSH $20‬‬
‫تحط القيمة ‪ 10‬بعدين ; ‪PUSH $10‬‬
‫تستدع الدالة ; ‪CALL f‬‬
‫ي‬ ‫‪f‬‬
‫النتيجة إن الـ ‪ Stack Frame‬الخاص بالدالة ‪ f‬ى‬
‫هيبق فيه ‪:‬‬ ‫‪o‬‬

‫المدخالت‪20 ، (10‬‬ ‫▪‬

‫‪Return Address‬العنوان الىل ى‬


‫هبجعله الدالة‬ ‫▪‬
‫ي‬
‫المتغبات المحلية‪.‬‬ ‫▪‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Register Calling Convention‬‬


‫‪"An alternate approach...":‬‬ ‫•‬
‫ه استخدام الـ ‪ Registers‬بدل الـ ‪ Stack‬لوضع المدخالت‪.‬‬
‫طريقة تانية ي‬
‫"‪"Example, assembly code to invoke f(10, 20):‬‬ ‫•‬

‫ى‬
‫هيبق ‪:‬‬ ‫‪ o‬الكود يق حالة استخدام السجالت‬
‫‪ R10‬تحط القيمة ‪ 10‬يق السجل ; ‪MOVE $10 -> %R10‬‬
‫‪ R11‬تحط القيمة ‪ 20‬يق السجل ; ‪MOVE $20 -> %R11‬‬
‫‪CALL f‬‬ ‫تستدع الدالة ;‬
‫ي‬ ‫‪f‬‬

‫‪Locating Data‬تحديد مواقع البيانات‬


‫‪"For each kind of data...":‬‬ ‫•‬
‫البنامج‪ ،‬فيه طريقة واضحة لتحديد موقعه يق الـ‪Memory.‬‬
‫لكل نوع من البيانات يق ر‬
‫‪"The computation varies with the storage class...":‬‬ ‫•‬
‫حساب موقع البيانات بيعتمد عىل نوعها‪:‬‬
‫‪Global Data‬بيانات عامة متاحة يق كل مكان‪.‬‬ ‫‪o‬‬

‫‪Local Data‬بيانات خاصة بدالة معينة‪.‬‬ ‫‪o‬‬

‫‪Heap Data‬بيانات يق منطقة الـ‪Heap‬‬ ‫‪o‬‬

‫‪Locating Global Data‬‬


‫‪"Absolute addressing":‬‬ ‫•‬

‫بيتم تحديد العنوان بشكل ر‬


‫مباش )‪ (Absolute Address‬للبيانات‪.‬‬ ‫‪o‬‬

‫‪"Base-relative address":‬‬ ‫•‬

‫‪ o‬العنوان بيتحدد ً‬
‫بناء عىل قاعدة ‪ (Base) + Offset‬معي‪.‬‬
‫‪"PC-relative address":‬‬ ‫•‬

‫‪ o‬العنوان بيتحدد ً‬
‫بناء عىل المسافة بي التعليمات الحالية والبيانات المطلوبة‪.‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Locating Data – Local Data and Heap‬‬


‫‪"Local data works differently":‬‬ ‫•‬
‫البيانات المحلية )‪ (Local Data‬بتتخزن يق الـ‪ ، Stack‬وكل مرة ممكن تاخد مكان مختلف يق الـ‪Memory‬‬
‫‪"Variables are specified as an offset...":‬‬ ‫•‬
‫المتغبات بيتم الوصول ليها كـ ‪ Offset‬بالنسبة للـ ‪ Frame Pointer‬الخاص بالدالة‪.‬‬
‫‪"Heap data can only be accessed by way of pointers":‬‬ ‫•‬

‫البيانات يق الـ ‪ Heap‬بتحتاج ‪Pointers‬علشان يتم الوصول ليها‪.‬‬ ‫‪o‬‬

‫الـ ‪ Compiler‬بيحسب العنوان عن طريق الـ ‪ Pointer‬وبعد كده يوصلك للبيانات‪.‬‬ ‫‪o‬‬

‫‪Locating Data – Non-Primitive Types‬‬


‫‪"So far, we considered atomic data types...":‬‬ ‫•‬
‫األنواع البسيطة زي ‪booleans‬و ‪integers‬و ‪floats‬بتتخزن بسهولة يق مكان واحد يق الذاكرة‪.‬‬
‫‪"More complex data types...":‬‬ ‫•‬
‫األنواع المعقدة( زي الـ ‪ Arrays‬والـ )‪ Structures‬ممكن تتخزن يق أي منطقة)‪، (Global, Local, Heap‬‬
‫بس بتحتاج معالجة إضافية‪.‬‬
‫‪Arrays in Memory‬‬
‫‪"An array can be stored...":‬‬ ‫•‬
‫الـ ‪ Array‬ممكن يتخزن يق الـ ‪ Global, Local,‬أو‪Heap memory.‬‬
‫‪"An element in the array is found by multiplying the index...":‬‬ ‫•‬
‫كالتال‪:‬‬
‫ي‬ ‫للوصول لعنرص يق‪ ، Array‬بتحسب العنوان‬
‫‪address(a[i]) = address(a) + sizeof(type) * i‬‬ ‫•‬

‫‪"In an unsafe language like C...":‬‬ ‫•‬

‫يق لغات زي‪ ، C‬لو حاولت تدخل عىل ‪ Index‬خارج حدود الـ‪ ، Array‬مش هيحصل أي‬ ‫‪o‬‬
‫تحذير‪ ،‬بس ممكن يحصل خطأ يق التنفيذ‪.‬‬
‫‪Dealing with Array Bounds‬‬
‫‪"A safer approach...":‬‬ ‫•‬
‫ه تخزين حجم الـ ‪ Array‬عند بدايته‪:‬‬ ‫ر‬
‫طريقة أكب أمان ي‬
‫الـ ‪ Compiler‬بيتأكد من إن الـ ‪ Index‬جوه الحدود قبل ما يحسب العنوان‪.‬‬ ‫‪o‬‬

‫ده بيمنع أخطاء بس بيأثر عىل األداء‪.‬‬ ‫‪o‬‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪"For every reference to a[i]...":‬‬ ‫•‬


‫ى‬
‫اآلئ‪:‬‬
‫تستدع عنرص من‪ ، Array‬بيحصل ي‬
‫ي‬ ‫كل مرة‬
‫يتحمل عنوان الـ ‪ Array‬يق سجل‪.‬‬ ‫‪o‬‬

‫يتأكد من إن الـ ‪ Index‬يق النطاق الصحيح‪.‬‬ ‫‪o‬‬

‫لو خارج الحدود‪ ،‬يظهر خطأ‪.‬‬ ‫‪o‬‬

‫‪Intel X86 and Structures‬‬


‫‪"The Intel X86 architecture...":‬‬ ‫•‬
‫الىل‪:‬‬
‫معالجات ‪ Intel X86‬عندها تعليمات خاصة زي ‪ BOUND‬ي‬
‫تقارن القيم مع حدود الـ‪Array.‬‬ ‫‪o‬‬

‫ترفع استثناء )‪ (Exception‬لو كانت القيمة خارج الحدود‪.‬‬ ‫‪o‬‬

‫‪"Structures have similar considerations":‬‬ ‫•‬


‫الـ ‪ Structure‬يق الذاكرة شبيه بالـ‪ ، Array‬لكنه بيحتوي عىل عنارص بحجم مختلف‪:‬‬
‫‪ o‬للوصول لعنرص‪ ،‬بيحسب الـ ‪ً Offset‬‬
‫بناء عىل بداية الـ ‪ Structure‬واسم العنرص‪.‬‬

‫‪Program Loading – Executable Formats‬‬


‫‪"Before a program is loaded in memory...":‬‬ ‫•‬
‫البنامج يتشغل يق الذاكرة‪ ،‬بيكون موجود كملف عىل القرص)‪ ، (Disk‬وبيحتاج صيغة )‪(Format‬‬
‫قبل ما ر‬
‫علشان يتحمل يق الذاكرة‪.‬‬
‫‪"There are a variety of executable formats...":‬‬ ‫•‬
‫فيه أنواع مختلفة من صيغ الملفات التنفيذية)‪ ، (Executable Formats‬منها البسيط ومنها المعقد‪.‬‬
‫‪"Store an executable as binary blob...":‬‬ ‫•‬
‫الملف التنفيذي ى‬
‫بيبق عبارة عن بيانات ثنائية )‪ (Binary Blob‬بتحتوي عىل‪:‬‬
‫الكود‪.‬‬ ‫‪o‬‬

‫البيانات‪.‬‬ ‫‪o‬‬

‫حالة الـ ‪ Stack‬والـ‪Heap‬‬ ‫‪o‬‬

‫‪"a.out executable format (in classic Unix systems)":‬‬ ‫•‬


‫يق األنظمة القديمة زي‪ ، Unix‬الصيغة ‪a.out‬كانت بتستخدم علشان تخزن ملف تنفيذي‪.‬‬
‫بيحتوي عىل ‪:‬‬ ‫‪o‬‬

‫‪Header:‬معلومات أساسية زي الحجم ونقاط البداية‪.‬‬ ‫▪‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬
‫جميع الحقوق محفوظة لمنصة ‪KBS Education‬‬
‫واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة‬

‫‪Text Section:‬الكود‪.‬‬ ‫▪‬

‫‪Data Section:‬البيانات‪.‬‬ ‫▪‬

‫بالبنامج‪.‬‬
‫‪Symbols:‬الرموز الخاصة ر‬ ‫▪‬

‫‪Program Loading – ELF Format‬‬


‫‪"Extensible Linking Format (ELF)":‬‬ ‫•‬

‫‪ o‬صيغة ‪ELF‬بتمثل صيغة حديثة ى‬


‫أكب بتستخدم للملفات التنفيذية والـ‪Libraries.‬‬
‫بتحتوي عىل أقسام متعددة زي ‪:‬‬ ‫‪o‬‬

‫الكود)‪(Code Section‬‬ ‫▪‬

‫البيانات)‪(Data Section‬‬ ‫▪‬

‫‪BSS:‬لتخزين البيانات غب المهيأة)‪(Uninitialized Data‬‬ ‫▪‬

‫‪Headers:‬لتوضيح هيكل الملف‪.‬‬ ‫▪‬

‫‪"An ELF file has multiple sections...":‬‬ ‫•‬

‫ملف الـ ‪ ELF‬ممكن يحتوي عىل ‪:‬‬ ‫‪o‬‬

‫معلومات التصحيح)‪(Debugging‬‬ ‫▪‬

‫بيانات التهيئة )‪ (Initialization‬أو اإلنهاء)‪(Finalization‬‬ ‫▪‬

‫‪Metadata:‬بيانات إضافية عن األدوات المستخدمة‪.‬‬ ‫▪‬

‫‪https://kbseducation.com/‬‬
‫‪0550602949 / 0557715267‬‬

You might also like