how does cpu workحديثنا اليوم سيتمحور حول المعالج Intel 8086 من ناحية مواصفاته و خصائصه و ميزاته و سنتعرف خلال هذا الموضوع على السحر الذي احتواه هذا المعالج الذي مكن Intel بالتحكم في سوق المعالجات كما تريد حتى هذه اللحظة،في عام 1970 قامت Intel بطرح أول معالج "Microprocessor"في العالم

و حيث كان الIntel 4004 معالج يستطيع التعامل مع 4 بت من البيانات و عنونة ذاكرة بطول 4096 حجرة بعرض 4 بت لكل منها و يستطيع تنفيذ 50Kips أي يستطيع تنفيذ 50 ألف تعليمة خلال ثانية و كان يبلغ عدد التعليمات التي يدعمها 45 تعليمة وظلت Intel تطور معالجها و بنيته الداخلية حتى قدمت المعالج Intel 8080

 

وكان أول معالج بعرض ناقل بيانات 8 بت ويستطيع أن يعنون 64K bytes من الذاكرة و تنفيذ 500 ألف تعليمة خلال ثانية ويدعم منطق الTTL مما ساعد على استخدام هذه الشريحة في تطبيقات التحكم بشكل أسهل ولاحقا في عام 1977 طرحت معالج Intel 8085 الذي ينفذ 769230 تعليمة في الثانية بالإضافة إلى مولد نبضات الساعة ومتحكم في النظام مدمجين داخل المعالج بالإضافة إلى تردد العمل الأعلى كل هذه الميزات سمحت ل Intel ببيع أكثر من 100 مليون معالج من 8085 بالإضافة إلى 200 مليون معالج عن طريق مصنعين إضافيين ك AMD و أيضا وجود 500 مليون معالج  Z80 من قبل شركة Zilog الداعم لتعليمات ال8085  أي أنه كان هناك أكثر من 700 مليون معالج ينفذون تعليمات ال8085/Z80 في العالم.


ثم جاء صاحب السمو المعالج Intel 8086 في العام 1978 ليكون أول معالج 16بت في العالم حيث يستطيع هذا المعالج تنفيذ 2.5 مليون عملية في الثانية بالإضافة إلى عنونة 1M byte من الذاكرة بالإضافة إلى العديد من التحديثات في بنية المعالج الداخلية ودعم تعليمات جديدة لم تكن موجودة مسبقا كعمليتي الضرب و القسمة و احتواء المعالج على مسجل رتل التعليمات "طابور التعليمات" الذي يعتبر أساس فكرة الذاكرة Cache في المعالجات الحديثة إذ كان هذا المسجل عبارة عن ست حجرات من الذاكرة حجم كل حجرة 8 بت يتم وضع التعليمات فيها ريثما ينتهي المعالج من تنفيذ التعليمة الحالية .


وفي عام 1981 ابتسم الحظ لIntel عندما قررت شركة IBM أن تستخدم المعالج 8088 "وهو نسخة محسنة بشكل بسيط عن 8086 وصدرت عام 1979" في حاسبها الجديد المخصص للاستخدام المنزلي والذي سمي PC "Personal Computer" والذي سيستخدم لمعالجة النصوص و الجداول وتم الاتفاق مع شركة ناشئة جديدة هي Microsoft لتقديم نظام تشغيل جديد يدعى MS-Dos ليكون هو النظام المعتمد عليه مع هذه الحواسيب "وقصة هذا النظام معروفة" ومن تلك اللحظة أشرقت الشمس على عالم الحواسيب الشخصية وانتشرت هذه الحواسيب بشكل غير مسبوق على مستوى العالم وقام ذلك الحاسب بوضع المعايير الخاصة بالحواسب الشخصية التي نتبعها حتى الآن فحتى شركة Apple والتي كانت الطرف الأخر و الوحيد في صراع الحواسب الشخصية في تلك الفترة عادت و استعانت بترسانة Intel من المعالجات لتطوير حواسيبها الجديدة وكل هذه المعالجات تشترك بشيء واحد وهو دعم أطقم تعليمات الX86 والذي يعتبر حاليا المعيار الأهم في الحواسب الشخصية وحتى Intel نفسها لم تستطع أن تنجح بدونها وهو ما حصل مع معالجات Itanium.


ولكن ما هي أطقم التعليمات وما هي هذه الكلمة السحرية "X86" وما هي التعليمات أساسا :
تعليمات المعالج : هي بكل بساطة عبارة لغة المعالج و اللغة الوحيدة التي يفهمها فهي عبارة عن مجموعة من المصطلحات الرقمية التي تفعل دارات معينة داخل المعالج لتنفيذ مهمة معينة وتختلف هذه المهام باختلاف التعليمة و معاملتها و المعاملات عبارة عن القيم التي تحتاجها العمليات كي تنفذ .
أما أطقم التعليمات فهي مجموعة من التعليمات التي تأتي سويا دائما "من ناحية الدعم و ليس من ناحية التنفيذ" فلا يمكن دعم جزء من هذه التعليمات دون جزء أخر.
ولكل معالج أو مجموعة من المعالجات مجموعة من أطقم التعليمات خاصة بها وعند دعم هذه المعالجات لهذه الأطقم تستطيع هذه المعالجات أن تنفذ أي برنامج كتب بواسطة التعليمات المتضمنة ضمن هذه الأطقم فعلى سبيل المثال جميع معالجات Intel و AMD الحالية تدعم طقم التعليمات X86 لذلك فهي تستطيع تشغيل أي برنامج كتب بواسطة هذه التعليمات وعلى سبيل المثال Windows XP "جزء لا بأس منه يعتمد على الX86"
لنأخذ مثال بسيط جدا عن بعض التعليمات الموجودة في الX86 حتى نفهم التعليمات بشكل جيد:
1001 0000
1001 0000
1011 0000
0000 0101
0000 0100
0000 0111
هذه الأرقام تمثل التعليمات التي تم ذكرها قبل قليل فعند ورود القيمة 1001 0000 للمعالج عندها المعالج لن يفعل شيئا بل سينتظر لورود التعليمة التالية "تعليمة تأخير زمني" وعند وصول التعليمة التالية 1011 0000  سيعرف المعالج أن القيمة التالية يجب أن يتم إسنادها للمسجل AL و عند وصول القيمة 0000 0101 والتي تمثل الرقم 5 في الأعداد العشرية سيتم وضعها في المسجل AL كما طلبت التعليمة السابقة ثم تصل إلى المعالج التعليمة 0000 0100  التي تعبر عن عملية الجمع القيمة التالية إلى القيمة الموجودة في المسجل AL والقيمة التالية هنا هي 0000 0111 والتي تعبر عن الرقم 7 فيتم إضافتها و تصبح القيمة الموجودة في المسجل AL هي 0000 1100 و التي تعبر عن الرقم 12.
ملاحظة : الأعداد السابقة هي أعداد ثنائية.

الأن تصور أن أي تغيير في العملية سيتطلب تغيير الرقم وعند معرفتك أن عدد التعليمات التي يملكها معالج ال8086 أكثر من 20000 عملية (وهي سبب تسمية هذه المعالجات بال CISC "Complex Instruction Set Computer" بسبب تعقيدها و كثرة عددها) الأن ستقول أنه من المستحيل التعامل مع هذا المعالج و لكن تم حل هذه المشكلة منذ زمن بعيد مع اختراع الAssembly وهو برنامج بسيط يحول بعض المصطلحات القريبة من لغة البشر إلى لغة الألة مما يبسط العملية فالبرنامج السابق سيصبح بالشكل التالي
NOP
NOP
MOV AL,5
ADD AL,7
وحتى هذه الطريقة تعتبر صعبة لأنك بحاجة إلى دراية كبيرة في بنية المعالج الداخلية و مسجلاته وتم الانتقال إلى لغات المستوى العالي ولكن هذا ليس حديثنا و سنتحدث الأن عن كيفية قيام المعالج بكل ذلك فكيف يستقبل المعالج التعليمة و أين يضعها و في الجزء القادم سنرى كيف تغيرت طريقة معالجة البيانات بعد معالج ال80486 "حسب إحدى المصادر رغم أني لست متأكدا من أين بدأ التغيير".

البنية الخارجية للمعالج 8086:
المعالج 8086 عبارة عن شريحة بشكل Dual In Line Package و يملك 40 رجل توصيل Pin يغذى بجهد 5V يمتلك 14 مسجل بطول 16 بت لكل منها و يستطيع أن يعنون 1M byte من الذاكرة عن طريق 20 خط عنونة مدمج معها خطوط البيانات ال16

how does cpu work

نلاحظ كيف دمج خطوط البيانات مع العنوانين في الأقطاب AD0 إلى AD15 وتم إكمال خطوط العنوانين من A16 إلى A19 أما بقية الخطوط فهي خطوط تحكم و حالة "التحكم للتحكم بالعناصر المرتبطة بالمعالج و عمل المعالج نفسه و الحالة لمعرفة جاهزية الطرفيات"  وليست هدفنا حاليا ولكن يجب ذكر أنه كان يعمل بتردد 4.77Mhz و يوجد منه إصدارين الأول 8086-8 و يعمل بتردد 8Mhz و الثاني 8086-10 و يعمل بتردد 10Mhz .

البنية الداخلية للمعالج 8086 :

how does cpu work

يتكون المعالج 8086 من قسمين أساسيين كل قسم مسؤول عن مجموعة من المهام و هما:
1- وحدة التخاطب مع الناقل Bus Interface Unit (BIU):هذه الوحدة مسؤولة عن التخاطب مع العالم الخارجي من الحصول على تعليمة من الذاكرة RAM "عملية Fetch" و قراءة و كتابة البيانات من الذاكرة بالإضافة إلى حساب عناوين المعاملات الخاصة بالتعليمات operands و تأمينها لوحدة التنفيذ و حفظها.
2-وحدة التنفيذ Execution Unit (EU):وهذه الوحدة مسؤولة عن تنفيذ العمليات داخل المعالج كالعمليات الحسابية الجبرية و المنطقية بالإضافة إلى تأمين أوامر التحكم الخاصة بالمعالج و حساب العناوين الذاكرة الناتجة عن عمليات القفز.

مكونات وحدة التخاطب مع الناقل BIU :
تتكون هذه الوحدة من مجموعة من المسجلات المسؤولة عن الوصول للذاكرة و هي ES,CS,SS,DS,IP و جميعها بطول 16 بت بالإضافة إلى جامع العناوين وهو الدارة المسؤولة عن تشكيل العنوان من خلال القيم الموجودة داخل المسجلات السابقة و دارة التحكم بالناقل و مسجل رتل التعليمات Instruction Queue .

مكونات وحدة التنفيذ EU:
تحوي هذه الوحدة على قلب المعالج ألا وهو وحدة الحساب و المنطق Arthamtic and Logic Unit (ALU) المسؤولة عن تنفيذ العمليات بالإضافة إلى المسجلات العامة "التي تعتمد عليها وحدة الحساب و المنطق في تنفيذ مهامها و مسجل الأعلام Flag register .
تستطيع الوحدتين BIU و EU العمل بشكل غير متزامن حيث تستطيع كل واحدة تنفيذ مهامها الخاصة دون الحاجة إلى انتظار الأخرى مما يسمح بزيادة الأداء و يسمى هذا المبدأ بالPipeline Architecture  
الأن سنأخذ المثال السابق و نشرح كيف تسير المعلومة داخل المعالج بعد طلبها من الذاكرة:سنفترض أن مسجلات الذاكرة توجه المعالج إلى قراءة أول حجرة من الذاكرة والتي تحوي على القيمة 0000 1001 و سنفترض أن عنوان هذه الذاكرة هو 0 و أن البرنامج تمت كتابته بطريقة ما إلى الذاكرة الخاصة و سننتقل خطوة خطوة للوصول إلى نهاية المثال:في البداية تقوم وحدة الBIU بإرسال عنوان الذاكرة لأول خانة "الذي افترضناه 0" من جامع العنوان إلى خطوط العنونة AD0 إلى A20  وتعطي أمر إلى الذاكرة كي تقوم بإخراج القيمة الموجودة في العنوان 0 إلى ممر البيانات الخاص بالذاكرة وهنا تقوم دارة الBIU بقراءة القيمة الموجودة على الممر و وضعها في بداية الIQ ثم تنتقل أليا إلى العنوان التالي في الذاكرة ألا وهو 1 وبنفس الطريقة تقوم بطلب القيمة الموجودة في هذا العنوان وتقوم بإزاحة القيمة الموجودة في المسجل IQ خطوة إلى أمام باتجاه وحدة التنفيذ

و تضع القيمة الجديدة "0000 1001" في بداية الرتل وهكذا حتى يتم شحن البرنامج بكامله داخل الرتل وذلك لأنه مكون من 6 عمليات فقط ولو كان مكون من تعليمات أكثر لكان أكمل في وضع التعليمات في  الIQ أو إلى أن يمتلئ وفي كل مرة تقوم وحدة الEU بسحب القيمة الموجودة في نهاية الIQ "التي تم وضعها أولا" لذلك يسمى مسجل الIQ باسم First in First out (FIFO) Register الأن وصلت التعليمة الأولى إلى المعالج فيقوم بتشفيرها و فهم ما تحتاجه من معاملات خارجية "موجودة في مواقع في الذاكرة معينة" و يطلب من وحدة الBIU الحصول عليها و جلبها, الأن التعليمة NOP لا تحتاج إلى أي معاملات فيتم تنفيذها مباشرة "ما يقوم به المعالج فعليا هو إهمال نبضة الساعة التالية وعدم تنفيذ أي شيء" وعند ورود التعليمة NOP مرة أخرى ينفذ نفس العملية .

الأن وصلت 1011 0000 إلى وحدة التنفيذ هذه التعليمة تخبر المعالج بأن ينقل القيمة التالية في IQ إلى المسجل AL الموجود داخل المعالج وعند ورود القيمة 0000 0101 يتم وضعها مباشرة في المسجل AL كما طلبت التعليمة السابقة و يتم قراءة التعليمة التالية 0000 0010 وهذه التعليمة تخبر المعالج بأن يضيف القيمة التالية في الIQ إلى القيمة الموجودة في المسجل AL وتتم قراءة القيمة من الIQ و إضافتها للمسجل AL

الأن لنفترض أن وحدة الBIU قامت بوضع التعليمات الموجودة في عناوين الذاكرية من 6 إلى 11 في الIQ أثناء تنفيذ وحدة الEU العمليات الموجودة في العناوين من 0 إلى 5 "البرنامج السابق" وكانت التعليمة التالية "في العنوان 6" هي تعليمة قفز إلى العنوان 20 مثلا هنا تصبح جميع التعليمات الموجودة في الIQ خاطئة "لا يجب تنفيذها حاليا" لذلك تقوم وحدة الBIU بتصفير الIQ و تعيد ملئه من جديد  وهذا ما يحدث أيضا في حال طلبت وحدة الEU قيمة معينة "معامل" موجودة في عنوان ذاكري بعيد "أي ليس في الحجرة التالية للIQ" مما يسبب تأخير زمني في عملية المعالجة وهو أمر غير مرغوب وتم حله لاحقا "في الفصول القادمة الحل ولكن لا مانع من طرح بعض الأفكار لطرق الحل" .

كيفية عمل وحدة EU تحدد قوة معمارية المعالج فمهما كانت سرعة وقوة وحدة الBIU فلن تفيد في حال كانت وحدة EU لا تستطيع مجارات التعليمات القادمة مما يزيد من عدد مرات تفريغ IQ و الوقت الذي يكون فيه الIQ ممتلئ و الBIU خامل و بالمثل في حال كانت الBIU بطيئة فلن تستطيع تأمين المهام للEU و تجعل الEU خاملة لذلك من المهم أن يكون هناك تناسق في الأداء بين القسمين.

 

بقلم: خير الدين كجان

 

اقرأ ايضا:

كيف تعمل وحدة المعالجة المركزية (CPU) - الجزء الاول

كيف تعمل وحدة المعالجة المركزية (CPU) - الجزء الثاني