глава 9

Глава 9. Віртуальна пам'ять. Архітектурні засоби підтримки віртуальної пам'яті

Попередня глава | програма курсу | Наступна глава

9.1 Проблема розміщення великих програм.Поняття віртуальної пам'яті.

Вже давно існує проблема розміщення в пам'яті програм, розмір яких перевищує розмір доступної пам'яті. Один з варіантів її вирішення організація структур з перекриттям розглянуто в попередньому розділі. При цьому передбачалося активну участь програміста в процесі сегментації і завантаження програми. Було запропоновано перекласти проблему на комп'ютер. Розвиток архітектури комп'ютерів привело до значного ускладнення організації пам'яті, відповідно, ускладнилися і розширилися завдання операційної системи з управління пам'яттю. Одним з головних удосконалень архітектури стала поява віртуальної пам'яті (virtual memory). Вона вперше була реалізована в 1959 р на комп'ютері Атлас, розробленому в Манчестерському університеті, і стала популярною тільки через десятиліття.

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

Можливість виконання програми, що знаходиться в пам'яті лише частково має ряд цілком очевидних переваг:

  • Програма не обмежена величиною фізичної пам'яті. Спрощується розробка програм, оскільки можна задіяти великі віртуальні простори, не піклуючись про розмір використовуваної пам'яті.

  • Оскільки з'являється можливість часткового приміщення програми (процесу) в пам'ять і гнучкого перерозподілу пам'яті між програмами, можна розмістити в пам'яті більше програм, що збільшує завантаження процесора і пропускну здатність системи.

  • Обсяг введення-виведення для вивантаження частини програми на диск може бути менше, ніж у варіанті класичного свопінгу, в результаті, кожна програма буде працювати швидше.

Таким чином, можливість забезпечення (за підтримки операційної системи) для програми видимості практично необмеженої (32- або 64-розрядної) адресується пам'яті користувача за наявності основної пам'яті суттєво менших розмірів дуже важливий аспект. Але введення віртуальної пам'яті дозволяє вирішувати іншу не менш важливу задачу забезпечення контролю доступу до окремих сегментів пам'яті і зокрема захист призначених для користувача програм один від одного і захист ОС від призначених для користувача програм.

З метою захисту віртуальна пам'ять підтримувалась і на комп'ютерах з 16-розрядної адресацією, в яких обсяг основної пам'яті найчастіше істотно перевищував 64 Кбайта (розмір віртуальної пам'яті). Наприклад, 16-розрядний комп'ютер PDP-11/70 міг мати до 2 Мбайт оперативної пам'яті. Операційна система цього комп'ютера, проте, підтримувала віртуальну пам'ять, основним змістом якої було забезпечення захисту та перерозподілу основної пам'яті між призначеними для користувача процесами.

Нагадаємо, що в системах з віртуальною пам'яттю ті адреси, які генерує програма, - (логічні адреси) - називаються віртуальними, і вони формують віртуальний адресний простір. За відсутності механізму віртуальної пам'яті ВАП безпосередньо відображається в фізичний простір.

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

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

9.2 Архітектурні засоби підтримки віртуальної пам'яті.

Очевидно, що неможливо створити повністю машинно-незалежний компонент управління віртуальною пам'яттю. З іншого боку, є істотні частини програмного забезпечення, пов'язаного з управлінням віртуальною пам'яттю, для яких деталі апаратної реалізації зовсім не важливі. Одним з досягнень сучасних ОС є грамотне та ефективне поділ коштів управління віртуальною пам'яттю на апаратно-незалежну та апаратно-залежну частини. Коротко розглянемо, що і яким чином входить в апаратно-залежну частину підсистеми управління віртуальною пам'яттю. Компоненти апаратно-незалежної підсистеми розглянуті в наступному розділі.

Отже, ми маємо велике (для 32-розрядних архітектур це зазвичай 2 ** 32 = 4 Гб) ВАП і фізичний простір істотно меншого розміру. Призначений для користувача процес або ОС повинні мати можливість здійснити запис по віртуальному адресою, а завдання ОС зробити так, щоб записана інформація виявилася в фізичної пам'яті (згодом при нестачі оперативної пам'яті вона може бути витіснена в зовнішню пам'ять).

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

9.2.1 Сторінкова пам'ять

У найбільш простому і найбільш часто використовується випадку сторінкової віртуальної пам'яті віртуальна пам'ять і фізична представляються що складаються з наборів блоків або сторінок однакового розміру. Віртуальні адреси діляться на сторінки (page), відповідні одиниці в фізичної пам'яті утворюють сторінкові кадри (page frames), а в цілому система підтримки сторінкової віртуальної пам'яті називається ПЕЙДЖИНГ (paging). Передача інформації між пам'яттю і диском завжди здійснюється цілими сторінками. Сторінки, на відміну від сегментів, мають фіксовану довжину, зазвичай що є ступенем числа 2, і не можуть перекриватися.

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

Для перетворення адресного простору кожного процесу використовується одна або кілька таблиць сторінок, які зазвичай зберігаються в оперативній пам'яті. Для посилання на таблицю сторінок використовується спеціальний регістр процесора. Особливості зберігання таблиці сторінок описані нижче. Інтерпретація віртуального (логічного) адреси показана на рис. 9.1

Мал. 9.1 Зв'язок логічного і фізичного адрес при сторінкової організації пам'яті.

Динамічне перетворення адрес в системі здійснюється наступним чином. Здійснюється процес звертається по віртуальному адресою v = (p, d). Механізм відображення шукає номер сторінки p в таблиці відображення і визначає, що ця сторінка знаходиться в сторінковому кадрі p ', формуючи реальну адресу з p' і d.

Н апример, в машинної інструкції move reg, 0, адреса 0 знаходиться на першій віртуальної сторінці, яка може бути локалізована, в другому сторінковому кадрі. У реальних системах функція відображення зберігає біт присутності сторінки у фізичній пам'яті. При відсутності сторінки в пам'яті виникає виняткова ситуація, звана сторінкове порушення (page fault). Обробка сторінкового порушення призводить до того, затребувана сторінка підкачуються з конкретного місця вторинної пам'яті у вільний сторінковий кадр фізичної пам'яті і триває перерваний код. При відсутності вільних сторінкових кадрів на диск вивантажується мало використовувана сторінка.

Номер сторінки, як індекс зберігається в таблиці сторінок (page table), яка адресується за допомогою спеціального регістра процесора, і дозволяє визначити номер кадру по віртуальному адресою. Крім цього основного завдання за допомогою атрибутів, записаних в рядку таблиці сторінок, можна організувати контроль доступу до конкретної сторінці і її захист.

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

Важливий аспект - відмінність точок зору користувача і системи на активну пам'ять. З точки зору користувача його пам'ять - єдине безперервне простір, що містить, тільки одну програму. Реальне відображення приховано від користувача і контролюється ОС. Зауважимо, що процесу користувача недоступна чужа пам'ять. Він не має можливості адресувати пам'ять за межами своєї таблиці сторінок, яка включає тільки його власні сторінки.

Для управління фізичної пам'яттю ОС підтримує структуру таблиці кадрів. Вона має одну запис на кожен фізичний кадр, який показує його стан.

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

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

9.2.2 Сегментна і сегментно-сторінкова організації пам'яті

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

З точки зору користувача процес представляється зазвичай не як лінійний масив байтів, а як набір сегментів змінного розміру (дані, код, стек). Сегментація - схема управління пам'яттю, яка підтримує той погляд користувача. Сегменти містять процедури, масиви, стек або скалярні величини, але зазвичай не містять інформацію змішаного типу.

Програмісти, що пишуть на мовах низького рівня повинні мати уявлення про сегментной організації, явно змінюючи значення сегментних регістрів (це добре видно з текстів програм, написаних на Асемблері). Логічний адресний простір - набір сегментів. Кожен сегмент має ім'я, розмір і інші параметри (рівень привілеїв, дозволені види звернень, прапори присутності). Користувач специфицирует кожну адресу двома величинами: ім'ям сегмента і зміщенням. (На відміну від схеми пейджінга, де користувач задає тільки одну адресу, який розбивається hardware на номер сторінки і зсув, прозорим для програміста чином.)

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

Логічна адреса - впорядкована пара v = (s, d), номер сегмента і зміщення всередині сегменту.

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

Це дозволяє процесору вже на апаратному рівні визначати допустимість звернень до пам'яті, спрощуючи реалізацію захисту інформації від пошкодження і несанкціонованого доступу

Мал. 9.2 Перетворення логічного адреси при сегментної організації пам'яті.

Апаратна підтримка сегментів відносно слабко поширена (головним чином на процесорах архітектури Intel) і характеризується досить повільної завантаженням селектор в сегментні регістри, виконувана при кожному перемиканні контексту і при кожному переході між різними сегментами. У системах з чисто сторінкової організацією пам'яті для опису типового адресного простору процесу, що представляє собою набір сегментів, сегментація реалізується на рівні, незалежному від апаратури.

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

Відповідно, використовуються дві таблиці відображення - таблиця сегментів, що зв'язує номер сегменту з таблицею сторінок, і окрема таблиця сторінок для кожного сегмента

Мал. 9.3 Формування фізичної адреси при сегментно-сторінкової організації пам'яті.

Сегментно-сторінкова організація віртуальної пам'яті дозволяла спільно використовувати одні й ті ж сегменти даних та програмного коду у віртуальній пам'яті різних завдань (для кожної віртуальної пам'яті існувала окрема таблиця сегментів, але для спільно використовуваних сегментів підтримувалися загальні таблиці сторінок).

9.2.3 Таблиця сторінок

Організація таблиці сторінок один з ключових елементів механізмів сторінкового і сегментно-сторінкової перетворень. Розглянемо структуру таблиці сторінок більш детально.

Отже, віртуальний адреса складається з віртуального номера сторінки (high-order bits) і зміщення (low-order bits). Номер віртуальної сторінки використовується як індекс в таблиці сторінок для знаходження запису (entry) про віртуальну сторінці. З цього запису в таблиці сторінок знаходиться номер кадру (page frame number), потім додається зсув і формується фізичну адресу. Крім цього запис в таблиці сторінок містить інформацію про атрибути сторінки, зокрема біти захисту.

Основну проблему для ефективної реалізації таблиці сторінок створюють великі розміри віртуальних адресних просторів сучасних комп'ютерів, які зазвичай визначаються розрядністю архітектури процесора. Найпоширенішими на сьогоднішній день є 32-розрядні процесори, що дозволяють створювати віртуальні адресні простори такого розміром 4 Гб (для 64-розрядних комп'ютерів ця величина дорівнює 2 ** 64б).

Підрахуємо приблизний розмір таблиці сторінок. У 32-бітному адресному просторі при розмірі сторінки 4К (Intel) отримуємо 1М сторінок, а в 64-бітному та того більше. Т.ч. таблиця повинна мати 1М рядків (entry), причому запис в рядку складається з декількох байт. Зауважимо, що кожен процес, потребує своєї таблиці сторінок (а в разі сегментно-сторінкової схеми по одній на кожен сегмент). Отже, в цьому випадку таблиця сторінок може бути занадто великий.

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

Для того щоб уникнути необхідності мати величезну таблицю в пам'яті весь час, а зберігати лише кілька її фрагментів (це можливо знову ж на підставі властивості локальності!), Багато комп'ютерів використовують багаторівневу таблицю сторінок.

Розглянемо модельний приклад (див. Рис. 9.4). Припустимо, що 32-розрядний адреса ділиться на 10-розрядне поле Р tr 1, 10-розрядне поле Рtr2 і 12-розрядний зсув Offset. 12 розрядів зсуву дозволяють локалізувати байт всередині сторінки розміром 4К (2 ** 12), а всього маємо 2 ** 20 сторінок. Як видно з рис. 9.4 1024 рядки в таблиці верхнього рівня за допомогою поля Ptr 1 посилаються на 1024 таблиці другого рівня, кожна з яких містить також 1024 рядки. За допомогою поля Ptr 2 кожен рядок таблиці другого рівня вказує на конкретну сторінку. Сенс такої організації в тому, щоб уникнути підтримки всіх таблиць другого рівня (а їх 1024) в пам'яті постійно. Розглянемо приклад з круглими цифрами. Припустимо, що процесу потрібні 12М пам'яті: 4М в нижній частині пам'яті для коду, 4М в нижній частині для даних і 4М у верхній частині пам'яті для стека. Між дном стека і верхом даних гігантський простір розміром 4 Gb -12 Mb, яке не використовується. Для цього випадку необхідні лише 1 таблиця верхнього рівня і 3 таблиці другого рівня.

Мал. 9.4 Приклад дворівневої таблиці сторінок.

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

Розглянемо одну із записів таблиці сторінок. Її розмір коливається від системи до системи, але 32 біта - найбільш загальний випадок. Найважливіше поле - номер кадру. Мета сторінкового відображення - локалізувати цю величину. Далі біт присутності. Далі біти захисту (наприклад, 0 - read / write, 1 - read only ...) Є ще біти модифікації (якщо на неї писали) і біти посилання, які допомагають виділити мало використовувані сторінки, біти дозволяють кешування. Зауважимо, що адреси сторінок на диску не є частиною таблиці сторінок.

Як наявність декількох рівнів позначається на продуктивності менеджера пам'яті? Якщо припустити, що кожен рівень - окрема таблиця в пам'яті, перетворення адреси може зажадати декількох звернень до пам'яті.

Кількість рівнів в таблиці сторінок залежить від конкретних особливостей архітектури. Можна навести приклади реалізації одноуровневого (DEC PDP -11), дворівневого (Intel, DEC VAX), трирівневого (Sun SPARC, DEC Alpha) paging 'а, а також paging' а з заданим кількістю рівнів (Motorola). Функціонування RISC процесора MIPS R 2000 здійснюється взагалі без таблиці сторінок. Тут пошук потрібної сторінки, якщо ця сторінка відсутня в асоціативної пам'яті, повинна взяти на себе ОС (так званий zero level paging).

9.2.4 Асоціативний пам'ять.

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

Відповідно до властивістю локальності більшість програм протягом певного проміжку часу роблять посилання до невеликого числа сторінок, таким чином, тільки невелика частина таблиці сторінок працює напружено.

Природне рішення - забезпечити комп'ютер апаратним пристроєм для відображення віртуальних сторінок в фізичні без звернення до таблиці сторінок, тобто мати невелику, швидку кеш-пам'ять, що зберігає необхідну на даний момент частина таблиці сторінок. Це пристрій називається асоціативна пам'ять, іноді також вживають термін асоціативні регістри (іноді translation lookaside buffer (TLB)).

Одна запис в таблиці в асоціативної пам'яті містить інформацію про одну віртуальну сторінку, її атрибути і кадр, в якому вона знаходиться. Ці поля в точності відповідають полям у таблиці сторінок.

Відображення віртуальних сторінок, збережених в асоціативної пам'яті, здійснюється швидко, проте кеш пам'ять є дорогою і має обмежений розмір. Число записів в TLB від 8 до 2048

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

Розглянемо функціонування менеджера пам'яті при наявності асоціативної пам'яті. Спочатку він шукає віртуальну сторінку в асоціативної пам'яті. Якщо сторінка знайдена - все нормально за винятком випадків порушення привілеїв, коли запит на звернення до пам'яті відхиляється.

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

Відсоток раз, коли номер сторінки знаходиться в асоціативної пам'яті, називається hit (збіг) ratio (пропорція, ставлення). Таким чином, hit ratio - частина посилань, яка може бути зроблена з використанням асоціативної пам'яті. Звернення до одних і тих же сторінок підвищує hit ratio.

Наприклад, припустимо, що для доступу до таблиці сторінок необхідно 100 нс, а для доступу до асоціативної пам'яті 20 нс. З 90% hit ratio середній час доступу - 0.9 * 20 + 0.1 * 100 = 28 нс.

Цілком прийнятна продуктивність сучасних ОС доводить ефективність використання асоціативної пам'яті. Високе значення ймовірності знаходження даних в асоціативної пам'яті пов'язано з наявністю у даних об'єктивних властивостей: просторової і тимчасової локальності.

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

9.2.5 Ієрархія пам'яті

Всі попередні міркування справедліві и для других пар запам'ятовуючий прістроїв, например, для оператівної пам'яті и зовнішньої пам'яті. У цьом випадка зменшується середній час доступу до Даних, розташованім на диску, и роль кеш-пам'яті Виконує буфер в оператівній пам'яті.

Розглянута нами схема трирівневої пам'яті (асоціативна, основна, вторинна) є окремим випадком багаторівневої пам'яті. Наприклад, як показано на рис. 9.5, різновиди пам'яті можуть бути організовані в ієрархію по спадаючій швидкості доступу і зростанню ціни.

. .

Мал. 9.5 Ієрархія пам'яті комп'ютера

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

9.2.6 Розмір сторінки

Дизайнери ОС для існуючих машин рідко мають можливість впливати на розмір сторінки. Однак для новостворюваних комп'ютерів рішення щодо оптимального розміру сторінки є актуальним. Як і можна було очікувати немає одного найкращого розміру. Швидше є набір факторів, що впливають на розмір. Зазвичай розмір сторінки це ступінь двійки від 2 ** 9 до 2 ** 14 байт.

Чим більше розмір сторінки, тим менше буде розмір структур даних, які обслуговують перетворення адрес, але тим більше будуть втрати, пов'язані з тим, що пам'ять можна виділяти тільки посторінково.

Як слід вибирати розмір сторінки? По-перше, потрібно враховувати розмір таблиці сторінок, тут бажаний великий розмір сторінки (сторінок менше, відповідно і таблиця сторінок менше). З іншого боку пам'ять краще утилізується з маленьким розміром сторінки. В середньому половина останньої сторінки процесу пропадає. Необхідно також враховувати обсяг введення-виведення для взаємодії з зовнішньою пам'яттю і інші фактори. Проблема не має доброї відповіді. Історична тенденція полягає в збільшенні розміру сторінки. Як правило, розмір сторінок задається апаратно, наприклад, на Intel - це 4096 байт (або 4 Кбайт), на DEC PDP-11 - 8 Кбайт, на DEC VAX - 512 байт, на інших архітектурах, таких як Motorola 68030, розмір сторінок може бути заданий програмно.

Отже, нами розглянуто апаратні особливості підтримки віртуальної пам'яті. Перейдемо до її програмної підтримки.

попередня глава | програма курсу | наступна глава

Як наявність декількох рівнів позначається на продуктивності менеджера пам'яті?
Як слід вибирати розмір сторінки?