Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекції ОС.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.02 Mб
Скачать

5.9. Управління пам'яттю в unix

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

Кожен процес в UNIX має власне віртуальне адресний простір, розділяється на області програми, даних і стека. В залежності від архітектури пам'яті комп'ютера, область пам'яті UNIX може бути реалізована як один або кілька сегментів пам'яті, як набір віртуальних сторінок або просто як область у фізичній пам'яті. Адреси та розміри областей зберігаються як частина контексту процесу.

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

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

Ядро системи має власні області пам'яті. При виконанні системних викликів ядро ​​працює в контексті викликав процесу, тобто воно має доступ як до власної пам'яті, так і до областей пам'яті процесу.

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

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

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

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

Тут описано (дуже приблизно) лише один з варіантів управління пам'яттю, реалізованих в різних версіях UNIX і в Linux. Оскільки алгоритми управління фізичної пам'яттю є «внутрішньою справою» системи і не регламентуються ніякими стандартами, відповідні алгоритми, використовувані в різних версіях системи, можуть значно відрізнятися.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]