بخشی از مقاله

1- مقدمه اي بر ريزپرازنده
2- ساختار عمومي ريزپردازنده هاي پيشرفته
3- معماري ريزپردازنده؟
- مجموعه دستورالعمل هاي ريزپردازنده
- قالب داده ها
- قالب براي دستورالعمل ها
- شيوه هاي آدرس دهي
4- سلسله مراتب حافظه
- رجيستر فايل
- Cache
- حافظه مجازي و صفحه بندي
- قطعه بندي
- جداول صفحه، TBL،‌ حفاظت
5- پايپ لاين
- خط لوله دستورالعمل
- مخابرات خط لوله
- پيشگويي انشعاب
- Bypassing يا Result Forwarding
6- (Instruction Level Parallelism) IPL
- ILP چيست؟
- محدودتي هاي ILP
- پردازنده هاي سوپر اسكالر
- اجراي ترتيبي و خارج از نوبت
- Register renaming
- پردازنده هاي VLIW

 

- تكنيك هاي كامپايل براي ILP
7- اصول كامپيوترهاي RISC
- RISC در برابر CISC
- ارزيابي سيستم هاي RISK
- ارزيابي Cache در مقابل رجيستر فايل تراشه
8- I/O
- گذرگاه هاي I/O
- وقفه ها
- Memory Marred I/O
- DMA

- دستگاه هاي I/O
- سيستم هاي ديسك
9- چند پردازنده اي
- speedup و كارآيي
- سيستم هاي چند پردازنده اي
- سيستم هاي Message passing
- سيستم هاي Shared Memory
Case Study

حانواده اينتل
- معماري خانواده اينتل
- مجموعه ثبات:
- قالب هاي داده
- شيوه هاي آدرس دهي
- ئقفه
- قطعه بندي
- صفحه بندي
- مكانيزم حفاظت
- پنتيوم

- ريزپردازنده هاي i486 و i386
- 8086 و 80186 و 80286
- 8086 و 8088
خانواده موتورولا M68000
- ثبات هاي پردازنده
- قالب هاي داده
- شيوه هاي آدرس دهي
- مجموعه دستورالعمل ها

- مديريت حافظه
ريزپردازنده هاي پيشرفته RISC
- پردازنده DEC Alpha AXP
- معماري آلفا
خانواده Power PC
- معماري Power PC
- IBM RS/6000
خانواده Sparc

- معماري اسپارك
- سوپر اسپارك
خانواده MIPS RX000
- معماري MIPS
- R4400 و MIPS R4000
- خانواده اينتل i86
خانواده موتورولا M88000
- معماري M88000

- معماري MC88110
معماري HP
- معماري
- حافظه

كتاب؟
1- MicroproGssors & Micro Computers
8086 & Z-80 , John Effenbeck
2- Advanced Computer Architecture , Hwang
3- Advanced Mocrocessor , Daniel Tabak.

مقدمه
در اواسط دهه 70 ريزپردازنده ها ساختار ساده اي داشتند و در اين زمان هر ريزپردازنده از يك واحد پردازشگر مركزي (cpu) و يك تراشه LSI (شامل 5/000 ترازيستور) تشكيل شده بود و با فركانس 1 تا 5 مگاهرتز در يك سيستم 8 بيتي كار مي كرد و اين ريزپردازنده ها داراي 2 الي 7 ثبات 8 بيتي بودند. به خاطر قيمت و بهاي اندك و اندازه كوچك ريزپردازنده ها، در بيشتر سيستم هاي كامپيوتري از آنها استفاده مي شد و به جائي رسيد كه جايگزين سيستم هاي mainframe و ميكروكامپيوترها شدند. با ظهور ريزپردازنده ها هر خانه اي داراي يك كامپيوتر ديجيتالي است.

از دهه 70 به بعد ريزپردازنده ها تغييرات زيادي كرده اند و در دهه 90 ريزپردازنده ها 32 بيتي تا 64 بيتي شدند. و با فركانس هايي از 25 تا 200MHZ كار مي كردند و عملاً داراي تراشه هايي با سه ميليون ترازيستور بودند (VISI). اكثر اين ريزپردازنده ها قادر بودند بيشتر از يك دستورالعمل را در يك چرخه اجرا كنند. تمامي ريزپردازنده‌هاي پيشرفته داراي يك تراشه FPU هستند و اكثر آن ها داراي 16تا 32 ثبات همه منظوره در cpu و يك رجيستر فايل با 32 ثبات براي IU و يك رجيستر فايل با 32 ثبات جداگانه براي FPU هستند.

خيلي از ريزپردازنده ها براي عمليات شناور و عمليات صحيح داراي Operational Unit هستند و مقدار قابل توجهي Cache دارند. در اكثر آنها Cache شامل Cache داده و Cache دستورالعمل است . كارآيي ريزپردازنده هاي پيشرفته امروز مساوي يا بيشتر از Mainframe و يا سوپر كامپيوترهاي دوران قبل مي باشد.
تعداد زيادي كارخانه سازنده ريزپردازنده وجود دارد كه داراي ويژگي هاي خاص خود مي باشند و دو گروه از گسترده ترين خانواده ريزپردازنده كه در دهه 70 ساخته شده اند عبارتند از اينتل X86 يا 80X86 و خانواده موتورولا M680X0.

نزديك به دهه 80 ما شاهد يك توسعه موازي روي معماري هاي جديد بوده ايم كه تمايل به كامپيوترهائي با مجموعه دستورالعمل كاهش يافته يا RISC بوده اند. خانواده هاي اينتل X86 و موتورولا M68000 از كلاس غيرRISK يعني كامپيوترهايي با مجموعه دستورهاي پيچيده يا CISC تشكيل شده اند.

اينتل، يك ريزپردازنده 4 بيتي به نام 4004 در سال 1971 شروع كرد كه در يك ماشين حساب معمولي بكار ميرفت، و به آساني محاسبات BCD را انجام ميداد. در سال 1972 ريزپردازنده 8 بيتي 8008 توسعه يافت و در سال 1974 يك ريزپردازنده قدرتمند 8 بيتي به نام 8080 تولد يافت و به

دنبال آن 8085 در سال 1976 به بازار آمد. بخشي از معماري 8085/8080 همانند مجموعه ثبات ها در خانواده X86 همچنان استفاده مي شود. اينتل ساخت ريزپردازنده هاي خانواده X86 را با يك ريزپردازنده 16 بيتي به نام 8086 در 1978 آغاز كرد و عملاً تمامي كارخانه هاي معروف ريزپردازنده هاي 16 بيتي بعد از دهه 70 و تا نزديك دهه 80 از يك تراشه ارزان قيمت و يك گذرگاه خارجي 8 بيتي با يك معماري داخلي 16 بيتي استفاده مي كردند.
در سال 1969 ريزپردازنده 8080 با باس خارجي 8 بيتي و گذرگاه داخلي 16 بيتي ايجاد شد و براي گذرگاه داده خود 50% به تراشه هاي مياني كمتري در مقايسه با پردازنده هاي 16 بيتي نياز

داشتند و هزينه آن ها نيز كمتر بود.
در واقع 8080 به پردازنده اصلي شركت IBM روي كامپيوتر هاي شخصي (PC) تبديل و در تمامي توليدات بعدي در جهان منتشر گرديد. به دنبال 8086، تكامل يافته آن يعني 80186 ساخته شد كه همان 8086 همراه با تعدادي اينترفيس I/O و واحدهاي منطقي وي يك تراشه بود و تعداد كمي دستورالعمل به آن اضافه شده بود.
وقتي 80286 به عنوان يك ريزپردازنده 16 بيتي در سال 1982 شناخته شد، مرحله جديدي در توسعه ريزپردازنده ها پديد آمد كه قابليت Protected mode ناميده شد. اين شويه در تمامي

محصو.لات ديگر خانواده اينتل بكار گرفته شد.
اولين پردازنده 32 بيتي اينتل در سال 1985 بود كه i386 نام داشا. اينتل يك پردازنده 32 بيتي به نام 432 كه با خانواده X86 ناسازگار بود را زودتر از دهه 80 بيرون داده بود كه هرگز تجاري نشد. در سال 1989 ريزپردازنده i486 توسعه يافت كه سرعت عملكرد آن در مدل DX2 به 66MHZ ميرسيد. i486 داراي يك واحد FPU و يك Cache به اندازه 8KB در داخل تراشه است.
محصول بعدي خانواده اينتل پنتيوم بود كه در سال 1993 ساخته شد و قبل از گسترش به آن i586، P5 گفته مي شد اما اينتل تصميم گرفت نام آن را ذپنتيوم بگذارد. پنتيوم يك سوپر اسكالر دو سطحي است يعني دو دستورالعمل را موازي واكشي و كدگشايي و اجرا مي كند و داراي گذرگاه داخلي 64 بيتي و يك cache به اندازه 16KB است (8K data cache + 8K inst.cache)

اينتل مرتباً روي محصولات بعدي كار مي كرد و P6 ناميده شد كه طبق وعده آن كارآيي پنتيوم را حد اقل 2 برابر كرد و پس از آن به ترتيب Pentium II، Pentium III و Pentium IV نيز ساخته شدند.
توسعه ريزپردازنده هاي موتورولا نيز شبيه اينتل است. موتورولا در سال 1974 خانواده 8 بيتي 6800 را ايجاد كرد كه در سال 1977 به يك محصول 8 بيتي ويژه به نام 68096809 تبديل شد. موتورولا ذنخستين ريزپردزنده 16 بيتي خود را در سال 1979 به نام M68000 به بازار عرضه كرد. از ويژگي هاي اسم خانواده M68000 آن است كه ريزپردازنده MC68000 به طور پايه اي يك سيستم 16

بيتي با گذرگاه دارد. 16 بيتي و 16 ثبات پردازنده Gaps و شمارنده برنامه 32 بيتي است. در سال 1984 ريزپردازنده 32 بيتي MC60000 ناميده شد. هم چنين موتورولا روايت هاي توسعه يافته محصولات MC68000 را تحت عنوان MC68010 .و MC68012 ايجاد كرد. MC68010 از نظر پايه ها كاملاً با MC68000 سازگار بود بنابراين از نظر طراحي سيستم، يك MC68000 مي توانست با يك MC68010 جايگزين شود.

موتورولا ساخت ريزپردازنده هاي 32 بيتي خانواده M68000 را در سال 1984 با نام MC68020 شروع كرد. اين ريزپردازنده ها در سال 1978 به ريزپردازنده MC68030 و در سال 1989 به MC68040 توسعه پيدا كردند. 68020 داراي يك Cache دستور كوچك 256 بايتي در داخل تراشه بود. 68030 داراي يك حافظه Cache دستور كوچك 256 بايتي در داخل تراشه بود. 68030 داراي يك حافظه Cache دوگانه نسبتاً كوچك (256 data + 256 B inst.) .و 68040 داراي Cache 4KB دستور و Cache 4KB داده در يك تراشه مي باشد.

عضو بعدي خانواده M68000 كه در سال 1994 ساخته شد MC68060 نام گرفت كه يك سوپر اسكالر 2 سطحي با Cache 8KB دستور و Cache داده در تراشه بود و دستورالعمل ها با سرعت 66MHZ كار مي كرد.
البته چندين خانواده از ريزپردازنده ها وجود دارد كه به آن ها اشاره اندكي خواهد شد. مانند Z-80 مربوط به شركت Zilog كه ريزپردازنده معر وف 8 بيتي است و توسط گروهي از طراحان متخصص اينتل كه 8080 و 8085 را شاخته بودند ايجاد شد و از اينرو Z-80 شبيه معماري اينتل 8080 است ولي زبان اسمبلي هر دو متفاوت مي باشد و Z-80 داراي دستورهاي بيشتري نسبت به 8080 است. شركت Zilog خانواده 16 بيتي خود را با نام Z8000 موازي با اينتل 8086 منتشر كرد و Z80000 يك محصول 32 بود كه به توليد نرسيد.

توسعه ريزپردازنده هاي RISC به شكل مو ازي با اينتل و موتورولا انجام شد. اولين مستندات RISK درز دانشگاه بركلي در سال 1980 توسط Pattersonو Ditzel ارايه شد و لغت RISK توسط كارلو اسكوئين لرپرت اولين مقاله RISK عنوان شد. طراحيس سيستم محاسباتي از نوع RISK بدون استفاده از واژه RISK خيلي پيشتر توسط IBM در دهه 70 آغاز شد كه با نام IBM801 شناخته مي شد. هم چنين دانشگاه استنفورد در سال 1981 سيستم RISK خود را ايجاد كرد و به نام MIPS (Microprocessor without interlocked Pipeline Stage) ناميد.

شركت MIPS روايت هاي تجاري را تحت خانواده RX000 (X=6,4,3,2,) منتشر ساخته است. در برخي از خصوصيات اوليه طرح RISK بركلي در Sparc از شركت Sun Micri System به كار رفته است. شركت اينتل خانواده خود را با نام ROMP (Research Office Product Diriscow MicroGssor) ادامه داد و به اپل تركيب شد و Power PC ساخته گرديد. اولين محصول 601 است كه در 1991 منتشر شد و به دنبال آن 620 با توانائيهاي بيشتري ايجاد گرديد.
Intel 8086

در اين فصل معماري داخلي، شيوه هاي آدرس دهي، مجموعه دستورالعمل ها و تكنيك هاي I/O مرتبط با ريزپردازنده 8086 را معرفي خواهيم كرد.

مقدمه
8086 اولين ريزپردازنده 16 بيتي اينتل بود. طراحي آن بر اساس 8080 ولي مستقيماً با آن سازگار نبود. 8086 با استفاده از فناوري HMOS طراحي شده بود و شامل 29000 ترانزيستور بود. 8086 در يك بسته 40 پايه اي قرار داشت و با منبع تغذيه +5V كار مي كرد. 8086 در سه مد و سرعت مختلف Clock كار مي كند. 8086 استاندارد با فركانس كلاك داخلي 5MHZ و 8086-2 و 8086-4 با فركانس هاي داخلي به ترتيب 4MHZ , 8 كار مي كنند. به همين دليل از يك مولد / دراپو.ر تراشه مثل Intel 8284 براي توليد سيگنال كلاك 8086 استفاده مي شود. 8086 كلاك خارجي در پايه CLK را به 3 تقسيم مي كند. اين جمله به اين معني است كه براي كلاك داخلي 5MHZ، 8284 بايد كلاك خروجي 15MHZ را توليد كند تا به پايه CLK تراشه 8086 متصل شود.

8086 داراي آدرس 20 بيتي است و از اينرو مي توان حداكثر تا 220 dh 1MB از حافظهرا آدرس دهي كند. 8086 از حافظه قطعه بندي شده استفاده مي كند. نكته جال توجه در 8086 اين است كه مي تواند حداكثر تا 6 بايت دستورالعمل را از حافظه پشي واكشي (Pre Fetch) كند و آن ها را به ترتيب به صف كند و بدين ترتيب سرعت اجراي دستورالعمل را بهبود بخشد.
حافظه ريزپردازنده دبر اساس 8086 برحسب بايت پيكره بندي مي شود. هر بايت مي تواند منحصراً با آدرس هاي 20 بيتي 0000016->FFFFF16 آدرس دهي شود. هر كلمه 16 بيتي 8086 شامل هر دو بايت مجاور يكديگر است. بايت آدرس كمتر (L.O.B) و بايت آدرس بيشتر (H.O,B) به شكل زير مي باشند:
بايت با ارزش كمتر بايت با ارزش بيشتر
07H 26H
آدرس 0052016 آدرس 0052116
بنابراين كلمه 16 بيتي ذخيره شده در آدرس زوج 00520عبارت است از: 260716
اكنون كلمه اي را با آدرس فرد در نظر بگيريد:
L.O.B H.O.B
OSH 3FH
آدرس 0125716 آدرس 0125816
كلمه ذخيره شده در آدرس فرد 0125716 عباتست از 3FOSH
معماري 8086
شكل زير نمودار بلكوكي معماري داخلي 8086 را نشان مي دهد:

همانظوري كه در شكل مي بينيم، ريزپردازنده 8086 از نظر داخلي به دو بخش تابعي جدا تقسيم مي شود. اين دو بخش واحد واسط گذرگاه (BIU) و واحد اجرا (Eu) مي باشند. واحد BIU دستورها را واكشي مي كند، داده ها را از حافظه و پورت ها ميخواند و داده ها را به حافظه و پورت هاي I/O مي نويسد. Eu دستورهايي را كه اخيراً توسط BIU واكشي شده اند را اجرا مي كند.

وظايف واحدهاي BIU و Eu از يكديگر مستقل هستند. BIU پردازنده 8086 را به دنياي بيرون مرتبط مي سازد. BIU تمامي عمليات گذرگاه خارجي را آماده مي سازد. BIU شامل ثبات هاي سگمنت، اشاره گر به دستور (IP)، صف دستورالعمل و مدارهاي كنترل گذرگاه و توليد آدرس مي باشد و اعمالي چون واكشي و صف بندي دستورها و كنترل گذرگاه را انجام ميدهد.
جهت دستور BIU به شكل FIFO است و گروهي از ثبات هايي است كه شامل 6 بيات كد دستور واكشي شده از جافظه هستند. اين امر با توجه به تسريع (Speedup)، اجراي برنامه را با

همپوشاني (Over latting) واكشي دستور با اجرا انجام ميدهد. اين مكاميزم را به عنوان پايپ اوين مي شناسيم. چنانچه صف پر باشد و Eu براي دستيابي بحافظه درخواستي به BIU ندهد، BIU هيچ سيكل گذرگاهي را انجام نمي دهد. از طرف ديگر، اگر BIU پر نباشد و حداقل بتواند دو بايت را ذخيره سازد و Eu درخواستي را براي دستيابي بحافظه ندهد، BIU مي تواند دستورالعمل ها را پيش واكشي كند. هرچند كه اگر BIU براي دستيابي بحافظهع توسط Eu وقفه داده شود درحاليكه BIU در حال پردازش واكشي يك دستورالعمل باشد، BIU ابتدا واكشي را كامل مي كند و سپس

به Eu سرويس مي دهد. چنانچه دستوري مانند Jump يا Subroutine Call داشته باشيم، BIU صف را reset ميكند و پر كردن مجدد را پس از ارسال دستور جديد به Eu از نو شروع خواهد كرد.
همانطوري كه مي بينيم BIU شامل يك جمع كننده اختصاصي است كه براي توليد آدرس 20 بيتي استفاده مي شود. منطق كنترل گذرگاه BIU تمامي سيگنال هاي كنترل گذرگاه همچون سيگنال هاي خواندن و نوشتن را براي حافظه و I/O توليد مي كند.

BIU داراي چهار ثبات سگمنت 16 بيتي است. اين ثبات عبارتند از:
• ثبات سگمنت كد (CS) (2 بايت) 28=256
• ثبات سگمنت داده (DS)
• ثبات سگمنت پشته (SS)
• ثبات فوق العاده (ES)

حافظه يك مابايتي 8086 به سگمنتهايي حداكثر تا 64KB تقسيم يمشود. 8086 مي تواند مستقيماً چهار سگمنمت را در يك زمان ويژه (256 كيلوبايت در حافظه يك مگابايتي) آدرس دهي كند. برنامه ها دستيابي به كد و داده را در سگمنت ها با تغيير محتويات ثبات سگمنت براي اشاره كرن به سگمنت هاي مطلوب، فراهم مي سازد. تمامي دستورالعمل هاي جافظه بايد در حافظه اصلي ذخيره شوند كه توسط ثبات 16 بيتي CS و افت 16 بيتي در سگمنتي كه در اشاره گر دستور (IP) 16 بيتي گنجانده شده به آن ااشره مي شود. BIU آدرس فيزيكي 20 بيتي داخلي را به

وسيله آدرس منطقي فراهم شده توسط برنامه نويس (16 بيت CS و 16 بيت IP) توليد مي شود. اين كار با شيفت منطقي چهار بيتي CS به چپ و افزودن محتواي 16 بيتي IP توليد مي شود. به عبارت ديگر CS توسط BIU براي توليد آدرس فيزيكي 20 بيتي در 16 ضرب مي شود. به اين معني كه تمامي دستورالعمل هاي برنامه نسبت به محتوبات CS در 16 ضرب شده و سپس به آفت به دست آمده از 16 IP بيتي اضافه ميشود.

دقت كميد كه براي آدرس هاي كلمه، برنامه نويس از آدرس هاي مرتبه كمتر (زوج يا فرد) براي مشخص ساختن كلمهع 16 بيتي استفاده مي كند.
8086 هميشه به يك كلمه 16 بيتي به . از حافظه دستيابي پيدا مي كند. 8086 مي تواند در صورتيكه اولين بايت كلمه در آدرس زوج واقع شده باشد، در يك عمليات كلمه 16 بيتي را بخواند. به عبارت ديگر اگر اولين بايت كلكه يك آدرس فرد باشد، 8086 بايد دو دستيابي به حافظه را براي خواندن دو تا بيت متوالي از حافظه انجام دهد. در اين حالت 8086 از بايت يا بايت هايي كه مورد

نظرش نيست صرفنظر مي كند. بطور مثال، دستو.ر ADDR و MOV BX را در نظر بگيريد. دقت كنيد وجود X (H يا L) به دنبال ثبات 8086 نشان دهندة آن است كه انتقال 16 بيتي يا 8 بيتي است.
اين دسته محتواي مكان حافظه 20 بيتي آدرس دهي شده فيزيكي را كه توسط ADDR آدرس دهي مي شود به ثبات 16 بيتي BX منتقل مي كند. اگر ADDR آدرس 20 بيتي زوج مثل 3002416 باشد دستور MOV محتواي BL را با محتواي خانه حافظه 3002416 و محتوي ثبات BH را با محتوي

آدرس 3002516 در يك بار دستيابي پر مي كند. اما اگر از ADDR در آدرس فرد مثلاً 4000516 باشد، دستور فوق BL را با محتواي 4000516 در و BH را با محتوي 4000616 در دو بار دستيابي حافظه Load مي كند. دقت كنيد 8086 به آدرس 4000416 و 4000516 دستيابي مي كند ولي محتوي 4000416 را كنار مي گذارد و نيز در عمل دوم به 4000416 و 4000716 دستيابي مي كند ولي محتوي 4000416 را كنار مي گذارد و نيز در عمل دوم به 4000616 و 4000716 دستيابي مي كند ولي از محتواي 4000716 چشم پوشي مي كند.

اكنون دستوري مانند ADDR و MOV BH را در نظر بگيريد. اگر ادرس ADDR زوج (مثل50002) باشد، اين دستور MOV به هر دو خانه 50002 و 50003 دستيابي مي كند ولي BH را با محتواي 50002 پر كرده و از محتوي 50003 صرفنظر مي كند. اما اگر ADDR در آدرس فرد باشد (مثل 5003) دستور MOV ثبات BH را با 50003 پر كرده و از 50002 صرفنظر مي كند.
خانواده 8086 داراي دو نوع ريزپردازنده 16 بيتي است: 8086 و 8088. اختلاف مهم اين است كه پردازنده چگونه با دنياي بيرون ارتباط برقرار مي كند. 8088 داراي يك مسير داده (data patch) 8 بيتي به حافظه I/O است ولي 8086 داراي يك مسير داده خارجي 16 بيتي در حافظه است. البته در بيشتر حالات اين دو پردازنده مشابه هستند. از 8088 در طراحي كامپيوترهاي شخصي IBM استفاده شده است.

8086 مي تواند به شكل يك سستم تك پردازنده كوچك (مي نيمم مد در صورتيكه پايه MN/MX به high تنظيم شود) و يا به شكل يك سيستم چند پردازنده اي (ماكزيمم مد در صوتيكه پايه MN/MX به low تنظيم شود) پيكره بندي مي گردد. در يك سيستم مفروض، پايه MN/MX دائماً به high يا low متصل مي شود. برخي پايه هخاي 8086 داراي توابعي دوگانه بسته به نوع انتخاب سطح ولتاژ پايه MN/MX هستند. در مد مي نيمم MN=MX=high اين پايه ها سيگنال هاي كنترلي را مستقيماً

به حافظه و وسايل I/O انتقال مي دهند. از مد ماكزيمم MN/MX=Low اين پايه ها داراي وظايف متفاوتي براي نسهيلات سيستم هاي مالتي پروسسور است. در مد ماكزيمم توابع كنترلي كه معمولاُ در مد مي نيمم نشان داده مي شوند، فرض مي شود كه به وسيله تراشه اي مثل كنترل گذرگاه 8288 پشتيباني مي شوند.

در متن اصلی مقاله به هم ریختگی وجود ندارد. برای مطالعه بیشتر مقاله آن را خریداری کنید