Лекция 14. UNIX.
1. Общая архитектура системы UNIX. Модули ядра.
Основные черты UNIX.
- Код системы написан на языке высокого уровня С, что сделало ее простой для понимания, изменений и переноса на другие платформы. По оценкам одного из создателей UNIX, Дэнниса Ритчи, система на языке С имела на 20—40% больший размер, а производительность ее была на 20% ниже аналогичной системы, написанной на ассемблере. Однако ясность и переносимость, а в результате — и открытость системы сыграли решающую роль в ее популярности. Можно смело сказать, что UNIX является одной из наиболее открытых систем. Несмотря на то, что большинство UNIX поставляется сегодня не в исходных текстах, а в виде бинарных файлов, система остается легко расширяемой и настраиваемой.
- UNIX — многозадачная многопользовательская система с широким спектром услуг. Один мощный сервер может обслуживать запросы большого количества пользователей. При этом необходимо администрирование только одной системы. Система может выполнять различные функции — работать как вычислительный сервер, сервер базы данных, сетевой сервер, поддерживающий важнейшие сервисы сети (telnet, ftp, электронную почту, службу имен DNS и т. д.), как сетевой маршрутизатор.
- Наличие стандартов. Несмотря на многообразие версий UNIX, основой всего семейства являются принципиально одинаковая архитектура и ряд стандартных интерфейсов. Опытный администратор без большого труда сможет обслужить другую версию системы, для пользователей переход на другую версию и вовсе может оказаться незаметным.
- Простой и мощный модульный пользовательский интерфейс. Имея в своем распоряжении набор утилит, каждая из которых решает узкую специализированную задачу, можно конструировать из них сложные комплексы.
Для пользователя запускается командный интерпретатор (один из них) – shell.
5. Использование единой, легко обслуживаемой иерархической файловой системы. Файловая система — это не только доступ к данным, хранящимся на диске. Через унифицированный интерфейс файловой системы осуществляется доступ к терминалам, принтерам, магнитным лентам, сети и даже к памяти.
6. Очень большое количество приложений, в том числе свободно распространяемых, начиная от простейших текстовых редакторов и заканчивая мощными системами управления базами данных.
Общая архитектура системы UNIX(рис. 14.1)
Классическая UNIX представляет собой многопользовательскую операционную систему, основным компонентом которой является ядро (рис. 14.2)
Ядро отвечает за:
- управление устройствами от имени приложений,
- планирование доступа к ресурсам,
- обеспечение защиты процессов друг от друга.
Процессы.
init и swapper - системные процессы.
Обычные процессы - выполняющие приложения от имени пользователей (например, программа shell используется для выполнения команд, вводимых пользователем с клавиатуры, а компилятор является одним из инструментов разработки приложений).
Рис. 14.1. Общая архитектура системы UNIX
Рис. 14.2. Модули ядра UNIX
Основные модули ядра:
- интерфейс системного вызова - позволяет процессам обращаться к сервисам операционной системы;
- модули символьного и блочного ввода-вывода, а также драйверов устройств - используются при реализации файловых систем и для доступа к устройствам;
- буферный кэш - отвечает за кэширование данных, над которыми выполняются блочные операции ввода-вывода; он повышает производительность системы;
- файловая подсистема - управляет иерархическим пространством имен файлов, каталогов и устройств ввода-вывода, именование которых унифицировано;
- модуль управления памятью - поддерживает виртуальную память UNIX;
- модуль управления процессами — отвечает за создание и планирование процессов, прекращение их работы и поддержку базовых средств их взаимодействия
Системные вызовы и выполнение кода ядра
В ядре операционной системы UNIX реализован ряд сервисов, доступ к которым осуществляется из процессов прикладного уровня посредством системного вызова.
Интерфейс системного вызова - это стандартный управляемый способ входа прикладных процессов в ядро операционной системы с переключением в привилегированный режим выполнения.
Когда процесс входит в ядро, идентификатор данного процесса остается неизменным, но сам он получает полный доступ к памяти и устройствам компьютера.
Таким образом, можно сказать, что ядро UNIX выполняется процедурно, поскольку при системном вызове происходит нечто похожее на выполнение процедуры в обычной прикладной программе.
Данная архитектура противоположна архитектуре на основе передачи сообщений, при которой ядро может функционировать параллельно с пользовательскими процессами, взаимодействующими с ним путем отправки и получения сообщений.
Ядро операционной системы UNIX выполняется без вытеснения.
Это означает, что процесс, функционирующий в режиме ядра, не может быть вытеснен планировщиком с целью передачи управления другому процессу.
Однако при этом процесс ядра может вызвать блокирующую операцию, в частности, когда он выполняет ввод-вывод и вынужден приостановить работу до тех пор, пока устройство не удовлетворит запрос. Если во время выполнения процесса ядра происходит прерывание, то после его обработки управление возвращается тому же процессу.
В отличие от процесса ядра пользовательский процесс в такой ситуации может быть вытеснен с процессора, особенно в том случае, когда прерывание сигнализирует о завершении блокирующей операции ввода-вывода.