كيف يفكر المعالج: من الكهرباء إلى الكود

مقدمة: كيف يتفاعل الكود مع الدوائر الكهربائية؟

قد يتبادر إلى الذهن سؤال مهم: كيف يعمل المعالج (Processor)؟ الأمر قد يبدو بسيطاً للوهلة الأولى، فهو مجرد مجموعة من الترانزستورات والدوائر الكهربائية. لكن السؤال الأعمق هو: كيف لدائرة كهربائية أن تغير وظيفتها بناءً على كود برمجي؟ كيف يمكن لكود نكتبه ونحمّله على دائرة متصلة بمقبس كهربائي أن يؤثر أحدهما في الآخر؟

في هذا المقال، سنتناول الحديث عن المعالج، وتحديداً كيف يتفاعل كدائرة كهربائية بحتة مع عالم الإنسان من خلال كود البرمجة، بصرف النظر عما إذا كان هذا المعالج في حاسوب شخصي أو نظام مدمج في جهاز نستخدمه. فكرة عمل أي معالج دقيق (Microprocessor) هي نفسها في جوهرها. فهيا بنا نبدأ.

حجر الأساس: المفتاح الكهربائي

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

أول أداة مكنت الإنسان من التفاعل مع الدائرة الكهربائية وتغيير نتائجها كان المفتاح. نعم، مفتاح الكهرباء البسيط الذي يفصل ويوصل سلك الدائرة، هو ما مكننا من تشغيل وإطفاء المصباح وقتما نشاء. وهذا في حد ذاته يُعتبر تغييراً لنتائج دائرة كهربائية بتدخل من الإنسان. تدخل الإنسان على المفتاح يكون بالتحريك، ولهذا السبب يُسمى المفتاح العادي “مفتاحاً ميكانيكياً” لأنه يعمل بالحركة.

ملاحظة: للتسهيل وحتى نهاية هذا المقال، عندما يكون المفتاح مفتوحاً (يوصل كهرباء)، سنطلق عليه اسم ON أو High أو 1. ولو كان المفتاح مغلقاً (يفصل كهرباء)، سنطلق عليه اسم OFF أو Low أو 0. سأستخدم الصفر والواحد في بقية المقال.

الجيل التالي: المفتاح الكهروميكانيكي (الريلاي)

بعد ذلك، فكر الإنسان في تطوير المفتاح لتوفير عناء الذهاب إليه لتشغيله وإطفائه. وفعلاً، نجح الإنسان في إضافة نابض (زنبرك) ومغناطيس كهربائي إلى المفتاح.

كل هذا يحدث دون الحاجة لوجودك بجانب المفتاح. يمكنك الجلوس بعيداً في “غرفة تحكم” (Control Room) افتراضية، وأمامك جميع الأزرار. فلو ضغطت على زر أمامك وأعطيت إشارة بـ 1، سيصبح المفتاح البعيد في وضع 1. ولو ألغيت الإشارة أو أطفأت الزر، ستُرسل إشارة بـ 0، ويصبح المفتاح البعيد في وضع 0. هذا المفتاح المطور يُسمى الريلاي (Relay).

قد يسأل سائل ذكي هنا: “طالما أنني سأمد سلكاً من الريلاي حتى غرفة التحكم، فلماذا لا أنقل المفتاح نفسه إلى غرفة التحكم وأستغني عن الريلاي تماماً؟” نظرياً، هذا صحيح. لكن عملياً، نستخدم الريلاي لتنفيذ عمليات أكثر ذكاءً وتعقيداً، مثل:

معلومة إضافية: الصوت الذي تسمعه عند الضغط على زر إضاءة السلم هو صوت ارتطام المفتاح داخل الريلاي عندما يجذبه المغناطيس أو يعيده النابض.

الريلاي هو مفتاح “كهروميكانيكي”؛ أي أنه مفتاح ميكانيكي به حركة، ولكنه يعمل بمغناطيس كهربائي. وهو أساس التحكم في الدوائر الكهربائية عن بعد، ويمكن بناء حاسوب كامل باستخدامه، ولكن ستواجهنا ثلاث مشكلات رئيسية:

  1. الضوضاء: سيصدر الحاسوب أصوات طقطقة وارتطام مستمرة أثناء عمله.
  2. البطء: سيكون بطيئاً جداً لوجود حركة ميكانيكية داخل المفتاح، مما يتطلب وقتاً لينتقل المفتاح.
  3. الحجم: المكونات الكهروميكانيكية كبيرة الحجم، مما يجعل حجم الحاسوب عملاقاً. (المعالج الحديث يحتاج إلى ما يزيد عن مليار ريلاي).

وهكذا، حل الريلاي مشكلة التحكم، لكنه لم يحل مشاكل السرعة والوزن والحجم.

الثورة الإلكترونية: الترانزستور

هذا ما دفع البشرية للتوصل إلى النوع الثالث والأخير من المفاتيح في مقال اليوم: المفتاح الإلكتروني، الذي جاء كبديل للريلاي بعد اختراع الترانزستور.

الترانزستور هو حجر الأساس في أي دائرة إلكترونية. يتم وضعه في الدوائر بطريقة تجعله يتصرف كمفتاح، تماماً مثل الريلاي، لكن مع فارق جوهري: هو مفتاح إلكتروني يمكنه الفتح والإغلاق دون أجزاء متحركة، ودون صوت الطقطقة.

بما أنه “شبه موصل”، فإننا نستغل هذه الخاصية لتحويله إلى ما يشبه الريلاي. نقوم بتوصيله بسلك يحمل إشارة كهربائية:

بهذا، وصلنا إلى تقنية أفضل من الريلاي، لا تحتوي على أجزاء متحركة، ويمكن تصغير حجمها بشكل هائل، مما يسمح بوضع أكثر من مليار ترانزستور على معالج واحد، ونتحكم فيها جميعاً بإشارات كهربائية من “غرفة التحكم” الافتراضية.

ملاحظة: الفرق بين الجهاز الكهربائي والجهاز الإلكتروني يكمن في هذه النقطة. الجهاز الكهربائي يعتمد على المفاتيح والريلاي للتحكم، بينما الجهاز الإلكتروني هو نوع متقدم يحتوي على أشباه موصلات (كالترانزستور) ونتحكم في مسار الكهرباء داخله عبر إشارات نرسلها إليه. لذا، كل جهاز إلكتروني هو جهاز كهربائي، ولكن ليس العكس.

من الترانزستور إلى المنطق: البوابات المنطقية

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

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

ما ينقصنا الآن شيئان:

  1. كيفية ترتيب الترانزستورات لتكوين دوائر كهربائية يمكنها تنفيذ عمليات مثل الجمع أو الضرب.
  2. كيفية استبدال الأزرار في غرفة التحكم بأسطر من الكود.

لنشرح ذلك، سنتخيل نموذجاً مصغراً وغير واقعي للمعالج. كما قلنا، الترانزستور يعمل كمفتاح له ثلاثة أسلاك. السلك الأوسط هو سلك التحكم (القادم من غرفة التحكم). إذا أعطيته 1، يمرر التيار. إذا أعطيته 0، يقطعه.

الآن، تخيل أننا وضعنا اثنين من الترانزستورات على التوالي (in series). لكي يمر التيار الكهربائي من البداية إلى النهاية ويُخرج 1، يجب أن يكون كلا الترانزستورين في وضع التشغيل (1). هذا يعني أن سلكي التحكم القادمين من غرفة التحكم يجب أن يكونا كلاهما 1. أي حالة أخرى ستؤدي إلى نتيجة 0.

هذا الترتيب للاثنين ترانزستور قد أنشأ عملية منطقية تُعرف بـ AND (اقتران).

هذا الترتيب من الترانزستورات الذي ينفذ عملية منطقية نسميه بوابة (Gate). والبوابة التي تنفذ عملية AND نسميها AND Gate.

باستخدام الترانزستورات، يمكننا بناء بوابات منطقية مختلفة، كل منها تنفذ عملية حسابية مختلفة بناءً على طريقة ترتيب وعدد الترانزستورات بداخلها. إليك بعض الأمثلة الأخرى:

تجميع المعالج: المكونات الأساسية

الآن أصبح لدينا مجموعة من البوابات الحسابية المختلفة. إذا أدخلنا أي مدخلين، سيتم تطبيق كل العمليات عليهما بالتوازي. لكننا لا نريد ذلك. ما نريده هو أن نُدخل مدخلين، وننفذ عليهما عملية AND، ثم نغير المدخلين وننفذ عملية OR، وهكذا. نريد اختيار بوابة واحدة فقط لتعمل في كل مرة.

لتحقيق ذلك، نحتاج لإضافة مكونات أخرى داخل المعالج:

  1. المُضاعِف (Multiplexer): تدخل إليه جميع نتائج البوابات، ولكنه يُخرج نتيجة واحدة فقط، وهي نتيجة البوابة التي نختارها عبر رقمها.
  2. الساعة (Clock): لتنظيم تدفق البيانات، نضيف مكوناً يولد نبضة كهربائية منتظمة (تتأرجح بين 1 و 0). عند كل انتقال من 0 إلى 1، نقرأ النتيجة القديمة وندخل البيانات الجديدة للعملية التالية. سرعة تغير هذه النبضة هي ما يُعرف بـ “تردد المعالج” (مثلاً 3.0 GHz).
  3. الذاكرة (Memory): نحتاج إلى ذاكرة لتخزين نتائج الحسابات بعد كل نبضة ساعة، تمهيداً لكتابتها لاحقاً في الذاكرة الرئيسية (RAM).

لغة الآلة: كيف يفهم المعالج الكود؟

آخر عنصر هو التفاعل مع المستخدم. يتم ذلك عبر نوعين من البيانات:

  1. المدخلات (Data): هي البيانات التي نريد إجراء العمليات عليها. يمكن إدخالها عبر لوحة المفاتيح (Keyboard) أو تحميلها من الذاكرة.
  2. البرنامج (Code): هو مجموعة التعليمات التي تخبر المعالج بما يجب فعله بالمدخلات.

الكود الذي نكتبه بلغات البرمجة (مثل Python أو C++) لا يفهمه المعالج مباشرة. يجب أولاً تحويله عبر برنامج خاص (يُسمى المترجم Compiler) إلى لغة يفهمها المعالج، وهي لغة الآلة (Machine Code)، التي تتكون بالكامل من أصفار وآحاد.

السؤال الأخير: كيف تتحول هذه الأصفار والآحاد إلى إشارات كهربائية نرسلها للبوابات؟ الأمر بسيط جداً. تماماً كما حولنا ضغطات الأزرار في غرفة التحكم إلى إشارات 1 و 0، يتم تخزين كود الآلة في ذاكرة خاصة. هذه الذاكرة هي دائرة كهربائية. عندما نطلب منها قراءة سطر من الكود (مثلاً 01)، فإنها تُخرج على أسلاكها المتصلة بالمعالج فولت منخفض (0) وفولت عالي (1).

بهذا، نكون قد استبدلنا “غرفة التحكم” اليدوية بذاكرة إلكترونية. البرنامج هو عبارة عن مجموعة أوامر متسلسلة، مخزنة في ذاكرة البرنامج (Program Memory). نوصل خرج هذه الذاكرة بالمدخل الذي يختار العملية الحسابية في المضاعف (Multiplexer). وهكذا، كل سطر من الكود يُترجم إلى إشارة كهربائية تجعل المعالج ينفذ عملية مختلفة. مع كل نبضة ساعة، يتم تنفيذ سطر والانتقال إلى السطر الذي يليه.

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

ملاحظات ختامية هامة

قبل أن نختتم، هناك بعض المعلومات الإضافية الهامة التي لم يتسنَّ إدراجها بسلاسة في الشرح السابق:

بهذا نكون قد انتهينا. آمل أن يكون المقال خفيفاً ومفهوماً.

شارك المقال

أحدث المقالات

CONNECTED
ONLINE: ...
SECURE
00:00:00