Кіріспе
Көп қадамды операцияларды орындай алатын нұсқаулары бар процессор. Комплексті нұсқаулар жиынтығын компьютер (CISC '/s//ɪ//s//k/') – компьютерлік архитектура, онда бір нұсқау бірнеше төмен деңгейлі операцияларды (мысалы, жадтан жүктеу, арифметикалық операция және жадқа сақтау) орындай алады немесе бір нұсқаудың ішінде көп қадамды операцияларды немесе адрестеу режимдерін қолдана алады. Бұл термин кейіннен қысқартылған нұсқаулар жиынтығын компьютермен (RISC) салыстырғанда пайда болды және сол себепті RISC емес архитектуралардың барлығын қамтитын шатыр терминге айналды. Ерекшелігі – көптеген RISC дизайндары барлық нұсқаулар үшін біркелкі ұзындықтағы нұсқауларды пайдаланады және жүктеу мен сақтау нұсқауларын қатаң түрде бөлек қолданады. CISC архитектурасының мысалдарына күрделі мейнфреймдерден бастап қарапайым микроконтроллерлерге дейін жатады, онда жадтан жүктеу және сақтау операциялары арифметикалық нұсқаулардан ажыратылмайды. CISC деп кейіннен аталған нақты нұсқаулар жиынтығы архитектураларына System/360-тан z/Architecture, PDP 11 және VAX архитектуралары жатады. Сондай-ақ, көптеген академиялық басылымдарда CISC деп танылған микропроцессорлар мен микроконтроллерлерге Motorola 6800, 6809 және 68000 отбасылары; Intel 8080, iAPX 432 және x86 отбасылары; Zilog Z80, Z8 және Z8000 отбасылары; National Semiconductor NS320xx отбасы; MOS Technology 6502 отбасы; Intel 8051 отбасы және тағы да басқалары кіреді. Кейбір авторлар кейбір дизайндарды шекаралық жағдайлар деп санайды. Мысалы, Microchip Technology PIC кейбір топтарда RISC, ал басқаларында CISC деп аталды.
A complex instruction set computer (CISC '/s//ɪ//s//k/) is a computer architecture in which single instructions can execute several low level operations (such as a load from memory, an arithmetic operation, and a memory store) or are capable of multi step operations or addressing modes within single instructions. The term was retroactively coined in contrast to reduced instruction set computer (RISC) and has therefore become something of an umbrella term for everything that is not RISC, where the typical differentiating characteristic is that most RISC designs use uniform instruction length for almost all instructions, and employ strictly separate load and store instructions. Examples of CISC architectures include complex mainframe computers to simplistic microcontrollers where memory load and store operations are not separated from arithmetic instructions. Specific instruction set architectures that have been retroactively labeled CISC are System/360 through z/Architecture, the PDP 11 and VAX architectures, and many others. Well known microprocessors and microcontrollers that have also been labeled CISC in many academic publications include the Motorola 6800, 6809 and 68000 families; the Intel 8080, iAPX 432 and x86 family; the Zilog Z80, Z8 and Z8000 families; the National Semiconductor NS320xx family; the MOS Technology 6502 family; the Intel 8051 family; and others. Some designs have been regarded as borderline cases by some writers. For instance, the Microchip Technology PIC has been labeled RISC in some circles and CISC in others.
Көтермелеу және жеңілдіктер
RISC философиясы кеңінен танымал болмас бұрын, көптеген компьютерлік архитекторлар «семантикалық алшақтық» деп аталатын мәселені шешуге тырысты, яғни жоғары деңгейдегі бағдарламалау құрылымдарын – процедура шақырулары, циклдарды басқару және күрделі адрестеу режимдерін тікелей қолдайтын нұсқаулар жиынтығын жасауға ұмтылысты. Бұл, дерек құрылымдарына және массивтерге қол жеткізуді бір нұсқауға біріктіруге мүмкіндік берді. Нұсқаулардың код тығыздығын арттыру үшін олар көбінесе күрделі кодталады. Мұндай нұсқаулар жиынтығының ықшамдылығы бағдарлама көлемінің кішіреюіне және негізгі жадқа қатынаудың азаюына (ол көбінесе баяу болатын) алып келді. Сол кезде (1960 жылдардың басынан бастап) бұл компьютер жадысы мен дискілік жадтың құнын қысыммен төмендетіп, орындалу жылдамдығын арттырды. Бұл, сондай-ақ, Fortran немесе Algol сияқты жоғары деңгейдегі тілдер әрқашан қолжетімді немесе қолайлы болмаған жағдайларда, тіпті ассемблер тілінде де жоғары өнімділікке қол жеткізуге мүмкіндік берді. Шындығында, осы санаттағы микропроцессорлар кейбір маңызды қолданбалар үшін әлі де ассемблер тілінде бағдарламаланады.
Жаңа нұсқаулар
1970 жылдары жоғары деңгейдегі тілдерді талдау, компиляторлардың күрделі машиналық кодты жасағанын көрсетті. Жаңа командалар өнімділікті арттыратыны анықталды. Ассемблерде қолданылмаған, бірақ компиляцияланған жоғары деңгейдегі тілдерге үйлесетін командалар қосылды. Компиляторлар осы командаларды пайдалану үшін жаңартылды. Қазіргі процессорларда, әсіресе кэштер маңызды компонент болатын жоғары өнімділік сегментінде (көптеген кіріктірілген жүйелерден өзгеше), семантикалық тұрғыдан бай және ықшам кодталған командалардың артықшылықтарын көруге болады. Бұл себебі, осы жылдам, бірақ күрделі және қымбат жадтар көлемі бойынша шектеулі, сондықтан ықшам код тиімді. Әрине, олардың қажеттілігінің басты себебі – негізгі жад (яғни, бүгінде динамикалық RAM) жоғары өнімділіктегі процессор ядросына қарағанда әлдеқайда баяу болып қала береді.
Құрылыс мәселелері
Көптеген жобалар төмен құнмен жоғары өнімділікке қол жеткізіп, жоғары деңгейдегі тіл құрылымдарын аз нұсқаулармен беруге мүмкіндік бергенімен, мұның әрқашан осылай бола бермейтіні байқалды. Мысалы, күрделі архитектуралардың қарапайым нұсқалары (яғни, аз аппараттық қолдану) күрделі нұсқауларды (мысалы, процедура шақыруы немесе кіріс нұсқауын) пайдаланбау арқылы, оның орнына қарапайым нұсқаулар тізбегін қолдану арқылы өнімділікті арттыруға болатын жағдайларға әкелуі мүмкін. Мұның бір себебі архитекторлардың (микрокод жазушылардың) кейде ассемблерлік тіл нұсқауларын тым күрделі жобалауы, соның ішінде негізгі қолжетімді аппараттық құралдарда тиімді жүзеге асырылмауы мүмкін еді. Мысалы, "қосымша әсерлер" (жалпыға ортақ флагтардан асып түсуі) болуы мүмкін, мысалы, сирек қолданылатын регистр немесе жад орнының орнатылуы; егер бұл қарапайым (көшірмеленбеген) ішкі шиналар арқылы немесе тіпті сыртқы шина арқылы жасалса, ол әрқашан қосымша циклдарды қажет ететін болып, тиімсіздікке алып келер еді. Тіпті дұрыс теңгерілген жоғары өнімділік дизайнында да, жоғары кодталған және (салыстырмалы түрде) жоғары деңгейдегі нұсқауларды шектеулі транзистор бюджеті шеңберінде тиімді түрде кодтау және орындау қиын болуы мүмкін. Сондықтан мұндай архитектуралар процессор дизайнерінен, егер қарапайым, бірақ (әдетте) баяу, шешім – кодтау кестелеріне және/немесе микрокод тізбегіне негізделген шешім қолайсыз болған жағдайларда, көп жұмыс істеуді талап ететін. Транзисторлар мен басқа компоненттердің шектеулі ресурстар болған кезінде, бұл компоненттердің азаюына және өнімділікті оңтайландырудың басқа түрлеріне мүмкіндіктердің азаюына себеп болды.
RISC идеясы
Көптеген (бірақ барлық емес) CISC процессорларында микрокодпен анықталған әрекеттерді орындайтын схеманың өзі, көптеген жағынан құрылымы бойынша өте ерте CPU жобаларын еске түсіретін процессор болып табылады. 1970-ші жылдардың басында бұл процессорларды қарапайым дизайнға қайтару идеясы туды, осылайша (сонда салыстырмалы түрде үлкен және қымбат) ROM кестелері және/немесе PLA құрылымдарынсыз реттілік пен/немесе декодтауды жүзеге асыру мүмкін болар еді. РИСК деп белгіленген ерте (ретроспективті) процессор (IBM 801, IBM-нің Watson Research Center, 1970-ші жылдардың ортасы) бастапқыда CISC жобаларында ішкі микрокод ядросы немесе қозғалтқышы ретінде пайдалануға арналған, бірақ сонымен қатар RISC идеясын біршама кеңірек аудиторияға таныстырды. Көрнекі нұсқаулар жиынтығындағы қарапайымдық және жүйелілік машиналық код деңгейінде (яғни компиляторлар көретін деңгейде) процессордың бір-бірімен үйлесетін кезеңдерін (құбырларды) іске асыруды жеңілдетеді. Дегенмен, сол деңгейдегі құбырлар жоғары өнімділікке ие кейбір CISC "суперкомпьютерлерінде" нұсқау цикл уақытын қысқарту үшін қолданылды (сол кездегі шектеулі компоненттер саны мен сымдардың күрделілігіне қарамастан). CISC процессорларындағы ішкі микрокодты орындау, керісінше, нақты жобалауға байланысты аз немесе көп құбырлы болуы мүмкін, сондықтан RISC процессорларының негізгі құрылымына аз немесе көп ұқсас. CDC 6600 суперкомпьютері, алғаш рет 1965 жылы пайдалануға берілді, сонымен қатар РИСК ретінде сипатталды. Ол бағдарламалық басқарумен бір мезгілде бес жүктеу және екі сақтау операциясын жүзеге асыруға мүмкіндік беретін жүктеу-сақтау архитектурасына ие болды. Сонымен қатар, бір уақытта жұмыс істейтін бірнеше функциялық блоктары болды.
Суперскалярлық
Қазіргі заманғы контексте, кейбір типтік CISC архитектуралары қолданатын күрделі өзгермелі ұзындықпен кодтау CISC бағдарламалау моделінің суперскалярлық жүзеге асырылуын тікелей құруды қиындатады, бірақ бәрібір мүмкін етеді; Pentium-ның бастапқы суперскалярлық нұсқасы және Cyrix 6x86 суперскалярлы нұсқасы осыған жақсы мысалдар. Типтік CISC машинасының операторларына жиі жадқа қол жеткізу, кодтан алынатын нұсқаулық деңгейіндегі параллелизмді шектеуі мүмкін, бірақ бұл қазіргі заманғы құрылымдарда қолданылатын жылдам кэштермен, сондай-ақ басқа да шаралармен күшті түрде реттеледі. Өзінен-өзі ықшам және мағыналық жағынан бай нұсқауларға байланысты, машиналық код бірлігіне (яғни байтқа немесе битке) жұмсалатын орташа жұмыс көлемі CISC үшін RISC процессорына қарағанда жоғары, бұл оған қазіргі заманғы кэш негізіндегі жүзеге асыруда маңызды артықшылық бере алады. Логика, PLA және микрокод үшін транзисторлар енді тапшы емес; бүгінде тек үлкен, жоғары жылдамдықты кэш жадтары транзисторлардың максималды санымен шектеледі. CISC декодерлерінің транзисторлар саны күрделі болғанымен, процессордағы транзисторлардың жалпы саны сияқты экспоненциалды түрде өспейді (көбінесе кэштер үшін қолданылады). Жақсы құралдар мен жетілдірілген технологиялармен бірге бұл жүктеу-сақтау шектеулері жоқ (яғни RISC емес) жоғары кодталған және өзгермелі ұзындықтағы жобалардың жаңа жүзеге асырылуына әкелді. Бұл кең таралған x86 (төменде қараңыз) сияқты ескі архитектураларды қайта жүзеге асыруды, сондай-ақ кіріктірілген жүйелерге арналған микроконтроллерлерді және осыған ұқсас қолдануларды жаңа жобалауды қамтиды. Қазіргі x86 үшін суперскалярлық күрделілік нұсқауларды бір немесе бірнеше микрооперацияларға түрлендіру және осы микрооперацияларды динамикалық түрде орындау арқылы шешілді, яғни жанама және динамикалық суперскалярлық орындау; Pentium Pro және AMD K5 осыған алғашқы мысалдар. Бұл (құрылымы күрделі) декодерлерден (және буферлерден) кейін салыстырмалы түрде қарапайым суперскалярлық дизайнды орналастыруға мүмкіндік береді, осылайша көп жағдайда екі әлемнің де ең жақсысын ұсынады. Бұл техника IBM z196 және одан кейінгі z/Architecture микропроцессорларында да қолданылады.
CISC және RISC терминдері
CISC және RISC терминдері CISC және RISC жобаларының және оларды іске асырудың үнемі дамуымен қатар маңызын жоғалтты. Intel, AMD, Cyrix және IBM компанияларының 486 процессорлары сияқты алғашқы жоғары (немесе тығыз) конвейерленген x86 процессорлары бұрынғы нұсқауларын толығымен қолдады, бірақ максималды тиімділікке тек өте қарапайым x86 жиынтығында ғана қол жеткізді, ол әдеттегі RISC нұсқаулар жиынтығынан аздап ғана артық болды (яғни, RISC-ке тән жадтан жүктеу-сақтау шектеулері болмады). Intel P5 Pentium процессорлары осы қағидалардың суперскалярлық нұсқасы болды. Дегенмен, қазіргі x86 процессорлары әдетте нұсқауларды ішкі буферде сақталатын микрооперациялардың динамикалық тізбегіне декодтап, бөледі, бұл нұсқаулардың кең ауқымын конвейерлік (бір-бірімен қабаттасқан) режимде орындауға және код ағынынан параллелизмді одан да жоғары деңгейде шығаруға мүмкіндік береді, осылай өнімділікті арттырады. Көптеген жөнге келтірулерде (кейбір академиялық мәтіндерде де кездесетін) айтылғандай, барлық CISC процессорлары микрокодталған немесе "құрылымды" нұсқауларға ие болмайды. CISC термині жадтан жүктеу-сақтау (RISC) архитектурасынан өзгеше кез келген нәрсені білдіретін жалпы атауға айналғандықтан, CISC-ті анықтайтын нұсқаулардың саны немесе оларды іске асырудың немесе нұсқаулардың күрделілігі емес, арифметикалық нұсқаулардың жадқа да қол жеткізу қабілеті болып табылады. Шағын 8 биттік CISC процессорымен салыстырғанда, RISC процессорларының қозғалатын нүктелік нұсқаулары күрделі болуы мүмкін. CISC процессорларына күрделі адрестеу режимдерінің қажеті жоқ; 32 немесе 64 биттік RISC процессорлары шағын 8 биттік CISC процессорларынан гөрі күрделі адрестеу режимдеріне ие болуы мүмкін. PDP 10, PDP 8, Intel 80386, Intel 4004, Motorola 68000, System z мэйнфреймі, Burroughs B5000, VAX, Zilog Z80000 және MOS Technology 6502 процессорлары нұсқаулардың саны, мөлшері және форматы, регистрлердің саны, түрлері мен мөлшері және қол жетімді дерек түрлері бойынша кеңінен ерекшеленеді. Кейбір процессорларда кішкентай тізбелерді іздеу, кез келген дәлдіктегі BCD арифметикасы немесе трансценденттік функциялар сияқты операцияларға аппараттық қолдау бар, ал басқаларында тек 8 биттік қосу және алу операциялары бар. Бірақ олардың барлығы CISC санатына жатады, себебі оларда жад мазмұнын жүктеу және/немесе сақтау операцияларын нақты есептеулерді орындаумен бірге жүзеге асыратын "жүктеу-жұмыс" нұсқаулары бар. Мысалы, тек 8 тұрақты ұзындығы бар нұсқаулары бар және микрокоды жоқ PDP 8 процессоры, нұсқаулардың жұмыс істеу принципіне байланысты CISC болып табылады. PowerPC, 230-дан астам нұсқауға (кейбір VAX процессорларынан көп) және регистрді қайта атау және буферді қайта реттеу сияқты күрделі ішкі құрылымдарға ие болса да, RISC болып табылады, ал Minimal CISC процессорлары 8 нұсқауға ие болғанымен, жадқа қол жеткізу және есептеуді бір нұсқауда біріктіретіндігіне байланысты CISC болып саналады.
Жалпы сілтемелер
Таненбаум, Эндрю С. (2006) Құрылымдық компьютер ұйымы, Бесінші басылым, Pearson Education, Inc. Upper Saddle River, NJ.