| |
В этом разделе мы рассматриваем организацию ядра 4.4BSD с двух точек зрения:
Как статический блок программного обеспечения, категоризуемый по функциональности модулей, составляющих ядро
В его динамике, категоризуемой по услугам, предоставляемым пользователям
Самая большая часть ядра реализует системные услуги, к которым приложения обращаются через системные вызовы. В 4.4BSD это программное обеспечение организуется по следующим принципам:
Базовые услуги ядра: обработка таймеров и системного таймера, управление дескрипторами и процессами
Поддержка управления памятью: подкачка и выгрузка
Общесистемные интерфейсы: ввод/вывод, управление и мультиплексирование операций, выполняемых над дескрипторами
Файловая система: файлы, каталоги, преобразование маршрутов, блокировка файлов и управление буфером ввода/вывода
Поддержка работы с терминалами: драйвер терминального интерфейса и режимы работы терминального канала
Службы межпроцессного взаимодействия: сокеты
Поддержка сетевых коммуникаций: коммуникационные протоколы и общесетевые службы, такие, как маршрутизация
Table 2-1. Машинно-независимое программное обеспечение в ядре 4.4BSD
Категория | Количество строк кода | Процент от всего ядра |
---|---|---|
файлы заголовков | 9,393 | 4.6 |
инициализация | 1,107 | 0.6 |
службы ядра | 8,793 | 4.4 |
общесистемные интерфейсы | 4,782 | 2.4 |
межпроцессное взаимодействие | 4,540 | 2.2 |
работа с терминалами | 3,911 | 1.9 |
виртуальная память | 11,813 | 5.8 |
управление vnode | 7,954 | 3.9 |
именование файловой системы | 6,550 | 3.2 |
хранение файлов | 4,365 | 2.2 |
хранение log-структур | 4,337 | 2.1 |
хранение на основе памяти | 645 | 0.3 |
файловая система cd9660 | 4,177 | 2.1 |
различные файловые системы (10) | 12,695 | 6.3 |
сетевая файловая система | 17,199 | 8.5 |
сетевое взаимодействие | 8,630 | 4.3 |
протоколы internet | 11,984 | 5.9 |
протоколы ISO | 23,924 | 11.8 |
протоколы X.25 | 10,626 | 5.3 |
протоколы XNS | 5,192 | 2.6 |
всего машинно-независимая часть | 162,617 | 80.4 |
Большая часть программного обеспечения в этих категориях является машинно-независимой и переносима между различными аппаратными архитектурами.
Машинно-зависимые аспекты ядра отделены от основного кода. В частности, ни в одной части машинно-независимого кода не содержится кода, зависимого от конкретной архитектуры. Когда требуется произвести действия, зависимые от архитектуры, машинно-независимый код вызывает функцию, зависимую от архитектуры машины, которая находится в машинно-зависимой части кода. Машинно-зависимое программное обеспечение включает в себя
Низкоуровневые действия по запуску системы
Обработка исключительных ситуаций и прерываний
Низкоуровневые манипуляции процессом во время работы
Конфигурация и инициализация аппаратных устройств
Поддержка устройств ввода/вывода во время работы
Table 2-2. Машинно-зависимое программное обеспечение для HP300 в ядре 4.4BSD
Категория | Количество строк кода | Процент от всего ядра |
---|---|---|
машинно-зависимые заголовки | 1,562 | 0.8 |
заголовки драйверов устройств | 3,495 | 1.7 |
исходные тексты драйверов устройств | 17,506 | 8.7 |
виртуальная память | 3,087 | 1.5 |
остальная машинно-зависимая часть | 6,287 | 3.1 |
процедуры на ассемблере | 3,014 | 1.5 |
совместимость с HP/UX | 4,683 | 2.3 |
всего машинно-зависимая часть | 39,634 | 19.6 |
Table 2-1 суммаризует машинно-независимый код, который составляет ядро 4.4BSD для HP300. Числа во второй колонке обозначают количество строк исходного кода на языке C, заголовочных файлов и ассемблерного кода. Практически весь код ядра написан на языке программирования C; менее двух процентов написано на языке ассемблера. Как показывает статистика в Table 2-2, машинно-зависимый код, не включающий поддержку HP/UX и устройств, составляет менее 6.9 процента ядра.
Лишь малая часть ядра отвечает за инициализацию системы. Этот код используется при начальной загрузке системы для перехода в рабочий режим и отвечает за настройку аппаратного и программного окружения ядра (обратитесь к Главе 14). Некоторые операционные системы (особенно те, что ограничены объемом физической памяти) выполняют действия по выгрузке или перекрытию программного кода, выполняющего эти функции, после окончания его работы. Ядро 4.4BSD не работает повторно с памятью, использованной начальным кодом, потому что этот объем памяти составляет менее 0.5 процентов ресурсов ядра, используемых на типичной машине. Также начальный код не находится только в одном месте ядра -- он рассредоточен везде, и обычно появляется там, где логически связан с объектом инициализации.
Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам связанными с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам связанным с русским переводом документации, пишите <frdp@FreeBSD.org.ua>.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |