
- •Операційні системи
- •Функціонування комп'ютерної системи
- •Обработка переривань
- •Структура пам'яті
- •Лекція 5: Архітектура ос. Управління процессами: Основні поняття. Семафори і монітори План
- •2. Керування процесами
- •Віртуальні машини - інший розповсюджений підхід до розробки операційних систем й їхніх користувальницьких інтерфейсів
- •Механізми й політики
- •Реалізація операційних систем
- •Генерація операційної системи
- •Перемикання з одного процесу на інший
- •Планувальники, що виконують диспетчеризацію процесів
- •Лекція 10. Методи синхронізації процесів План
- •Алгоритм рішення проблеми критичної секції
- •Алгоритм «в пиріжковій» (bakery algorithm)
- •Синхронізація на основі загальних семафорів
- •Реалізація семафорів
- •Рішення за допомогою семафорів завдання
- •Рішення за допомогою семафорів завдання "читачі - письменники"
- •Рішення за допомогою семафорів завдання " філософи, що обідають,"
- •Монітори
- •Лекція № 11. Управління памяттю План
- •Динамічне завантаження й динамічна лінковка
- •Оверлейна структура програми
- •Відкачка й підкачування
- •Лекція 13. Сегментна організація пам’яті. Віртуальна пам’ять
- •Оптимальний алгоритм заміщення сторінок
- •Сторінкова організація на вимогу в Windows nt
- •Лекція № 14. Системи файлів План
- •Типова організація файлової системи зображена на мал. 19.3.
- •Логічна організація директорій
- •Монтування файлових систем
- •Структура файлової системи
- •Лекція № 15. Віртуальні файлові системи План
- •Лекція 17. Системи вводу-виводу План
- •Опитування пристроїв
- •Переривання
- •Ввід-вивід із прямим доступом до пам'яті (dma)
- •Блокові й символьні пристрої
- •Мережні пристрої істотних відрізняються від блоків і символьних; мають свій власний інтерфейс і систему команд
- •Годинники й таймери
- •Блокуємий (синхронний) і не блокуємий (асинхронний) ввід-вивід
- •Структури даних для вводу-виводу в ядрі ос
- •Життєвий цикл запиту на ввід-вивід
- •Продуктивність вводу-виводу
- •Лекція 18. Мережі й мережеві структури. Класичні и сучасні мережеві комунікаційні протоколи План
- •Мережі Ethernet
- •Протокол tcp/ip
- •Функционирование Ethernet-мереж
- •Лекція 19: Безпека операційних систем і мереж. План
- •Лекція 20. Огляд архітектури й можливостей системи Linux: архітектура, ядро, поширення й ліцензування, принципи проектування, керування процесами План
- •Історія Linux
- •Ядро Linux
- •Сучасний стан Linux, дистрибутиви й ліцензування
- •Принципи проектування й компоненти системи Linux
- •Модулі ядра, що завантажують, Linux
- •Керування процесами в Linux
- •Планування завдань ядра й синхронізація в ядрі
- •Лекція 21. Огляд архітектури й можливостей системи Linux: керування пам'яттю, ресурсами, файлові системи, драйвери пристроїв, мережі, безпека План
- •Керування фізичною пам'яттю в Linux
- •Віртуальна пам'ять в Linux
- •Виконання й завантаження користувальницьких програм в Linux
- •Системи файлів Linux
- •Ввод й вивід в Linux
- •Взаємодія процесів в Linux
- •Структура мережі в Linux
- •Безпека в Linux
- •Розвиток і використання Linux
- •Лекція 22. Огляд архітектури й можливостей систем Windows 2000/xp/2003/Vista/2008/7 План
- •Система Windows 2000
- •Історія Windows
- •Принципи проектування Windows 2000 - розширюваність, переносимость, надійність, безпека, сумісність, продуктивність, підтримка інтернаціоналізації й локалізації.
- •Архітектура Windows 2000
- •Ядро Windows 2000
- •Обработка переривань у ядрі
- •Виконавча підсистема (executive) ос Windows 2000
- •Підсистеми оточення в Windows 2000
- •Лекція 23. Системні механізми Windows План
- •Система файлів Windows
- •Рограммный інтерфейс Windows
- •Програмний інтерфейс Windows: Керування процесами
- •Керування віртуальною й фізичною пам'яттю й робочими наборами в Windows
- •Лекція 24. Ос для мобільних пристроїв. Windows Mobile План
- •Особливості ос для мобільних пристроїв
- •Ринок ос для мобільних пристроїв
- •Перспективи ос для мобільних пристроїв
- •Лекція 25. Перспективи операційних систем і мереж План
- •Операційні системи інших великих фірм
- •Solaris - операційна система розробки фірми Oracle / Sun
- •Сучасні тенденції в розвитку ос
- •Нові ос сімейства Windows
- •Нові тенденції в розвитку ос
- •Графічні оболонки ос
- •Підтримка паралельних обчислень
- •Розвиток бездротових мереж
- •Перспективи розвитку ос
Лекція 13. Сегментна організація пам’яті. Віртуальна пам’ять
План
Принципи сегментної організації пам'яті
Архітектура сегментної організації пам'яті
Приклад сегментної організації пам'яті
Приклад використання поділюваних сегментiв
Сегментно-страничная організація пам'яті в системах MULTICS и "Эльбрус"
Сегментно-страничная організація пам'яті в системе Intel 386
Сегментна організація пам'яті (segmentation) - схема розподілу пам'яті у вигляді сегментів змінної довжини, що відповідає користувальницькому трактуванню розподілу пам'яті, тобто логічній структурі програм і даних. З погляду користувача (розроблювача програми), програма – це набір модулів коду й даних, кожному з яких повинен відповідати свій сегмент у пам'яті. Сегмент - логічна одиниця розподілу пам'яті, призначена для розміщення в пам'яті одного модуля програмного коду або даних. Наприклад, у вигляді сегментів пам'яті можуть бути представлені:
основная програма;
процедура;
функція;
метод;
об'єкт;
набір локальних змінних;
набір глобальних змінних;
загальний блок даних (наприклад, COMMON-блок у мові FORTRAN);
стек;
таблиця символів;
масив.
рис. 17.1 ілюструє дану точку зору на програму як на набір сегментів у пам'яті.
Рис. 17.1. Програма як набір сегментів.
Архітектура сегментної організації пам'яті
Багато принципів архітектури сегментної організації схожі із принципами сторінкової організації, однак у всіх випадках доводиться враховувати, що довжина сегмента змінна, і зберігати її в явному виді в таблицях.
Таблиця сегментів – служить для відображення логічних адрес у фізичні при сегментній організації пам'яті. Кожен її елемент містить наступну інформацію:
base – початкова адреса сегмента в оперативній (фізичної) пам'яті;
limit – довжину сегмента.
Базовий регістр таблиці сегментів - segment-table base register (STBR) містить адреси таблиці сегментів у пам'яті.
Регістр довжини таблиці сегментів - segment-table length register (STLR) містить число сегментів, використовуване програмою.
Номер сегмента s коректний, якщо s < STLR.
Переміщення (relocation) програм і даних при сегментній організації динамічне, тобто виконується під час виконання програми за допомогою таблиці сегментів.
Можливий загальний доступ (sharing) декількох процесів до того самого сегмента, тобто підтримується концепція поділюваних сегментів. При цьому логічний номер загального сегмента для різних процесів буде тим самим.
Стратегії розподілу пам'яті при сегментній організації: метод першого підходящого або метод найбільш підходящого. Метод найменш підходящого при сегментній організації змісту не має, тому що він не поліпшує ситуацію із фрагментацією (через змінну довжину сегментів). Відповідно, при сегментній організації можлива зовнішня фрагментація, для боротьби з якою застосовується компактировка.
Захист при сегментній організації організований аналогічно захисту при сторінковій організації, однак, через те, що каждый сегмент виконує певну логічну функцію в програмі, додатково з кожним сегментом зв'язуються його ознаки захисту. Таким чином, у кожному елементі таблиці сегментів зберігаються:
validation-біт (аналогічно сторінкової організації): значення біта, рівне 0, означає, що сегмент невірний, тобто не належить логічній пам'яті процесу;
повноваження читання (read) / запису (write) / виконання (execute) – кожне кодується одним бітом; значення біта, рівне 0, означає, що процес не має даних повноважень.
Наприклад, якщо сегмент є сегментом даних, то система встановлює в таблиці сегментів біт захисту від виконання рівним 0. Якщо це сегмент коду, то доцільно установку в 0 бітів захисту від читання й від запису.
Біти захисту зв'язуються із сегментами. Спільний доступ до коду здійснюється на рівні сегментів.
Оскільки сегменти розрізняються по довжині, розподіл пам'яті у вигляді сегментів – це загальне завдання динамічного розподілу пам'яті.
На рис. 17.2 наведено схему адресації при сегментному розподілі пам'яті. Логічна адреса (s, d), де s - номер сегмента, d - зсув усередині сегмента, обробляється в такий спосіб. По номеру сегмента s відбувається звернення до таблиці сегментів, і визначається база сегмента - його початкова адреса в основній пам'яті. Зсув d рівняється з довжиною (границею) сегмента. Якщо він менший, то складається з базою, і в результаті виходить фізична адреса, по якій відбувається звернення до пам'яті. Якщо зсув більше або дорівнює базі, відбувається переривання - помилка адресації. На схемі не показана ще одна перевірка - для номера сегмента s перевіряється, що він не перевершує значення регістра довжини таблиці сегментів, інакше - переривання.
Рис. 17.2. Схема адресації при сегментній організації пам'яті.
Користувачі
систем UNIX, Linux, Solaris напевно по асоціації
згадають системне повідомлення, що
часто зустрічається:
Segmentation violation (порушення сегментації)
при перериванні. Причина подібного
повідомлення звичайно наступна: програма
намагається звернутися по порожньому
(нульовому) покажчику,
номер сегмента в якому, природно, дорівнює
0, а номер сегмента 0 уважається в системі
неприпустимим. Таким чином, через
перевірку номера сегмента, UNIX захищає
від такої помилки, що часто зустрічається,
як обіг по порожньому покажчику.
Аналогічно, по тій же самій причині,
якщо програма намагається практично
будь-яке інше число (наприклад, 5)
розглядати як адресу й звертатися по
ньому, то також генерується переривання
й сигнал SIGSEGV (segmentation
violation).
Сегментно-сторінкова організація пам'яті в системах MULTICS й "Ельбрус"
Сегментний розподіл пам'яті, як видно з попередніх пунктів, має свої незаперечні переваги. Однак, на жаль, проблема зовнішньої фрагментації при чисто сегментній організації пам'яті досить серйозна.
Тому в системі MULTICS проблеми зовнішньої фрагментації й тривалого часу пошуку вирішені шляхом сторінкової організації пам'яті для сегментів. Дане рішення відрізняється від чисто сегментної організації тим, що елемент таблиці сегментів містить не базову адресу сегмента, а базову адресу таблиці сторінок для даного сегмента.
Схема трансляції адрес в MULTICS наведена на рис. 17.5.
Рис. 17.5. Схема трансляції адрес в MULTICS.
Логічна адреса (s, d) використовується в такий спосіб. Номер сегмента s складається із значенням регістра STBR, після чого відбувається звернення по отриманій адресі в таблицю сегментів. Зсув d зрівнюється з довжиною сегмента; якщо він більший або дорівнює довжині сегмента, то переривання. З елемента таблиці сегментів витягається адреса бази таблиці сторінок даного сегмента, що складається зі старшими розрядами зсуву (p). Молодші розряди зсуву використаються як зсув усередині сторінки, адреса якої витягається з таблиці сторінок даного сегмента.
Не можна не відзначити, що дана схема, трохи ускладнена. Система MULTICS, у якій цей і багато інших механізмів доведені, здавалося б, до досконалості, викликала протилежну тенденцію в розвитку ОС - до спрощення. Як ми вже говорили, навіть назву наступної системи - UNIX - обрано як протилежність MULTICS, що говорить багато про що. Такі тенденції розвитку в багатьох областях, у тому числі й в операційних системах.
Сегментно-страничная організація пам'яті в системі Intel 386
У більше сучасних системах, чим MULTICS, також використається сегментно-страничная організація. Наприклад, у системі Intel 386 використається сегментно-сторінкова організація пам'яті із дворівневою схемою сторінкової організації (див. рис. 17.6).
Рис. 17.6. Сегментно-страничная організація пам'яті в Intel 386.
Віртуальна пам'ять
Мотивування концепції віртуальної пам'яті;
Потреба в сторінковій організації;
Створення процесу і його простору віртуальної пам'яті;
Заміна сторінки;
Розміщення фреймів;
Thrashing;
Приклади організації віртуальної пам'яті в різних ОС.
Віртуальна пам'ять – розповсюджена стратегія розподілу пам'яті, використовувана у всіх сучасних операційних системах, заснована на ідеї розширення фізичної пам'яті шляхом розміщення розширеної пам'яті на диску й використання таблиць сторінок (або сегментів) для трансляції адрес. У лекції розглянуті наступні питання:
Мотивування концепції віртуальної пам'яті
Концепція віртуальної пам'яті заснована на ідеях відділення логічної пам'яті користувача від фізичної пам'яті й розширення логічної пам'яті шляхом зберігання її образа на диску.
При виконанні програми тільки частина її коду й даних, до яких відбувається обіг, у кожен момент вимагає розміщення у фізичній пам'яті. Тому, природно, виникає ідея розширити простір логічної пам'яті, що може бути реалізоване набагато більшого розміру, чим фізична пам'ять. Це і є основний принцип організації віртуальної пам'яті.
Віртуальна пам'ять підтримує спільне використання того самого адресного простору більш ніж одним процесом, створення й виконання полегшених процесів у загальному просторі віртуальної пам'яті.
Віртуальна пам'ять допускає більше ефективне створення процесу, чим попередні схеми організації пам'яті й процесів.
Помітимо, що концепція віртуальної пам'яті безпосередньо не зв'язана ні зі сторінковою, ні із сегментною стратегіями розподілу пам'яті. Віртуальна пам'ять може бути реалізована різними способами, наприклад, за допомогою:
сторінкової організації на вимогу (paging on demand);
сегментної організації на вимогу (segmentation on demand).
У наведених термінах підкреслюється динамічний характер керування віртуальною пам'яттю: термін на вимогу означає, що сторінка або сегмент будуть розміщені у фізичній пам'яті тільки у випадку, якщо до них реально відбувається звернення із програми користувача. Причому якщо розмір оброблюваної області віртуальної пам'яті (наприклад, масиву) дуже великий - наприклад, 1000 сторінок, то у фізичній пам'яті буде розміщена тільки та його сторінка, до якої звертається користувальницька програма.
Принцип керування віртуальною пам'яттю ілюструється рис. 18.1.
Рис. 18.1. Віртуальна пам'ять і фізична пам'ять.
Зі схеми видно, що віртуальна пам'ять, як передбачається, більше, ніж фізична пам'ять. Взаємодія між частинами віртуальної пам'яті й фізичної пам'яті відбувається через відображення пам'яті – системну таблицю (сегментів, сторінок і т.п.). Образ віртуальної пам'яті процесу зберігається на диску.
Сторінкова організація на вимогу
Принцип реалізації віртуальної пам'яті у вигляді сторінкової організації на вимогу полягає в тому, що кожна сторінка завантажується в пам’ять, тільки якщо вона реально потрібна при виконанні програми – містить код або дані, до яких відбулося звертання.
Переваги даного підходу:
Менший обсяг вводу-виводу: В пам’ять підкачується тільки мінімально необхідний обсяг даних (наприклад, одна сторінка великого масиву, а не весь багатосторінковий масив);
Менший обсяг пам'яті: При даному способі витрачається мінімально необхідний обсяг фізичної пам'яті;
Більше швидка реакція системи: Оскільки обсяг пересила даних менше, система в середньому швидше реагує на кожен запит до пам'яті;
Система може обслуговувати більше число користувачів: Через економію фізичної пам'яті й часу обігу, система в стані при даному підході обслуговувати більше число користувальницьких процесів.
Основні принципи сторінкової організації на вимогу:
Якщо сторінка потрібно програмі, на неї є посилання із програми.
Якщо посилання на сторінку невірне (наприклад, сторінки з даним номером не існує), відбувається переривання.
Якщо необхідна сторінка відсутня в пам'яті, то вона підкачується в пам’ять. Механізм підкачування реалізується через переривання (page fault - відмова сторінки).
рис. 18.2 ілюструє розміщення віртуальної пам'яті на диску і її відкачці й підкачування.
Рис. 18.2. Перетворення сторінкової пам'яті в безперервний дисковий простір.
Зі схеми видно, що, з погляду кожної програми, простір її віртуальної пам'яті безупинно. Воно перетвориться в безперервну область дискової пам'яті. За допомогою механізму відкачки - підкачування в потрібний момент сторінка віртуальної пам'яті розміщається в основній пам'яті.
З кожним елементом таблиці сторінок зв'язується біт "valid/invalid", однак, на відміну від організації логічної пам'яті, він грає трохи іншу роль – він указує на присутність або відсутність сторінки в основній пам'яті. Значення біта дорівнює 1, якщо сторінка в пам'яті, і 0, якщо сторінка відсутня в пам'яті.
Спочатку для всіх елементів таблиці сторінок біт valid/invalid покладається рівним 0.
Якщо в процесі трансляції адреси біт "valid/invalid" у таблиці сторінок виявляється рівним 0, то відбувається переривання по відсутності сторінки в пам'яті (page fault).
На рис. 18.3 наведено приклад таблиці сторінок, у якій не всі сторінки присутні в основній пам'яті.
Рис. 18.3. Приклад таблиці сторінок, у якій не всі сторінки в пам'яті.
На схемі логична пам'ять процесу складається з 6 сторінок з номерами від 0 до 5. Однак тільки сторінки 0, 2, 5 розміщені в основній пам'яті (біт valid/invalid має значення v = 1). Сторінки 1, 3, 4 в основній пам'яті відсутні (біт valid/invalid дорівнює i = 0).
Обробка ситуації відсутності сторінки в пам'яті
Якщо в таблиці сторінок є посилання на сторінку, відсутню в пам'яті, перше ж звернння по такому посиланню приведе до переривання й викличе ОС (ситуації page fault - відсутність сторінки в пам'яті)
ОС по таблицях визначає, що саме відбулося:
Якщо має місце невірне посилання (на сторінку, відсутню в логічній пам'яті), то робота програми припиняється.
Якщо ж має місце звичайна відсутність сторінки в пам'яті, то ОС повинна розмістити його в основній пам'яті. Для цього ОС виконує наступний алгоритм:
Знайти незайнятий фрейм в основній пам'яті ;.
Уважати вміст сторінки в даний фрейм ;
Змінити елемент таблиці сторінок: validation-битий установити рівним 1;
Продовжити роботу програми. Нагадаємо, що програма після переривання триває з тієї ж команди, що була перервана через відсутність сторінки. Тому тепер програма продовжить нормально виконуватися, і звертання до сторінки відбудеться успішно.
Етапи обробки ситуації відсутності сторінки в пам'яті показані на рис. 18.4.
Рис. 18.4. Обробка ситуації відсутності сторінки в пам'яті.
Етап 1 – виконання команди load M, що переривається по відсутності сторінки в пам'яті; 2 – переривання й виклик ОС; 3 – звертання до сторінки, що перебуває у файлі відкачки на диску; 4 – зчитування сторінки в пам’ять на вільний фрейм; 5 – зміна елемента таблиці сторінок; 6 – повторне (успішне) виконання команди
Переваги віртуальної пам'яті при створенні процесів
Завдяки механізму віртуальної пам'яті, можуть бути використані наступної оптимізації витрати пам'яті при створенні процесів:
Копіювання по записі (Copy-on-Write)
Відображення файлів в пам’ять (Memory-Mapped Files).
Принцип спільного використання сторінок процесами (або копіювання по записі - Copy-On-Write, COW) дозволяє спочатку батьківському й дочірньому процесам використати ті самі сторінки пам'яті. Якщо який-небудь процес модифікує поділювану сторінку, то тільки в цьому випадку дана сторінка копіюється. Принцип COW забезпечує більше ефективне створення процесу, тому що копіюються сторінки, що модифікують тільки. Вільні сторінки розподіляються зі списку сторінок, иніційованих нулями.
Використання при вводі-виводі файлів, відображуваних в пам’ять, дозволяє розглядати файловий ввід-вивід як звичайне звертання до пам'яті шляхом відображення блоку на диску в сторінку пам'яті.
Спочатку файл читається з використанням запиту сторінок на вимогу. Частина файлу розміром з одну сторінку читається з файлу у фізичну сторінку (фрейм). Наступні читання з файлу й запису у файл трактуються як звичайні звертання до пам'яті. Це спрощує доступ до файлу, у порівнянні із системними викликами read() і write(). Це дозволяє також декільком процесам відображати в память той самий файл, по тому ж принципу, як вони спільно використають які-небудь сторінки.
Сторінки, що є присутнім у пам'яті, фактично є частинами файлу, оброблюваного при виводі, завдяки цьому, набагато швидше, ніж звичайний файл. По закінченні обміну, при закритті файлу, система записує всі його змінені частини на диск.
Подібний механізм є в більшості операційних систем. Наприклад, у системі Solaris він реалізується командою й системним викликом mmap (memory map).