MJBach. Архітектура операційної системи UNIX. 6.2 ФОРМАТ ПАМ'ЯТІ СИСТЕМИ

  1. 6.2 ФОРМАТ ПАМ'ЯТІ СИСТЕМИ
  2. 6.2.1 Області
  3. 6.2.2 Сторінки і таблиці сторінок
  4. 6.2.3 Розміщення ядра
  5. 6.2.4 Простір процесу

6.2 ФОРМАТ ПАМ'ЯТІ СИСТЕМИ

Припустимо, що фізична пам'ять машини має адреси, починаючи з 0 і закінчуючи адресою, рівним обсягом пам'яті в байтах. Як вже зазначалося в розділі 2 , Процес в системі UNIX складається з трьох логічних секцій: команд, даних і стека. (Загальну пам'ять, яка розглядається в чолі 11 , Можна вважати в даному контексті частиною секції даних). У секції команд зберігається набір машинних інструкцій, виконуваних під керуванням процесу; адресами в секції команд виступають адреси команд (для команд переходу і звернень до підпрограм), адреси даних (для звернення до глобальних змінних) і адреси стека (для звернення до структур даних, які локалізовані в підпрограма). Якщо адреси в створеному коді трактувати як адреси у фізичній пам'яті, два процеси не зможуть паралельно виконуватися, якщо їх адреси перекриваються. Компілятор міг би генерувати адреси, непересічні у різних програм, але на універсальних ЕОМ такий порядок не практикується, оскільки обсяг пам'яті машини обмежений, а кількість трансльованих програми необмежена. Навіть якщо для того, щоб уникнути зайвого перетину адрес в процесі їх генерації, машина буде використовувати певний набір евристичних процедур, подібна реалізація не буде достатньо гнучкою і не зможе задовольняти пропонованим до неї вимогам.

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

6.2.1 Області

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

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

На рисунку 6.2 зображені два процеси, A і B, показані їх області, приватні таблиці областей і віртуальні адреси, в яких ці області з'єднуються. Процеси поділяють область команд 'a' з віртуальними адресами 8К і 4К відповідно. Якщо процес A читає осередок пам'яті з адресою 8К, а процес


Малюнок 6.2. Процеси і області

B читає осередок з адресою 4К, то вони читають одну і ту ж комірку в області 'a'. Область даних і область стека у кожного процесу свої.

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

6.2.2 Сторінки і таблиці сторінок

У цьому розділі описується модель організації пам'яті, якої ми будемо користуватися протягом усього книги, але яка не є особливістю системи UNIX. В організації пам'яті, що базується на сторінках, фізична пам'ять розділяється на блоки однакового розміру, звані сторінками. Звичайний розмір сторінок становить від 512 байт до 4 Кбайт і визначається конфігурацією технічних засобів. Кожна адресується осередок пам'яті міститься в деякій сторінці і, отже, кожна комірка пам'яті може адресуватися парою (номер сторінки, зміщення всередині сторінки в байтах). Наприклад, якщо обсяг машинної пам'яті становить 2 в 32-му ступені байт, а розмір сторінки 1 Кбайт, загальне число сторінок - 2 в 22-й ступеня; можна вважати, що кожен 32-розрядний адреса складається з 22-розрядної номера сторінки і 10-розрядної зміщення всередині сторінки ( малюнок 6.3 ).

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

Шістнадцятковий адреса 58432 Двійковий 0101 1000 0100 0011 0010 Номер сторінки, зміщення всередині сторінки 01 0110 0001 00 0011 0010 В шістнадцятковій системі 161 32 Малюнок 6.3. Адресація фізичної пам'яті по сторінках Логічний номер сторінки Фізичний номер сторінки 0 177 1 54 2 209 3 17 Малюнок 6.4. Відображення логічних номерів сторінок на фізичні

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

на малюнку 6.5 наведено приклад відображення процесу в фізичні адреси пам'яті. Нехай розмір сторінки становить 1 Кбайт і нехай процесу потрібно звернутися до об'єкта в пам'яті, що має віртуальний адресу 68432. З таблиці областей видно, що віртуальний адресу початку області стека - 65536 (64К), якщо припустити, що стек росте в напрямку збільшення адрес. Після вирахування цієї адреси з адреси 68432 отримуємо зміщення в байтах всередині області, рівне 2896. Так як кожна сторінка має розмір 1 Кбайт, адреса вказує зі зміщенням 848 на 2-ю (починаючи з 0) сторінку області, розташованої по фізичній адресою 986К. В розділі 6.5.5 (Де йдеться про завантаження області) розглядається випадок, коли запис таблиці сторінок позначається "порожній".

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


Малюнок 6.5. Перетворення віртуальних адрес в фізичні

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

Якщо процес звертається до осередків пам'яті, розташованим за межами належного йому віртуального простору, створюється виняткова ситуація. Наприклад, якщо область команд має розмір 16 Кбайт ( малюнок 6.5 ), А процес звертається до віртуального адресою 26К, створюється виняткова ситуація, що обробляється операційною системою. Те ж саме відбувається, якщо процес намагається звернутися до пам'яті, не маючи відповідних прав доступу, наприклад, намагається записати адресу в захищену від запису область команд. І в тому, і в іншому прикладі процес зазвичай завершується (більш докладно про це в наступному розділі).

6.2.3 Розміщення ядра

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

на малюнку 6.6 Ось приклад того, в якому віртуальні адреси від 0 до 4М-1 належать ядру, а починаючи з 4М - процесу. Є дві групи регістрів управління пам'яттю, одна для адрес ядра і одна для адрес процесу, причому кожній групі відповідає таблиця сторінок, що зберігає номери фізичних сторінок з посиланням на адреси віртуальних сторінок. Адресні посилання з використанням групи регістрів ядра допускаються системою тільки в режимі ядра; отже, для переходу між режимом ядра і режимом завдання потрібно тільки, щоб система дозволила або заборонила адресні посилання з використанням групи регістрів ядра.

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


Малюнок 6.6. Як змінити спосіб роботи з непривилегированного (режиму завдання) на привілейований (режим ядра)

6.2.4 Простір процесу

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

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


Малюнок 6.7. Карта пам'яті простору процесу в ядрі

Припустимо, наприклад, що простір процесу має розмір 4 Кбайта і поміщається по віртуальному адресою 2М. На рисунку 6.7 показана карта пам'яті, де перші два регістра з групи відносяться до програм і даних ядра (адреси і покажчики не показані), а третій регістр адресує до простору процесу D. Якщо ядру потрібно звернутися до простору процесу A, воно копіює пов'язану з цим простором інформацію з відповідної таблиці сторінок в третій регістр. У будь-який момент третій регістр ядра описує простір пов'язаних з поточною діяльністю, але ядро ​​може послатися на простір іншого процесу, переписавши записи в таблиці сторінок з новою адресою. Інформація в регістрах 1 і 2 для ядра незмінна, оскільки всі процеси спільно використовують програми і дані ядра.

Попередня глава || Зміст || Наступна глава

Якщо вам сподобалася стаття, поділіться нею з друзями:

Дополнительная информация

rss
Карта