Ім'я файлу: спз.docx
Розширення: docx
Розмір: 309кб.
Дата: 13.04.2020
скачати
Пов'язані файли:
МПП-1 Архітектура мікроконтролера MCS-51.pdf

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Національний університет харчових технологій

Cмілянський коледж харчових технологій

ІНДИВІДУАЛЬНЕ ЗАВДАННЯ

з навчальної дисципліни: «Системне програмне забезпечення»



Роботу прийняв:

Викладач Заславний В. В.

«__»______________2020р

_____________________

(підпис)

Роботу виконав:

студент Козаченко Б.О.

гр. ОКС16

зал. Книжка №_______

________________________

(підпис)

Організація пам'яті в ОС Windows

У Win32 API використовується плоска 32-розрядний модель пам'яті. Кожному процесу виділяється "особистий" ( private ) ізольований адресний простір, розмір якого становить 4Gb. Цей простір розбивається на регіони, трохи відмінні для Windows9x і Windows NT. В загальному для тієї і іншої системи можна сказати, що нижні 2Gb цього простору відведені процесу для вільного використання, а верхні 2Gb зарезервовані для використання операційною системою. На рис.1.1. представлена архітектура пам'яті Windows 9x, а на рис.1.2 - Windows NT .



Рисунок 1.1 - Архітектура пам’яті Windows 9x


Рисунок 1.2 - Архітектура пам’яті Windows NT.

Як видно з даних малюнків, код системи Windows NT краще захищений від процесу користувача, ніж код Windows 9x. Це обумовлює велику стійкість ОС до помилок в програмному забезпеченні.

Використовувані прикладними програмами Windows 32-розрядні адреси для доступу до коду і даних, не є 32-розрядними фізичними адресами, які мікропроцесор використовує для адресації фізичної пам'яті (В даний час фізична пам'ять розміром 2-4 Гб не використовується в ПЕОМ). Тому адреса, яка використовується додатком, є віртуальною адресою (virtual address). API-функції Windows, що працюють в логічному адресному просторі об'ємом до 2 Гб, підтримуються менеджером віртуальної пам'яті - VMM (Virtual Memory Manager), який, в свою чергу, оптимізований для роботи на сучасних 32-розрядних процесорах. Для того щоб апаратне забезпечення системи могло використовувати 32-розрядну адресацію пам'яті, Windows забезпечує відображення фізичних адрес у віртуальному адресному просторі і підтримує сторінкову організацію пам'яті. На цій основі VMM формує власні механізми і алгоритми управління віртуальною пам'яттю.

Подібно віртуальній реальності, віртуальної оперативної пам'яті не існує, однак у системи виникає повна ілюзія її наявності. 2 Гб адресного простору, до якого може звертатися будь-яка програма, являють собою віртуальну пам'ять. Насправді в системі немає 2 Гб фізичної пам'яті, проте якимось чином програми можуть використовувати весь діапазон адрес. Очевидно, є якийсь фоновий "перекладач", мовчазно перетворює кожне звернення до пам'яті в реальний фізичний адресу. Завдяки такому перетворенню реалізується більшість можливостей менеджера віртуальної пам'яті (VMM). VMM - це частина операційної системи Windows, яка відповідає за перетворення посилань на віртуальні адреси пам'яті в посилання на реальну фізичну пам'ять. Менеджер віртуальної пам'яті приймає рішення про те, де розміщувати кожен об'єкт пам'яті і які сторінки пам'яті записати на диск. Він також виділяє кожному виконуваного процесу окреме адресний простір, відмовляючись перетворювати віртуальні адреси одного процесу в адреси фізичної пам'яті, використовуваної іншим процесом. VMM підтримує ілюзію "ідеалізованого" адресного простору об'ємом 2 Гб (подібно GDI, який створює видимість того, що кожна програма виводить графічні дані в координатному просторі "ідеалізованого" логічного пристрою). Система перетворює логічні адреси пам'яті або логічні координати в фізичні і запобігає конфліктам між програмами через спроби одночасного використання одного і того ж ресурсу. Розглянемо більш докладно механізм утворення віртуальної пам'яті.

Фізична пам'ять ділиться на сторінки (pages) розміром 4096 байт (4 КБ). Отже, кожна сторінка починається з адреси, в якому молодші 12 біт нульові.

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

Кожен процес, що виконується в Windows, має свою власну сторінку каталогу (directory page) таблиць сторінок, яка містить до 1024 32-розрядних дескриптора таблиць сторінок. Фізична адреса сторінки каталогу таблиць сторінок зберігається в регістрі CR3 мікропроцесора. Вміст цього регістра змінюється при перемиканні Windows управління між процесами. Старші 10 біт віртуального адреси визначають один з 1024 можливих дескрипторів в каталозі таблиць сторінок. У свою чергу, старші 20 біт дескриптора таблиці сторінок визначають фізичну адресу таблиці сторінок (молодші 12 біт фізичної адреси дорівнюють нулю). Кожна таблиця сторінок містить, в свою чергу, до 1024 32-розрядних дескриптора сторінок. Вибір одного з цих дескрипторів визначається вмістом середніх 10 бітів вихідного віртуального адреси. Старші 20 біт дескриптора сторінки визначають фізичну адресу початку сторінки, а молодші 12 біт віртуального адреси визначають фізичне усунення в межах цієї сторінки. На рис. 1.2. представлена схема організації віртуального адресного простору.



Рисунок 1.2 – Схема організації віртуального адресного простору
Очевидно, що це складно зрозуміти з першого разу. Проілюструємо цей процес ще раз в символьній формі. Ви можете уявити 32-розрядний віртуальний адреса (з яким оперує програма) у вигляді 10-розрядного індексу в таблиці каталогу таблиць сторінок (d), 10-розрядної індексу в таблиці сторінок (р), 12-розрядної зміщення (о):

dddd-dddd-ddpp-pppp-pppp-oooo-oooo-oooo

 Для кожного процесу мікропроцесор зберігає в регістрі CR3 (r) старші 20 біт фізичної адреси таблиці каталогу таблиць сторінок:

rrrr-rrrr-rrrr-rrrr-rrrr

Початковий фізичну адресу каталогу таблиць сторінок визначається як:

rrrr-rrrr-rrrr-rrrr-rrrr-0000-0000-0000

Необхідно запам'ятати, що кожна сторінка має розмір 4 КБ і починається з адреси, у якого 12 молодших біт нульові. Спочатку мікропроцесор отримує фізичну адресу:

rrrr-rrrr-rrrr-rrrr-rrrr-dddd-dddd-dd00

За цією адресою міститься інше 20-розрядне значення (t-table):

tttt-tttt-tttt-tttt-tttt

відповідне початкового фізичного адресою таблиці сторінок:

tttt-tttt-tttt-tttt-tttt-0000-0000-0000

Потім, мікропроцесор здійснює доступ з фізичного адресою:

tttt-tttt-tttt-tttt-tttt-pppp-pppp-pp00

Тут зберігається 20-бітна величина, що є основою для фізичної адреси початку сторінки пам'яті (f-page frame):

ffff-ffff-ffff-ffff-ffff

Результуючий 32-розрядний фізичну адресу виходить в результаті комбінування основи фізичної адреси сторінки і 12-розрядної зміщення ВА:

ffff-ffff-ffff-ffff-ffff-oooo-oooo-oooo

Це і є результуючий фізичну адресу.

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

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

По-третє, в 32-бітних дескрипторах сторінок існує ще 12 біт, крім тих, які використовуються для адреси сторінки. Один з цих бітів показує можливість доступу до конкретної сторінці (він називається бітом доступу, "accessed bit"); інший показує, чи була проведена запис в цю сторінку (він називається бітом сміття, "dirty bit"). Windows може використовувати ці біти для того щоб визначити, чи можна зберегти цю сторінку в файлі підкачки для звільнення пам'яті. Ще один біт біт присутності (present bit) показує, чи була сторінка скинута на диск і чи повинна бути підкачані назад в пам'ять.

Інший біт ( "читання / запису") показує, чи дозволено запис в дану сторінку пам'яті. Цей біт забезпечує захист коду від "блукаючих" покажчиків. Наприклад, якщо включити наступний оператор в програму для Windows: * (int *) WinMain = 0; то на екран буде виведено наступне вікно повідомлення: "This program has performed an illegal operation and will be shutdown." ( "Ця програма виконала неприпустиму операцію і буде завершена"). Цей біт не перешкоджає компілювати і завантаженої в пам'ять програмі бути запущеною на виконання.

Наведемо кілька зауважень з приводу управління пам'яттю в Windows 9x: Віртуальні адреси мають розрядність 32 біта. Програма та дані мають адреси в діапазоні від 0х00000000 до 0x7FFFFFFF. Сама Windows використовує адреси від 0х80000000 до 0xFFFFFFFF. У цій області розташовуються точки входу в спільні бібліотеки.

Загальна кількість вільної пам'яті, доступної програмі, визначається як кількість вільної фізичної пам'яті плюс кількість вільного місця на жорсткому диску, доступного для свопінгу сторінок. Як правило, при управлінні віртуальною пам'яттю Windows використовує алгоритм LRU (least recently used) для визначення того, які сторінки будуть скинуті на диск. Біт доступу і біт сміття допомагають здійснити цю операцію. Сторінки коду не повинні скидатися на диск: оскільки запис в його сторінки заборонена, вони можуть бути просто завантажені з файлу з розширенням ЕХЕ або з динамічно підключається бібліотеки.

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

  • Сторінка існує і знаходиться в пам'яті.

  • Сторінка існує і вивантажено на диск.

  • Сторінка не існує.

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



Рисунок 1.3 - Алгоритм організації доступу до даних
Для підтримки ілюзії величезного адресного простору менеджеру віртуальної пам'яті необхідно знати, як правильно організувати дані. Всі операції розподілу пам'яті, які процес виконує в виділеному йому діапазоні віртуальних адрес, записуються у вигляді дерева дескрипторів віртуальних адрес - VAD (Virtual Address Descriptor). Кожен раз при виділенні програмі пам'яті VMM створює дескриптор віртуального адреси (VAD) і додає його "до дерева (рис. 1.4). VAD містить інформацію про запитуваній діапазоні адрес, статус захисту всіх сторінок в зазначеному діапазоні, а також про те, чи можуть дочірні процеси успадковувати об'єкти, які знаходяться в даному діапазоні адрес. Якщо потік використовує адресу, який не визначений ні в одному дескрипторі, менеджер віртуальної пам'яті сприймає його як адреса, який ніколи не резервувався, внаслідок чого виникає помилка дост а.

Набагато простіше формувати VAD, ніж створювати таблицю сторінок і заповнювати її адресами дійсних сторінкових блоків. Крім того, обсяг виділеної пам'яті не впливає на швидкість проведення операції. Резервування 2 КБ відбувається не швидше, ніж виділення 2 Мб: по кожному запиту створюється один дескриптор. Якщо потік використовує зарезервовану пам'ять, VMM закріплює за ним сторінкові блоки, копіюючи інформацію з дескриптора в новий запис таблиці сторінок.



Рисунок 1.4 - Дерево дескрипторів віртуальних адрес (VAD)
Диспетчер управління пам'яттю (VMM) є складовою частиною ядра операційної системи. Додатки не можуть отримати до нього прямий доступ.
Структура пам’яті в Linux

Базовою одиницею в організації пам'яті для систем UNIX / Linux є сторінка пам'яті. Що володіє розміром від 4 Кбайт, якому відповідав би обсяг фізичного простору в оперативній або віртуальної (область підкачки на диску або іншому пристрої для збереження) пам'яті. При запуску процесів, вони запитують у системи (т. Е. У ядра за допомогою відповідних системних викликів) пам'ять для своєї роботи. А у відповідь на це ядро виділяє для них достатня кількість сторінок пам'яті. Віртуальна пам'ять або як її ще називають, «резервне ЗУ» (резервне пристрій) для сторінок пам'яті. Які містять, наприклад, вихідний текст виконуваного додатка, є звичайними виконувані файли на диску. Так само як і для інших файлів даних резервним ЗУ є самі файли. Інформація про те як взаємопов'язані сторінки фізичної і віртуальної пам'яті зберігається у відповідних таблицях сторінок пам'яті.

Для роботи з пам'яттю в Linux (як і в інших UNIX-подібних системах) характерно таке явище як «сторінковий обмін» (paging). Воно полягає в тому, що ядро виділяє процесам стільки пам'яті, скільки їм необхідно. В тому сенсі, щоб її (пам'яті) завжди вистачало. Це досягається за рахунок розширення фізичної пам'яті за рахунок віртуальної, т. Е. «Підкачки». Оскільки виконання процесів має відбуватися в реальній фізичній пам'яті. Те ядро постійно переміщує сторінки пам'яті процесів між фізичною та віртуальною пам'яттю. Забігаючи наперед, слід зазначити, що у віртуальній пам'яті зберігаються «неактивні» сторінки. Які не задіяні процесом в даний момент, але необхідні йому для повноцінної роботи згодом.
Основні принципи управління пам'яттю в Linux

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

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

Коли процесу не вистачає пам'яті, то ядро починає шукати «зайняті» сторінки. Які можна використовувати для «голодуючого» процесу. Зазвичай такими сторінками є ті, що давно не були використані. Ядро перевіряє їх на предмет модифікації будь-яким процесом. Для цього існують певні ознаки, при останньому зверненні і якщо зміни були, то такі сторінки позначаються ядром як «брудні». Т. е. Такі, які ще потрібні процесам. Для повторного використання пам'яті такі сторінки спочатку обов'язково переносяться в віртуальну пам'ять. Всі ж інші сторінки є «чистими». І тому ядро ​їх використовує для надання іншим або «голодуючим» процесам.

Особливості управління пам'яттю в Linux

Коли відбувається звернення до сторінок пам'яті, які деякий або довгий час не використовувалися, т. Е. До «неактивним» сторінок. Те ядро виконує з ними кілька важливих завдань:

  • повертає посилання на ці сторінки у відповідній таблиці сторінок;

  • скидає в нульове значення час «невикористання» цих сторінок;

  • позначає ці сторінки як «активні».

Зі сторінками, що знаходяться у віртуальній пам'яті не все так однозначно. Справа в тому, що для того, щоб «активізувати» такі сторінки, вони повинні бути попередньо прочитані з диска.

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

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

В Linux можна налаштувати параметр, який задає, наскільки швидко ядро має «відбирати» сторінки пам'яті у процесів. Яким вони менш потрібні для процесів, яким вони на даний момент необхідні. Цей параметр міститься в файлі / proc / sys / vm / swappiness і за замовчуванням дорівнює 60. Якщо задати його меншим значенням (наприклад 0). Те ядро буде забирати сторінки процесу в найостаннішу чергу. Використовуючи замість цього будь-які інші варіанти. Якщо це значення в межах між 60 і 100. сторінки будуть відбиратися у процесів з більш високою ймовірністю. Варіант зі зміною даного параметра насправді говорить про те, що необхідно або знизити навантаження на систему. Адаптувавши її для інших менш продуктивних завдань, або збільшити обсяг ОЗУ.
скачати

© Усі права захищені
написати до нас