CS477 - Module13
CS477 - Module13
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
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
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
البنامج حاول يدخل عىل منطقة مش مسموح بيها يق الـ ، memoryبيحصل خطأ اسمهPage Fault
لو ر 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
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
كل ( Processعملية) بتشوف العناوين الخاصة بيها بس ومش بتأثر عىل عمليات تانية. o
البنامج يتوقف.
Segmentation Faultر o
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
النظام ) (OSياخد التحكم ويحدد لو كان هيوسع الـ Stackأو ال. o
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
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
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
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
أكب.
لو يق أجزاء مجاورة كمان ، Freeبيتم دمجهم مع بعض لتوفب مساحة ر o
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
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
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
Stack Managementمثال
"Assume main() calls f()...": •
لو عندنا برنامج بالشكل ده:
تستدع )(g
ي تستدع )( ،fوبعدين )(f
ي )(main o
ى
هيبق : البنامج توقف أثناء تنفيذ )( ،gشكل الـ Stack
لو ر o
ً
وأخبا Frameلـ )(g ▪
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
ى
هيبق : oالكود يق حالة استخدام السجالت
R10تحط القيمة 10يق السجل ; MOVE $10 -> %R10
R11تحط القيمة 20يق السجل ; MOVE $20 -> %R11
CALL f تستدع الدالة ;
ي f
oالعنوان بيتحدد ً
بناء عىل قاعدة (Base) + Offsetمعي.
"PC-relative address": •
oالعنوان بيتحدد ً
بناء عىل المسافة بي التعليمات الحالية والبيانات المطلوبة.
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
الـ Compilerبيحسب العنوان عن طريق الـ Pointerوبعد كده يوصلك للبيانات. o
يق لغات زي ، Cلو حاولت تدخل عىل Indexخارج حدود الـ ، Arrayمش هيحصل أي o
تحذير ،بس ممكن يحصل خطأ يق التنفيذ.
Dealing with Array Bounds
"A safer approach...": •
ه تخزين حجم الـ Arrayعند بدايته: ر
طريقة أكب أمان ي
الـ Compilerبيتأكد من إن الـ Indexجوه الحدود قبل ما يحسب العنوان. o
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
البيانات. o
https://kbseducation.com/
0550602949 / 0557715267
جميع الحقوق محفوظة لمنصة KBS Education
واليُسمح بنشر أو تبادل هذه الملفات (شرعا ً وقانوناً) لغير المشتركين في الدورة
بالبنامج.
Symbols:الرموز الخاصة ر ▪
https://kbseducation.com/
0550602949 / 0557715267