



السمعة:
بسم الله
يتكون المعالج من وحدات اساسية:
تشمل وحدة الحساب والمنطق (Arithmetic Logic Unit - ALU) التي تنفذ العمليات الحسابية والمنطقية.
ووحدة التحكم (Control Unit - CU) التي تولد إشارات التحكم اللازمة لتنظيم عمل المكونات.
بالإضافة إلى مجموعة من السجلات ذات الوصول السريع.
تقسم هذه المكونات إلى قسمين:
- مسار البيانات(Data Path):
هو مجمع المكونات المسؤولة عن نقل ومعالجة البيانات داخل المعالج,
ويشمل الـALU والـRegisters والحافلات الناقلة للبيانات (Bus).
على سبيل المثال:
تتضمن البيانات إلي بيتم معالجتها خطوات متل: نقل الأعداد من الذاكرة إلى المسجلات، والقيام بعمليات الجمع/الطرح في ALU ثم تخزين النتيجة في سجل آخر.
- وحدة التحكم (CU):
تقوم بتفسير وظيفة التعليمة الحالية وتوليد إشارات التحكم اللازمة (متل إشارات القراءة والكتابة على المسجلات والذاكرة، واختيار الوظيفة الي لازم يقوم فيها الـALU).
بالمعالجات الحديثة تنفذ دورات التعليمات بشكل متزامن (synchronized) ومتوازي (parallel) عبر تقنية اسمها خط الانابيب (Instruction Pipeline) لتحسين الاداء؛ (يعني مراحل الجلب أو الفك للتعليمات الجديدة ممكن تبدأ قبل انتهاء المعالجة النهائية للتعليمة السابقة). طيب شلون صار هاد التطور وعلى شو طرأ؟
الفكرة وما فيها تتمحور حول مسمى تنظيم النواقل (Bus Organization) واذا كان عندك نظرة على الـ(networking topology) يمكن تكون اخدت تصور عن الي عم يصير
بداية كان تنظيم النواقل بالمعالج البسيط(Bus Organization):
هو ناقل واحد يشترك فيه جميع المكونات (السجلات العامة ، سجل العنوان، سجل التعليمة ... الخ) بهي الحالة بتتيح الناقل الواحد تحريك البيانات بين المسجلات والذاكرة، لكن فقط قيمة واحدة بتنتقل بكل دورة. تسمى هذه الحالة بالتنظيم أحادي الناقل(single-bus organization):
ترتبط فيه جميع المسجلات متل(PC, IR, سجل عنوان الذاكرة MAR, سجل بيانات الذاكرة MDR) بناقل واحد مشترك، بحيث انو لا يمكن لناقل واحد نقل أكثر من قيمة واحدة بالوقت نفسه، مما يقلل من سرعة نقل المعطيات.
وتم تحسين ذلك باستخدام أكتر من ناقل.
ففي تنظيم الناقلين (two-bus organization):
بيكون ناقلين مستقلين، بيتمكن المعالج مثلاً من قراءة رقمين من سجلين بالوقت نفسه، مما يقلل عدد الدورات ويسرع النقل وتنفيذ العمليات. وهاد الي بيكون بالمعالجات الحديثة بس طبعا مش بس 2 ع حسب عدد الأنوية cores وكل core بكون الها ناقل.
مثال:
سيتكون المعالج من خطوات: تحميل 5 و3 في مسلجين (مثلا eax, ebx) في معمارية x86 ثم تنفيذ عملية الجمع في ALU وهيك ممكن تكون التعليمات:
• سجل البرنامج (Program Counter - PC):
بيخزن عنوان التعليمة التالية التي يجب تنفيذها.
• سجل التعليمة(Instruction Register - IR) أو (CIR):
بيحمل نسخة من التعليمة الجارية حالياً ليقوم المعالج بفك شيفرتها لمعرفة وظيفتها.
• سجل عنوان الذاكرة (Memory Address Register - MAR):
يخزن العناوين بالذاكرة أثناء عملية الجلب fetch والتخزين storage.
• سجل بيانات الذاكرة(Memory Data Register - MDR) أو (Memory Buffer Register - MBR):
بيحمل البيانات المقروءة من الذاكرة أو المطلوب كتابتها إليها.
بالإضافة إلى ذلك في عدد من السجلات ذات الأغراض العامة
• (General Purpose Registers):
هي الي بيبرمجها المعالج أو المبرمج لتخزين قيم مؤقتة أثناء تنفيذ الأوامر. وبتختلف قدرات وعدد هي السجلات على حسب المعمارية.
على سبيل المثال بمعمارية x86 تمتلك سجلات متل (eax, ebx, ecx, edx). والسعة التخزينية لهي السجلات هي 32-bit. وبيتميزوا هدول السجلات عن غيرهم بأنه يمكن استخدام الـregister بأكمله أو جزء منه خلال العمليات. مثلاً eax بيتكون من 32bits ولكن فينا نقسمو لقسمين كل قسم 16bits. وكمان فينا نقسم القسم الي قسمناه لقسمين تانين بصير كل واحد فيهن 8bits. وهي صورة موضحة:
المهم انو تصميم تنظيم السجلات بيشمل عددها، حجمها (عدد البايتات), وكيفية الوصول إليها (قراءة/كتابة)، والغرض منها.
مثال:
اذا كتبنا في C:
هيك ممكن تكون بالـx86:
-الوصول إلى الذاكرة(Memory access).
-الكتابة العائدة(write back).
وخلينا نتوسع بشرحن.
• الجلب (fetch):
بتبلش الدورة بجلب العنوان الحالي للتعليمة من سجل (PC) إلى سجل (MAR). يطلب المعالج من الذاكرة قراءة التعليمة من العنوان المحدد. فيوضع الناتج بسجل (MDR). بعد هيك بتنتقل التعليمة إلى سجل (IR) ليتم تفسيرها. بالنهاية يحدث سجل الـPC ليشير إلى التعليمة التالية (إما بزيادته بمقدار حجم التعليمة أو بتغييره في حالة القفزات).
• الفك (decode):
بعد تحميل التعليمة في IR, تقوم وحدة التحكم CU بتحليل التعليمة لتحديد نوع العملية والسجلات أو الذاكرة المطلوبة. ترسل CU إشارات تحكم تحدد مصدر ومعاملة البيانات (مثلاً أي سجلات بدها تستخدم، وهل في حاجة للوصول للذاكرة، ووظيفة ALU المطلوبة).
• التنفيذ(execute):
بهي المرحلة تُجري العملية الحسابية/المنطقية المطلوبة بواسطة الـALU (يعني اذا كانت العملية طرح/جمع يقوم الـALU بقراءة القيم من سجلات المصدر وإخراج النتيجة)؛ بشكل عام الـALU بينفذ عملياته بناءً على رموز العملية في التعليمة.
• الوصول إلى الذاكرة (Memory Access):
اذا كانت العملية تتطلب تحميل البيانات من الذاكرة أو تخزينها (متل أوامر load/store) يتم بهي المرحلة استخدام العنوان الي حسبه الALU للوصول للذاكرة.
• الكتابة العائدة (write back):
أخيرا تكتب نتائج العملية في سجل الواجهة المناسب. اذا كانت تعليمة حسابية فإن نتيجة الـALU تخزن بسجل الهدف، واذا كانت من نوع تحميل تنقل البيانات المقروءة من الذاكرة إلي السجل. بهي الطريقة تكتمل دورة التعليمة وبتكون البيانات جاهزة للاستخدام في التعليمات التانية.
مثال:
فلنفترض ان لدينا هذا الكود بالاسمبلي x86:
خلينا نفصلو خطوة بخطوة:
1.fetch:
بياخد المعالج عنوان التعليمة الاولى من PC ثم يقرأها من الذاكرة ثم تنقل إلى سجل IR.
2.decode:
بيفسر الـCU التعليمة الي بـIR على انها نقل قيمة (5) إلى السجل eax بيضبط إشارات التحكم لكتابة القيمة في eax.
3.execute:
بالنسبة لهي التعليمة مافي حاجة لعملية ALU معقدة (قد يعتبر مجرد تحميل فوري) فيضع 5 في eax مباشرة.
4.write back:
نتيجة العملية وهي 5 تذهب إلى eax.
هون مافي داعي للوصول للذاكرة لان التعليمات بسيطة.
لا تنسونا من صالح دعائكم.
بعد ما حكينا بالمقال السابق عن الـComputer architecture and organization وعن أجزاء الكمبيوتر الاساسية، اليوم ان شاء الله رح نتعمق شوي بالـProcessor وناخد مكوناته ووظائفه ...بنية المعالج ووظائفه(Processor Structure and Functions):
يتكون المعالج من وحدات اساسية:
تشمل وحدة الحساب والمنطق (Arithmetic Logic Unit - ALU) التي تنفذ العمليات الحسابية والمنطقية.
ووحدة التحكم (Control Unit - CU) التي تولد إشارات التحكم اللازمة لتنظيم عمل المكونات.
بالإضافة إلى مجموعة من السجلات ذات الوصول السريع.
تقسم هذه المكونات إلى قسمين:
- مسار البيانات(Data Path):
هو مجمع المكونات المسؤولة عن نقل ومعالجة البيانات داخل المعالج,
ويشمل الـALU والـRegisters والحافلات الناقلة للبيانات (Bus).
على سبيل المثال:
تتضمن البيانات إلي بيتم معالجتها خطوات متل: نقل الأعداد من الذاكرة إلى المسجلات، والقيام بعمليات الجمع/الطرح في ALU ثم تخزين النتيجة في سجل آخر.
- وحدة التحكم (CU):
تقوم بتفسير وظيفة التعليمة الحالية وتوليد إشارات التحكم اللازمة (متل إشارات القراءة والكتابة على المسجلات والذاكرة، واختيار الوظيفة الي لازم يقوم فيها الـALU).
بالمعالجات الحديثة تنفذ دورات التعليمات بشكل متزامن (synchronized) ومتوازي (parallel) عبر تقنية اسمها خط الانابيب (Instruction Pipeline) لتحسين الاداء؛ (يعني مراحل الجلب أو الفك للتعليمات الجديدة ممكن تبدأ قبل انتهاء المعالجة النهائية للتعليمة السابقة). طيب شلون صار هاد التطور وعلى شو طرأ؟
الفكرة وما فيها تتمحور حول مسمى تنظيم النواقل (Bus Organization) واذا كان عندك نظرة على الـ(networking topology) يمكن تكون اخدت تصور عن الي عم يصير
بداية كان تنظيم النواقل بالمعالج البسيط(Bus Organization):
هو ناقل واحد يشترك فيه جميع المكونات (السجلات العامة ، سجل العنوان، سجل التعليمة ... الخ) بهي الحالة بتتيح الناقل الواحد تحريك البيانات بين المسجلات والذاكرة، لكن فقط قيمة واحدة بتنتقل بكل دورة. تسمى هذه الحالة بالتنظيم أحادي الناقل(single-bus organization):
ترتبط فيه جميع المسجلات متل(PC, IR, سجل عنوان الذاكرة MAR, سجل بيانات الذاكرة MDR) بناقل واحد مشترك، بحيث انو لا يمكن لناقل واحد نقل أكثر من قيمة واحدة بالوقت نفسه، مما يقلل من سرعة نقل المعطيات.
وتم تحسين ذلك باستخدام أكتر من ناقل.
ففي تنظيم الناقلين (two-bus organization):
بيكون ناقلين مستقلين، بيتمكن المعالج مثلاً من قراءة رقمين من سجلين بالوقت نفسه، مما يقلل عدد الدورات ويسرع النقل وتنفيذ العمليات. وهاد الي بيكون بالمعالجات الحديثة بس طبعا مش بس 2 ع حسب عدد الأنوية cores وكل core بكون الها ناقل.
مثال:
C:
int a = 5, b = 3;
int c = a + b;
سيتكون المعالج من خطوات: تحميل 5 و3 في مسلجين (مثلا eax, ebx) في معمارية x86 ثم تنفيذ عملية الجمع في ALU وهيك ممكن تكون التعليمات:
كود:
mov eax, 5 ; تحميل الثابت 5 في السجل EAX
mov ebx, 3 ; تحميل الثابت 3 في السجل EBX
add eax, ebx ; ALU يجمع قيمة eax مع ebx والنتيجة في eax (اي c = 8)
تنظيم السجلات (Registers Organization):
السجلات: هي عبارة عن ذواكر صغيرة cache وسريعة داخل المعالج تستخدم لتخزين الأعداد الوسيطة وعناوين الذاكرة والنتائج والها اكتر من نوع:• سجل البرنامج (Program Counter - PC):
بيخزن عنوان التعليمة التالية التي يجب تنفيذها.
• سجل التعليمة(Instruction Register - IR) أو (CIR):
بيحمل نسخة من التعليمة الجارية حالياً ليقوم المعالج بفك شيفرتها لمعرفة وظيفتها.
• سجل عنوان الذاكرة (Memory Address Register - MAR):
يخزن العناوين بالذاكرة أثناء عملية الجلب fetch والتخزين storage.
• سجل بيانات الذاكرة(Memory Data Register - MDR) أو (Memory Buffer Register - MBR):
بيحمل البيانات المقروءة من الذاكرة أو المطلوب كتابتها إليها.
بالإضافة إلى ذلك في عدد من السجلات ذات الأغراض العامة
• (General Purpose Registers):
هي الي بيبرمجها المعالج أو المبرمج لتخزين قيم مؤقتة أثناء تنفيذ الأوامر. وبتختلف قدرات وعدد هي السجلات على حسب المعمارية.
على سبيل المثال بمعمارية x86 تمتلك سجلات متل (eax, ebx, ecx, edx). والسعة التخزينية لهي السجلات هي 32-bit. وبيتميزوا هدول السجلات عن غيرهم بأنه يمكن استخدام الـregister بأكمله أو جزء منه خلال العمليات. مثلاً eax بيتكون من 32bits ولكن فينا نقسمو لقسمين كل قسم 16bits. وكمان فينا نقسم القسم الي قسمناه لقسمين تانين بصير كل واحد فيهن 8bits. وهي صورة موضحة:
المهم انو تصميم تنظيم السجلات بيشمل عددها، حجمها (عدد البايتات), وكيفية الوصول إليها (قراءة/كتابة)، والغرض منها.
مثال:
اذا كتبنا في C:
C:
int a = 4, b = 5;
هيك ممكن تكون بالـx86:
كود:
mov eax, 4 ; تخزين القيمة 4 في السجل eax
mov ebx, 5 ; تخزن القيمة 5 في السجل ebx
وبعد ما حكينا بالمقال السابق عن دورة التعليمة بهاد المقال رح نحكي عن دورة التعليمة بالتفصيل (Instruction Cycle - Detailed):
حكينا من قبل انو دورة التعليمة بتمر بـ 3 مراحل اساسية (fetch, decode, execute) بس أحيانا بيكون في عمليتين إضافيتين:-الوصول إلى الذاكرة(Memory access).
-الكتابة العائدة(write back).
وخلينا نتوسع بشرحن.
• الجلب (fetch):
بتبلش الدورة بجلب العنوان الحالي للتعليمة من سجل (PC) إلى سجل (MAR). يطلب المعالج من الذاكرة قراءة التعليمة من العنوان المحدد. فيوضع الناتج بسجل (MDR). بعد هيك بتنتقل التعليمة إلى سجل (IR) ليتم تفسيرها. بالنهاية يحدث سجل الـPC ليشير إلى التعليمة التالية (إما بزيادته بمقدار حجم التعليمة أو بتغييره في حالة القفزات).
• الفك (decode):
بعد تحميل التعليمة في IR, تقوم وحدة التحكم CU بتحليل التعليمة لتحديد نوع العملية والسجلات أو الذاكرة المطلوبة. ترسل CU إشارات تحكم تحدد مصدر ومعاملة البيانات (مثلاً أي سجلات بدها تستخدم، وهل في حاجة للوصول للذاكرة، ووظيفة ALU المطلوبة).
• التنفيذ(execute):
بهي المرحلة تُجري العملية الحسابية/المنطقية المطلوبة بواسطة الـALU (يعني اذا كانت العملية طرح/جمع يقوم الـALU بقراءة القيم من سجلات المصدر وإخراج النتيجة)؛ بشكل عام الـALU بينفذ عملياته بناءً على رموز العملية في التعليمة.
• الوصول إلى الذاكرة (Memory Access):
اذا كانت العملية تتطلب تحميل البيانات من الذاكرة أو تخزينها (متل أوامر load/store) يتم بهي المرحلة استخدام العنوان الي حسبه الALU للوصول للذاكرة.
• الكتابة العائدة (write back):
أخيرا تكتب نتائج العملية في سجل الواجهة المناسب. اذا كانت تعليمة حسابية فإن نتيجة الـALU تخزن بسجل الهدف، واذا كانت من نوع تحميل تنقل البيانات المقروءة من الذاكرة إلي السجل. بهي الطريقة تكتمل دورة التعليمة وبتكون البيانات جاهزة للاستخدام في التعليمات التانية.
مثال:
فلنفترض ان لدينا هذا الكود بالاسمبلي x86:
كود:
mov eax, 5
mov ebx, 2
sub eax, ebx
خلينا نفصلو خطوة بخطوة:
1.fetch:
بياخد المعالج عنوان التعليمة الاولى من PC ثم يقرأها من الذاكرة ثم تنقل إلى سجل IR.
2.decode:
بيفسر الـCU التعليمة الي بـIR على انها نقل قيمة (5) إلى السجل eax بيضبط إشارات التحكم لكتابة القيمة في eax.
3.execute:
بالنسبة لهي التعليمة مافي حاجة لعملية ALU معقدة (قد يعتبر مجرد تحميل فوري) فيضع 5 في eax مباشرة.
4.write back:
نتيجة العملية وهي 5 تذهب إلى eax.
هون مافي داعي للوصول للذاكرة لان التعليمات بسيطة.
لا تنسونا من صالح دعائكم.
التعديل الأخير: