**Հիշողության կազմակերպումը**

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

Մի քանի մեթոդներ են մշակվել, ինչը մեծացնում է հիշողության կառավարման արդյունավետությունը։ Վիրտուալ հիշողության համակարգերը բաժանում են պրոցեսների կողմից օգտագործվող հիշողության հասցեները ֆիզիկական հասցեներից` թույլատրելով պրոցեսների բաժանումը և մեծացնելով վիրտուալ հասցեների տարածությունը RAM-ի հասանելի չափից ավելի` կիրառելով էջադրում կամ փոխանակում երկրորդական պահեստավորման վրա։ Վիրտուալ հիշողության կազմակերպման որակը կարող է մեծ ազդեցություն ունենալ ընդհանուր համակարգի աշխատանքի վրա։

Մակարդակներ
-----------

Ժամանակակից ընդհանուր նպատակի համար ստեղծված համակարգչային համակարգերը կառավարում են հիշողությունը երկու մակարդակներում`

* օպերացիոն համակարգի մակարդակ,
* ծրագրային մակարդակ։

Դինամիկ հիշողության տեղակայում
------------------------------

### Մանրամասները

Տեղակայման հարցումը կատարելու խնդիրը բաղկացած է բավարար չափի չօգտագործված հիշողությունների բլոկից։ Հիշողության հարցումները բավարարվում են հիշողության մեծ տարածքից ինչ֊որ կտորներ վերցնելով․ հիշողության այդ մեծ տարածքը կոչվում է կույտ կամ ազատ տարածք : Ցանկացած ժամանակ կույտի որոշ հատվածներ օգտագործվում են, իսկ որոշները ազատ են (չեն օգտագործվում), ուստի հասանելի են ապագա տեղակայումների համար։

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

### Արդյունավետությունը

Հատուկ դինամիկ հիշողության տեղակայման ալգորիթմի իրականացումը կարող է աշխատանքի վրա դրական ազդեցություն ունենալ։ 1994 թվականին Digital Equipment Corporation կազմակերպության կատարած ուսումնասիրությունները նկարագրում ենհիշողության տեղակայողների օգտագործածա ծախսերը։ Հրամանների միջին չափը, որը պահանջվում է մի հիշողության տիրույթը տեղակայելու համար, 52 է (չափվում է տարբեր ծրագրերի վրա հրամանների մակարդակում)։

### Իրականացումները

Քանի որ տեղակայման ճշգրիտ տեղը անհնար է իմանալ նախապես, հիշողությանը դիմում է կատարվում անուղղակիորեն՝ սովորաբար հղումների ցուցիչների օգնությամբ։ Հիշողության տարածքը կազմակերպելու և հիշողության բաժինները տեղակայելու կամ դուրս հանելու համար օգտագործվող ալգորիթմը կապված է միջուկի հետ և կարող է օգտագործել հետևյալ բոլոր մեթոդները։

#### Ֆիքսած չափերով բլոկների տեղակայում

Ֆիքսած չափերով բլոկների տեղակայումը օգտագործում է հիշողության՝ ֆիքսած չափերով բլոկների ազատ ցուցակ (հաճախ բոլորի մի չափի)։ Սա շատ արդյունավետ է ներկառուցված համակարգերի համար, որտեղ ոչ մեծ օբյեկտներ պետք է տեղակայվեն, սակայն շատ վատ է հատվածավորման դեպքում, հատկապես հիշողության երկար հասցեների հետ։ Այնուամենայնիվ, չափազանց նվազող գների շնորհիվ այս մեթոդը կարող է հստակ բարելավել աշխատանքը այն օբյեկտների հետ, որոնք արագ տեղակայման կամ դուրսբերման կարիք ունեն։ Այն հաճախ օգտագործվում է տեսախաղերում։

#### Buddy blocks

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

### Ինքնավար փոփոխականներ

Ծրագրավորման լեզուների շատ ներկայացումներում, պրոցեդուրայի (ենթածրագիր կամ ֆունկցիա) ներսում հայտարարված բոլոր փոփոխականները այդ ֆունկցիայի համար լոկալ են։ Ծրագրի համար նախատեսված աշխատաժամանակի միջավայրը ավտոմատ կերպով հիշողություն է հատկացնում այս փոփոխականների համար և նույն կերպով էլ ազատում է հիշողությունը, երբ պրոցեդուրան ավարտում է աշխատանքը։ Հատուկ հռչակագրերը կարող են թույլ տալ լոկալ փոփոխականներին պահպանել արժեքներ պրոցեդուրայի կանչերի միջև կամ կարող է թույլ տալ, որ փոփոխականները հասանելի լինեն այլ պրոցեդուրաներում ևս։ Լոկալ փոփոխականների ավտոմատ տեղաբաշխումը հնարավոր է դարձնում ռեկուրսիան՝ հասանելի հիշողության խորությամբ սահմանափակված։

#### Աղբի վերացում

Աղբի վերացումը մարտավարություն է, որի միջոցով օբյեկտներին ավտոմատ տրվում է հիշողություն, որը ծրագիրը այլևս չի օգտագործում, և վերադարձնում է տեղակայված հիշողությանը ազատ հիշողության տարածք։ Մեթոդը, ըստ էության, հիշողության ղեկավարման հակառակն է։

Վիրտուալ հիշողությամբ համակարգեր
--------------------------------

Վիրտուալ հիշողությունը հիշողությունը ֆիզիկական սարքախմբից անջատելու մեթոդն է։ Հավելվածները գործարկում են հիշողությունը վիրտուալ հասցեների միջոցով։ Ամեն անգամ, երբ պահեստավորված ինֆորմացիային դիմելու փորձ է արվում, վիրտուալ հիշողության ինֆորմացիան պահանջում է, որ վիրտուալ հասցեները թարգմանվեն ֆիզիկական հասցեների։ Այս եղանակով վիրտուալ հիշողության ավելացումը թույլ թ տալիս անհատականապես կառավարել հիշողության համակարգերը և դիմելիության մեթոդները։

Վիրտուալ հիշողության համակարգերում օպերացիոն համակարգը սահմանափակում է եղանակները, որոնցավ կարելի է դիմել հիշողությանը։ Այս առանձնահատկությունը՝ հիշողության պահպանումը, օգտագործվում է, որպեսզի թույլ չտա պրոցեսին գրել կամ կարդալ հիշողության այն հասցեներում, որ իրեն չեն տրված՝ կանխելով վնասական կամ թերի կոդերը խաթարեն նաև ուրիշ ծրագրերի աշխատանքը։

Չնայած հատուկ գործընթացների համար հատկացված հիշողությունը սովորաբար մեկուսացված է, գործընթացները երբեմն պետք է կարողանան տեղեկատվություն փոխանակել։ Համօգտագործվող հիշողությունը միջպրոցեսային հաղորդակցության ամենաարագ տեխնոլոգիաներից մեկն է։

Հիշողությունը սովորաբար դասակարգվում է առաջնային պահեստավորմանը և երկրորդային պահեստավորմանը դիմելու վարկանիշով։ Հիշողության կառավարման համակարգերը այլ գործողությունների հետ մեկտեղ նաև իրականացնում են հիշողության երկու մակարդակների միջև ինֆորմացիայի տեղափոխումը։

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

1. ↑  Gibson, Steve (1988 թ․ օգոստոսի 15). «Tech Talk: Placing the IBM/Microsoft XMS Spec Into Perspective». *InfoWorld*.
2. ↑  Detlefs, D.; Dosser, A.; Zorn, B. (June 1994). «Memory allocation costs in large C and C++ programs» (PDF). *Software: Practice and Experience*. **24** (6): 527–542. CiteSeerX 10.1.1.30.3073. doi:10.1002/spe.4380240602.

1. ↑  Not to be confused with the unrelated heap data structure.