Ядро FreeBSD никогда не вытесняется для запуска процесса пользователя при выполнении в верхней половине ядра - например, при выполнении системного вызова, хотя оно явным образом уступит процессор, если нужно ждать событие или разделяемый ресурс. Однако его выполнение может быть прервано прерыванием для нижней половины ядра. Когда получено прерывание, процесс ядра, обрабатывающий это устройство, назначается на выполнение. Обычно эти процессы прерываний устройств имеют более высокий приоритет, чем процессы пользователя или процессы, работающие в верхней половине ядра. Таким образом, когда прерывание делает процесс обработки прерывания устройства работоспособным, он обычно вытесняет текущий выполняющийся процесс. Когда процессу, работающему в верхней половине ядра, нужно добавить элемент в рабочий список устройства, он должен убедиться, что он не будет прерван этим устройством на полпути связывания нового элемента с рабочим списком. В FreeBSD 5.2 рабочий список защищен мьютексом. Любой процесс (из верхней или нижней половины), стремящийся изменить рабочий список, должен сначала получить мьютекс. После его получения другой процесс, также стремящийся получить мьютекс, будет ждать до тех пор, пока процесс, владеющий мьютексом, не закончит изменение списка и не освободит мьютекс.
Процессы взаимодействуют при разделении системных ресурсов, таких, как диски и память. Верхняя и нижняя половины ядра также работают вместе в реализации определенных системных операций, таких, как ввод/вывод. Обычно верхняя половина запускает операцию ввода/вывода, а затем уступает процессор; после этого запрашивающий процесс будет спать, ожидая уведомления от нижней половины о завершении запроса ввода/вывода.
- 19/05/2010 21:00 - Возвращение из ядра
- 19/05/2010 02:34 - Вход в ядро
- 18/05/2010 12:57 - Организация времени выполнения
- 18/05/2010 04:22 - Системный вход
- 17/05/2010 20:11 - Работа системы
- 16/05/2010 18:53 - Межпроцессное взаимодействие
- 15/05/2010 13:20 - Укорачивание файлов