- •Організація пам'яті комп'ютера. Найпростіші схеми керування пам'яттю.
- •Фізична організація пам'яті комп'ютера
- •Локальність
- •Зв'язування адрес
- •Функції системи керування пам'яттю
- •Самостійне вивчення Найпростіші схеми керування пам'яттю
- •Один процес у пам'яті
- •Оверлейна структура
- •Динамічний розподіл. Свопінг
- •Сторінкова пам'ять
Самостійне вивчення Найпростіші схеми керування пам'яттю
Перші ОС застосовували дуже прості методи керування пам'яттю. Спочатку кожен процес користувача повинен був повністю поміститися в основній пам'яті, займати безперервну область пам'яті, а система приймала до обслуговування додаткові користувальницькі процеси доти, поки всі вони одночасно містилися в основній пам'яті. Потім з'явилася "простий свопінг" (система як і раніше розміщає кожен процес в основній пам'яті цілком, але іноді на підставі деякого критерію цілком скидає образ деякого процесу з основної пам'яті в зовнішню й заміняє його в основній пам'яті образом іншого процесу). Такого роду схеми мають не тільки історичну цінність. У цей час вони застосовуються в навчальні й науково-дослідних модельних ОС, а також в ОС для убудованих (embedded) комп'ютерів.
Схема з фіксованими розділами
Рис. 8.4. Схема з фіксованими розділами: (a) – із загальною чергою процесів, (b) – з окремими чергами процесів
Найпростішим способом керування оперативною пам'яттю є її попереднє (звичайно на етапі генерації або в момент завантаження системи) розбивка на кілька розділів фіксованої величини. Вступники процеси містяться в той або інший розділ. При цьому відбувається умовна розбивка фізичного адресного простору. Зв'язування логічних і фізичних адрес процесу відбувається на етапі його завантаження в конкретний розділ, іноді - на етапі компіляції.
Кожен розділ може мати свою чергу процесів, а може існувати й глобальна черга для всіх розділів(див. рис. 8.4). Ця схема була реалізована в IBM OS/360 (MFT), DEC RSX-11 і ряді інших систем.
Підсистема керування пам'яттю оцінює розмір процесу, що надійшов, вибирає підходящий для нього розділ, здійснює завантаження процесу в цей розділ і настроювання адрес.
Очевидний недолік цієї схеми - число одночасно виконуваних процесів обмежено числом розділів. Іншим істотним недоліком є те, що пропонована схема сильно страждає від внутрішньої фрагментації – втрати частини пам'яті, виділеної процесу, але не використовуваної ім. Фрагментація виникає тому, що процес не повністю займає виділений йому розділ або тому, що деякі розділи занадто малі для виконуваних користувальницьких програм.
Один процес у пам'яті
Окремий випадок схеми з фіксованими розділами - робота менеджера пам'яті однозадачної ОС. У пам'яті розміщається один користувальницький процес. Залишається визначити, де розташовується користувальницька програма стосовно ОС - у верхній частині пам'яті, у нижній або в середній. Причому частина ОС може бути в ROM (наприклад, BIOS, драйвери пристроїв). Головний фактор, що впливає на це рішення, - розташування вектора переривань, що звичайно локалізований у нижній частині пам'яті, тому ОС також розміщають у нижній. Прикладом такої організації може служити ОС MS-DOS.
Захист адресного простору ОС від користувальницької програми може бути організована за допомогою одного граничного регістра, що містить адресу границі ОС.
Оверлейна структура
Оскільки розмір логічного адресного простору процесу може бути більше, ніж розмір найбільшого розділу, іноді використається техніка, що називається оверлей (overlay) або організація структури з перекриттям. Основна ідея - тримати в пам'яті тільки ті інструкції програми, які потрібні в цей момент.
Рис. 8.5. Організація структури з перекриттям. Можна по черзі завантажувати на згадку галузі A-B, A-C-D й A-C- E програми
Потреба в такому способі завантаження з'являється, якщо логічний адресний простір системи мало, наприклад 1 Мбайт (MS-DOS) або навіть усього 64 Кбайта (PDP-11), а програма відносно велика. На сучасних 32-розрядних системах, де віртуальний адресний простір виміряється гігабайтами, проблеми з недостачею пам'яті вирішуються іншими способами (див. розділ "Віртуальна пам'ять").
Коди галузей оверлейною структури програми перебувають на диску як абсолютні образи пам'яті й зчитуються драйвером оверлїв при необхідності. Для опису оверлейної структури звичайно використається спеціальна нескладна мова (overlay description language). Сукупність файлів виконує програми, що, доповнюється файлом (звичайно з розширенням. odl), що описує дерево викликів усередині програми. Для приклада, наведеного на рис. 8.5, текст цього файлу може виглядати так:
A-(B,C)
C-(D,E)
Синтаксис подібного файлу може роз пізнаватися завантажником. Прив'язка до фізичної пам'яті відбувається в момент чергового завантаження однієї з галузей програми. Оверлеї можуть бути повністю реалізовані на користувальницькому рівні в системах із простою файловою структурою. ОС при цьому лише робить трохи більше операцій вводу-висновку. Типове рішення - породження лінкерами спеціальних команд, які включають завантажник щораз, коли потрібне обіг до однієї з галузей, що перекриваються, програми.
Ретельне проектування оверлейної структури забирає багато часу й вимагає знання пристрою програми, її коду, даних й язика опису оверлейної структури. Із цієї причини застосування оверлеїв обмежене комп'ютерами з невеликим логічним адресним простором. Як ми побачимо надалі, проблема оверлейних сегментів, контрольованих програмістом, відпадає завдяки появі систем віртуальної пам'яті. Помітимо, що можливість організації структур з перекриттями багато в чому обумовлена властивістю локальності, що дозволяє зберігати в пам'яті тільки ту інформацію, що необхідна в конкретний момент обчислень.
