Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Каталоги

Канали

Канал — це найпростіший засіб передавання повідомлень. Він є циклічним буфе­ром, записування у який виконують за допомогою одного процесу, а читання — за допомогою іншого. У конкретний момент часу до каналу має доступ тільки один процес. Операційна система забезпечує синхронізацію згідно правилу: якщо про­цес намагається записувати в канал, у якому немає місця, або намагається зчита­ти більше даних, ніж поміщено в канал, він переходить у стан очікування.

Розрізняють безіменні та поіменовані канали.

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

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

Обмін даними через канал може бути однобічним і двобічним.

Черги повідомлень

Іншою технологією асинхронного непрямого обміну даними є застосування черг повідомлень (message queues). Для таких черг виділяють спеціальне місце в системній ділянці пам'яті ОС, доступне для застосувань користувача. Процеси можуть створювати нові черги, відсилати повідомлення в конкретну чергу й от­римувати їх звідти. Із чергою одночасно може працювати кілька процесів. Пові­домлення — це структури даних змінної довжини. Для того щоб процеси могли розрізняти адресовані їм повідомлення, кожному з них присвоюють тип. Відісла­не повідомлення залишається в черзі доти, поки не буде зчитане. Синхронізація під час роботи з чергами схожа на синхронізацію для каналів.

 

 

2.

Найрозповсюдженішим методом обміну повідомленнями є використання сокетів (sockets). Ця технологія насамперед призначена для організації мережного обмі­ну даними, але може бути використана й для взаємодії між процесами на одному комп'ютері (власне, мережну взаємодію можна розуміти як узагальнення IPC).

Сокет — це абстрактна кінцева точка з'єднання, через яку процес може відси­лати або отримувати повідомлення. Обмін даними між двома процесами здій­снюють через пару сокетів, по одному на кожен процес. Абстрактність сокету по­лягає в тому, що він приховує особливості реалізації передавання повідомлень — після того як сокет створений, робота з ним не залежить від технології передаван­ня даних, тому один і той самий код можна без великих змін використовувати для роботи із різними протоколами зв'язку.

Особливості протоколу передавання даних і формування адреси сокету ви­значає комунікаційний домен; його потрібно зазначати під час створення кожного сокету. Прикладами доменів можуть бути домен Інтернету (який задає протокол зв'язку на базі TCP/IP) і локальний домен або домен UNIX, що реалізує зв'язок із використанням імені файла (подібно до поіменованого каналу). Сокет можна ви­користовувати у поєднанні тільки з одним комунікаційним доменом. Адреса со­кету залежить від домену (наприклад, для сокетів домену UNIX такою адресою буде ім'я файла).

Способи передавання даних через сокет визначаються його типом. У конкрет­ному домені можуть підтримуватися або не підтримуватися різні типи сокетів.

Наприклад, і для домену Інтернет, і для домену UNIX підтримуються сокети та­ких типів:

потокові (stream sockets) — задають надійний двобічний обмін даними суціль­ним потоком без виділення меж (операція читання даних повертає стільки да­них, скільки запитано або скільки було на цей момент передано);

дейтаграмні (datagram sockets) - задають ненадійний двобічний обмін пові­домленнями із виділенням меж (операція читання даних повертає розмір того повідомлення, яке було відіслано).

Під час обміну даними із використанням сокетів зазвичай застосовується техно­логія клієнт-сервер, коли один процес (сервер) очікує з'єднання, а інший (клієнт) з'єднують із ним.

Перед тим як почати працювати з сокетами, будь-який процес (і клієнт, і сер­вер) має створити сокет за допомогою системного виклику socket( ). Параметрами цього виклику задають комунікаційний домен і тип сокету. Цей виклик повертає дескриптор сокету - унікальне значення, за яким можна буде звертатися до цьо­го сокету.

Подальші дії відрізняються для сервера і клієнта. Для сервера виконуються такі дії:

1. Сокет пов'язують з адресою за допомогою системного виклику bind( ). Для со­кетів домену UNIX як адресу задають ім'я файла, для сокетів домену Інтернету - необхідні характеристики мережного з'єднання. Далі клієнт для встанов­лення з'єднання й обміну повідомленнями має буде вказати цю адресу.

2.Сервер дає змогу клієнтам встановлювати з'єднання, виконавши системний виклик listen( ) для дескриптора сокету, створеного раніше.

3.Після виходу із системного виклику listen() сервер готовий приймати від клі­єнтів запити на з'єднання. Ці запити вишиковуються в чергу. Для отримання запиту із цієї черги і створення з'єднання використовують системний виклик accept( ). Внаслідок його виконання в застосування повертають новий сокет для обміну даними із клієнтом. Старий сокет можна використовувати далі для приймання нових запитів на з'єднання. Якщо під час виклику accept( ) запити на з'єднання в черзі відсутні, сервер переходить у стан очікування.

Для клієнта послідовність дій після створення сокету зовсім інша. Замість трьох кроків досить виконати один - встановити з'єднання із використанням системного виклику connect( ). Параметрами цього виклику задають дескриптор створеного раніше сокету, а також адресу, подібну до вказаної на сервері для ви­клику bind().

Після встановлення з'єднання (і на клієнті, і на сервері) з'явиться можливість передавати і приймати дані з використанням цього з'єднання. Для передавання даних застосовують системний виклик send( ), а для приймання - recv( ).

Зазначену послідовність кроків використовують для встановлення надійного з'єднання. Якщо все, що нам потрібно, - це відіслати і прийняти конкретне пові­домлення фіксованої довжини, то з'єднання можна й не створювати зовсім. Для цього як відправник, так і одержувач повідомлення мають попередньо зв'язати сокети з адресами через виклик bind(). Потім можна скористатися викликами прямого передавання даних: sendto( ) - для відправника і recvfrom( ) - для одер­жувача. Параметрами цих викликів задають адреси одержувача і відправника, а також адреси буферів для даних.

 

3.

Технологія віддаленого виклику процедур (Remote Procedure Call, RPC) є прикладом синхронного обміну повідомленнями із підтвердженням отримання. Розглянемо послідовність кроків, необхідних для обміну даними в цьому разі.

1. Операцію send оформляють як виклик процедури із параметрами.

2. Після виклику такої процедури відправник переходить у стан очікування, а да­ні (ім'я процедури і параметри) доставляються одержувачеві. Одержувач мо­же перебувати на тому самому комп'ютері, чи на віддаленій машині; техноло­гія RPC приховує це. Класичний віддалений виклик процедур передбачає, що процес-одержувач створено внаслідок запиту.

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

4. Обчислений результат повертають відправникові як окреме повідомлення.

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

 

Розділ 5. Керування оперативною пам’яттю.

(аудиторних-10/8г. , самостійних- 14/8г.)

 

Лекція №1.

 

Тема: Основні поняття та вимоги до керування оперативною пам`яттю.

 

План:

1.Загальні положення керування оперативною пам’яттю (Л1 ст. 183)

2.Спільне використання фізичної пам’яті процесами та передумови введення віртуальної

пам’яті (Л1 ст.184-185).

3.Поняття віртуальної пам’яті (Л1 ст.185-186).

4.Проблема фрагментації пам’яті (Л1 ст.186).

5.Логічна і фізична адресація пам’яті (Л1 ст.187).

6.Спільне використання пам’яті за допомогою базового та межового регістрів

(Л1 ст.187-188).

 

 

1.

 

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

Різні види пам'яті організовані в ієрархію. На нижніх рівнях такої ієрархії пере­буває дешевша і повільніша пам'ять більшого обсягу, а в міру просування ієрархією нагору пам'ять стає дорожчою і швидшою (а її обсяг стає меншим). Найдешев­шим і найповільнішим запам'ятовувальним пристроєм є жорсткий диск комп'юте­ра. Його називають також допоміжним запам'ятовувальним пристроєм (secondary storage). Швидшою й дорожчою є оперативна пам'ять, що зберігається в мікро­схемах пам'яті, встановлених на комп'ютері, - таку пам'ять називають основ­ною пам'яттю (main memory). Ще швидшими засобами зберігання даних є різні кеші процесора, а обсяг цих кешів ще обмеженіший.

Керування пам'яттю в ОС - досить складне завдання. Потрібної за характе­ристиками пам'яті часто виявляють недостатньо, і щоб це не заважало роботі ко­ристувача, необхідно реалізовувати засоби координації різних видів пам'яті. Так, сучасні додатки можуть не вміщатися цілком в основній пам'яті, тоді невикористовуваний код застосування може тимчасово зберігатися на жорсткому диску.

2.

 

Найпростіший з можливих способів спільного використання фізичної па­м'яті кількома процесами це неперервний і послідовний її розподіл між усіма виконуваними програмами (рис. 8.1).

 

 

 

За цієї ситуації кожний процес завантажують у свою власну неперервну ді­лянку фізичної пам'яті, ділянка наступного процесу починається відразу після ділянки попереднього. На рис. 8.1 праворуч позначені адреси фізичної пам'яті, починаючи з яких завантажуються процеси.

Якщо проаналізувати особливості розподілу пам'яті на основі цього підходу, можуть виникнути такі запитання.

♦ Як виконувати процеси, котрим потрібно більше фізичної пам'яті, ніж вста­новлено на комп'ютері?

♦ Що відбудеться, коли процес виконає операцію записування за невірною ад­ресою (наприклад, процес Р2 - за адресою 0x7500)?

♦ Що робити, коли процесу (наприклад, процесу Р1) буде потрібна додаткова пам'ять під час його виконання?

♦ Коли процес отримає інформацію про конкретну адресу фізичної пам'яті, що з неї розпочнеться його виконання, і як мають бути перетворені адреси пам'яті, використані в його коді?

♦ Що робити, коли процесу не потрібна вся пам'ять, виділена для нього?

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

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

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

Програміст у своїй програмі звичайно не використовує адреси пам'яті безпо­середньо, замість них вживаються символічні імена (функцій, глобальних змін­них тощо). Внаслідок компіляції та компонування ці імена прив'язують до перемі­щуваних адрес (такі адреси задають у відносних одиницях, наприклад «100 байт від початку модуля»). Під час виконання програми переміщувані адреси, своєю чергою, прив'язують до абсолютних адрес у пам'яті. По суті, кожна прив'язка - це відображення одного набору адрес на інший.

До адрес, використовуваних у програмах, ставляться такі вимоги.

♦ Захист пам'яті. Помилки в адресації, що трапляються в коді процесу, повинні впливати тільки на виконання цього процесу. Коли процес Р2 зробить опера­цію записування за адресою 0x7500, то він і має бути перерваний за помил­кою. Стратегія захисту пам'яті зводиться до того, що для кожного процесу виділяється діапазон коректних адрес, і кожна операція доступу до пам'яті перевіряється на приналежність адреси цьому діапазону.

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

 

 

3.

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

Завдяки віртуальній пам'яті фізична пам'ять адресного простору процесу мо­же бути фрагментованою, оскільки основний обсяг пам'яті, яку займає процес, більшу частину часу залишається вільним. Є так зване правило «дев'яносто до десяти», або правило локалізації, яке стверджує, що 90 % звертань до пам'яті у процесі припадає на 10 % його адресного простору. Адреси можна переміщати так, щоб основній пам'яті відповідали тільки ті розділи адресного простору про­цесу, які справді використовуються у конкретний момент.

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

У такий спосіб можна значно збільшити розмір адресного простору процесу і забезпечити виконання процесів, що за розміром перевищують основну пам'ять

 

4.

 

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

Ще однією проблемою є фрагментація пам'яті, що виникає за ситуації, коли неможливо використати вільну пам'ять. Розрізняють зовнішню і внутрішню фраг­ментацію пам'яті (рис. 8.2).

 

 

Зовнішня зводиться до того, що внаслідок виділення і наступного звільнення пам'яті в ній утворюються вільні блоки малого розміру - діри(holes). Через це може виникнути ситуація, за якої неможливо виділити неперервний блок пам'яті розміру N,оскільки немає жодного неперервного вільного блоку, розмір якого S>N,хоча загалом обсяг вільного простору пам'яті перевищує N.Так, на рис. 8.2 для виконання процесу Р5 місця через зовнішню фрагментацію не вистачає.

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

 

 

5.

 

Найважливішими поняттями концепції віртуальної пам'яті є логічна і фізична адресація пам'яті.

Логічна або віртуальна адреса - адреса, яку генерує програма, запущена на деякому процесорі. Адреси, що використовують інструкції конкретного процесора, є логічними адресами. Сукупність логічних адрес становить логічний адресний простір.Фізична адреса - адреса, якою оперує мікросхема пам'яті. Прикладна програ­ма в сучасних комп'ютерах ніколи не має справи з фізичними адресами. Спеці­альний апаратний пристрій MMU (memory management unit - пристрій керуван­ня пам'яттю) відповідає за перетворення логічних адрес у фізичні. Сукупність усіх доступних фізичних адрес становить фізичний адресний простір. Отже, як­що в комп'ютері є мікросхеми на 128 Мбайт пам'яті, то саме такий обсяг пам'яті адресують фізично. Логічно зазвичай адресують значно більше пам'яті.

Найпростіша схема перетворення адрес зображена на рис. 8.3.

 

 

 

Алгоритм перетворення логічних адрес у фізичні визначає принцип організації та керування пам`яттю.

6.

Під час реалізації віртуальної пам'яті необхідно забезпечити захист пам'яті, пере­міщення процесів у пам'яті та спільне використання пам'яті кількома процесами.

Одним із найпростіших способів задовольнити ці вимоги є підхід базового і межового регістрів. Для кожного процесу в двох регістрах процесора зберігають два значення - базової адреси (base) і межі (bounds). Кожний доступ до логічної адреси апаратно перетворюється у фізичну адресу шляхом додавання логічної ад­реси до базової. Якщо отримувана фізична адреса не потрапляє в діапазон (base, base+bounds), вважають, що адреса невірна, і генерують помилку (рис. 8.4).

 

 

Такий підхід є найпростішим прикладом реалізації динамічного переміщення процесів у пам'яті. Усі інші підходи, які буде розглянуто в цьому розділі, є різни­ми варіантами розвитку цієї базової схеми. Наприклад, те, що кожний процес у разі використання цього підходу має свої власні значення базового і межового регістрів, є найпростішою реалізацією концепції адресного простору процесу, яка ґрунтується на тому, що кожний процес має власне відображення пам'яті.

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

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

За такого підходу для процесу виділяють тільки одну пару значень «базова адре­са-межа». Природним розвитком цієї ідеї стало відображення адресного простору процесу за допомогою кількох діапазонів фізичної пам'яті, кожен з яких задають власною парою значень базової адреси і межі. Так виникла концепція сегмента­ції пам'яті.

 

Лекція №2.

 

Тема: Сегментна та сторінкова організація пам`яті.

 

План:

1. Особливості сегментації пам’яті (Л1 ст.188-190).

2. Реалізація сегментації в архітектурі ІА-32 (Л1 ст.190-191).

3. Базові принципи сторінкової організації пам’яті (Л1 ст.191-193).

4. Порівняльний аналіз сторінкової організації пам’яті та сегментації (Л1 ст.193).

 

1.

 

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

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

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

 

 

 

 

Переваги сегментації пам'яті.

· З'явилася можливість організувати кілька незалежних сегментів пам'яті для процесу і використати їх для зберігання даних різної природи. При цьому права доступу до кожного такого сегмента можуть бути задані по-різному.

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

· Фізична пам'ять, що відповідає адресному простору процесу, тепер не обо­в'язково має бути неперервною. Справді, сегментація дає змогу окремим части­нам адресного простору процесу відображатися не в основну пам'ять, а на диск, і довантажуватися з нього за потребою, забезпечуючи виконання проце­сів будь-якого розміру.

· Цей підхід не позбавлений і недоліків.

· Необхідність введення додаткового рівня перетворення пам'яті (перерахунок логічних адрес у фізичні спричиняє зни­ження продуктивності (цей недолік властивий будь-якій повноцінній реаліза­ції віртуальної пам'яті). Для ефективної реалізації сегментації потрібна відпо­відна апаратна підтримка.

· Керування блоками пам'яті змінної довжини з урахуванням необхідності їх­нього збереженні* на диску може бути досить складним.

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

Сьогодні сегментацію застосовують доволі обмежено передусім через фраг­ментацію і складність реалізації ефективного звільнення пам'яті та обміну із дис­ком. Ширше використання отримав розподіл пам'яті на блоки фіксованої довжи­ни - сторінкова організація пам'яті.

 

 

2.

 

В архітектурі ІА-32 догічні адреси в програмі формуються із використанням сег­ментації й мають такий вигляд: «селектор-зсув». Значення селектора завантажу­ють у спеціальний регістр процесора (сегментний регістр) і використовують як індекс у таблиці дескрипторів сегментів, що перебуває в пам'яті та є аналогом таблиці сегментів, описаної раніше. В архітектурі ІА-32 підтримуються шість сег­ментних регістрів. Це означає, що виконуваний код в один і той самий час може адресувати шість незалежних сегментів.

Селектор містите індекс дескриптора в таблиці, біт індикатора локальної або глобальної таблиці та необхідний рівень привілеїв.

Для системи задають спільну глобальну таблицю дескрипторів (Global Descr­iptor Table, GDT), а для кожної задачі - локальну таблицю дескрипторів (Local Descriptor Table, LDT).

Дескриптори в ІА-32 мають довжину 64 біти. Вони визначають властивості програмних об'єктів (наприклад, сегментів пам'яті або таблиць дескрипторів).

Дескриптор містить значення бази (base), яке відповідає адресі об'єкта (на­приклад, початок сегмента); значення межі (limit); тип об'єкта (сегмент, таблиця дескрипторів тощо); характеристики захисту.

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

Проте жодного разу не було згадано, що в дескрипторі зберігають фізичну ад­ресу. Річ у тому, що для архітектури ІА-32 внаслідок перетворення логічної адре­си отримують не фізичну адресу, а ще один вид адреси, який називають лінійною адресою.

 

 

3.

До основних технологій реалізації віртуальної пам'яті крім сегментації належить сторінкова організація пам'яті (paging). її головна ідея - розподіл пам'яті блока­ми фіксованої довжини. Такі блоки називають сторінками.

Ця технологія є найпоширенішим підходом до реалізації віртуальної пам'яті в сучасних операційних системах.

У разі сторінкової організації пам'яті логічну адресу називають також лінійною, або віртуальною, адресою. Такі адреси належать одній множині (наприклад, лі­нійною адресою може бути невід'ємне ціле число довжиною 32 біти).

Фізичну пам'ять розбивають на блоки фіксованої довжини - фрейми, або сто­рінкові блоки (frames). Логічну пам'ять, у свою чергу, розбивають на блоки такої самої довжини -сторінки (pages). Коли процес починає виконуватися, його сто­рінки завантажуються в доступні фрейми фізичної пам'яті з диска або іншого носія.

Сторінкова організація пам'яті повинна мати апаратну підтримку. Кожна ад­реса, яку генерує процесор, ділиться на дві частини: номер сторінки і зсув сторін­ки. Номер сторінки використовують як індекс у таблиці сторінок.

Таблиця сторінок - це структура даних, що містить набір елементів (page-table entries, PTE), кожен із яких містить інформацію про номер сторінки, номер від­повідного їй фрейму фізичної пам'яті (або беспосередньо його базову адресу) та права доступу. Номер сторінки використовують для пошуку елемента в таблиці. Після його знаходження до базової адреси відповідного фрейму додають зсув сторінки, чим і визначають фізичну адресу (рис. 8.7).

 

 

 

Розмір сторінки є ступенем числа 2, у сучасних ОС використовують сторінки розміром від 2 до 8 Кбайт. У спеціальних режимах адресації можна працювати зі сторінками більшого розміру.

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

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

 

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

 

 

4.

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

Розглянемо основні переваги сторінкової організації пам'яті порівняно із сег­ментацією. Вони визначаються насамперед тим, що всі сторінки мають одну й ту саму довжину.

· Реалізація розподілу і звільнення пам'яті спрощується. Усі сторінки з погля­ду процесу рівноправні, тому можна підтримувати список вільних сторінок і в разі необхідності виділяти першу сторінку із цього списку, а після звільнен­ня повертати сторінку в список. Із сегментами так чинити не можна, оскільки кожен сегмент можна використати лише за його призначенням (спроба вико­ристати сегмент для іншої мети призведе швидше за все до того, що виникне потреба у сегменті іншої довжини).

· Реалізація обміну даними з диском також спрощується. Для організації тако­го обміну ділянка на диску, яку використовують для зберігання інформації про сторінки, вивантажені з пам'яті {простір підтримки, backing store) може бути теж розбита на блоки фіксованого розміру, рівного розмірові фрейму.

Сторінкова організація пам'яті не позбавлена й недоліків.

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

· Таблиці сторінок мають бути більші за розміром, ніж таблиці сегментів. Так, для виділення неперервного діапазону пам'яті розміром 100 Кбайт знадобить­ся один елемент таблиці сегментів, що описує сегмент, виділений для цього діапазону. З іншого боку, у разі використання сторінок розміром 4 Кбайт для опису такого діапазону нам знадобиться 25 елементів таблиці сторінок - по одному елементу для кожної сторінки.

 

 

Лекція №3.

 

Тема: Таблиці сторінок та сторінково-сегментна організація пам`яті.

 

План:

1. Багаторівневі таблиці сторінок (Л1 ст. 194).

2. Реалізація таблиць сторінок в архітектурі ІА-32 (Л1 ст.194-195).

3. Асоціативна пам’ять (Л1 ст.195-196).

4. Сторінково-сегментна організація пам’яті (Л1 ст.196-198).

 

1.

Щоб адресувати логічний адресний простір значного обсягу за допомогою однієї таблиці сторінок, її доводиться робити дуже великою. Наприклад, в архітектурі ІА-32 за стандартного розміру сторінки 4 Кбайт (для адресації всередині такої сторінки потрібні 12 біт) на індекс у таблиці залишається 20 біт, що відповідає таблиці сторінок на 1 мільйон елементів.

Щоб уникнути таких великих таблиць, запропоновано технологію багаторів­невих таблиць сторінок. Таблиці сторінок самі розбиваються на сторінки, інфор­мацію про які зберігають в таблиці сторінок верхнього рівня. Кількість рівнів рід­ко перевищує 2, але може доходити й до 4.

Коли є два рівні таблиць, логічну адресу розбивають на індекс у таблиці верх­нього рівня, індекс у таблиці нижнього рівня і зсув.

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

 

2.

Архітектура ІА-32 використовує дворівневу сторінкову організацію, починаючи з моделі Intel 80386.

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

Лінійна адреса поділяється на три поля:

каталогу (Directory) - визначає елемент каталогу сторінок, що вказує на пот­рібну таблицю сторінок;

таблиці (Table) - визначає елемент таблиці сторінок, що вказує на потрібний фрейм пам'яті;

зсуву (Offset) — визначає зсув у межах фрейму, що у поєднанні з адресою фрейму формує фізичну адресу.

Розмір полів каталогу і таблиці становить 10 біт, що дає таблиці сторінок, які містять 1024 елементи, розмір поля зсуву - 12 біт, що дає сторінки і фрейми роз­міром 4 Кбайт. Одна таблиця сторінок нижнього рівня адресує 4 Мбайт пам'яті (1 Мбайт фреймів), а весь каталог сторінок 4 Гбайт.

Елементи таблиць сторінок всіх рівнів мають однакову структуру. Виокреми­мо такі поля елемента:

прапорець присутності (Present), дорівнює одиниці, якщо сторінка перебуває у фізичній пам'яті (їй відповідає фрейм); рівність цього прапорця нулю озна­чає, що сторінки у фізичній пам'яті немає, при цьому операційна система мо­же використати інші поля елемента для своїх цілей;

20 найбільш значущих бітів, які задають початкову адресу фрейму, кратну 4 Кбайт (може бути задано 1 Мбайт різних початкових адрес);

прапорець доступу (Accessed), який покладають рівним одиниці під час кож­ного звертання пристрою сторінкової підтримки до відповідного фрейму;

прапорець зміни (Dirty), який покладають рівним одиниці під час кожної опе­рації записування у відповідний фрейм;

прапорець читання-записування (Read/Write), що задає права доступу до цієї сторінки або таблиці сторінок (для читання і для записування або тільки для читання);

прапорець привілейованого режиму (User/Supervisor), який визначає режим процесора, необхідний для доступу до сторінки. Якщо цей прапорець дорів­нює нулю, сторінка може бути адресована тільки із привілейованого режиму, якщо одиниці - доступна також і з режиму користувача;

Прапорці присутності, доступу і зміни можна використовувати ОС для органі­зації віртуальної пам'яті.

 

3.

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

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

 

 

сторінкової організації пам'яті є кешування адрес фрей­мів пам'яті, що відповідають цій підмножині сторінок.

Для розв'язання цієї проблеми було запропоновано технологію асоціативної пам'яті або кеша трансляції (translation look-aside buffers, TLB). У швидкодіючій пам'яті (швидшій, ніж основна пам'ять) створюють набір із кількох елементів (різні архітектури відводять під асоціативну пам'ять від 8 до 2048 елементів, в архі­тектурі ІА-32 таких елементів до Pentium 4 було 32, починаючи з Pentium 4 - 128). Кожний елемент кеша трансляції відповідає одному елементу таблиці сторінок.

Тепер під час генерування фізичної адреси спочатку відбувається пошук відповід­ного елемента таблиці в кеші (в ІА-32 — за полем каталогу, полем таблиці та зсуву), і якщо він знайдений, стає доступною адреса відповідного фрейму, що негайно мож­на використати для звертання до пам'яті. Якщо ж у кеші відповідного елемента немає, то доступ до пам'яті здійснюють через таблицю сторінок, а після цього еле­мент таблиці сторінок зберігають в кеші замість найстарішого елемента (рис. 8.9).

На жаль, у разі перемикання контексту в архітектурі ІА-32 необхідно очисти­ти весь кеш, оскільки в кожного процесу є своя таблиця сторінок, і ті ж самі номе­ри сторінок для різних процесів можуть відповідати різним фреймам у фізичній пам'яті. Очищення кеша трансляції є дуже повільною операцією, якої треба всіля­ко уникати .

Важливою характеристикою кеша трансляції є відсоток влучень, тобто відсоток випадків, коли необхідний елемент таблиці сторінок перебуває в кеші і не потребує доступу до пам'яті. Відомо, що при 32 елементах забезпечується 98 % влучень. За­значимо також, що за такого відсотку влучень зниження продуктивності у разі використання дворівневих таблиць сторінок порівняно з однорівневими стано­вить 28 %, однак переваги, отримувані під час розподілу пам'яті, роблять таке зниження допустимим.

4.

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

Для того щоб об'єднати переваги обох підходів, у деяких апаратних архітекту­рах (зокрема, в ІА-32) використовують комбінацію сегментної та сторінкової ор­ганізації пам'яті. За такої організації перетворення логічної адреси у фізичну від­бувається за три етапи.

1.У програмі задають логічну адресу із використанням сегмента і зсуву.

2.Логічну адресу перетворюють у лінійну (віртуальну) адресу за правилами, за­даними для сегментації.

3.Віртуальну адресу перетворюють у фізичну за правилами, заданими для сто­рінкової організації.

Таку архітектуру називають сторінково-сегментною організацією пам'яті.

 

Перетворення адрес в архітектурі ІА-32

Розглянемо особливості реалізації описаних трьох етапів перетворення адреси в архітектурі ІА-32.

1. Машинна мова архітектури ІА-32 (а, отже, будь-яка програма, розроблена для цієї архітектури) оперує логічними адресами. Логічна адреса, як було зазначе­но раніше, складається із селектора і зсуву.

2. Лінійна або віртуальна адреса — це ціле число без знака завдовжки 32 біти. За його допомогою можна дістати доступ до 4 Гбайт комірок пам'яті. Перетворен­ня логічної адреси в лінійну відбувається всередині пристрою сегментації(segmentation unit) за правилами перетворення адреси на базі сегментації, описаними раніше.

3. Фізичну адресу використовують для адресації комірок пам'яті в мікросхемах пам'яті. її теж зображають 32-бітовим цілим числом без знака. Перетворення лінійної адреси у фізичну відбувається всередині пристрою сторінкової під­тримки(paging unit) за правилами для сторінкової організації пам'яті (лінійну адресу розділяють апаратурою на адресу сторінки і сторінковий зсув, а потім перетворюють у фізичну адресу із використанням таблиць сторінок, кеша транс­ляції тощо).

Формування адреси у разі сторінково-сегментної організації пам'яті показане на рис. 8.10.

 

Необхідність підтримки сегментації в ІА-32 значною мірою є даниною традиції (це пов'язано з необхідністю зворотної сумісності зі старими моделями процесо­рів, у яких була відсутня підтримка сторінкової організації пам'яті). Сучасні ОС часто обходять таку сегментну організацію майже повністю, використовуючи в систе­мі лише кілька загальних сегментів, причому кожен із них задають селектором, дескрипторі якого поле base дорівнює нулю, а поле limit - максимальній адресі лі­нійної пам'яті. Зсув логічної адреси завжди буде рівний лінійній адресі, а отже, лінійну адресу можна буде формувати у програмі, фактично переходячи до чисто сторінкової організації пам'яті.

 

 

Лекція №3.

 

Тема: Організація пам`яті в Linux.

 

План:

1. Використання сегментації в Linux, формування логічних адрес (Л1 ст.198-199).

2. Сторінкова адресація в Linux (Л1 ст.199).

3. Розташування ядра у фізичній пам’яті (Л1 ст.200).

4. Особливості адресації процесів і ядра (Л1 ст.200).

5. Використання асоціативної пам’яті (Л1 ст.200-201).

 

1.

 

Як уже зазначалося, необхідність підтримки сегментації призводить до того, що програми стають складнішими, оскільки задача виділення сегментів і формування коректних логічних адрес лягає на програміста. Цю проблему в Linux вирішують доволі просто - ядро практично не використовує засобів підтримки сегментації архітектури ІА-32. У системі підтримують мінімальну кількість сегментів, без яких неможлива коректна адресація пам'яті процесором (сегменти коду і даних ядра та режиму користувача). Код ядра і режиму користувача спільно використо­вує ці сегменти.

Сегменти коду використовують під час формування логічних адрес коду (для виклику процедур тощо); такі сегменти позначають як доступні для читання і ви­конання. Сегменти даних призначені для формування логічних адрес даних (гло­бальних змінних, стека тощо) і позначаються як доступні для читання і запису­вання. Сегменти режиму користувача доступні з режиму користувача, сегменти ядра - тільки з режиму ядра.

Усі сегменти, які використовуються у Linux, визначають межу зсуву, що дає змогу створити в рамках кожного з них 4 Гбайт логічних адрес. Це означає, що Linux фактично передає всю роботу з керування пам'яттю на рівень перетворення між лінійними і фізичними адресами (оскільки кожна логічна адреса відповідає лінійній).

Далі в цьому розділі вважатимемо логічні адреси вже сформованими (на базі відповідного сегмента) і перетвореними на лінійні адреси.

 

2.

У ядрі Linux версії 2.4 використовують трирівневу організацію таблиць сторінок. Підтримуються три типи таблиць сторінок: глобальний (Page Global Directory, PGD); проміжний каталог сторінок (Page Middle Directory, PMD); таблиця сторінок (Page Table).

Кожний глобальний каталог містить адреси одного або кількох проміжних ка­талогів сторінок, а ті, своєю чергою, - адреси таблиць сторінок. Елементи таб­лиць сторінок (PTE) вказують на фрейми фізичної пам'яті.

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

Тепер розглянемо роботу цієї трирівневої організації для архітектури ІА-32, яка дає можливість мати тільки два рівні таблиць. Насправді ситуація досить проста — проміжний каталог таблиць оголошують порожнім, водночас його місце в ланцюжку покажчиків зберігають для того, щоб той самий код міг працювати для різних архітектур. У цьому разі PGD відповідає каталогу сторінок ІА-32 (йо­го елементи містять адреси таблиць сторінок), а під час роботи із покажчиком на PMD насправді працюють із покажчиком на відповідний йому елемент PGD, від­разу отримуючи доступ до таблиці сторінок. Між таблицями сторінок Linux і таб­лицями сторінок ІА-32 завжди дотримується однозначна відповідність.

Для платформо-незалежного визначення розміру сторінки в Linux викори­стовують системний виклик getpagesize( ):

 

#іпсіude <unistd.h>

ргіntf("Розмір сторінки: %d\n". getpagesize( ));

 

 

3.

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

Завантаження ядра починається із другого мегабайта пам'яті (перший мега­байт пропускають, тому що в ньому є ділянки, які не можуть бути використані, наприклад відеопам'ять текстового режиму, код BIOS тощо). Із ядра завжди можна визначити фізичні адреси початку та кінця його коду і даних.

На рис. 8.11 видно, як розташовується ядро у фізичній пам'яті, а також межі різних ділянок пам'яті ядра.

 

 

 

4.

 

Лінійний адресний простір кожного процесу поділяють на дві частини: перші З Гбайт адрес використовують у режимі ядра та користувача; вони відображають захищений адресний простір процесу; решту 1 Гбайт адрес використовують тіль­ки в режимі ядра.

Елементи глобального каталогу процесу, що визначають адреси до 3 Гбайт, можуть бути задані самим процесом, інші елементи мають бути однаковими для всіх процесів і задаватися ядром.

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

Адресний простір ядра починається із четвертого гігабайта лінійної пам'яті. Для прямого відображення на фізичні адреси доступні перші 896 Мбайт цього простору (128 Мбайт, що залишилися, використовується переважно для динаміч­ного розподілу пам'яті ядром).

 

5.

 

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

§ Під час планування невелику перевагу має процес, який використовує той са­мий набір таблиць сторінок, що й процес, який повертає керування (під час перемикання між такими процесами очищення кеша трансляції не відбувається).

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

 

 

Лекція №4.

 

Тема: Організація пам`яті у Windows XP.

 

План:

1. Сегментація у Windows XP (Л1 ст.201).

2. Сторінкова адресація у Windows XP (Л1 ст.201).

3. Особливості адресації процесів і ядра (Л1 ст.201-202).

4. Структура адресного простору процесів і ядра (Л1 ст.202).

5. Висновки концепції керування оперативною пам’яттю (Л1 ст.202-203).

 

1.

 

 

Система Windows ХР використовує загальні сегменти пам'яті подібно до того, як це робиться в Linux. Для всіх сегментів у програмі задають однакові значення ба­зи і межі, тому роботу з керування пам'яттю аналогічним чином передають на рі­вень лінійних адрес (які є зсувом у цих загальних сегментах).

 

2.

 

Під час роботи з лінійними адресами у Windows ХР використовують дворівневі таблиці сторінок, повністю відповідні архітектурі ІА-32. У кож­ного процесу є свій каталог сторінок, кожен елемент якого вказує на таблицю сто­рінок. Таблиці сторінок усіх рівнів містять по 1024 елементи таблиці сторінок, кожний такий елемент вказує на фрейм фізичної пам'яті. Фізичну адресу катало­гу сторінок зберігають у блоці KPROCESS.

Розмір лінійної адреси, з якою працює система, становить 32 біти. З них 10 біт відповідають адресі в каталозі сторінок, ще 10 — це індекс елемента в таблиці, останні 12 біт адресують конкретний байт сторінки (і є зсувом).

Розмір елемента таблиці сторінок теж становить 32 біти. Перші 20 біт адресують конкретний фрейм (і використовуються разом із останніми 12 біт лінійної адре­си), а інші 12 біт описують атрибути сторінки (захист, стан сторінки в пам'яті, який файл підкачування використовує). Якщо сторінка не перебуває у пам'яті, то в перших 20 біт зберігають зсув у файлі підкачування.

Для платформо-незалежного визначення розміру сторінки у Win32 АРІ вико­ристовують універсальну функцію отримання інформації про систему GetSystemInfo( ):

SYSTEMINFO info; // структура для отримання інформації про систему GetSystemInfo(&info);

printf("Розмір сторінки: %d\n". info.dwPageSize);

 

 

3.

Лінійний адресний простір процесу поділяється на дві частини: перші 2 Гбайт ад­рес доступні для процесу в режимі користувача і є його захищеним адресним про­стором; інші 2 Гбайт адрес доступні тільки в режимі ядра і відображають систем­ний адресний простір.

Зазначимо, що таке співвідношення між адресним простором процесу і ядра відрізняється від прийнятого в Linux (3 Гбайт для процесу, 1 Гбайт для ядра).

Деякі версії Windows ХР дають можливість задати співвідношення 3 Гбайт/1 Гбайт під час завантаження системи.

 

4.

В адресному просторі процесу можна виділити такі ділянки:

§ перші 64 Кбайт (починаючи з нульової адреси) — це спеціальна ділянка, дос­туп до якої завжди спричиняє помилки;

§ усю пам'ять між першими 64 Кбайт і останніми 136 Кбайт (майже 2 Гбайт) може використовувати процес під час свого виконання;

§ далі розташовані два блоки по 4 Кбайт: блоки оточення потоку (ТЕВ) і проце­су (РЕВ) (див. розділ 3);

§ наступні 4 Кбайт — ділянка пам'яті, куди відображаються різні системні дані (системний час, значення лічильника системних годин, номер версії системи), тому для доступу до них процесу не потрібно перемикатися в режим ядра;

§ останні 64 Кбайт використовують для запобігання спробам доступу за межі адресного простору процесу (спроба доступу до цієї пам'яті дасть помилку).

Системний адресний простір містить велику кількість різних ділянок. Най­важливіші з них такі:

§ Перші 512 Мбайт системного адресного простору використовують для заван­таження ядра системи.

§ 4 Мбайт пам'яті виділяють під каталог сторінок і таблиці сторінок процесу.

§ Спеціальну ділянку пам'яті розміром 4 Мбайт, яку називають гіперпростором (hyperspace), використовують для відображення різних структур даних, спе­цифічних для процесу, на системний адресний простір (наприклад, вона міс­тить список сторінок робочого набору процесу).

§ 512 Мбайт виділяють під системний кеш.

§ У системний адресний простір відображаються спеціальні ділянки пам'яті - вивантажуваний пул і невивантажуваний пул, які розглянемо в розділі 10.

§ Приблизно 4 Мбайт у самому кінці системного адресного простору виділяють під структури даних, необхідні для створення аварійного образу пам'яті, а та­кож для структур даних HAL.

 

 

5.

 

§ Керування пам'яттю є однією з найскладніших задач, які стоять перед опе­раційною системою. Щоб нестача пам'яті не заважала роботі користувача, потрібно розв'язувати задачу координації різних видів пам'яті. Можна вико­ристовувати повільнішу пам'ять для збільшення розміру швидшої (на цьому ґрунтується технологія віртуальної пам'яті), а також швидшу - для приско­рення доступу до повільнішої (на цьому ґрунтується кешування).

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

§ Базовими підходами до реалізації віртуальної пам'яті є сегментація і сторін­кова організація. Обидва ці підходи дають можливість розглядати логічний адресний простір процесу як сукупність окремих блоків, кожен з яких може бути відображений на основну пам'ять або на диск. Головна відмінність поля­гає в тому, що у випадку сегментації блоки мають змінну довжину, а у разі сторінкової організації — постійну. Сьогодні часто трапляється комбінація цих двох підходів (сторінково-сегментна організація пам'яті).

§ У разі сторінкової організації пам'яті логічна адреса містить номер у спеціаль­ній структурі даних - таблиці сторінок, а також зсув відносно початку сторін­ки. Розділення адреси на частини відбувається апаратно. Елемент таблиці сторінок містить адресу початку блоку фізичної пам'яті, у який відображаєть­ся сторінка (такий блок називають фреймом) і права доступу. Він може також відповідати сторінці, відображеній на диск. Таблиці сторінок можуть містити кілька рівнів. Таблицю верхнього рівня називають каталогом сторінок. Кож­ний процес має свій набір таких таблиць. Для прискорення доступу останні використані елементи таблиць сторінок кешуються в асоціативній пам'яті.

 

 

Розділ 6. Логічна та фізична організація файлових систем.

(аудиторних-8/6г. , самостійних- 12/8г.)

 

Лекція №1.

 

Тема: Організація інформації у файловій системі.

 

План:

1. Поняття файла і файлової системи (Л1 ст.253-255).

2. Організація інформації розділами та каталогами у файловій системі (Л1 ст.255-257).

3. Зв’язок розділів і структури каталогів (Л1 ст.257-259).

4. Зв’язки між іменами файлів (Л1 ст.259-261).

5. Атрибути файлів (Л1 ст.261).

6. Операції над файлами і каталогами (Л1 ст.261-262, 268).

 

1.

 

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

§ Файли є найпоширенішим засобом зберігання інформації в енергонезалежній пам'яті. Така пам'ять надійніша, й інформація на ній може зберігатися так довго, як це необхідно. Зазначимо, що більшість збоїв у роботі ОС не руйнує інформації, що зберігається у файлах на диску. Для забезпечення збереження даних підвищеної цінності вживають додаткових заходів (гаряче резервуван­ня, резервне копіювання тощо).

§ Файли забезпечують найпростіший варіант спільного використання даних різ­ними застосуваннями. Це пов'язано з тим, що файли відокремлені від про­грам, які їх використовують: будь-яка програма, якій відоме ім'я файла, може отримати доступ до його вмісту. Якщо одна програма запише у файл, а інша його потім прочитає, то ці дві програми виконають обмін даними.

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

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

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

До головних задач файлової системи можна віднести: організацію її логічної структури та її відображення на фізичну організацію розміщення даних на диску; підтримку програмного інтерфейсу файлової системи; забезпечення стійкості про­ти збоїв; забезпечення розподілу файлових ресурсів за умов багатозадачності та за­хисту даних від несанкціонованого доступу.

Типи файлів

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

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

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

Ще одним варіантом класифікації є поділ на файли із прямим і послідовним доступом. Файли із прямим доступом дають змогу вільно переходити до будь-якої позиції у файлі, використовуючи для цього поняття покажчика поточної по­зиції файла (seek pointer), що може переміщатися у будь-якому напрямку за допо­могою відповідних системних викликів. Файли із послідовним доступом можуть бути зчитані тільки послідовно, із початку в кінець. Сучасні ОС звичайно розгля­дають усі файли як файли із прямим доступом.

Імена файлів

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

Різні системи висувають різні вимоги до імен файлів. Так, у деяких системах імена є чутливими до регістра (myfile.txt і MYFILE.TXT будуть різними іменами), а в інших - ні.

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

Важливою характеристикою файлової системи є максимальна довжина імені файла. У минулому багато ОС різним чином обмежували довжину імен файлів. Широко відоме було обмеження на 8 символів у імені файла і 3 - у розширенні, присутнє у файловій системі FAT до появи Windows 95. Сьогодні стандартним значенням максимальної довжини імені файла є 255 символів.

 

 

2.

 

Кожний розділ може мати свою файлову систему (і, можливо, використовува­тися різними ОС). Для поділу дискового простору на розділи використовують спеціальну утиліту, яку часто називають fdisk.

Для генерації файлової системи на розділі потрібно використати операцію високорівневого форматування диска. У деяких ОС під томом (volume) розуміють розділ із встановленою на ньому файловою системою.

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

 

Розділи є основою організації великих обсягів дискового простору для розгор­тання файлових систем. Для організації файлів у рамках розділу зі встановленою файловою системою було запропоновано поняття файлового каталогу (file direc­tory) або просто каталогу.

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

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

Деревоподібна структура каталогів

Базовою ідеєю організації даних за допомогою каталогів є те, що вони можуть містити інші каталоги. Вкладені каталоги називають підкаталогами (subdirecto­ries). Таким чином формують дерево каталогів. Перший каталог, створений у фай­ловій системі, встановленій у розділі (корінь дерева каталогів), називають коре­невим каталогом (root directory).

Поняття шляху

Розглянемо, яким чином формують ім'я файла з урахуванням багаторівневої струк­тури каталогів.

Для файла, розташованого всередині каталогу недостатньо його імені для од­нозначного визначення, де він перебуває - в іншому каталозі може бути файл із тим самим ім'ям. Тепер для визначення місцезнаходження файла потрібно дода­вати до його імені список каталогів, де він перебуває. Такий список називають шляхом (path). Каталоги у шляху перераховують зліва направо - від меншої гли­бини вкладеності до більшої. Роздільник каталогів у шляху відрізняється для різних систем: в UNIX прийнято використовувати прямий слеш «/», а у Win­dows-системах - зворотний «\».

Абсолютний і відносний шляхи

Є два шляхи до файла: абсолютний і відносний. Абс


Читайте також:

  1. Вид інформаційного_ресурсу: //доменне_ім'я_хост_комп'ютера/їм 'я_ каталоги / їм 'я_ підкаталоги /їм 'я_ файла.
  2. Інформація про каталоги і картотеки
  3. Каталоги
  4. Каталоги високого класу
  5. Найбільш важливі каталоги файлової системи Linux




Переглядів: 1698

<== попередня сторінка | наступна сторінка ==>
Особливості міжпроцесової взаємодії | 

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.103 сек.