Jump to content

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

Վիքիպեդիայից՝ ազատ հանրագիտարանից
Համակարգչային ճարտարապետություն
հասկացություն Խմբագրել Wikidata
Ենթակատեգորիաdesign, classes of computers Խմբագրել Wikidata
Ստեղծել էՋին Ամդալ, Fred Brooks, Gerrit Blaauw Խմբագրել Wikidata
Սկսած1964 Խմբագրել Wikidata
Համակարգչի հիմնական բլոկ-սխեման միապրոցեսորային CPU-ով։ Սև գծերը ցույց են տալիս կառավարման հոսքը, իսկ կարմիր գծերը՝ տվյալների հոսքը: Սլաքները ցույց են տալիս հոսքի ուղղությունը:

Համակարգչային ճարտարապետություն (անգլ.՝ Computer architecture), համակարգչային գիտության և ճարտարագիտության մեջ համակարգչային սիստեմի կառուցվածքի նկարագրություն՝ կազմված բաղադրիչ մասերից[1]։ Երբեմն այն կարող է լինել բարձր մակարդակի նկարագրություն, որն անտեսում է իրացման մանրամասները[2]։ Ավելի մանրամասն մակարդակում նկարագրությունը կարող է ներառել հրահանգների հավաքածուի ճարտարապետության նախագծումը (Instruction Set Architecture), միկրոճարտարապետության նախագծումը, տրամաբանական նախագծումը և իրականացումը[3]:

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

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

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

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

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

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

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

Ենթատեսակներ

[խմբագրել | խմբագրել կոդը]

Համակարգչային ճարտարապետության ոլորտն ունի երեք հիմնական ենթաբաժիններ[14].

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

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

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

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

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

Հրահանգների հավաքածուի ճարտարապետություն (ISA)

[խմբագրել | խմբագրել կոդը]

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

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

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

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

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

Համակարգչային կազմակերպում

[խմբագրել | խմբագրել կոդը]

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

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

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

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

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

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

[խմբագրել | խմբագրել կոդը]
  1. Dragoni, Nicole (n.d.). «Introduction to peer to peer computing» (PDF). DTU Compute – Department of Applied Mathematics and Computer Science. Lyngby, Denmark.
  2. Clements, Alan. Principles of Computer Hardware (Fourth ed.). էջ 1. «Architecture describes the internal organization of a computer in an abstract way; that is, it defines the capabilities of the computer and its programming model. You can have two computers that have been constructed in different ways with different technologies but with the same architecture.»
  3. Hennessy, John; Patterson, David. Computer Architecture: A Quantitative Approach (Fifth ed.). էջ 11. «This task has many aspects, including instruction set design, functional organization, logic design, and implementation.»
  4. Williams, F. C.; Kilburn, T. (25 September 1948), «Electronic Digital Computers», Nature, 162 (4117): 487, Bibcode:1948Natur.162..487W, doi:10.1038/162487a0, S2CID 4110351, Արխիվացված է օրիգինալից 6 April 2009-ին, Վերցված է 2009-04-10-ին
  5. Susanne Faber, "Konrad Zuses Bemuehungen um die Patentanmeldung der Z3", 2000
  6. Neumann, John (1945). First Draft of a Report on the EDVAC. էջեր 9.
  7. Reproduced in B. J. Copeland (Ed.), "Alan Turing's Automatic Computing Engine", Oxford University Press, 2005, pp. 369-454.
  8. Johnson, Lyle (1960). «A Description of Stretch» (PDF). էջ 1. Վերցված է 7 October 2017-ին.
  9. Buchholz, Werner (1962). Planning a Computer System. էջեր 5.
  10. «System 360, From Computers to Computer Systems». IBM100. 7 March 2012. Արխիվացված է օրիգինալից April 3, 2012-ին. Վերցված է 11 May 2017-ին.
  11. Hellige, Hans Dieter (2004). «Die Genese von Wissenschaftskonzeptionen der Computerarchitektur: Vom "system of organs" zum Schichtmodell des Designraums». Geschichten der Informatik: Visionen, Paradigmen, Leitmotive. էջեր 411–472.
  12. ACE underwent seven paper designs in one year, before a prototype was initiated in 1948. [B. J. Copeland (Ed.), "Alan Turing's Automatic Computing Engine", OUP, 2005, p. 57]
  13. Schmalz, M.S. «Organization of Computer Systems». UF CISE. Վերցված է 11 May 2017-ին.
  14. 14,0 14,1 John L. Hennessy and David A. Patterson. Computer Architecture: A Quantitative Approach (Third ed.). Morgan Kaufmann Publishers.
  15. Laplante, Phillip A. (2001). Dictionary of Computer Science, Engineering, and Technology. CRC Press. էջեր 94–95. ISBN 0-8493-2691-5.
  16. Null, Linda (2019). The Essentials of Computer Organization and Architecture (5th ed.). Burlington, MA: Jones & Bartlett Learning. էջ 280. ISBN 9781284123036.
  17. Martin, Milo. «What is computer architecture?» (PDF). UPENN. Վերցված է 11 May 2017-ին.
  18. Ltd, Arm. «What is Instruction Set Architecture (ISA)?». Arm | The Architecture for the Digital World (անգլերեն). Վերցված է 2024-09-13-ին.
  19. «Computer Organization and Architecture Tutorial». GeeksforGeeks (ամերիկյան անգլերեն). 2024-06-12. Վերցված է 2024-09-13-ին.
  20. «Logic Gates | Computer Organization and Architecture Tutorial - javatpoint». www.javatpoint.com (անգլերեն). Վերցված է 2024-09-12-ին.

Արտաքին հղումներ

[խմբագրել | խմբագրել կոդը]
Վիքիպահեստն ունի նյութեր, որոնք վերաբերում են «Համակարգչային ճարտարապետություն» հոդվածին։