Структура и основные функции ядра
Ядро состоит из трех основных подсистем (рис. 2):
Файловая подсистема
Подсистема управления процессами и памятью
Подсистема ввода/вывода.
Рис. 2.
К основным функциям ядра ОС UNIX принято относить следующие:
Инициализация системы − функция запуска и раскрутки. Ядро системы обеспечивает средство раскрутки (bootstrap), которое обеспечивает загрузку полного ядра в память компьютера и запускает ядро.
Управление файлами − функция, реализующая абстракцию файловой системы, - иерархии каталогов и файлов. Файловые системы ОС UNIX поддерживают несколько типов файлов. Некоторые файлы могут содержать данные в формате ASCII, другие будут соответствовать внешним устройствам. В файловой системе хранятся объектные файлы, выполняемые файлы и т.д. Файлы обычно хранятся на устройствах внешней памяти; доступ к ним обеспечивается средствами ядра. В мире UNIX существует несколько типов организации файловых систем. Современные варианты ОС UNIX одновременно поддерживают большинство типов файловых систем.
Управление процессами и нитями − функция создания, завершения и отслеживания существующих процессов и нитей. Поскольку ОС UNIX является мультипроцессной (многозадачной) операционной системой, ядро обеспечивает разделение между запущенными процессами времени процессора (или процессоров в мультипроцессорных системах) и других ресурсов компьютера для создания внешнего ощущения того, что процессы реально выполняются параллельно.
Обмен данными (коммуникационные средства) − функция, обеспечивающая возможности обмена данными между процессами, выполняющимися внутри одного компьютера (IPC - Inter-Process Communications), между процессами, выполняющимися в разных узлах локальной или глобальной сети передачи данных, а также между процессами и драйверами внешних устройств.
Управление памятью − функция отображения практически неограниченной вирту-альной памяти процессов в физическую оперативную память компьютера, которая имеет ограниченные размеры. Соответствующий компонент ядра обеспечивает разделяемое использование одних и тех же областей оперативной памяти несколькими процессами с использованием внешней памяти.
Программный интерфейс − функция, обеспечивающая доступ к возможностям ядра со стороны пользовательских процессов на основе механизма системных вызовов, оформленных в виде библиотеки функций.
Файловая подсистема управляет файлами, размещает записи файлов, управляет свободным пространством, доступом к файлам и поиском данных для пользователей.
Процессы взаимодействуют с подсистемой управления файлами, используя при этом совокупность специальных обращений к операционной системе, таких как open(2) (для того, чтобы открыть файл на чтение или запись), close(2), read(2), write(2), stat(2) (запросить атрибуты файла), chown(2) (изменить запись с информацией о владельце файла) и chmod(2) (изменить права доступа к файлу).
Забегая вперед, отметим, что в UNIX поддерживается шесть типов файлов. «Обычными», т.е. файлами на диске, с которыми Вы уже имели дело, являются только первый из этих типов:
обыкновенным файлом (regular file)
каталогом (directory)
специальным файлом устройства (speshial device file)
именованным (имеющим имя) каналом связи (named pipe или FIFO)
связью (link)
сокетом (socket).
Благодаря этому файловая подсистема обеспечивает унифицированный (единый, единообразный) интерфейс доступа к данным, расположенным на дисковых накопителях, и к периферийным устройствам. Одни и те же функции open (2) , read(2), write(2) могут использоваться как при чтении или записи данных на диск, так и при выводе текста на принтер или терминал. Файловая подсистема обеспечивает перенаправление запросов, адресованных периферийным устройствам, соответствующим модулям подсистемы вода/вывода
Важной функцией файловой подсистемы в UNIX является контроль прав доступа к файлам и каталогам. Поскольку большинство прикладных функций выполняется через интерфейс файловой системы (в том числе и доступ к периферийным устройствам), права доступа к файлам определяют привилегии пользоателя в системе.
Подсистема управления процессами отвечает за синхронизацию процессов, взаимодействие процессов, распределение памяти и планирование выполнения процессов. Подсистема управления файлами и подсистема управления процессами взаимодействуют между собой, когда файл загружается в память на выполнение: подсистема управления процессами читает в память исполняемые файлы перед тем, как их выполнить.
Запущенная на выполнение программа порождает в системе один или более процессов (или задач). Подсистема управления процессами контролирует:
Создание и удаление процессов.
Распределение системных ресурсов (памяти, вычислительных ресурсов) между процессами.
Синхронизацию процессов.
Межпроцессное взаимодействие.
Очевидно, что в общем случае число активных процессов превышает число процессоров компьютера, но в каждый конкретный момент времени на каждом процессоре может выполняться только один процесс. Операционная система управляет доступом процессов к вычислительным ресурсам, создавая ощущение одновременного выполнения нескольких задач.
Специальная задача ядра, называемая «распорядителем» или «планировщиком» процессов (scheduler), разрешает конфликты между процессами в конкуренции за системные ресурсы (процессор, память, устройства ввода/вывода). Планировщик запускает процесс на выполнение, следя за тем, чтобы процесс монопольно не захватил разделяемые системные ресурсы. Процесс освобождает процессор, ожидая длительной операции ввода/вывода, или по прошествии кванта времени. В этом случае планировщик выбирает следующий процесс с наивысшим приоритетом и запускает его на выполнение.
Модуль управления памятью обеспечивает размещение оперативной памяти для прикладных задач. Оперативная память является дорогостоящим ресурсом, и, как правило, ее редко бывает "слишком много". В случае если для всех процессов недостаточно памяти, ядро перемещает части процесса или нескольких процессов во вторичную память (как правило, в специальную область жесткого диска), освобождая ресурсы для выполняющегося процесса. Все современные системы реализуют так называемую виртуальную память: процесс выполняется в собственном логическом адресном пространстве, которое может значительно превышать доступную физическую память. Управление виртуальной памятью процесса также входит в задачи модуля управления памятью.
Модуль межпроцессного взассмодействия отвечает за уведомление процессов o событиях c помощью сигнaлов и обеспечивает возможность пеpедачи данных между pазличными процессами.
Примерами обращений к операционной системе, используемых при управлении процессами, могут служить fork(2) (создание нового процесса), exec(2) (наложение образа программы на выполняемый процесс), exit(2) (завершение выполнения процесса), wait(2) (синхронизация продолжения выполнения основного процесса с моментом выхода из порожденного процесса), brk(2) (управление размером памяти, выделенной процессу) и signal(2) (управление реакцией процесса на возникновение экстраординарных событий).
Подсистема ввода-вывода выполняет запросы файловой подсистемы и подсистемы управления процессами для доступа к периферийным устройствам (дискам, магнитным лентам, принтерам, терминалам,…). Она обеспечивает необходимую буферизацию данных и взаимодействует с драйверами устройств – специальными модулями ядра, непосредственно обслуживающими внешние периферийные устройства.