Кіріспе

Компьютерлік нұсқаулар жиынтығының түрі
Компьютерлік инженерияда ортогональды нұсқаулар жиынтығы – барлық нұсқау түрлерінің барлық адрестеу режимдерін пайдалана алуына мүмкіндік беретін нұсқаулар жиынтығының архитектурасы. Ол "ортогональды" термині нұсқау түрі мен адрестеу режимінің тәуелсіз түрде өзгеруін білдіреді. Ортогональды нұсқаулар жиынтығы белгілі бір нұсқаудың нақты бір регистрді қолдануын қажет ететін шектеулерді қоймайды, сондықтан нұсқаулардың функционалдығының қайталануы азаяды. Ортогоналдылық 1970-ші жылдары процессорларды жобалаушылардың маңызды мақсаты саналды, ал VAX 11 көбінесе осы ұғымның өлшемі ретінде қолданылады. Дегенмен, 1980-ші жылдары RISC жобалау философиясының пайда болуы ортогоналдылыққа қарсы бағытты күрт өзгертті. Қазіргі заманғы процессорлар (CPU) көбінесе RISC сияқты ядрода нақты тапсырмаларды орындау алдында, алдын ала өңдеу кезеңінде ортогоналдылықты модельдейді. Бұл "модельделген ортогоналдылық" жалпы алғанда, математикалық ұғымдағыдай, функциялық кітапханалардағы байланыссыздық және толықтық сияқты кең ұғымды қамтиды: ортогональды функциялар жиынтығын кеңейтілген функциялардың негізі ретінде қолдану оңай, өйткені бір бөлігін өзгерткенде, қалған бөліктерге әсер етпейді.

Негізгі түсініктер

Негізгі мақсаттағы барлық компьютерлер бірдей принцип бойынша жұмыс істейді; негізгі жадыда сақталған деректер орталық процессор (CPU) арқылы жылдам уақытша жадыға (мысалы, CPU регистрлері) оқылады, өңделеді, содан кейін негізгі жадыға қайта жазылады. Жад – деректердің сандар түрінде кодталған және олардың мекенжайлары арқылы анықталатын мәндер жиынтығы. Бұл деректерге қолданылатын операцияларды мекенжайларға да қолдануға болады дегенді білдіреді. Деректер өңделу кезінде процессордың регистрлерінде уақытша сақталуы мүмкін, оларға өте жылдам қол жеткізуге болады. Мысалы, сандар тізбегін қосып, жалпы соманы есептеу үшін регистрлер қолданылады.

8080 және одан кейінгі үлгілер

8 биттік Intel 8080 (сондай-ақ 8085 және 8051) микропроцессоры негізінен сәл кеңейтілген аккумуляторға негіделген құрылымға ие болғандықтан, ортогональ емес еді. Ассемблерде бағдарламалаушы немесе компилятор жазушы әрбір тіркелгіште қандай операциялар орындалатынын ескеруі қажет болды: Көптеген 8 биттік операциялар тек 8 биттік аккумуляторда (A тіркелгіші) ғана орындалуы мүмкін, ал 16 биттік операциялар тек 16 биттік көрсеткіш/аккумуляторда (HL тіркелгіш жұбы) орындалуы мүмкін, ал арттыру сияқты қарапайым операциялар барлық жеті 8 биттік тіркелгіште орындалуы мүмкін еді. Бұл, негізінен, барлық операциялық кодтарды бір байттық ұзындықта ұстау тілегімен байланысты болды. Екілік үйлесімді Z80 кейіннен осы 1 байттық шектеуден шығу үшін префикс кодтарын қосты және күштірек нұсқаулар жиынтығын қамтамасыз етті. Intel 8086 үшін де осы негізгі идея қолданылды, бірақ одан да радикалды кеңейтулерді енгізу үшін 8080-мен толық үйлесімділікке ұмтылмады. Ол сол кезде кодтың тығыздығын жоғары ұстау үшін белгілі бір деңгейде ортогональ емес күйін сақтады. 80386 арқылы енгізілген осы архитектураның 32 биттік кеңейтімі, барлық 8086 нұсқауларын және олардың кеңейтілген нұсқаларын сақтап қалғанмен, біршама ортогональды болды. Дегенмен, қолданылған кодтау стратегиясы әлі де 8008 және 8080 (және Z80) архитектураларының көптеген іздерін көрсетіп тұр. Мысалы, тіркелгіштер мен тұрақтыларды жинау және алу сияқты жиі орындалатын операциялар үшін бір байттық кодтамалар сақталады; ал негізгі аккумулятор, EAX тіркелгіші, кейбір операция түрлерінде басқа тіркелгіштерге қарағанда қысқа кодтамаларды қолданады. Мұндай байқаулар компиляторларда да, қолмен жазылған кодта да кодты оңтайландыру үшін кейде пайдаланылады.

RISC

1970-ші жылдардағы бірқатар зерттеулер ортогональды режимдер ұсынатын икемділіктің нақты мәселелерде сирек немесе ешқашан қолданылмағанын көрсетті. Атап айтқанда, IBM компаниясында System/370 жүйесінде іске қосылған кодтың іздерін зерттеу нәтижесінде, қолданыстағы режимдердің тек бір бөлігі ғана нақты бағдарламаларда пайдаланылғаны анықталды. VAX процессорлары туралы ұқсас зерттеулер де осы үрдісті көрсетті. Кейбір жағдайларда нұсқаулардың күрделілігі олардың орындалуына кішірек нұсқаулар тізбегіне қарағанда көбірек уақыт кеткенін көрсетті, мұнда VAX процессорларының INDEX нұсқауы классикалық мысал болып табылады. Осы кезеңде жартылай өткізгіш жадтың көлемі жылдам өсіп, құны төмендеді. Дегенмен, оның жылдамдығы да сондай қарқынмен жақсармады. Бұл жадтан деректерді алуға кеткен уақыт CPU жылдамдығымен салыстырғанда артып келе жатқанын білдірді. Осыған байланысты, процессордың жұмыс істеуі үшін уақытша мәндерді ұсыну мақсатында, регистрлер санын арттыру қажеттігі туындады. Регистрлердің санының артуы компьютерлік сөздің биттерінде регистр нөмірін кодтау үшін көбірек орын қажет екенін білдірді, бұл нұсқаулардың өзін қысқартуға ықпал етті. Соңында, Эндрю Таненбаумның жариялаған мақаласы бағдарламадағы барлық тұрақты шамалардың 97%-ы 0 мен 10 аралығында екенін, ал 0 саны барлық тұрақты шамалардың 20-30%-ын құрайтынын көрсетті. Бұдан өзге, бағдарламадағы барлық мәндердің 30-40%-ы тұрақты шамалар, ал қарапайым айнымалылар (массивтер сияқты емес) тағы 35-40%-ын құрайды. Егер процессор үлкен нұсқау сөзін қолданса, мысалы, 32 бит, онда екі регистр нөмірі мен тұрақты шама бір нұсқауда кодтала алады, егер нұсқаудың өзі тым көп биттерді пайдаланбаса. Осы байқаулар процессорды жобалаудың басты мақсаты ретінде ортогональды дизайннан бас тартуға және 1980-ші жылдарда RISC философиясының қалыптасуына әкелді. RISC процессорлары әдетте тек екі адрестеу режимін қолданады: тікелей (тұрақты) және регистрлік. Ескі процессорларда кездесетін қалған режимдер деректерді регистрлерге және кері бағытта жылжыту үшін қолданылатын жүктеу және сақтау нұсқаулары арқылы нақты түрде жүзеге асырылады. Адрестеу режимдерінің саны шектеулі болуы мүмкін, және бұл режимдер нұсқау деректерге қатысты ма, әлде басқаруды жүзеге асыра ма, соған байланысты өзгеруі мүмкін.