معمارية CISC و معمارية RISC ؟


معمارية CISC

أتت تسمية معمارية CISC كاختصار لـ “Complex Instruction Set Computer”، وهي تتواجد في المُعالجات الصغرية التي تحوي مجموعة كبيرة من التعليمات المُعقدة، ويكمن الهدف الأساسي من هذه المعمارية في مثل هكذا نوع من الحواسيب في إمكانية إنهاء المهمة بأقل عدد من التّعليمات والسطور في لغة التجميع Assembly Language. يتم ذلك بتصميم أجهزة قادرة على فهم وتطبيق سلسلة من العمليات من خلال قراءة تعليمة واحدة. لنفرض على سبيل المثال تعليمة نرمز لها بكلمة MULT. لنفرض أن هذه التعليمة تعمل على عملية ضرب قيمتين.
عندما سيتم تطبيق هذه التعليمة، سيتم تحميل قيمتين على مُسجلين مُختلفين، حيث تكون القيمتين مُخزنتين في العنوانين 0x100 و 0x101 في ذاكرة البيانات، ومن ثم ستقوم بضرب معامليهما أي قيمتيهما. وكخطوةٍ أخيرة، تُحفظ النتيجة في مُسجلٍ مناسب. فنكون حققنا عملية ضرب عددين بواسطة تعليمة واحدة “مُعقدة” فقط.
أحد أهم مزايا استخدام هذا النظام هو تخفيف العمل على المترجم Compiler بسبب قلة عدد السطور في لغة التجميع لأي شيفرة نظراً لشمولية وتعقيد التعليمة الواحدة. أيضاً، وبسبب صغر البرنامج، تحتاج إلى ذاكرة صغيرة لحفظ التعليمات. لكن ما تحتاجه هذه المعمارية هو تعليمات مُعقدة وعتاد أجهزة مُعقد يستطيع فهمها.
كانت منهجية CISC في الحوسبة الوحيدة المتواجدة إلى حدّ سنة 1975 عندما قامت IBM بتجريب فكرة جديدة مغايرة تماماً لمبدأ CISC والتي سوف تُدعى فيما بعد بمعمارية RISC. في الحقيقة مشروع IBM لم يكن الوحيد في تلك الفترة حيث كان يوجد مشروعين مماثلين تقريباً في جامعة ستانفورد وجامعة بيركلي كلاهما في الولايات المتحدة لكن ينسب الفضل كأول آلة RISC لحاسوب IBM 801.

 

 

 

معمارية CISC

 

معمارية RISC

كلمة RISC هي اختصار لـ “Reduced Instruction Set Computer”. وبعكس الحواسيب المبنية على معمارية CISC، فإن الحواسيب المبنية على معمارية RISC تتميز بعددٍ مَحدود من التعليمات، أي أن البرنامج سيحتاج إلى عددٍ من التعليمات البسيطة لتطبيق مهمته. لنأخذ مثالنا السابق، مهمة الحاسوب هو ضرب قيمتين لكن التعلية المُعقدة السابقة غير ممكن توافرها في هذا النوع من المِعماريات. سنحتاج إذاً إلى عدة تعليمات بسيطة للوصول إلى النتيجة المَرغوبة. لنفرض أولاً تعليمة load لتحميل المُسجلات بالقيم المطلوبة، وتعليمة mul لتطبيق عملية ضرب المعاملين و تعليمة mov لنقل النتيجة إلى المُسجل المرغوب. سيصبح البرنامج السابق على الشكل التالي:
load RegA, 0x100
load RegB, 0x101
mul RegA, RegB
mov RegA, RegC
حيث تعمل تعليمة mul على ضرب القيمتين وتخزين الناتج في المُسجل RegA أي ما يوافق في لغة C التعليمة التالية: RegA = RegA*RegB. ومن ثم تنقل تعليمة mov النتيجة المُخزّنة في RegA إلى المُسجل المرغوب في هذه الحالة، وهو المُسجل RegC.
كنظرةٍ أولى، قد تعتقد أن هذا النهج لا يتّميز بالكفاءة المُناسبة لمُعالجة المهمات، حيث بسبب بساطة التّعليمات سنحتاج إلى عددٍ كبير منها لتطبيق المَهمات المُعقدة وهذا ما يسبب الحاجة لتواجد ذاكرة برنامج أكبر من التي في حواسيب CISC لحفظ التعليمات المتعددة. أيضاً سيكون دور المترجم أكبر لتحويل البرامج إلى لغة تجميع بسبب زيادة عدد سطور كلّ شيفرة. لكن وبسبب بساطة التعليمات سيتم تطبيق البرنامج بشكلٍ أسرع، حيث أن كُل تعليمة تحتاج إلى دورة واحدة فقط من ساعة المُعالج “1 clock cycle” للتطبيق. أيضاً، وبسبب تلك البساطة، سيكون تصميم الأجهزة أبسط بكثير فسيحتاج المُعالج عدداً أقل من الترانزيستورات، مما سيترك مجالاً أكبر للعمل على تطوير أمور أساسية أخرى كزيادة عدد المُسجلات وحجم الذواكر.
إلى الآن تجري مناقشات حول هوية المعمارية الأفضل. حيث أنه يوجد تفضيل واضح لنهج RISC من قبل غالبية المُصنّعين وذلك لسببين أساسين، سرعته العالية وكلفته المنخفضة (بسبب قلة عدد الترانزيستورات كما ذكرنا).