Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_Арх.doc
Скачиваний:
44
Добавлен:
20.02.2016
Размер:
1.27 Mб
Скачать
    1. Таблиця 6.3. Основні функції api для керування віртуальною пам'яттю в системі Windows nt

Функція API

Значення

VirtualAlloc

резервація або виділення області

VirtualFree

Звільнення області або зняття виділення

VirtualProtect

Зміна типу захисту на читання/запис/виконання

VirtualQuery

Запит про стан області

VirtualLock

Робить область пам'яті резидентною (тобто забороняє розбивку на сторінки в ній)

VirtualUnlock

Знімає заборону на розбивку на сторінки

CreateFileMapping

Створює об'єкт відображення файлу й іноді приписує йому ім'я

MapViewOfFile

Відображає файл або частину файлу в адресний простір

UnmapViewOfFile

Видаляє відображений файл з адресного простору

OpenFileMappino

Відкриває раніше створений об’єкт відображення файлу

Перші чотири функції очевидні. Наступні дві функції дозволяють процесу робити резидентною область пам'яті розміром до 30 сторінок і скасовувати цю дію. Ця якість може знадобитися програмам, що працюють у режимі реального часу. Операційна система встановлює визначену межу, щоб процеси не ставали занадто поглинаючими. У системі NT також маються функції API, що дозволяють процесу одержувати доступ до віртуальної пам'яті іншого процесу (вони не зазначені в табл. 6.3).

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

Ці функції API є основними. На них будується вся інша система керування пам'яттю. Наприклад, існують функції API для розміщення і звільнення структур даних в одній чи декількох “купах”. “Купи” використовуються для збереження структур даних, що створюються і руйнуються. “Купи” не займаються “зборкою сміття”, тому користувальницьке програмне забезпечення саме повинне звільняти блоки віртуальної пам'яті, що вже не потрібні. (“Зборка сміття” - це автоматичне видалення невикористовуваних структур даних.) “Купа” у NT подібна з функцією malloc у системах UNIX, але в NT, на відміну від UNIX, може бути кілька незалежних “куп”.

Контрольні питання:

  1. Ієрархічна структура пам’яті.

  2. Оверлейна організація програм.

  3. Метод віртуальної пам’яті.

  4. .Віртуальна пам’ять UNIX.

  5. Віртуальна пам’ять NT.

  6. Функції WIN API для управління віртуальною пам’яттю.

Лабораторна робота №10

Тема: Команди вводу-виводу

Жодна інша група команд не розрізняється настільки сильно в різних машинах, як команди вводу-виводу. В сучасних персональних комп'ютерах використовуються три різні схеми вводу-виводу:

1. Програмований ввід-вивід з активним чеканням.

2. Ввід-вивід з керуванням по перериваннях.

3.Ввід-вивід із прямим доступом до пам'яті.

Ми розглянемо кожну з цих схем по черзі.

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

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

Регістр стану клавіатури містить 2 біти, що використовуються, і 6 бітів, що не використовуються. Апаратне забезпечення встановлює самий лівий біт на 1 усякий раз, коли з'являється символ. Якщо програмне забезпечення раніше установило на 1 біт 6, то відбувається переривання. У противному випадку переривання не відбувається. При програмованому вводі-виводі для одержання вхідних даних центральний процесор звичайно знаходиться в циклі, періодично зчитуючи регістр стану клавіатури, поки біт 7 не прийме значення 1. Коли це відбувається, програмне забезпечення зчитує буферний регістр клавіатури, щоб одержати символ. Зчитування регістра даних викликає установку біта CHARACTER AVAILABLE (наявності символу) на 0.

Вивід здійснюється подібним чином. Щоб написати символ на екрані, програмне забезпечення спочатку зчитує регістр стану дисплея, щоб довідатися, чи встановлений біт READY (біт готовності) на 1. Якщо він не встановлений, програмне забезпечення проходить цикл знову і знову доти, поки даний біт не прийме значення 1. Це значить, що пристрій готовий прийняти символ. Як тільки термінал приходить у стан готовності, програмне забезпечення записує символ у буферний регістр дисплея, що переносить символ на екран і дає сигнал пристрою установити біт готовності в регістрі стану дисплея на 0. Коли символ уже відображений, а термінал готовий до обробки наступного символу, біт READY знову встановлюється на 1 контролером.

Як приклад програмованого вводу-виводу розглянемо процедуру, написану на Java (листінг 7.1). Ця процедура викликається з двома параметрами: масивом символів, який потрібно вивести, і кількістю символів, що присутні в масиві (до 1 ДО). Тіло процедури являє собою цикл, що виводить по одному символу. Спочатку центральний процесор повинен почекати, поки пристрій буде готов, і тільки після цього він виводить символ, і ця послідовність дій повторюється для кожного символу. Процедури in і out - це звичайні процедури мови асемблера для читання і запису регістрів пристроїв, що визначаються по першому параметру, з АБО в перемінну, котра визначається по другому параметру. Розподіл на 128 забирає молодші 7 бітів, при цьому біт READY залишається в біті 0.