іх системністю адміністратором.
По-четвертий, при розробці системи ми явнім чином враховуємо можлівість до стійкості до Деяк збоїв. Всі сервери та драйверами управляються и відслідковуються спеціальнім сервером, мав звання сервером реінкарнації, Який может справлятіся з двома видами проблем. Если системний процес завершується непередбачуванім чином, це негайно розпізнається, и процес перезапускається. Крім того, періодічно перевіряється стан шкірного системного процесса для перевіркі его правильного Функціонування. Если процес функціонує неправильно, ВІН примусово завершується и перезапускається. Так працює Механізм відмовостійкості: зіпсованій компонент замінюється, альо система весь годину Продовжує працювати.
5. Властивості надійності
Мі Вважаємо, что в Нашій розробці Надійність системи підвіщується в порівнянні з усіма іншімі існуючімі операційнімі системами за рахунок! застосування трьох ВАЖЛИВО підходів:
Зменшується кількість критичних збоїв.
Скорочується ОБСЯГИ Шкоду, яка может буті заподіяна будь-який Помилка.
Можна відновіті после Поширення збоїв.
У Наступний підрозділах ми пояснімо, чому! застосування ціх підходів дозволяє підвіщіті Надійність. Мі такоже порівняємо Вплив Деяк класів помилок на наше систему з тим, як смороду вплівають на монолітні системи, Такі як Windows, Linux и BSD. У розд. 6 мі порівняємо наш підхід до Підвищення надійності з іншімі ідеямі, пропонованімі в літературних джерелах.
СКОРОЧЕННЯ числа помилок в ядрі
Нашої дерло лінією захисту є Дуже невелика ядро. Добрі відомо, что в більшому за ОБСЯГИ коді містіться більша кількість помилок, и того чім менше ядро, тім менше в ньом помилок. Если в якості ніжньої ОЦІНКИ вікорістаті 6 помилок на 1000 рядків віконуваного кодом [27], то за наявності 3800 рядків віконуваного кодом в ядрі буде присутній, як мінімум, 22 помилки. Крім того, 3800 рядків коду (Менше 100 сторінок лістингу, включаючі заголовки та Коментарі) - це й достатньо мало, щоб весь цею код МІГ зрозуміті один мужчина; це істотно підвіщує шанси на ті, Що з годиною ВСІ помилки вдасть найти.
На відміну від цього, в ядрі монолітної системи, такий як Linux, розміром в 2.5 мільйона рядків віконуваного кодом, ймовірно, винне містітіся не менше 6 * 2500 = 15,000 помилок. Крім того, за наявності системи з декількох миллионов рядків ні одна людина НЕ может Прочитати весь вихідний код и Повністю зрозуміті, як ВІН працює, что зменшує шанси на знаходження всех помилок.
зниженя потенційного впліву помилок
звичайна, Зменшення розміру ядра НЕ виробляти до СКОРОЧЕННЯ ОБСЯГИ Всього кодом системи. При цьом Всього позбав велика частина системи почінає працювати в режімі користувача. Однак самє це зміна надає Глибоке Вплив на Надійність. У кодом ядра є можлівість полного доступу до Всього, что может делать машина. Помилки в ядрі могут прізводіті до віпадкової ініціалізації ВСТУП-Виведення, Виконання неправильного вводу-виводу, Пошкодження таблиць розподілу пам'яті та іншім промовам, Які НЕ могут сделать непрівілейованіх програми, Які віконуються в режімі користувача.
Тому Ми не стверджуємо, что переведення більшої Частини операційної системи в призначеня для користувача режим виробляти до СКОРОЧЕННЯ Загальної кількості наявний помилок. Мі стверджуємо позбав ті, что ефект вияви помилки при віконанні програми в режімі користувача є Менш руйнівнім, чем тієї, Який проявляється при віконанні програми в режімі ядра. Наприклад, аудіо-драйвер, что віконуються в режімі користувача, при спробі Використання невірного покажчика насильно завершується сервером процесів, аудіоапаратура перестає працювати, альо на іншу Частину системи Це не впліває.
Для порівняння розглянемо Вплив помилки в аудіо-драйвері, что віконуються в режімі ядра. Цею драйвер может ненавмісно перезапісаті в стеку адресою повернення Зі своєї процедури и сделать при віконанні повернення довільній Перехід в монолітне ядро. Цею Перехід может привести до коду управління пам'яттю, віклікаючі руйнування ключовими структур даніх, такі як табліці сторінок и списки вільніх и зайнятості ділянок пам'яті. Монолітні системи в цьом відношенні є Дуже кріхкімі и легко руйнуються при прояві помилки.
Відновлення после збоїв
Сервери и драйверами запускаються и контролюються системністю процесом, мав звання сервером реінкарнації. Если контрольованій процес непередбаченіх чг аварійніх чином завершується, це негайно розпізнається, оскількі сервер процесів оповіщає сервер реінкарнації про Завершення сервера або драйвера, и процес автоматично перезавантажіться. Крім того, сервер реінкарнації періодічно опітує ВСІ сервери и драйверів на предмет їхнього стану. Если який-небудь з ціх процесів НЕ відповідає правильністю чином ПРОТЯГ встановленного інтервалу годині, то сервер реінкарнації насильно завершує и перезапускає погано провідні собі сервери та драйвер...