Добавил:
twitch.tv Заведующий методическим кабинетом, преподаватель на кафедре компьютерного спорта и прикладных компьютерных технологий. Образование - Магистр Спорта. Суета... Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
9
Добавлен:
29.04.2022
Размер:
5.97 Mб
Скачать
  • Розділи пам’яті зі змінними розмірами.

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

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

    Виділення пам’яті під новий розділ може здійснюватись трьома способами:

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

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

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

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

    Тема 6. Керування віртуальною пам’яттю

    1. Структура, основні принципи віртуалізації пам’яті.

    2. Сегментна схема організації віртуальної пам’яті.

    3. Сторінкова схема організації віртуальної пам’яті.

    4. Сегментно - сторінкова схема організації віртуальної пам’яті..

    1. Структура, основні принципи віртуалізації пам’яті.

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

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

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

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

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

    1. Сегментна схема організації віртуальної пам’яті.

    Сегментна схема використовується в ОС OS/2.

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

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

    Рис. 6.1. Сегментний спосіб організації віртуальної пам’яті.

    РТДС – регістр таблиці дескрипторів сегментів;

    ВА – віртуальна адреса;

    S – сегмент;

    D – зміщення в середині сегмента;

    ТДПЗ – таблиця дескрипторів поточної задачі.

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

    Кожен сегмент, який розміщується в пам’яті має відповідну інформаційну структуру – яка називається дескриптором сегменту.

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

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

    • для того, щоб сегменти не перекривалися між собою;

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

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

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

    Задачі заміщення сторінок фізичної пам’яті вирішуються за допомогою використання таких дисциплін: FIFO (перший прийшов, перший вийшов); LRU (останній з недавно використаних, який найдовше не використовувався); LFU (це той сегмент, який використовувався рідше за всіх); ВВС (випадковий вибір сегментів).

    Розглянемо наступні особливості сегментного способу організації віртуальної пам’яті:

    • можливість при завантаженні програми на виконання розміщувати її в пам’яті не повністю, а по мірі необхідності. Наприклад, якщо програма має багато розгалужень і в залежності від вхідних даних деякі розгалуження не використовуються вони можуть бути розміщені в окремих сегментах, які в пам’ять можна і не завантажувати;

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

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

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

    1. Сторінкова схема організації віртуальної пам’яті.

    Використовується в ОС Linux, OS/2, Windows.

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

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

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

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

    Таким чином здійснюється трансляція віртуальної адреси на фізичній пам’яті, що показано на рис. 6.2.

    Рис. 6.2. Сторінкова схема організації віртуальної пам’яті.

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

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

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

    У сучасних мікропроцесорах (486 і інші) використовується механізм асоціативного кешу, який дозволяє кешувати 32 дескриптори сторінок, при чому розмір сторінки містить 4 Кб, розмір максимально швидкого звернення до пам’яті дорівнює відповідно 128 Кб.

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

    Є два недоліки:

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

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