Контрольная работа: Механізм обслуговування системних викликів
Для вирішення цієї проблеми гіпервізор реалізує додатковий рівень абстракції файлових дескрипторів для довірених процесів. Файлові дескриптори, що зберігаються в пам'яті довіреної процесу (в якихось змінних), являють собою не реальні дескриптори, призначені ядром ОС в обчислювальній або сервісній ВМ, а індекси в таблиці віддалених ресурсів, підтримуваної гіпервізора. Гіпервізор перехоплює і обробляє всі системні виклики довіреної процесу, у яких вхідні або вихідні параметри містити файлові дескриптори. Якщо параметр вхідний, то гіпервізор витягує з таблиці віддалених ресурсів фактичний файловий дескриптор, модифікує параметри системного виклику і передає його на обслуговування тієї ВМ, яка є власником ресурсу з цим дескриптором. Якщо параметр вихідний, то гіпервізор створює новий запис у таблиці віддалених ресурсів, позначаючи, яка з віртуальних машин є власником ресурсу, і модифікує вихідні параметри процесу, підставляючи індекс створеної запису замість фактичного значення дескриптора. Компонента гіпервізора, що відповідає за обробку файлових дескрипторів, враховує особливості виділення вільних дескрипторів ОС Linux, включаючи нюанси роботи системних викликів dup2 і fcntl. Таким чином, за значенням, передається довіреною процесом, завжди можна визначити віртуальну машину – власника ресурсу та номер файлового дескриптора в її контексті.
У ряді випадків виконання системного виклику може задіяти ресурси обох ВМ. Зокрема, параметри системного виклику select і його аналогів, а саме, набори файлових дескрипторів, для яких процес очікує виникнення відповідних подій, можуть одночасно ставитися до ресурсів як обчислювальної, так і сервісної ВМ. Такий виклик повинен обслуговуватися одночасно в обох ВМ, інакше програма може перестати виконуватися коректно. При цьому системний виклик в кожній віртуальній машині повинен обслуговуватися тільки з тими параметрами (файловий дескриптор), які відносяться до ресурсів даної ВМ.
При перехопленні запиту на виконання системного виклику, що вимагає одночасного виконання в обох ВМ, гіпервізор, використовуючи таблицю віддалених ресурсів, розшивають фактичні параметри на два непересічних набору (по одному для кожної з ВМ) і виконує виклик одночасно в обох ВМ з відповідними наборами параметрів. Модифікований набір параметрів записується в пам'ять довіреної процесу поверх оригінального. Перед поверненням управління процесу (після обслуговування системного виклику) гіпервізор відновлює вихідний набір параметрів, можливо, коректуючи його з урахуванням результатів системного виклику, отриманих з сервісної ВМ. Підсумковим результатом виконання системного виклику є результат тієї ВМ, яка хронологічно першою закінчила виконання своєї частини виклику, результати другий ВМ відкидаються.
Після отримання результатів від однієї з ВМ гіпервізор виробляє скасування виконання системного виклику в іншій ВМ. Механізм скасування виконання системного виклику реалізований в обох віртуальних машинах по-різному. У разі обчислювальної ВМ модуль ядра посилає довіреній процесу певний сигнал (не використовується процесом). При цьому модуль системи захисту безпосередньо перед посилкою сигналу реєструє для процесу спеціальний «порожній» обробник сигналу, що представляє собою адресу RET інструкції в коді довіреної програми. Адреса інструкції вказується в паспорті завдання. Реєстрація обробника гарантує, що посилка сигналу не призведе до аварійного останову процесу. У сервісній ВМ всі системні виклики, які можуть виконуватися одночасно в обох ВМ, виконуються в окремому потоці (нитки) делегати. Скасування виконання системного виклику проводиться за допомогою примусового завершення цього потоку.
3 . Продуктивність системи
Описана в цій роботі система реалізована на базі монітора віртуальних машин KVM [9]. KVM включений в основну гілку розробки ядра ОС Linux і являє собою модуль, що динамічно завантажений в ядро базової (хост) операційної системи Linux. Управління виконанням ВМ реалізується спільно ядром хост системи, модулем KVM та користувацький програмою QEMU. QEMU віртуалізується периферійні пристрої та забезпечує спільний доступ віртуальних машин до обладнання, встановленого на комп'ютері і керованого базовою системою.
Реалізація, представлена в цій роботі, побудована на базової операційної системи Linux з ядром версії 2.6.31.6 і моніторі віртуальних машин KVM версії 88. Сумарний обсяг коду компонент системи складає близько 16 тис. рядків. Віртуальні машини виконуються під управлінням ОС Linux з дистрибутива Fedora версії 9 зі штатним ядром версії 2.6.27.12–78.2.8.fc9.i686. На комп'ютері встановлений чотирьохядерних процесор Phenom 9750 компанії AMD з тактовою частотою 2.4 Ггц і 2 Гбайта оперативної пам'яті. Даний процесор підтримує технологію апаратної віртуалізації, включаючи вір?