Системные вызовы ядра ОС

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

Softirq, Tasklet, Bottom Half

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

Механизмы Softirq, Tasklet, Bottom Half исторически появились в разное время, и по разному ведут себя на SMP системах (многопроцессорных системах). Bottom Half - исторически более ранний механизм. Только один Bottom Half, не важно какого типа, может выполняться в данный момент только на одном процессоре. Несколько Tasklet, разного типа может одновременно выполняться на нескольких процессорах. Tasklet'ы регистрируются динамически и их может быть сколько угодно. Softirq одного и того же типа может выполняться одновременно на нескольких процессорах. Число softirq ограничено.

Механизм запуска программных прерываний следующий: Аппаратное прерывание выполняет какие-либо действия и выставляет флажок программного прерывания. После выполнения аппаратного прерывания, а также при переходе работы ОС из режима ядра в режим задачи выполняется функция do_softirq, которая анализирует выставленные флажки и запускает "первое попавшееся" (в каком-то смысле) прерывание.



Ожидание системных ресурсов

Выполняя тот или иной системный вызов, может получиться так, что-то или иное действие не может быть выполнено немедленно. В этом случае возможно два варианта - это "неудачный" возврат из вызова, или ожидание запрошенного ресурса. В случае ожидания ресурса, не происходит периодической проверки его доступности, а происходит следующее: Процесс, запросивший ресурс ставится в очередь ожидания данного ресурса и "засыпает"; он не выбирается планировщиком при выборе процессов. Когда ресурс освобождается (о чем система узнает посредством аппаратного прерывания) процессы, стоявшие в соответствующей очереди "пробуждаются", и пытаются снова получить доступ к ресурсу. При этом какая-либо очередность не соблюдается.

Дата последней модификации: 17-июня-2003