- •Часть первая. Введение в операционную систему Linux
- •Глава 1. Обзор возможностей операционной системы Linux 1
- •Глава 2. Стандартизация unix-подобных операционных систем 23
- •Глава 1. Обзор возможностей операционной системы Linux
- •1.1. Введение
- •1.2. Краткая история Linux
- •1.3. Архитектура unix-подобных операционных систем
- •1.4. Введение в архитектуру ядра unix-подобных операционных систем
- •1.6. Файлы и каталоги
- •1.5. Справочная подсистема (man)
- •1.7. Ввод и вывод
- •1.8. Программы и процессы
- •1.9. Обработка ошибок
- •1.10. Вход в систему и идентификация пользователя
- •1.11. Сигналы
- •1.12. Интерпретатор shell
- •1.12.1. Сокращенное имя файла
- •1.12.2. Переключение ввода-вывода
- •1.12.3. Программные каналы
- •1.12.4. Создание среды
- •1.13. Системные вызовы и библиотечные функции
- •1.14. Выводы по главе 1
- •1.15. Упражнения по главе 1
- •Глава 2. Стандартизация unix-подобных операционных систем
- •2.1. Введение
- •2.2. Стандарты unix
- •2.2.1. Iso c
- •2.2.2. Ieee Posix
- •2.2.3. Single unix Specification
- •2.3. Пределы
- •2.4. Функции sysconf, pathconf и fpathconf
- •2.5. Элементарные системные типы данных
- •2.6. Выводы по главе 2
- •2.7. Упражнения по главе 2
1.3. Архитектура unix-подобных операционных систем
Строго говоря, операционная система определяется как программное обеспечение, которое управляет аппаратными ресурсами компьютера и предоставляет среду выполнения прикладных программ. Обычно это программное обеспечение называют ядром (kernel), так как оно имеет относительно небольшой объем и составляет основу системы. На рис. 1.1 изображена схема, отражающая архитектуру системы UNIX.
Интерфейс ядра – это слой программного обеспечения, называемый системными вызовами. Библиотеки функций общего пользования строятся на основе системных вызовов, но прикладная программа может свободно пользоваться как теми, так и другими. Командная оболочка – это особое приложение, которое предоставляет интерфейс для запуска других приложений.
В более широком смысле операционная система – это ядро и все остальное программное обеспечение, которое делает компьютер пригодным к использованию и обеспечивает его индивидуальность. В состав этого программного обеспечения входят системные утилиты, прикладные программы, командные оболочки, библиотеки функций общего пользования и тому подобное.

рис. 1.1
Например, Linux – это ядро операционной системы GNU. Некоторые так и называют эту операционную систему – GNU/Linux, но чаще всего ее именуют просто Linux.
1.4. Введение в архитектуру ядра unix-подобных операционных систем
Файлы и процессы являются центральными понятиями модели операционной системы UNІX. На рис. 1.2 представлена блок-схема ядра системы, отражающая состав модулей, из которых состоит ядро, и их взаимосвязи друг с другом. В частности, на ней слева изображена файловая подсистема, а справа подсистема управления процессами, две главные компоненты ядра. Эта схема дает логическое представление о ядре, хотя в действительности в структуре ядра имеются отклонения от модели, поскольку отдельные модули испытывают внутреннее воздействие со стороны других модулей.
Схема на рис. 1.2 имеет три уровня: уровень пользователя, уровень ядра и уровень аппаратуры. Обращения к операционной системе и библиотеки составляют границу между пользовательскими программами и ядром. Обращения к операционной системе выглядят так же, как обычные вызовы функций в программах на языке Си, и библиотеки устанавливают соответствие между этими вызовами функций и элементарными системными операциями. Программы часто обращаются к другим библиотекам, таким как библиотека стандартных подпрограмм ввода-вывода, достигая тем самым более полного использования системных услуг. Для этого во время компиляции библиотеки связываются с программами и частично включаются в программу пользователя.

рис. 1.2
На рис. 1.2 совокупность обращений к операционной системе разделена на те обращения, которые взаимодействуют с подсистемой управления файлами, и те, которые взаимодействуют с подсистемой управления процессами. Файловая подсистема управляет файлами, размещает записи файлов, управляет свободным пространством, доступом к файлам и поиском данных для пользователей. Процессы взаимодействуют с подсистемой управления файлами, используя при этом совокупность специальных обращений к операционной системе, таких как open (для того, чтобы открыть файл на чтение или запись), close, read, write, stat (запросить атрибуты файла), chown (изменить запись с информацией о владельце файла) и chmod (изменить права доступа к файлу).
Подсистема управления файлами обращается к данным, которые хранятся в файле, используя буферный механизм, управляющий потоком данных между ядром и устройствами внешней памяти. Буферный механизм, взаимодействуя с драйверами устройств ввода-вывода блоками, инициирует передачу данных к ядру и обратно.
Драйверы устройств являются модулями в составе ядра, которые управляют работой периферийных устройств. Устройства ввода-вывода блоками, например, диски, относятся к типу запоминающих устройств с произвольной выборкой. Подсистема управления файлами также непосредственно взаимодействует с драйверами устройств "неструктурированного" ввода-вывода, без вмешательства буферного механизма. К устройствам неструктурированного ввода-вывода, иногда именуемым устройствами посимвольного ввода-вывода (текстовыми), относятся устройства, отличные от устройств ввода-вывода блоками, например, терминалы.
Подсистема управления процессами отвечает за синхронизацию процессов, взаимодействие процессов, распределение памяти и планирование выполнения процессов. Подсистема управления файлами и подсистема управления процессами взаимодействуют между собой, когда файл загружается в память на выполнение: подсистема управления процессами читает в память исполняемые файлы перед тем, как их выполнить.
Примерами обращений к операционной системе, используемыми при управлении процессами, могут служить fork(создание нового процесса),exec(наложение образа программы на выполняемый процесс),exіt(завершение выполнения процесса),waіt(синхронизация продолжения выполнения основного процесса с моментом выхода из порожденного процесса),brk(управление размером памяти, выделенной процессу) иsіgnal(управление реакцией процесса на возникновение экстраординарных событий).
Модуль распределения памяти контролирует выделение памяти процессам. Если в какой-то момент система испытывает недостаток в физической памяти для запуска всех процессов, ядро пересылает процессы между основной и внешней памятью с тем, чтобы все процессы имели возможность выполняться. Существует два способа управления распределением памяти: выгрузка (подкачка) и замещение страниц.
Модуль "планировщик" распределяет между процессами время центрального процессора. Он планирует очередность выполнения процессов до тех пор, пока они добровольно не освободят центральный процессор, дождавшись выделения какого-либо ресурса, или до тех пор, пока ядро системы не выгрузит их после того, как их время выполнения превысит заранее определенный квант времени. Планировщик выбирает на выполнение готовый к запуску процесс с наивысшим приоритетом; выполнение предыдущего процесса (приостановленного) будет продолжено тогда, когда его приоритет будет наивысшим среди приоритетов всех готовых к запуску процессов. Существует несколько форм взаимодействия процессов между собой, от асинхронного обмена сигналами о событиях до синхронного обмена сообщениями.
Наконец, модуль управления аппаратными средствами отвечает за обработку прерываний и за связь с машиной. Такие устройства, как диски и терминалы, могут прерывать работу центрального процессора во время выполнения процесса. При этом ядро системы после обработки прерывания может возобновить выполнение прерванного процесса. Прерывания обрабатываются не самими процессами, а специальными функциями ядра системы, перечисленными в контексте выполняемого процесса.
