تشريح قلب الكمبيوتر
تمثّل وحدة المعالجة المركزية (CPU) القلب النابض للكمبيوتر. ويعتبر هذا العنصر الهام، الذي غالباً ما يشار إليه باسم "المعالج" فقط، بدلاً من "مايكرومعالج" (microprocessor)، مسؤولاً عن كل شيء يقوم به كمبيوترك. فهو يحدد، جزئياً، نظام التشغيل الذي يمكن أن تستخدمه، والحزم البرمجية المتاحة أمامك، وكمية الطاقة التي يستهلكها الجهاز، ومدى استقرار نظامك بشكل عام، بالإضافة إلى أمور أخرى. كما يلعب المعالج دوراً رئيسياً في تكلفة النظام ككل، فكلما كان المعالج أحدث وأقوى، كلما ازدادت تكلفة الكمبيوتر.
سنلقي في هذا المقال، وعلى مدى ثلاثة أعداد، نظرة معمقة على بنية المعالج الداخلية. وسنبدأ بنظرة سريعة عن مكونات المعالج، ثم ننتقل إلى أجزائه المختلفة، لنفهم كيفية عمله. وسنتفحص في العدد القادم عائلة معالجات إنتل، إبتداءً من المعالج 4004 وإنتهاءً بمعالج بينتيوم الثاني، كما سنتفحص عائلات أخرى للمايكرومعالجات، بما فيها المعالجات التي تقلّد منتجات إنتل.
مكونات المعالج
قد تفكر في المعالج على أنه قطعة مربعة أو مستطيلة، ذات إبر عديدة تدخل ضمن مقبس موجود على اللوحة-الأم، لكن هذا في واقع الأمر، ليس سوى الغلاف الذي يحيط بالمعالج. يتألف المعالج بحد ذاته من رقاقة من كريستال السيليكون، تقل مساحتها عادة عن نصف بوصة مربعة. ويقوم الغلاف بحماية المعالج من الملوثات (مثل الهواء)، ويمكّنه من خلال الإبر، من التلاحم مع دارات اللوحة-الأم، وبالتالي مع النظام ككل. وتحتاج ملايين المفاتيح الإلكترونية (الترانزستورات) الموجودة ضمن المعالج، إلى بيئة محكمة العناية، لكي تعمل بشكل الصحيح.
وعلى الرغم من أن معظم المعالجات مصنوعة من السيليكون، إلا أنه من الممكن استخدام أي مادة أخرى شبه موصلة (semiconductor)، إذا أمكن تصنيعها على شكل أجزاء عالية الجودة، بالقياس المطلوب. والسيليكون متوفر ورخيص نسبياً، ولهذا يعتبر أكثر المواد شعبية في هذا المجال. وهو مناسب جداً بسبب إمكانية تشكيل كريستالات كبيرة منه بجودة عالية ومنتظمة. ويمكن أن يصل عرض الكريستالة الواحدة إلى 8 بوصات، وهو أمر مهم لأن الشركات المصنّعة ترغب في تقطيع الكريستالة الواحدة إلى أكبر عدد ممكن من الرقاقات. يقطع منشار دقيق الكريستالة إلى شرائح (wafers) تقل سماكتها عن ميلليمتر واحد، وتتم معالجة هذه الشرائح كيميائياً قبل تقطيعها إلى رقاقات مستقلة. وتدعى العملية الفيزيائية التي نقوم فيها بتطبيق التصميم المنطقي للمعالج على الرقاقة، بعملية الحفر الضوئي (photolithography)، ويتم في هذه الخطوة بناء ترانزستورات وأسلاك دقيقة على الرقاقة، في سلسلة مؤلفة من عشرة طبقات أو أكثر (تسمّى الأقنعة). وبعد أن تنتهي عمليات إنشاء الطبقات، تختبر الرقاقة عدة مرات للتأكد من أن الترانزستورات والأسلاك في مواقعها المناسبة، وتعمل بشكل صحيح، ثم توضع ضمن الغلاف.
لا يقوم الغلاف بدور حماية الرقاقة فقط، بل يلعب دوراً في تبديد الحرارة، وتأمين ارتباط المعالج مع اللوحة-الأم. وقد تغيّر الغلاف بشكل كبير عبر السنين، مع تبنّي طرق جديدة لمختلف تصاميم المعالجات. استخدمت أولى رقاقات إنتل طريقة الغلاف ثنائي الصفوف DIP (dual in-line packages)، حيث تؤمن مجموعتين متوازيتين مؤلفتين من أربعين إبرة أو أكثر، الاتصال مع اللوحة-الأم (انظر الشكل 1). وبسبب هذا التصميم المتوازي، فإن عمليات الترقية التي يمكن إجراؤها على الغلاف، لا تسمح بتوسع كبير في إبر الاتصال (connectors)، إذ سيصبح الغلاف طويلاً جداً بالنسبة للوحة-الأم عند إضافة إبر جديدة. كما أن الإشارات القادمة من الإبر الموجودة عند نهايات الغلاف، تتطلب زمناً أطول للوصول إلى رقاقة المعالج، من الزمن الذي تحتاجه الإبر المتوضعة على مقربة من المعالج. ولهذه الأسباب، قدّمت إنتل مع معالج 80286 مصفوفة الشبكة الإبرية PGA (pin-grid array)، وهو غلاف مربع الشكل على العموم، ويحتوي على صفين أو ثلاثة أو حتى أربعة صفوف من الإبر الموزعة على مسافات متساوية من بعضها البعض، ومرتبة حول منطقة مركزية. تدخل الإبر ضمن الثقوب العائدة لها، في المقبس الموجود على اللوحة-الأم، ويتم تثبيت المعالج في مكانه عادة عن طريق ذراع متحرك.
إن تصميم الغلاف مربع الشكل الذي يألفه معظمنا بدأ مع معالج 80286 وبقي مسيطراً حتى الآن. ومع ازدياد الحاجة إلى معالجات أكثر قوة، بات من الضروري استخدام ناقل (bus) أوسع، وبالتالي أصبحنا بحاجة إلى عدد أكبر من الإبر لتلائم هذه النواقل، وظهرت عدة بدائل للغلاف. يستخدم معالج بينتيوم تصميم SPGA (straggered pin-grid array)، الذي ينظم ترتيب الإبر ليمكّنها من التوضع إلى جانب بعضها البعض بشكل أكثر قرباً. أما معالج بينتيوم برو فيعتمد تصميماً يسمّى MCM (multi-chip module)، لأنه يجمع رقاقتي وحدة المعالجة المركزية وذاكرة كاش الثانوية (Level 2) في غلاف واحد. ويوجد غلاف آخر حديث يسمّى LCC (leadless chip carrier)، يستخدم وسادات وصل صغيرة من الذهب، بدلاً من الإبر، لتأمين الاتصال مع اللوحة-الأم.
ونجد بين طرق التغليف الأخرى، غلاف TCP (tape-carrier package)، وهو رقيق مثل الفيلم الفوتوغرافي، وملتحم باللوحة-الأم، وغلاف كارتريدج SEC (single-edge contact) المستخدم في معالج بينتيوم الثاني. وهذا الغلاف في الواقع عبارة عن غلاف PGA متوضع على بطاقة-إبنة صغيرة، ترتبط باللوحة-الأم عبر شق واحد. ويعتبر تصميم غلاف SEC مغرياً جداً لأنه يحتل مساحة أقل على اللوحة-الأم، وله خواص كهربائية أفضل.
داخل المعالج
تقوم جميع المعالجات بالعمل ذاته، من حيث المبدأ. فهي تأخذ الإشارات على شكل أصفار وواحدات (الإشارات الثنائية)، وتعالجها اعتماداً على مجموعة من التعليمات، وتنتج خرجاً على شكل أصفار وواحدات أيضاً. ويحدد التوتر المطبق على الخط، عند إرسال الإشارة، فيما إذا كانت الإشارة تمثل قيمة صفر أو قيمة واحد. ففي نظام 3.3 فولط، يعني تطبيق توتر 3.3 فولط أن الإشارة المرسلة هي الواحد، بينما يعني تطبيق توتر 0 فولط، أن الإشارة هي الصفر.
تعمل المعالجات عن طريق الاستجابة إلى دخل مؤلف من مجموعة من الأصفار والواحدات، مرتبة بطريقة معينة، وتعطي خرجها بالاعتماد على قرار متخذ فيها. ويتم اتخاذ القرار في دارة إلكترونية تسمى البوابة المنطقية (logic gate)، تتطلب ترانزستوراً واحداً على الأقل، وبحيث يتم ترتيب المداخل والمخارج بشكل مختلف، من أجل العمليات المختلفة. ونظراً لأن معالجات اليوم تحتوي على ملايين الترانزستورات، فإنها تقدّم فكرة عن مدى تعقيد النظام. تعمل البوابات المنطقية للمعالج مع بعضها البعض لصنع القرارات، باستخدام المنطق البوولي (Boolean logic)، الذي يعتمد على نظام جبري أسسه عالم الرياضيات جورج بوول (George Boole). وتتألف العمليات الأساسية في جبر بوول من العمليات: AND، و OR، و NOT، و NAND (أي نفي AND)، ويمكن استخدام العديد من تشكيلات هذه العمليات مع بعضها البعض. تعطي بوابة AND خرجاً مساوياً للواحد، إذا كانت كلتا إشارتي الدخل تساوي الواحد. وتعطي بوابة OR خرجاً مساوياً للواحد، إذا كانت إشارة واحدة، على الأقل، من إشارتي الدخل، تساوي الواحد. وتأخذ بوابة NOT دخلاً وحيداً وتعكس قيمته، فتعطي واحد إذا كان الدخل صفراً، والعكس بالعكس. أما بوابات NAND فهي منتشرة بكثرة، نظراً لأنها تستخدم ترانزستورين فقط بدلاً من ثلاثة ترانزستورات مستخدمة في بوابة AND، وتقوم بوظيفة مماثلة. وبالإضافة إلى ذلك، فإن المعالج يستخدم البوابات مع بعضها البعض، ضمن ترتيبات معينة، لتنفيذ الوظائف الحسابية، كما يمكن أن يستخدمها للبدء بتخزين البيانات في الذاكرة.
تعمل البوابات المنطقية عبر جهاز عتادي يعرف بالمفتاح (switch)، وبالتحديد المفتاح الرقمي (digital switch). وفي أيام الكمبيوترات القديمة، ذات الحجوم كبيرة (والتي كانت تترك انطباعاً لدى المشاهد في الأفلام السينمائية أقوى من الانطباع الذي تتركه كمبيوترات اليوم)، كانت المفاتيح في الواقع مفاتيح فيزيائية، أما اليوم فلا شيء يتحرك سوى التيار نفسه. وأكثر أنواع المفاتيح انتشاراً في كمبيوترات اليوم ترانزستور يعرف باسم موسفيت (metal-oxide semi-conductor field-effect transistor, MOSFET). ويقوم هذا النوع من الترانزستورات بأداء وظيفة بسيطة لكنها هامة جداً: عند تطبيق التوتر عليه، يستجيب إلى هذا التوتر بالسماح أو عدم السماح للتيار بالمرور. وعلى الرغم من أن معظم المعالجات تعمل اليوم على توتر 3.3 فولط، إلا أن المعالجات السابقة (ومنها الإصدارات الأولى من معالجات بينتيوم) تعمل على توتر 5 فولط. وفي أحد أنواع ترانزستورات موسفيت، الذي سنركز عليه هنا، فإن التيار القادم بتوتر يساوي أو قريب من القيمة العليا للتوتر، يفتح الدارة الإلكترونية، بينما التيار القادم بتوتر قريب من الصفر، يغلقها.
تعمل ملايين من ترانزستورات موسفيت مع بعضها البعض، بناء على التعليمات الصادرة عن البرامج، للتحكم بمرور التيار في البوابات المنطقية، وإعطاء النتيجة المطلوبة. ونذكّر أن كل بوابة منطقية تحتوي على ترانزستور واحد أو أكثر، وكل ترانزستور يجب أن يتحكم بالتيار، بحيث تنتقل الدارة ذاتها من وضعية التشغيل (on) إلى وضعية عدم التشغيل (off)، أو من وضعية off إلى وضعية on، أو تبقى على وضعها الحالي.
بإلقاء نظرة سريعة على دارات بسيطة للبوابة المنطقية AND، والبوابة المنطقية OR، تتضح لنا كيفية عمل هذه الدارات (انظر الشكل 2). تعمل كل من هاتين البوابتين على إشارتي دخل، وتعطي إشارة خرج واحدة. وتعني الدارة المنطقية AND أن كلتا إشارتي الدخل يجب أن تكونا مساويتان للواحد، لكي يكون الخرج مساوياً للواحد، بينما تعني دارة OR المنطقية أنه يجب أن تكون إحدى إشارتي الدخل، على الأقل، مساوية للواحد، حتى نحصل على خرج يساوي الواحد. وفي بوابة AND يجب أن تكون كلتا إشارتي الدخل عند التوتر العالي (أو ما يسمّى بالواحد المنطقي) حتى تتمكّن البوابةمن السماح للتيار بالمرور من خلالها. ولنلاحظ في الشكل 2، أنه يجب تطبيق توتر عال على كلا الترانزستورين في البوابة، حتى تكتمل الدارة. وإلا فإن الدارة ستبقى غير فاعلة، وتعطي ما يسمّى بالصفر المنطقي. أما في بوابة OR، فإن البوابة ستسمح للتيار بالمرور إذا كانت إحدى إشارتي الدخل عند النهاية العالية للتوتر. ولنلاحظ في الشكل 2 أن دارة OR تكتمل عند تطبيق التوتر على أي من ترانزستوري الدخل.
يتم التحكم بمرور التيار في كل بوابة، من خلال الترانزستورات الموجودة فيها. ولا تشكّل هذه الترانزستورات وحدات مستقلة ومنفصلة عن بعضها البعض. بل إن عدداً كبيراً منها مصنوع من قطعة واحدة من السيليكون (أو من مادة أخرى من أشباه الموصلات)، وترتبط مع بعضها البعض بدون أسلاك، أو أية مواد خارجية. وأدى تطور هذه الوحدات، المسماة بالدارات المتكاملة (integrated circuits, IC)، إلى ظهور المايكرومعالجات. ولم يتوقف دمج الدارات الكهربائية عند ظهور أول دارة IC. ومثلما كانت دارة IC الأولى مؤلفة من العديد من الترانزستورات، فقد تم ربط العديد من دارات IC مع بعضها البعض، في عملية تسمّى التكامل واسع النطاق (large-scale integration, LSI)، كما تم ربط هذه المجموعات الأخيرة من دارات IC مع بعضها البعض، في عملية (باستخدام المصطلحات المستخدمة في هذه الصناعة)، سمّيت بالتكامل واسع النطاق جداً (very large-scasle integration,VLSI). وتكمن الخطوة الأولى التي خطتها شركة إنتل إلى عالم الشهرة، في التقنية التي استخدمتها في مجال التكامل عالي المستوى لجميع البوابات المنطقية للمعالج، ضمن رقاقة واحدة معقدة. وكان أول معالج اعتمد هذه الطريقة هو معالج Intel 4004، الذي يعتبر الجد الأكبر لجميع المعالجات التي تقدّمها شركة إنتل اليوم. وسنلقي نظرة على هذا المعالج وأحفاده، في الجزء الثاني من المقال.
إن أهم عنصرين في المعالج هما المسجّلات (registers)، وساعة النظام (system clock). والمسجّل منطقة تخزين داخلية، تشكل وحدة ذاكرة. ونظراً لأنه جزء من المعالج، فهو يستخدم أسرع نوع من أنواع الذاكرة في نظامك. وتكمن وظيفته في الاحتفاظ بالبيانات المستخدمة من قبل التعليمات، على شكل مجموعات من البتّات (bit pattern)، أي سلسلة متتابعة من الأصفار والواحدات، في مناطق معينة، تكون في متناول المعالج. ويمكن توضيح أهمية المسجّلات، إذا علمنا أن إحدى الطرق الهامة لتحديد هوية المعالج، هي حجم المسجّل. فمصطلح معالج عيار 16 بت يعني أن مسجّل المعالج يمكن أن يتسع لـ 16 بت من البيانات. وعليه فإن معالجات عيار 32 بت تحتوي على مسجلات بقياس 32 بت، ومعالجات عيار 64 بت تعني أن مسجّلاتها تحتوي ضعف تلك الكمية. وكلما كبر عدد البتات التي يمكن أن يحملها المسجّل، كلما ازداد حجم البيانات التي يمكن أن يعمل عليها المعالج في المرة الواحدة.
يُمضي المعالج وقته مستجيباً للإشارات، إلا أنه لا يستطيع الاستجابة إلى جميع الإشارات في الوقت ذاته، وإلا فإنها ستختلط مع بعضها البعض بشكل غير منتظم. وتجنباً لهذه المشكلة، ينتظر المعالج حتى يتلقى أمر البدء باستقبال الإشارات. ويتحدد زمن انتظار المعالج عن طريق ساعة النظام (system clock). فعلى فترات زمنية دقيقة، تقوم ساعة النظام بإرسال نبضات كهربائية كوسيلة للاستفهام من النظام عن التعليمات المنتظرة. فإذا كانت هناك تعليمة تنتظر التنفيذ، ولم يكن المعالج مشغولاً بالتعليمات السابقة، يجلب المعالج هذه التعليمة إلى داخله ويعمل على تنفيذها. ويعتمد عدد التعليمات التي يمكن للمعالج أن يقوم بتنفيذها، في دورة ساعة واحدة (أي نبضة واحدة من ساعة النظام)، على تصميم المعالج بحد ذاته. وقد كانت المعالجات الأولى تعمل على تعليمة واحدة فقط في كل دورة ساعة، لكن معالجات اليوم تسرّع هذه العملية من خلال طريقتين، تدعى الأولى التنفيذ ضمن خطوط معالجة (pipelining)، والثانية التنفيذ فائق التدرج (superscalar execution). تسمح خطوط المعالجة (pipelines) للمعالج بقراءة تعليمة جديدة من الذاكرة قبل أن ينتهي من معالجة التعليمة الحالية. وفي بعض المعالجات، يمكن أن يتم العمل على عدة تعليمات في آن واحد. ويدعى مدى سريان البيانات المتتابعة ضمن المعالج بعمق الخط (pipeline depth). كان عمق الخط في معالجات إنتل الأولى وحتى المعالج 80286، مساوياً للواحد (أي لم تكن هناك خطوط معالجة أبداً)، وقفز الرقم إلى 4 في عائلة معالجات 80486، أي يمكن لأربع تعليمات كحد أقصى، أن تكون في مراحل مختلفة من خط المعالجة. ويبلغ عمق خط المعالجة في معالجات بينتيوم خمس مراحل، وقد تمكّنت تكنولوجيا MMX من زيادة هذا العدد.
أما المعالج فائق التدرج فهو المعالج الذي يحتوي على أكثر من خط معالجة، مما يعني أنه يستطيع تنفيذ أكثر من مجموعة واحدة من التعليمات في الوقت ذاته. وهذا يمكّنه نظرياً من مضاعفة الأداء، إلا أنه في معظم الحالات، يضطر أحد خطوط المعالجة إلى انتظار نتيجة التعليمة التي يعمل عليها الخط الآخر.