کامپيوتري که هم اکنون به کمک آن در حال مشاهده و مطالعه اين صفحه هستيد ، داراي يک ريزپردازنده است . ريزپردازنده به منزله مغز کامپيوتر است و تمامي کامپيوترها اعم از کامپيوترهاي شخصي ، کامپيوترهاي دستي و ... داراي ريزپردازنده مي باشند. نوع ريزپردازنده استفاده شده در يک کامپيوتر مي تواند متفاوت باشد ولي تمامي آنان عمليات مشابهي را انجام مي دهند .
تاريخچه ريزپردازنده ها
ريزپردازنده که CPU هم ناميده مي گردد، پتانسيل هاي اساسي براي انجام محاسبات و عمليات مورد نظر در يک کامپيوتر را فراهم مي نمايد. ريزپردازنده از لحاظ فيزيکي يک تراشه است . اولين ريزپردازنده در سال 1971 و با نام Intel 4004 معرفي گرديد. ريزپردازنده فوق چندان قدرتمند نبود و صرفا" قادر به انجام عمليات جمع و تفريق چهار بيتي بود. نکته مثبت پردازنده فوق، استفاده از صرفا" يک تراشه بود.قبل از آن مهندسين و طراحان کامپيوتر از چندين تراشه و يا عصر براي توليد کامپيوتر استفاده مي کردند.
اولين ريزپردازنده اي که بر روي يک کامپيوتر خانگي نصب گرديد ، 8080 بود. پردازنده فوق هشت بيتي و بر روي يک تراشه قرار داشت . اين ريزپردازنده در سال 1974 به بازار عرضه گرديد.اولين پردازنده اي که باعث تحولات اساسي در دنياي کامپيوتر شد ، 8088 بود. ريزپردازنده فوق در سال 1979 توسط شرکت IBM طراحي و اولين نمونه آن در سال 1982 عرضه گرديد. وضعيت توليد ريزپردازنده توسط شرکت هاي توليد کننده بسرعت رشد و از مدل 8088 به 80286 ، 80386 ، 80486 ، پنتيوم ، پنتيوم II ، پنتيوم III و پنتيوم 4 رسيده است . تمام پردازنده هاي فوق توسط شرکت اينتل و ساير شرکت هاي ذيربط طراحي و عرضه شده است . پردازنده هاي پنتيوم 4 در مقايسه با پردازنده 8088 عمليات مربوطه را با سرعتي به ميزان 5000 بار سريعتر انجام مي دهد! جدول زير ويژگي هر يک از پردازنده هاي فوق بهمراه تفاوت هاي موجود را نشان مي دهد.
Name | Date | Transistors | Microns | Clock speed | Data width | MIPS |
8080 | 1974 | 6,000 | 6 | 2 MHz | 8 bits | 0.64 |
8088 | 1979 | 29,000 | 3 | 5 MHz | 16 bits 8-bit bus | 0.33 |
80286 | 1982 | 134,000 | 1.5 | 6 MHz | 16 bits | 1 |
80386 | 1985 | 275,000 | 1.5 | 16 MHz | 32 bits | 5 |
80486 | 1989 | 1,200,000 | 1 | 25 MHz | 32 bits | 20 |
Pentium | 1993 | 3,100,000 | 0.8 | 60 MHz | 32 bits 64-bit bus | 100 |
Pentium II | 1997 | 7,500,000 | 0.35 | 233 MHz | 32 bits 64-bit bus | ~300 |
Pentium III | 1999 | 9,500,000 | 0.25 | 450 MHz | 32 bits 64-bit bus | ~510 |
Pentium 4 | 2000 | 42,000,000 | 0.18 | 1.5 GHz | 32 bits 64-bit bus | ~1,700 |
توضيحات
• ستون Date نشاندهنده سال عرضه پردازنده است.
• ستون Transistors تعدا ترانزيستور موجود بر روي تراشه را مشخص مي کند. تعداد ترانزيستور بر روي تراشه در سال هاي اخير شتاب بيشتري پيدا کرده است .
• ستون Micron ضخامت کوچکترين رشته بر روي تراشه را بر حسب ميکرون مشخص مي کند. ( ضخامت موي انسان 100 ميکرون است ).
• ستون Clock Speed حداکثر سرعت Clock تراشه را مشخص مي نمايد.
• ستون Data Width پهناي باند واحد منطق و محاسبات (ALU) را نشان مي دهد. يک واحد منطق و حساب هشت بيتي قادر به انجام عمليات محاسباتي نظير: جمع ، تفريق ، ضرب و ... براي اعداد هشت بيتي است. در صورتيکه يک واحد منطق و حساب 32 بيتي قادر به انجام عمليات بر روي اعداد 32 بيتي است . يک واحد منطق و حساب 8 بيتي به منظور جمع دو عدد 32 بيتي مي بايست چهار دستورالعمل را انجام داده در صورتيکه يک واحد منطق وحساب 32 بيتي عمليات فوق را صرفا" با اجراي يک دستورالعمل انجام خواهد داد.در اغلب موارد گذرگاه خارجي داده ها مشابه ALU است . وضعيت فوق در تمام موارد صادق نخواهد بود مثلا" پردازنده 8088 داراي واحد منطق وحساب 16 بيتي بوده در حاليکه گذرگاه داده ئي آن هشت بيتي است . در اغلب پردازنده هاي پنتيوم جديد گذرگاه داده 64 بيتي و واحد منطق وحساب 32 بيتي است . ستون MIPS مخفف کلمات Millions of instruction per Second ( ميليون دستورالعمل در هر ثانيه ) بوده و واحدي براي سنجش کارآئي يک پردازنده است.
درون يک پردازنده
به منظورآشنائي با نحوه عملکرد پردازنده لازم است، نگاهي به درون يک ريزپردازنده داشته و با منطق نحوه انجام عمليات بيشتر آشنا شويم. يک ريزپردازنده مجموعه اي از دستورالعمل ها را اجراء مي کند. دستورالعمل هاي فوق ماهيت و نوع عمليات مورد نظر را براي پردازنده مشخص خواهند کرد. با توجه به نوع دستورالعمل ها ، يک ريزپردازنده سه عمليات اساسي را انجام خواهد داد :
• يک ريزپردازنده با استفاده از واحد منطق و حساب خود (ALU) قادر به انجام عمليات محاسباتي نظير: جمع ، تفريق، ضرب و تقسيم است. پردازنده هاي جديد داراي پردازنده هاي اختصاصي براي انجام عمليات مربوط به اعداد اعشاري مي باشند.
• يک ريزپردازنده قادر به انتقال داده از يک محل حافظه به محل ديگر است .
• يک ريزپردازنده قادر به اتخاذ تصميم ( تصميم گيري ) و پرش به يک محل ديگر براي اجراي دستورالعمل هاي مربوطه بر اساس تصميم اتخاذ شده است .
شکل زير يک پردازنده ساده را نشان مي دهد.

پردازنده فوق داراي :
• يک گذرگاه آدرس (Address Bus) است که قادر به ارسال يک آدرس به حافظه است ( گذرگاه فوق مي تواند 8 ، 16 و يا 32 بيتي باشد)
• يک گذرگاه داده (Data Bus) است که قادر به ارسال داده به حافظه و يا دريافت داده از حافظه است (گذرگاه فوق مي تواند 8 ، 16 و يا 32 بيتي باشد)
• يک خط براي خواندن (RD) و يک خط براي نوشتن (WR) است که آدرسي دهي حافظه را انجام مي دهند. آيا قصد نوشتن در يک آدرس خاص وجود داشته و يا مقصود، خواندن اطلاعات از يک آدرس خاص حافظه است؟
• يک خط Clock که ضربان پردازنده را تنظيم خواهد کرد.
• يک خط Reset که مقدار " شمارنده برنامه " را صفر نموده و يا باعث اجراي مجدد يک فرآيند مي گردد.
فرض کنيد پردازنده فوق هشت بيتي بوده واز عناصر زير تشکيل شده است:
• ريجسترهاي A,B,C نگاهدارنده هائي بوده که از فليپ فلاپ ها ساخته شده اند.
• Address Latch مشابه ريجسترهاي A,B,C است .
• شمارنده برنامه (Program Counter) نوع خاصي از يک نگهدارنده اطلاعات است که قابليت افزايش بميزان يک و يا پذيرش مقدار صفر را دارا است
• واحد منطق و حساب (ALU) مي تواند يک مدار ساده جمع کننده هشت بيتي بوده و يا مداري است که قابليت انجام عمليات جمع ، تفريق ، ضرب و تقسيم را دارا است . • ريجستر Test يک نوع خاص نگاهدارنده بوده که قادر به نگهداري نتايج حاصل از انجام مقايسه ها توسط ALU است .ALU قادر به مقايسه دو عدد وتشخيص مساوي و يا نامساوي بودن آنها است . ريجستر Test همچنين قادر به نگهداري يک Carry bit ( ماحصل آخرين مرحله عمليات جمع) است . ريجستر فوق مقادير مورد نظر را در فليپ فلاپ ها ذخيره و در ادامه Instruction Decoder "تشخيص دهنده دستورالعمل ها " با استفاده از مقادير فوق قادر به اتخاذ تصميمات لازم خواهد بود.
• همانگونه که در شکل فوق ، مشاهده مي گردد از شش " 3-State" استفاده شده که به آنها "tri-State buffers" مي گويند. بافرهاي فوق قادر به پاس دادن مقادير صفر و يا يک و يا قطع خروجي مربوطه مي باشند.. اين نوع بافرها امکان ارتباط چندين خروجي را از طريق يک Wire فراهم مي نمايند. در چنين حالتي فقط يکي از آنها قادر به انتقال ( حرکت ) صفر و يا يک بر روي خط خواهد بود.
ريجستر Instruction و Instruction Decoder مسئوليت کنترل ساير عناصر را برعهده خواهند داشت . بدين منظور از خطوط کنترلي متفاوتي استفاده مي گردد. خطوط فوق در شکل فوق نشان داده نشده اند ولي مي بايست قادر به انجام عمليات زير باشند:
• به ريجستر A اعلام نمايد که مقدار موجود بر روي گذرگاه داده را در خود نگاهدارد.(Latch)
• به ريجستر B اعلام نمايد که مقدار موجود بر روي گذرگاه داده را در خود نگاهدارد.(Latch)
• به ريجستر C اعلام نمايد که مقدار موجود بر روي گذرگاه داده را در خود نگاهدارد.(Latch)
• به " شمارنده برنامه " اعلام نمايد که مقدار موجود بر روي گذرگاه داده را در خود نگاهدارد.(Latch)
• به ريجستر Address اعلام نمايد که مقدار موجود بر روي گذرگاه داده را در خود نگاهدارد.(Latch)
• به ريجستر Instruction اعلام نمايد که مقدار موجود بر روي گذرگاه داده را در خود نگاهدارد.(Latch)
• به " شمارنده برنامه " اعلام نمايد که مقدار خود را افزايش دهد.
• به " شمارنده برنامه " اعلام نمايد که مقدار خود را صفر (Reset) نمايد.
• به واحد منطق و حساب نوع عملياتي را که مي بايست انجام گيرد، اعلام نمايد.
• به ريجستر Test اعلام نمايد که بيت هاي ماحصل عمليات ALU را در خود نگاهدارد.
• فعال نمودن خط RD ( خواندن )
• فعال نمودن خط WR ( نوشتن )
حافظه هاي RAM و ROM
در بخش قبل گذرگاه هاي آدرس و داده نظيرخطوط RD,WR بررسي گرديدند. گذرگاه هاي فوق به حافظه هاي RAM ،ROM و يا هر دو متصل خواهند بود. در ريزپردازنده ساده فرضي فوق، از گذرگاه هاي آدرس و داده هشت بيتي استفاده مي گردد. بدين ترتيب پردازنده قادر به آدرس دهي 256 بايت حافظه و خواندن و يا نوشتن هشت بيت از حافظه در هر لحظه خواهد بود. فرض کنيد پردازنده فوق داراي 128 بايت حافظه ROM بوده که از آدرس صفر شروع شده و 128 بايت حافظه RAM که از آدرس 128 آغاز مي گردد ، است . حافظه ROM تراشه اي است که اطلاعاتي را از قبل و بصورت دائم در خود نگهداري مي نمايد. گذرگاه هاي آدرس به تراشه ROM اعلام خواهند کرد که کدام بايت را خواسته و آن را بر روي گذرگاه قرار خواهد داد. زمانيکه وضعيت خط RD تغيير نمايد تراشه ROM بايت مورد نظر و انتخابي را بر روي گذرگاه داده قرار خواهد داد. RAM شامل بايت هائي از اطلاعات است . ريزپردازنده قادر به خواندن و نوشتن در حافظه فوق بر اساس سيگنال هاي دريافتي از خطوط RD و RW است . در رابطه با حافظه RAM مي بايست به اين نکته نيز اشاره گردد که اين نوع از حافظه ها با از دست منبع انرژي ( برق ) اطلاعات خود را از دست خواهند داد.
تمامي کامپيوترها داراي حافظه ROM به ميزان مشخص مي باشند. ( برخي از کامپيوترها ممکن است داراي حافظه RAM نبوده نظير ميکرو کنترل ها ، ولي وجود و ضرورت حافظه ROM را در هيچ کامپيوتري نمي توان انکار نمود).بر روي کامپيوترهاي شخصي حافظه ROM را BIOS نيز مي نامند. زمانيکه ريزپردازنده فعاليت خود را آغاز مي نمايد ، در ابتدا دستورالعمل هائي را اجراء خواهد کرد که در BIOS مي باشند. دستورالعمل هاي موجود در BIOS عملياني نظير تست سخت افزار و سيستم را انجام و در ادامه فرآيندي آغاز خواهد شد که نتيجه آن استقرار سيستم عامل در حافظه خواهد بود. (Booting) . در آغاز فرآيند فوق ، بوت سکتور هارد ديسک ( مي تواند آغاز عمليات فوق از هارد شروع نشده و از فلاپي ديسک انجام گردد ، اتخاذ تصميم در رابطه با وضعيت فوق بر اساس پارامترهاي ذخيره شده در حافظه CMOS خواهند بود ) را بررسي خواهد کرد . بوت سکتور فوق حاوي برنامه اي کوچک است که در ادامه BIOS آن را خوانده و در حافظه RAM مستقر خواهد کرد. ريزپردازنده در ادامه دستورالعمل هاي مربوط به برنامه بوت سکتور را که در حافظه RAM مستقر شده اند ،اجراء خواهد کرد. برنامه فوق به ريزپردازنده اعلام خواهد کرد که اطلاعات ديگري را از هارد ديسک به درون حافظه RAM انتقال و آنها را اجراء نمايد. با ادامه وتکميل فرآيند فوق سيستم عامل در حافظه مستقر ومديريت خود را آغاز مي نمايد.
دستورالعمل هاي ريزپردازنده
هر ريزپردازنده داراي مجمو عه اي از دستورالعمل ها بوده که داراي کارآئي خاصي مي باشند. اين دستورالعمل ها بصورت الگوئي از صفر و يا يک پياده سازي مي گردنند. استفاده از دستورات فوق با توجه به ماهيت الگوئي آنها براي انسان مشکل و بخاطر سپردن آنها امري است مشکل تر! ، بدين دليل از مجموعه اي " کلمات " برا ي مشخص نمودن الگوهاي فوق استفاده مي گردد. مجموعه " کلمات " فوق " زبان اسمبلي " ناميده مي شوند. يک " اسمبلر" قادر به ترجمه کلمات به الگوهاي بيتي متناظر است .پس از ترجمه ، ماحصل عمليات که همان استخراج " الگوهاي بيتي " است، در حافظه مستقر تا زمينه اجراي آنها توسط ريزپردازنده فراهم گردد جدول زير برخي از دستورالعمل هاي مورد نياز در رابطه با پردازنده فرضي را نشانن مي دهد.
Instruction | Meaning |
LOADA mem | لود نمودن ريجستر Aاز آدرس حافظه |
LOADB mem | لود نمودن ريجستر Bاز آدرس حافظه |
CONB con | لود نمودن يک مقدار ثابت در ريجستر B |
SAVEB mem | ذخيره نمودن مقدار موجود در ريجستر Bدر يک آدرس حافظه |
SAVEC mem | ذخيره نمودن مقدار موجود در ريجستر Cدر يک آدرس حافظه |
ADD | جمع Aو Bو ذخيره کردن حاصل در C |
SUB | تفريق Aو Bو ذخيره کردن حاصل در C |
MUL | ضرب Aو Bو ذخيره کردن حاصل در C |
DIV | تقسيم Aو Bو ذخيره کردن حاصل در C |
COM | مقا يسه Aو Bو ذخيره کردن حاصل در Test |
JUMP addr | پرش به يک آدرس مشخص |
JEQ addr | پرش شرطي ( اگر مساوي است ) به يک آدرس مشخص |
JNEQ addr | پرش شرطي ( اگر نا مساوي است ) به يک آدرس مشخص |
JG addr | پرش شرطي ( اگر بزرگتر است ) به يک آدرس مشخص |
JGE addr | پرش شرطي ( اگر بزرگتر و يا مساوي است ) به يک آدرس مشخص |
JL addr | پرش شرطي ( اگر کوچکتر است ) به يک آدرس مشخص |
JLE addr | پرش شرطي ( اگر کوچکتر و يا مساوي است ) به يک آدرس مشخص |
STOP | توقف اجراء |
مثال : فرض کنيد برنامه محاسبه فاکتوريل عدد پنج (5!=5*4*3*2*1 ) با يکي از زبانهاي سطح بالا نظير C نوشته گردد . کمپايلر ( مترجم ) زبان C برنامه مورد نظر را به زبان اسمبلي ترجمه خواهد کرد. ( فرض کنيد که آدرس شروع RAM در پردازنده فرضي 128 و آدرس شروع حافظه ROM صفر باشد.) جدول زير برنامه نوشته شده به زبان C را بهمراه کد ترجمه شده اسمبلي معادل آن، نشان مي دهد.
C Program | Assembly Language |
a=1; f=1; while (a <= 5) { f = f * a; a = a + 1; } | // Assume a is at address 128 // Assume F is at address 129 0 CONB 1 // a=1; 1 SAVEB 128 2 CONB 1 // f=1; 3 SAVEB 129 4 LOADA 128 // if a > 5 the jump to 17 5 CONB 5 6 COM 7 JG 17 8 LOADA 129 // f=f*a; 9 LOADB 128 10 MUL 11 SAVEC 129 12 LOADA 128 // a=a+1; 13 CONB 1 14 ADD 15 SAVEC 128 16 JUMP 4 // loop back to if 17 STOP |
در ادامه مي بايست کدهاي ترجمه شده به زبان اسمبلي به زبان ماشين ( الگوهاي بيتي ) ترجمه گردند. بدين منظور لازم است که هر يک از دستورات اسمبلي داراي کد معادل (OpCode) باشند. فرض کنيد دستورات اسمبلي در پردازنده فرضي داراي Opcode ( کدهاي عملياتي) زير باشند.
Assembly Instruction | Opcode |
LOADA mem | 1 |
LOADB mem | 2 |
CONB con | 3 |
SAVEB mem | 4 |
SAVEC mem | 5 |
ADD | 6 |
SUB | 7 |
MUL | 8 |
DIV | 9 |
COM | 10 |
JUMP addr | 11 |
JEQ addr | 12 |
JNEQ addr | 13 |
JG addr | 14 |
JGE addr | 15 |
JL addr | 16 |
JLE addr | 17 |
STOP | 18 |
در نهايت برنامه ترجمه شده به زبان اسمبلي به زبان ماشين ( الگوهاي بيتي ) ترجمه خواهد شد.
Assembly Language | Bit Patterns |
// Assume a is at address 128 // Assume F is at address 129 0 CONB 1 // a=1; 1 SAVEB 128 2 CONB 1 // f=1; 3 SAVEB 129 4 LOADA 128 // if a > 5 the jump to 17 5 CONB 5 6 COM 7 JG 17 8 LOADA 129 // f=f*a; 9 LOADB 128 10 MUL 11 SAVEC 129 12 LOADA 128 // a=a+1; 13 CONB 1 14 ADD 15 SAVEC 128 16 JUMP 4 // loop back to if 17 STOP | // Assume a is at address 128 // Assume F is at address 129 Addr opcode/value 0 3 // CONB 1 1 1 2 4 // SAVEB 128 3 128 4 3 // CONB 1 5 1 6 4 // SAVEB 129 7 129 8 1 // LOADA 128 9 128 10 3 // CONB 5 11 5 12 10 // COM 13 14 // JG 17 14 31 15 1 // LOADA 129 16 129 17 2 // LOADB 128 18 128 19 8 // MUL 20 5 // SAVEC 129 21 129 22 1 // LOADA 128 23 128 24 3 // CONB 1 25 1 26 6 // ADD 27 5 // SAVEC 128 28 128 29 11 // JUMP 4 30 8 31 18 // STOP |
همانگونه که مشاهده مي نمائيد برنامه نوشته شده به زبان C به 17 دستورالعمل معادل اسمبلي و 31 دستورالعمل زبان ماشين تبديل گرديد.
Instruction Decoder ( تشخيص دهنده نوع دستورالعمل ها ) با انجام عملياتي خاص، نوع دستورالعمل را تشخيص خواهد داد. فرض کنيد دستور العمل ADD را داشته باشيم و بخواهيم نحوه تشخيص دستورالعمل را دنبال نمائيم :
• در زمان اولين Clock ، دستورالعمل Load مي گردد. ( فعال کردن بافر tri-state براي " شمارنده برنامه " ، فعال شدن خط RD ، فعال کردن Data-in در بافر tri-state )
• در زمان دومين Clock ، دستورالعمل ADD تشخيص داده خواهد شد.( تنظيم عمليات جمع براي ALU ، ذخيره نمودن ماحصل عمليات ALU در ريجستر C )
• در زمان سومين Clock، " شمارنده برنامه " افزايش خواهد يافت ( در تئوري اين مرحله مي تواند در زمان دومين Clock نيز صورت پذيرد)
همانگونه که ملاحظه گرديد ، هر دستورالعمل اسمبلي داراي چندين Clock Cycle است . برخي از دستورات نظير ADD داراي دو و يا سه Clock و برخي ديگر از دستورات داراي پنج ويا شش Clock خواهند بود.