Кіріспе
Компьютерлік бағдарламаның процессорға операцияларын сипаттайтын абстрактілік символдар жиынтығы. Компьютерлік ғылымда нұсқаулар жиынтығы архитектурасы (ISA) – компьютерде немесе компьютерлер отбасында бағдарламалық қамтамасыз етудің процессорды қалай басқаратынын анықтайтын абстрактілік модель. Осы ISA-да сипатталған нұсқауларды орындайтын құрылғы немесе бағдарлама, мысалы, орталық процессор (CPU), осы ISA-ның іске асырылуы деп аталады. Жалпы, ISA қолдау көрсетілетін нұсқауларды, дерек түрлерін, регистрлерді, негізгі жадты басқаруға арналған аппараттық қолдауды, маңызды мүмкіндіктерді (мысалы, жадтың тұрақтылығы, адрестеу тәсілдері, виртуалды жад) және ISA іске асырылымдарының кіріс/шығыс моделін анықтайды. ISA осы ISA-ның іске асырылымдарындағы машиналық кодтың мінез-құлқын, осы іске асырылымның ерекшеліктеріне тәуелді болмай, анықтайды, бұл іске асырылымдар арасында екілік үйлесімділікті қамтамасыз етеді. Бұл ISA-ның өнімділік, физикалық өлшем және құны (басқа факторлармен қатар) сияқты ерекшеліктерімен ерекшеленетін, бірақ бірдей машиналық кодты орындауға қабілетті бірнеше іске асырылуын қамтамасыз етеді. Сондықтан, төмен өнімділікпен, төмен құнмен жұмыс істейтін құрылғыны жоғары құнмен, жоғары өнімділікпен жұмыс істейтін құрылғымен бағдарламалық қамтамасыз етуді ауыстыру қажеттігі болмайды. Бұл ISA іске асырылымдарының микроархитектурасының дамуына да мүмкіндік береді, сондықтан ISA-ның жаңа, жоғары өнімділікпен жұмыс істейтін нұсқасы бұрынғы буын нұсқаларында жұмыс істейтін бағдарламалық қамтамасыз етуді орындай алады. Егер операциялық жүйе белгілі бір ISA үшін стандартты және үйлесімді қолданбалық екілік интерфейс (ABI) сақтаса, машиналық код сол ISA мен операциялық жүйенің болашақ нұсқаларында орындалады. Алайда, егер ISA бірнеше операциялық жүйені қолдаса, бір операциялық жүйеге арналған машиналық кодтың басқа операциялық жүйеде орындалатынына кепілдік берілмейді, егер бірінші операциялық жүйе екіншісі үшін құрастырылған машиналық кодты орындауды қолдаса ғана. ISA-ны жаңа нұсқаулар немесе мүмкіндіктер қосу арқылы, сондай-ақ үлкен адрестер мен деректерді қолдау арқылы кеңейтуге болады. Кеңейтілген ISA-ның іске асырылуы ISA-ның осы кеңейтулер жоқ нұсқалары үшін машиналық кодты орындай алады. Бұл кеңейтулерді пайдаланатын машиналық код тек оларды қолдайтын іске асырылымдарда ғана орындалады. Олармен қамтамасыз етілетін екілік үйлесімділік ISA-ны есептеудегі ең маңызды абстракциялардың біріне айналдырады.
In computer science, an instruction set architecture (ISA) is an abstract model that generally defines how software controls the CPU in a computer or a family of computers. A device or program that executes instructions described by that ISA, such as a central processing unit (CPU), is called an implementation of that ISA. In general, an ISA defines the supported instructions, data types, registers, the hardware support for managing main memory, fundamental features (such as the memory consistency, addressing modes, virtual memory), and the input/output model of implementations of the ISA. An ISA specifies the behavior of machine code running on implementations of that ISA in a fashion that does not depend on the characteristics of that implementation, providing binary compatibility between implementations. This enables multiple implementations of an ISA that differ in characteristics such as performance, physical size, and monetary cost (among other things), but that are capable of running the same machine code, so that a lower performance, lower cost machine can be replaced with a higher cost, higher performance machine without having to replace software. It also enables the evolution of the microarchitectures of the implementations of that ISA, so that a newer, higher performance implementation of an ISA can run software that runs on previous generations of implementations. If an operating system maintains a standard and compatible application binary interface (ABI) for a particular ISA, machine code will run on future implementations of that ISA and operating system. However, if an ISA supports running multiple operating systems, it does not guarantee that machine code for one operating system will run on another operating system, unless the first operating system supports running machine code built for the other operating system. An ISA can be extended by adding instructions or other capabilities, or adding support for larger addresses and data values; an implementation of the extended ISA will still be able to execute machine code for versions of the ISA without those extensions. Machine code using those extensions will only run on implementations that support those extensions. The binary compatibility that they provide makes ISAs one of the most fundamental abstractions in computing.
Шолу
Нұсқаулар жиынтығының архитектурасы микроархитектурадан ерекшеленеді, ол – нақты бір процессорда нұсқаулар жиынтығын іске асыру үшін қолданылатын процессорды жобалау техникаларының жиынтығы. Әртүрлі микроархитектурасы бар процессорлар бірдей нұсқаулар жиынтығын бөлісе алады. Мысалы, Intel Pentium және AMD Athlon процессорлары дерлік бірдей x86 нұсқаулар жиынтығын іске асырады, бірақ олардың ішкі құрылымы түбегейлі түрде өзгеше. Архитектура ұғымын, нақты машинаның дизайнынан айрықша ерекшеленетін түсінік ретінде, IBM-дегі Фред Брукс System/360 жүйесін жобалау кезеңінде қалыптастырған. Кейбір виртуалды машиналар, мысалы Smalltalk, Java виртуалды машинасы және Microsoft-тың Common Language Runtime, байт-кодты өздерінің ISA ретінде қолданып, оны жиі қолданылатын код бөлімдерін жергілікті машина кодына аудару арқылы іске асырады. Бұған қоса, осы виртуалды машиналар сирек қолданылатын код бөлімдерін интерпретация арқылы орындайды (қараңыз: Дәл уақытта компиляция). Transmeta x86 нұсқаулар жиынтығын VLIW процессорларының негізінде осылай іске асырды.
ISA-ны жіктеу
ISA бірнеше түрлі жолмен жіктелуі мүмкін. Ең көп тарағаны – архитектуралық күрделілік бойынша жіктеу. Күрделі нұсқаулар жиынтығы (CISC) компьютерінде көптеген арнайы нұсқаулар бар, олардың кейбіреулері нақты бағдарламаларда сирек қолданылады. Азайтылған нұсқаулар жиынтығы (RISC) компьютері процессорды бағдарламаларда жиі қолданылатын нұсқауларды тиімді орындау арқылы жеңілдетеді, ал сирек қолданылатын операциялар қосымша процессор уақытын қажет ететін қосалқы бағдарламалар ретінде іске асырылады, бірақ олардың жиі қолданылмауы осы уақыт шығынын өтемелейді. Басқа түрлеріне өте ұзын нұсқау сөзі (VLIW) архитектуралары және оған тығыз байланысты, ашық түрде параллель нұсқауларды есептеу (EPIC) архитектуралары жатады. Бұл архитектуралар RISC және CISC-ке қарағанда аппараттық құралдарды аз пайдалана отырып, нұсқаулар деңгейіндегі параллелизмді пайдалануға тырысады, мұнда компилятор нұсқауларды беру және жоспарлау үшін жауапты болады. Одан да қарапайым архитектуралар зерттелді, мысалы, минималды нұсқаулар жиынтығы (MISC) компьютері және бір нұсқаулар жиынтығы (OISC) компьютері. Бұл теориялық тұрғыдан маңызды типтер, бірақ олар коммерциялық өнім ретінде шығарылмаған.
Деректерді өңдеу және жад операциялары
Тіркелгіні тұрақты мәнге орнатыңыз. Деректерді жадтан немесе тіркелгіден жадқа немесе тіркелгіге көшіру (машиналық нұсқау көбінесе "көшіру" деп аталады, бірақ бұл термин шатастыру тудыруы мүмкін). Олар тіркелгінің мазмұнын, жадтың басқа орнындағы мазмұнды немесе есептеу нәтижесін сақтау үшін, сондай-ақ сақталған деректерді кейіннен есептеу үшін алуға қолданылады. Бұлар көбінесе "жүктеу" және "сақтау" операциялары деп аталады. Аппараттық құрылғылардан деректерді оқу және жазу.
Арифметикалық және логикалық операциялар
Екі тіркелімнің мәндерін қосу, алу, көбейту немесе бөлу, нәтижені тіркелімге орналастыру, мүмкін бір немесе бірнеше жағдай кодтарын күй тізілімінде орнату. Кейбір ISA-ларда тривиальды жағдайларда operand-ты алуды сақтау мүмкіндігі бар. Биттік операцияларды орындау, мысалы, екі тіркелімдегі сәйкес келетін биттердің логикалық көбейтіндісін (conjunction) және логикалық қосылысын (disjunction) алу, тіркелімдегі әрбір биттің инверсиясын алу. Тіркелімдердегі екі мәнді салыстыру (мысалы, біреуі кішкентай немесе тең екенін анықтау). Жылжымалы нүктелі сандармен арифметикалық амалдар жасау.
Бақылау ағыны операциялары
Бағдарламаның басқа бөлігіне өту және сол жердегі нұсқауларды орындау. Белгілі бір шарт орындалған жағдайда, басқа бөлімге шартты түрде өту. Ендіремей өту. Келесі нұсқаудың орнын сақтап, басқа код блогын шақыру, содан кейін сол орналасқан жерге қайта оралу.
Копроцессордың нұсқаулары
Деректерді копроцессорға жүктеу және одан алу немесе CPU тіркелгіштерімен алмасу. Копроцессор операцияларын жүзеге асыру.
Нұсқауды кодтау
Дәстүрлі архитектураларда нұсқаулықта орындалатын операцияны анықтайтын опкод болады, мысалы, жад мазмұнын тіркелімге қосу, және нөл немесе одан көп операндар спецификаторлары, олар тіркелімдерді, жад орындарын немесе нақты деректерді көрсете алады. Операндар спецификаторларында олардың мағынасын анықтайтын адрестеу режимдері болуы мүмкін немесе олар тұрақты өрістерде орналасуы мүмкін. Өте ұзақ нұсқаулық сөз (VLIW) архитектураларында, көптеген микрокод архитектураларын қамтитындарда, бір нұсқаулықта бірнеше бір уақыттағы опкодтар мен операндар көрсетіледі. Кейбір ерекше нұсқаулар жиынтықтарында опкод өрісі болмайды, мысалы, тасымалдаудан басталатын архитектураларда (TTA), тек операндар ғана болады. Көптеген стек машиналарында "0 операнды" нұсқаулар жиынтығы бар, онда арифметикалық және логикалық операцияларда операнд спецификаторының өрістері жоқ; тек операндтарды бағалау стегіне итеру немесе стектен ауыспалыларға операндарды шығару нұсқауларында ғана операнд спецификаторлары болады. Нұсқаулар жиынтығы көптеген ALU әрекеттерін postfix (кері поляк нотациясы) операцияларымен орындайды, бұл операциялар деректер тіркелімдерімен немесе кездейсоқ негізгі жад жасушаларымен емес, тек өрнек стегімен жұмыс істейді. Бұл жоғары деңгейдегі тілдерді құрастыру үшін өте ыңғайлы болуы мүмкін, өйткені көптеген арифметикалық өрнектерді оңай постфикс нотациясына аударуға болады. Шартты нұсқаулықтарда көбінесе предикат өрісі болады – операцияны орындамаудың орнына нақты шартты кодтайтын бірнеше бит. Мысалы, шартты тармақталу нұсқаулығы, егер шарт дұрыс болса, басқаруды ауыстырады, сондықтан орындау бағдарламаның басқа бөлігіне өтеді, ал егер шарт бұрыс болса, басқаруды ауыстырмайды, сондықтан орындау тізбектеп жалғасады. Кейбір нұсқаулар жиынтықтарында шартты жылжытулар да бар, сондықтан егер шарт дұрыс болса, жылжыту орындалады және деректер мақсатты орында сақталады, ал егер шарт бұрыс болса, жылжыту орындалмайды және мақсатты орын өзгертілмейді. Сол сияқты, IBM z/Architecture шартты сақтау нұсқаулығына ие. Аз ғана нұсқаулар жиынтықтарында әрбір нұсқаулықта предикат өрісі болады; бұл тармақ предикациясы деп аталады.
Өкілдік
Бағдарламаны құрайтын нұсқаулар көбінесе олардың ішкі, сандық түрінде (машиналық кодта) берілмейді; бағдарламашылар оларды тіркеме тілі арқылы анықтаса болады, немесе одан да көп жағдайда, компиляторлар жоғары деңгейлі бағдарламалау тілдерінен жасап шығарады.
Дизайн
Нұсқаулар жиынтығын жобалау күрделі мәселе. Микропроцессор тарихында екі кезең болды. Біріншісі – CISC (Күрделі нұсқаулар жиынтығын қолданатын компьютер), онда көптеген әртүрлі нұсқаулар болды. Алайда, 1970 жылдары IBM сияқты ұйымдар зерттеу жүргізіп, жиынтықтағы көптеген нұсқауларды жоюға болатындығын анықтады. Соның нәтижесінде RISC (Қысқартылған нұсқаулар жиынтығын қолданатын компьютер) пайда болды, бұл нұсқаулардың кішірек жиынтығын пайдаланатын архитектура. Жақсырақ нұсқаулар жиынтығы жоғары жылдамдыққа, процессордың кішірек мөлшеріне және қуатты аз тұтынуға мүмкіндік береді. Дегенмен, күрделі жиынтықтар ортақ операцияларды оңтайландыруға, жад пен кэштің тиімділігін арттыруға немесе бағдарламалауды жеңілдетуге болады. Кейбір нұсқаулар жиынтығын жобалаушылар жүйелік шақыру немесе бағдарламалық үзіліс үшін бір немесе бірнеше операциялық кодтарды (опкодтарды) резервтейді. Мысалы, MOS Technology 6502 00H қолданады, Zilog Z80 C7, CF, D7, DF, E7, EF, F7, FFH сегіз кодты қолданады, ал Motorola 68000 A000–AFFFH диапазонындағы кодтарды қолданады. Егер нұсқаулар жиынтығы Попек пен Голдбергтің виртуализация талаптарына жауап берсе, жылдам виртуалды машиналарды жүзеге асыру әлдеқайда оңай болады. Иммунитетке сезімтал бағдарламалауда қолданылатын NOP слайдын жүзеге асыру, егер жадтың «бағдарламаланбаған» күйі NOP ретінде қарастырылса, оңайырақ. Көп процессорлы жүйелерде, егер нұсқаулар жиынтығы «алып қою және қосу», «жүктеу сілтемесі / сақтау шарты» (LL/SC) немесе «атомдық салыстыру және алмастыру» сияқты функцияларды қолдаса, бұғаттамайтын синхрондау алгоритмдерін жүзеге асыру оңайырақ.