فروق المعمارية بين معالجات X86 و ARM : العمالقة!

حسنا ، معالجات ARM هي المنافس لمعالجات X86 ، لكن في سوق مختلف تماما ، فكلنا نعرف أن معالجات X86 منتشرة بصورة رهيبة في الحواسيب الشخصية والمحمولة والخوادم ، بالاضافة الي الحواسيب العلمية الخارقة ، ومحطات تصميم الرسوميات ثلاثية الأبعاد … أي في معظم الحواسيب تقريبا .

اذن في أي شئ تتواجد معالجات ARM ؟

تتواجد تلك المعالجات في الأجهزة الالكترونية الأخري ، مثل الهواتف النقّالة ، والآلات الحاسبة ، ومشغّلات الموسيقي والعروض المرئية ، كما تتواجد في أجهزة الألعاب الصغيرة ، والمساعدات الرقمية PDA ، وحتي الأقراص الصلبة وموجّهات الشبكات Routers ، وهي تحظي بانتشار رهيب في هذه الأسواق.

ان كلا من X86 و ARM ، هما عملاقان يحكمان دولتين مختلفتين ، و التصادم بينهما مقدّر أن يحصل أن عاجلا أو آجلا.

لكن الصراع بين العملاقين بدأ منذ زمن سحيق ، وهو صراع تقني أكثر منه تجاري ، انه صراع التعليمات .

ويتسائل البعض .. كيف يكمن للتعليمات أو (للمعمارية) أن تسبب صراعا ؟

 

ولنفهم هذه النقطة جيدا يجب أن نعود الي مثالنا الأول المسكين مرة أخري .. نعود له لنتذكر كيف أن التعليمات العتادية ، ما هي الا ترجمة أمينة للمسألة ، 15(7+5) ، تم تمثيلها باستخدام المسجلات ومعالجي الضرب والجمع .

هذه الترجمة الأمينة ، تسمّي Decoding ، وهي تعني أنني ترجمت مفردات المسألة الحسابية الي عتاد مباشرة ، والمفردات هنا تعني الأرقام والعلامات الحسابية مثل + و X ، فالأرقام ترجمت الي قيم في مسجلات (ذواكر عتادية) و العلامات الحسابية ترجمت الي معالج الضرب أو معالج الجمع .

ترجمة الأرقام تبدو عملية سهلة ، فكل ما فعلناه هو وضعها في مسجّل ، وانتهي الأمر .

لكن هذا غير صحيح ، فنحن لم نضعها في أي مسجل ، بل وضعناها في المسجل الخاص بمعالج الجمع مثلا ، تميهدا لتنفيذ عملية الجمع !

وهنا يكمن السؤال ! لماذا تم وضع الأرقام في مسجلات معالج الجمع ؟ ولم يتم وضعها في مسجلات معالج القسمة مثلا ؟

السبب ببساطة هو وجود علامة الجمع في المسألة !

ان علامة الجمع (+) ما هي الا عنوان لمسجلات معالج الجمع !

وعلامة الضرب ما هي الا عنوان لمسجلات معالج الضرب !

اذن فالرقم 15 يتواجد جنبا الي جنب بجوار عنوان مسجلات معالج الضرب داخل الذاكرة العشوائية .

والرقمين 7 و 5 يتواجدان جنبا الي جنب بجوار عنوان مسجلات معالج الجمع داخل الذاكرة العشوائية .

عندما يقرأ المعالج الذاكرة العشوائية ، فانه يقرأ تعليمات الجمع أو الضرب أولا (واتفقنا أنهم عناوين مسجلات الضرب والجمع ) ،ومن ثم يقوم بتحويل الرقم 15 الي مسجل معالج الضرب ، لأنه يحمل عنوان هذا المسجل ، ويقوم بتحويل رقمي 7 و 5 الي مسجلات معالج الجمع ، لأنهما يحملان عناوين هذه المسجلات .

وبهذا تكتمل عملية الترجمة Decoding ، وما يتبقي هو اجراء العملية الحسابية نفسها في معالج الضرب أو الجمع ، ومن ثم الخروج بالناتج النهائي وتسجيله في مسجّل أخير .

هل لاحظت أن الترجمة تعتمد بشكل اساسي علي وجود عنوان مسجلات معالج الضرب أو الجمع ؟

ماذا اذا لم يكن هذا العنوان موجودا ؟ ، ماذا اذا تغيرت قيمته ؟

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

اذن يجب علي الشخص أو البرنامج الذي يتولي كتابة المعادلة وتخزينها في الذاكرة ، أن يعرف عناوين معالجات الجمع والضرب ، والا ذهبت المعادلة الي معالج آخر .

ومن هنا يبدأ الصراع !!

في المعالج أ ، يكون عنوان معالج الضرب هو المسجل 1 ، و 2 ، 3 .

بينما في المعالج ب ، بكون عنوان معالج الضرب هو المسجل 4 و 5 .

اذا تمّ كتابة البرنامج علي أساس معمارية المعالج أ ، فان المعادلة لن تصلح علي معمارية المعالج ب ، والعكس صحيح !! ، وذلك بسبب اختلاف عناوين معالجات الضرب في المعماريتين !

اذن وجب علي المبرمج أن يضع في حسبانه الاختلاف في المعماريات بين المعالجات ، حتي يعمل برنامجه علي كل المعالجات !

لهذا يعمل نظام تشغيل النوافذ Windows حصريا علي معالجات X86 ، لأن شركة Microsoft ، لم تضع في حسبانها أي معالجات أخري أثناء تصميم النظام ، وبهذا فلن يعمل النظام علي معالجات ARM .

وهذه هي أول المواجهات في الصراع بين العملاقين ، وهي الحصول علي البرامج الداعمة لكل منهما !

ثاني المواجهات يتعلّق باختلاف وجهات النظر في التصميم بشكل متطرف !

ولنفهم ذلك نعود مرة ثالثة لمثالنا الأول ، ونرجو منه الصفح علي ازعاجه المستمر ..

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

ماذا عن مسألة أخري أكثر تعقيدا ؟ .. مثلا : 12X(5+4)X8+(13X4)-9

سوف نحتاج الي مسجلات جديدة وسوف نحتاج الي مجموعة وصلات جديدة بين المسجلات والمعالجات ، تلك الوصلات سوف تكون أعقد وأكثر من المرة السابقة !

اذن ماذا عن مسألة أكثر تعقيدا ، ومسألة أخري أكثر وأكثر وأكثر تعقيدا ؟

ان هذا مستحيل !! كلما زاد تعقيد المسألة ، كلما زاد تعقيد تصميم العتاد ، وبازدياد تعقيد البيانات أكثر وأكثر ، يصبح من غير المجدي الاستمرار في تصميم العتاد بهذا التعقيد ، لأن التعقيد لن ينتهي أبدا هكذا !!

ما الحل اذن ؟ الحل هو اضافة ما يسمي باسم طاقم التعليمات المصغر Microcode Set .

طاقم التعليمات المصغر هو معالج صغير يسمي باسم وحدة التحكم Control Unit ، وهي الموجودة في كل المعالجات الحديثة ، وهو عبارة عن ذاكرة كبيرة مخزن عليها عناوين كل مسجلات المعالج ، سواء الخاصة بمعالج الضرب ،أو الجمع أو القسمة .. الخ

تتصل هذه الذاكرة بوحدة معالجة صغيرة ، وفي هذا المثال 15X5 ، تستقبل وحدة المعالجة هذه بيانات المسألة ، وتقرأ علامة الضرب أولا .

علامة الضرب هنا هي عبارة عن عنوان الذاكرة التي تحوي عنوان مسجلات معالج الضرب !

تقوم وحدة المعالجة الصغيرة بقراءة الذاكرة ، وتستخرج عنوان مسجلات معالج الضرب ، وتقوم بارسال رقم 15 ورقم 5 الي مسجلات معالج الضرب .

يجري معالج الضرب العملية ، ويخزن الناتج النهائي (75) في مسجل جديد ، يذهب هذا المسجل الي وحدة التحكم.

تقرر وحدة التحكم ما اذا كانت المسألة قد انتهت أم لا .. فاذا انتهت .. يرسل الناتج الي الذاكرة العشوائية ، واذا لم تنتهي ، واحتوت المسألة علي جزء جمع اضافي (+10مثلا ) ، تقوم وحدة التحكم بارسال ناتج الضرب (75) ورقم 10 الي معالج الجمع .. وهكذا .. دواليك .. :

arm_vs_x86_art2

 

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

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

تعمل معالجات X86 ، بهذا الأسلوب ، ويسمي هذا الأسلوب باسم Complex Instruction Set Computer ، أو حاسوب طاقم التعليمات المعقد CISC ، وذلك لأنه يستعمل مجموعة معقدة من التعليمات ، والتي يتم تسجيلها في وحدة التحكم .

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

أدّي اضافة وحدة التحكم الي معالجات X86 ، الي كبر حجمها ، لكن ليس بنفس درجة حجمها اذا لم تكن وحدة التحكم موجودة ، كما أدي الي بعض البطأ في تنفيذ العمليات شديدة التعقيد ، بسب أن تلك العمليات تمر علي وحدة التحكم أكثر من مرة ، كما رأينا في المثال السابق ، مما يخلق المزيد والمزيد من التأخير .

المزيد والمزيد من هذا التأخير ، يستلزم عمل شئ ما لتعويضه ، والشئ الذي استقر عليه المهندسون هو خط أنابيب البيانات Pipeline ، وهو مفهوم سوف نشرحه في مقال آخر .

ولنا أن نتفهم أن المصممين كانوا بين حيرتين ، حيرة تصميم معالج معقد جدا ، أو تصميم معالج أقل تعقيدا ولكنه أبطأ قليلا .. واختارت فئة مصنعي X86 الحيرة الأخيرة .

الصفحة السابقة 1 2 3 4الصفحة التالية

محمد عبد الحميد

محمد عبد الحميد .. 25 سنة ..
زر الذهاب إلى الأعلى