Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
spz / шпори.doc
Скачиваний:
100
Добавлен:
23.02.2016
Размер:
1.56 Mб
Скачать

Сторінковий спосіб організації віртуальної пам'яті.

При такому способі усі фрагменти програми, на які вона розбивається (за винятком останньої її частини), виходять однаковими. Однаковими рахуються й одиниці пам'яті, що ми надаємо для розміщення фрагментів програми. Ці однакові частини називають сторінками і говорять, що пам'ять розбивається на фізичні сторінки, а програма — на віртуальні сторінки. Частина віртуальних сторінок задачі розміщається в оперативній пам'яті, а частина — у зовнішній. Звичайно місце в зовнішній пам'яті, у якості якої в більшості випадків виступають нагромаджувачі на магнітних дисках (оскільки вони відносяться до швидкодіючих пристроїв із прямим доступом), називають файлом підкачки або сторінковим файлом. Іноді цей файл називають swap-файлом, тим самим підкреслюючи, що записи цього файлу — сторінки — заміщають один одного в оперативній пам'яті. У Unix- системах для цих цілей виділяється спеціальний розділ, але крім нього можуть бути використані і файли, що виконують ті ж функції, якщо обсягу розділу недостатньо.

Розбивка всієї оперативної пам'яті на сторінки однакової величини, причому величина кожної сторінки вибирається кратною ступеню двійки, приводить до того, що замість одномірного адресного простору пам'яті можна говорити про двовимірний. Перша координата адресного простору — це номер сторінки, а друга координата — номер комірки всередині обраної сторінки (його називають індексом). Таким чином, фізична адреса визначається парою (Рр, і), а віртуальна адреса — парою (Рv, і), де Рv — це номер віртуальної сторінки, Рр — це номер фізичної сторінки, і це індекс комірки у середині сторінки. Кількість бітів, що відводиться під індекс, визначає розмір сторінки, а кількість бітів, що відводиться під номер віртуальної сторінки, — обсяг можливої віртуальної пам'яті, яким може користуватися програма. Відображення, здійснюване системою під час виконання, зводиться до відображення Рv в Рр і приписуванні до отриманого значення бітів адреси, що задаються величиною і. При цьому немає необхідності обмежувати число віртуальних сторінок числом фізичних, тобто сторінки, що не помістилися, можна розміщати в зовнішній пам'яті, і це у даному випадку служить розширенням оперативної.

Для відображення віртуального адресного простору задачі на фізичну пам'ять, як і у випадку із сегментним способом організації, для кожної задачі необхідно мати таблицю сторінок для трансляції адресних просторів. Для опису кожної сторінки диспетчер пам'яті ОС заводить відповідний дескриптор, що відрізняється від дескриптора сегмента насамперед тим, що в ньому немає необхідності мати поле довжини — адже всі сторінки мають однаковий розмір. По номері віртуальної сторінки в таблиці дескрипторів сторінок поточної задачі знаходиться відповідний елемент (дескриптор). Якщо біт присутності має одиничне значення, виходить, дана сторінка зараз розміщена в оперативній, а не в зовнішній пам'яті і ми в дескрипторі маємо номер фізичної сторінки, відведеної під дану віртуальну. Якщо ж біт присутності дорівнює нулю, то в дескрипторі ми будемо мати адресу віртуальної сторінки, розташованої зараз у зовнішній пам'яті. У такий спосіб і здійснюється трансляція віртуального адресного простору на фізичну пам'ять.

Захист сторінкової пам'яті, як і у випадку із сегментним механізмом, заснований на контролі рівня доступу до кожної сторінки. Як правило, можливі наступні рівні доступу: тільки читання; читання і запис; тільки виконання. У цьому випадку кожна сторінка забезпечується відповідним кодом рівня доступу.

При трансформації логічної адреси у фізичну порівнюється значення коду дозволеного рівня доступу з фактично необхідним. При їхній розбіжності робота програми переривається.

При звертанні до віртуальної сторінки, якої не має в даний момент у оперативної пам'яті, виникає переривання і керування передається диспетчеру пам'яті, що повинний знайти вільне місце. Звичайно надається перша ж вільна сторінка. Якщо вільної фізичної сторінки немає, то диспетчер пам'яті по одній з вищезгаданих дисциплін заміщення (LRU, LFU, FIFO, random) визначить сторінку, що підлягає розформуванню або збереженню в зовнішній пам'яті. На її місце він розмістить ту нову віртуальну сторінку, до якої було звертання з задачі, але її не виявилося в оперативній пам'яті.

Алгоритм вибирає для заміщення ту сторінку, на яку не було посилання протягом найбільш довгого періоду часу. Для заміщення вибирається та сторінка, що довше усіх не використовувалася.

Якщо обсяг фізичної пам'яті невеликий і навіть часто використовуємі сторінки не вдається розмістити в оперативній пам'яті, то виникає так звана «пробуксовка». Іншими словами, пробуксовка — це ситуація, при якій завантаження потрібної нам сторінки викликає переміщення в зовнішню пам'ять тієї сторінки, з яким ми теж активно працюємо. Очевидно, що це дуже погане явище. Щоб його не допускати, бажано збільшити обсяг оперативної пам'яті (зараз це стало самим простим рішенням), зменшити кількість рівнобіжно виконуваних задач або спробувати використовувати більш ефективні дисципліни заміщення.

В абсолютній більшості сучасних ОС використовується дисципліна заміщення сторінок LRU, як сама ефективна. Вона використовується в OS/2 i Linux. Але в Windows NT, розробники, бажаючи зробити систему максимально незалежною від апаратних можливостей процесора використали правило FIFO. А для того , щоб згладити її неефективність, була введена “буферизация”.

Її принцип простий. Перш ніж заміщувана сторінка буде переміщена в зовнішню пам’ять, вона помічається як кандидат на вивантаження. Якщо в наступний раз буде звернення до сторінки, яка знаходиться в такому буфері, то сторінка не вивантажується, а стає в кінець черги FIFO. В іншому випадку сторінка дійсно вивантажується і на її місце в буфер попадає наступний кандидат. Об’єм такого буфера не може бути великим і тому ефективність сторінкової організації пам’яті набагато нижче чим у вищезгаданих систем, і явище пробуксовки починається навіть при дуже великому об’ємі оперативної пам’яті. (В системі Windows NT файл з вивантаженими віртуальними сторінками носить назву PageFile.sys. Таких файлів може бути декілька. Їх загальний об’єм має бути не менший ніж об’єм фізичної пам’яті плюс 11Мб, які необхідні самій Windows NT. В системах Windows 2000 розмір цього файлу набагато перевищує об’єм фізичної пам’яті і буває досягає сотень мегабайт).

Таким чином, найважливішим достоїнством сторінкового способу організації пам’яті є мінімальна фрагментація. Оскільки на кожну задачу може приходитися по одній незаповненій сторінці, то очевидно, що пам’ять використовується ефективно. Цей метод можна було назвати найкращим, якщо б не наступних дві обставини.

Перше – сторінкова трансляція віртуальної пам’яті вимагає суттєвих накладних витрат. Таблиці сторінок необхідно розміщати теж в пам’яті. Крім цього ці таблиці необхідно обробляти – з ними працює диспетчер пам’яті.

Другий недолік – програми розбиваються на сторінки випадково, без обліку логічних зв’язків. Це приводить до того, що міжсторінкові переходи відбуваються частіше ніж міжсегментні і стає важко організовувати поділ програмних модулів між процесами, що виконуються.

Для того щоб уникнути другого недоліку, зберігши достоїнства сторінкового способу організації пам’яті, було запропоновано ще один спосіб – сегментно-сторінковий. Правда, за рахунок подальшого збільшення вимагає суттєвих накладних витрат.

Соседние файлы в папке spz