Практична робота № 1
З дисципліни «Операційні системи»
Тема: «Аналіз різних способів організації віртуальної пам'яті»
Хід виконання роботи:
1. Ознайомитися з теоретичними відомостями.
2. Вивчити роботу системи віртуальної пам'яті.
3. Дати порівняльну характеристику сегментного і сторінкового способу організації віртуальної пам'яті.
4. Відповісти на контрольні питання.
Сегментна, сторінкова і сегментно-сторінкова організація пам'яті
Сегментний спосіб організації віртуальної пам'яті
Перетворення імені сегмента в його порядковий номер здійснить система програмування. Для кожного сегмента система програмування вказує його обсяг. Він повинен бути відомий операційній системі, щоб вона могла виділяти йому необхідний обсяг пам'яті. Операційна система буде розміщувати сегменти в пам'яті і для кожного сегмента вона повинна вести облік про місцезнаходження цього сегмента. Вся інформація про поточний розміщенні сегментів завдання в пам'яті зазвичай зводиться в таблицю сегментів, частіше таку таблицю називають таблицею дескрипторів сегментів завдання. Кожне завдання має свою таблицю сегментів. Досить часто ці таблиці називають таблицями дескрипторів сегментів, оскільки за своєю суттю елемент таблиці описує розташування сегмента.
При пошуку вільного місця використовується одна з перерахованих вище дисциплін роботи диспетчера пам'яті (застосовуються правила «першого підходящого» і «самого невідповідного» фрагментів). Якщо вільного фрагмента пам'яті достатнього обсягу немає, але, тим не менш, сума цих вільних фрагментів перевищує вимоги по пам'яті для нового сегмента, то в принципі може бути застосовано «ущільнення пам'яті», про який ми вже говорили в підрозділі «Розділи з фіксованими межами» розділу «Розподіл пам'яті статичними та динамічними розділами».
В ідеальному випадку розмір сегмента повинен бути досить малим, щоб його можна було розмістити в випадково звільняються фрагментах оперативної пам'яті, але досить великим, щоб утримувати логічно закінчену частину програми з тим, щоб мінімізувати міжсегментні звернення.
Для вирішення проблеми заміщення (визначення того сегмента, який повинен бути або переміщений в зовнішню пам'ять, або просто заміщений новим) використовуються наступні дисципліни:
- правило FIFO (First In First Out - перший прийшов першим і вибуває);
- правило LRU (Least Recently Used - довше інших невикористаний);
- правило LFU (Least Frequently Used - рідше за інших використовується);
- випадковий (random) вибір сегмента.
Найважливішою проблемою, яка виникає при організації мультипрограмному режиму, є захист пам'яті. Для того щоб виконуються програми не змогли зіпсувати саму операційну систему і інші обчислювальні процеси, необхідно, щоб доступ до таблиць сегментів з метою їх модифікації був забезпечений тільки для коду самої ОС. Для цього код операційної системи повинен виконуватися в деякому привілейованому режимі, з якого можна здійснювати маніпуляції дескрипторами сегментів, тоді як вихід за межі сегмента в звичайній прикладній програмі повинен викликати переривання по захисту пам'яті. Кожна прикладна задача повинна мати можливість звертатися тільки до власних і до загальних сегментам.
При сегментном способі організації віртуальної пам'яті з'являється кілька цікавих можливостей.
По-перше, при завантаженні програми на виконання можна розміщувати її в пам'яті не цілком, а «в міру необхідності». Дійсно, оскільки в переважній більшості випадків алгоритм, за яким працює код програми, є розгалуженим, а не лінійним, то в залежності від вихідних даних деякі частини програми, розташовані в самостійних сегментах, можуть бути не задіяні; значить, їх можна і не завантажувати в оперативну пам'ять.
По-друге, деякі програмні модулі можуть бути розділяються. Оскільки ці програмні модулі є сегментами, відносно легко організувати доступ до таких загальних сегментам. Сегмент з розділяються кодом розташовується в пам'яті в єдиному екземплярі, а в декількох таблицях дескрипторів сегментів виконуються завдань будуть перебувати покажчики на такі колективні сегменти.
Тому наступним способом розривного розміщення завдань в пам'яті став спосіб, при якому всі фрагменти завдання вважаються рівними (однакового размеpa), причому довжина фрагмента в ідеалі повинна бути кратна ступеня двійки, щоб операції додавання можна було замінити операціями конкатенації (злиття). Це - сторінковий спосіб організації віртуальної пам'яті. Цей спосіб ми детально розглянемо нижче.