воскресенье, 17 октября 2010 г.

1.2. Внутреннее устройство ядра


В Unix системе, несколько действующих одновременно процессов обслуживающих различные задачи. Каждый процесс запрашивает ресурсы системы, будь то управление компьютером, памяти, сетевых соединений или некоторые другие ресурсы. Ядро это большой кусок выполняемого кода обеспечивающих все эти запросы.  Хотя различие между различными задачами ядра не всегда ясно выражены, роль ядра, тем не менее, их можно разделить на следующие части:  (смотрите на рисунок 1-1)

Управление процессами.

Ядро отвечает за создание и уничтожение процессов и управляет их соединением со внешним миром (ввод и вывод). Связь между различными процессами (через сигналы, «радиаторы — pipes- пипес» или межпроцессорные связывающие примитивы) - основа полнофункциональной системы, также управляется ядром. В дополнение, список, который контролирует какому процессу будет доступен процессор, часть управления процессов. В более широком смысле, управление процессами ядра активно осуществляется абстракцией о нескольких процессах которые обращаются к процессору или нескольким.

Управление памятью.

Компьютерная память главный ресурс и используемая политика её распределения критическая проблема выполняемая системой. Ядро построено на виртуальном адресном пространстве для любого и всех процессов на пике проблема ограничения доступный ресурсов. Различные части ядра  взаимодействуют с подсистемой управления памятью посредством функциональных вызовов, классификация из простых «занято\свободно» пары в комплексе намного более функциональны.

Файловые системы.

Unix прочно основан на концепции файловой системы, почти все в Unix может быть обрабатываться как файл. Ядро построено как структурированная файловая система на вершине неструктурированного аппаратного обеспечения, и в результате файловая абстракция  используется во всех отношениях всей системой. В дополнение, Линукс поддерживает многочисленные файловые системы, это различные пути организации данных на физическом уровне. На пример, диски могут бить отформатированы стандартной для Линукс файловой системой ext3, обычно используется файловая система FAT или некоторые другие.

Контроль устройств.

Почти каждая операционная система в конечном счете карта физических устройств. За исключением процессора, памяти и очень не многих других внутренностей, любой и все операции контроля устройств выполнены кодом особенный для каждого адресного устройства. Этот код и называется драйвером устройства.  В ядро должен быть вставлен драйвер для каждого периферийного устройства представленного в системе, от жесткого диска до клавиатуры и даже бобинных дисков. Этот аспект функциональности ядра основной предмет рассмотрения этой книги.

Сетевая работа.

Сетевая работа должна управляться операционной системой, потому что большинство операций сетевой работы не особенный процесс, поступающие пакеты — это асинхронные процессы. Пакеты должны быть собраны, идетифицированы и  отправлены до того как процессы будут смотреть за ними. Система заведует доставлением пакетов данных через программу и сетевой интерфейс, и должен быть контроль выполнения программами соразмерно их сетевой активности. Дополнительно, маршрутизация и адресное разрешение  происходят не используя ядра.


Рисунок 1-1. Внутреннее устройство ядра.


1.2.1. Загружаемые модули.

Одна из хороших особенностей Линукс это способность во время работы ядра устанавливать его параметры. Это значит что вы можете добавить функциональность ядра (а также убирать какую-то функциональность) в то время когда система запускается и во время её работы.
Каждый кусок кода, который добавляется во время работы ядра, называется модулем. Ядро Линукс предлагает поддержку для достаточно немногих различных типов (или классов) модулей, включая, но не ограничивая, драйверы устройств. Каждый модуль переделывает объект кода (не связанные в полностью исполняемый комплекс ) это может быть динамичное связывание во время работы ядра «внутреннего модуля (insmod)» программы и могут быть не связанные «удаленного модуля (rmmod)???» программы.
Рисунок 1-1 отображает различные классы модулей, которые заведуют специфическими задачами так модуль принадлежит какому-то  особому классу в соответствии со своей функциональностью. Место модулей на рисунке 1-1 покрывает большинство важных классов, но далеко не все, потому что все больше и больше функциональностей добавляются в Линукс.

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.