logo search
Ostatok_lektsy_3_kurs_OSSiO

Структура unix

Рассмотрим теперь вкратце общее устройство UNIX как ОС (*** слайд 47).

Ядро

Центром ОС является, как было сказано раньше, менеджер ресурсов и планировщик задач. Функции этих частей системы востребованы, пока есть хоть одна задача (т. е. всегда), и к тому же они работают в режиме супервизора. В UNIX они составляют ядро системы (kernel). Ядро постоянно находится в памяти, обслуживая непрерывный поток запросов на использование универсальных ресурсов системы: памяти и времени. В ядро UNIX, кроме того, входит реализация сетевых протоколов. Ядро UNIX предоставляет программам пользователя унифицированный интерфейс к ресурсам компьютера (так называемые системные вызовы, system calls) и содержит всю непростую логику распределения ресурсов по задачам, которые в UNIX называются процессами.

На самом деле далеко не все, что работает в режиме ядра (супервизора), обязано присутствовать в конкретной системе, запущенной на конкретном компьютере. Функции, отвечающие за работу с разнообразными внешними устройствами (которые отличаются логикой работы), бессмысленно включать в ядро все сразу. Отдельно взятый компьютер не содержит и сотой части всех устройств, которые поддерживает система.

Программные драйверы включаются в состав ядра в том случае, если соответствующие им устройства входят (или будут входить) в состав компьютера. Одни драйверы (скажем, шины PCI) есть в системе почти всегда, другие написаны специально для контроллера какого-нибудь экзотического устройства. Существуют драйверы, которые не являются интерфейсной частью внешнего устройства, а реализуют дополнительную функциональность самой системы (скажем, драйвер файловой системы ISO-9660, которая используется на лазерных дисках).

В старых версиях UNIX все драйверы приходилось заранее прикомпоновывать к ядру (т. е. пользоваться компоновщиком). Процесс компиляции ядра из исходных текстов или компоновки его из объектных модулей называется сборкой ядра и во многих системах практикуется и по сей день. С увеличением размеров оперативной памяти отпала необходимость экономить байты на сборке ядра. Но, однако, разработчики все же стараются собрать ядро, содержащее драйверы всех самых популярных устройств, чтобы оно, не занимало слишком много памяти и могло управлять системой на подавляющем большинстве компьютеров. Такое ядро называется базовым (generic). Поскольку для пересборки ядра необходимы многие знания (как минимум, нужно разбираться в архитектуре используемой версии UNIX, в архитектуре ЭВМ и в особенности внешних устройств), а нужда в этом может возникнуть даже при первой установке системы, хорошо укомплектованное базовое ядро во многом облегчает жизнь неопытному пользователю. Можно сказать, что все современные версии Linux изначально имеют базовое ядро.

Если базового ядра все-таки недостаточно, то в современных системах многие драйверы можно загружать динамически, из дополнительных модулей и даже перекомпоновать ядро прямо на ходу! Т.к. модули ядра работают в привилегированном режиме, обращаться с ними следует крайне осторожно: ошибка в таком модуле (скажем, запись неизвестно чего неизвестно куда в память) может быть фатальной и даже, вызвать крах системы.

Итак, ядро и его дополнительные модули работают в привилегированном режиме, а все остальные части UNIX запускаются уже как процессы в режиме пользователя. Хотя, очень тесно с ядром взаимодействует функциональная подсистема (службы), т.е. наборы программных средств, выполняющих определенную функцию (например, система печати, система передачи почты и т. д.). Управляющий центр функциональной подсистемы - это так называемый демон (daemon, в переводах с греческого называемый "даймон"). Демон - это процесс, который запускается при старте UNIX для обслуживания запросов к функциональной подсистеме, т.е. выполняет роль посредника. Пользователю запускать его незачем, он работает всегда. Именно демон обменивается данными с ядром системы, часто он держит очередь пользовательских запросов, работает с сетью и выполняет некоторые другие задачи.