1.1 Компоненти системи та їх взаємодія

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

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

У ході віддаленого обслуговування системного виклику компоненти системи взаємодіють між собою, причому механізми взаємодії реалізовані по-різному (рис. 3). Реалізація механізму взаємодії деякої пари компонент визначається рівнями привілеїв, на яких вони виконуються. Будь-яка компонента може звернутися до гіпервізор допомогою гіпервизова. Виконання ВМ при цьому переривається, і управління передається гіпервізора. Синхронний характер цього звернення дозволяє передавати параметри гіпервизова аналогічно тому, як користувальницький процес передає параметри ядру ОС при виконанні системного виклику: числові параметри та адреси областей пам'яті передаються через регістри, при необхідності гіпервізор читає область пам'яті віртуальної машини за вказаними адресами і витягує з неї (або записує в неї) додаткову інформацію.

Користувальницький процес (диспетчер або монітор) звертається за сервісом до модуля ядра за допомогою системних викликів. Модуль ядра реєструє в ОС спеціальне логічний пристрій, видиме на рівні файлової системи як файл. Операції доступу до цього файлу (системні виклики read / write / ioctl) викликають відповідні функції в драйвері логічного пристрою. Драйвер обробляє запит процесу і повертає управління йому. Якщо операція блокуюча, то драйвер може призупинити виконання процесу до тих пір, поки він не зможе обслужити запит. Модуль ядра звертається до призначеного для користувача процесу за допомогою посилки сигналів.

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

Найбільш складною є ситуація, в якій гіпервізор потрібно сповістити компоненти у віртуальній машині про деяке подію. Для цього гіпервізор використовує можливість, що надається апаратурою віртуалізації, вкидати переривання і виняткові ситуації у віртуальну машину за допомогою відповідних полів в керуючій структурі VMCB ВМ. Тоді після відновлення ВМ апаратура забезпечує їй доставку переривання безпосередньо перед виконанням першої інструкції в ВМ. У результаті вкидання переривання ОС передає управління на обробник (вектор) даного переривання, зареєстрований модулем ядра в таблиці обробників переривань в процесі ініціалізації системи.

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

Структура даних, що представляє собою елемент кільцевого буфера, єдина для всіх подій і включає поля для всіх можливих параметрів фіксованої довжини. Параметри змінної довжини передаються через окремий буфер змінного розміру, розташований в пам'яті гіпервізора – сховище. Координати параметра змінної довжини – зміщення від початку сховища і довжина – специфікується в структурі даних кільцевого буфера. Наприклад, для системного виклику write структура включає 3 поля: ідентифікатор файлового дескриптора, початок (зміщення) буфера в сховище і довжина буфера. Для кожного довіреної процесу гіпервізор підтримує окремий екземпляр сховища.

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

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

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

 



Информация о работе «Механізм обслуговування системних викликів»
Раздел: Информатика, программирование
Количество знаков с пробелами: 46640
Количество таблиц: 1
Количество изображений: 6

Похожие работы

Скачать
24912
0
12

... WRR) і його модифікації; - кругове обслуговування з дефіцитом (Deficit Round-Robin, DRR) і його модифікації. Рисунок 1 – Класифікація механізмів обслуговування черг   2. Механізм обслуговування черг FIFO обслуговування алгоритм черга комутатор FIFO (First In – First Out, "першим прийшов – першим пішов") є найпростішим механізмом обслуговування черг, відповідно до якого пакети передаються ...

Скачать
36562
0
0

... допомогою програм пакету ResourseKit фірми Microsoft. Увага! Будь-яке некваліфіковане втручання в структуру системного реєстру може призвести до краху всієї системи. Якщо ви адмініструєте сервер, чи робочу станцію на основі Win9x/nt/2000 , то системний реєстр допоможе вам підвищити рівень безпеки та ефективності вашої системи . Однак, кожен раз запускати редактор реєстру і шукати потрібні ключі , ...

Скачать
85276
0
11

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

Скачать
205269
13
4

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

0 комментариев


Наверх