Ядро можно логически разделить на верхнюю половину и нижнюю половину. Верхняя половина ядра предоставляет службы процессам в ответ на системные вызовы или исключения. Это программное обеспечение можно представить как библиотеку процедур, разделяемую всеми процессами. Верхняя половина ядра выполняется в привилегированном режиме исполнения, в котором она имеет доступ как к структурам данных ядра, так и к контексту процессов уровня пользователя. Контекст каждого процесса содержится в двух областях памяти, зарезервированной для специфической информации процесса. Первая из этих областей является структурой процесса, которая исторически содержит информацию, необходимую, даже когда процесс сброшен на диск. В FreeBSD эта информация включает идентификаторы, связанные с процессом, права и привилегии процесса, его дескрипторы, распределение памяти, ожидающие внешние события и связанные действия, максимальное и текущее использование ресурсов и многие другие вещи. Вторая является структурой пользователя, которая исторически содержит информацию, которая не нужна, когда процесс сброшен на диск. В FreeBSD информация структуры пользователя каждого процесса включает аппаратный блок управления потоком (thread control block (ТСВ), учет ресурсов и статистику процесса и незначительную дополнительную информацию для отладки и создания дампов памяти (core dump). Решение, что же должно храниться в структуре процесса и структуре пользователя, было более важно в предыдущих системах, чем в FreeBSD. Поскольку память стала менее ограниченным ресурсом, большая часть структуры пользователя была для удобства перенесена в структуру процесса.
Нижняя половина ядра содержит в себе процедуры, которые вызываются для обработки аппаратных прерываний. Деятельность нижней половины ядра синхронна по отношению к источнику прерывания, но асинхронна по отношению к верхней половине, и программное обеспечение не может полагаться на то, что во время прерывания будет (если вообще будет) активен определенный процесс. Таким образом, информация о состоянии для процесса, который инициировал деятельность, недоступна. Верхняя и нижняя половины ядра взаимодействуют через структуры данных, обычно организованных вокруг рабочих очередей.
- 19/05/2010 21:00 - Возвращение из ядра
- 19/05/2010 02:34 - Вход в ядро
- 18/05/2010 21:00 - Выполнение системного вызова
- 18/05/2010 04:22 - Системный вход
- 17/05/2010 20:11 - Работа системы
- 16/05/2010 18:53 - Межпроцессное взаимодействие
- 15/05/2010 13:20 - Укорачивание файлов
- 14/05/2010 19:10 - Идентификация файла