Лекция 14
Огляд архітектури операційних систем сімейства UNIX/LINUX. Їх загальні характеристики, особливості та відмінності.
Питання до розгляду: Интерфейсы системы UNIX. Оболочка UNIX. Утилиты UNIX. Структура ядра. Процессы в системе UNIX. Потоки в UNIX. Потоки в системе Linux. Планирование в системе UNIX. Планирование в системе Linux.
Мы рассмотрим общее введение в операционную систему UNIX и Linux как ее модификацию. Разные версии системы UNIX различаются в мелких деталях, однако рассматриваемый нами материал применим ко всем версиям системы. Основное внимание будет уделено тому, как система UNIX устроена внутри.
Если учитывать историю развития семейства ОС UNIX и их строгое соответствие стандарту POSIX, то станет ясно, что ОС Linux имеет очень много общего с ОС UNIX. Например, более 80 % от приблизительно 150 системных вызовов Linux представляют собой точные копии соответствующих системных вызовов в POSIX, BSD или System V. Таким образом в первом приближении большая часть описания системы UNIX применимо и к LINUX. Там же где UNIX и Linux существенно различаются (например, в алгоритме планирования), то мы будем специально это отмечать.
Операционная система UNIX представляет собой интерактивную систему, разработанную для одновременной поддержки нескольких процессов и нескольких пользователей. Она была разработана программистами и для программистов, чтобы использовать ее в окружении, в котором большинство пользователей являются относительно опытными и занимаются проектами разработки программного обеспечения. Во многих случаях большое количество программистов активно сотрудничают в деле создания единой системы, поэтому в операционной системе UNIX есть достаточное количество средств, позволяющих программистам работать вместе и управлять совместным использованием общей информации. Естественно модель совместной работы нескольких опытных пользователей отличается от работы одного пользователя. Это отличие отражено в операционной системе UNIX от начала до конца.
Сравнительный анализ характеристик ядра Linux, которые отличают его от других разновидностей Unix.
• Ядро Linux поддерживает динамическую загрузку модулей ядра. Хотя ядро Linux и является монолитным, оно дополнительно поддерживает динамическую загрузку и выгрузку исполняемого кода ядра по необходимости.
• Ядро Linux поддерживает симметричную многопроцессорную обработку (SMP). Хотя большинство коммерческих вариантов операционной системы Unix сейчас поддерживает SMP, большинство традиционных реализаций ОС Unix такой поддержки не имеет.
• Ядро Linux является преемптивным. В отличие от традиционных вариантов ОС Unix, ядро Linux в состоянии вытеснить выполняющееся задание, даже если это задание работает в режиме ядра. Среди коммерческих реализаций ОС Unix преемптивное ядро имеют только операционные системы Solaris и IRIX.
• В ядре Linux используется интересный подход для поддержки многопоточности (threads): потоки ни чем не отличаются от обычных процессов. С точки зрения ядра все процессы одинаковы, просто некоторые из них имеют общие ресурсы.
• В ядре Linux отсутствуют некоторые функции ОС Unix, которые считаются плохо реализованными, как, например, поддержка интерфейса STREAMS, или отвечают "глупым" стандартам.
• Ядро Linux является полностью открытым во всех смыслах этого слова. Набор функций, реализованных в ядре Linux, — это результат свободной и открытой модели разработки операционной системы Linux. Если какая-либо функция ядра считается маловажной или некачественной, то разработчики ядра не обязаны ее реализовать. В противоположность этому, внесение изменений при разработке ядра Linux занимает "элитарную" позицию: изменения должны решать определенную практическую задачу, должны быть логичными и иметь понятную четкую реализацию. Следовательно, функции некоторых современных вариантов ОС Unix, такие как память ядра со страничной реализацией, не были реализованы. Несмотря на имеющиеся различия, Linux является операционной системой со строгим наследованием традиций ОС Unix.
Интерфейсы системы unix
Операционную систему UNIX можно рассматривать в виде пирамиды (рис. 1). У основания пирамиды располагается аппаратное обеспечение, состоящее из центрального процессора, памяти, дисков, терминалов и других устройств. На голом «железе» работает операционная система UNIX. Ее функция заключается в управлении аппаратным обеспечением и предоставлении всем программам интерфейса системных вызовов. Эти системные вызовы позволяют программам создавать процессы, файлы и прочие ресурсы, а также управлять ими.
Рис. 1. Уровни операционной системы UNIX
Программы обращаются к системным вызовам, помещая аргументы в регистры центрального процессора (или иногда в стек) и выполняя команду -.эмулированного прерывания для переключения для переключения из пользовательского режима в режим ядра и передачи управления операционной системе UNIX. Поскольку на языке С невозможно написать команду эмулированного прерывания, то этим занимаются библиотечные функции, по одной на системный вызов. Эти процедуры написаны на ассемблере, но они могут вызываться из программ, написанных на С. Каждая такая процедура помещает аргументы в нужное место и выполняет команду эмулированного прерывания TRAP. Таким образом, чтобы обращаться к системному вызову read, программа на С должна вызвать библиотечную процедуру read. Кстати в стандарте POSIX определен именно интерфейс библиотечных функций, а не интерфейс системных вызовов. Другими словами, стандарт POSIX определяет библиотечные процедуры, соответствующие системным вызовам, их параметры, что они должны делать и какой результат возвращать. В стандарте даже не упоминаются фактические системные вызовы.
Помимо операционной системы и библиотеки системных вызовов, все версии UNIX содержат большое количество стандартных программ, некоторые из них описываются стандартом POSIX 1003.2, тогда как другие могут различаться в разных версиях UNIX. К этим программам относятся компиляторы, редакторы, командная оболочка. Именно эти программы и запускаются пользователем с терминала,
Можно говорить о трех интерфейсах в операционной системе UNIX: интерфейсе системных вызовов, интерфейсе библиотечных функций и интерфейсе, образованным набором стандартных обслуживающих программ.
Несмотря на то, что именно последний интерфейс большинство пользователей считает системой UNIX, в действительности он не имеет практически никакого отношения к самой операционной системе и легко может быть заменен.
Оболочка UNIX
У многих версий системы UNIX имеется графический интерфейс пользователя, схожий с интерфейсами примененными на компьютере Macintosh и впоследствии в системе Windows. Однако многие программисты UNIX до сих пор предпочитают интерфейс командной строки называемый оболочкой (shell). Подобный интерфейс значительно быстрее в использовании, существенно мощнее, проще расширяется и не требует использования мыши. Система UNIX полностью поддерживает графическое окружение X Windows.
Утилиты UNIX
Пользовательский интерфейс UNIX состоит не только из оболочки, но также из большого числа стандартных обслуживающих программ, называемых также утилитами. Условно эти программы можно разделить на следующие категории:
1. Команды управления файлами и каталогами
2. Фильтры
3. Средства разработки программ, такие как текстовые редакторы и компиляторы
4. Текстовые процессоры
5. Системное администрирование
6. Разное
Стандарт POSIX 1003.2 определяет синтаксис и семантику менее 100 из этих программ, в основном относящихся к первым 3 категориям. Идея стандартизации данных программ заключается в том, чтобы можно было писать сценарии оболочки, которые работали бы на всех системах UNIX. Помимо этих стандартных утилит, существует еще масса прикладных программ, таких как web-браузеры, программы просмотра изображений и т. д.
Некоторые команды перечислены еще раз в табл.l вместе с кратким описанием. Во всех версиях UNIX есть эти программы, а также многие другие.
Таблица 1. Некоторые утилиты UNIX, требуемые стандартом POSIX
Программа |
Назначение |
cat |
Конкатенация нескольких файлов в стандартный выходной поток |
chmod |
Изменение режима защиты файла |
ср |
Копирование файлов |
cut |
Вырезание колонок текста из файла |
grер |
Поиск определенной последовательности символов в файла |
head |
Извлечение из файла первых строк |
ls |
Распечатка каталога |
make |
Компиляция файлов для создания двоичного файла |
mkdir |
Создание каталога |
od |
Шестнадцатеричный дамп файла |
pasta |
Вставка колонок текста а файл |
рr |
Форматирование файла для печати |
rm |
Удаление файлов |
rmdir |
Удаление каталога |
sort |
Сортировка строк файла по алфавиту |
tail |
Извлечение из файла последних строк |
tr |
Преобразование символов из одного набора в другой |