
- •Конспект лекцій по дисципліні
- •Ос загального призначення
- •Мікроядерна архітектура
- •Переваги мікроядерної архітектури
- •Блокування пам'яті.
- •Перевірка й установка.
- •Семафори.
- •Поштові скриньки.
- •Програмні переривання
- •Системні виклики
- •Типи адрес
- •Алгоритми розподілу пам'яті
- •Забезпечення зручного логічного інтерфейсу між пристроями й іншою частиною системи
- •Підтримка широкого спектра драйверів і простота включення нового драйвера в систему
- •Динамічне завантаження й вивантаження драйверів
Типи адрес
Для ідентифікації змінних і команд на різних етапах життєвого циклу програми використовуються символьні імена, віртуальні адреси й фізичні адреси.
Символьні імена привласнює користувач при написанні програми.
Віртуальні (умовні) адреси, виробляє транслятор, що переводить програму на машинну мову.
Фізичні адреси відповідають номерам комірок оперативної пам'яті, де в дійсності розташовані змінні й команди.
Сукупність віртуальних адрес називається віртуальним адресний простором.
Діапазон можливих адрес віртуального простору у всіх процесів є тим самим. Проте, кожен процес має власний віртуальний адресний простір - транслятор привласнює віртуальні адреси змінним і кодам кожній програмі незалежно.
У різних ОС використовуються різні способи структуризації адресного простору.
1. Лінійна послідовності віртуальних адрес. Така структура адресного простору називають також плоскою (flat). При цьому віртуальною адресою є єдине число, що представляє собою зсув відносно початку віртуального адресного простору. Адреса такого типу називають лінійною віртуальною адресою.
2. Віртуальний адресний простір ділиться на частині, називані сегментами. Віртуальна адреса, що представляє собою пари чисел (n, m), де n визначає сегмент, a m — зсув усередині сегмента.
3. Є більш складні способи структуризації, коли віртуальна адреса утворюється трьома (або навіть більше) числами.
Існують два принципово різних підходу до перетворення віртуальних адрес у фізичні.
1. Заміна віртуальних адрес на фізичні виконується один раз для кожного процесу під час початкового завантаження програми на згадку. Виконує це системна програма — переміщючий завантажник, - на підставі наявних у неї вихідних даних про початкову адресу фізичної пам'яті, а також інформації, наданої транслятором про адресно-звлежні елементи програми, виконує завантаження програми, сполучаючи її із заміною віртуальних адрес фізичними.
2. Програма завантажується на згадку в незміненому виді у віртуальних адресах. При завантаженні ОС фіксує зсув дійсного розташування програмного коду щодо віртуального адресного простору. Під час виконання програми при кожнім звертанні до оперативної пам'яті виконується перетворення віртуальної адреси у фізичну.
Останній спосіб є більш гнучким: у той час як переміщуючий завантажник, жорстко прив'язує програму до спочатку виділеної їй ділянці пам'яті, динамічне перетворення віртуальних адрес дозволяє переміщати програмний код процесу протягом усього періоду його виконання.
Як правило, обсяг віртуального адресного простору перевищує доступний обсяг оперативної пам'яті. У такому випадку ОС для зберігання даних віртуального адресного простору використовує програмну зовнішню пам'ять.
Однак співвідношення обсягів віртуальної й фізичної пам'яті може бути й зворотним.
Варто пам'ятати, що механізми віртуального адресного простору, і віртуальної пам'яті в загальному випадку - це не одне й теж. Можна уявити собі ОС, у якій підтримуються віртуальні адресні простори для процесів, але відсутній механізм віртуальної пам'яті. Це можливо тільки в тому випадку, якщо розмір віртуального адресного простору кожного процесу менше обсягу фізичної пам'яті.
Уміст призначеного процесу віртуального адресного простору, являє собою образ процесу.
Під час роботи процесу постійно виконуються переходи від прикладних кодів до кодів ОС, які або явно викликаються із прикладних процесів як системні функції, або викликаються як реакція на зовнішні події. Для того щоб спростити передачу керування від прикладного коду до коду ОС, а також для легкого доступу модулів ОС до прикладних даних, у більшості ОС її сегментів розділяють віртуальний адресний простір із прикладними сегментами активного процесу.
Тобто віртуальний адресний простір процесу ділиться на дві безперервні частини: системну й користувальницьку. У деяких ОС (наприклад, Windows NT) ці частини мають однаковий розмір - по 2 Гбайта.
Частина віртуального адресного простору кожного процесу, що відводить під сегменти ОС, є ідентичною для всіх процесів. Тому при зміні активного процесу заміняється тільки друга частина віртуального адресного простору. Наприклад, у процесорах Intel Pentium існує два типи системних таблиць: одна - для опису сегментів, загальних для всіх процесів, інша - для опису індивідуальних сегментів даного процесу. При зміні процесу перша таблиця залишається незмінною, а друга - заміняється новою.