مبادئ تنظيم الحاسوب
مقدمة
من الترانزستور إلى وحدة المعالجة المركزية، كيف يشكل الحاسوب نظامًا متكاملاً؟ في الفصل السابق، بدأنا من الترانزستورات وقمنا ببناء الجامع والسجلات ووحدة الحساب، وأخيرًا قمنا بتجميع نواة وحدة المعالجة المركزية. لكن وحدة المعالجة المركزية وحدها لا تكفي - فهي تحتاج إلى العمل بالتنسيق مع الذاكرة وأجهزة الإدخال والإخراج، وتحتاج إلى ناقل لتوصيل المكونات المختلفة، وتحتاج إلى نظام تعليمات لقيادتها. في هذا الفصل، سننتقل من المنظور الداخلي لوحدة المعالجة المركزية إلى منظور نظام الحاسوب بأكمله، ونتعمق في فهم معمارية فون نيومان ونظام التعليمات وهرمية التخزين والناقل والإدخال والإخراج.
ماذا ستتعلم في هذا المقال؟
بعد إكمال هذا الفصل، ستحصل على:
- منظور النظام: فهم كيفية عمل وحدة المعالجة المركزية والذاكرة وأجهزة الإدخال والإخراج معًا بشكل منسق بدلاً من كونك هاوي أجهزة منعزلاً
- المصطلحات التقنية للأجهزة: إتقان مفاهيم أساسية مثل دورة التعليمات وخط التجميع وCPI ومعدل إصابة الذاكرة المخبأة
- التفكير في الأداء: فهم الاختناقات ووسائل التحسين في تنظيم الحاسوب
- أساس للتعلم المستقبلي: بناء أساس متين لأنظمة التشغيل ومعمارية الحاسوب والتطوير المضمن
| الفصل | المحتوى | المفاهيم الأساسية |
|---|---|---|
| الفصل 1 | معمارية فون نيومان | البرنامج المخزن، المكونات الخمسة الرئيسية، مسار البيانات |
| الفصل 2 | نظام التعليمات | تنسيق التعليمات، أنماط العنونة، CISC مقابل RISC |
| الفصل 3 | وحدة التحكم في CPU | وحدة التحكم، العمليات الدقيقة، دورة التعليمات |
| الفصل 4 | نظام التخزين | الذاكرة المخبأة، الذاكرة الرئيسية، الذاكرة الافتراضية، آلية التقسيم إلى صفحات |
| الفصل 5 | الناقل والإدخال والإخراج | تحكيم الناقل، DMA، آلية المقاطعة |
0. الصورة الشاملة: نظام أجهزة الحاسوب
في الفصل السابق "من الترانزستور إلى CPU"، فهمنا بالفعل كيفية عمل الجزء الداخلي من وحدة المعالجة المركزية - من جلب التعليمات وفك التشفير والتنفيذ إلى الكتابة الخلفية. لكن وحدة المعالجة المركزية نفسها هي مجرد وحدة تنفيذ، ولجعل الحاسوب "قابلاً للاستخدام" حقًا، نحتاج إلى مجموعة من المكونات الطرفية للتعاون معها.
تفكيك طبقة بطبقة: نظام أجهزة الحاسوب
الطبقة الأولى: نواة CPU مسؤولة عن تنفيذ التعليمات، وتتضمن وحدة التحكم (التي تصدر إشارات التحكم) ووحدة الحساب (التي تنفذ العمليات الحسابية والمنطقية)
الطبقة الثانية: مجموعة السجلات وحدات تخزين عالية السرعة داخل CPU، تشمل السجلات العامة والسجلات المخصصة (PC، IR، MAR، MDR وغيرها)
الطبقة الثالثة: الذاكرة الرئيسية الذاكرة المستخدمة لتخزين البرامج والبيانات، تصل إليها CPU عبر ناقل العناوين وناقل البيانات
الطبقة الرابعة: أجهزة الإدخال والإخراج أجهزة الإدخال والإخراج متصلة بناقل النظام عبر وحدات تحكم I/O
الطبقة الخامسة: ناقل النظام قناة البيانات التي تربط CPU والذاكرة وI/O، وتشمل ناقل العناوين وناقل البيانات وناقل التحكم
1. معمارية فون نيومان: "دستور" الحاسوب الحديث
1.1 مبدأ البرنامج المخزن
في عام 1945، اقترح عالم الرياضيات جون فون نيومان فكرة البرنامج المخزن (Stored-program) الثورية. وضعت هذه الفكرة أساس الحاسوب الحديث.
المفهوم الأساسي
البرنامج المخزن: البرنامج نفسه يُعامل كنوع خاص من البيانات، ويُخزن في الذاكرة مثل البيانات العادية. يمكن لوحدة CPU قراءة وتنفيذ تعليمات البرنامج المخزنة في الذاكرة تمامًا كما تقرأ وتكتب البيانات.
هذا يعني:
- الحواسيب المبكرة: كانت البرامج تُنفذ عبر توصيلات ثابتة للدوائر، وتغيير البرنامج يتطلب إعادة لحام الدوائر
- معمارية فون نيومان: البرنامج مخزن في الذاكرة، وتغيير البرنامج يتطلب فقط تعديل محتوى الذاكرة
1.2 المكونات الخمسة الرئيسية
تقسم معمارية فون نيومان الحاسوب إلى خمسة مكونات أساسية:
| Feature | Register | Memory (RAM) |
|---|---|---|
| Location | Inside the CPU | Outside the CPU |
| Access speed | Fastest (< 1ns) | Slower (50-100ns) |
| Capacity | Tiny (bytes) | Large (GB) |
| Role | Hold instructions, operands, and results | Store programs and data |
| المكون | بالإنجليزية | الوظيفة | المكونات الرئيسية |
|---|---|---|---|
| وحدة الحساب | ALU (Arithmetic Logic Unit) | تنفيذ العمليات الحسابية والمنطقية | الجامع، المزلق، المقارن |
| وحدة التحكم | CU (Control Unit) | توجيه وتنسيق عمل جميع المكونات | سجل التعليمات، مفكك التشفير، مولد التوقيت |
| الذاكرة | Memory | تخزين البرامج والبيانات | سجل عناوين الذاكرة (MAR)، سجل بيانات الذاكرة (MDR) |
| أجهزة الإدخال | Input | إدخال المعلومات | لوحة المفاتيح، الفأرة، الماسح الضوئي |
| أجهزة الإخراج | Output | إخراج المعلومات | الشاشة، الطابعة |
1.3 مسار البيانات
مسار البيانات (Data Path) هو المسار الذي تتدفق فيه البيانات بين وحدات الوظائف المختلفة. داخل CPU، يربط مسار البيانات:
- مجموعة السجلات
- وحدة الحساب والمنطق (ALU)
- سجل بيانات الذاكرة (MDR)
عرض مسار البيانات (عدد البتات التي يمكن نقلها في المرة الواحدة) يؤثر مباشرة على أداء الحاسوب.
1.4 عنق زجاجة فون نيومان
لمعمارية فون نيومان عنق زجاجة أداء مشهور:
سرعة نقل البيانات بين CPU والذاكرة أقل بكثير من سرعة معالجة CPU.
هذا يؤدي إلى بقاء CPU غالبًا في حالة خمول "في انتظار البيانات". العديد من تقنيات التحسين في الحواسيب الحديثة تتمحور حول هذه المشكلة:
| تقنية التحسين | المبدأ |
|---|---|
| الذاكرة المخبأة (Cache) | وضع تخزين صغير عالي السرعة بالقرب من CPU |
| خط تجميع التعليمات | جعل تعليمات متعددة في مراحل مختلفة في نفس الوقت |
| فائقة التدرج (Superscalar) | إصدار تعليمات متعددة في نفس دورة الساعة |
| تعدد النوى | نوى CPU متعددة تتقاسم مهام الحساب |
2. نظام التعليمات: واجهة CPU مع البرمجيات
في القسم السابق، تعلمنا الفكرة الأساسية لمعمارية فون نيومان: البرنامج والبيانات كلاهما مخزن في الذاكرة. لكن هذا يثير سؤالاً رئيسيًا - كيف يبدو "البرنامج" المخزن في الذاكرة؟ كيف تقرأه CPU؟
الإجابة هي نظام التعليمات (Instruction Set Architecture, ISA). إذا شبهنا CPU بخدمة، فإن نظام التعليمات هو وثيقة API الخاصة بها - فهو يعرف جميع الأوامر التي يمكن لـ CPU فهمها، وتنسيق كل أمر، ونطاق البيانات التي يمكن للأمر العمل عليها. كل سطر من الكود الذي تكتبه سيُترجم في النهاية إلى سلسلة من استدعاءات "API" هذه.
2.1 من الكود إلى التعليمات: رحلة ترجمة سطر كود واحد
لنبني أولاً فهمًا شاملاً: الكود الذي تكتبه في المحرر، وما ينفذه CPU فعليًا، بينهما عدة طبقات من الترجمة.
🔗 From Code to Instructions: One Line Through the Translation Pipeline
Click each stage to see how source code becomes CPU-executable instructions
int a = 10 + 5;
MOV R1, #10 ; put 10 into register R1 MOV R2, #5 ; put 5 into register R2 ADD R3, R1, R2 ; R3 = R1 + R2 STORE R3, [a] ; store the result at variable a
0001 0001 0000 1010 → MOV R1, #10 0001 0010 0000 0101 → MOV R2, #5 0010 0011 0001 0010 → ADD R3, R1, R2 0100 0011 1000 0000 → STORE R3, [a]
Clock 1: fetch → decode → execute MOV R1, #10 Clock 2: fetch → decode → execute MOV R2, #5 Clock 3: fetch → decode → execute ADD R3, R1, R2 Clock 4: fetch → decode → execute STORE R3, [a]
سلسلة الترجمة هذه هي المفتاح لفهم نظام التعليمات:
| المستوى | المحتوى | من يستطيع فهمه |
|---|---|---|
| لغة عالية المستوى | int a = 10 + 5; | البشر |
| لغة التجميع | MOV R1, #10 / ADD R3, R1, R2 | البشر (بحاجة إلى تدريب) |
| كود الآلة | 0001 0001 0000 1010 | CPU |
لماذا نفهم هذه السلسلة؟
- عندما ترى خطأ ترجمة، تعرف أن الخطأ حدث في خطوة "اللغة عالية المستوى → التجميع"
- عندما ترى انهيارًا في وقت التشغيل، تعرف أن المشكلة في مرحلة تنفيذ CPU للتعليمات
- عند فهم تحسين الأداء، تعرف ما هي التحسينات التي قام بها المصرّف أثناء عملية "الترجمة"
- عند اختيار معمارية CPU (x86 مقابل ARM)، تعرف أن الاختلاف يكمن في اختلاف "API مجموعة التعليمات"
2.2 كيف تبدو التعليمات؟
بعد معرفة أن الكود يُترجم إلى تعليمات، السؤال التالي هو: ما هو الهيكل الداخلي للتعليمة الواحدة؟
كل تعليمة آلة هي في الأساس سلسلة من الأرقام الثنائية، لكن لها تنسيق داخلي صارم. الجزءان الأساسيان:
- كود العملية (Opcode): يخبر CPU "ماذا تفعل" - هل هي عملية جمع؟ قفز؟ أم قراءة من الذاكرة؟
- المُعامل (Operand): يخبر CPU "على من تعمل" - أي سجل؟ أي عنوان في الذاكرة؟ أي ثابت؟
تمامًا كما أن للجملة بنية "فعل + مفعول به"، للتعليمة أيضًا بنية "عملية + كائن":
التعليمة: ADD R3, R1, R2
─── ──────────
كود العملية المُعاملات
(عملية جمع) (R3 = R1 + R2)حسب عدد المُعاملات، تنقسم تنسيقات التعليمات من البسيط إلى المعقد إلى أربعة أنواع:
| التنسيق | الهيكل | مثال | حالة الاستخدام |
|---|---|---|---|
| صفر عنوان | كود العملية فقط | RET (عودة) | حاسوب المكدس، المُعاملات ضمنية في قمة المكدس |
| عنوان واحد | كود العملية + عنوان واحد | INC R1 (زيادة R1 بمقدار 1) | عمليات ذات مُعامل واحد |
| عنوانان | كود العملية + عنوانان | MOV R1, R2 | الأكثر استخدامًا، نقل البيانات والعمليات |
| ثلاثة عناوين | كود العملية + ثلاثة عناوين | ADD R3, R1, R2 | عدم تدمير المُعامل المصدر |
لماذا يوجد العديد من التنسيقات؟
هذه مقايضة بين المساحة والمرونة. تعليمات صفر العنوان هي الأقصر (توفر الذاكرة)، لكنها تحتاج إلى عمليات مكدس إضافية؛ تعليمات ثلاثة عناوين هي الأكثر مرونة (لا تدمر البيانات المصدر)، لكنها تشغل بتات أكثر. تختار معماريات CPU المختلفة مجموعات مختلفة من تنسيقات التعليمات.
2.3 كيف تجد CPU البيانات؟ — أنماط العنونة
التعليمة تخبر CPU "قم بعملية جمع"، لكن أين يوجد العددان المطلوبان للجمع؟ قد يكونان مكتوبين مباشرة في التعليمة، أو في السجلات، أو في عنوان ما في الذاكرة. أنماط العنونة هي القواعد التي تخبر CPU "أين تبحث عن المُعاملات".
لنستخدم تشبيه "البحث عن شخص" في الحياة اليومية:
| نمط العنونة | التشبيه | مثال التعليمة | الشرح |
|---|---|---|---|
| العنونة الفورية | الشخص يقف أمامك مباشرة | MOV R1, #100 | البيانات مكتوبة مباشرة في التعليمة، الأسرع |
| العنونة بالسجلات | الاتصال الداخلي بزميل | MOV R1, R2 | البيانات في السجلات داخل CPU، سريعة جدًا |
| العنونة المباشرة | تعرف رقم الغرفة، تذهب مباشرة | MOV R1, [0x1000] | عنوان الذاكرة مكتوب في التعليمة |
| العنونة غير المباشرة | تسأل الاستقبال "في أي غرفة تشانغ سان" | MOV R1, [R2] | السجل يحتوي على العنوان، تحتاج إلى بحث إضافي |
| العنونة بالمؤشر | "المبنى 3 + الطابق 5" لحساب الغرفة | MOV R1, [R2+10] | العنوان الأساسي + الإزاحة، يستخدم للوصول إلى المصفوفات |
MOV R1, #100| Addressing mode | Format | Speed | Use case |
|---|---|---|---|
| Immediate addressing | MOV R1, #100 | Fastest | Constant assignment and initialization |
| Register addressing | MOV R1, R2 | Fastest | Register-to-register data transfer |
| Direct addressing | MOV R1, [100] | Relatively fast | Accessing global variables |
| Indirect addressing | MOV R1, [R2] | Relatively fast | Pointers and array traversal |
| Indexed addressing | MOV R1, [R2 + R3] | Relatively fast | Array access and loops |
| Based addressing | MOV R1, [R2 + 100] | Relatively fast | Struct fields and function parameters |
| Relative addressing | JMP LABEL | Fastest | Loops and conditional branches |
لماذا نحتاج إلى العديد من أنماط العنونة؟
السيناريوهات المختلفة تحتاج إلى استراتيجيات "بحث عن البيانات" مختلفة:
- تعيين الثوابت (
x = 100) ← العنونة الفورية، البيانات في التعليمة نفسها - عمليات المتغيرات (
a + b) ← العنونة بالسجلات، البيانات محملة مسبقًا في السجلات - الوصول إلى المصفوفات (
arr[i]) ← العنونة بالمؤشر، العنوان الأساسي + إزاحة الفهرس - عمليات المؤشرات (
*ptr) ← العنونة غير المباشرة، السجل يحتوي على العنوان
أنت لا تفكر في أنماط العنونة عندما تكتب arr[i]، لكن المصرّف يختار تلقائيًا النمط الأنسب.
2.4 قائمة قدرات CPU — تصنيف التعليمات
الآن نعرف تنسيق التعليمات وأنماط العنونة، السؤال الأخير: ما هي الأشياء التي يمكن لـ CPU فعلها فعليًا؟
يمكن تصنيف جميع التعليمات إلى ست فئات رئيسية، وهي تغطي جميع العمليات التي يمكن للحاسوب القيام بها:
| النوع | ماذا يفعل | التعليمات الممثلة | الكود الذي تكتبه المقابل |
|---|---|---|---|
| نقل البيانات | نقل البيانات | MOV, LOAD, STORE | let x = y، تمرير معاملات الدوال |
| العمليات الحسابية | الجمع والطرح والضرب والقسمة | ADD, SUB, MUL, DIV | a + b، count++ |
| العمليات المنطقية | عمليات البتات | AND, OR, NOT, XOR | flags & 0xFF، التحقق من الصلاحيات |
| عمليات الإزاحة | الإزاحة لليسار واليمين | SHL, SHR | x << 2 (مكافئ للضرب في 4) |
| نقل التحكم | القفز والاستدعاء | JMP, CALL, RET | if، for، استدعاء الدوال |
| الإدخال والإخراج | التواصل مع الأجهزة الطرفية | IN, OUT | قراءة لوحة المفاتيح، الكتابة على الشاشة |
رؤية أساسية
كل الكود الذي تكتبه - مهما كانت منطق الأعمال معقدًا أو رسوميات UI مبهرة - سيتم تفكيكه في النهاية إلى مجموعات من هذه العمليات الأساسية الست. "ذكاء" CPU لا يكمن في قدرتها على فعل أشياء معقدة، بل في قدرتها على تنفيذ هذه العمليات البسيطة بمعدل مليارات المرات في الثانية.
2.5 فلسفتان في التصميم: CISC مقابل RISC
هناك خلاف أساسي في تصميم نظام التعليمات: هل ينبغي جعل كل تعليمة قوية قدر الإمكان، أم جعل كل تعليمة بسيطة قدر الإمكان؟
أنتج هذا الخلاف معسكرين رئيسيين، يؤثران مباشرة على كل جهاز تستخدمه اليوم:
⚔️ Two Design Philosophies: CISC vs RISC
Click a comparison dimension to see the core differences between instruction set styles
لنستخدم تشبيهًا للفهم:
- CISC مثل السكين السويسري: سكين واحد يدمج مقصًا وفتاحة زجاجات ومفك براغي... وظائف متعددة لكن كل منها ليس بالضرورة الأفضل
- RISC مثل مجموعة أدوات احترافية: كل أداة تفعل شيئًا واحدًا فقط، لكنها تفعله بسرعة وكفاءة
لماذا يستخدم هاتفك ARM وحاسوبك x86؟
- x86 (CISC) سيطر على سوق الحواسيب الشخصية والخوادم لمدة 40 عامًا، وراكم نظامًا بيئيًا ضخمًا من البرمجيات. تغيير المعمارية يعني إعادة ترجمة جميع البرمجيات
- ARM (RISC) سيطر على الأجهزة المحمولة بفضل استهلاكه المنخفض للطاقة. بطارية الهاتف صغيرة، وكل ميلي واط مهم
- Apple Silicon أثبت أن RISC يمكنه تحقيق أداء عالٍ - شرائح سلسلة M تفوقت على منافسي x86 في الأداء واستهلاك الطاقة معًا
- RISC-V هي معمارية RISC مفتوحة المصدر، تنمو بسرعة في مجالات IoT والتعليم وشرائح الذكاء الاصطناعي
ملخص: نظام التعليمات هو الجسر الذي يربط البرمجيات بالأجهزة. الكود الذي تكتبه يُترجم عبر المصرّف إلى تعليمات، والتعليمات تخبر CPU من خلال كود العملية والمُعاملات ماذا تفعل وعلى من تفعل، وأنماط العنونة تحدد من أين تأتي البيانات. تصاميم مجموعات التعليمات المختلفة (CISC/RISC) تحدد خصائص أداء CPU وسيناريوهات الاستخدام المناسبة.
الآن نعرف "البنية الثابتة" للتعليمات - كيف تبدو وما هي أنواعها. السؤال التالي هو: كيف ينفذ الجزء الداخلي من CPU هذه التعليمات خطوة بخطوة؟ هذا هو عمل وحدة التحكم.
3. وحدة التحكم: "مركز القيادة" لـ CPU
3.1 مكونات وحدة التحكم
وحدة التحكم هي "عقل" CPU، وهي مسؤولة عن تنسيق عمل جميع المكونات وفقًا لمتطلبات التعليمات:
| المكون | الوظيفة |
|---|---|
| عداد البرنامج (PC) | تخزين عنوان التعليمة التالية |
| سجل التعليمات (IR) | تخزين التعليمة الجاري تنفيذها حاليًا |
| مفكك تشفير التعليمات | تحليل كود العملية والمُعاملات للتعليمة |
| مولد التوقيت | إنتاج إشارات النبضات، والتحكم في توقيت المكونات |
| مولد تسلسل العمليات الدقيقة | إنتاج سلسلة إشارات التحكم اللازمة لتنفيذ التعليمة |
3.2 دورة التعليمات
تحتاج CPU إلى المرور بدورة تعليمات كاملة لتنفيذ تعليمة واحدة، وتشمل عادةً:
- دورة الجلب (Fetch): قراءة التعليمة من الذاكرة إلى IR
- دورة فك التشفير (Decode): تحليل معنى التعليمة
- دورة التنفيذ (Execute): تنفيذ العملية
- دورة الوصول إلى الذاكرة (Memory Access): إذا تطلب الأمر الوصول إلى الذاكرة
- دورة الكتابة الخلفية (Write Back): كتابة النتيجة مرة أخرى إلى السجلات أو الذاكرة
3.3 العمليات الدقيقة
العمليات الدقيقة هي أبسط العمليات المدفوعة بإشارات التحكم. على سبيل المثال، يمكن تفكيك مرحلة "الجلب" إلى العمليات الدقيقة التالية:
| النبضة | العملية الدقيقة | إشارة التحكم |
|---|---|---|
| T1 | PC → MAR | PCout, MARin |
| T2 | MEM → MDR | MEMout, MDRin |
| T3 | MDR → IR | MDRout, IRin |
| T4 | PC + 1 → PC | PC+1, PCin |
3.4 وحدة التحكم بالتوصيلات الصلبة مقابل وحدة التحكم بالبرنامج الدقيق
| الخاصية | وحدة التحكم بالتوصيلات الصلبة | وحدة التحكم بالبرنامج الدقيق |
|---|---|---|
| طريقة التنفيذ | دوائر منطقية توافقية | تسلسل تعليمات دقيقة (برنامج ثابت) |
| السرعة | سريعة | أبطأ قليلاً |
| صعوبة التصميم | معقدة | أبسط نسبيًا |
| المرونة | ضعيفة (التعديل يتطلب إعادة تصميم الدوائر) | جيدة (تعديل البرنامج الدقيق يكفي) |
| التطبيق النموذجي | معالجات RISC | معالجات CISC المبكرة |
4. نظام التخزين: لماذا نحتاج إلى الذاكرة المخبأة؟
4.1 هيكل هرمية التخزين
تشكل أجهزة التخزين في الحاسوب هيكلًا هرميًا:
| Storage level | Access time | Typical capacity | Cost |
|---|---|---|---|
| Registers | < 1 ns | A few KB | Highest |
| L1 cache | ~1 ns | 64 KB | Very high |
| L2 cache | ~3 ns | 256 KB | High |
| L3 cache | ~10 ns | 8 MB | Medium |
| Memory | ~100 ns | 8-32 GB | Medium-low |
| SSD | ~100 μs | 256 GB-2 TB | Low |
| HDD | ~10 ms | 1-10 TB | Lowest |
| المستوى | نوع التخزين | وقت الوصول | السعة النموذجية | الموقع |
|---|---|---|---|---|
| السجلات | SRAM | <1ns | بضع KB | داخل CPU |
| ذاكرة مخبأة L1 | SRAM | ~1ns | 32-64KB | بالقرب من نواة CPU |
| ذاكرة مخبأة L2 | SRAM | ~3-10ns | 256KB-1MB | داخل شريحة CPU |
| ذاكرة مخبأة L3 | SRAM | ~10-20ns | 2-16MB | داخل شريحة CPU / مشتركة |
| الذاكرة الرئيسية | DRAM | ~50-100ns | 8-64GB | على اللوحة الأم |
| SSD | Flash | ~10-100μs | 256GB-2TB | على اللوحة الأم |
| HDD | قرص مغناطيسي | ~5-10ms | 1-10TB | داخل الصندوق |
تشبيه فروق السرعة
إذا شبهنا وصول CPU إلى ذاكرة L1 المخبأة بـ أخذ ورقة من على المكتب:
- الوصول إلى الذاكرة الرئيسية ← ركوب المصعد إلى المتجر في الطابق السفلي لشراء ورق
- الوصول إلى SSD ← قيادة السيارة إلى مدينة أخرى لشراء ورق
- الوصول إلى HDD ← ركوب الطائرة إلى بلد آخر لشراء ورق
يمكن أن يصل فرق السرعة إلى ملايين المرات!
4.2 مبدأ الذاكرة المخبأة
الذاكرة المخبأة (Cache) هي تخزين سريع يقع بين CPU والذاكرة الرئيسية، وتقوم فكرتها الأساسية على مبدأي المحلية:
مبدأ المحلية
- المحلية الزمنية: إذا تم الوصول إلى بيانات ما للتو، فمن المحتمل جدًا أن يتم الوصول إليها مرة أخرى قريبًا
- المحلية المكانية: إذا تم الوصول إلى بيانات ما، فمن المحتمل أن يتم الوصول إلى البيانات المجاورة لها أيضًا
طريقة عمل الذاكرة المخبأة
- الإصابة (Hit): البيانات التي تريدها CPU موجودة في الذاكرة المخبأة، تُقرأ مباشرة
- الخطأ (Miss): البيانات غير موجودة في الذاكرة المخبأة، يجب تحميلها من الذاكرة الرئيسية
معدل الإصابة = عدد مرات الإصابة / إجمالي عدد مرات الوصول
متوسط وقت الوصول = معدل الإصابة × وقت الذاكرة المخبأة + (1-معدل الإصابة) × وقت الذاكرة الرئيسية4.3 طرق تخطيط الذاكرة المخبأة
| الطريقة | المبدأ | المزايا | العيوب |
|---|---|---|---|
| التخطيط المباشر | كل كتلة ذاكرة يمكن وضعها في موقع ثابت واحد فقط | بسيط وسريع | معدل تصادم مرتفع |
| التخطيط الترابطي المجموعي | كل كتلة ذاكرة يمكن وضعها في N موقع (N-way) | توازن بين السرعة ومعدل الإصابة | تنفيذ معقد |
| التخطيط الترابطي الكامل | أي موقع | أدنى معدل تصادم | تنفيذ صعب (يحتاج مقارنة جميع العلامات) |
4.4 الذاكرة الافتراضية
الذاكرة الافتراضية هي تجريد مهم يوفره نظام التشغيل:
- كل عملية تعتقد أنها تمتلك مساحة عناوين افتراضية كاملة
- نظام التشغيل مسؤول عن ترجمة العناوين الافتراضية إلى عناوين فعلية
- الصفحات غير المستخدمة بشكل متكرر يمكن إخراجها إلى القرص (مساحة التبديل)
تشبيه الذاكرة الافتراضية
تخيل الذاكرة الافتراضية مثل إدارة غرف الفندق:
- أنت (العملية) تعتقد أن المبنى كله لك
- في الواقع، الفندق (نظام التشغيل) يخصص لك فقط الغرف التي تحتاجها حاليًا
- الغرف غير المشغولة يتم "إخراجها" إلى المستودع (القرص)
- الغرف المطلوبة يمكن "إدخالها" في أي وقت
5. الناقل والإدخال والإخراج: "الأوعية الدموية" للحاسوب
5.1 ناقل النظام
الناقل (Bus) هو قناة البيانات التي تربط مكونات الحاسوب المختلفة:
| نوع الناقل | الوظيفة | الاتجاه | العرض النموذجي |
|---|---|---|---|
| ناقل العناوين | نقل عناوين الذاكرة | أحادي الاتجاه (CPU→الذاكرة) | 32 بت/64 بت |
| ناقل البيانات | نقل البيانات | ثنائي الاتجاه | 32 بت/64 بت |
| ناقل التحكم | نقل إشارات التحكم | ثنائي الاتجاه | خطوط إشارة متعددة |
5.2 تحكيم الناقل
عندما تطلب أجهزة متعددة استخدام الناقل في نفس الوقت، نحتاج إلى آلية تحكيم لتحديد من يستخدمه أولاً:
| طريقة التحكيم | الشرح |
|---|---|
| التحكيم المركزي | محكم مركزي يتخذ القرار بشكل موحد |
| التحكيم الموزع | كل جهاز يتفاوض بشكل مستقل |
5.3 طرق الوصول إلى أجهزة الإدخال والإخراج
| الطريقة | المبدأ | المزايا | العيوب |
|---|---|---|---|
| الاستعلام البرمجي | CPU تستطلع حالة I/O بشكل دوري | بسيط | استخدام منخفض لـ CPU |
| طريقة المقاطعة | جهاز I/O يخطر CPU بنشاط بعد الاكتمال | CPU يمكنه العمل بالتوازي | معالجة المقاطعة لها تكلفة إضافية |
| DMA | جهاز I/O يصل مباشرة إلى الذاكرة | CPU لا تشارك على الإطلاق | يحتاج إلى وحدة تحكم DMA |
| Feature | Programmed I/O | Interrupt-driven I/O | DMA |
|---|---|---|---|
| CPU involvement | Involved throughout | Only handles interrupts | Almost uninvolved |
| Data transfer | CPU moves each byte | CPU moves each word | Device transfers directly to memory |
| Pros | Simple and flexible control | High CPU efficiency | CPU is fully freed |
| Cons | Low CPU utilization | Interrupt overhead | Complex hardware |
| Best for | Simple or low-speed devices | Low/medium-speed devices | High-speed bulk transfer |
5.4 مبدأ DMA
DMA (Direct Memory Access، الوصول المباشر للذاكرة) يسمح لأجهزة الإدخال والإخراج بتبادل البيانات مباشرة مع الذاكرة:
- بدون DMA: CPU تشارك بشكل كامل في نقل البيانات، ولا يمكنها فعل أي شيء آخر
- مع DMA: CPU تخبر وحدة تحكم DMA "من أين إلى أين تنقل وكم تنقل"، ثم تنتقل لتنفيذ مهام أخرى، وعند اكتمال DMA يتم إخطار CPU
تشبيه DMA
هذا مثل طلب الطعام للتوصيل:
- بدون DMA: تذهب شخصيًا إلى المتجر لشراء المكونات، والعودة إلى المنزل، وغسل المكونات، والطهي (مشاركة كاملة في العملية)
- مع DMA: تتصل لتقديم الطلب، وعامل التوصيل يوصله مباشرة إلى المطبخ (شخص آخر يتولى الأمر، وأنت فقط "تستلم" في النهاية)
5.5 آلية المقاطعة
المقاطعة هي آلية مهمة جدًا في نظام الحاسوب:
- بعد إكمال جهاز I/O للعملية، يرسل طلب مقاطعة إلى CPU
- CPU تكمل التعليمة الحالية ثم تستجيب للمقاطعة
- CPU تحفظ الحالة الحالية، وتنتقل إلى برنامج معالجة المقاطعة
- بعد اكتمال المعالجة، تستعيد الحالة وتواصل التنفيذ
6. تحسين أداء CPU: تقنية خط التجميع
6.1 خط تجميع التعليمات
خط تجميع التعليمات هو تقنية توازٍ تجعل CPU تعمل بأقصى كفاءة:
Sequential execution: each instruction finishes before the next starts, so N instructions require N × 5 cycles.
Pipeline execution: multiple instructions occupy different stages at once; ideally CPI ≈ 1.
مبدأ عمل خط التجميع
التنفيذ المتسلسل (5 تعليمات، 15 دورة):
التعليمة 1: IF→ID→EX→MEM→WB
التعليمة 2: IF→ID→EX→MEM→WB
التعليمة 3: IF→ID→EX→MEM→WB
...
التنفيذ بخط التجميع (5 تعليمات، 9 دورات):
التعليمة 1: IF→ID→EX→MEM→WB
التعليمة 2: IF→ID→EX→MEM→WB
التعليمة 3: IF→ID→EX→MEM→WB
...في الحالة المثالية، CPI (عدد الدورات لكل تعليمة) لـ N من التعليمات ≈ 1
6.2 مخاطر خط التجميع
على الرغم من أن خط التجميع يحسن الأداء، إلا أنه يجلب أيضًا مشاكل المخاطر (Hazard):
| النوع | السبب | الحل |
|---|---|---|
| خطر بنيوي | تضارب موارد الأجهزة | زيادة الأجهزة / تنفيذ متباعد |
| خطر البيانات | التعليمة التالية تحتاج نتيجة السابقة | إعادة توجيه البيانات / فقاعات / جدولة |
| خطر التحكم | تعليمات القفز تغير تدفق التنفيذ | فتحة التأخير / التنبؤ بالتفرع |
7. ملخص: كيف "يعمل" الحاسوب؟
لنستخدم المصطلحات التقنية لربط العملية بأكملها:
بعد بدء البرنامج، يقوم نظام التشغيل بتحميل الملف القابل للتنفيذ من القرص إلى الذاكرة. وحدة الجلب (IF) في CPU تقرأ التعليمة من الذاكرة إلى سجل التعليمات (IR) عبر ناقل العناوين. وحدة التحكم تقوم بفك تشفير التعليمة (ID)، وتتعرف على نوع العملية ثم تنتج إشارات التحكم المناسبة. وحدة الحساب (EX) تنفذ العمليات الحسابية والمنطقية، وإذا تطلب الأمر الوصول إلى الذاكرة يتم ذلك عبر ناقل البيانات (MEM)، وأخيرًا تُكتب النتيجة مرة أخرى (WB) إلى السجلات أو الذاكرة. العملية بأكملها مدفوعة بالساعة، وسلسلة العمليات الدقيقة التي تصدرها وحدة التحكم تنسق عمل جميع المكونات بشكل منظم.
قراءة إضافية
| الموضوع | محتوى التعلم المتعمق الموصى به |
|---|---|
| معمارية الحاسوب | "Computer Organization and Design: Hardware/Software Interface" - Patterson & Hennessy |
| معمارية CPU الدقيقة | "Computer Systems: A Programmer's Perspective" - Bryant & O'Hallaron |
| معمارية مجموعة التعليمات | دليل معمارية ARMv8، دليل Intel x64 |
| مبدأ الذاكرة المخبأة | بروتوكول تناسق الذاكرة المخبأة (MESI)، استراتيجيات كتابة الذاكرة المخبأة |
| أنظمة التشغيل | الفصل التالي "أنظمة التشغيل" |
الخطوة التالية
الآن أتقنت المعرفة المتخصصة في مبادئ تنظيم الحاسوب. يمكنك بعد ذلك متابعة التعلم:
- أنظمة التشغيل: فهم كيفية تشغيل البرامج على نظام التشغيل، وكيفية تنفيذ العمليات والخيوط وإدارة الذاكرة
- ترميز البيانات وتخزينها ونقلها: فهم عميق لطرق تمثيل البيانات في الحاسوب