Операционные системы (ОС)
ОС представляет собой совокупность системных и служебных программных продуктов. В большинстве вычислительных систем ОС является самой важной (иногда единственной) частью СПО.
Операционная система играет двойную роль. С одной стороны, она выступает как интерфейс между пользователем с его задачами и аппаратной частью, а с другой стороны, предназначена для того, чтобы эффективно использовать ресурсов вычислительной системы и организовать надежные вычисления.
По определению ОС можно разделить на две группы:
- комплекс программ, которые управляют оборудованием;
- комплекс программ, которые управляют другими программами.
Управляют оборудованием встроенные микрокомпьютеры, которые сегодня есть во многих бытовых приборах, автомобилях и т.п. Такой компьютер выполняет только одну программу, которая запускается при включении.
Помимо, собственно, компьютеров существуют некоторые микрокомпьютеры, которые всё же работают под управлением особых собственных операционных систем. Чаще всего, это $UNIX$-подобные системы, например, программируемое коммутационное оборудование: файрволы (межсетевые экраны), маршрутизаторы.
Современные операционные системы могут быть с универсальным механизмом доступа к данным (используя файловую систему), с разделением полномочий (многопользовательские), с разделением времени (многозадачные).
Все ОС обеспечивают свой автоматический запуск.
После включения компьютера сначала производится самотестирование, далее в оперативную память с системного диска загружается операционная система. Загрузка должна выполняться поэтапно, строго в соответствии с программой .
В состав компьютера входит постоянное запоминающее устройство (ПЗУ или ППЗУ), которое содержит программы тестирования компьютера и первого этапа загрузки ОС, – это BIOS (Basic Input/Output System – базовая система ввода/вывода). После подачи электропитания процессор компьютера начинает выполнение программы самотестирования компьютера POST (Power-ON Self Test). Начинается тестирование работоспособности процессора компьютера, памяти и прочих аппаратных средств.
По окончании самотестирования специальная программа, которая содержится в BIOS, начинает поиск загрузчика операционной системы. Загрузчики для разных ОС могут быть установлены как в главном загрузочном секторе MBR (для MS Windows только там), так и в загрузочном секторе раздела.
Для поиска загрузчика программа поочередно обращается к имеющимся в компьютере дискам (CD-ROM, жестким, Flash).
Если системный диск найден, и программа-загрузчик на месте, то она загружается в оперативную память, и ей передается управление работой компьютера. Программа на системном диске ищет файлы операционной системы и загружает их в качестве программных модулей в оперативную память.
Если системных дисков в компьютере не найдено, на экране монитора появляется сообщение о том, что не найден системный диск, загрузка операционной системы прекращается, компьютер работать не будет . После завершения загрузки операционной системы управление передается командному процессору.
ОС предназначены для обеспечения нескольких видов интерфейса:
- интерфейс пользователя (между пользователем и программно-аппратными средствами компьютера);
- аппаратно-программный интерфейс (между программным и аппаратным обеспечением);
- программный интерфейс (между разными видами программного обеспечения).
Основные функции ОС:
- управление оперативной памятью;
- загрузка программ в оперативную память и их выполнение;
- выполнение по запросу общих и часто встречающихся действий: ввод и вывод данных, запуск и останов других программ, освобождение и выделение дополнительной памяти и т.д.;
- стандартный доступ к периферийным устройствам;
- обеспечение пользовательского интерфейса;
- поддержка стека сетевых протоколов и другие сетевые операции;
- управление доступом к данным на жестком диске, оптическом диске и др.
Дополнительные функции ОС:
- разграничение доступа различных процессов к ресурсам;
- многозадачность − параллельное или псевдопараллельное выполнение задач;
- многопользовательский режим работы и разграничение прав;
- эффективное распределение между процессами ресурсов вычислительной системы;
- организация надежных вычислений (когда невозможно одному вычислительному процессу специально или ошибочно повлиять на вычисления в другом процессе), это основывается на разграничении доступа к ресурсам;
- взаимодействие между процессами: обмен данными, взаимная синхронизация;
- защита самой системы, а также пользовательских данных и программ от действий пользователей (злоумышленных или по незнанию) или приложений.
Современные ОС:
- ОС семейства Windows-продукт корпорации Microsoft. Свою историю Windows начинают от операционной системы MS DOS. Сначала это были надстраиваемые над ней графические оболочки, когда Windows запускался из-под DOS. Это позволяло увеличить возможности DOS и облегчить простому неквалифицированному пользователю работу с компьютером. Более поздние версии (начиная с Windows NT) стали представлять собой настоящие полноценные операционные системы. Основное преимущество Microsoft Windows – это интерфейс, дружественный для пользователя. Основной недостаток – не очень высокая надежность системы.
- Unix и Unix-подобные ОС. Главные заслуги данного семейства – это мультиплатформенность, многозадачность и многопользовательность операционных систем. Юридически имеют право называться «UNIX» только те операционные системы, которые прошли сертификацию на соответствие стандарту Single UNIX Specification. Остальные , хотя и используют похожие концепции и технологии, называются UNIX-подобными операционными системами. Операционная система UNIX оказала большое влияние на развитие всех операционных систем тем, что заложила основы работы современных ОС. Первоначально UNIX являлся системой для разработки ПО. UNIX-системы в настоящее время применяются, в основном, для серверов, а также среди различного оборудования как встроенные системы. Если рассматривать ОС для рабочих станций и для домашнего применения, то UNIX и UNIX-подобные ОС занимают второе - третье места после MS Windows. Несмотря на то, что Unix-подобные системы уступают по популярности Windows, они работают на бОльших типах компьютеров благодаря мультиплатформенности. Linux –частный случай множества Unix-подобных дистрибутивов, которые чаще всего являются свободно распространяемыми.
- MAC OS также создавалась на основе ядра UNIX. Компания Apple создала данный продукт для своих же компьютеров Macintosh. MAC OS считается надежной и удобной, хотя и не так популярна, как Windows . Macintosh и ее Mac OS разработан в основном для графических и мультимедийных функций и с этими задачами справляется лучше, чем MS Windows и все прочие.
Современные ОС огромны и обладают очень плохой изоляцией сбоев, что делает их не очень надежными и небезопасными. В ядре Windows более $5$ миллионов строк, а в ядре ОС Linux содержится более $2,5$ миллионов строк кода кода. По исследовательским данным университета Carnegie-Mellon на каждые $1000$ строк кода приходится от $5$ до $15$ ошибок. При подобных оценках ядро Linux содержит около $15000$ ошибок, а ядро Windows − больше $30000$ ошибок. Причём, около $70\%$ кода ОС занимает код драйверов устройств, а в них ошибки встречаются в $3-7$ раз чаще, чем в обычном коде. Поэтому просто невозможно найти и выправить все ошибки; более того, при исправлении обнаруженных ошибок часто добавляются новые.
Современные операционные системы имеют очень большие размеры, а это означает, что ни один человек не может понимать систему целиком, в итоге управление системой становится очень сложным делом. Но ведьто же самое можно сказать, например, и про авианосец. Ни один отдельно взятый человек не знает, как он работает, но все подсистемы авианосца хорошо изолированы друг от друга, и если засорился туалет, то это не повлияет на подсистему запуска ракет. У ОС подобной изоляции компонентов нет. А ведь современная операционная система содержит тысячи связанных вместе процедур, образующих единую бинарную программу, которая выполняется в ядре. У каждой строки из миллионов строк кода ядра имеется возможность записи в ключевые структуры данных, которые используются несвязанным с ней компонентом, и это может привести к падению системы.
Выходом из сложившейся ситуации могут стать, например, Микроядерные ОС, которые имеют потенциальную возможность обеспечивать более высокую надежность. Надежность таких ОС происходит из разных источников. Во-первых, размер кода, который выполняется в ядре, невелик и составляет около $4000$ строк, при этих размерах общее число ошибок — всего около $24$ (на примере микроядра ОС Minix $3$). Небольшой размер ядра позволяет верифицировать его код вручную или на основе формальных методов.
Во-вторых, для повышения надежности также можно использовать раздельные пространства команд и данных. Даже если вирус или ошибочный код вызовут переполнение буфера и смогут поместить в пространство данных чужой код, то этот код будет выполнить невозможно, ибо ядро не запустит код, который не находится в пространстве команд процесса (доступном только по чтению).
Существуют и другие особенности, способствующие повышению надежности, например, свойство самовосстановления. Допустим, что драйвер впадает в бесконечный цикл или производит запись по неверному указателю. Тогда сервер реинкарнации автоматически заменит его, часто без влияния на другие процессы.