Помимо операционной системы и библиотеки системных вызовов, все версии Linux предоставляют большое количество стандартных программ. К этим программа относятся: Командный процессор (оболочка), компиляторы, редакторы, программы обработки текста и утилиты для работы с файлами. При запуске оболочки она инициализируется, а затем выводит на экран символ приглашения к вводу. После того, как пользователь введет командную строку, оболочка извлекает из нее первое слово и ищет программу с таким именем. Если программу удается найти, оболочка запускает ее. При этом работа оболочки приостанавливается на время работы запущенной программы. По завершении программы, оболочка пытается прочитать следующую команду. Оболочка представляет собой обычную пользовательскую программу. Пример: cp src dest. Данная команда запускает программу cp с двумя аргументами src и dest. Эта программа интерпретирует первый аргумент как имя существующего файла, она копирует этот файл и называет эту копию dest.
В некоторых дистрибутивах операционной системы Linux для ПК используется графический интерфейс, ориентированный на взаимодействие с мышью, для чего не потребовалось никаких изменений в системе. Данный интерфейс создает среду рабочего стола, также существует администратор многооконного режима, который управляет размещением и видом окон и создает графический интерфейс.
Графические интерфейсы пользователя в Linux поддерживает оконная система X Windowing System (X Window, X 11, X). Она представляет обмен и протоколы отображения для управления окнами на растровых дисплеях unix-подобных систем. X-сервер является главным компонентом, который управляет такими устройствами, как монитор, мышь, клавиатура и т.д. и отвечает за перенаправление ввода от клиентских программ к операционной системе.
Системный интерфейс
Компонент Ввода-вывода
Компонент управления памятью
Компонент управления процессами
Виртуальная файловая система
Виртуальная память
Обработка сигналов
Файловая система
Сокеты
Терминалы
Обобщенный уровень блочных устройств
Сетевые протоколы
Дисциплины линий связи
Механизм замещения страниц
Создание и завершение процессов и потоков
Диспетчер блочных устройств
Драйверы сетевых устройств
Драйверы символьных устройств
Кэш страниц
Планирование процессов
Диспетчер прерываний
Аппаратура
Нижний уровень ядра состоит из обработчиков прерываний, которые являются основным средством взаимодействия с устройствами и механизма диспетчеризации на низком уровне. Диспетчеризация производится при возникновении прерываний. При этом код низкого уровня останавливает выполнение работающего процесса, сохраняет его состояние в структуре процессов ядра и запускает соответствующий драйвер.
Ядро Linux можно разделить на 3 части:
1) Компонент ввода-вывода.
2) Компонент управления памятью
3) Компонент управления процессами
Компонент ввода-вывода:
Данный компонент содержит все части ядра, которые отвечают за взаимодействие с устройствами ввода-вывода, выполнение сетевых операций. На самом высоком уровне все операции интегрированы в уровень виртуальной файловой системы. Т.е. выполнение операций чтения из файла, будь он в памяти или на диске это то же самое, что и выполнение операции чтения символа с терминального ввода. На самом низком уровне все операции ввода-вывода проходят через соответствующий драйвер. Все драйверы в Linux классифицируются либо как символьные, либо блочные. Выше уровня драйверов устройств код ядра для каждого типа устройств свой. В зависимости от вида символьного устройства, информация обрабатывается согласно определенной дисциплине линий связи.
Уровень выше сетевых драйверов выполняет функции маршрутизации, обеспечивая отправку правильного пакета к правильному устройству или к блоку обработки протокола. Над сетью располагается интерфейс сокетов, позволяющий программам создавать сокет.
Над дисковыми драйверами располагается планировщик ввода-вывода, который отвечает за упорядочивание и выдачу запросов над дисковой операцией. ОС Lixux имеет несколько одновременно существующих файловых систем. Обобщенный уровень блоков призван скрыть различия реализаций файловой системы в зависимости от аппаратных устройств.
Компонент управления памятью:
В задачи управления памятью входят:
- Обслуживание отображения виртуальной памяти на физическую
- Поддержка кэша страниц, к которым недавно выполнялось обращение
- Поставка в память новых страниц с кодом и данными
Компонент управления процессами:
Основная задача этого компонента – создание и завершение процесса
Планировщик процессов решает каким процессам запускаться в данный момент, а каким приостанавливаться и завершаться. Компонент обработки сигналов обрабатывает поступающие процессам управляющие сигналы.
Все рассмотренные компоненты взаимосвязаны друг с другом. Файловые системы обращаются к файлам через блочные устройства, однако, если в данный момент в памяти отсутствует свободное место, то в данном случае необходимо задействовать компонент управления памятью для выгрузки и загрузки соответствующих страниц.
Интерфейс системных вызовов ядра – все системные вызовы поступают сюда и вызывают эмулированное прерывание, которое переключает исполнение из пользовательского режима в защищенный и передает управление одному из компонентов ядра.