كيف تعمل أجهزة الكمبيوتر: شرح من الأساس


البدء بضغطة زر

تضغط على الحرف ‘A’ في لوحة المفاتيح.

في أقل من 1 ملي ثانية، يظهر الحرف على الشاشة.

يبدو بسيطاً؟ في الواقع، في هذه الملي ثانية الواحدة، تعبر إشارة كهربائية ما لا يقل عن 6 طبقات من التجريد، وتمر عبر عشرات المكونات المادية، وتجتاز عدة نواقل لإكمال هذا التفاعل “البسيط”.

جوهر أجهزة الكمبيوتر ليس الحساب، بل التجريد.

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

اليوم،我们将نتتبع الرحلة الكاملة لإشارة ضغطة زر، لنرى كيف تحوِّل أجهزة الكمبيوتر، طبقة بعد طبقة من التجريد، فعلاً فيزيائياً إلى حرف على الشاشة.

الطبقة الأولى: من الإشارة الفيزيائية إلى كود المسح

صورة

ما تضغط عليه ليس حرفاً، بل مفتاحاً.

تحت كل زر في لوحة المفاتيح يوجد مفتاح ميكانيكي. عندما تضغط على زر ‘A’، يُغلق المفتاح ويتدفق التيار. هذا هو الواقع الفيزيائي الأدنى — فقط تشغيل وإيقاف، لا ‘A’.

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

كيف تفعل ذلك؟

المسح المصفوفي

أكثر من 100 زر في لوحة المفاتيح. إذا كان لكل زر سلكه الخاص المتصل بالحاسوب، لكان كابل لوحة المفاتيح أكثر سمكاً من إصبعك. لذلك تستخدم لوحة المفاتيح تصميماً ذكياً: المسح المصفوفي.

تخيل رقعة شطرنج، مع خطوط صفوف وأعمدة متقاطعة. كل زر يقع عند تقاطع. تقوم وحدة التحكم بتغذية كل صف بالتيار بسرعة وتكتشف ما إذا كان هناك تيار في كل عمود. إذا اكتشف العمود 5 تياراً عندما يكون الصف 3 مُغذَّى بالتيار، فهذا يعني أن الزر في الصف 3، العمود 5 قد تم ضغطه.

من هنا يأتي كود المسح (scan code) — رقم يمثل موضع الزر.

قد يُخرج الضغط على ‘A’ كود المسح 0x1E. إطلاق ‘A’ يُخرج 0x9E (مع بت عالي إضافي يشير إلى “الإطلاق”).

الطبقة الأولى مكتملة: فعل فيزيائي → ترميز رقمي.

لكن الأمر لم ينته بعد. كود المسح لا يزال في المخزن المؤقت الداخلي للوحة المفاتيح، في انتظار الإرسال.

الطبقة الثانية: من جهاز الإدخال/الإخراج إلى الذاكرة

صورة

يجب أن يصل كود المسح إلى المعالجة (CPU)، لكن المعالجة لا يمكنها الجلوس وانتظار إدخال لوحة المفاتيح.

تعمل المعالجة بسرعة مليارات العمليات في الثانية؛ إدخال لوحة المفاتيح يصل بعشرات الإدخالات في الثانية. إذا كانت المعالجة تتحقق “هل هناك إدخال من لوحة المفاتيح؟” قبل كل تعليمة، لكان 99.9999% من وقتها يُهدر.

ما الحل؟ آلية المقاطعة.

المقاطعات: النسخة المادية من “اتصل بي عندما تكون مستعداً”

فلسفة تصميم المقاطعات تعكس الحياة اليومية: أنت لا تتصل بساعي التوصيل كل 5 دقائق لتسأل “هل وصلت طردتي؟” بدلاً من ذلك، يتصل بك الساعي عندما يصل.

بعد أن تُولد وحدة تحكم لوحة المفاتيح كود المسح، ترسل إشارة طلب مقاطعة (IRQ) إلى المعالجة.

تمر هذه الإشارة عبر وحدة تحكم المقاطعات (8259A أو ما يعادله حديثاً) ويُخصص لها رقم مقاطعة. لوحة المفاتيح عادةً ما تكون IRQ1، رقم المقاطعة 0x21.

بعد تنفيذ كل تعليمة، تتحقق المعالجة من وجود إشارات مقاطعة. إذا كانت هناك واحدة، تُوقف عملها الحالي وتعالج المقاطعة.

جدول متجهات المقاطعة

كيف تعرف المعالجة كيفية التعامل مع مقاطعة لوحة المفاتيح؟

في الذاكرة يوجد جدول متجهات المقاطعة (Interrupt Vector Table) الذي يخزن عنوان روتين المعالج لكل رقم مقاطعة. إنه مثل دليل الهاتف: رقم المقاطعة 0x21 يقابل عنوان معالج لوحة المفاتيح.

عندما تستقبل المعالجة مقاطعة لوحة المفاتيح:

  1. تدفع عداد البرنامج (PC)، وسجل الحالة، إلخ إلى المكدس
  2. تبحث في الجدول باستخدام رقم المقاطعة للعثور على عنوان المعالج
  3. تقفز إلى المعالج وتنفذه

يقرأ معالج لوحة المفاتيح كود المسح عبر منفذ إدخال/إخراج (عادة 0x60)، ثم يخزنه في مخزن لوحة المفاتيح في الذاكرة.

الطبقة الثانية مكتملة: حدث إدخال/إخراج → بيانات في الذاكرة.

الآن أصبح كود المسح بأمان في الذاكرة. لكنه لا يزال كود مسح، وليس الحرف ‘A’.

الطبقة الثالثة: من كود المسح إلى الحرف

صورة

كود المسح 0x1E يمثل “موضع زر A على لوحة المفاتيح”، وليس الحرف ‘A’.

لماذا؟ لأن نفس الزر قد يمثل أحرفاً مختلفة على لوحات المفاتيح في بلدان مختلفة. الأمريكيون يضغطون عليه ويحصلون على ‘A’؛ الفرنسيون يضغطون عليه ويحصلون على ‘Q’ (تخطيط لوحة المفاتيح لديهم مختلف).

نظام التشغيل مسؤول عن تحويل أكواد المسح إلى أحرف.

النظام الفرعي للإدخال

جميع أنظمة التشغيل الحديثة لديها نظام فرعي للإدخال (Input Subsystem)، الذي يتولى:

  1. قراءة أكواد المسح من مخزن النواة
  2. تحويلها إلى أحرف بناءً على تخطيط لوحة المفاتيح الحالي
  3. معالجة مفاتيح التعديل (Shift+A = ‘A’ كبير، Ctrl+C = أمر نسخ)
  4. توصيل الحرف إلى النافذة النشطة حالياً

يتضمن هذا التحويل جدول تعيين تخطيط لوحة المفاتيح. سجل Windows يحتوي على HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts، الذي يخزن التعيينات لمختلف اللغات.

بعد التحويل، يُوضع الحرف ‘A’ في قائمة انتظار الرسائل، في انتظار أن يقرأه التطبيق.

الطبقة الثالثة مكتملة: ترميز يعتمد على المادية → ترميز أحرف موحد.

الطبقة الرابعة: من الحرف إلى البكسل

صورة

يستقبل التطبيق الحرف ‘A’ ويحتاج إلى عرضه على الشاشة.

لكن ما تراه ليس حرفاً — إنه بكسلات.

الشاشة تفهم فقط البكسلات — ما لون كل نقطة. الحرف ‘A’ هو نمط مكون من مجموعة بكسلات، مخزنة في ملف خط.

تقديم الخطوط

عندما تكتب ‘A’، سيقوم التطبيق:

  1. بالبحث عن ملف الخط (مثل Microsoft YaHei, SimSun)
  2. الحصول على وصف الرسم للحرف ‘A’ (منحنيات متجهة أو صورة نقطية)
  3. تغيير حجم الرسم حسب حجم الخط
  4. التنقيط: تحويل المنحنيات المتجهة إلى شبكة بكسل
  5. تطبيق منع التعرج (anti-aliasing) لحواف أكثر نعومة

تُكتب بيانات البكسل هذه في ذاكرة الفيديو (VRAM)، وهي الذاكرة الموجودة على بطاقة الرسوميات.

من VRAM إلى الشاشة

يقرأ وحدة تحكم العرض على بطاقة الرسوميات البيانات من VRAM 60 مرة في الثانية (60 هرتز)، ويحولها إلى إشارة فيديو، ويرسلها إلى الشاشة.

تستقبل الشاشة الإشارة، وتتحكم في لون كل بكسل، وترى الحرف ‘A’.

الطبقة الرابعة مكتملة: ترميز الحرف → مصفوفة بكسل.

الطبقة الخامسة: كيف تنفذ المعالجة هذه التعليمات

صورة

جميع العمليات المذكورة أعلاه — المسح، المقاطعات، التحويل، التقديم — يجب في النهاية أن تنفذها المعالجة.

كيف تنفذ المعالجة التعليمات؟

دورة التعليمات: جلب-فك-تنفيذ

تنفيذ تعليمة يتكون من ثلاث مراحل:

  1. الجلب (Fetch)

    • عداد البرنامج (PC) يخزن عنوان التعليمة التالية
    • يُرسل العنوان إلى الذاكرة، ويُجلب التعليمة
    • يُخزن التعليمة في سجل التعليمات (IR)
  2. فك الترميز (Decode)

    • وحدة التحكم تحلل كود العملية للتعليمة
    • تحدد العملية التي يجب تنفيذها (جمع؟ تحميل؟ قفز؟)
    • تحدد أين توجد المعاملات
  3. التنفيذ (Execute)

    • الوحدة الحسابية والمنطقية (ALU) تنفذ العملية الحسابية
    • أو تصل إلى الذاكرة لقراءة/كتابة البيانات
    • تُحدث عداد البرنامج

ثم تتكرر العملية.

مثال

لنفترض أن المعالجة تحتاج إلى تنفيذ ADD R1, R2, R3 (جمع القيم في R2 و R3، تخزين في R1):

  1. الجلب: قراءة كود الآلة لهذه التعليمة من الذاكرة
  2. فك الترميز: التعرف على هذه التعليمة كتعليمة جمع، المعاملات في R2 وR3
  3. التنفيذ: ALU ترسل قيم R2 و R3 إلى الجامع، وتكتب النتيجة في R1

كل تعليمة تُكتمل في نانوثانية.

الطبقة الخامسة مكتملة: لغة عالية المستوى → تعليمات آلية → إشارات كهربائية.

ثمن التجريد

التجريد ليس مجانياً.

كل طبقة تجريد لها تكلفة أداء:

  • مسح لوحة المفاتيح: بضع ميكروثانية
  • معالجة المقاطعة: عشرات الميكروثانية
  • تحويل نظام التشغيل: مئات الميكروثانية
  • تقديم الخطوط: بضع ملي ثانية
  • كتابة VRAM: بضع ميكروثانية

معاً، هذا هو “تأخير الإدخال” (input lag) الذي تشعر به، عادةً بين 10 و 50 ملي ثانية.

للشخص العادي، هذا التأخير لا يُذكر. لكن للاعبي الرياضات الإلكترونية، إنه فرق بين الحياة والموت. لهذا يستخدمون لوحات مفاتيح ميكانيكية (تفعيل أسرع)، وشاشات عالية معدل التحديث (144 هرتز فأكثر)، واتصالات سلكية (اللاسلكي يضيف زمن وصول إضافي).

خلاصة

جوهر أجهزة الكمبيوتر هو التجريد: تغليف التعقيد، وكشف واجهة بسيطة فقط.

رحلة إشارة ضغطة زر:

مفتاح فيزيائي → كود مسح → مقاطعة → مخزن ذاكرة → ترميز حرف → قائمة انتظار رسائل → تقديم خط → VRAM → بكسل

كل طبقة تفعل شيئاً واحداً فقط: تستقبل المخرجات المبسطة من الطبقة التي تحتها، تعالجها، وتوفر واجهة مبسطة للطبقة التي فوقها.

هذا التجريد الطبقي بالتحديد هو ما يسمح للبشر بالتحكم في أنظمة حاسوبية معقدة بشكل لا يُصدق.

المبرمجون لا يحتاجون إلى معرفة كيفية عمل مسح لوحة المفاتيح — يحتاجون فقط إلى قراءة القيمة المعادة من getchar().

المبرمجون لا يحتاجون إلى معرفة كيفية تقديم بطاقة الرسوميات — يحتاجون فقط إلى استدعاء الدالة DrawText().

قوة التجريد هي جعل التعقيد قابلاً للإدارة.

صورة