Изоляция ошибок
В большой вычислительной системе изоляция программ является ключевым фактором, гарантирующим, что отказы в программе одного пользователя не приведут к отказам в программах других пользователей или к полному выводу системы из строя. Основные правила изоляции ошибок перечислены ниже. Хотя в формулировке многих из них употребляются слова «операционная система», они применимы к любой программе (будь то операционная система, монитор телеобработки или подсистема управления файлами), которая занята обслуживанием других программ.
1. Прикладная программа не должна иметь возможности непосредственно ссылаться на другую прикладную программу или данные в другой программе и изменять их.
2. Прикладная программа не должна иметь возможности непосредственно ссылаться на программы или данные операционной системы и изменять их. Связь между двумя программами (или программой и операционной системой) может быть разрешена только при условии использования четко определенных сопряжений и только в случае, когда обе программы дают согласие на эту связь.
3. Прикладные программы и их данные должны быть защищены от операционной системы до такой степени, чтобы ошибки в операционной системе не могли привести к случайному изменению прикладных программ или их данных.
4. Операционная система должна защищать все прикладные программы и данные от случайного их изменения операторами системы или обслуживающим персоналом.
5. Прикладные программы не должны иметь возможности ни остановить систему, ни вынудить ее изменить другую прикладную программу или ее данные.
6. Когда прикладная программа обращается к операционной системе, следует проверять допустимость всех параметров. Более того, прикладная программа не должна иметь возможности изменить эти параметры между моментами проверки и реального их использования операционной системой.
7. Никакие системные данные, непосредственно доступные прикладным программам, не должны влиять на функционирование операционной системы. Например, OS/360 хранила некоторые блоки, управляющие распределением памяти, в областях основной памяти, доступных прикладным программам. Ошибка в прикладной программе, вследствие которой содержимое этой памяти могло быть случайно изменено, приводила в результате к сбою системы. Линейка Windows в теории выдерживает этот принцип, но на практике некорректное обращение к некоторым адресам приводит к зависанию системы.
8. Прикладные программы не должны иметь возможности в обход операционной системы прямо использовать управляемые ею аппаратные ресурсы. Прикладные программы не должны прямо вызывать компоненты операционной системы, предназначенные для использования только ее подсистемами.
9. Компоненты операционной системы должны быть изолированы друг от друга так, чтобы ошибка в одной из них не привела к изменению других компонент или их данных.
10. Если операционная система обнаруживает ошибку в себе самой, она должна попытаться ограничить влияние этой ошибки одной прикладной программой и в крайнем случае прекратить выполнение только этой программы.
11. Операционная система должна давать прикладным программам возможность по требованию исправлять обнаруженные в них ошибки, а не безоговорочно прекращать их выполнение.
Реализация многих из этих принципов влияет на архитектуру лежащего в основе системы аппаратного обеспечения.
Читатель может заметить, что многие из перечисленных правил являются также правилами обеспечения защиты в операционных системах [20]. Таким образом, цели обеспечения защиты ресурсов и надежности обычно согласуются. Это подтверждается также разработанной IBM экспериментальной Системой защиты ресурсов для OS/360. Благодаря более высокой степени изоляции в этой системе были обнаружены ранее не замеченные ошибки в системных компонентах (например, в компиляторах) и прикладных программах, а также значительно снижена частота случайных отказов системы из-за ошибок в прикладных программах.