مجموعه دستورالعمل: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
جزبدون خلاصۀ ویرایش
برچسب‌ها: متن دارای ویکی‌متن نامتناظر ویرایشگر دیداری
جزبدون خلاصۀ ویرایش
برچسب‌ها: متن دارای ویکی‌متن نامتناظر ویرایشگر دیداری
خط ۱:
در علوم رایانه، یک '''معماری مجموعه ی دستورالعمل''' (instruction set architecture ('''ISA'''))، نوعی مدل انتزاعی از یک رایانه است که به آن '''معماری''' یا '''معماری رایانه''' نیز می گویند. نمود یک ISA،آی اس ای، مثلاً یک [[واحد پردازش مرکزی]]، پیاده سازی( implementation) نام دارد.<br>
به طور کلی یک ISA،آی اس ای، بیانگر انواع داده ی مورد پشتیبانی، [[ثبات پردازنده|رجیسترها]]، پشتیبانی سخت افزاری برای مدیریت [[حافظه دسترسی تصادفی|حافظه اصلی]]، ویژگی‌های اساسی (همچون پایداری حافظه، [[حالت آدرس‌دهی|حالت های آدرس دهی]]، [[حافظه مجازی|حافظه ی مجازی]]) و مدل ورودی/خروجی خانواده ای از پیاده سازی های ISAآی اس ای مورد نظر است.<br>
یک ISA،آی اس ای، رفتار [[کد ماشین]] را که روی پیاده سازی های آن ISAآی اس ای اجرا می‌شود، مشخص می کند، به گونه‌ای که وابستگی به مشخصات آن پیاده‌سازی نداشته باشد و بدین طریق موجب  سازگاری باینری
(binary compatibility) بین پیاده سازی ها می شود. این امر امکان پیاده سازی های متعدد از یک ISAآی اس ای که از لحاظ عملکرد، اندازه فیزیکی، و قیمت تفاوت دارند، ولی می توانند کد ماشین یکسانی را اجرا کنند فراهم می آورد، به گونه ای که می توان یک ماشین با عملکرد پایین و قیمت پایین را، با یک ماشین با قیمت بالاتر و عملکرد بالاتر، بدون نیاز به تعویض نرم افزار جایگزین کرد. همچنین، این قابلیت باعث تکامل [[ریزمعماری|ریز معماری]] های پیاده سازی های این ISAآی اس ای می شود، به نحوی که، یک پیاده سازی جدیدتر با کارایی بالاتر از یک ISA،آی اس ای، بتواند نرم افزاری را اجرا کند که روی نسل‌های پیشین پیاده‌ سازی کار می کند.<br>
اگر یک [[سیستم عامل]]، یک [[واسط دودویی کاربردی|رابط باینری اپلیکیشن]](application binary interface) استاندارد و سازگار را برای یک ISAآی اس ای خاص حفظ کند، آنگاه کد ماشین برای آن ISAآی اس ای و سیستم عامل، روی پیاده سازی های بعدی آن در آینده و نسخه های جدیدتر آن سیستم عامل اجرا خواهد شد. با این وجود، اگر یک ISA،آی اس ای، اجرای چندین سیستم عامل را پشتیبانی کند، این تضمین وجود ندارد که کد ماشین برای یک سیستم عامل، روی سیستم عامل دیگر اجرا شود، مگر اینکه سیستم عامل اول از اجرای کد ماشین ساخته شده برای سیستم عامل دیگر پشتیبانی کند.<br>
یک ISAآی اس ای را می توان با اضافه کردن دستورالعمل ها یا سایر قابلیت ها و یا اضافه کردن پشتیبانی برای آدرس ها و مقادیر داده ی بزرگتر، بسط داد. در این حالت یک پیاده سازی از ISAآی اس ای های بسط یافته را کماکان می‌توان برای اجرای کد ماشین برای نسخه‌هایی از همان ISAآی اس ای بدون بسط های ذکر شده، استفاده کرد. کد های ماشینی که از این بسط ها استفاده می کنند، فقط روی پیاده سازی هایی اجرا می شوند که از این بسط ها پشتیبانی کنند.<br>
این قابلیت های فراهم کردن سازگاری باینری، باعث شده است که ISAآی اس ای ها، یکی از اساسی ترین فرم های انتزاعی در رایانش باشند.
== مرور ==
معماری مجموعه دستورالعمل را باید از ریز معماری(microarchitecture) افتراق داد. ریز معماری، مجموعه ای از تکنیک های طراحی پردازنده است که در یک پردازنده خاص برای پیاده سازی مجموعه ی دستورالعمل استفاده می شود. پردازنده هایی با ریز معماری های متفاوت می توانند یک مجموعه دستورالعمل مشترک داشته باشند. برای مثال، اینتل پنتیوم و Advanced Micro Devices Athlon تقریباً نسخه‌های مشابهی از مجموعه دستورالعمل x86 را پیاده سازی می کنند، اما دارای طراحی داخلی کاملا متفاوتی هستند.
== طبقه بندی ISAآی اس ای ==
یک  ISAآی اس ای را می‌توان به شیوه‌های مختلفی طبقه‌بندی کرد. یک روش طبقه بندی معمول بر مبنای پیچیدگی معماری است. یک [[رایانه با دستورهای پیچیده|''رایانه با مجموعه دستورالعمل پیچیده'']] ( complex instruction set computer) دارای دستورالعمل های اختصاصی بسیاری است، که برخی از آن ها ممکن است به ندرت در برنامه های عملی استفاده شوند. یک [[رایانه کم دستور|''رایانه با مجموعه دستورالعمل کاهش یافته'']] ( reduced instruction set computer)، با پیاده سازی کارامد صرف دستورالعمل هایی که به طور مکرر در برنامه ها استفاده می شوند، پردازنده را ساده می کند، در عین حال، عملیات کمتر رایج، از طریق ساب روتین ها پیاده سازی می شوند، که در نتیجه، افزایش زمان اجرای پردازنده، با استفاده خیلی کم از این عملیات جبران می شود.<ref>{{cite web
|url= http://cs.stanford.edu/people/eroberts/courses/soco/projects/risc/risccisc/
|title= RISC Architecture: RISC vs. CISC
خط ۱۷:
}}</ref>
 
سایر انواع ISA،آی اس ای، عبارتند از: معماری های ''کلمه دستورالعمل بسیار بلند'' ( very long instruction word) و معماری های بسیار مشابه آن نظیر، ''کلمه دستورالعمل بلند'' ( long instruction word)  و ''معماری های دستورالعمل واضحا موازی''(explicitly parallel instruction computing). هدف از این معماری ها بهره گیری از [[رایانش موازی|موازی گرایی]] سطح-دستورالعمل با استفاده از سخت افزار کمتر در مقایسه با RISC و CISC است. این معماری ها برای دستیابی به این هدف، کامپایلر را مسئول مشکلات دستورالعمل و زمان بندی می کنند.<br>
معماری هایی با پیچیدگی‌های حتی کمتر مورد مطالعه قرار گرفته اند، نظیر: ''رایانه با مجموعه دستورالعمل حداقلی'' ( minimal instruction set computer)  و ''رایانه با یک مجموعه دستورالعمل'' (one instruction set computer). این موارد از لحاظ تئوری اهمیت دارند اما استفاده تجاری نداشته اند.
 
خط ۳۷:
==== عملیات محاسباتی و منطقی ====
* این عملیات، مقادیر دو رجیستر را ''جمع''، ''تفریق''، ''ضرب''، یا ''تقسیم'' می کنند و مقدار حاصل را در یک رجیستر قرار می دهند، و احتمالاً یک یا بیش از یک کد شرطی را در یک رجیستر وضعیت ست می کنند.<br>
** ''افزایش مقدار'' یا ''کاهش مقدار'' در برخی ISAآی اس ای ها، که موجب حذف استخراج عملوند در موارد جزئی می شود.<br>
*''عملیات بیت به بیت'' را انجام می دهند، مثلاً بیت های متناظر  را در یک جفت رجیستر با یکدیگر AND یا OR می کنند یا اینکه مکمل هر بیت در یک رجیستر را به دست می آورند.<br>
*دو مقدار را در رجیسترها با هم ''مقایسه'' می‌کنند (برای مثال، برای اینکه بدانند آیا یکی کوچکتر است یا با هم برابرند).<br>
خط ۱۰۳:
***برخلاف دو-عملوند یا یک-عملوند، این حالت اجازه می دهد تا هر سه مقدار a، b، و c برای استفاده مجدد بیشتر، در رجیستر ها موجود باشند.<br>
*عملوند های بیشتر-برخی ماشین های CISC، اجازه ی انواعی از حالت های آدرس دهی را می دهند که امکان استفاده از بیش از سه عملوند را فراهم می کند (رجیسترها یا دسترسی‌های حافظه)، مثلاً: دستورالعمل ازیابی چند جمله ای VAX "POLY" .
به دلیل تعداد زیاد بیت های مورد نیاز برای کدگذاری سه رجیستر یک دستورالعمل سه-عملوندی، معماری های RISC که دارای دستورالعمل های ۱۶ بیتی هستند، تماماً دارای طراحی های دو-عملوندی هستند، نظیر: Atmel AVR, TI MSP43 و برخی نسخه‌های ARM Thumb. معماری های RISC که دارای دستورالعمل های ۳۲ بیتی هستند، معمولاً دارای طراحی‌های سه-عملوندی هستند، نظیر: [[معماری آرم|ARM]], AVR32, MIPS, Power ISAآی اس ای و معماری های SPARC.<br>
هر دستورالعمل تعدادی عملوند (رجیستر ها، مکان های حافظه، یا مقادیر فوری) را "به طور آشکار" مشخص می کند. برخی دستورالعمل‌ها یک یا بیش از یک عملوند را به طور ضمنی فراهم می کنند، مثلاً از طریق ذخیره شدن در بالای یک پشته، یا در یک رجیستر غیر مستقیم. در حالتی که برخی از عملوند ها بطور ضمنی داده می‌شوند، به عملوند های کمتری در دستورالعمل نیاز هست. هنگامی که یک "عملوند مقصد" به طور آشکار مقصد را مشخص می کند، باید عملوند دیگری نیز فراهم شود. در نتیجه تعداد عملوند های کدگذاری شده در یک دستورالعمل، ممکن است با تعداد آرگومان های مورد نیاز از نظر ریاضی برای یک عملیات منطقی یا محاسباتی ( [[آریتی (ریاضی)|arity]]) تفاوت داشته باشد. عملوند ها یا در نمایش "آپ کد" دستورالعمل، کدگذاری می‌شوند و یا اینکه به صورت مقادیر یا آدرس، به دنبال آپ کد می آیند.
 
خط ۱۳۹:
هر مجموعه دستورالعمل داده شده را می توان به شیوه‌های متفاوتی پیاده‌سازی کرد. تمام شیوه های پیاده سازی یک مجموعه دستورالعمل خاص، یک مدل برنامه نویسی مشابه فراهم می‌کند. و تمام پیاده سازی های این مجموعه دستورالعمل، قادرند تا فایل یا برنامه های قابل اجرای مشابهی را اجرا کنند. شیوه های مختلف پیاده سازی یک مجموعه دستورالعمل، موجب توازن های مختلفی بین هزینه، عملکرد، مصرف انرژی، اندازه، و ... می‌شود.
 
مهندسان در هنگام طراحی کردن [[ریزمعماری|ریز معماری]] یک پردازنده، از قطعات مدار الکترونیکی شش میخ شده( hard-wired) (که معمولاً به طور جداگانه طراحی می‌شوند)، همچون جمع کننده ها، مالتی پلکسر ها، شمارنده ها، رجیسترها، ALU ها و ... استفاده می کنند. سپس معمولاً از انواعی از زبان‌های انتقال رجیستر ( register transfer language) برای توصیف کدگشایی و توالی بندی هر دستورالعمل ISA،آی اس ای، با استفاده از این ریز معماری فیزیکی استفاده می شود. دو روش اساسی برای ساختن یک [[واحد کنترل]]( control unit) برای پیاده‌سازی این توصیفات وجود دارد (اگرچه بسیاری از طراحی ها از شیوه‌های بینابین استفاده می کنند).<br>
* ۱. برخی طراحی های رایانه، تمام کد گشایی و توالی بندی مجموعه دستورالعمل را شش میخ می کنند، درست شبیه مابقی ریز معماری.<br>
* ۲. طراحی های دیگر از روتین های ریزکد یا جداول (یا هر دو) برای این کار استفاده می‌کنند- به طور معمول به شکل [[حافظه تنها خواندنی|ROM]] های روی چیپ یا PLA ها یا هر دو (اگرچه به طور تاریخی RAM ها و ROM های جداگانه استفاده شده اند). Western Digital MCP-1600 یک مثال قدیمی است که از یک ROM اختصاصی مجزا برای میکرو کد استفاده می کند.
خط ۱۴۶:
برخی طراحی های پردازنده از یک مخزن کنترل قابل نوشتن (writable control store) استفاده می کنند- آنها مجموعه دستورالعمل مورد نظر را در یک RAM قابل نوشتن یا فلش، در داخل پردازنده (مثلاً پردازنده Rekursiv) یا یک FPGA (رایانش قابل پیکربندی) کامپایل می کنند. <ref>{{cite web|url=http://cpushack.net/CPU/cpu7.html |title=Great Microprocessors of the Past and Present (V 13.4.0) |website=cpushack.net |access-date=2014-07-25}}</ref>
 
یک ISAآی اس ای را می توان در نرم افزار با استفاده از یک [[مفسر (رایانه)|تفسیرگر]] شبیه سازی کرد. به طور طبیعی، به دلیل سربار ناشی از تفسیر، این روش کندتر از اجرای مستقیم برنامه ها روی سخت افزار شبیه سازی شده است، مگر اینکه سخت افزاری که شبیه ساز را اجرا می کند، چندین برابر سریع تر باشد. امروزه به طور رایجی، فروشندگان ISAهاآی اس ایها یا ریز معماری های جدید، شبیه سازهای نرم افزاری را پیش از آماده شدن پیاده سازی سخت افزاری، در اختیار توسعه دهندگان نرم افزار قرار می دهند. <br>
معمولاً جزئیات پیاده سازی مورد نظر، تاثیر بسیاری روی دستورالعمل های خاص انتخاب شده برای مجموعه دستورالعمل مورد نظر دارند. برای مثال، بسیاری از پیاده سازی های [[خط لوله (رایانه)|خط لوله]] دستورالعمل، فقط اجازه می دهند تا یک بارگذاری حافظه یا ذخیره سازی حافظه به ازای هر دستورالعمل انجام شود، که منجر به معماری بارگیری-ذخیره سازی (RISC) می شود. به عنوان مثال دیگر، برخی روش‌های ابتدایی پیاده سازی خط لوله دستورالعمل، منجر به یک درگاه تاخیر ( delay slot) شد.