Задача ядра по отношению к устройствам довольно проста. Как правило, устройства доступны только в режиме ядра, поскольку некорректный доступ (например, когда пользовательский процесс пытается выключить питание) может вызвать отказ в работе компьютера. Еще одна проблема заключается в том, что различные устройства редко обладают одинаковым программным интерфейсом, даже если они выполняют одинаковую задачу: например, две различные сетевые карты. По этой причине драйверы устройств традиционно являются частью ядра и стремятся предоставить унифицированный интерфейс для пользовательских процессов, чтобы облегчить труд разработчиков программного обеспечения.
1.3.4. Системные вызовы и поддержка
Существуют и другие типы функций ядра, доступные для пользовательских процессов. Например,
Два системных вызова — fork и exec — важны для понимания того, как происходит запуск процессов:
• fork. Когда процесс осуществляет вызов fork, ядро создает практически идентичную копию данного процесса;
• exec. Когда процесс осуществляет вызов exec(
За исключением процесса init (глава 6),
Рис. 1.2. Запуск нового процесса
ПРИМЕЧАНИЕ
Системные вызовы обычно обозначаются с помощью круглых скобок. В примере, показанном на рис. 1.2, процесс, который запрашивает ядро о создании другого процесса, должен осуществить системный вызов fork. Такое обозначение происходит от способа написания вызовов в языке программирования C. Чтобы понять эту книгу, вам не обязательно знать язык C. Помните лишь о том, что системный вызов — это взаимодействие между процессом и ядром. Более того, в этой книге упрощены некоторые группы системных вызовов. Например, вызов exec обозначает целое семейство системных вызовов, выполняющих сходную задачу, но отличающихся программной реализацией.
Ядро также поддерживает пользовательские процессы, функции которых отличаются от традиционных системных вызовов. Самыми известными из них являются
примечание
Технически пользовательский процесс, который получает доступ к псевдоустройству, все же вынужден осуществлять системный вызов для открытия этого устройства. Таким образом, процессы не могут полностью обойтись без системных вызовов.
1.4. Пространство пользователя
Область оперативной памяти, которую ядро отводит для пользовательских процессов, называется