دوشنبه, 31 ارديبهشت 1403

 



موضوع: مقایسه کامپیوتر های CISC و RISC

مقایسه کامپیوتر های CISC و RISC 9 سال 4 ماه ago #110807

در اواسط دهه 70ميلادي ، پيشرفت فناوري نيمه هادي،آغازي براي کاهش تفاوت محسوس ميان سرعت حافظه اصلي و تراشه هاي پردازنده بود. در آن زمان سرعت حافظه اصلي رو به افزايش بود و زبان هاي سطح بالا (High Level Language : HLL) در حال جايگزين شدن با زبان اسمبلي بودند. در اين راستا طراحي هاي اوليه معماري CISC به مرور کنار گذاشته شد و طراحان به دنبال روش هايي بودند که با استفاده از آن ها کارآيي کامپيوتر افزايش يابد. همانطوري که مي دانيم جنبه مهمي از معماري کامپيوتر ، طراحي مجموعه دستورالعمل ها براي پردازنده است. مجموعه دستورالعمل هاي انتخاب شده براي پردازنده اي خاص ، نحوه ساخت برنامه هاي زبان ماشين آن پردازنده را تعيين مي کند. پردازنده هاي اوليه ، مجموعه دستورالعمل هاي کوچک داشتند که دليل آن بيشتر تمايل به کاهش سخت افزار مورد استفاده براي پياده سازي بود. در زمانيکه هزينه ساخت سخت افزار کمي با ظهور مدارهاي مجتمع کاهش يافت، دستورالعمل هاي پردازنده از نظر تعداد و پيچيدگي رو به افزايش گذاشت. مجموعه دستورالعمل هاي بسياري از پردازنده ها در آن زمان شامل100 وگاهي اوقات بيش از200 دستورالعمل بود. اين نوع پردازنده ها از گستره اي از انواع داده ها و شيوه هاي آدرس دهي متعدد پشتيباني مي نمودند. دلايل زيادي را جهت سير حرکت به سوي پيچيدگي سخت افزار در آن زمان مي توان در نظر گرفت،که عبارتند از:
1-ارتقاء مدل هاي موجود در آن زمان براي فراهم نمودن برنامه هاي کاربرد بيشتر
2-اضافه نمودن دستورالعمل هايي که ترجمه از زبان هاي سطح بالا به زبان ماشيني ساده نمايد.
3-تهيه ماشين هايي که توابع را به جاي پياده سازي نرم افزاري به صورت سخت افزاري پياده سازي نمايند. پردازنده اي که تعداد دستورالعمل هاي آن زياد باشد به عنوان مجموعه دستورالعمل هاي پيچيده يا پر دستور(CISC) اين طبقه بندي قرار مي گيرند.رايانه اي نظير PDP -11 و System ِِِDEC در اين طبقه بندي قرار مي گيرند .پردازنده هايIntel 8086 و Motorola 68000 نيز با استفاده از معماري CISC طراحي و پياده سازي شده اند.(تصاوير صفحه بعد) در طراحي مجموعه دستورالعمل هاي يک پردازنده ، به ساختمان زبان ماشين و شرايط و محدوديت هاي استفاده از زبان هاي سطح بالا توجه مي شود. مي دانيم که ترجمه از برنامه هاي نوشته شده به زبان هاي بالا به زبان ماشين با استفاده از يک برنامه مترجم(compiler) انجام مي شود. يکي از دلايل حرکت به سمت ايجاد مجموعه دستورالعمل هاي پيچيده در معماري CISC ، ساده امروزه مرزبندي بين معماري هاي risc و cisc در دنياي پردازنده ها شخصي کاري عبث و بيهوده است. زيرا در فناوري هاي نوين ساخت پردازنده شخصي , اين دو معماري به صورتي تلفيق شده اند که تفکيک آن ها کاري مشکل مي باشد.تا دوران پردازنده هاي 80486 , معماري غالب , معماري cisc بود.با پيشرفت فناوري ساخت پردازنده و امکان افزايش فرکانس , تکنيک هاي بکار رفته در معماري RISC , جاي خود را درز طراحي پردازنده باز نمود. از نسل Intel Pentium وAMD K5 شاهد هستيم که ويژگي هاي معماري RISC در طراحي هاي پردازنده هاي شخصي نمود بيشتري پيدا کرده است. امروزه در معماري هاي Intel core i7 و AMD K10 اين مصاديق دقيقاً مشاهده مي شوند. پردازنده هاي امروزي در اصل دورگهRISC-CISC مي باشند که ژن RISC آن ها غالب است ! مقاله اي که مطالعه مي نمائيد به نوعي ريشه در دوران دانشجويي بنده دارد. هسته اولين اين مقاله در پروژه درس شيوه ارائه مطالب علمي , در سال دوم تحصيل در رشته کامپيوتر بوجود آمده و از آن در کنار ساير منابع معرفي شده در تاليف اين مقاله استفاده شده است.
نمودن ترجمه و ارتقاي عملکرد پرادازنده است. وظيفه برنامه مترجم ايجاد مجموعه دستورالعمل هاي زبان ماشين به ازاي هر دستور زبان سطح بالاست. اگر دستورالعمل هاي زبان ماشين وجود داشته باشد که اين مهم را محقق سازد، فرآيند ترجمه ساده تر خواهد شد. هدف اصلي معماريCISC ، تلاش در تهيه يک دستورالعمل زبان ماشين براي هر دستوري است که به زبان سطح بالا نوشته شده است. از ديگر مشخصات بارز معماريCISC استفاده از قالب هاي داراي طول متغير براي دستورالعمل هاست. دستورالعمل هايي که عملوند آن ها ثابت است ممکن فقط دو بايت طول داشته باشند ولي دستورالعمل هايي که نياز به آدرس حافظه دارند ممکن است براي کل دستورالعمل به پنج بايت نياز داشته باشند. اگر کلمه را چهار بايتي(32بيت)در نظر بگيريم، دستورالعمل پنج بايتي يک کلمه و يک بايت از کلمه بعدي را اشغال مي کند. قرار دادن قالب هاي متغير دستورالعمل بر روي کلمه هاي حافظه (که طول ثابت دارند) نياز به مدارهاي کدگشايي خاصي دارد که بايت هاي کلمات را شمرده و دستورالعمل ها را بر اساس تعداد بايت هاي انتقالي آن ها ، در حافظه بسته بندي نمايد. دستورالعمل هاي يک پردازنده CISC مي توانند به صورت مستقيم با عملوندهاي مستقر در حافظه کار کنند. به عنوان نمونه، دستور ADD ممکن است يک عملوند را در حافظه از طريق آدرس دهي شاخص دارد (Index) و عملوند دوم را در حافظه از طريق آدرس دهي مستقيم (Direct) مشخص نمايد. اين امکان وجود دارد که در يک دستور العمل ، مکان ديگري از حافظه براي ذخيره مجموع عمليات جمع مشخص شود.بنابراين در اين حالت براي اجراي دستور العمل ADD مثال زده شده، سربار به حافظه مراجعه مي شود. البته پردازنده هاي CISC دستوراتي دارند که فقط از ثبات هاي پردازنده استفاده مي کنند ولي توجه داشته باشيد که هر قدر تعداد دستورالعمل ها و شيوه هاي آدرس دهي مورد استفاده پردازنده بيشتر باشد، مدارهاي سخت افزاري بيشتري براي پياده سازي لازم است و اين امر مي تواند منجر به کند شدن محاسبات شود. با توجه به مقدمه ذکر شده اجازه دهيد قدري بيشتر با معماري CISC آشنا شويم. معماريCISC:
هدف اصلي از معماريCISC تلاش در تهيه يک دستور ماشين به ازاء سطح بالاست. بنابراين در اين روش براي ساده دتر کردن معماري از ريز دستورالعمل (micro-operation)استفاده مي شود.در يک سيستم ريز برنامه شده ROM ، شاهد يک گروه از دستورالعمل هاي ريز برنامه هستيم که با دستور العمل زبان ماشين پردازنده مطابقت دارد.در معماريCISC وجود ريز برنامه ،به عنوان يک لايه بين دستورالعمل و سخت افزار الکترونيکي پردازنده است که سعي در بهبود بخشيدن روند اجراء دارد. با استفاده از ريز عمل تعداد ترانزيستورهاي کمتري استفاده مي شود.البته در معماري CISC تعداد ثبات هاي همه منظور کم است.به طور مثال در پردازنده8086 شاهد وجود چهار ثبات همه منظوره و در پردازنده VAX با هشت ثبات همه منظور مواجه مي شويم.در معماري CISC تعداد دستورالعمل ها بسيار زياد است و دستورات زيادي وجود دارند که کارهاي خاصي انجام مي دهند و کمتر از آن ها استفاده مي شود. تعدد شيوه هاي آدرس دهي (بين5 تا 20روش) ، قالب هاي طول متغير براي دستورات و وجود دستوراتي که عملوندها را در حافظه دستکاري مي کنند از ويژگي هاي بارز معماري CISC مي باشند. با عنايت به .وجود حافظه اصلي کُند ، حافظه ريزبرنامه مي تواند سريعتر از حافظه اصلي باشد. بنابراين در معماري CISC يک مجموعه دستورالعمل با استفاده از ريزبرنامه پياده سازي مي شود. در پردازنده هاي CISC نظير 68000 شاهد هستيم که مجموعه دستورالعمل هاي دوستانه برنامه نويس Programmer-friendly ايجاد شده مرحله منطقي ، مجموعه دستورالعمل هايي که نگاشتي مشابه زبان سطح بالا دارند ، طراحي شده است. با توجه به نکات مطرح شده با دستوراتي مواجه هستيم که شامل روتين ها و جابجايي شمارنده پشته (Stack) با يک فراخواني مي باشند. به عنوان مثال مي توان به دستورات ROXL (چرخشي به سمت چپ) ، RTR (بازگشت و برگرداندن وضعيت) ، SBCO (کاهش رقم هاي ده دهي اعشاري) و SWAP (جابجايي محتواي ثبات) اشاره نمود. يک پردازنده مبتني بر معماري CISCبر اجراي کامل هر دستورالعمل قبل از اينکه دستورالعمل بعدي آغاز شود ، تاکيد دارند. بنابراين براي اجراي يک دستورالعمل ، دستورالعمل به چند مرحله تقسيم مي شود و به محض اينکه يک مرحله تمام شد ، نتيجه به مرحله بعد منتقل مي شود. در اولين مرحله يک دستورالعمل از حافظه اصلي واکشي مي شود. در دومين مرحله ريزبرنامه عمل محاسبه سخت افزار ، تعيين و اجرا مي شود. در مرحله سوم نتيجه در حافظه اصلي نوشته مي شود. در يک پردازنده CISC به هر دستورالعمل براي خاتمه يافتن به يک سيکل ساعت نياز دارد. بنابراين يک دستور در يک زمان اجرا مي شود.

معماري RISC :

معماريRISc فناوري براي طراحي واحد پردازش مرکزي(Central Processing Unit:CPU) است که جهت فراهم آوردن سرعت بيشتر و هزينه کمتر در مقابل معماري CISC بکار مي رود. اين فناوري براي اولين بار توسط شرکت IBM در سال 1970 پيشنهاد شد که بعدها در معماري پردازنده POWER بکارگيري شد و در ايستگاه کاري IBM RS16000 در سال 1990 پياده سازي گرديد. در دهه 90 ميلادي شاهد بکارگيري معماري RISC در پردازنده هاي Sun Motorola ، Apple ، Power PC وSPARC مي باشيم. ايده اساسي در معماري RISC ساده سازي منطق لازم براي پياده سازي يک پردازنده بود که قادر به اجراي فقط دستورالعمل ها و مدل هاي آدرس دهي ساده باشد. بنابراين پردازنده مي تواند کوچک تر ، کم هزينه تر و سريعتر با توان مصرفي کمتر باشد. معماري RISC از برنامه هاي مترجم به صورت بهينه و هوشمندتر استفاده مي کند. پردازنده هاي RISC داراي حالت کاري تقليد هستند که آن ها را قادر مي سازد تا کد ترجمه شده ديگر پردازنده هاي غيرRISC را اجرا نمايند. پروژه هايي که منجر به معرفي معماري RISC شدند عبارتند از: پردازنده ترکيبي IBM801 و پردازندهmips (استنفورد). پروژهIBM اولين قدم در اين زمينه بود. ماشين IBM به شکل يک سيستم متشکل از صدها پردازنده طراحي شده بود و در پروژه دانشگاهي برکلي و استنفورد تعداد پردازنده ها بسيار کمتر بود. در سال 1980 ديويد پترسن در دانشگاه برکلي دو پردازنده RISC I و RISC II را طراحي نمود. در سال 1981 جان هنسي در دانشگاه استنفوردMIPS راپايه گذاري نمود .در هر دو پروژه ي دانشگاهي شاهد هستيم که ماشين ساده اي طراحي گرديد که مي توانست به شکل يک ريزتراشه (Microchip) در محيط دانشگاهي پياده سازي گردد. هر سه ماشين طراحي شده در يک ويژگي مشترک بودند و آن بکارگيري مجموعه دستورات کاهش يافته بود واز ويفر چند تراشه اي (Multi ChipWafer) استفاده مي کردند. اين مسئله باعث کاهش هزينه توليد مي گرديد. در سال 1987 شرکت Sun پردازنده هاي خود را براساس معماريScalable Processor Architectire) SPARC ) آغاز نمود. ايده هايSPARC برگرفته از معماريRISC دانشگاه برکلي بود.که باعث شد اين معماري اهميت و جايگاه خود را به شکل تجاري پيدا کند.مو فقعيت شرکت sun در توليد ايستگاه هاي کاري مبتني بر معما ري RISC ود که باعث شد اين معماري اهميت و جا يگاه خود را به شکل تجا ري پيدا کند .پشتيباني و تمايل شرکت sun در رابطه با معماريRISC باعث شد که در سال 1990 شرکت IBM و در سال 1993 شرکت DEC معماريRISC خود را معرفي نمايند. در دهه 90 ميلادي نيز شرکت Intel نيز ايده را در پردازنده هاي i860 و Pentium بکار گرفت.
ويژگي هاي ماشين هاي RISCمجموعه دستورالعمل هاي ساده:مجموعه کوچک دستورالعمل هاي يک پردازنده RISC نوعي، عمدتاً از عمليات ثبات به ثبات تشکيل مي شود و فقط براي عمل هاي ذخيره و باردهي ساده به حافظه مراجعه مي شود.هر يک عملوندها با يک دستورالعمل باردهي به داخل يکي از ثبات هاي پردازنده آورده مي شود.همه محاسبات روي داده هاي ذخيره شده در ثبات هاي پردازنده انجام مي شود.نتايج محاسبات با استفاده از دستورالعمل ذخيره به حافظه منتقل مي شود.اين ويژگي معماري، مجموعه دستورالعمل ها را ساده مي کند و موجب تشويق بهينه سازي عمليات دستکاري داده ها در ثبات ها مي شود. در ماشين RISC نيز مجموعه دستورالعمل ها ساده هستند.دستورهاي اصلي و پايه قابل ترکيب براي توليد دستورهاي پيچيده مي باشد.طول يکسان دستورها:با استفاده از قالب نسبتاً ساده اي براي دستورالعمل ها ، طول دستورالعمل ها مي تواند ثبات و محدود به مرزهاي کلمات باشد.
جنبه مهمي از قالب دستورالعمل هاي RISC اين است که کدگشايي آن ساده است. بنابراين واحد کنترل مي تواند به طور همزمان به کد عمل و ميدان هاي ثبات دست يابد. با ساده کردن دستورالعمل ها و قالب آن ها ، مي توان مدار کنترل را ساده کرد.هر دستور،داراي طول يکساني با ديگر دستورها است به طوريکه واکشي آن در يک عمل مجزا امکانپذيرمي باشد.
کنترل از نوع سخت افزاري است نه ريزبرنامه نويسي شده: براي سريعتر کردن عمليات، کنترل سخت افزاري بر کنترل ريزبرنامه نويسي شده ترجيح دارد. اجراي دستورالعمل ها در يک سيکل ماشين:يکي از مشخصات پردازنده هاي RISC توانايي آن ها در اجراي يک دستور در هر چرخه ساعت است. اين کار با همپوشاني فازهاي واکشي، کدگشايي و اجراي دو يا سه دستورالعمل با استفاده از رويه اي که پردازش لوله اي نام دارد، انجام مي شود. يک دستورالعمل باردهي يا ذخيره ممکن است به دو چرخه ساعت نياز داشته باشد. زيرا مراجعه به حافظه نسبت به عمليات ثباتي ، به زمان بيشتري نياز دارد. بيشتر دستورالعمل ها قابل اجرا در يک سيکل ماشين هستند و اين امر باعث مي شود که پردازنده بتواند چندين دستورالعمل را در يک سيکل ماشين اجرا کند. لوله اي کردن پردازش نيز يکي از تکنيک هاي اساسي در افزايش تسريع ماشين هاي RISC بوده است. يکي از بحث هاي چالش برانگيز در اواخر دهه1990 ، مقايسه پردازنده هاي Power-PC با فراورده هاي شرکت اينتل بوده است و هميشه بحث بر سر اين بود که کدام بهتر است: RISC يا CISC؟ فروشندگان ، سازندگان و عرصه کنندگان RISC هميشه گفته اند که تراشه هاي آن ها سريعتر و توانمندتر از تراشه هاي CISC بوده است. اما در آن زمان اينتل و ديگر سازندگان کامپيوترهاي مبتني بر رهيافت CISC ادعائي خلاف اين را داشته اند. پردازنده هاي RISC که تعداد کمتري از دستورها را پشتيبان مي کنند، در مقايسه با پردازنده هاي غير RISC برنامه ها را سريعتر به اجرا در مي آورند. اما آيا واقعاً اين تمام ماجرا است؟ اگر چنين باشد به اين معني نخواهد بود که يک پردازنده RISC نرم افزار را کندتر اجرا مي کند، زيرا بايد براي به اجرا در آوردن وظيفه هاي پيچيده مانند محاسبه مقادير سلولها در يک صفحه گسترده و يا کشيدن يک تصوير گرافيکي در يک صفحه نمايش ويرايشگر ، از تعداد دستورالعمل هاي بيشتري استفاده کند. بنابراين واقعا مزيت مجموعه دستورالعمل هاي کوچک چيست؟ همين که واژه RISC به گوش مي رسد نخستين چيزي که به ذهن تداعي مي شود، کاهش تعداد دستورالعمل هايي است که CPU پشتيباني مي کند و در نتيجه پيچيدگي تراشه پردازنده کاهش پيدا مي کند. بنابراين امکان پذير است که دستور مستقل سريعتر اجرا مي شوند و يک بهره مناسب با کارائي در هنگام اجراي يک وظيفه در قياس با يک معماري با دستورهاي بيشتر حاصل گردد. هر دستورالعمل فرماني است که در کسري از زمان رمزگشايي مي شود ودر اندک زماني CPU آن را مي نويسد ، برنامه مترجم(کمپايلر) هر جمله را با يک يا چند دستورالعمل ريز پردازنده ترجمه و تبديل مي کند. به طوري که برنامه نويساني که مي خواهند اين دستورهاي ريزپردازنده را ببينند مجبور به غوطه خوردن در زمان هاي ناچيز رمزگشايي و يا اجرا نيستند. دستورالعمل با يادمانهايشان داده مي شوند. يادمان ها بيشتر شبيه مخفف کلمات انگليسي مي باشند و خواندن و فهميدن برنامه را آسانتر مي سازد. مانند MOV که مخفف MOVE است و يادآور انتقال يک مقدار از يک مکان به مکان ديگر است و يا ADD که سبب جمع دو مقدار با يکديگر مي شود. از آنجائيکه که ثبات ها بخشي از ريز پردازنده هستند، دستيابي به ثبات ها بسيار سريعتر از دستيابي به حافظه مي باشد. هر برنامه اي که پيچيده نباشد، اين دستورها را به مجموعه از بيت ها تبديل مي کند.و بيشتر برنامه هاي. کاربردي پيشرفته شامل صدها و هزاران خط از چنين کدهايي هستند. سيستم عامل حتي از اين هم پيچيده تر مي باشد. به عنوان نمونه
سيستم عامل قديمي Windows 95 شامل 10 ميليون خط است که بيشتر آن به زبان C نوشته شده است. هنگامي که برنامه اي به اجرا در مي آيد ، ريز پردازنده دستورها را مي خواند يا يکي را واکشي و اجرا مي کند. ريز پردازنده به زماني براي واکشي دستور و به زمان بيشتري براي رمزگشايي (کدگشايي) اين که دستور چه مي خواهد، نياز دارد. به محض اين که اجراي دستور آغاز شود،تعداد مشخصي از سيکل هاي ساعت براي تکميل دستور استفاده مي شوند .سيکل ساعت بيانگر ضربان نوسانگري است که ريز پردازنده را راه اندازي مي کند. يک روش براي داشتن ريز پردازنده اي که نرم افزارها را سريعتر به اجرا در آورد، افزايش تعدادپالس هاي ساعتي که براي اجراي يک دستور لازم هستند، مي باشد. البته توجه داشته باشيد که اين افزايش فرکاني داراي حد مرزي است(به دليل عدم وجود وسايل خنک کننده مناسب). با در نظر گرفتن برابري ديگر پارامترهاي سيستم در ريز پردازنده اي با سرعت1GHZ تنها نيمي از کارايي يک پردازنده2GHZرا تحويل مي دهد. اگر پردازنده يک گيگاهرتزي براي اجراي دستوري به 4 پالس ساعت نياز داشته باشد، پردازنده دو گيگاهرتزي تنها به يک پالس ساعت نياز دارد. در ضمن پردازنده هاي CISC مانند x86 نيازمند يک تا بيش از 100 سيکل ساعت براي تکميل يک دستور هستند. زمان بندي دستورالعمل ها نيز متفاوت هستند و همراه با هر يک از نسل هاي متواليX86 مي بينيم که اينتل تعداد پالس هاي ساعت را براي دستورهاي مستقل کاهش داده است. از ابتداي پيدايش ريز پردازنده، هدف نهايي طراحان تراشه، توسعه يک CPU بوده است که تنها نيازمند يک سيکل در ساعت براي هر دستوري بوده است. نه تنها براي دستورهاي مشخص، بلکه براي هر سيکل در هر دستور اين ويژگي در نظر بوده است. اما مي دانيم که ترانزيستورهاي موجود در CPU مجبور به قرار گرفتن در يک فضاي محدودي هستند. يعني اينکه در نهايت تعداد ترانزيستورهاي يک تراشه محدود مي باشد. شايدعنوان شود که کاهش فناوري ساخت ترانزيستور به اين مسئله کمک مي نمايد. توجه داشته باشيد امروزه فناوري ساخت ترانزيستور در سال 2009 ميلادي به 45 نانومتررسيده و تا دو سال بعد به 22 نانومتر خواهد رسيد. بعد از آن چه خواهد شد؟هدف اوليه طراحان RISC ، محدودسازي دستورها در تراشه بوده است تا هر يک بتوانند ترانزيستورهاي اختصاص يافته براي اجراي يک دستور را در هر سيکل فراهم سازند. نسخه RISC از دستورهاي بيشتر استفاده مي کند، اما زمانبندي دستورالعمل به قدر کافي کوچک است. تراشه RISC ممکن است در 20 پالس ساعت آن چه را که تراشه هاي CISC براي انجام آن با 100 پالس نياز دارند، انجام دهد. با داشتن تعداد محدودي ترانزيستورها، بايد بين پيچيدگي مجموعه دستورالعمل ها و زمانبندي دستورها، تعادل و توازني قائل شد. معماري RISC به دنبال برقراري يک تعادل بهتر بين هر دوي آن ها بوده است تا ريز پردازنده اي سريعتر را ايجاد کند. ترانزيستورهاي يک تراشه RISC قادر به ذخيره سازي دستورالعمل هاي بزرگتري هستند و مي توانند براي حافظه نهان در خط لوله و ديگر ثبات ها مورد استفاده قرار بگيرند. ريز پردازنده هاي RISC داراي ثبات هاي همه منظوره بيشتر هستند، تعداد زياد ثبات ها براي ذخيره نتايج مياني و بهينه کردن ارجاع به عملوندها مفيد است. در واقع بهترين روش براي نوشتن سريع کد، بيشينه ساختن تعداد عمليات هاي روي بر دو کمينه ساختن تعداد دستيابي ها به داده هاي ذخيره شده در حافظه مي باشد. داشتن تعداد بيشتري از ثبات هاي همه منظوره، رسيدن به اين خواسته را نزديک تر مي کند. دستيابي به حافظه زمانگير است و در نتيجه تبادل اطلاعات بين ثبات ها مي تواند بسيار سريع تر از تبادل اطلاعات با حافظه انجام مي شود و به اين ترتيب مي توان عمليات ثبات به حافظه را با نگهداشتن عملوندهايي که بيشترين ارجاع به آن ها انجام مي شود در ثبات ها به حداقل رساندن. يک Pentium تنها 8 ثبات همه منظوره دارد، اما POWER-PC داراي 32 ثبات همه منظوره است. ريز پردازنده هاي RISC از معماري LOAD/Store استفاده مي کنند و دستورالعمل هاي CPU روي داده ذخيره شده در حافظه عمل مي کنند. به طور مثال جمع دو عدد صحيح Add x,y که y يک مقدار ذخيره شده در حافظه مي باشد، سيکل هاي ساعت بيشتري را به خويش اختصاص مي دهند. به علاوه در پياده سازي اين دستورها، تمايل به استفاده از تعداد بي تناسبي ترانزيستورها وجود دارد. در طراحي هاي RISC کوشش شده تا تعداد دستورهايي که به حافظه دستيابي مي کنند تنها محدود به استفاده ازLOAD/Store گردد. يعني لازم است که مقدار y پيش از اينکه مقدار x به آن افزوده شود، در يک ثبات LOADگردد. آنگاه مقدار ذخيره شده به حافظه بازگردانده مي شود. ريز پردازنده هاي RISC کارائي عمليات مميز شناور را بهبود بخشيده اند. ماشين هاي RISC براي کاربردهاي عملي طراحي شده اند. کاربردهاي عملي داراي عمليات رياضي پيچيده تر ودر نتيجه محاسبات مميز شناور بيشتري نسبت به برنامه هاي واژه پرداز و صفحه گسترده هستند. بنابراين ريز پردازنده هاي RISC همواره کارائي بالايي در واحدهاي عملياتي مميز شناور داشته اند. به طور کلي طراحان RISC پيشرفت سريعي در پذيرش فناوري هايي همچون کد روي برد، Cacheهاي داده، طراحي هاي سوپراسکالر، لوله اي کردن دستورها،منطق پيشگويي انشعاب و... داشته اند. تا تراشه هاي آن ها داراي کارائي بهتري گردد.
تراشه هايي مانندAMD،Cyrix،NexGenهر چه بيشتر مرز بين RISC و CISC را با در آميختن ويژگي هاي RISCوPentiumناروشن ومبهم ساخته اند. به طور مثال پردازنده، NextGens Nx 586 از مجموعه دستورالعمل هايي استفاده مي کنند که داراي طول يکساني هستند و اينتل در معماري تراشهP6خويش مجموعه دستورالعمل هاي داخلي با معماريLOAD/Store را بکار برده است تا تعداد دستورهايي که امکان دستيابي به حافظه دارند، محدود گردد. تراشه هاي NextGen و AMD همچنين از تعداد محدودي ثبات در دسترس پذير مانند ويژگيPentium استفاده مي کنند. که اين امر توانايي تراشه را در اجراي همزمان دستورالعمل ها در دو خط لوله تحت تاثير قرار مي دهد. در اين معماري تراشه ها ، از يک الگوي تعويض نام ثبات براي نگاشت پوياي ثبات ها در دسترس، به ديگر اعضاي مجموعه ثبات ها استفاده مي کنند. بنابراين اختلاف ميان ريز پردازنده هاي RISC و CISC خيلي به مجموعه دستورالعمل ها بستگي ندارد. بلکه بيشتر به نوع معماري تراشه ها وابسته است. تفاوت طراحي هايRISC و CISC اکنون خيلي در ويژگي هاي اصلي با معني نيست. اينکه يک تراشه مي تواند دستورها را سريع تر اجرا در آورد ويا اينکه نرم افزارهاي موجود را سريع تر اجرا کند ، چندان گفته هاي پر معنايي به ديد نمي آيد. لوله اي ساختن پردازش ، تکنيکي است که در ريز پردازنده هاي RISC وCISC براي شکستن اجراي دستورهاي مستقل به مراحل و همپوشان کردن مراحل بکار مي برند. به طوريکه چندين دستور مي تواند به شکل موازي به اجرا درآيند. هم 486 وهم CPU هاي رده Pentium از5 مرحله خط لوله استفاده کرده اند. 5مرحله خط لوله عبارتند از: PF:سبب واکشي يک دستور از حافظه نهان (Cache) ريز پردازنده خواهد شد. D1:دستور را رمز گشايي مي کند. D2:آدرس و نشاني حافظه را اگر دستورالعمل ارجاع به حافظه باشد، توليد مي کند. EX: باعث اجراي دستورالعمل مي شود. WB:نتيجه را ذخيره مي کند يا نتيجه را به طور کامل مي نويسد. خط لوله اي کردن اجازه مي دهد که بيش از يک دستور ريز پردازنده در هر زمان، سرويس داده شود. زمان از چپ به راست در واحدهاي سيکل ساعت انتقال مي يابد.

پردازنده هاي RISC :

پردازنده هايRISC زمان اجرا را با ساده سازي دستورهايي که براي محدوده اي از کارها غالباً اجرا مي شود، کاهش داده اند.
هدف از بکارگيري پردازنده هاي RISC توانا سازي هر دستور در يک پالس ساعت است. اما تا کنون اين نرخ ايده آل به دست نيامدهاست. اين کار با استفاده از خط لوله که شامل تعدادي مراحل کنترل سخت افزاري است، انجام ميشود. در نقطه مقابل پردازنده هاي CISC وجود دارند که از رهيافت ريزبرنامه ريزي استفاده مي کنند. اين کار به سادگي امکان پذير است، به دليل پيشرفت فناوري تراشه هاي VLSI سرعت هاي واحدهاي منطقي و حافظه نزديک به هم مي باشند. در پردازنده RISC گام هاي منطقي، نيازمند دستورالعمل هايي هستند که در حافظه به عنوان يک برنامه کتابخانه اي ساده در حين اجرا ذخيره شده اند. همچنين همگي جمله هاي زبان هاي سطح بالا مي توانند به توانائي هايي از دستورهاي ساده ابتدايي تبديل شوند. به طوريکه بتوانند در حافظه به عنوان برنامه عادي ذخيره گردند. بنابراين پردازنده RISC از پردازنده CISC کار کمتر انجام مي دهد و مي تواند کارهاي را با سرعت بيشتري به اجرا در آورد. زيرا واحد کنترل آن سخت افزاري مي باشد. اين امر در محدوده هزينه حافظه لازم براي ذخيره سازي تمامي توابع پياده سازي در نرم افزار انجام مي گيرد.از سويي ديگر حافظه ROM براي ريز برنامه ريزي RISC لازم نمي باشد. در کل به دليل هزينه و فناوري VLSI پردازنده هايRISC به نحو قابل ملاحظه و روبه رشدي نسبت به پردازنده هاي CISC در پردازش موازي متوسط تاثير پذير از هزينه هستند.

پردازنده RISC برکلي :

پردازنده هاي RISC I,II برکلي نخستين ريز پردازنده هايي بودند که مفهوم مجموعه دستورالعمل هاي کاهش يافته را بکار بردند. آن ها در کل داراي 31 دستورالعمل هستند از جمله:LOAD/Store. عمليات صحيح 32 بيتي ALU که شامل عمليات جمع ، تفريق، عمليات منطقي و شيفت است. اما ضرب و تقسيم را شامل نمي شود. پردازنده RISC برکلي، همچنين از آدرس دهي حافظه براي بايت ها ، نيم کلمه 16 بيتي و کلمه 32 بيتي پشتيباني مي کند. علاوه بر دستورهايSTORE,LOAD,ALU,RISC برکلي داراي مجموعه دستورهاي گزارش وضعيت پردازنده نيز است. با ساده سازي مجموعه دستورالعمل ها، واکشي دستور و رمزگشايي آن سر راست مي باشد و مقداري از منطق کنترل سخت افزاري لازم در پردازنده نيز قابل کاهش است. در نتيجه پردازنده RISC برکلي قادر به حصول اجراي يک دستور ثبات و دستور دستيابي به حافظه با دو سيکل ماشين است. اما نکته مهم در پردازنده RISC برکلي ، داشتن يک پشته بزرگ از ثبات ها ، همراه با همپوشاني دريچه هاي ثبات است.معماريRISC برکلي از پيشگامان رهيافت سخت افزاري فراهم سازي تعدادزيادي از ثبات ها بوده است.
تعداد زياد ثبات ها در پردازنده هاي RISC براي بهينه سازي ارجاع به عملوندها لازم مي باشد. ساده سازي مجموعه دستورالعمل ها ، سبب کاهش قابل ملاحظه اي در مساحت تراشه سيليکون براي پياده سازي بخش کنترل پردازنده ها خواهد شد و از اين رو فضاي آزاد بيشتري براي اختصاص به رجيستر فايل هاي بزرگ پديد مي آيد. بررسي ها نشان مي دهد که اغلب ارجاعات به عملوند داده اي ، محلي است. از اين رو رهيافت اصلي ذخيره سازي اين داده ها در ثبات مي باشد.تعداد کمي از ثبات ها براي نگهداري متغيرهاي سراسري استفاده ميشوند. البته يک مسئله مهم فراخواني روال ها و بازگشت از آن ها است. در هر فراخواني بايد پارامترها انتقال داده شوند و متغيرهاي محلي بايد از ثبات ها در حافظه ذخيره شوند، به طوريکه ثبات ها بتوانند دوباره توسط برنامه فراخواني شده مورد استفاده قرار بگيرند. به محض بازگشت، متغيرهاي برنامه فراخوانده بايد بازيابي شده ودر ثبات ها از نو بارگذاري شوند و آنگاه نتايج به برنامه فراخوانده بازگردانده مي شود. بررسي هاي مختلف روي برنامه هاي نوشته شده به زبان سطح بالا نشان داده که در حالت روال هاي نوعي تنها از تعداد اندکي از پارامترهاي پاس شده و متغيرهاي محلي استفاده مي کنند و اين که عمق فعاليت يک زير روال در يک محدوده نسبتا مشخصي تغيير مي کند. در نتيجه پردازندهRISC برکلي از چندين مجموعه کوچک از ثبات ها استفاده مي کند که هر يک از آن ها به روال متفاوتي نسبت داده شده اند. هر فرتخواني روال، پردازنده را مجبور مي کند که به شکل خودکار به يک دريچه (پنجره) از ثبات ها به اندازه ثابت ، به عوض اينکه ثبات ها را در حافظه ذخيره سازد، سوئيچ کند. پاس کردن پرامتر به وسيله داشتن دريچه اي از وال هاي مجاور ، به شکل همپوش، انجام مي گيرد. تنها يک دريچه از ثبات ها در هر زمان قابل آدرس دهي است. سيستم لوله اي : سيستم لوله اي تکنيکي براي تجزيه يک فرآيند ترتيبي به تعداد زير عمل مي باشد که هر زير فرآيند در يک قطعه اختصاصي ويژه اجرا مي شود که به صورت موازي با قطعه هاي ديگر کار مي کند. يک سيستم لوله اي را مي توان به صورت مجموعه اي از قطعات پردازش کننده تصور کرد که اطلاعات دودويي از ابتدا تا انتهاي آن جريان دارد و هر قطعه، بخشي از پردازش را که نحوه تقسيم کار حکم مي کند، انجام مي دهد.نتيجه حاصل از محاسبه در هر قطعه، به قطعه بعدي سيستم لوله اي منتقل مي شود. نتيجه نهايي پس از عبور داده ها از همه قطعه ها به دست مي آيد. نام خط لوله جرياني از اطلاعات را شبيه به يک خط مونتاژ صنعتي تداعي مي کند. يک مشخصه سيستم هاي لوله اي اين است که چندين محاسبه مي تواند به طور همزمان در قطعه هاي مختلف در حال انجام باشد. همپوشاني محاسبات با اختصاص يک ثبات به هر قطعه از سيستم لوله اي ميسر مي شود. اين ثبات ها با جداسازي قطعات از يکديگر اين امکان را به آن ها مي دهند که هم زمان روي داده هاي متمايزي کار کنند. شايد ساده ترين نحوه ملاحظه ساختار لوله اي اين باشد که هر قطعه را متشکل از يک ثبات ورودي و به دنبال آن يک مدار ترکيبي تصور کنيم. در هر قطعه ، ثبات داده مورد نظر را نگهداري مي کند و مدار ترکيبي، عمل مورد نظر را انجام مي دهد. خروجي مدار ترکيبي هر قطعه به ثبات ورودي قطعه بعدي اعمال مي شود. پس از گذشت مدت زمان کافي براي اتمام فعاليت همه قطعه ها ، يک پالس ساعت به کليه ثبات ها اعمال مي شود. به اين ترتيب اطلاعات مرحله به مرحله در سراسر سيستم لوله اي جريان مي يابد.

خط لوله RISC :

از جمله مشخصاتي که به RISC نسبت داده مي شود، توانايي آن در استفاده از يک خط لوله دستورالعمل کار آمد است.
يک خط لوله پردازنده RISC همانند روش کارخانه عمل مي کند. اما مراحل اين خط لوله متفاوت است.پردازنده هاي متفاوت اعداد متفاوتي از مراحل را دارند.
آن ها اساساً در 5 مرحله استفاده شده در پردازنده MIPS R3000 اختلاف دارند.1- واکشي دستورالعمل ها از حافظه
2- خواندن ثبات ها و رمز گشايي دستورالعمل ها
3- اجراي دستورالعمل ها يا محاسبه يک آدرس
4- دسترسي يک عملوند به داده هاي حافظه
5- نوشتن نتيجه داخل يک ثبات.
با استفاده از سادگي مجموعه دستورالعمل ها مي توان يک خط لوله دستورالعمل را با کمي از ريز عمل ها که هر کدام در يک چرخه ساعت اجرا مي شود، پياده سازي کرد.
به دليل ثابت بودن طول قالب دستورالعمل ها ، عمل کدگشايي مي تواند هم زمان با انتخاب ثبات صورت گيرد.همه دستورالعمل هاي دستکاري داده ها، عمل هاي ثبات به ثبات دارند. از آنجا که همه عملوندها در ثبات قرار دارند ، نيازي به محاسبه آدرس موثر يا واکشي عملوندها از حافظه نيست.بنابراين ، خط لوله دستورالعمل را مي توان با دو يا سه قطعه پياده سازي کرد. يک قطعه ، دستورالعمل را از حافظه برنامه واکشي مي کند و قطعه ديگر دستورالعمل را در ALU اجرا مي کند. مي توان از يک قطعه ديگر براي ذخيره نتيجه عمل ALU در يک ثبات مقصد استفاده کرد.
دستورهاي انتقال داده در RISC به دستورهاي باردهي و ذخيره محدود است. اين دستورالعمل ها براي جلوگيري از تزاحم بين مراجعه به حافظه براي واکشي يک دستورالعمل و باردهي يا ذخيره يک عملوند از دو حافظه با گذرگاه جداگانه استفاده مي کنند. يکي براي ذخيره دستورالعمل ها و ديگري براي ذخيره داده ها. اين دو حافظه مي توانند با همان سرعت ساعت CPU کار کنند و حافظه هاي نهان(Cache Memory) ناميده مي شوند. يکي از مزيت هاي عمده RISC توانايي آن در اجراي دستورالعمل ها با سرعت يک دستورالعمل در هر چرخه ساعت است. اين توقع که هر دستورالعمل در يک چرخه با سرعت يک دستورالعمل در هر چرخه ساعت است. اين توقع که هر دستورالعمل در يک چرخه ساعت از حافظه واکشي و اجرا شود ، غير ممکن است. آنچه عملاً اجام مي شود آغاز يک دستورالعمل با هر چرخه ساعت و خط لوله اي کردن پردازنده براي رسيدن به هدف اجراي تک - چرخه اي دستورالعمل هاست.مزيت معماري RISCنسبت به معماريCISC اين است که RISC مي تواند به قطعات خط لوله اي که فقط مستلزم يک چرخه ساعت باشند ، تقسيم شود ولي CISC از قطعات متعددي در خط لوله خود استفاده مي کند که طولاني ترين قطعه مستلزم دو يا سه چرخه ساعت است. يکي ديگر از مشخصات RISC پشتيباني از سوي برنامه مترجمي است که برنامه زبان سطح بالا را به زبان ماشين ترجمه مي کند. پردازنده هاي RISC به جاي طراحي سخت افزار به صورتي که اشکالات مربوط به تزاحم هاي داده ها و اتلاف زمان ناشي از انشعاب ها را رفع کند، بر کارايي برنامه مترجم براي کشف و به حداقل رساندن تاخيرهاي مربوط به اين مشکلات تکيه مي کنند. برنامه مترجم مي تواند با بهينه کردن زبان ماشين تزاحم هاي خط لوله را جبران کند.
دستورالعمل هايRISc : در مجموعه دستورالعمل هاي يک پردازنده RISC تنها دستورالعمل هايي که بين حافظه و CPU تبادل مي کنند دستورالعمل هاي باردهي و ذخيره هستند. همه دستورالعمل هاي ديگر بين ثبات هاي CPU و بدون مراجعه به حافظه اجرا مي شوند. برنامه اي که براي CPU اي از نوع RISC نوشته شده باشد ، از دستورالعمل هاي LOAD,Store که يک آدرس حافظه و يک آدرس ثبات و دستورالعمل هاي محاسباتي که سه آدرس دارند که همگي ثبات هاي پردازنده را مشخص مي کنند، تشکيل مي شود. دستورالعمل هاي باردهي ، عملوندها را از حافظه به ثبات هاي CPU انتقال مي دهند. عمل هاي جمع و ضرب با داده هاي موجود در ثبات ها بدون مراجعه به حافظه انجام مي شوند. سپس نتيجه محاسبات با يک دستورالعمل ذخيره در حافظه ذخيره مي شوند.

مجتمع سازي با مقياس بالا :

صنعت VLSI يا مجتمع سازي با مقياس بالا ، از بالا بردن چگالي ترانزيستورها در سطح تراشه سيليکون استفاده مي کند. که البته رشد آن امروزه کندتر شده است. زيرا ما نمي توانيم به شکل نامحدودي توابع کارکردي و عملياتي زيادي را تنها در يک تراشه سيليکن قرار دهيم.
نگاهي به 1981 هنگاميکه پترسن و سوکئيم نخستين گزارش خود را درباره پروژه RISC I که بعدها اساس بسياري از معماري ها از جمله SPARC قرار گرفت ، منتشر ساختند، مشخص مي سازد که در آن زمان يک ميليون ترانزيستور در يک تراشه منفرد مقدار کمي بود. به دليل کمبود منابع ترانزيستوري در دسترس ، ماشين هاي CISC آن روز مانند VAX, واحدهاي عملياتي خويش را به چندين تراشه شکسته بودند. اما اين مشکلي را ايجاد مي کرد. به دليل افت در تاخير و توان انتقال داده ها ميان تراشه ها ، کارائي هر چه بيشتر محدود مي شد. از اين رو پياده سازي يک تراشه مجزا بسيار ايده آل به نظر مي رسيد. اما در اين زمان به دلايل مطرح شده ، اين خواسته بدون تغيير بنيادي در نگرش طراحي هاي سخت افزار موجود به سادگي ميسر نمي شد. به دليل شرايط برنامه هاي مترجم اوليه و محدوديت هاي حافظه ها در اندازه کد، برخي پژوهشگران در اواخر سال هاي 1960 و اوايل 1970 به فکر انتقال از نرم افزار افتادند. بهاي سخت افزار سير نزولي خويش را در پيش گرفته بود اما هزينه هاي نرم افزاري از کنترل آن ها خارج بود.تعدادي از اين محققين به اين نتيجه رسيدند که تنها راه ممکن براي کنار راندن اين مشکلات، انتقال پيچيدگي از سطح نرم افزار(با افزايش روز افزون بهاي آن) به سطح سخت افزار(با کاهش روز افزون بها) مي باشد. اگر يک تابع مشترک يا عملياتي در هر زمان براي يک برنامه نويس که مجبور به نوشتن کد است , از پيش آماده و در دسترس باشد، چرا اين تابع به شکل سخت افزاري پياده نگردد
تا هر کسي قادر به استفاده از آن باشد. ايده انتقال پيچيدگي از نرم افزار به سخت افزار ايده اي بود که در پشت سر مفهوم CISC و هر چيز که ماشين حقيقي CISC بکار برده، قرار داشته است. برخي پژوهشگران روشي را که براي برنامه نويسان و نويسندگان برنامه هاي مترجم پيشنهاد کرده اند، تا آن ها آسان تر بتوانند شکاف موجود در ميان جمله ها در زبان هاي سطح بالا و جمله ها در اسمبلر را کاهش دهند. بستن شکاف معنايي يک روش خيالي براي طراحان سيستم بود که مي خواسته اند کد اسمبلي هر چه بيشتر به کدهاي C ويا پاسکال شبيه گردد و افراطي ترين نمود اين نگرش ها در انتقال معماري کامپوتر به زبان سطح بالا بوده است. مفهوم CISC از همين نگرش برگرفته شده است و از نخستين روش ها براي تقليل و کاهش هزينه هاي کلي سيستم به وسيله ايجاد کامپوترهايي بوده که برنامه نويسي براي آن ها آسان باشد.براي ساده کردن وظايف نويسندگان برنامه مترجم و برنامه نويسان به نظر مي رسد که هزينه هاي نرم افزاري مي توانند تحت کنترل قرار بگيرند.
مهم ترين دلايل پيشنهادي سيستم هايHLL.CO عبارتند از:
1-کاهش دشئواري نوشتن برنامه هاي مترجم
2-کاهش هزينه کلي سيستم
3-کاهش هزينه هاي توسعه نرم افزار
4-حذف و يا کاهش نرم افزارهاي سيستمي
5-اجراي سريعتر و موثر برنامه هايي که درHLL(High Level Language نوشته شده اند.
6- بهبود فشردگي و خلاصه بودن کد
7-سادگي در اشکال زدائي برنامه ها.
خلاصه مطالب بالا اين قسمت که اگر يک دستور پيچيده در HLL مستقيماً و دقيقاً به يک دستور اسمبلي ترجمه شود آنگاه:1-نوشتن برنامه هاي مترجم ساده تر خواهند شد و اين امر زمان و هزينه توليد و توسعه نرم افزاري را نگاهداري مي کند و در نتيجه هزينه هاي توسعه نرم افزاري کاهش خوهند يافت. 2-کد توليدي هر چه بيشتر فشرده خواهد شد و اين امر ذخيره سازي تمامي آن ها را در RAM امکانپذير مي سازد و هزينه هاي کلي سخت افزار را هر چه بيشتر کاهش مي دهد. 3-اشکال زدايي کد آسان تر خواهد شد و اين امر مجدداً هزينه هاي توليد و نگهداري و توسعه نرم افزار را کاهش مي دهد. مدل هاي پيچيده آدرس دهي : در کنار پياده سازي همگي انواع دستورهايي که در برخي چيزها مانند توان 3 اعداد، کپي کردن رشته ها، تبديل مقادير به BCD و... را انجام مي دهند. تا کتيک ديگري هم است که محققين براي کاهش اندازه کد و پيچيدگي استفاده مي کنند و آن مقوله اي از مدل هاي پيچيده آدرس دهي است.
[2:3],1MOV A
[5:2],2MOV B
3MOV A,B
4MOV [2:3] , A
اگر بخواهيم دو عدد را در يکديگر ضرب کنيم ، ابتدا بايد هر يک از عملوندها را از يک مکان حافظه اصلي (مکان هاي 1:1 تا 6:4)در يکي از 6 ثبات E,D.C,B,A و يا F بار کنيم. همينکه اعداد در ثبات ها قرار گرفتند آنگاه عمل ضرب مي تواند روي آن ها توسط واحد اجرا(ALU) انجام شود. کد زير براي انجام ضرب محتويات مکان هاي حافظه 2:3 و 5:2 و ذخيره آدرس در مکان 2:3 بکار مي رود. اگر بخواهيم برنامه اسمبلي کمي پيچيده تر و فشرده تر داشته باشيم بايد معماري پيشنهادي را قدري اصلاح و عمليات بالا را تنها با يک دستور پياده سازي کنيم. براي اينکار مي توانيم دستور MUL را طوري تغيير دهيم که محتويات دو مکان حافظه را که آدرس آن ها مشخص شده در هم ضرب کند. اي اينرو اسمبلر براي ضرب حافظه در حافظه، کد زير را توليد خواهد کرد:[5,5:2 2: .1MULتبديل 4 عمل به يک عمل بسيار شوق برانگيز است اما معماري پيشنهادي ما بايد قادر باشد تا م دو مکان از حافظه را در ثبات ها بار کرده، آن ها را در يکديگر ضرب و نتيجه را بازگرداند. از ديد برنامه نويسي اين امر دشوار است.
اما اين مراحل را بايد بتوان در وجهي غير قابل رويت از ديد برنامه نويسي در سطح پايين عمليات در سخت افزار اجرا کرد. اين مثال نمونه اي از مدل آدرس دهي پيچيده را نشان مي دهد که يک دستور اسمبلر واقعاً يک سري از عمليات پيچيده را بايد به اجرا در آورد. اين مطلب مثالي از فلسفه CISC را با انتقال توابع کارکردي از نرم افزار به سخت افزار نشان مي دهد.

حرکت به سمت جلو RISC :

پردازنده هاي RISC تنها از دستورالعمل هايي که مي توانند در يک سيکل ساعت اجرا شوند استفاده مي کنند. بنابراين دستورالعمل MUL مي تواند به سه دستور جداگانه تقسيم شود.
"LOAD" که داده ها را از بانک حافظه به يک ثبات حرکت مي دهد. "PROD"محصول را از محل دو عملوند از طريق ثبات ها پيدا مي کند. "STORE" داده ها را از ثبات ها به بانک هاي حافظه حرکت مي دهد. LOAD/STORE و ثبات ها در کنار لوله اي کردن پردازش ، طراحان RISC دو کار اساسي براي کاهش CPI و نگاهداشتن اندازه کد در حد کمينه انجام داده اند. حذف مدل هاي آدرس دهي پيچيده و افزايش تعداد ثبات هاي معماري ، در معماري RISC تنها عمليات ثبات به ثبات و دستورهاي LOAD و STORE براي دستيابي به حافظه وجود دارد. در معماريLOAD/STORE دستورهايي مانند MUL حافظه در حافظه ظاهر نخواهند شد و ما مجبور به نمايش اين دستورها به کمک دو دستور LOAD که براي بار دادن عملوندها از حافظه به ثبات و يک دستور MUL ثبات به ثبات و يک دستور STORE خواهيم بود تا نتيجه به حافظه انتقال يابد. ممکن است اين تصور پديد آيد که بکارگيري LOAD و STORE به جاي يک دستور حافظه آيا باعث افزايش تعداد دستورها و در نتيجه افت استفاده از حافظه کارايي خواهد شد؟ پترسن و هم دانشگاهي هاي او با بررسي کاربردهاي کدهاي HLL نشان دادند که مقادير عددي محلي غالباً از عملوندهايي که در يک برنامه ظاهر مي شوند استفاده مي کنند. آن ها نشان دادند که بالغ بر80% از مقادير عددي در برنامه متغيرهاي محلي هستند. يعني اينکه اگر چندين بانک از ثبات ها را به معماري بيافزاييم ، مي توانيم متغيرهاي عددي محلي را در اين ثبات ها نگاهداري و از LOAD آن ها در هر زمان اجتناب کنيم. بدين ترتيب هرگاه که روتيني فراخواني مي شود ، تمامي مقادير عددي محلي در بانکي از ثبات ها بارگذاري مي شوند وتا هنگاميکه به آن ها مجدداً نياز باشد در آن جا نگاه داري مي شوند. ماشيني مانند VAX از مشخصگرهاي عملوند ريز برنامه براي اجراي عمليات LOADها و STOREهاي مربوط به حافظه استفاده مي کنند. مثلاً دستور[2:3,5:2]MUL را در نظر بگيريد. موتور ريزبرنامه , دستور MUL را به مجموعه اي از ريزعمل هاي زير ترجمه مي کند:
1-LODA محتويات 2:3 در يک ثبات
2-LOAD محتويات 5:2 در يک ثبات
3-MUL دو ثبات در يکديگر
4-STORE نتيجه در مکان 2:3
مجموعه LOADها و STORE ها چندين سيکل را به خود اختصاص مي دهند و اين همان چيزي است که دقيقاً در ماشين RISC به چشم مي خورد. تنها فرق در اين است که سيکل هايي که براي دستور MUL شارژ مي شوند يک دستور MUL با چندين سيکل را پديد مي آورند. پس از اينکه HLL اجرا شد نتيجه در حافظه نوشته مي شود. و ريز برنامه محتويات دو ثبات را براي داده بعدي که لازم دارد از نو مي نويسد. بعوض اينکه آن را براي استفاده مجدد نگهداري کند. در RISC جداسازي و تمايز ميان LOAD ها و STORE ها از ديگر دستورها باعث مي شود که برنامه مترجم يک عمل را در شکاف تاخيري بلافاصله پس از LOAD زمان بندي مي کند. يعني در حاليکه منتظر سيکل هاي کوچکي براي باز شدن داده در ثبات ها است مي تواند در عوض بيکار بودن اين کار را انجام دهد. بسياري از ماشين هاي RISC مانند VAX از شکاف تاخيري LOAD استفاده مي کنند. RISC و معادله کارايي : بحث درباره پياده سازي خط لوله وتاثير آن بر روي CPU ما را به ملاحظاتي در معادله کارايي سوق مي دهد: زمان برنامه=تعدادسيکل ها دردستورالعمل*تعداد دستورها در برنامه* زمان هر سيکل. طراحان RISC سعي دارند تا زمان لازم براي برنامه را از کاهش طرف دوم معدله بدست آورند و اجازه مي دهند طرف اول تساوي مختصري افزايش يابد. به همين دليل است که کاهش سيکل ها در هر ستون با کاهش مجموعه دستورالعمل ها قابل حصول است و از اين رو استفاده از خط لوله و افزودن ديگر ويژگي ها بيشتر به سبب جبران ناشي از عملي است که براي افزايش تعداد دستورهاي برنامه انجام مي شود.

عوض شدن نقش برنامه هاي مترجم :

نقش برنامه مترجم در مديريت دستيابي ها به حافظه در ماشين هاي RISC و نقش آن ها در ماشين هاي CISC متفاوت است. برنامه هاي مترجم RISC تمايل به حفظ عملوندها در ثبات ها دارند به طوريکه دستورهاي ساده ثبات به ثبات قابل استفاده هستند. از سويي ديگر کمپايلرهاي RISC روش به ثبات را از مدل اجرا پيشنهاد کرده اند. به طوريکه برنامه هاي مترجم مي توانند عملوندهايي را که دوباره قابل استفاده هستند در ثبات ها نگهداري نموده بجاي اينکه بخواهند يک دستيابي به حافظه را مجدداً تکرار کنند.
بنابراين آن ها از LOAD و STORE ها براي دستيابي به حافظه استفاده مي کنند. تا عملوندها تلويحاً و به شکل ضمني پس از آغاز به واکشي از بين نروند و اين همان چيزي است که معماري حافظه به حافظه ديده مي شوند. در معماري RISC نقش برنامه هاي مترجم بسيار برجسته و مشهود است. موفقيت RISC بستگي زيادي به هوشمندي و بهينه سازي برنامه هاي مترجم دارد که مي توانند قابليت پاسخگويي در برابر وظايفي را که به آن ها محول شده افزايش دهند و در عوض کد بهينه اي را توليد کنند.
اين عمل انتقال بهينه سازي سخت افزار به کمپايلر يک عامل پيشرفت کليدي در تکامل RISC بوده است.
از آنجائي که سخت افزار ساده تر مي باشد,نرم افزار باعث کاهش برخي از پيچيدگي هاي ايجاد شده به سبب استفاده از کد و مجموعه دستورالعمل هاي کاهش يافته RISC و تعداد ثبات ها خواهد شد.
بنابراين ماشين هاي RISC که منابع محدودتر ترانزيستوري به آن ها اختصاص داده شده است ، قادر به فراهم سازي محيط و شرايطي هستند که ک
مدير دسترسي عمومي براي نوشتن را غيرفعال كرده.
مدیران انجمن: هانیه سلیمانی