Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Питання ректорського контролю_2012_початок_курс...doc
Скачиваний:
3
Добавлен:
20.11.2019
Размер:
1.36 Mб
Скачать
  1. Неперервний розподіл оперативної пам’яті.

Неперервний розподіл – це найпростіша схема, згідно якої всю пам’ять можна поділити на три частини:

  • область, яку займає операційна система;

  • область, в якій розміщується програма яка виконується;

  • незайнята область пам’яті.

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

  1. Розподіл з перекриттям.

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

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

Після того як поточний сегмент завершить своє виконання можливі два варіанти:

    • або він сам звертається до ОС з вказанням в який сегмент має бути завантажений в пам’ять наступним;

    • або повертає управління основній частині задачі і він звертається до ОС який сегмент потрібно зберегти, а який завантажити наступним.

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

  1. Статичний розподіл пам’яті.

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

Як правило, статичний розподіл здійснюється на рівні довгострокового планування під час розробки програми або ОС.

Приклад на мові Assembler:

buffer db 1024 dup(?)

  1. Динамічний розподіл пам’яті.

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

4Ah, 48h, 49h – функції операційної системи, переривання 21h – на мові Assembler.

Команди malloc, realloc – на мові С.

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