مضى على الشبكة و يوم من العطاء.

Computer Architecture & Organization 0x00

N0Tb1t

./عضو
>:: v1p ::<

firefox
linux

السمعة:

السلام عليكم ورحمة الله تعالى وبركاته
بسم الله والصلاة والسلام على خير خلق الله وعلى آله وصحبه ومن والاه

كُلُّ عِلْمٍ يَقُومُ عَلَى أَرْكَانٍ..
وَأَرْكَانُ عَصْرِنَا هِيَ تِلْكَ الَّتِي تَحْتَ قلعة الـ 0 وَالـ 1.


لقلة المصادر العربية وضعفها التي تتكلم عن هذه الموضوعات ،كان هذا سبب كتابة المقالات القادمة "الهدف هو رفع الجهل عن الاخوة" واسأل الله تعالى ان يكون هذا العمل خالصاً لوجهه الكريم.

بإذن الله وحوله وقوته ستكون هذه المقالات هي حجر الاساس القوي الذي ستكون قادر على البناء فوقها سنناقش الموضوع بطريقة عملية بإضافة لغة C والتحليل بلغة assembly. على بركة الله.

رح نوقف شوي من نشر مقالات C
لان المقالات القادمة يلزمها معرفة بالـmemory ومن هون اجت فكرة اني اعمل مقالات لمعمارية الحاسوب وتنظيمه.

Computer Organization and architecture​

Computer Organization vs Architecture:

تنظيم الحاسوب ومعماريته مفهومان يكملان بعضهما في تصميم النظام الحاسوبي.
•معمارية الحاسوب(Computer Architecture):
بتشير الى التصميم الوظيفي والمنطقي لنظام الحاسوب، متل اختيار مجموعة التعليمات (Instructions Set) ووظائف وحدة المعالجة وغيرها (يعني الامور الي بيساويها الكمبيوتر).

•تنظيم الحاسوب(Computer Organization):
بيهتم بالتنفيذ المادي لهيكلية الحاسوب وكيفية توصيل الـhardware (يعني كيف بيساوي الكمبيوتر التعليمات ، عبر وصلات وحدة المعالجة المركزية (CPU) والذاكرة (Memory) والإدخال والإخراج (I/O).

على سبيل المثال:
تحدد المعمارية ان المعالج x86 يستخدم تعليمة الجمع (add) بصيغة معينة ، اما بالنسبة لمعمارية ARM فهي تستخدم تعليمة الجمع (add) بصيغة اخرى ، اما التنظيم فيتعلق بكيفية عمل وحدة المعالجة لهي التعليمات فعلياً(متل وجود انابيب معالجة pipelining أو حجم الذاكرة المخبأة cache) , وهي معلومات لا تظهر للمبرمج ولكنها تؤثر على اداء التنفيذ.

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

على سبيل المثال:
ممكن نلاحظ ان تعليمة في بالـmachine code تضع قيمة في مسجل (register) ومعرفة تنظيم الحاسوب بتسمحلنا بمعرفة أي مسجل متل (eax, ebx ..الخ) يستخدم في تلك التعليمة.

مثال:

لنفترض الكود البسيط بلغة C:
C:
int sum(int a, int b) {
    return a + b;
}

بمعمارية x86 ممكن هيك يكون تجميعا:
كود:
mov        eax, [esp + 4]        ; تحميل المعامل الاول a الى المسجل EAX
add        eax, [esp + 8]         ; جمع المعامل التاني b مع EAX
mov        [esp], eax               ; حفظ النتيجة في المكان المخصص لارجاع القيمة
ret                                         ; العودة من الدالة

بينما بمعمارية ARM هيك ممكن يكون:
كود:
ADD        R0, R0, R1        ; لجمع محتويات R0 , R1 ونضع النتيجة في R0 (عادة يستخدم R0 لحمل ناتج الدالة)
BX        LR                        ; العودة من الدالة

هاد الاختلاف بأشكال الأوامر (Instruction format) يعكس اختلاف المعمارية، فالمعمارية تحدد بنية هذه التعليمات متل (add, mov ..الخ) بينما التنظيم يحدد آلية تنفيذها داخلياً على العتاد.



الوظائف الاساسية للحاسوب (Basic Computer Functions):

لأي حاسوب في أربع وظائف لا غنى عنها: -الادخال(Input)-المعالجة(processing)-الاخراج(output)-التخزين(storage)-

-الادخال(Input):
تأتي البيانات إلى الحاسوب من الخارج.
على سبيل المثال: إدخال المستخدم رقم من الـkeyboard أو صورة عبر scanner.

-المعالجة(processing):
تقوم وحدة المعالجة المركزية (cpu) بحساب النتائج المطلوبة. لأن الحاسوب يقوم بعمليات حسابية ومنطقية على البيانات المدخلة.
على سبيل المثال: ضرب عددين او جمعهما.

-الاخراج(output):
بعد المعالجة يتم عرض أو ارسال نتائج العمليات إلى الخارج.
على سبيل المثال: قد يرسل الحاسوب النتائج الى شاشة العرض أو يطبعها على الطابعة.

-التخزين(srorage):
حفظ البيانات والمعلومات. يشمل ذلك التخزين المؤقت في الـRAM أثناء التنفيذ ، أو تخزين دائم على القرص الصلب أو SSD.
حفظ المتغيرات أو القيم في الذاكرة يعتبر من طرق التخزين.

مثال:

الكود التالي بلغة C يوضح دورة حياة البيانات:
C:
int x = 10;                        // (التخزين الاولي للقيمة 10 في المتغير x)
int y = 20;                        // (التخزين الاولي للقيمة 10 في المتغير y)
int sum = x + y;            // (المعالجة: جمع x, y)
printf("%d\n", sum);     // (الاخراج: طباعة ناتج الجمع )

في تجميع x86:
كود:
mov        eax, [x]          ; جلب قيمة x من الذاكرة الى المسجل EAX
add         eax, [y]           ; جمع قيمة y (من الذاكرة) مع EAX
mov        [sum], eax       ; تخزين ناتج الجمع الي بالمسجل eax في المتغير sum



نظرة عامة على الأجزاء الاساسية للحاسوب (cpu, memory and I/O overview):


WhatsApp Image 2025-07-01 at 8.26.09 AM.webp


-وحدة المعالجة المركزية(Control Processing Unit):
هي عقل الحاسوب المسؤول عن تنفيذ الأوامر الحسابية والمنطقية والتحكم في تدفق البرنامج. تحتوي على وحدة الحساب والمنطق (ALU) لتنفيذ التعليمات، ووحدة التحكم (Control Unit) التي تنسق تنفيذ التعليمات، ومجموعة من المسجلات(registers) للتخزين المؤقت للبيانات. (يعني الـcpu هي المعالج الرئيسي للمهام) حيث تنقل التعليمات من الذاكرة وتنفذها واحدة تلو الأخرى.

على سبيل المثال: تعليمة add eax, 1:
بتعني ان وحدة الـALU ستضيف واحد إلى المسجل eax داخل الـcpu.

-الذاكرة(memory):

WhatsApp Image 2025-07-01 at 8.26.44 AM.webp


هي المكان الذي تحفظ به البيانات والتعليمات. وتقسم إلى قسمين:
primary memory:

تحتوي على الذاكرة العشوائية RAM التي تخزن البيانات المؤقتة أثناء التشغيل ،وذاكرة القراءة فقط ROM التي تحتوي على برامج الإقلاع (boot).
secondary memory:
متل الأقراص الصلبة HDD ومحركات الأقراص الصلبة SSD لتخزين البيانات على المدى الطويل.

في المعالجة تُنقل البيانات والتعليمات من الذاكرة الرئيسية إلى cpu.
مثال: mov eax, [address]
عند التنفيذ يقوم المعالج بجلب (input) البيانات من عنوان الذاكرة المحدد إلى مسجل eax.

-أجهزة الإدخال والإخراج (I/O devices):
هي الوسيط الذي يتصل بالحاسوب ويمده بالبيانات ويستقبل منه النتائج.
-أجهزة الإدخال متل: الـkeyboard والـmouse
-أجهزة الإخراج متل: الشاشة والطابعة.

تعمل وحدة الإدخال والإخراج (I/O interface) على تنسيق البيانات بين سرعات الـcpu وسرعات الأجهزة الخارجية وتقوم بمراقبة الأخطاء.

مثال:

كود C:
C:
int a = 5;                // تعريف المتغير a في الذاكرة
int b = 3;                // تعريف المتغير b في الذاكرة
int c = a + b;          // ينقل a, b الى الـCPU ويجمعان داخل  EAX ثم يخزن الناتج في C

assembly x86:
كود:
mov        eax, 5            ; تحميل القيمة 5 الى المسجل EAX
add         eax, [b]         ; اضافة محتوى المتغير b (الموجود في الذاكرة) الى EAX
mov        [c], eax        ; تخزين نتيجة الجمع في المتغير C بالذاكرة

هي الأوامر بتظهر كيف بيتفاعل الـcpu مع الـmemory. اما أجهزة الإدخال والإخراج فهي تتعامل مع العالم الخارجي. بس هي بتبقى جزء اساسي لفهم أين وكيف تصل البيانات إلى الحاسوب وكيف يمكن استخراجها منه.



دورة التعليمة(Instruction cycle):


WhatsApp Image 2025-07-01 at 8.26.50 AM.webp


دورة التعليمة أو الـ(fetch-decode-execute cycle) هي العملية المتكررة التي يقوم بها المعالج المركزي لتنفيذ كل تعليمة من البرنامج. تتكون هذه الدورة من ثلاث مراحل أساسية:

1.جلب التعليمة(fetch):
في هذه المرحلة يستخدم المعالج عداد البرنامج(Program Counter - PC) ليحدد موقع التعليمة التالية في الذاكرة. يقوم المعالج بقراءة التعليمة الثنائية من ذلك العنوان ووضعها في سجل التعليمة (Instruction Register - IR). ثم يزيد قيمة PC للإشارة الى التعليمة التالية.

2.فك التعليمة(decode):
بعد الجلب fetch, يقوم المعالج بتفسير التعليمة المحملة في سجل التعليمة. يحدد رمز التعليمة(Opcode) والإشارات (Operands) اللازمة.
على سبيل المثال: اذا كانت التعليمة تعني "أضف محتوى مسجلين" فإن المعالج يعرّف نوع العملية (إضافة) والمسجلات المعينة.

3.التنفيذ (execute):
أخيراً ينفذ المعالج العملية المطلوبة. قد يكون ذلك بعملية حسابية/منطقية في الـALU متل (الجمع/الطرح) أو نقل بيانات بين المسجلات والذاكرة أو تغيير قيمة عداد البرنامج للحالات الخاصة (كالقفز jmp) أو اي عملية تحكم أخرى.

مثال:

كود C:
C:
int x = 5;
int y = 3;
int z = x + y;

assembly:
كود:
mov        eax, 5                ; (fetch): تعليمة mov تجلب من الذاكرة
mov        ebx, 3                ; (decode): فك التعليمة التانية
add         eax, ebx           ; (execute): جمع eax مع ebx
mov        [z], eax            ; تخزين النتيجة

عند تشغيل هذه الأوامر يقوم المعالج بجلب كل تعليمة من الذاكرة واحدة تلو الاخرى، ثم يفك شيفرتها وينفذها.
على سبيل المثال: في أول خطوة جلب تعليمة 'mov eax, 5' إلى IR ثم يقوم الـdecoder بتحديد أنها عملية نقل (immediate) إلى المسجل eax, ثم ينفذها بوضع القيمة 5 في السجل eax. ثم تنتقل العملية إلى add eax, ebx وهكذا.
أثناء هذه الدورة تتفاعل أجزاء مختلفة من النظام (الذاكرة، المسجلات، وحدات الحساب) لتحقيق التنفيذ.

اذكروني بدعوة في ظهر الغيب.
 
السلام عليكم ورحمة الله تعالى وبركاته
بسم الله والصلاة والسلام على خير خلق الله وعلى آله وصحبه ومن والاه

كُلُّ عِلْمٍ يَقُومُ عَلَى أَرْكَانٍ..
وَأَرْكَانُ عَصْرِنَا هِيَ تِلْكَ الَّتِي تَحْتَ قلعة الـ 0 وَالـ 1.


لقلة المصادر العربية وضعفها التي تتكلم عن هذه الموضوعات ،كان هذا سبب كتابة المقالات القادمة "الهدف هو رفع الجهل عن الاخوة" واسأل الله تعالى ان يكون هذا العمل خالصاً لوجهه الكريم.

بإذن الله وحوله وقوته ستكون هذه المقالات هي حجر الاساس القوي الذي ستكون قادر على البناء فوقها سنناقش الموضوع بطريقة عملية بإضافة لغة C والتحليل بلغة assembly. على بركة الله.

رح نوقف شوي من نشر مقالات C
لان المقالات القادمة يلزمها معرفة بالـmemory ومن هون اجت فكرة اني اعمل مقالات لمعمارية الحاسوب وتنظيمه.

Computer Organization and architecture​

Computer Organization vs Architecture:

تنظيم الحاسوب ومعماريته مفهومان يكملان بعضهما في تصميم النظام الحاسوبي.
•معمارية الحاسوب(Computer Architecture):
بتشير الى التصميم الوظيفي والمنطقي لنظام الحاسوب، متل اختيار مجموعة التعليمات (Instructions Set) ووظائف وحدة المعالجة وغيرها (يعني الامور الي بيساويها الكمبيوتر).

•تنظيم الحاسوب(Computer Organization):
بيهتم بالتنفيذ المادي لهيكلية الحاسوب وكيفية توصيل الـhardware (يعني كيف بيساوي الكمبيوتر التعليمات ، عبر وصلات وحدة المعالجة المركزية (CPU) والذاكرة (Memory) والإدخال والإخراج (I/O).

على سبيل المثال:
تحدد المعمارية ان المعالج x86 يستخدم تعليمة الجمع (add) بصيغة معينة ، اما بالنسبة لمعمارية ARM فهي تستخدم تعليمة الجمع (add) بصيغة اخرى ، اما التنظيم فيتعلق بكيفية عمل وحدة المعالجة لهي التعليمات فعلياً(متل وجود انابيب معالجة pipelining أو حجم الذاكرة المخبأة cache) , وهي معلومات لا تظهر للمبرمج ولكنها تؤثر على اداء التنفيذ.

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

على سبيل المثال:
ممكن نلاحظ ان تعليمة في بالـmachine code تضع قيمة في مسجل (register) ومعرفة تنظيم الحاسوب بتسمحلنا بمعرفة أي مسجل متل (eax, ebx ..الخ) يستخدم في تلك التعليمة.

مثال:

لنفترض الكود البسيط بلغة C:
C:
int sum(int a, int b) {
    return a + b;
}

بمعمارية x86 ممكن هيك يكون تجميعا:
كود:
mov        eax, [esp + 4]        ; تحميل المعامل الاول a الى المسجل EAX
add        eax, [esp + 8]         ; جمع المعامل التاني b مع EAX
mov        [esp], eax               ; حفظ النتيجة في المكان المخصص لارجاع القيمة
ret                                         ; العودة من الدالة

بينما بمعمارية ARM هيك ممكن يكون:
كود:
ADD        R0, R0, R1        ; لجمع محتويات R0 , R1 ونضع النتيجة في R0 (عادة يستخدم R0 لحمل ناتج الدالة)
BX        LR                        ; العودة من الدالة

هاد الاختلاف بأشكال الأوامر (Instruction format) يعكس اختلاف المعمارية، فالمعمارية تحدد بنية هذه التعليمات متل (add, mov ..الخ) بينما التنظيم يحدد آلية تنفيذها داخلياً على العتاد.



الوظائف الاساسية للحاسوب (Basic Computer Functions):

لأي حاسوب في أربع وظائف لا غنى عنها: -الادخال(Input)-المعالجة(processing)-الاخراج(output)-التخزين(storage)-

-الادخال(Input):
تأتي البيانات إلى الحاسوب من الخارج.
على سبيل المثال: إدخال المستخدم رقم من الـkeyboard أو صورة عبر scanner.

-المعالجة(processing):
تقوم وحدة المعالجة المركزية (cpu) بحساب النتائج المطلوبة. لأن الحاسوب يقوم بعمليات حسابية ومنطقية على البيانات المدخلة.
على سبيل المثال: ضرب عددين او جمعهما.

-الاخراج(output):
بعد المعالجة يتم عرض أو ارسال نتائج العمليات إلى الخارج.
على سبيل المثال: قد يرسل الحاسوب النتائج الى شاشة العرض أو يطبعها على الطابعة.

-التخزين(srorage):
حفظ البيانات والمعلومات. يشمل ذلك التخزين المؤقت في الـRAM أثناء التنفيذ ، أو تخزين دائم على القرص الصلب أو SSD.
حفظ المتغيرات أو القيم في الذاكرة يعتبر من طرق التخزين.

مثال:

الكود التالي بلغة C يوضح دورة حياة البيانات:
C:
int x = 10;                        // (التخزين الاولي للقيمة 10 في المتغير x)
int y = 20;                        // (التخزين الاولي للقيمة 10 في المتغير y)
int sum = x + y;            // (المعالجة: جمع x, y)
printf("%d\n", sum);     // (الاخراج: طباعة ناتج الجمع )

في تجميع x86:
كود:
mov        eax, [x]          ; جلب قيمة x من الذاكرة الى المسجل EAX
add         eax, [y]           ; جمع قيمة y (من الذاكرة) مع EAX
mov        [sum], eax       ; تخزين ناتج الجمع الي بالمسجل eax في المتغير sum



نظرة عامة على الأجزاء الاساسية للحاسوب (cpu, memory and I/O overview):


مشاهدة المرفق 18218

-وحدة المعالجة المركزية(Control Processing Unit):
هي عقل الحاسوب المسؤول عن تنفيذ الأوامر الحسابية والمنطقية والتحكم في تدفق البرنامج. تحتوي على وحدة الحساب والمنطق (ALU) لتنفيذ التعليمات، ووحدة التحكم (Control Unit) التي تنسق تنفيذ التعليمات، ومجموعة من المسجلات(registers) للتخزين المؤقت للبيانات. (يعني الـcpu هي المعالج الرئيسي للمهام) حيث تنقل التعليمات من الذاكرة وتنفذها واحدة تلو الأخرى.

على سبيل المثال: تعليمة add eax, 1:
بتعني ان وحدة الـALU ستضيف واحد إلى المسجل eax داخل الـcpu.

-الذاكرة(memory):

مشاهدة المرفق 18219

هي المكان الذي تحفظ به البيانات والتعليمات. وتقسم إلى قسمين:
primary memory:

تحتوي على الذاكرة العشوائية RAM التي تخزن البيانات المؤقتة أثناء التشغيل ،وذاكرة القراءة فقط ROM التي تحتوي على برامج الإقلاع (boot).
secondary memory:
متل الأقراص الصلبة HDD ومحركات الأقراص الصلبة SSD لتخزين البيانات على المدى الطويل.

في المعالجة تُنقل البيانات والتعليمات من الذاكرة الرئيسية إلى cpu.
مثال: mov eax, [address]
عند التنفيذ يقوم المعالج بجلب (input) البيانات من عنوان الذاكرة المحدد إلى مسجل eax.

-أجهزة الإدخال والإخراج (I/O devices):
هي الوسيط الذي يتصل بالحاسوب ويمده بالبيانات ويستقبل منه النتائج.
-أجهزة الإدخال متل: الـkeyboard والـmouse
-أجهزة الإخراج متل: الشاشة والطابعة.

تعمل وحدة الإدخال والإخراج (I/O interface) على تنسيق البيانات بين سرعات الـcpu وسرعات الأجهزة الخارجية وتقوم بمراقبة الأخطاء.

مثال:

كود C:
C:
int a = 5;                // تعريف المتغير a في الذاكرة
int b = 3;                // تعريف المتغير b في الذاكرة
int c = a + b;          // ينقل a, b الى الـCPU ويجمعان داخل  EAX ثم يخزن الناتج في C

assembly x86:
كود:
mov        eax, 5            ; تحميل القيمة 5 الى المسجل EAX
add         eax, [b]         ; اضافة محتوى المتغير b (الموجود في الذاكرة) الى EAX
mov        [c], eax        ; تخزين نتيجة الجمع في المتغير C بالذاكرة

هي الأوامر بتظهر كيف بيتفاعل الـcpu مع الـmemory. اما أجهزة الإدخال والإخراج فهي تتعامل مع العالم الخارجي. بس هي بتبقى جزء اساسي لفهم أين وكيف تصل البيانات إلى الحاسوب وكيف يمكن استخراجها منه.



دورة التعليمة(Instruction cycle):


مشاهدة المرفق 18220

دورة التعليمة أو الـ(fetch-decode-execute cycle) هي العملية المتكررة التي يقوم بها المعالج المركزي لتنفيذ كل تعليمة من البرنامج. تتكون هذه الدورة من ثلاث مراحل أساسية:

1.جلب التعليمة(fetch):
في هذه المرحلة يستخدم المعالج عداد البرنامج(Program Counter - PC) ليحدد موقع التعليمة التالية في الذاكرة. يقوم المعالج بقراءة التعليمة الثنائية من ذلك العنوان ووضعها في سجل التعليمة (Instruction Register - IR). ثم يزيد قيمة PC للإشارة الى التعليمة التالية.

2.فك التعليمة(decode):
بعد الجلب fetch, يقوم المعالج بتفسير التعليمة المحملة في سجل التعليمة. يحدد رمز التعليمة(Opcode) والإشارات (Operands) اللازمة.
على سبيل المثال: اذا كانت التعليمة تعني "أضف محتوى مسجلين" فإن المعالج يعرّف نوع العملية (إضافة) والمسجلات المعينة.

3.التنفيذ (execute):
أخيراً ينفذ المعالج العملية المطلوبة. قد يكون ذلك بعملية حسابية/منطقية في الـALU متل (الجمع/الطرح) أو نقل بيانات بين المسجلات والذاكرة أو تغيير قيمة عداد البرنامج للحالات الخاصة (كالقفز jmp) أو اي عملية تحكم أخرى.

مثال:

كود C:
C:
int x = 5;
int y = 3;
int z = x + y;

assembly:
كود:
mov        eax, 5                ; (fetch): تعليمة mov تجلب من الذاكرة
mov        ebx, 3                ; (decode): فك التعليمة التانية
add         eax, ebx           ; (execute): جمع eax مع ebx
mov        [z], eax            ; تخزين النتيجة

عند تشغيل هذه الأوامر يقوم المعالج بجلب كل تعليمة من الذاكرة واحدة تلو الاخرى، ثم يفك شيفرتها وينفذها.
على سبيل المثال: في أول خطوة جلب تعليمة 'mov eax, 5' إلى IR ثم يقوم الـdecoder بتحديد أنها عملية نقل (immediate) إلى المسجل eax, ثم ينفذها بوضع القيمة 5 في السجل eax. ثم تنتقل العملية إلى add eax, ebx وهكذا.
أثناء هذه الدورة تتفاعل أجزاء مختلفة من النظام (الذاكرة، المسجلات، وحدات الحساب) لتحقيق التنفيذ.

اذكروني بدعوة في ظهر الغيب.
ما شاء الله تبارك الله ! عنجد الموضوع المنتظر 🔥
ربنا يعطيك الف عافية ويقويك على القادم
احنا دائما بانتظار شروحاتك 👏👏
 
ما شاء الله تبارك الله ! عنجد الموضوع المنتظر 🔥
ربنا يعطيك الف عافية ويقويك على القادم
احنا دائما بانتظار شروحاتك 👏👏
نفع الله بهذا العلم ان شاء الله يكون بالقدر الذي يستفاد منه

الله يعافيك

يشرفني متابعتك للسلسلة
 
التعديل الأخير:

آخر المشاركات

عودة
أعلى