Համակարգչային ճարտարապետություն

[alt=|thumb|481x481px|Համակարգչի հիմնական բլոկ-սխեման միապրոցեսորային [Մշակիչ|CPU-ով։ Սև գծերը ցույց են տալիս կառավարման հոսքը, իսկ կարմիր գծերը՝ տվյալների հոսքը: Սլաքները ցույց են տալիս հոսքի ուղղությունը:]]
**Համակարգչային ճարտարապետություն** (), համակարգչային գիտության և ճարտարագիտության մեջ համակարգչային սիստեմի կառուցվածքի նկարագրություն՝ կազմված բաղադրիչ մասերից։ Երբեմն այն կարող է լինել բարձր մակարդակի նկարագրություն, որն անտեսում է իրացման մանրամասները։ Ավելի մանրամասն մակարդակում նկարագրությունը կարող է ներառել հրահանգների հավաքածուի ճարտարապետության նախագծումը (Instruction Set Architecture), միկրոճարտարապետության նախագծումը, տրամաբանական նախագծումը և իրականացումը:

## Պատմություն
Առաջին փաստագրված համակարգչային ճարտարապետությունը եղել է Չարլզ Բեբիջի և Ադա Լավլեյսի միջև նամակագրության մեջ, որտեղ նկարագրվում էր վերլուծական շարժիչը։ 1936 թվականին Կոնրադ Ցուզեն, Z1 համակարգիչը կառուցելու ընթացքում, իր ապագա նախագծերի համար երկու արտոնագրային հայտերում նկարագրել է հիշողության մեջ պահվող ծրագրի հայեցակարգը՝ նշելով, որ մեքենայի հրահանգները կարող են պահվել այն նույն հիշողության մեջ, որն օգտագործվում է տվյալների համար։

Եվս երկու վաղ կարևոր օրինակներ են.

* Ջոն վոն Նեյմանի 1945 թվականի «EDVAC-ի վերաբերյալ զեկույցի առաջին տարբերակ» (First Draft of a Report on the EDVAC) հոդվածը, որտեղ նկարագրվում էր տրամաբանական տարրերի կազմակերպությունը:
* Ալան Թյուրինգի  «Առաջարկվող էլեկտրոնային հաշվիչ ավտոմատ հաշվողական շարժիչի համար» (Proposed Electronic Calculator for the Automatic Computing Engine) ավելի մանրամասն հոդվածը (կրկին 1945 թվական), որը հղում էր կատարում Ջոն վոն Նեյմանի հոդվածին:

«Ճարտարապետություն» տերմինը համակարգչային գրականության մեջ կարելի է կապել Լայլ Ռ. Ջոնսոնի և Ֆրեդերիկ Բրուքսի աշխատանքների հետ, ովքեր 1959 թվականին IBM-ի հիմնական հետազոտական կենտրոնի «Մեքենայական կազմակերպում» բաժնի անդամներ էին։ Ջոնսոնը հնարավորություն է ունեցել գրելու IBM 7030 Stretch-ի՝ IBM-ի կողմից Լոս Ալամոսի Ազգային լաբորատորիայի համար մշակված սուպերհամակարգչի մասին։ Որպեսզի նկարագրեր այն մակարդակը, որտեղ պետք էր քննարկել այս «շքեղորեն զարդարված» համակարգիչը, նա նշել է, որ իր նկարագրությունները՝ ձևաչափերի, հրահանգների տիպերի, սարքավորումների պարամետրերի և արագության բարելավումների վերաբերյալ, գտնվում են «համակարգի ճարտարապետության» մակարդակում, մի տերմին, որը, նրա կարծիքով, ավելի կիրառելի և համապատասխան էր, քան «մեքենայական կազմակերպում»-ը:

Հետագայում Բրուքսը՝ Stretch-ի նախագծողներից մեկը, «Համակարգչի պլանավորում. Stretch նախագիծ» գրքի 2-րդ գլխուխը սկսել է՝ ասելով. «Համակարգչային ճարտարապետությունը, ինչպես մյուս ճարտարապետությունները, արվեստ է, որը որոշում է օգտագործողի կարիքները և նախագծում է դրանք հնարավորինս արդյունավետ կերպով՝ հաշվի առնելով տնտեսական և տեխնոլոգիական սահմանափակումները»։

Բրուքսը շարունակել է օգնել IBM System/360 (այժմ՝ IBM zSeries) համակարգերի շարքի մշակմանը, որտեղ «ճարտարապետություն» տերմինը դարձել է գոյական, որը սահմանում էր «այն, ինչը պետք է իմանա օգտագործողը».: Հետագայում համակարգչի օգտագործողները սկսել են այս տերմինը օգտագործել բազմաթիվ, ավելի անորոշ ձևերով։

Վաղ համակարգչային ճարտարապետությունները նախագծվում էին թղթի վրա և այնուհետև անմիջապես կառուցվում էին որպես վերջնական սարքավորումներ։ Ավելի ուշ համակարգչային ճարտարապետության նախատիպերը ֆիզիկապես կառուցվում էին որպես տրանզիստոր-տրանզիստորային տրամաբանության (TTL) համակարգիչներ (օրինակ՝ 6800-ի և PA-RISC-ի նախատիպերը), փորձարկվում էին, ճշգրտվում, և միայն հետո դառնում վերջնական սարքավորում։ 1990-ականներից սկսած նոր համակարգչային ճարտարապետությունները նախքան վերջնական սարքավորումը դառնալը, որպես կանոն, «կառուցվում», փորձարկվում և ճշգրտվում են այլ համակարգչային ճարտարապետության ներսում՝ սիմուլյատորում կամ FPGA-ի ներսում՝ որպես փափուկ միկրոպրոցեսորներ։

## Ենթատեսակներ
Համակարգչային ճարտարապետության ոլորտն ունի երեք հիմնական ենթաբաժիններ.

* **Հրահանգների հավաքածուի ճարտարապետություն (ISA)**. սահմանում է մեքենայական կոդը, որը պրոցեսորը կարդում և կատարում է, ինչպես նաև հիշողության հասցեավորման ձևերը, պրոցեսորի ռեգիստրերը և տվյալների տեսակները:
* **Միկրոճարտարապետություն**. հայտնի է նաև որպես «համակարգչային կազմակերպում», նկարագրում է, թե ինչպես է կոնկրետ պրոցեսորը իրականացնում հրահանգներ (ISA)։ Օրինակ՝ համակարգչի պրոցեսորի քեշի չափը սովորաբար ոչ մի կապ չունի ISA-ի հետ:
* **Համակարգերի նախագծում**. ընդգրկում է համակարգչի բոլոր մյուս սարքավորումները, ինչպիսիք են տվյալների մշակումը (օրինակ՝ ուղիղ հիշողության հասանելիություն (DMA)), վիրտուալիզացիան և բազմապրոցեսորային աշխատանքը:

Համակարգչային ճարտարապետության մեջ կան նաև այլ տեխնոլոգիաներ, որոնք օգտագործվում են ավելի մեծ ընկերություններում, ինչպիսին է Ինթելը։ 2002 թվականին գնահատվել է, որ այս տեխնոլոգիաները կազմում են համակարգչային ճարտարապետության ընդամենը 1%-ը:

***Մակրոճարտարապետություն**. ընդգրկում է ճարտարապետական շերտեր, որոնք ավելի աբստրակտ են, քան միկրոճարտարապետությունը:
***Ասսեմբլեր հրահանգների հավաքածուի ճարտարապետություն (Assembly instruction set architecture)**՝ խելացի ասսեմբլերը կարող է մեքենաների խմբի համար ընդհանուր աբստրակտ ասսեմբլեր լեզուն փոխակերպել փոքր-ինչ տարբեր մեքենայական լեզվի՝ տարբեր իրականացումների համար:
***Ծրագրավորողին տեսանելի մակրոճարտարապետություն (Programmer-visible macroarchitecture)**. բարձր մակարդակի ծրագրավորման լեզուների գործիքները, ինչպիսիք են՝ կոմպիլյատորները, կարող են սահմանել միանման ինտերֆեյս կամ պայմաններ ծրագրավորողների համար՝ վերացնելով ներքին ISA-ների և միկրոճարտարապետությունների միջև տարբերությունները: Օրինակ՝ C, C++ կամ Java լեզուների ստանդարտները սահմանում են ծրագրավորողին տեսանելի տարբեր մակրոճարտարապետություններ:
***Միկրոկոդ**.  ծրագրաշար, որը թարգմանում է հրահանգները՝ չիպի վրա աշխատելու համար: Այն գործում է որպես սարքախմբի շուրջ փաթեթավորում՝ ներկայացնելով սարքախմբի հրահանգների հավաքածուի ինտերֆեյսի նախընտրելի տարբերակը: Հրահանգների թարգմանության այս տարբերակը չիպ նախագծողներին տալիս է ճկուն հնարավորություններ: Օրինակ՝ չիպի նոր բարելավված տարբերակը կարող է օգտագործել միկրոկոդ՝ ներկայացնելու ճիշտ նույն հրահանգների հավաքածուն, ինչ չիպի հին տարբերակը, բայց այնպես, որ այդ հրահանգների հավաքածուն թիրախավորող բոլոր ծրագրաշարերը աշխատեն նոր չիպի վրա՝ առանց փոփոխությունների կարիքի։ Միկրոկոդը կարող է նաև ներկայացնել հրահանգների հավաքածուների բազմազանություն նույն հիմքային չիպի համար՝ թույլ տալով նրան աշխատել ավելի լայն տեսակի ծրագրաշարերի հետ:
***Պին ճարտարապետություն**․ Ներառում է արքախմբի ֆունկցիաներ, որոնք միկրոպրոցեսորը պետք է տրամադրի սարքախմբի հարթակին, (օրինակ՝ x86-ի A20M, FERR/IGNNE կամ FLUSH պինները), ինչպես նաև հաղորդագրություններ, որոնք պրոցեսորը պետք է արձակի, որպեսզի արտաքին քեշերը կարողանան դատարկվել: Պին ճարտարապետության ֆունկցիաներն ավելի ճկուն են, քան ISA ֆունկցիաները, քանի որ արտաքին սարքախումբը կարող է հարմարվել նոր կոդավորումներին կամ փոխվել պինից հաղորդագրության: «Ճարտարապետություն» տերմինը համապատասխանում է, քանի որ ֆունկցիաները պետք է տրամադրվեն համատեղելի համակարգերի համար, նույնիսկ եթե մանրամասն մեթոդը փոխվում է:

## Դերեր
### Սահմանում
Համակարգչային ճարտարապետությունը զբաղվում է համակարգչային սիստեմի կատարողականության, արդյունավետության, արժեքի և հուսալիության հավասարակշռմամբ: Հրահանգների հավաքածուի ճարտարապետության օրինակը կարող է օգտագործվել այս մրցակցող գործոնների հավասարակշռությունը ցուցադրելու համար: Ավելի բարդ հրահանգների հավաքածուները ծրագրավորողներին հնարավորություն են տալիս գրել ավելի հիշողության օգտագործման առումով արդյունավետ ծրագրեր, քանի որ մեկ հրահանգը կարող է կոդավորել որոշ բարձր մակարդակի աբստրակցիա (ինչպես օրինակ x86-ի  ցիկլ (Loop) հրահանգը): Սակայն, ավելի երկար և ավելի բարդ հրահանգների վերծանումը պրոցեսորից ավելի երկար ժամանակ է պահանջում և կարող է ավելի թանկ լինել արդյունավետ իրականացման համար: Մեծ հրահանգների հավաքածուից բխող բարդության աճը նաև ստեղծում է ավելի շատ տարածք անհուսալիության համար, երբ հրահանգները փոխազդում են անսպասելի ձևերով:

Իրականացումը ներառում է ինտեգրալ սխեմաների նախագծում, փաթեթավորում, հզորություն և հովացում: Նախագծի օպտիմալացումը պահանջում է ծանոթություն կոմպիլյատորների, օպերացիոն համակարգերի, տրամաբանական նախագծման և փաթեթավորման հետ:

### Հրահանգների հավաքածուի ճարտարապետություն (ISA)
Հրահանգների հավաքածուի ճարտարապետությունը (ISA) համակարգչի ծրագրաշարի և սարքախմբի միջև ինտերֆեյսն է: Համակարգիչները չեն հասկանում բարձր մակարդակի ծրագրավորման լեզուներ, ինչպիսիք են Ջավան, C++-ը կամ օգտագործվող ծրագրավորման լեզուների մեծ մասը: Պրոցեսորը հասկանում է միայն որոշ թվային ձևով կոդավորված հրահանգներ, սովորաբար՝ որպես երկուական թվեր: Ծրագրային գործիքները, ինչպիսիք են կոմպիլյատորները, թարգմանում են այդ բարձր մակարդակի լեզուները այնպիսի հրահանգների, որոնք պրոցեսորը կարող է հասկանալ:

Բացի հրահանգներից, ISA-ն սահմանում է համակարգչում առկա տարրերը, որոնք հասանելի են ծրագրին, օրինակ՝ տվյալների տեսակները, ռեգիստրները, հասցեավորման ձևերը և հիշողությունը: Հրահանգները գտնում են այս հասանելի տարրերը ռեգիստրների ինդեքսների (կամ անունների) և հիշողության հասցեավորման ձևերի միջոցով:

Համակարգչի ISA-ն սովորաբար նկարագրվում է փոքր հրահանգների ձեռնարկում, որը բացատրում է, թե ինչպես են հրահանգները կոդավորված: Այն կարող է նաև սահմանել կարճ մնեմոնիկ անուններ դրանց համար: Անունները ճանաչվում են ծրագրաշարի մշակման գործիքի կողմից, որը կոչվում է ասսեմբլեր: Ասսեմբլերը համակարգչային ծրագիր է, որը թարգմանում է ISA-ի մարդու համար ընթեռնելի ձևը համակարգչի համար ընթեռնելի ձևի: Հակաասսեմբլերները նույնպես լայնորեն հասանելի են (սովորաբար դեբագերներում և ծրագրաշարերում)` երկուական համակարգչային ծրագրերում անսարքությունները մեկուսացնելու և ուղղելու համար:

ISA-ները տարբերվում են որակով և ամբողջականությամբ: Լավ ISA-ն փոխզիջում է ծրագրավորողի հարմարավետության (որքան հեշտ է կոդը հասկանալը), կոդի չափի (որքան կոդ է պահանջվում կոնկրետ գործողություն կատարելու համար), հրահանգները թարգմանելու համար համակարգչի արժեքի (որքան բարդությունը մեծ է, այնքան ավելի շատ սարքեր են անհրաժեշտ հրահանգները վերծանելու և կատարելու համար) և համակարգչի արագության (դժվարությամբ վերծանող սարքախմբի համար պահանջվում է ավելի երկար վերծանման ժամանակ) միջև: Հիշողության կազմակերպումը սահմանում է, թե ինչպես են հրահանգները փոխազդում հիշողության հետ, և թե ինչպես է հիշողությունը փոխազդում ինքն իր հետ:

Նախագծման էմուլյացիայի ընթացքում էմուլյատորները կարող են աշխատեցնել առաջարկվող հրահանգների հավաքածուով գրված ծրագրեր: Ժամանակակից էմուլյատորները կարող են հստակեցնել չափը, արժեքը և արագությունը՝ որոշելու համար, թե արդյոք կոնկրետ ISA-ն հասնում է իր նպատակներին:

### Համակարգչային կազմակերպում
Համակարգչային կազմակերպումն օգնում է օպտիմալացնել արդյունավետության վրա հիմնված արտադրանքը: Օրինակ` ծրագրային ապահովման ինժեներները պետք է իմանան պրոցեսորների մշակման հզորությունը: Նրանք կարող են անհրաժեշտություն դեպքում օպտիմալացնել ծրագրաշարը՝ ամենաբարձր արդյունավետությունը ամենացածր գնով ստանալու համար: Սա կարող է պահանջել համակարգչի կազմակերպման բավականին մանրամասն վերլուծություն: SD քարտում, oրինակ,  նախագծողները կարող են անհրաժեշտություն ունենալ քարտն այնպես կարգավորելու, որ հնարավոր լինի առավելագույն քանակությամբ տվյալները մշակել հնարավոր ամենաարագ եղանակով:

Համակարգչի կազմակերպումը նաև օգնում է պլանավորել որոշակի նախագծի համար պրոցեսորի ընտրությունը: Մուլտիմեդիա նախագծերը սովորաբար  տվյալների շատ արագ հասանելիության անհրաժեշտություն ունեն, մինչդեռ վիրտուալ մեքենաները կարիք ունեն արագ ընդհատումների: Երբեմն որոշակի առաջադրանքների համար անհրաժեշտ են նաև լրացուցիչ բաղադրիչներ: Օրինակ, վիրտուալ մեքենա աշխատեցնելու ունակ համակարգիչը պետք է ունենա վիրտուալ հիշողության սարքախումբ, որպեսզի տարբեր վիրտուալ համակարգիչների հիշողությունը հնարավոր լինի առանձին պահել: Համակարգչի կազմակերպումն ու հատկանիշները նաև ազդում են էներգիայի սպառման և պրոցեսորի արժեքի վրա:

### Իրականացում
Հրահանգների հավաքածուն և միկրոճարտարապետությունը նախագծելուց հետո անհրաժեշտ է մշակել գործնական մեքենա: Այս նախագծման գործընթացը կոչվում է *իրականացում* (implementation): Իրականացումը սովորաբար չի համարվում ճարտարապետական նախագծում, այլ ավելի շուտ սարքախմբի նախագծման ինժեներություն: Իրականացումը կարելի է բաժանել մի քանի քայլերի.

* **Տրամաբանական իրականացում**․ նախագծում է անհրաժեշտ շղթաները տրամաբանական դարպասների (logic-gates) մակարդակում:
* **Շղթայի իրականացում**․ կատարում է հիմնական տարրերի (օրինակ՝ դարպասներ, մուլտիպլեքսորներ, փականքներ), ինչպես նաև որոշ ավելի մեծ բլոկների (թվաբանական սարքեր, քեշեր և այլն) տրանզիստորային մակարդակի նախագծեր, որոնք կարող են իրականացվել տրամաբանական դարպասների կամ նույնիսկ ֆիզիկական մակարդակում, եթե նախագիծը դա է պահանջում:
* **Ֆիզիկական իրականացում**․ գծագրում է ֆիզիկական շղթաներ: Շղթայի տարբեր բաղադրիչները տեղադրվում են չիպի հատակագծում կամ տախտակի վրա, այնուհետև ստեղծվում են դրանք միացնող լարերը:
* **Նախագծի վավերացում**․ ստուգում է համակարգիչը որպես ամբողջություն՝ տեսնելու, թե արդյոք այն աշխատում է բոլոր իրավիճակներում և բոլոր ժամանակացույցերում: Նախագծի վավերացման գործընթացը սկսելուց հետո տրամաբանական մակարդակի նախագիծը ստուգվում է՝ օգտագործելով տրամաբանական էմուլյատորներ: Այնուամենայնիվ, սա սովորաբար չափազանց դանդաղ է իրատեսական թեստ անցկացնելու համար: Այսպիսով, առաջին թեստի հիման վրա ուղղումներ կատարելուց հետո նախատիպերը կառուցվում են՝ օգտագործելով «դաշտում ծրագրավորվող դարպասային զանգվածներ» (Field-Programmable Gate-Arrays (FPGAs)): Շատ հոբբի նախագծեր կանգ են առնում այս փուլում: Վերջին քայլը նախատիպային ինտեգրալ սխեմաների ստուգումն է, ինչը կարող է պահանջել մի քանի վերանախագծում:

CPU-ների համար ամբողջ իրականացման գործընթացը կազմակերպված է այլ կերպ և հաճախ կոչվում է CPU նախագծում:

## Տես նաև
* Սարքախումբ
* Ծրագրակազմի ճարտարագիտություն

## Ծանոթագրություններ

## Աղբյուրներ
* 
* Barton, Robert S., "Functional Design of Computers", *Communications of the ACM* 4(9): 405 (1961).
* Barton, Robert S., "A New Approach to the Functional Design of a Digital Computer", *Proceedings of the Western Joint Computer Conference*, May 1961, pp.&nbsp;393–396. About the design of the Burroughs B5000 computer.
* Bell, C. Gordon; and Newell, Allen (1971). "Computer Structures: Readings and Examples", McGraw-Hill.
* Blaauw, G.A., and Brooks, F.P., Jr., "The Structure of System/360, Part I-Outline of the Logical Structure" , *IBM Systems Journal*, vol. 3, no. 2, pp.&nbsp;119–135, 1964.
* 

## Արտաքին հղումներ
* ISCA: Proceedings of the International Symposium on Computer Architecture
* Micro: IEEE/ACM International Symposium on Microarchitecture
* HPCA: International Symposium on High Performance Computer Architecture
* ASPLOS: International Conference on Architectural Support for Programming Languages and Operating Systems
* ACM Transactions on Architecture and Code Optimization
* IEEE Transactions on Computers
* 

Կատեգորիա:Ինֆորմատիկա
Կատեգորիա:Ինֆորմատիկայի բաժիններ
Կատեգորիա:Ծրագրային ապահովում
Կատեգորիա:Համակարգչային ճարտարապետություն
Կատեգորիա:Համակարգչի բաղկացուցիչներ