کامپيوتری که هم اکنون بکمک آن در حال مشاهده و مطالعه اين صفحه
هستيد ،
دارای يک ريزپردازنده است . ريزپردازنده بمنزله مغز در کامپيوتر
است. تمام کامپيوترها اعم از کامپيوترهای شخصی ، کامپيوترهای دستی
و ... دارای ريزپردازنده می باشند. نوع ريزپردازنده استفاده شده
در يک کامپيوتر می تواند متفاوت باشد ولی تمام آنها عمليات يکسانی
را انجام خواهند داد.
تاريخچه
ريزپردازنده ها
ريزپردازنده که
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 (
ميليون دستورالعمل در هر ثانيه ) بوده و واحدی برای سنجش کارآئی يک
پردازنده است.
درون يک پردازنده
بمنظورآشنائی با نحوه
عملکرد پردازنده لازم است،
نگاهی به درون يک ريزپردازنده داشته و با منطق نحوه انجام عمليات
بيشتر آشنا شويم. يک ريزپردازنده مجموعه ای از دستورالعمل ها را
اجراء می کند. دستورالعمل های فوق ماهيت و نوع عمليات مورد نظر را
برای پردازنده مشخص خواهند کرد. با توجه به نوع دستورالعمل ها
،
يک ريزپردازنده سه عمليات
اساسی را انجام خواهد داد :
1 - يک ريزپردازنده با
استفاده از واحد منطق و حساب خود (ALU)
قادر به انجام عمليات محاسباتی نظير: جمع
،
تفريق،
ضرب و تقسيم است. پردازنده های جديد دارای پردازنده های اختصاصی
برای انجام عمليات مربوط به اعداد اعشاری می باشند.
2 - يک ريزپردازنده قادر به
انتقال داده از يک محل حافظه به محل ديگر است .
3 - يک ريزپردازنده قادر به
اتخاذ تصميم ( تصميم گيری ) و پرش به يک محل ديگر برای اجرای
دستورالعمل های مربوطه بر اساس تصميم اتخاذ شده است .
شکل زير يک پردازنده ساده
را نشان می دهد.
پردازنده
فوق دارای :
● يک گذرگاه آدرس
(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 |
|
همانگونه که مشاهده می
نمائيد برنامه نوشته شده به زبان
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 خواهند
بود. |