Полезно за вас: Речник | Игри | Новини | Фирми | Рецепти | Обяви
Начало на реферати

Пищов тема 7 - Управление на паметта


Информационни технологии | 2009-12-04 | 151 сваляния

управление на паметта

Оперативната памет е важен ресурс за компютърната система тя е необходима за всяка една от операциите, които извършва компютъра. Процесорът работи с основната памет при изпълнение на приложенията. В мултипрограмните пакетни ОС и в ОС времеделене едновременно съществуват много процеси системни и потребителски и на всеки трябва да се отдели област от паметта. Освен това трябва да бъде осигурена и защита на паметта. Това е необходимо, защото както за управление на достъпа до собствените му команди и данни на процеса, а и за предпазване от достъп на процеса до информация свързана с други процеси. В зависимост от стратегията за обслужване на потребителите паметта може да се разпределя.

  1. основни принципи за управление на паметтa

  2. 7.1.1. Изобразяване на адреси

Преди да бъде изпълнена една програма тя трябва да премине през няколко етапа компилация, свързване, зареждане. Адресите в първичната програма са символични. Компилаторът изобразява символичните адреси в абсолютни или в преместваеми адреси. Независимо компилираните програми не могат да се обединяват, защото може да се получи припокриване и затова всички процедури се транслират заедно.

Свързващият редактор обединява независимо транслирани програми, а зареждащата програма изобразява преместваемите адреси в абсолютни и зарежда програмата за зареждане в паметта. Когато тези ф-ии се извършват преди изпълнението на програмата, се говори за статично, преместване, свързване, зареждане. Тези ф-ии могат да се изпълнят и динамично по време на изпълнение на програмата.

Изобразяването в адреси на паметта може да се извърши по време на компилация, зареждане или изпълнение на програмата.

7.1.2. Статично и динамично разпределение

Статичното преместване на програмите предопределя статично разпределение на паметта. Цялата необходима оперативна памет за програмите и данните им се отделя до началото на изпълнение на програмата. Всички адреси се настройват за работа в отделената област, след което програмите не могат да бъдат премествани по време на изпълнението им.

При динамичното разпределение памет се отделя за програмите и техните данни по време на изпълнението им. Абсолютните адреси се определят динамично, непосредствено преди всяко обръщане към паметта. Това позволява областта, отделена на дадена програма, да се изменя, разширява, свива, премества по време на изпълнението.

7.1.3. Средства за преместване на програми

Изборът на метод за разпределение е свързан и с апаратните средства на процесора на преместване на програмите при тяхната настройка за работа в отделените им области. В някои процесори липсват такива средства и преместването се извършва по програмен път от зареждащата програма въз основа на информация, генерирана от транслатора.

В други процесори се използва базов регистър, в който ОС записва началния адрес на програмата. Абсолютните адреси се изчисляват по време на изчисление, като отместването в адресната част на всяка програма се прибавя към съдържанието на базовия регистър. Регистърът се разглежда като част от адреса, т.е. използват се статични методи. Регистърът може да се интерпретира и като регистър на преместване и да се организира динамично преместване. Тъй като регистърът не се посочва явно в командите тази адресация се нарича адресация с неявно базиране. С базовия регистър обикновено се свързва регистър за защита, който съдържа или максималният адрес на отделената област или минимално отместване.

В някои процесори командите могат да съдържат номер на базов регистър, т.е. прилага се адресация с явно базиране. Обикновено преместените програми съдържат команди за зареждане на посочените базови регистри със съответните начални адреси.

7.1.4. Размери на блоковете памет

Независимо на какъв етап от обработката се заделя памет за всяка програма, принципно се използва един и същ механизъм. Програмите получават памет или на блокове с установен размер, или на блокове с необходимата им дължина. Когато програмите и техните изисквания надвишават общия обем налична оперативна памет се използват два подхода припокриване и размяна.

7.1.5. Припокриване

Основната идея на механизма е, че една и съща област от паметта се разпределя статично на повече от една части или на стандартни програми, като в началото се зарежда първият сегмент от припокриващите се. Останалите се пазят във външна памет. Когато се извика ф-ята за организиране на припокриване, новият сегмент записва на мястото на намиращите се в този момент в паметта програми.

Свързващия редактор генерира описание на структурата за статично припокриване, което се включва към основния сегмент. По време на изпълнението на програмата всяко външно обръщане се контролира от супервайзър на припокриване и, ако сегментът не е в паметта, се извиква зареждащата програма.

Използването на този метод не решава някои проблеми. Ако при обръщане към рекурсивни процедури поведението на програмите е такова, че не е възможно предварително да се каже дали две процедури могат да се припокрият. Друг проблем е, че не винаги може да се предвиди натовареността на паметта тя се използва и от други приложения и от ОС също. Или пък отделената област не е достатъчна за изпълнение на заданието, въпреки припокриването на неговите части. Поради тези причини припокриването не подобрява съществено използването на паметта.

7.1.6. Размяна

Положението се усложнява когато ОС предполага приоритетно пускане за изпълнение на задание, пир което памет се отделя за сметка на вече изпълняващи се задания или при системите с времеделене, където в повечето случаи изискванията за паметта надхвърлят оперативната памет. Една решение е да се позволи въвеждането в паметта и извеждането от нея на цели задания (да се организира размяна). Този подход може да бъде приложен, както при системите с динамично така и при системите със статично разпределение. Размяна може да се приложи и когато е необходимо пред разпределение на ресурсите с цел избягване на мъртва хватка.

Размяната на цели задания изисква много време и в повечето случаи се оказва, че не е нужно да се извежда цяло задание. Ето защо развитите ОС обединяват динамичния метод за размяна с възможността за прилагането му към отделни части на заданията. Така се осигурява припокриване между заданията с със средствата на ОС, без да се изисква намесата на потребителя.

7.1.7. Основни ф-ии на управлението на паметта

Управлението включва следните ф-ии:

Поддържане на информационни структури за свободното и заето пространство на паметта.

Прилагане на определена стратегия за разпределение на паметта

Отделяне на памет, т.е. след като решението е взето, на избрания процес се дава конкретна област и информацията за състоянието на паметта се коригира.

Освобождаване на памет процес може явно да освободи или отнеме памет или управлението на паметта.

7.2. методи за управление на паметта

7.2.1. Разпределение на непрекъсната област

Тази техника се използва при едно програмните или едно потребителските ОС. В подобни системи без мултипрограмиране между потребител, задание и процес има еднозначно съответствие и по отношение на системата в известен смисъл те могат да се разглеждат като взаимнозаменяеми.

Паметта се дели на две части една за резидентната част на ОС и една за потребителската програма. ОС може да се въведе в горната или долната част главния фактор за избор е къде са векторите на прекъсване.









За защита на паметта трябва да се предвиди само един долен граничен регистър.

Друг проблем е зареждането на програмата. Ако началният адрес е известен, компилаторът може да генерира абсолютна програма. При промяна на този адрес е необходима повторна компилация.

Има два начина за модификация на схемата, за да може дължината на ОС да се променя динамично:

Разполагане на потребителската програма в горната част или разполагане на ОС в началото и в края на паметта.

По-общ подход е използването на базов регистър, което позволява настройката на адресите да става по време на изпълнение. Използват се преместваеми адреси от 0 до max и реални адреси.

7.2.2 Разпределение на раздели

В мултипрограмните системи няколко програми са резидентни в паметта и се изпълняват паралелно. Разпределението на раздели е една от най-простите схеми за управление на паметта в мултипрограмните системи. Паметта се разбива на непрекъснати области раздели и всеки от тях се разпределя на едно задание.

Защитата е първият проблем, който възниква при разпределение на няколко раздела. Един от начините за защита е използването на двойка гранични регистри, което налага статично преместване. За да се разреши динамично преместване, е необходима двойка базов и граничен регистър.

Друг проблем е определянето на броя и размера на разделите, за да бъде ефективно натоварен процесорът. При това е важно дали разделите и границите между тях са фиксирани.

Фиксирани раздели

При този подход паметта се разбива на раздели с фиксирани граници, което се осъществява при генерацията на ОС. Така нивото на мултипрограмиране се определя от броя на разделите. В някои ОС се дава възможност на оператора да променя броя и размера на разделите. Този метод е подходящ когато се знаят размерите е честотата на изпълнение на заданията.

Ф-иите по управление на паметта се реализират леко, като определянето кому ще се разпредели памет в голяма степен се извършва от програмата за планиране на високо ниво. При влизане в системата заданията се нареждат във вътрешната опашка и планиращата програма, въз основа на изискванията за памет и свободните раздели определя кои задания да получат памет. След завършване на заданието се освобождава раздел, който може да бъде зареден от планиращата програма с друго задание.

Недостатък на метода е получаване на неизползвани части от паметта т. Нар. фрагментация. Тя е вътрешна, ако не се използва част от разпределения раздел и ако има свободни раздели външна. Разпределението може да се допълни и с размяна.

Обикновено заданията се въвеждат отново в едни и същи раздели. Това ограничение се диктува от метода за преместване и от политиката за разпределение на разделите.

За да се използва процесорното време ефективно, необходимо е времето за изпълнение на всяко задание да бъде относително дълго спрямо времето за размяна. За да се намали това време трябва да се следи колко памет действително заема потребителската програма, вместо колко би използвала. Така ще може да се приложи размяна не върху целия раздел, а само върху актуално използваната част.

Друго ограничение е свързано с входно-изходните операции. Прехвърлянето на данни между ОС и процеса става само тогава, когато той е в паметта.

Променливи раздели

Дисциплина, която позволява да се намали фрагментацията, е създаване и отделяне на раздел с необходимия обем за всяко задание по време на панирането му за изпълнение. След изпълнението му разделът се освобождава. Така всяка програма получава необходимата и оперативна памет непосредствено преди началото на изпълнението си.

В някои случаи на процесите се дава възможност да управляват донякъде оперативната памет чрез макрокоманди, но само в рамките на собствените им, предварително отделени раздели.

Въпреки, че използването на паметта при променливи размери е по-добро, тя не решава напълно фрагментацията, тъй като между разделите остават неизползвани области.

Преместваеми раздели

Очевидно решение за отстраняване на фрагментацията при използване на променливи раздели е прилагане на динамично преместване на раздели е да се обединят свободните пространства на оперативната памет. Базовият регистър е такова средство при всяко преместване той получава новия раздел на раздела.

Възможен е и друг подход всяка дума на паметта се разширява с признак, указващ типа на информация в думата.

Проблемът възниква при преместване на раздели, защото трябва да бъдат коригирани не само адресите на премествания раздел, но и адреси в регистрите на процесора или изпратени към подпрограми.

Освен това възниква въпросът кога да се прави сгъстяване то може да се извършва или при всяко освобождаване, или в момента, когато няма раздел с необходимата дължина, но сборът на паметта е достатъчен за ново задание. При втория подход има две алтернативи или да се направи пълно сгъстяване, или то да се приложи само частично, колкото да се освободи необходимата част.

Използване на няколко базови регистри

Друг метод да се намали фрагментацията при използването на раздели с променлива дължина е да се раздели необходимата памет за всяко задание на няколко части. За да се постигне това са необходими няколко базови регистри и механизъм за преадресация.

Паметта може да се дели по различни начини:

Един от тях е тя да се раздели на две независими части. В едната част се поместват постоянните стойности, а в другата променливите.

Друг начин е да се раздели програмата на две части код и данни. Процесорът знае дали чете команда или данни. Регистрите за командите автоматично определят, че кодът е само четене(програмите могат да се използват от различни потребители).

Управление на паметта

Управляващата програма при работа с променливи размери се базира на информация за състоянието на паметта кои блокове са разпределени и кои са свободни.

Използване на свързани списъци. За управление на паметта може да се използва свързан списък на разпределените и свободните блокове на паметта. Всеки блок съдържа елемент на списъка, включващ вид на блока, стартов адрес, дължина и указател към следващия елемент.

За разпределение на свободната памет при постъпване на заявка се прилагат различни стратегии. Най-разпространени са : избор на първи подходящ блок и избор на най-подходящ блок. Стратегията за избор на първи подходящ блок е по-бърза, но големите блокове се раздробяват. Стратегията за избор на най-подходящ блок изисква да се преглежда целия списък и нейното ползване води до създаване на много блокове с малки размери. Предимството и е, че оставя свободни големи блокове.

Вариант на първи подходящ блок се нарича следващ подходящ. Работи като първи подходящ, но се помни мястото, където е намерен последния подходящ блок и при следващото търсене се продължава оттам.

Бързодействието на алгоритмите маже да се повиши чрез използване на отделни списъци на заетите от процесите блокове и на свободните блокове.

Отделните списъци обаче пораждат друг проблем-освобождаването на блокове и прехвърлянето им в списъка на дупките поражда усложнение и намаляване на бързодийствието.

За пълнота трябва трябва да се споменат още два алгоритъма. Среща се и стратегията за избор на най-малко подходящ блок. Обосновката е, че остават по-големи дупки памет, които могат да се окажат по-полезни в сравнение с малките дупки при най-подходящ.

Бързо подходящ поддържащ отделните списъци за най-използваните размери на свободните блокове.

Използване на битова карта

Паметта се разделя на единици за разпределение и на всяка единица отговаря бит от битовата карта, показващ дали единицата свободна или заето. При този метод просто се освобождава заета памет, но се усложнява търсенето на свободна памет със зададен размер, защото трябва да се намерят в битовата карта съответния брой последователни нули. Затова методът не се използва често.

Използване на системата на близнаците.

Този подход ускорява сливането на свободните блокове, като се използва фактът, че адресите са двоични. Памет се предоставя на блокове с дължина представляваща степен на 2.

При освобождаването на блок най-напред се проверява дали е свободен неговият близнак. Ако е така те се обединяват в един, който може да се обедини с близнака и т.н.

Разпределение на дисково пространство при размяна


В някой системи, при създаване на процес, се отделя дисково пространство за размяната му. Пространство се освобождава при унищожаването на процеса. За управление на дисковото пространство се използват вече описаните алгоритми за управление на паметта.

7.2.3. Разпределение на странците

Друга възможност за борба с фрагментацията е да се използва странична организация. Оперативната памет се разделя на еднакво дълги блокове странични кадри. Адресното пространство на заданието също се подразделя на еднакви части с дължина равна на кадрите.

Деленето на страници се осъществява при транслацията на програмите, като указаните в командите адреси се състоят от 2 компоненти номер на страница (Р) и отместване (D) спрямо началото на страницата.



картинка




На всяко задание се поставя таблица на страницата, чрез които се установява съответствие между разпределените на заданието блокове памет и записаните в тях страници. Всеки елемент на таблицата съдържа указател към началото на блок предполага се че Р служи като индекс на таблицата.

Абсолютните адреси на паметта се определят динамично по време на изпълнението по следният начин. Към съдържанието на PTR се прибавя номерът на страницата и от таблицата се чете указателят към съответният кадър.

Когато таблицата е в паметта, бързодействието се намалява на половина. Времето може да се намали с използването на апаратни средства за реализация на таблицата, например бързодействащ регистър или буферна памет. Стандартното решение е използването на асоциативна памет. Всеки регистър съдържа: ключ и стойност. При обръщане към паметта се извършва сравнение с всички ключове едновременно и при съвпадение се извежда номер на кадър.

Управление на паметта

В разгледаните схеми за странична организация всички страници на дадено задание са поместени в оперативната памет преди началото на изпълнението му. Това предполага статично разпределение, което се извършва лесно.

Управляващата програма използва две системни таблици за разпределение таблица на кадрите и на заданията. Когато трябва да се разпредели памет, най-напред се проверява в таблиците на кадрите дали има достатъчен брой свободни кадри.

Както и преди управлението на паметта влияе върху управлението на заданието. Когато пристигне задание, планиращата на високо ниво програма определя дължината му в страници и се обръща към програмата за управление на паметта.

Друго предимство на страничната организация е възможността за съвместно използване на програми.

Страничната организация решава проблема с фрагментацията, макар и не напълно така възниква вътрешна фрагментация кадърът, който е записан в последната страница на всяко задание, се използва средно на половина, тъй като дължината на разпределената памет трябва да се закръгля на цял брой кадри.

Защитата в страничните системи може да се извърши на ниво оперативна памет. Всеки кадър получава едно битов флаг или ключ за забрана на достъпа. Тези полета могат да бъдат разширени с допълнителни битове с по фина защита.

Статичното разпределение предполага припокриване, определяно от потребителя. Страничната организация е подходяща за организиране на размяна, тъй като не е нужно изведените на диска програми да се записват на същото място в паметта достатъчно е само да се промени таблицата на страниците.

Друго виждане за страничната организация

Страничната организация може да се използва за разширение на адресното пространство. Този подход масово е използван при мини компютрите за увеличение на обема на паметта, без да се променя системата команди. Компютрите от 60-те години използват най-често 15 или 16 битови адреси. По късно става възможно да се разшири адресното пространство на 17 или 18 бита, но това означава, че трябва или да се промени системата команди или да се увеличи думата. Оттук следва, че са неизползваеми всички съществуващи програми и документация.

7.2.4. Разпределение на сегменти

При изложените методи адресното пространство на заданието се разглежда, като непрекъснато линейно, отговарящо на представата за физическа памет. Такъв поглед на нещата съвсем не е задължителен. Сегментирането предоставя друго виждане при него адресното пространство на всяко задание се разкъсва на няколко сегмента с различна дължина, които обикновено съответстват съдържателно на отделните части на заданието. Сегментът е определен от потребителя обект, който може да се разглежда като логическа независима единица, процедура, блок или масив от данни. Всеки сегмент е свързан с име и размер, а възможно е и други атрибути, като правила на достъп, име на притежател и др

За простота на реализация сегментите се означават с номера вместо с имена. Обикновено потребителската програма се транслира, като компилаторът автоматично създава сегментите, отразявайки структурата на първичната програма. Адресацията в сегментираната програма е двуразмерна номер на сегмент и отместване. С всяко задание се свързва таблица на сегментите. При изпълнението на програмата абсолютните адреси се определят динамично, като с помощта на таблицата номера на сегмента се превръща в базов адрес на сегмента. За това в много системи описаните действия по изчисление на адреса, както и проверката на дължината на сегмента се извършват апаратно.

Едно от предимствата на сегментирането е възможността за точно управление на защитата. Също така сегментирането улеснява организацията и достъпа.до реентрантните програми. Сегментите се използват съвместно, когато техните начални адреси в паметта записани в таблиците на различни процеси. Така всяка информация може да се дели, ако се оформи като сегмент.

Въпреки че описаното съвместно използване на сегменти изглежда просто, все пак възникват проблеми - например, ако в кодов сегмент има преход, където адресът на прехода се състои от номер на сегмент и отместване, тогава всички процеси трябва да използват един и същи номер за делимия сегмент, което води до трудности или програмата да е позиционно-независимия.

Сегментирането облекчава свързването на обектните модули. Те могат да бъдат програмирани като сегменти, с което съществено се опростява обработката на външните обръщения, тъй като свързващата програма не трябва да работи с абсолютни адреси.

Описаната организация има и някои недостатъци поради променливия характер на сегментите и поради сложността на дисциплината за тяхното разместване в паметта.

Програмата за планиране на заданията трябва да намери памет за всички сегменти на потребителската програма. Разпределението на паметта се решава подобно на схемата с променливи раздели, например първи подходящ или най-подходящ.

7.2.5. Разпределение на сегменти и страници

В някои системи двата подхода се обединяват за да се използват предимствата им. Сегментирането на адресното пространство позволява лесно да се решават външните обръщания и използването на реентрантните програми. Страничната организация позволява, като се използва не сложната стратегия за сегментация, да се опрости разпределението на паметта и да се изключи външната фрагментация.

Пищов тема 7 - Управление на паметта

Добави своя коментар:



Тагове от реферата: , , , , , , , ,

Изтегли в DOC | PDF | ZIP