Кіріспе

Инструкциялық құбыржол

Компьютерлік аппараттар тарихында, кейбір ертедегі қысқартылған нұсқаулар жиынтығы компьютерлік орталық процессорлары (RISC CPU) қазір классикалық RISC құбыржолы деп аталатын өте ұқсас архитектуралық шешімді қолданды. Осы процессорлар: MIPS, SPARC, Motorola 88000, және кейіннен білім беру мақсатында жасалған DLX процессоры. Бұл классикалық скалярлық RISC жүйелерінің әрқайсысы цикл сайын бір нұсқауды іздеп, орындауға тырысады. Әрбір жобаның негізгі ортақ ұғымы – бес кезеңді нұсқауларды орындау құбыржолы. Жұмыс істеу кезінде құбыржолдың әрбір кезеңі бір уақытта бір нұсқаумен жұмыс жасайды. Осы кезеңдердің әрқайсысы күйді сақтауға арналған триггерлер жиынтығынан және осы триггерлердің шығыстарымен жұмыс істейтін комбинациялық логикадан тұрады.

Нұсқауды алу

Нұсқаулар бір циклді оқуға қажетті жадта сақталады. Бұл жад SRAM-ға немесе нұсқаулық кэшке арналуы мүмкін. Компьютерлік ғылымда "латенция" термині жиі қолданылады және ол операция басталғаннан аяқталғанға дейінгі уақытты білдіреді. Осылайша, нұсқауды алудың латенциясы бір сағат циклына тең (бір циклдік SRAM қолдансаңыз немесе нұсқау кэште болса). Осылайша, Instruction Fetch кезеңінде 32 биттік нұсқаулық жадтан алынады. Бағдарлама санағышы (Program Counter), немесе PC – нұсқаулық жадқа ұсынылатын мекенжайды сақтайтын регистр. Адрес циклдің басында нұсқаулық жадқа беріледі. Содан кейін цикл ішінде нұсқаулық жадтан нұсқау оқылады, және бір уақытта келесі PC-ні анықтау үшін есептеу жүргізіледі. Келесі PC, PC-ні 4-ке арттыру арқылы және осыны келесі PC ретінде қабылдау немесе тармақтану/секіру есептеуінің нәтижесін келесі PC ретінде қабылдау арқылы есептеледі. Классикалық RISC-де барлық нұсқаулардың ұзындығы бірдей болады. (Бұл RISC-ті CISC-тен ажырататын бір ерекшелік). Бастапқы RISC жобаларында нұсқаудың көлемі 4 байт, сондықтан нұсқаудың мекенжайына әрқашан 4 қосыңыз, бірақ тармақтану, секіру немесе қателік болған жағдайда PC + 4 қолданбаңыз (төмендегі кідірілген тармақтарды қараңыз). (Кейбір заманауи құрылғылар келесі нұсқаулық мекенжайын болжау үшін күрделі алгоритмдерді (тармақ болжау және тармақ мақсаты болжау) қолданатынын ескеріңіз.)

Нұсқаулық кодтау

Тағы бір мәселе, алғашқы RISC машиналарын ескі CISC машиналарыннан ерекшелендіретін нәрсе – RISC-те микрокодтың болмауы. CISC микрокодталған нұсқауларының жағдайында, нұсқаулар кэшінен алынғаннан кейін, нұсқау биттері құбыр арқылы жылжытылады, онда құбырдың әрбір сатысындағы қарапайым комбинациялық логика тікелей нұсқау биттерінен дерек жолы үшін басқару сигналдарын жасайды. CISC құрылымдарында, дәстүрлі түрде «декодирование» сатысы деп аталатын кезеңде өте аз декодирование жасалады. Декодированиедің жеткіліксіздігінен нұсқаудың не істейтінін көрсету үшін көбірек нұсқау биттерін пайдалану қажет. Бұл регистр индекстері сияқты мәліметтерге азырақ биттерді қалдырады. Барлық MIPS, SPARC және DLX нұсқауларында ең көп дегенде екі регистрлік кіріс болады. Декодирование сатысында осы екі регистрдің индекстері нұсқаудың ішінде анықталады және индекстер регистр жадына адрес ретінде жіберіледі. Осылайша, аталған екі регистр тізілім файлынан оқылады. MIPS құрылымында тізілім файлында 32 жазба бар. Тізілім файлы оқылғанда, осы сатызда нұсқауды орындауға құбыр дайын екенін анықтайтын нұсқауды беру логикасы жұмыс істейді. Егер дайын болмаса, нұсқауды беру логикасы нұсқауды алу және декодирование сатысын тоқтатуға себеп болады. Тоқтату циклында кіріс флип-флоптары жаңа биттерді қабылдамайды, сондықтан сол циклде жаңа есептеулер орындалмайды. Егер декодированиеленген нұсқау тармақтану немесе секіру болса, тармақтанудың немесе секірудің мақсатты адресі тізілім файлын оқумен бірге есептеледі. Тармақтану шарты келесі циклда есептеледі (тізілім файлы оқылғаннан кейін), және егер тармақтану орын алса немесе нұсқау секіру болса, бірінші сатыздағы PC есептелген PC-ге емес, тармақтану мақсатына тағайындалады. Кейбір архитектуралар Арифметикалық-логикалық құрылғыны (ALU) Орындау сатысында пайдаланды, бірақ бұл нұсқаулардың өнімділігін сәл төмендетті. Декодирование сатысы көптеген аппараттық құралдармен аяқталды: MIPS екі регистр тең болса тармақтану мүмкіндігіне ие, сондықтан 32 биттік AND ағашы тізілім файлын оқығаннан кейін тізбектей жұмыс істейді, бұл сатыздан өте ұзын сындық жолға әкеледі (яғни секундқа азырақ циклдер). Сонымен қатар, тармақтану мақсатын есептеу әдетте 16 биттік қосу және 14 биттік инкрементаторды қажет етеді. Декодирование сатысында тармақтануды шешу бір циклдық тармақ қателігін болжауға мүмкіндік берді. Тармақтанулар жиі орын алғандықтан (осылайша қате болжау жиі кездесетін), бұл жазаны төмен ұстау өте маңызды болды.

Жадына қатынау

Егер дерек жадына қол жеткізу қажет болса, ол осы кезеңде жүзеге асырылады. Осы кезеңде бір циклдік кешігу нұсқаулары өз нәтижелерін тікелей келесі кезеңге жібереді. Бұл жіберу бір және екі циклдік нұсқаулардың нәтижелерін құбырдың бір кезеңіне жазуын қамтамасыз етеді, соның арқасында тіркелімдер жиымына тек бір жазу порты қолданылады және ол әрқашан бос болады. Тікелей бейнелеу және виртуалды таңбалау схемасын қолданатын дерек кэштеуінде, көптеген дерек кэші ұйымдарының ішіндегі ең қарапайымында, екі SRAM пайдаланылады – біреуі деректерді, екіншісі таңбаларды сақтайды.

Қайта жазу

Бұл кезеңде бір циклді және екі циклді нұсқаулар өз нәтижелерін регистрлік файлға жазады. Екі түрлі кезең бір уақытта регистрлік файлға қол жеткізеді: декодтау кезеңі екі бастапқы регистрді оқиды, ал кері жазу кезеңі бұрынғы нұсқаудың мақсаттық регистрін жазады. Нағыз кремнийде бұл қауіп тудыруы мүмкін (қауіптер туралы толығырақ ақпарат алу үшін төмен қараңыз). Себебі декодтау кезеңінде оқылатын бастапқы регистрлердің бірі, кері жазу кезеңінде жазылатын мақсаттық регистрмен сәйкес келуі мүмкін. Ондай жағдайда регистрлік файлдағы жад жасушалары бір уақытта оқылып та, жазылып та тұрады. Кремнийдегі жад жасушаларының көптеген түрлері бір уақытта оқылып, жазылғанда дұрыс жұмыс істемейді.

Қауіптер

Хеннесси мен Паттерсон құбыржолдағы командалар қате нәтижелерге әкелетін жағдайлар үшін «қауіп» терминін енгізді.

Құрылымдық қауіптер

Құрылымдық қауіптер екі нұсқау бір уақытта бірдей ресурстарды пайдалануға тырысқанда туындайды. Классикалық RISC құбырлары осы қауіптерден аппараттық құралдарды көбейту арқылы сақтануға тырысты. Атап айтқанда, тармақталу нұсқаулары тармақтың мақсатты мекенжайын есептеу үшін ALU-ды пайдаланатын. Егер ALU осы мақсатта декодтау кезеңінде қолданылса, онда ALU нұсқауын ұстанғаннан кейін тармақталу нұсқаулары екеуі де бір уақытта ALU-ды пайдалануға тырысқан болар еді. Бұл қақтығысты декодтау сатысына арнайы тармақ мақсатты қосу құрылғысын енгізу арқылы оңай шешуге болады.

Ерекшеліктер

32 биттік RISC екі үлкен санды қосу үшін ADD нұсқауын өңдейді, ал нәтиже 32 битке сыймайды. Көптеген архитектуралар ұсынатын ең қарапайым шешім – оралымдық арифметика. Мүмкіндігінше ең жоғары кодталған мәннен үлкен сандардың жоғары разряды кесіліп, сыюға дейін азайтылады. Кәдімгі бүтін сандар жүйесінде 3000000000+3000000000=6000000000 болады. Ал 32 биттік оралымдық арифметикада 3000000000+3000000000=1705032704 (6000000000 mod 2^32) болады. Бұл аса пайдалы көрінбесе де, оралымдық арифметиканың ең үлкен артықшылығы – әрбір операцияның нақты анықталған нәтижесі бар. Бірақ бағдарламашы, әсіресе үлкен бүтін сандарды қолдайтын тілде (мысалы, Lisp немесе Scheme) бағдарламаласа, оралымдық арифметиканы қаламайды. Кейбір архитектуралар (мысалы, MIPS) нәтижені ораудың орнына, ағын кезінде ерекше жағдайларда арнайы орындарға өтетін қосымша операцияларды анықтайды. Осы жағдайда, мақсатты жердегі бағдарламалық қамтамасыз ету мәселені шешуге жауапты болады. Бұл ерекше өту ерекше жағдай деп аталады. Ерекше жағдайлар кәдімгі өтулерден өзгеше, себебі мақсатты мекенжай нұсқаудың өзінде көрсетілмейді және өту шешімі нұсқаудың нәтижесіне байланысты болады. Классикалық RISC машиналарының біріндегі бағдарламалық қамтамасыз етуде ең көп кездесетін ерекше жағдай – TLB қатесі. Ерекше жағдайлар өтулер мен секірулерден де өзгеше, себебі басқа басқару ағыны өзгерістері кодтау кезеңінде шешіледі. Ал ерекше жағдайлар қайта жазу кезеңінде шешіледі. Ерекше жағдай анықталғанда, одан кейінгі нұсқаулар (құбырдың басында) жарамсыз деп белгіленеді және құбырдың соңына жеткенде олардың нәтижелері жойылады. Бағдарлама санағы ерекше жағдайды өңдеушінің мекенжайына орнатылады, ал ерекше жағдайдың орналасуы мен себебі арнайы тіркегіштерге жазылады. Бағдарламалық қамтамасыз етудің мәселені оңай (және жылдам) шешіп, бағдарламаны қайта іске қосуы үшін процессор нақты ерекше жағдайды анықтауы керек. Нақты ерекше жағдай дегеніміз, ерекше жағдайға дейінгі барлық нұсқаулар орындалған, ал ерекше жағдай және одан кейінгі нұсқаулар орындалмаған. Нақты ерекше жағдайларды анықтау үшін процессор бағдарламалық тәртіппен бағдарламалық қамтамасыз етудің көрінетін күйіне өзгерістер енгізуі керек. Бұл тәртіп классикалық RISC құбыржолында өте табиғи түрде жүзеге асырылады. Көптеген нұсқаулар өз нәтижелерін тіркегіштерге қайта жазу кезеңінде жазады, сондықтан бұл жазулар автоматты түрде бағдарламалық тәртіппен орындалады. Дегенмен, сақтау нұсқаулары өз нәтижелерін қол жеткізу кезеңінде сақтау деректері кезегіне жазады. Егер сақтау нұсқаулығы ерекше жағдайға тап болса, сақтау деректері кезегінің жазбасы жарамсыз деп танылады, сондықтан ол кейінірек SRAM деректеріне жазылмайды.

Кэш қатесімен жұмыс істеу

Кейде дерек кэшінде немесе нұсқаулық кэшінде қажетті дерек немесе нұсқаулық болмайды. Мұндай жағдайларда, процессор кэш қажетті деректермен толтырылғанға дейін жұмысын тоқтатуы керек, содан кейін орындауды қайта бастауы керек. Кэшке қажетті деректерді толтыру (және мүмкін, кэш жолын жадқа қайта жазу) мәселесі құбыр желісінің ұйымдасқандығына тән емес және бұл жерде талқыланбайды. Тоқтату/қайта бастау мәселесін шешудің екі стратегиясы бар. Біріншісі – жаһандық тоқтату сигналы. Бұл сигнал қосылғанда, нұсқаулардың құбыр бойымен жылжуына кедерес келтіреді, әдетте әр кезеңнің басындағы триггерлерге (flip-flops) сағатты тоқтату арқылы. Бұл стратегияның кемшілігі – триггерлердің көп саны болғандықтан, жаһандық тоқтату сигналының таралуына көп уақыт қажет. Машина, әдетте, тоқтатуды қажет ететін жағдайды анықтаған циклде тоқтатуға тиіс болғандықтан, тоқтату сигналы жылдамдық шектеуші маңызды тізбекке айналады. Тоқтатуды/қайта бастауды басқарудың тағы бір стратегиясы – ерекше жағдай логикасын қайта пайдалану. Машина кінәлі нұсқаулық бойынша ерекше жағдайды тудырады, ал қалған барлық нұсқаулар күшін жояды. Кэш қажетті деректермен толтырылғаннан кейін, кэш қатесіне себеп болған нұсқаулық қайта іске қосылады. Дерек кэшіндегі қателерді өңдеуді жеделдету үшін, нұсқаулықты дерек кэші толтырылғаннан кейін бір циклде қайта іске қосуға болады.