"Ядра - чистый изумруд" Ермолаев Евгений aka Saturn Спецвыпуск: Хакер, номер #047, стр. 047-044-2 Остается малая, но аппаратно-зависимая часть, которая включает следующие компоненты: - запуск и инициализация системы на низком уровне; - первичная обработка внутренних и внешних прерываний; - управление памятью; - переключение между режимами пользователя и ядра; - части драйверов, связанные с особенностями аппаратуры. Как видно, в зависимой части осталось лишь небольшое число функций, которые переписывают при переносе ОС на другую платформу. Давай теперь рассмотрим основные функции и подсистемы ядра. При включении выполняется инициализация системы. Эта функция занимается запуском и раскруткой. Средство раскрутки загружает полное ядро в память и запускает систему. Следующая функция - управление памятью, которая отображает виртуальную память процессов в оперативку. Кроме того, этот компонент обеспечивает использование одних и тех же областей оперативки для разных процессов с использованием внешних носителей. Основными подсистемами ядра являются подсистема управления файлами и подсистема управления процессами. Остановимся на них поподробнее, поскольку эти системы являются основным источником уязвимостей ядра. В UNIX каждому файлу в соответствие ставится некий индекс, в котором содержатся описание размещения информации на физическом носителе, права доступа, владелец и другие данные. Каждый файл имеет только один индекс. Когда процесс обращается к файлу по имени, ядро возвращает индекс файла. То есть каждое имя является указателем. Индексы хранятся в файловой системе, однако при работе с файлом ядро заносит их в таблицу индексов, которая находится в ОЗУ. Кроме таблицы индексов, ядро использует еще две информационные структуры: таблицу файлов и таблицу дескрипторов файла. Пользователь может получить доступ к файловым дескрипторам и раскрыть информацию. Итак, основные компоненты файловой системы: - Блок загрузки. Располагается в начале файловой системы и содержит программу начальной загрузки. - Суперблок. Здесь обозначаются свойства файловой системы: размер, расположение свободного пространства, количество файлов и другая информация. - Список индексов. Размер списка указывается администратором при генерации файловой системы. - Информационные блоки. Содержат данные файлов, а также служебные данные. Информационный блок может принадлежать только одному файлу. После того как загрузка ядра выполнена, нужно как-то создавать, завершать и следить за существующими процессами и нитями (здесь нить - это "процесс", выполняемый на общей виртуальной памяти). Этим занимается функция управления процессами и нитями. Ввиду мультипроцессорности *nix ядро обеспечивает разделение процессорного времени или процессоров, что создает эффект параллельности выполнения разных задач. Ядро – это невыгружаемый компонент, и поэтому процесс, выполняющийся в режиме ядра, продолжает свое выполнение до тех пор, пока не вернется в режим задачи либо пока не перейдет в состояние «сна». Благодаря невыгружаемости ядро обеспечивает целостность информационных структур и стабильность работы. |