Операционные системы - статьи

         

Пересказ Сергея Кузнецова статьи


Can We Make Operating Systems Reliable and Secure?

, , , Vrije Universiteit, Amsterdam.

Computer (IEEE Computer Society, V. 39, No 5, May 2006).

Мне давно не приходилось получать такого удовольствия от чтения статей в журнале Computer. Статья Эндрю Таненбаума и его молодых коллег написана свойственным Таненбауму легким стилем, хотя посвящена очень серьезным вопросам (надеюсь, что мне удалось хотя бы частично сохранить этот стиль в своем пересказе). Лично меня очень обрадовало то, что давно любимый мной микроядерный подход к построению операционных систем, как кажется, получает новую жизнь. Я постарался сохранить в своем пересказе все основные моменты статьи.

Кстати, именно эта статья вызвала новый виток дискуссии Эндрю Таненбаума с Линусом Торвальдсом (первый спор о микроядерном подходе возник еще в 1992 г.).

Покупатели компьютеров рассчитывают на такую же их надежность, как, например, у телевизоров: купил, подключил к сети, и компьютер надежно работает в течение 10 лет. Наибольшие нарушения надежности и безопасности компьютеров вызывает операционная система. Хотя в прикладных программах может содержаться много дефектов, если бы операционные системы были свободны от ошибок, ошибки в приложениях могли бы причинять только ограниченный ущерб. Характеристики надежности и безопасности операционных систем являются взаимосвязанными. Например, ошибка переполнения буфера может привести к краху системы (проблема надежности), но та же ошибка может позволить проникнуть в компьютер умело написанному вирусу или червю (проблема безопасности). Повышение уровня надежности способствует повышению уровня безопасности.

В современных операционных системах имеются две характеристики, делающие их ненадежными и небезопасными: они огромны и обладают очень плохой изоляцией сбоев. В ядре ОС Linux содержится более 2,5 миллионов строк кода, в ядре Windows XP - в два с лишним раза больше. В одном из исследований надежности программного обеспечения показано, что в программах имеется от шести до шестнадцати ошибок на 1000 строк исполняемого кода; в другом исследовании насчитывается от двух до 75 ошибок на 1000 строк исполняемого кода в зависимости от размера модуля.
При таких оценках ядро Linux содержит около 15000 ошибок, а Windows XP - больше 30000 ошибок. Еще хуже то, что около 70% кода операционных систем занимает код драйверов устройств, в которых ошибки встречаются в 3-7 раз чаще, чем в обычном коде. Понятно, что просто невозможно найти и исправить все ошибки; более того, при исправлении ошибок часто привносятся новые.

Большой размер современных операционных систем означает, что ни один человек не может понимать систему целиком, в результате чего управление системой становится очень трудным делом. Но то же можно сказать, например, и про авианосец. Ни один отдельный человек не знает, как работает авианосец, но все его подсистемы хорошо изолированы. Проблема засоренного туалета не влияет на подсистему запуска ракет. У операционных систем отсутствует подобная изоляция компонентов. Современная операционная система содержит сотни и тысячи связанных вместе процедур, которые образуют единую бинарную программу, выполняемую в ядре. Каждая из миллионов строк кода ядра имеет возможность записи в ключевые структуры данных, используемые несвязанным с ней компонентом, что может привести к краху системы.


Содержание раздела