Архитектура ядра: Ядро архитектуры — Викиверситет
Ядро архитектуры — Викиверситет
Ядро архитектуры (программное ядро) — это определенный принцип построения программного обеспечения и реализации повторного использования. До сих пор обобщенных определений дано не было, но как правило, об архитектуре ядра говорят применительно к операционным системам. Со временем, выделение так называемого ядра стали осуществлять в крупных программных комплексах. Другое возможное использование этого термина применяют когда разрабатываются некие независимые библиотеки программ (SDK), так например, говорят о графических или физических движках.
Ядро — как библиотека функций[править]
Если вы хотите, чтобы отдельные части вашего алгоритма можно было применять в дальнейшем при построении новых программ, то единственный реальный путь к этому – вычленить претендующие на многократное использование функциональные компоненты вашей программы и оформить их в виде модулей. В результате такой деятельности формируется библиотека функций.
Пополняя библиотеку, уделяют внимание тестированию отдельных модулей, их единообразному описанию (интерфейсу), но, как правило, совершенно не беспокоясь о сохранении работоспособности прежнего состава библиотеки. Причины для беспокойства действительно нет, так как поступающие модули обычно настолько слабо связаны с остальными компонентами, что их появление не может как либо повредить соседям по библиотеки. Это происходит от того, что модули из библиотеки играют только подчиненную роль: разработчик новой программы самостоятельно пишет ведущую часть, которая время от времени обращается к таким модулям для решения частных подзадач.
Надежность ядра[править]
Как мы видим оформление в виде ядра, некоторых библиотек функций необходимо в первую очередь, для надежного повторного использования уже отлаженных и оттестированных алгоритмов. Причем надежность тут первично. Именно для обеспечения надежности, отказываются от простого дублирования кода. Наличие дублирования есть самая главная причина проведения рефакторинга.
Мы можем ввести два термина:
- Безболезненность для окружения. Метод изменения содержимого программного фонда называется безболезненным для окружения, если его применение не влечет за собой необходимости редактирования существовавших ранее текстов программ и других первичных материалов.
- Безболезненность для работоспособности. Метод изменения содержимого программного фонда называется безболезненным для работоспособности, если его применение не может нарушить работоспособность отлаженных ранее конкретных конфигураций программ и других первичных материалов. Необходимое условие безболезненности для работоспособности – безболезненность для окружения.
Таким образом, выделенные и оттестированные функции составляют ядро, и его использование является безболезненным как для окружения, так и для работоспособности.
Ядро — это не только библиотека функций[править]
Но полноценное ядро — это не только библиотека функций. При разработке архитектуры ядра анализируется не только как должны работать собственно функции библиотеки, но и то как их будет использовать сторонний разработчик. Кроме того, архитектура ядра предполагает разделение кода на так называемые слои. Когда один слой отвечает за математические расчеты, второй за работу с графикой и интерфейсом пользователя, третий с бизнес логикой, четвертый с базой данных. При этом само ядро реализует только минимум функций, но при этом должно обеспечить независимость и концепцию слоев ПО. Таким образом, архитектура ядра налагает ряд ограничений на то, как этим ядром будет пользоваться сторонний разработчик.
Так например, примеры хорошо реализованных ядер можно найти почти исключительно только в реализации известных операционных систем (см. w:en:Kernel (computing)), или на уровне «железа» в реализации работы процессора (см. w:Микроархитектура). А многие т.н. движки, необоснованно называют ядром того или иного программного комплекса. Они, как правило, не выполняют никакой архитектурной роли, за исключением библиотеки функций, и могут рассматриваться лишь как SDK для разработки ПО.
Архитектура ядра с кольцами защиты[править]
Кольца привилегий архитектуры x86 в защищённом режиме
Слои трёхуровневой архитектуры
Здесь мы рассмотрим понятие кольца защиты, и её применение к современной трёхуровневой архитектуре.
Кольца защиты обеспечивают информационную безопасность и отказоустойчивость на уровне аппаратного разделения системного и пользовательского уровней привилегий. Структуру привилегий можно изобразить в виде нескольких концентрических кругов. В этом случае системный режим (нулевое кольцо), обеспечивающий максимальный доступ к ресурсам, является внутренним кругом, тогда как режим пользователя с ограниченным доступом — внешним. Традиционно семейство микропроцессоров x86, начиная с x386 обеспечивает четыре кольца защиты.
На практике процессор программируется в защищенном режиме определенным образом. Для каждой локальной задачи выделяется свое локальное адресное пространство (память). В каждый момент времени в определенном регистре процессора может быть указатель только на одну из задач. Поэтому задача работает только в своем адресном пространстве и не может физически иметь доступ к другим локальным задачам. Для смены задач осуществляется т.н. переключение задач. Каждая задача имеет т.н. уровень привилегий дискриптора (DPL). Этот уровень как раз и указывает в каком кольце находится задача. Основные правила защиты по привилегиям сводятся к следующим:
- Данные из задачи (программы) с некоторым уровнем привилегий могут быть получены только программой того же или более внутреннего уровня
- Программа с некоторым уровнем привилегий может быть вызвана только программой того же или более внешнего уровня, причем вызов программы другого уровня должен осуществляться не непосредственно, а через шлюз вызова
- Все команды, управляющие механизмами защиты могут использоваться только в программах нулевого уровня, что исключает вмешательство в организацию операционной системы со стороны прикладных программ
Таким образом, данные находящиеся на более низком уровне с более высоких физически получить нельзя. С более высокого уровня можно вызвать программы только более низкого уровня, и то через т.н. шлюз. Сам шлюз готовится на более низком уровне, и определяет по сути, что с помощью его можно вызвать. И только обладая таким шлюзом программа более высокого уровня может вызвать программу более низкого уровня. По этой причине очень многие функции ядра операционной системы нельзя вызвать из клиентских программ, и для работы с ними нужно писать драйверы.
Вот такого рода защиту и должно обеспечивать полноценное ядро. Это, например, может означать, что сторонние разработчики не могут напрямую вызвать функцию ядра (этим ядро и отличается от библиотеки функций). Также сторонние разработчики не могут получить ни каких данных из ядра, кроме тех которые непосредственно предоставляет само ядро. Но главное, управление программным ходом выполняет исключительно ядро, и при необходимости может блокировать любые клиентские подпрограммы (например, те которые работаю ошибочно или не согласно принятой архитектуре), а клиентским программам для осуществления вызовов специально предоставляет callback-функции или что тоже самое работает через события (аналог вызова через шлюз).
Таким образом, такого рода ядро реализует:
- так называемый каркас архитектуры для управления ходом выполнения клиентских приложений (об этом мы поговорим в следующей статье каркас архитектуры)
- внутри себя реализует библиотеку функций (внутренний SDK — для разработчика ядра)
- часть функций, как правило в определенной «обертке» (API), из своей библиотеки, через механизм защиты (например, путем callback-функций) предоставляет клиентским приложениям
Теперь понимая, что для надежности и более четкой архитектуры нужно изолировать тем или иным образом слои приложений. Только если выше говорилось о системных слоях между операционной системой и клиентскими приложениями, то мы можем пойти далее, и изолировать слои в самом клиентском приложении.
И этих слоев как минимум два, т.н. клиент-серверная архитектура. Так сложилось, что для работы с данными повсеместно используются реляционные базы данных и, как правило, в серьезных приложениях используют или Oracle или MS SQL. Вся работа с данными преимущественно происходит посредством работы на языке SQL. Более того, как правило в хорошо разработанной архитектуре, запрещается какое-либо прямое обращение к базе данных, и вся работа с базой данных ведется посредством вызова только хранимых процедур, а уже в них на SQL так или иначе ведется работа с данными. Поэтому слой базы данных уже традиционно выделен и фактически отделен. Единственно плохо когда некоторые архитектуры, пользуясь возможностями языков программирования, прямо обращаются в серверу базы данных. В тоже время программировать пользовательский интерфейс на языке SQL невозможно. Для этого используют новейшие объектно-ориентированные языки.
Но можно пойти и еще дальше, пример более общей структуры представляет трёхуровневая архитектура. В ней также отделен сервер базы данных, но аналогично технологии MVC происходит разделение бизнес-логики и визуализации. Мы уже говорили о проблемах реализации классического MVC, но сам принцип разделения остается важным, хотя и может быть реализован более качественно. Но если в технологии MVC разделение касалось на уровне одного класса с его подклассами, то в трёхуровневой архитектуре речь идет о выделении всей визуализации в отдельную самостоятельную программу, а выделению отдельной программы (сервера) бизнес-логики. Понятно, что такое физическое разделение можно осуществить только тогда, когда логически в программе строго все было уже разделено или согласно технологии MVC, или другими более современными способами.
Тогда уже на уровне развертывания ПО, можно в зависимости от необходимости комбинировать самостоятельные компоненты ПО так или иначе. Например, можно совместить сервер бизнес-логики и сервер базы данных, а на клиентские машины поставить только программы визуализации — получая таким образом тонкого клиента. Или наоборот, совместить программы визуализации и сервер бизнес-логике на клиентских машинах, отделив только сервер базы данных — получив таким образом толстого клиента.
Ядро (Операционные Системы) — Национальная библиотека им. Н. Э. Баумана
Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 15:57, 24 августа 2017.
Ядро операционной системы (Kernel) — часть операционной системы: постоянно находящаяся в оперативной памяти, управляющая всей операционной системой, содержащая: драйверы устройств, подпрограммы управления памятью, планировщик заданий, реализующая системные вызовы и т.п.
Все операции, связанные с процессами, выполняются под управлением той части операционной системы, которая называется ядром. Ядро представляет собой лишь небольшую часть кода операционной системы в целом, однако оно относится к числу наиболее интенсивно используемых компонент системы. По этой причине ядро обычно резидентно размещается в основной памяти, в то время как другие части операционной системы перемещаются во внешнюю память и обратно по мере необходимости. Одной из самых важных функций, реализованных в ядре, является обработка прерываний. В больших многоабонентских системах в процессор поступает постоянный поток прерываний. Быстрая реакция на эти прерывания играет весьма важную роль с точки зрения полноты использования ресурсов системы и обеспечения приемлемых значений времени ответа для пользователей, работающих в диалоговом режиме.
Когда ядро обрабатывает текущее прерывание, оно запрещает другие прерывания и разрешает их снова только после завершения обработки текущего прерывания. При постоянном потоке прерываний может сложиться такая ситуация, что ядро будет блокировать прерывания в течение значительной части времени, т. е. не будет иметь возможности эффективно реагировать на прерывания. Поэтому ядро обычно разрабатывается таким образом, чтобы оно осуществляло лишь минимально возможную предварительную обработку каждого прерывания, а затем передавало это прерывание на дальнейшую обработку соответствующему системному процессу, после начала работы которого ядро могло бы разрешить последующие прерывания.
Основные функции ядра
Основные функция ядра:Ядро операционной системы, как правило, содержит программы для реализации следующих функций:
- обработка прерываний;
- создание и уничтожение процессов;
- переключение процессов из состояния в состояние;
- диспетчирование ;
- приостановка и активизация процессов ;
- синхронизация процессов ;
- организация взаимодействия между процессами;
- манипулирование блоками управления процессами;
- поддержка операций ввода-вывода;
- поддержка распределения и перераспределения памяти;
- поддержка работы файловой системы ;
- поддержка механизма вызова-возврата при обращении к проце¬дурам;
- поддержка определенных функций по ведению учета работы
- машины.
Типы архитектур ядер операционных систем
Монолитное ядро
Монолитное ядро предоставляет богатый набор абстракций оборудования. Все части монолитного ядра работают в одном адресном пространстве. Это такая схема операционной системы, при которой все компоненты её ядра являются составными частями одной программы, используют общие структуры данных и взаимодействуют друг с другом путём непосредственного вызова процедур. Монолитное ядро — старейший способ организации операционных систем. Примером систем с монолитным ядром является большинство UNIX-систем.
Достоинства: Скорость работы, упрощённая разработка модулей.
Недостатки: Поскольку всё ядро работает в одном адресном пространстве, сбой в одном из компонентов может нарушить работоспособность всей системы.
Примеры: Традиционные ядра UNIX (такие как BSD), Linux; ядро MS-DOS, ядро KolibriOS.
Монолитные ядра имеют долгую историю развития и усовершенствования и, на данный момент, являются наиболее архитектурно зрелыми и пригодными к эксплуатации. Вместе с тем, монолитность ядер усложняет их отладку, понимание кода ядра, добавление новых функций и возможностей, удаление «мёртвого», ненужного, унаследованного от предыдущих версий кода. «Разбухание» кода монолитных ядер также повышает требования к объёму оперативной памяти, требуемому для функционирования ядра ОС. Это делает монолитные ядерные архитектуры малопригодными к эксплуатации в системах, сильно ограниченных по объёму ОЗУ, например, встраиваемых системах, производственных микроконтроллерах и т. д.
Модульное ядро
Модульное ядро — современная, усовершенствованная модификация архитектуры монолитных ядер операционных систем.
В отличие от «классических» монолитных ядер, модульные ядра, как правило, не требуют полной перекомпиляции ядра при изменении состава аппаратного обеспечения компьютера. Вместо этого модульные ядра предоставляют тот или иной механизм подгрузки модулей ядра, поддерживающих то или иное аппаратное обеспечение (например, драйверов). При этом подгрузка модулей может быть как динамической (выполняемой «на лету», без перезагрузки ОС, в работающей системе), так и статической (выполняемой при перезагрузке ОС после переконфигурирования системы на загрузку тех или иных модулей).
Все модули ядра работают в адресном пространстве ядра и могут пользоваться всеми функциями, предоставляемыми ядром. Поэтому модульные ядра продолжают оставаться монолитными. Модульность ядра осуществляется на уровне бинарного образа, а не на архитектурном уровне ядра, так как динамически подгружаемые модули загружаются в адресное пространство ядра и в дальнейшем работают как интегральная часть ядра. Модульные монолитные ядра не следует путать с архитектурным уровнем модульности, присущий микроядрам и гибридным ядрам. Практически, динамичная загрузка модулей, это просто более гибкий способ изменения образа ядра во время выполнения — в отличие от перезагрузки с другим ядром. Модули позволяют легко расширить возможности ядра по мере необходимости.
Модульные ядра удобнее для разработки, чем традиционные монолитные ядра, не поддерживающие динамическую загрузку модулей, так как от разработчика не требуется многократная полная перекомпиляция ядра при работе над какой-либо его подсистемой или драйвером. Выявление, локализация, отладка и устранение ошибок при тестировании также облегчаются. Примером может служить VFS — «виртуальная файловая система», совместно используемая многими модулями файловых систем в ядре Linux.
Микроядро
Микроядро – предоставляет только элементарные функции управления процессами и минимальный набор абстракций для работы с оборудованием. Бо́льшая часть работы осуществляется с помощью специальных пользовательских процессов, называемых сервисами. Решающим критерием «микроядерности» является размещение всех или почти всех драйверов и модулей в сервисных процессах, иногда с явной невозможностью загрузки любых модулей расширения в собственно микроядро, а также разработки таких расширений.
Достоинства: Устойчивость к сбоям оборудования, ошибкам в компонентах системы. Основное достоинство микроядерной архитектуры — высокая степень модульности ядра операционной системы. Это существенно упрощает добавление в него новых компонентов. В микроядерной операционной системе можно, не прерывая её работы, загружать и выгружать новые драйверы, файловые системы и т. д. Существенно упрощается процесс отладки компонентов ядра, так как новая версия драйвера может загружаться без перезапуска всей операционной системы. Компоненты ядра операционной системы ничем принципиально не отличаются от пользовательских программ, поэтому для их отладки можно применять обычные средства. Микроядерная архитектура повышает надежность системы, поскольку ошибка на уровне непривилегированной программы менее опасна, чем отказ на уровне режима ядра.
Недостатки: Передача данных между процессами требует накладных расходов.
Классические микроядра предоставляют лишь очень небольшой набор низкоуровневых примитивов, или системных вызовов, реализующих базовые сервисы операционной системы.
Сервисные процессы (в принятой в семействе UNIX терминологии — «демоны») активно используются в самых различных ОС для задач типа запуска программ по расписанию (UNIX и Windows NT), ведения журналов событий (UNIX и Windows NT), централизованной проверки паролей и хранения пароля текущего интерактивного пользователя в специально ограниченной области памяти (Windows NT). Тем не менее, не следует считать ОС микроядерными только из-за использований такой архитектуры.
Примеры: Symbian OS; Windows CE; OpenVMS; Mach, используемый в GNU/Hurd и Mac OS X; QNX; AIX; Minix; ChorusOS; AmigaOS; MorphOS.
Экзоядро
Экзоядро — ядро операционной системы, предоставляющее лишь функции для взаимодействия между процессами и безопасного выделения и освобождения ресурсов. Предполагается, что API для прикладных программ будут предоставляться внешними по отношению к ядру библиотеками (откуда и название архитектуры).
Возможность доступа к устройствам на уровне контроллеров позволит эффективней решать некоторые задачи, которые плохо вписываются в рамки универсальной ОС, например, реализация СУБД будет иметь доступ к диску на уровне секторов диска, а не файлов и кластеров, что положительно скажется на быстродействии.
Наноядро
Наноядро — архитектура ядра операционной системы, в рамках которой крайне упрощённое и минималистичное ядро выполняет лишь одну задачу — обработку аппаратных прерываний, генерируемых устройствами компьютера. После обработки прерываний от аппаратуры наноядро, в свою очередь, посылает информацию о результатах обработки (например, полученные с клавиатуры символы) вышележащему программному обеспечению при помощи того же механизма прерываний. Примером является KeyKOS — самая первая ОС на наноядре. Первая версия вышла ещё в 1983-м году.
Гибридное ядро
Гибридные ядра — это модифицированные микроядра, позволяющие для ускорения работы запускать «несущественные» части в пространстве ядра. Имеют «гибридные» достоинства и недостатки.
Комбинация разных подходов
Все подходы к построению операционных систем имеют свои достоинства и недостатки. В большинстве случаев современные операционные системы используют различные комбинации этих подходов. Так, например, сейчас ядро «Linux» представляет собой монолитную систему с отдельными элементами модульного ядра. При компиляции ядра можно разрешить динамическую загрузку и выгрузку очень многих компонентов ядра — так называемых модулей. В момент загрузки модуля его код загружается на уровне системы и связывается с остальной частью ядра. Внутри модуля могут использоваться любые экспортируемые ядром функции.
Существуют варианты ОС GNU, в которых вместо монолитного ядра применяется ядро Mach (такое же, как в Hurd), а поверх него крутятся в пользовательском пространстве те же самые процессы, которые при использовании Linux были бы частью ядра. Другим примером смешанного подхода может служить возможность запуска операционной системы с монолитным ядром под управлением микроядра. Микроядро обеспечивает управление виртуальной памятью и работу низкоуровневых драйверов. Все остальные функции, в том числе взаимодействие с прикладными программами, осуществляются монолитным ядром. Данный подход сформировался в результате попыток использовать преимущества микроядерной архитектуры, сохраняя по возможности хорошо отлаженный код монолитного ядра.
Смешанное ядро, в принципе, должно объединять преимущества монолитного ядра и микроядра: казалось бы, микроядро и монолитное ядро — крайности, а смешанное — золотая середина. В них возможно добавлять драйверы устройств двумя способами: и внутрь ядра, и в пользовательское пространство. Но на практике концепция смешанного ядра часто подчёркивает не только достоинства, но и недостатки обоих типов ядер. Примеры: Windows NT, DragonFlyBSD.
Ссылки
Ядро операционной системы, его виды и его архитектура — Обо всем на свете!
Ядро́ (kernel) — центральная часть ОС, обеспечивающая приложениям координированный доступ к ресурсам компьютера, таким как процессорное время, память, внешнее аппаратное обеспечение, внешнее устройство ввода и вывода информации. Также обычно ядро предоставляет сервисы файловой системы и сетевых протоколов.
Как основополагающий элемент ОС, ядро представляет собой наиболее низкий уровень абстракции для доступа приложений к ресурсам системы, необходимым для их работы. Как правило, ядро предоставляет такой доступ исполняемым процессам соответствующих приложений за счёт использования механизмов межпроцессного взаимодействия и обращения приложений к системным вызовам ОС.
Виды архитектур ядер операционных систем:
Монолитное ядро ОС
Представляет богатый набор оборудования. Все компоненты монолитного ядра находятся в одном адресном пространстве. Эта схема ОС, когда все части ее ядра — это составные части одной программы. Монолитное ядро — самый старый способ организации ОС.
Достоинства: высокая скорость работы, простая разработка модулей.
Недостатки: Ошибка работы одного из компонентов ядра нарушает работу всей системы.
Модульное ядро ОС
Это современная модификация монолитных ядер ОС, но в отличие от них модульное ядро не требует полной перекомпиляции ядра при изменения аппаратного обеспечения компьютера. Более того модульные ядра имеют механизм погрузки модулей ядра. Погрузка бывает статической- с перезагрузкой ОС, и динамической — без перезагрузки ОС.
Микроядро ОС
Представляет только основные функции управления процессами и минимальный набор для работы с оборудованием.
Достоинства: устойчивость к сбоям и ошибкам оборудования и компонентов системы, высокая степень ядерной модульности, что упрощает добавление в ядро новых компонентов и процесс отладки ядра.
Недостатки: Передача информации требует больших расходов и большого количества времени.
Экзоядро ОС
Такое ядро ОС, которое предоставляет лишь функции взаимодействия процессов, безопасное выделение и распределение ресурсов. Доступ к устройствам на уровне контроллеров позволяет решать задачи, которые нехарактерны для универсальной ОС.
Наноядро ОС
Такое ядро выполняет только единственную задачу- обработку аппаратных прерываний, образуемых устройствами ПК. После обработки наноядро посылает данные о результатах обработки далее идущему в цепи программному обеспечения при помощи той же системы прерываний.
Гибридное ядро ОС
Модификация микроядер, позволяющая для ускорения работы впускать несущественные части в пространство ядра. На архитектуре гибкого ядра построены последние операционные системы от Windows, в том числе и Windows 7-10.
Ядро (операционной системы) — это… Что такое Ядро (операционной системы)?
Примеры: Традиционные ядра BSD), Linux; ядро
Модульное ядро
Модульное ядро — современная, усовершенствованная модификация архитектуры монолитных ядер операционных систем компьютеров.
В отличие от «классических» монолитных ядер, считающихся ныне устаревшими, модульные ядра, как правило, не требуют полной перекомпиляции ядра при изменении состава аппаратного обеспечения компьютера. Вместо этого модульные ядра предоставляют тот или иной механизм подгрузки модулей ядра, поддерживающих то или иное аппаратное обеспечение (например, драйверов). При этом подгрузка модулей может быть как динамической (выполняемой «на лету», без перезагрузки ОС, в работающей системе), так и статической (выполняемой при перезагрузке ОС после переконфигурирования системы на загрузку тех или иных модулей).
Все модули ядра работают в адресном пространстве ядра и могут пользоваться всеми функциями, предоставляемыми ядром. Поэтому модульные ядра продолжают оставаться монолитными. Модульность ядра осуществляется на уровне бинарного образа, а не на архитектурном уровне ядра, так как динамически подгружаемые модули загружаются в адресное пространство ядра и в дальнейшем работают как интегральная часть ядра. Модульные монолитные ядра не следует путать с архитектурным уровнем модульности, присущий микроядрам и гибридным ядрам. Практически, динамичная загрузка модулей, это просто более гибкий способ изменения образа ядра во время выполнения — в отличие от перезагрузки с другим ядром. Модули позволяют легко расширить возможности ядра по мере необходимости.
Модульные ядра удобнее для разработки, чем традиционные монолитные ядра, не поддерживающие динамическую загрузку модулей, так как от разработчика не требуется многократная полная перекомпиляция ядра при работе над какой-либо его подсистемой или драйвером. Выявление, локализация, отладка и устранение ошибок при тестировании также облегчаются.
Модульные ядра предоставляют особый программный интерфейс (API) для связывания модулей с ядром, для обеспечения динамической подгрузки и выгрузки модулей. В свою очередь, не любая программа может быть сделана модулем ядра: на модули ядра накладываются определённые ограничения в части используемых функций (например, они не могут пользоваться функциями стандартной библиотеки С/С++ и должны использовать специальные аналоги, являющиеся функциями API ядра). Кроме того, модули ядра обязаны экспортировать определённые функции, нужные ядру для правильного подключения и распознавания модуля, для его корректной инициализации при загрузке и корректного завершения при выгрузке, для регистрации модуля в таблице модулей ядра и для обращения из ядра к сервисам, предоставляемым модулем.
Не все части ядра могут быть сделаны модулями. Некоторые части ядра всегда обязаны присутствовать в оперативной памяти и должны быть жёстко «вшиты» в ядро. Также не все модули допускают динамическую подгрузку (без перезагрузки ОС). Общей тенденцией развития современных модульных ядер является всё большая модуляризация кода, улучшение механизмов динамической подгрузки и выгрузки, уменьшение или устранение необходимости в ручной подгрузке модулей или в переконфигурации ядра при изменениях аппаратуры путём введения тех или иных механизмов автоматического определения оборудования и автоматической подгрузки нужных модулей, универсализация кода ядра и введение в ядро абстрактных механизмов, предназначенных для совместного использования многими модулями. Примером может служить VFS — «виртуальная файловая система», совместно используемая многими модулями файловых систем в ядре Linux.
Микроядро
Микроядро предоставляет только элементарные функции управления процессами и минимальный набор абстракций для работы с оборудованием. Бо́льшая часть работы осуществляется с помощью специальных пользовательских процессов, называемых сервисами.
Достоинства: Устойчивость к сбоям оборудования, ошибкам в компонентах системы.
Недостатки: Передача данных между процессами требует накладных расходов.
Классические микроядра предоставляют лишь очень небольшой набор низкоуровневых примитивов, или системных вызовов, реализующих базовые сервисы операционной системы.
Сюда относятся:
Все остальные сервисы ОС, в классических монолитных ядрах предоставляемые непосредственно ядром, в микроядерных архитектурах реализуются в адресном пространстве пользователя (Ring3) и называются сервисами. Примерами таких сервисов, выносимых в пространство пользователя в микроядерных архитектурах, являются сетевые сервисы, файловая система, драйверы.
Такая конструкция позволяет улучшить общее быстродействие системы. Современная тенденция в разработке операционных систем состоит в перенесении значительной части системного кода на уровень пользователя и одновременной минимизации ядра. Речь идет о подходе к построению ядра, называемом микроядерной архитектурой (microkernel architecture) операционной системы, когда большинство ее составляющих являются самостоятельными программами. В этом случае взаимодействие между ними обеспечивает специальный модуль ядра, называемый микроядром. Микроядро работает в привилегированном режиме и обеспечивает взаимодействие между программами, планирование использования процессора, первичную обработку прерываний, операции ввода-вывода и базовое управление памятью.
Остальные компоненты системы взаимодействуют друг с другом путем передачи сообщений через микроядро.
Основное достоинство микроядерной архитектуры — высокая степень модульности ядра операционной системы. Это существенно упрощает добавление в него новых компонентов. В микроядерной операционной системе можно, не прерывая ее работы, загружать и выгружать новые драйверы, файловые системы и т. д. Существенно упрощается процесс отладки компонентов ядра, так как новая версия драйвера может загружаться без перезапуска всей операционной системы. Компоненты ядра операционной системы ничем принципиально не отличаются от пользовательских программ, поэтому для их отладки можно применять обычные средства. Микроядерная архитектура повышает надежность системы, поскольку ошибка на уровне непривилегированной программы менее опасна, чем отказ на уровне режима ядра.
И чтобы добавить в ОС с микроядром драйвер того или иного устройства, не надо перекомпилировать всё ядро, а надо лишь отдельно откомпилировать этот драйвер и запустить его в пользовательском пространстве.
В то же время микроядерная архитектура операционной системы вносит дополнительные накладные расходы, связанные с передачей сообщений, что отрицательно влияет на производительность. Для того чтобы микроядерная операционная система по скорости не уступала операционным системам на базе монолитного ядра, требуется очень аккуратно проектировать разбиение системы на компоненты, стараясь минимизировать взаимодействие между ними. Таким образом, основная сложность при создании микроядерных операционных систем — необходимость очень аккуратного проектирования.
Микроядра типа ядра ОС GNU Hurd развиваются медленно, гораздо медленнее, чем BSD, но они обладают огромным потенциалом, то есть заделом на будущее, и, возможно, в этом самом будущем, достигнут аналогичного функционала.
Классическим примером микроядерной системы является Symbian OS. Это пример распространенной и отработанной микроядерной (a начиная c версии Symbian OS v8.1, и наноядерной) операционной системы. B отличие от Windows NT, создателям Symbian OS удалось совместить эффективность и концептуальную стройность, несмотря на то что современные версии этой системы предоставляют обширные возможности, в том числе средства для работы c потоковыми данными, стеками протоколов, критичными к латентности ядра, графикой и видео высокого разрешения). Будучи микроядерной операционной системой, Symbian «выносит» практически все прикладные (т.e. выходящие за пределы компетенции ядра) задачи в модули-серверы, функционирующие в пользовательском адресном пространстве.
В ОС Windows NT версий 3.х микроядерная архитектура с сервисным процессом использовалась для подсистемы графики и пользовательского интерфейса. В частности, драйвер графической аппаратуры загружался в контекст сервисного процесса, а не ядра. Начиная с версии 4, от этого отказались, сервисный процесс сохранился только для управления консольными окнами командной строки, а собственно графическая подсистема вместе с драйвером аппаратуры (в том числе трехмерной графики) переместилась в специально обособленный регион ядра ОС.
ОС Windows CE (и созданные на ее основе сборки, такие, как Windows Mobile), будучи практически полностью совместимой (как подмножество) с Windows NT по вызовам и методам программирования приложений, тем не менее полностью отличается от Windows NT по внутренней архитектуре и является микроядерной ОС с выносом всех драйверов устройств, сетевых стеков и графической подсистемы в сервисные процессы.
Сервисные процессы (в принятой в семействе UNIX терминологии: «демоны») активно используются в самых различных ОС для задач типа запуска программ по расписанию (UNIX и Windows NT), ведения журналов событий (UNIX и Windows NT), централизованной проверки паролей и хранения пароля текущего интерактивного пользователя в специально ограниченной области памяти (Windows NT). Тем не менее не следует считать ОС микроядерными только из-за использований такой архитектуры. Решающим критерием «микроядерности» является размещение всех или почти всех драйверов и модулей в сервисных процессах, иногда с явной невозможностью загрузки любых модулей расширения в собственно микроядро, а также разработки таких расширений.
Примеры: Symbian OS; GNU/Hurd и Mac OS X; Windows CE; AIX; ChorusOS ; MorphOS.
Экзоядро
Экзоядро — ядро операционной системы компьютеров, предоставляющее лишь функции для взаимодействия между процессами и безопасного выделения и освобождения ресурсов. Предполагается, что API для прикладных программ будут предоставляться внешними по отношению к ядру библиотеками (откуда и название архитектуры).
Возможность доступа к устройствам на уровне контроллеров позволит эффективней решать некоторые задачи, которые плохо вписываются в рамки универсальной ОС, например реализация СУБД будет иметь доступ к диску на уровне секторов диска, а не файлов и кластеров, что положительно скажется на быстродействии.
Наноядро
Наноядро — архитектура ядра операционной системы компьютеров, в рамках которой крайне упрощённое и минималистичное ядро выполняет лишь одну задачу — обработку аппаратных прерываний, генерируемых устройствами компьютера. После обработки прерываний от аппаратуры наноядро, в свою очередь, посылает информацию о результатах обработки (например, полученные с клавиатуры символы) вышележащему программному обеспечению при помощи того же механизма прерываний. Примером является KeyKOS — самая первая ОС на наноядре. Первая версия вышла ещё в 1983-ем году.
Гибридное ядро
Гибридные ядра это модифицированные микроядра, позволяющие для ускорения работы запускать «несущественные» части в пространстве ядра.
Имеют «гибридные» достоинства и недостатки.
Все рассмотренные подходы к построению операционных систем имеют свои достоинства и недостатки. В большинстве случаев современные операционные системы используют различные комбинации этих подходов. Так, например сейчас, ядро «Linux» представляет собой монолитную систему с отдельными элементами модульного ядра. При компиляции ядра можно разрешить динамическую загрузку и выгрузку очень многих компонентов ядра — так называемых модулей. В момент загрузки модуля его код загружается на уровне системы и связывается с остальной частью ядра. Внутри модуля могут использоваться любые экспортируемые ядром функции.
Существуют варианты ОС Linux были бы частью ядра. Другим примером смешанного подхода может служить возможность запуска операционной системы с монолитным ядром под управлением микроядра. Так устроены 4.4BSD и MkLinux, основанные на микроядре
Наиболее тесно элементы микроядерной архитектуры и элементы монолитного ядра переплетены в ядре Windows NT. Хотя Windows NT часто называют микроядерной операционной системой, это не совсем так. Микроядро NT слишком велико (более 1 Мбайт, кроме того, в ядре системы находится, например, ещё и модуль графического интерфейса), чтобы носить приставку «микро». Компоненты ядра Windows NT располагаются в вытесняемой памяти и взаимодействуют друг с другом путем передачи сообщений, как и положено в микроядерных операционных системах. В то же время все компоненты ядра работают в одном адресном пространстве и активно используют общие структуры данных, что свойственно операционным системам с монолитным ядром. По мнению специалистов Microsoft, причина проста: чисто микроядерный дизайн коммерчески невыгоден, поскольку неэффективен.
Таким образом, Windows NT можно с полным правом назвать гибридной операционной системой.
Смешанное ядро, в принципе, должно объединять преимущества монолитного ядра и микроядра: казалось бы, микроядро и монолитное ядро — крайности, а смешанное — золотая середина. В них возможно добавлять драйвера устройств двумя способами: и внутрь ядра, и в пользовательское пространство. Но на практике концепция смешанного ядра часто подчёркивает не только достоинства, но и недостатки обоих типов ядер.
Примеры: Windows NT, DragonFlyBSD.
Ссылки
Литература
- Роберт Лав Разработка ядра Linux = Linux Kernel Development. — 2-е изд. — М.: «Вильямс», 2006. — С. 448. — ISBN 0-672-32720-1
Ядро операционной системы, windows, архитектура ядра и типы ядер
Содержание лекции:
- определение ядро операционной системы
- архитектура и типы ядер операционной системы
- ядро операционной системы WINDOWS
Ядро операционной системы определение
Ядро (kernel) это центральная и главная часть операционной системы которая обеспечивает архитектуру связи с приложениями, организует и регулирует доступ к ресурсам компьютера. Дополнительно, но не как правило предоставляет доступ к сетевым протоколам и к файловой системе. На картинке ниже я покажу как схематично работает ядро операционной системы и другие структуры внутри ОС
Посмотрите внимательно на эту схему, на ней видно что ядро операционной системы, взаимодействует с приложениями пользователя, будь то любое программное обеспечение (перечислять все возможные программы мы не будем), с утилитами и с системными обрабатывающими программами. Обратите внимание что из всех изображенных элементов только библиотеки процедур не взаимодействуют напрямую, а являются «переправой» для взаимодействия пользователя с ядром.
архитектура и типы ядер операционной системы
Классическая архитектура ядра очень сильно зависит от того какой тип ядра представлен в операционной системе. Типов ядер операционной системы бывает очень много и все различаются лишь по размеру и доступным функциям кроме базовых.
Монолитное ядро
монолитное ядро операционной системы представляет богатый выбор абстракций. все части или лучше сказать элементы находятся в одном адресном пространстве и представляют собой единый «Монолит». Все элементы которые были представлены выше на картинке спокойно взаимодействуют между собой и сообщаются. Это самое старое воплощение ядра в ОС.
Недостаток:
Обладает достаточно значимым минусом что при отказе работы одного элемента перестает работать всё ядро операционной системы и следовательно ОС.
Преимущества:
Из положительного момента — быстрая разработка и внедрение новых модулей а также скорость работы такого ядра. всё таки унификация всех элементов берет своё
Примеры ОС построенных на таких ядрах :LINUX, Unix, ms-dos
Модульное ядро
Модульное уже более современная реализация типа работы ядра операционной системы . Модульное ядро в отличие от монолитного, бывает двух видов статичное и динамическое. Статичное работает как и монолитное, все изменения только после перезапуска, а динамическая заключается в следующем — при разработке
ядра операционной системы не нужно перезагружать всю систему, а только ту часть которая подверглась каким либо изменениям. Для пользователя это выражается в том что после установки, например драйвера для новой видеокарты не нужно перезагружать систему, после установки перезагрузится только тот модуль что работает с этим новым драйвером, как говориться на лету.
Микроядро
Микроядро работает по принципу всё что сложнее элементарных функций — выноситься за пределы его работы. Наибольшая часть работы выполняется с помощью сервисов или по другому пользовательских процессов.
драйверы и модули, всё находиться в серверных процессах. Чтобы было понятно взгляните на картинку
Самые главные преимущества то что при любой сбой системы или например обновление ядра, не может нанести ущерба и это можно делать раздельно. Также намного проще позволяет добавлять новые элементы не прерывая работы системы.
Недостатки: увеличенное потребление ресурсов.
Из самых популярных операционных систем которое используют это
ядро операционной системы это MAC OS X.
Экзоядро
Экзоядро представляет всего лишь самые базовые функция взаимодействия между процессами, выгрузка и загрузка памяти и других ресурсов. То есть устроенно это ядро таким образом — ядро операционной системы не взаимодействует с программным обеспечением напрямую, а только через специальные библиотеки которые предоставляют API. Является оптимальным решениям для некоторого вида приложений которые должны очень быстро работать.
Ядро операционной системы WINDOWS
Вы спросите а к какому типу архитектуры тогда относиться операционная система windows?
относиться она к гибридному типу включая в себя как и микроядро так и монолитное
ядро операционной системы
Помогая проекту BEST-EXAM, вы делаете образование более доступным для каждого человека, внесите и вы свой вклад —
поделитесь этой статьей в социальных сетях!
Презентация к уроку: Типы архитектур ядер операционных систем
Слайд 1
Типы архитектур ядер операционных систем 1
Слайд 2
Типы архитектектур ядер ОС Монолитное Модульное Микроядро Экзоядро Наноядро 2
Слайд 3
Монолитное ядро Все части монолитного ядра работают в одном адресном пространстве. Это такая схема операционной системы, при которой все компоненты её ядра являются составными частями одной программы, используют общие структуры данных и взаимодействуют друг с другом путём непосредственного вызова процедур . Монолитное ядро — старейший способ организации операционных систем 3
Слайд 4
Монолитное ядро Достоинства Скорость работы (производительность) упрощённая разработка модулей Недостатки Поскольку всё ядро работает в одном адресном пространстве, сбой в одном из компонентов может нарушить работоспособность всей системы 4
Слайд 5
Монолитное ядро Монолитность ядер усложняет : их отладку, понимание кода ядра, добавление новых функций и возможностей, удаление «мёртвого», ненужного, унаследованного от предыдущих версий кода . 5
Слайд 6
Монолитное ядро Увеличение объема кода монолитных ядер также повышает требования к объёму оперативной памяти, требуемому для функционирования ядра ОС. = > малопригодны к эксплуатации в системах, сильно ограниченных по объёму ОЗУ (в основном на производстве) 6
Слайд 7
Монолитное ядро. Примеры BSD MS-DOS KolibriOS 7
Слайд 8
Модульное ядро Модульное ядро — современная, усовершенствованная модификация архитектуры монолитных ядер операционных систем М одульные ядра, как правило, не требуют полной перекомпиляции ядра при изменении состава аппаратного обеспечения компьютера (по сравнению с монолитным ядром) 8
Слайд 9
Модульное ядро ОС разбивается на ряд уровней (слоев), каждый последующий базируется на предыдущем: Самый нижний уровень – это аппаратное обеспечение Самый верхний уровень – это интерфейс пользователя 9
Слайд 10
Модульное ядро предоставляют подгрузки модулей ядра, поддерживающих то или иное аппаратное обеспечение (например, драйверов ) Подгрузка модулей Статическая Динамическая 10
Слайд 11
Модульное ядро Все модули ядра работают в адресном пространстве ядра и могут пользоваться всеми функциями, предоставляемыми ядром Поэтому модульные ядра продолжают оставаться монолитными . Практически, динамичная загрузка модулей, это просто более гибкий способ изменения образа ядра во время выполнения 11
Слайд 12
Модульное ядро Модульные ядра удобнее для разработки Выявление, локализация, отладка и устранение ошибок при тестировании также облегчаются 12
Слайд 13
Модульное ядро. Примеры Linux Unix 13
Слайд 14
Микроядро Решающим критерием « микроядерности » является размещение всех или почти всех драйверов и модулей в сервисных процессах, иногда с явной невозможностью загрузки любых модулей расширения в собственно микроядро, а также разработки таких расширений Микроядро – небольшая часть ОС, работающая в привилегированном режиме. Микроядро защищено от остальных частей ОС и приложений 14
Слайд 15
15
Слайд 16
Микроядро. Достоинства Устойчивость к сбоям оборудования, ошибкам в компонентах системы высокая степень модульности ядра операционной системы ( упрощает добавление в него новых компонентов, процесс отладки компонентов ядра ) Компоненты ядра операционной системы ничем принципиально не отличаются от пользовательских программ, поэтому для их отладки можно применять обычные средства Микроядерная архитектура повышает надежность системы, поскольку ошибка на уровне непривилегированной программы менее опасна, чем отказ на уровне режима ядра 16
Слайд 17
Микроядро. Недостатки Передача данных между процессами требует накладных расходов. Классические микроядра предоставляют лишь очень небольшой набор низкоуровневых примитивов, или системных вызовов, реализующих базовые сервисы операционной системы 17
Слайд 18
Микроядро. Примеры Windows NT Symbian OS AmigaOS 18
Слайд 19
Экзо ядро Экзоядро — ядро операционной системы, предоставляющее лишь функции для взаимодействия между процессами и безопасного выделения и освобождения ресурсов 19
Слайд 20
Экзо ядро В традиционных операционных системах ядро предоставляет не только минимальный набор сервисов, обеспечивающих выполнение программ, но и большое количество абстракций для использования разнородных ресурсов компьютера: оперативной памяти, жестких дисков, сетевых подключений. В отличие от них, ОС на основе экзоядра предоставляет лишь набор сервисов для взаимодействия между приложениями, а также необходимый минимум функций, связанных с защитой: выделение и высвобождение ресурсов, контроль прав доступа, и т. д. Экзоядро не занимается предоставлением абстракций для физических ресурсов — эти функции выносятся в библиотеку пользовательского уровня (так называемую libOS ). 20
Слайд 21
Экзо ядро 21
Слайд 22
Экзоядро . Примеры Домашнее задание 22
Слайд 23
Наноядро Наноядро — архитектура ядра операционной системы, в рамках которой крайне упрощённое и минималистичное ядро выполняет лишь одну задачу — обработку аппаратных прерываний, генерируемых устройствами компьютера После обработки прерываний от аппаратуры наноядро , в свою очередь, посылает информацию о результатах обработки (например, полученные с клавиатуры символы) вышележащему программному обеспечению при помощи того же механизма прерываний 23
Слайд 24
Наноядро . Пример Домашнее задание 24
Архитектура ядра Windows NT | Открытые системы. СУБД
NT задумывалась как распределенная, клиент-серверная ОС, поддерживающая симметричные многопроцессорные аппаратные платформы. Сегодня разработчики наносят завершающие штрихи в своем новом творении — Windows NT 5.0 [оригинальная статья была опубликована в IEEE Computer до того, как Microsoft объявила новое название своей ОС — Windows 2000 — Прим. перев.], однако теперь, почти десять лет спустя, когда компания вносит завершающие штрихи в свое творение, можно с уверенностью сказать, что фундаментальные основы архитектуры NT в версии 5.0 не были изменены.
Кроме того, от NT требовалась, совместимость со стандартом POSIX 1003.1, поддержка Unicode для адаптации к требованиям мирового рынка, выполнение большинство существующих 16-разрядных приложений для MS-DOS и Windows 3.х. Разработчики должны были обеспечить переносимость, надежность, совместимость «снизу-вверх», высокую производительность и возможность расширения в соответствии с меняющимися требованиями рынка. Сегодня, почти десять лет спустя, можно с уверенностью сказать, что фундаментальные основы архитектуры NT в версии 5.0 не были изменены. Да, были добавлены новые операционные и сетевые возможности, однако, ядро не было переписано, а лишь расширено. Попытаемся в данной статье дать краткий обзор архитектуры Windows NT 5.0, рассмотрев такие ее черты как plug-and-play, объекты «Задание», поддержка непосредственно адресуемой большой памяти (подробную информацию о NT 5.0 и ее новых чертах можно найти по адресу http://www.microsoft.com/windowsnt5).
Архитектура системы
На рис. 1 приведена общая архитектура Windows NT и ее компонентов. Элементы над разделительной линией представляют собой процессы пользовательского режима, а под ней располагаются процессы операционной системы, выполняемые ядром. Потоки пользовательского режима выполняются в защищенном адресном пространстве. Однако, во время их выполнения в режиме ядра, они получают доступ к системному пространству. Таким образом, системные процессы, процессы сервера (службы), подсистема среды или пользовательское приложение имеют свое собственное адресное пространство.
Режим ядра
Важные для производительности операционной системы компоненты выполняются в режиме ядра, где они взаимодействуют с оборудованием и друг с другом без использования переключателей контекста и смены режимов. Например, менеджер памяти, менеджер кэш-памяти, менеджер объектов, менеджер системы безопасности, сетевые протоколы, файловые системы, управление потоками и процессами работают в режиме ядра. Все эти компоненты полностью защищены от выполняемых приложений, которые не имеют прямого доступа к коду и данным из привилегированной части операционной системы.
Компоненты режима ядра Windows NT спроектированы на основе принципов построения объектно-ориентированных систем. Например, они не работают напрямую со структурами данных, поддерживаемых индивидуальными компонентами. Вместо этого для передачи параметров, доступа и/или модификации структур данных они используют формальный интерфейс. Вместе с тем, несмотря на повсеместное использование объектов для представления разделяемых системных ресурсов, Windows NT не является объектно-ориентированной системой в точном смысле этого понятия, поскольку основная часть кода системы написана на Си из соображений обеспечения высокой скорости выполнения и переносимости.
В режиме ядра выполняются следующие компоненты ОС:
- исполняемая часть NT, которая включает управление памятью, процессами, потоками, безопасностью, вводом/выводом, межпроцессорными обменами;
- ядро Windows NT выполняет низкоуровневые функции операционной системы: диспетчеризация потоков, прерываний и исключений, синхронизация процессоров. Ядро также включает набор процедур и базовых объектов, используемый исполняемой частью для создания высокоуровневых конструкций;
- слой абстракции от оборудования (HAL — Hardware Abstraction Layer), изолирует ядро, драйверы устройств и исполняемую часть NT от аппаратных платформ, на которых должна работать операционная система;
- драйверы устройств включают как файловую систему, так и аппаратные драйверы, которые транслируют пользовательские вызовы функций ввода/вывода в запросы физических устройств ввода/вывода;
- функции графического интерфейса пользователя работают с окнами, элементами управления и рисунками.
Исполняемая часть
Исполняемая часть Windows NT — верхний слой программы — ядра NTOSKRNL.EXE. (Само ядро — это нижний слой). Исполняемая часть содержит следующие компоненты.
- Менеджер процессов и потоков управляет процессами и потоками. Фактически потоки и процессы поддерживаются в NT нижележащим слоем. Исполняемая часть добавляет дополнительную семантику и функции к этим объектам нижнего уровня.
- Менеджер виртуальной памяти использует схему управления, при которой каждый процесс получает собственное достаточно большое адресное пространство, защищенное от воздействия других процессов. Менеджер памяти также обеспечивает низкоуровневую поддержку для менеджера кэш-памяти.
- Монитор безопасности проводит политику обеспечения мер безопасности на локальном компьютере, охраняя системные ресурсы и выполняя процедуры аудита и защиты объектов.
- Система ввода/вывода использует независимый от устройств ввод/вывод и отвечает за пересылку данных соответствующим драйверам для дальнейшей обработки.
- Менеджер кэш-памяти улучшает производительность системы ввода/вывода файлов, размещая читаемые с диска данные в основной памяти для ускорения доступа к ним, а также откладывая на короткое время запись измененных данных на диск.
Кроме того, исполняемая часть включает четыре главных группы функций, используемых только что перечисленными компонентами.
- Менеджер объектов, который создает, удаляет объекты и абстрактные типы данных, а также управляет ими. Объекты используются в Windows NT для представления таких ресурсов операционной системы, как процессы, потоки и объекты синхронизации.
- LPC передает сообщения между клиентским процессом и процессом сервера на том же самом компьютере. По сути, LPC — это оптимизированная версия известной процедуры удаленного вызова RPC (Remote Procedure Call), стандарта для организации взаимодействия процессов в архитектуре клиент/сервер.
- Широкий набор библиотечных функций общего типа: обработка строк, арифметические операции, преобразование типов данных, обработка структур.
- Процедуры распределения памяти, взаимообмен между процессами через память, два специальных типа объектов синхронизации — ресурсы и объекты fast mutex.
Ядро
Ядро NTOSKRNL.EXE выполняет большинство основных операций NT, определяющих порядок использования процессора: диспетчеризация потоков; диспетчеризация и обработка исключений; cинхронизация работы процессоров; обеспечение базовых объектов ядра, которые используются исполняемой частью (и в некоторых случаях экспортируются в режим пользователя).
В отличие от остальной исполняемой части операционной системы, ядро никогда не выгружается из оперативной памяти, его выполнение никогда не прерывается другими потоками. Код ядра написан в основном на Си, а части, дающие наибольшую нагрузку на процессор, на языке Ассемблере.
Объекты ядра. Одна из функций ядра — обеспечение низкоуровневой базы для хорошо определенных примитивов операционной системы, которые обеспечивают работу компонентов высшего уровня. Ядро изолирует само себя от остальной части ОС, что позволяет вынести принятие политических решений из ядра, за исключением диспетчеризации потоков. Ядро использует набор простейших объектов, называемых объектами ядра, позволяющих управлять работой центрального процессора и порядком создания вычисляемых объектов. Большинство вычисляемых объектов включает в себя один или более объектов ядра, включая определенные ядром атрибуты. Один из наборов объектов называется объектами управления и включает объект процесса ядра, объект АРС, объект процедуры отложенного вызова DPC (Deferred Procedure Call) и несколько объектов, используемых системой ввода/вывода (например, объект обработки прерывания).
Другой набор объектов ядра — объекты диспетчеризации, включает объекты синхронизации потоков, поток ядра, mutex, объекты события, семафора, таймера, таймера ожидания и ряд других.
Поддержка оборудования. Другой главнейшей задачей ядра является абстрагирование (или изоляция) исполняемой части и драйверов устройств от различий микропроцессорных платформ, на которых способна работать Windows NT: х86 и Alpha AXP. Специфичные для архитектуры функции (такие, как контекстное переключение потока) реализованы в ядре. Функции, которые могут отличаться от машины к машине, реализованы в составе HAL.
Ядро поддерживает набор интерфейсов, семантически идентичных для всех архитектур. Некоторые из интерфейсов реализованы по-разному для разных архитектур, однако, и идентичны внешне интерфейсы реализованы с помощью специфичного для архитектуры кода. Независимый от архитектуры интерфейс может быть вызван на любой машине, и его семантика будет той же, несмотря на то, зависит ли код от архитектуры или нет. Некоторые интерфейсы ядра (например, процедуры синхронизации SMP) реализованы в HAL, поскольку их реализация может изменяться даже внутри одного семейства компьютеров. В качестве примера зависящего от архитектуры кода можно назвать также поддержку кэша центрального процессора.
Абстракция от оборудования
Загружаемый модуль ядра HAL обеспечивает низкоуровневый интерфейс с аппаратной платформой, что позволяет скрыть такие зависимые от аппаратуры детали, как интерфейс ввода/вывода, контроллеры прерываний, механизм обмена данными между процессорами — любые аппаратно-зависимые и специфические для архитектуры функции.
Драйверы устройств. Драйверы устройств — это загружаемые модули, которые работают в режиме ядра, обеспечивая интерфейс между системой ввода/ вывода и соответствующим оборудованием. Названия этих модулей обычно имеют расширение .SYS. Все они, как правило, написаны на Си (иногда С++) с использованием вызовов процедур HAL и могут быть переносимыми на уровне двоичного кода между платформами, поддерживаемыми NT. Имеется несколько типов драйверов устройств:
- Драйверы, манипулирующие устройствами (с использованием HAL) для записи выходных данных или получения входных данных от физических устройств или через сеть.
- Драйверы файловой системы, которые принимают запросы на файловый ввод/вывод и транслируют их в запросы ввода/вывода, связанные с конкретными устройствами.
- Драйверы фильтров. Примером могут быть драйверы поддержки зеркальных дисков, шифрования данных, перехвата ввода/вывода для дополнительной обработки данных перед передачей их на следующий уровень и т.д.
- Сетевые драйверы, которые передают и принимают удаленные запросы на ввод/вывод.
Поскольку установка драйверов устройств является единственным способом добавить к системе пользовательский код, работающий в режиме ядра, то некоторые программисты могут рассматривать написание драйверов устройств как способ доступа к внутренним функциям и структурам данных операционной системы, недоступным из пользовательского режима.
Пользовательские процессы
Имеется четыре базовых типа пользовательских процессов.
- Специальные процессы поддержки системы, например, процесс регистрации пользователя и менеджер сессий, которые не являются службами NT.
- Процессы сервера, которые являются службами NT (аналог демонов в ОС Unix). Примером может быть регистратор событий (Event Logger). Многие дополнительно устанавливаемые приложения, такие как Microsoft SQL Server и Exchange Server, также включают компоненты, работающие как службы NT.
- Подсистемы среды, которые обеспечивают пользовательским приложениям среду других операционных систем. Windows NT поставляется с тремя подсистемами: Win32, Posix и OS/2 2.1.
- Пользовательские приложения одного из пяти типов: Win32, Windows 3.1, MS-DOS, Posix или OS/2 1.2.
Подсистемы среды и библиотеки DLL
Как видно из рис. 1, Windows NT имеет три подсистемы среды (Win32, Posix и OS/2 2.1), которые работают только на платформе х86. Подсистема Win32 специфична для Windows NT и не может работать вне нее.
Каждая из подсистем обеспечивает пользовательским приложениям доступ к разным поднаборам служб Windows NT. Это означает, что некоторые вещи могут быть сделаны из приложения, построенного на одной подсистеме, и не возможны из приложения, построенного в другой подсистеме. Так, приложение для Win32 не может использовать функцию fork подсистемы Posix.
Каждый исполняемый модуль связывается с одной и только одной подсистемой. Когда начинается выполнение модуля, изучается тип кода его заголовка, что позволяет определить подсистему среды для создания новых процессов.
Пользовательские процессы не вызывают службы NT напрямую, а используют библиотеки динамических связей (DLL) соответствующей подсистемы среды. Роль библиотек, принадлежащих подсистеме среды, в том, чтобы транслировать документированные функции среды в соответствующие вызовы недокументированных служб NT. Эти библиотеки DLL экспортируют документированный интерфейс, который могут вызывать связанные с подсистемой программы. Например, библиотеки DLL подсистемы Win32 используют функции Win32 API. Библиотека DLL подсистемы Posix использует функции Posix 1003.1 API.
Подсистема Win32. Главные компоненты подсистемы Win32 — процесс подсистемы среды и драйвер режима ядра. Процесс подсистемы среды поддерживает:
- консольные (текстовые) окна;
- создание и удаление процессов и потоков;
- работу виртуальной 16-разрядной DOS машины;
- иные функции (GetTempFile, DefineDosDevice, ExitWindowsEx и др.).
Драйвер режима ядра поддерживает:
- менеджер окон, который управляет отображением окон, выводом на экран, вводом с клавиатуры, от мыши и других устройств, а также передачей пользовательских сообщений приложениям;
- интерфейс графических устройств GDI (Graphical Device Interface), библиотека функций для вывода на графические устройства, для рисования текста, линий, фигур и манипуляций графическими объектами;
- зависимые от устройств драйверы графики, принтера и видеопорта;
- несколько библиотек DLL, которые транслируют документированные функции Win32 API в соответствующие недокументированные вызовы NTOSKRNL.EXE и WIN32K.SYS.
Приложения вызывают стандартные функции для создания окон и кнопок на дисплее. Менеджер окон передает эти запросы драйверам графических устройств через интерфейс графических устройств GDI, где они форматируются для вывода средствами конкретных устройств. GDI обеспечивает набор стандартных функций, позволяющих приложениям общаться с графическими устройствами, включая дисплеи и принтеры, без конкретных знаний о них. GDI интерпретирует запросы приложений на графический вывод и посылает их драйверам графических дисплеев. Этот интерфейс позволяет создавать код приложения, независимый от конкретных устройств и их драйверов.
NTDLL.DLL — это специальная система поддержки DLL — библиотек. Она содержит два типа функций.
- Первая группа функций обеспечивает интерфейс к службам NT, которые могут быть вызваны из пользовательского режима. Существует более 200 таких функций, например NtCreateFile, NtSetEvent и т.д. Для каждой из них имеется точка входа в NTDLL.DLL с тем же именем. Внутренний код функции содержит специфичные для архитектуры команды, которые вызывают переход в режим ядра для обращения к реальным службам NT, код которых содержится в NTOSKRNL.EXE.
- Вторая группа функций содержит большое количество функций поддержки: загрузчик исполняемых модулей, коммуникационные функции для процессов подсистемы Win32, библиотека функций реального времени пользовательского режима, диспетчер вызовов асинхронных процедур АРС (Asynchronous Procedure Call) пользовательского режима, диспетчер исключений.
Новые черты ядра NT 5.0
Несмотря на декларируемую расширяемость архитектуры Windows NT, некоторые нововведения в NT 5.0 (plug-and-play, управление электропитанием, объекты «Задание», управление большой памятью для компьютеров Alpha) повлекли, тем не менее, серьезные структурные изменения в архитектуре ядра.
Plug-and-play
Технология Plug-and-play (PnP) поддерживается комбинацией аппаратного и программного обеспечения, позволяющей распознавать и настраивать аппаратные изменения в конфигурации почти без вмешательства пользователя. Можно динамично добавлять и удалять устройства без необходимости реконфигурации системы и знания сложного компьютерного оборудования.
Эволюция PnP. Впервые концепция PnP была реализована в ОС Windows 95, но с того времени эта технология получила существенное развитие в плане управления системой, конфигурирования устройств и управления энергопотреблением, особенно благодаря инициативной проектной группе OnNow. Одним из результатов работы этой группы стала спецификация ACPI (Advanced Configuration and Power Interface) версии 1.0, определившая новый дизайн материнских плат и BIOS, обеспечивающий управление энергопотреблением и новые конфигурационные возможности под полным управлением операционной системы.
Методы распознавания оборудования, определенные спецификацией ACPI, не зависят от операционной системы или типа центрального процессора. ACPI определяет интерфейс функций PnP и управления энергопотреблением на уровне регистров и дает описательный интерфейс для новых возможностей оборудования. Это позволяет проектировщикам создавать широкий диапазон новых устройств с использованием тех же драйверов операционной системы. ACPI обеспечивает также типовой, базирующийся на системных событиях механизм управления PnP и управления энергопотреблением.
Реализация в Windows NT 5.0. При проектировании архитектуры PnP в Windows NT 5.0 ставились две основные цели:
- расширение существующей инфраструктуры ввода/вывода для поддержки PnP и управления энергопотреблением для работы с оборудованием по стандартам PnP;
- создание единых интерфейсов для драйверов устройств, поддерживающих PnP и управление энергопотреблением, для классов устройств, работающих под Windows NT 5.0 и Windows 98.
Поддержка PnP в NT 5.0 включает начальную инсталляцию системы, распознавание изменений оборудования произошедших между отдельными загрузками системы, отклик системы на такие события времени исполнения, как подключение/отключение ноутбука компьютера к док-станции, подсоединение/отсоединение периферийных устройств.
Драйверы PnP не назначают устройствам собственные ресурсы. Вместо этого требуемые ресурсы идентифицируются системой во время распознавания устройств. Основываясь на запросах устройств на ресурсы, диспетчер PnP назначает соответствующие аппаратные ресурсы (например, порты ввода/вывода, каналы DMA и т.д.), распределяет память. Диспетчер PnP реконфигурирует назначенные ресурсы по необходимости, когда устройства добавляются к системе и запрашивают уже распределенные ресурсы. Кроме того, диспетчер PnP определяет, какие драйверы требуются для поддержки конкретных устройств, и загружает эти драйверы.
Одна из ключевых черт PnP и системы управления энергопотреблением — это динамическая обработка событий. Примерами таких событий могут быть добавление или удаление устройств, включение/выключение режима пониженного энергопотребления. PnP и система управления энергопотреблением, используя функции WDM, обрабатывают динамические события сходным образом.
Изменения в драйверах. Поддержка PnP в Windows NT 5.0 потребовала внести ряд изменений в ранее разработанную модель драйверов Windows NT:
Драйверы шины отделены от HAL для координации с изменениями и расширениями существующих компонентов режима ядра (исполняемая часть, драйверы ядра, HAL). Драйверы шины управляют шиной ввода/вывода, включая управление отдельными слотами, независимыми от устройств.
Новые методы и возможности для поддержки установки устройств и конфигурации потребовали изменения таких существующих компонентов режима пользователя, как диспетчер буфера вывода, установщики классов, приложений Control Panel, Setup. Добавлены новые компоненты для поддержки PnP как в режиме ядра, так и в режиме пользователя.
Добавлены интерфейсы PnP API для чтения и записи информации из реестра (registry). Теперь структура регистра поддерживает PnP и позволяет вносить совершенствования в будущих версиях NT, в то же время обеспечивая совместимость снизу вверх.
Windows NT 5.0 будет поддерживать унаследованные драйверы, но их использование уменьшит возможности системы в области поддержки PnP. Производителям, желающим реализовать полные возможности PnP для своего оборудования и использовать одни и те же драйверы под NT и Windows 98, необходимо разработать новые драйверы, интегрирующие последние достижения технологии PnP и управления энергопотреблением.
Объект «Задание»
Windows NT 5.0 включает расширение модели процессов. «Задание» — это поименованный, безопасный, разделяемый объект, управляющий некоторыми атрибутами процессов. Его главная задача — управлять и манипулировать группой процессов как самостоятельной единицей. В ряде случаев этот объект компенсирует отсутствие в NT структурированного дерева процессов. Объект «Задание» также записывает базовую учетную информацию обо всех процессах, ассоциированных с ним, и позволяет накладывать на связанные с ним процессы: ограничения на время использования процессора в режиме пользователя; ограничение на время использования процессора в режиме пользователя каждым из процессов; максимальное число активных процессов; класс приоритета процесса «Задание».
Задания могут быть выстроены в очередь к объекту «Порт» для завершения операций ввода/вывода. Могут быть заданы границы безопасности на процессы в задании. В завершение всего, могут быть определены ограничения на пользовательские интерфейсы для процессов, например, на операции чтения и/или записи в clipboard, открытия принадлежащих потоку обработчиков окон за пределами «Задания», изменения параметров системы через функцию Win32 SystemParametersInfo.
Управление памятью большой емкости
В Windows NT 5.0 добавлено расширение VLM (Very Large Memory), позволяющее непосредственно адресовать 28 Гбайт оперативной памяти компьютеров на платформе Alpha. Сейчас VLM не предназначается для семейства процессоров х86, но в Microsoft готовят единую 64-разрядную версию NT для платформ Alpha AXP и будущей архитектуры Intel IA-64.
В NT 4.0 поддерживалась 64-разрядная адресация в операциях ввода/вывода, но каждый процесс все же ограничивался использованием 2-гигабайтного пространства (3 Гбайт для Windows NT Server Enterprise Edition). В 1997 году Microsoft объявила о своем намерении создать полную 64-разрядную версию NT, имея в виду, что каждый 64-разрядный процесс будет наделен адресным пространством по крайней мере в 512 Гбайт. Причина перехода к 64-разрядной платформе та же, что и для перехода от 16-разрядных систем к 32-разрядным — это постоянно возрастающие требования к хранению и обработке огромных объемов данных в памяти компьютеров.
VLM позволяет использовать в приложениях 64-разрядные указатели, получая, таким образом, прямой доступ к адресному пространству свыше 2 Гбайт. Это необходимо для удовлетворения нужд приложений, работающих с большими объемами информации (например, СУБД), для которых ограничение адресного пространства цифрой 2-3 Гбайт неприемлемо. Для адресации 28 Гбайт памяти и использования 64-разрядных указателей на системах Alpha в версию языка Visual C++ 5.0 добавлены указатели _ptr64 и небольшой набор новых интерфейсов Win32 API для работы с ними. В 64-разрядной версии NT будет использоваться программный интерфейс Win64, обеспечивающий перенос приложений с Win32 и компиляцию исходного кода в двоичный как в 32-разрядном, так и в 64-разрядном режимах. Предполагается, что «младший» режим будет использоваться для выполнения существующих 32-разрядных приложений на платформах Alpha и Merced, а новые 64-разрядные приложения будут выполняться уже в «родном» 64-разрядном режиме. Однако одновременная смесь двух режимов в одном процессе допускаться не будет.
Пока же VLM содержит существенное ограничение на виртуальные адреса при работе с 64-разрядными указателями: такие адреса должны быть поддержаны зарезервированной физической памятью — другими словами, вся подразумеваемая память должна быть обеспечена физической памятью, доступной в момент адресации. Недостающие страницы памяти никогда не берутся по адресам VLM, если эти адреса не используются для отражения реального файла данных. Каждая страница будет отсутствовать только один раз при первом обращении, затем она блокируется в памяти и никогда не удаляется. Несмотря на это ограничение, VLM отвечает потребностям приложений, которые требуют быстрого доступа к большим порциям памяти.
Резюме
Архитектура Windows NT отражает современные представления о дизайне 32-разрядной операционной системы, а версия Windows NT 5.0 удовлетворяет постоянно меняющимся требованиям, предъявляемым к операционной системе для настольных систем и рабочих станций. Эта версия также может работать с высокоуровневыми серверными приложениями.
David A. Solomon, The Windows NT Kernel Architecture. IEEE Computer, October 1998, pp. 40-47. Reprinted with Permission, Copyright IEEE CS, 1998. All rights reserved.
Об авторе
Дэвид Соломон — руководитель David Solomon Expert Seminars, семинаров для преподавателей по структуре Windows NT и системному программированию. Автор книг Inside Windows NT (Microsoft Press) и Windows NT for OpenVMS Professionals (Digital Press/Butterworth Heinemann). Начав свою трудовую карьеру как консультант по программному обеспечению в корпорации Digital Equipment, затем девять лет работал в качестве руководителя проекта в группе разработчиков ОС VMS. Соломон является также техническим руководителем ряда конференций по Windows NT.
Активный каталог
Одной из наиболее важных новых черт Windows NT 5.0 является активный каталог (Active Directory), призванный упростить администрирование больших сетей на NT. Активный каталог играет ключевую роль в улучшении безопасности распределенных систем.
В данном каталоге хранится информация обо всех ресурсах сети и, через простой интерфейс, обеспечивается доступ и использование этой информации для разработчиков, администраторов и пользователей. Модель данных активного каталога имеет много общего с концепцией X.500 — здесь содержатся объекты, представляющие различные ресурсы, описываемые атрибутами. Список объектов и атрибутов для каждого класса объектов определяется схемой. Структура активного каталога имеет следующие ключевые свойства:
- гибкая иерархическая структура;
- расширяемая память для новых классов объектов и их атрибутов;
- частичное делегирование прав доступа;
- поддержка протокола LDAP версии 3;
- встроенный сервер имен DNS;
- масштабируемость до миллионов объектов;
- программируемая память для классов.
Программируемость и расширяемость — важные свойства активного каталога, поскольку-независимо от установленных служб разработчики и администраторы имеют дело с простым набором интерфейсов. Программируемый интерфейс ADSI (Active Directory Service Interface) доступен из любого языка программирования. Для программистов на языке Си активный каталог доступен также через низкоуровневый API-интерфейс LDAP.
Система безопасности распределенных систем
Система безопасности распределенных систем Windows NT 5.0 имеет много новых черт, упрощающих администрирование узлов, повышающих производительность и включает интегрированную технологию Internet c кодированием ключей доступа.
Активный каталог обеспечивает запоминание учетной информации для всех узлов, доступных для удаленного администрирования. Поддерживается многоуровневое иерархическое дерево для хранения имен пользователей, групп и учетной информации по машине. Учетные номера могут быть сгруппированы, в отличие от предыдущих версий, в организационные единицы. Управление разрешенными взаимосвязями между узлами сети упрощается благодаря дереву доменов. Права администраторов по созданию и управлению пользователями и группами могут быть делегированы на уровень организационных единиц. Правами доступа могут быть наделены индивидуальные пользовательские объекты, чтобы, например, разрешить переустановку пароля, но без права изменения другой учетной информации.
Windows NT 5.0 имеет новую систему аутентификации пользователей, основанную на стандартных протоколах безопасности Internet, включая версию Kerberos 5.0 и TLS (Transport Layer Protocol), а также поддержку протоколов NT LAN Manager для целей совместимости. Протоколы безопасности поддерживают работу с удостоверениями личности пользователей в форме сертификатов открытых ключей к существующим учетным номерам Windows NT. Для управления доступом и учетной информацией используется общий инструмент администрирования. Для организаций, выпускающих сертификаты Х.509 версии 3 в Windows NT предлагается Microsoft Certificate Server. В системе вводится управление сертификатами CryptoAPI и модули для обработки сертификатов общественных ключей, включая сертификаты стандартного формата, выпущенные службой коммерческих сертификатов, третьей стороной, либо Microsoft Certificate Server.
Поделитесь материалом с коллегами и друзьями
Анатомия ядра Linux — IBM Developer
Учитывая, что цель этой статьи — познакомить вас с ядром Linux и изучить его архитектуру и основные компоненты, давайте начнем с краткого обзора истории ядра Linux, а затем посмотрим на Linux. архитектура ядра с высоты 30 000 футов и, наконец, исследуем его основные подсистемы. Ядро Linux состоит из более шести миллионов строк кода, поэтому это введение не является исчерпывающим. Используйте указатели на дополнительный контент, чтобы копать дальше.
Краткий обзор истории Linux
Linux или GNU / Linux?
Вы, наверное, заметили, что Linux как операционная система упоминается в некоторых случаях как «Linux», а в других как «GNU / Linux.Причина этого в том, что Linux — это ядро операционной системы. Широкий спектр приложений, которые делают операционную систему полезной, — это программа GNU . Например, оконная система, компилятор, различные оболочки, инструменты разработки, редакторы, утилиты и другие приложения существуют за пределами ядра , многие из которых являются программным обеспечением GNU . По этой причине многие считают «GNU / Linux» более подходящим названием для операционной системы, в то время как «Linux» подходит только для обозначения ядра .
Хотя Linux, пожалуй, самая популярная операционная система с открытым исходным кодом, ее история на самом деле довольно коротка, учитывая временные рамки операционных систем. На заре компьютерных технологий программисты разрабатывали аппаратные средства на его языке. Отсутствие операционной системы означало, что только одно приложение (и один пользователь) могло одновременно использовать большое и дорогое устройство. Ранние операционные системы были разработаны в 1950-х годах, чтобы упростить процесс разработки. Примеры включают операционную систему General Motors (GMOS), разработанную для IBM 701, и систему мониторинга FORTRAN (FMS), разработанную North American Aviation для IBM 709.
В 1960-х годах Массачусетский технологический институт (MIT) и множество компаний разработали экспериментальную операционную систему под названием Multics (или Multiplexed Information and Computing Service) для GE-645. Один из разработчиков этой операционной системы, AT&T, отказался от Multics и в 1970 году разработал собственную операционную систему под названием Unics. Наряду с этой операционной системой был язык C, для которого C был разработан, а затем переписан, чтобы сделать разработку операционной системы переносимой.
Двадцать лет спустя Эндрю Таненбаум создал микроядерную версию UNIX®, названную MINIX (от минимального UNIX), которая работала на небольших персональных компьютерах. Эта операционная система с открытым исходным кодом вдохновила Линуса Торвальдса на первоначальную разработку Linux в начале 1990-х годов (см. Рисунок 1).
Рис. 1. Краткая история основных выпусков ядра Linux
Linux быстро превратился из проекта, выполняемого одним человеком, в проект разработки, охватывающий тысячи разработчиков. Одним из наиболее важных решений для Linux стало принятие Стандартной общественной лицензии GNU (GPL).В соответствии с GPL ядро Linux было защищено от коммерческого использования, и оно также получило выгоду от разработки в пользовательском пространстве проекта GNU (Ричарда Столлмана, исходный код которого превосходит исходный код ядра Linux). Это позволило использовать полезные приложения, такие как сборник компиляторов GNU (GCC) и поддержку различных командных интерпретаторов.
Введение в ядро Linux
А теперь давайте рассмотрим архитектуру операционной системы GNU / Linux. Вы можете рассматривать операционную систему с двух уровней, как показано на рисунке 2.
Рисунок 2. Фундаментальная архитектура операционной системы GNU / Linux
Методы интерфейса системных вызовов (SCI)
На самом деле архитектура не так чиста, как показано на рисунке 2. Например, механизм способ обработки системных вызовов (переход из пользовательского пространства в пространство ядра) может различаться в зависимости от архитектуры. Новые центральные процессоры (ЦП) x86, которые обеспечивают поддержку инструкций виртуализации, более эффективны в этом процессе, чем старые процессоры x86, которые используют традиционный метод int 80h.
Вверху находится пользователь или приложение. Здесь выполняются пользовательские приложения. Под пользовательским пространством находится пространство ядра. Здесь ядро Linux существует.
Существует также библиотека GNU C (glibc). Это обеспечивает интерфейс системного вызова, который подключается к ядру и обеспечивает механизм перехода между приложением пользовательского пространства и ядром. Это важно, поскольку ядро и пользовательское приложение занимают разные защищенные адресные пространства. И хотя каждый процесс пользовательского пространства занимает свое собственное виртуальное адресное пространство, ядро занимает одно адресное пространство.
Ядро Linux можно разделить на три основных уровня. Вверху находится интерфейс системного вызова, который реализует основные функции, такие как , чтение,
и , запись,
. Под интерфейсом системного вызова находится код ядра, который можно более точно определить как архитектурно-независимый код ядра. Этот код является общим для всех архитектур процессоров, поддерживаемых Linux. Ниже приведен архитектурно-зависимый код, который формирует то, что чаще называют BSP (пакет поддержки платы).Этот код служит кодом процессора и платформы для данной архитектуры.
Свойства ядра Linux
Обсуждая архитектуру большой и сложной системы, вы можете рассматривать систему с разных точек зрения. Одна из целей архитектурной декомпозиции — предоставить способ лучше понять источник, и именно этим мы здесь и займемся.
Ядро Linux реализует ряд важных архитектурных атрибутов. На верхнем и нижнем уровнях ядро разделено на несколько отдельных подсистем.Linux также можно считать монолитным, потому что он объединяет все базовые службы в ядро. Это отличается от архитектуры микроядра, где ядро предоставляет базовые службы, такие как связь, ввод-вывод, память и управление процессами, а более конкретные службы подключаются к уровню микроядра. У каждого есть свои преимущества, но я не буду участвовать в этих спорах.
Со временем ядро Linux стало эффективным с точки зрения использования памяти и процессора, а также стало чрезвычайно стабильным.Но наиболее интересным аспектом Linux, учитывая его размер и сложность, является его переносимость. Linux можно скомпилировать для работы на огромном количестве процессоров и платформ с различными архитектурными ограничениями и потребностями. Одним из примеров является возможность Linux запускать процесс с блоком управления памятью (MMU), а также процессы, которые не предоставляют MMU. Порт uClinux ядра Linux обеспечивает поддержку без MMU.
Основные подсистемы ядра Linux
Теперь давайте рассмотрим некоторые из основных компонентов ядра Linux, используя разбивку, показанную на рисунке 3, в качестве руководства.
Рисунок 3. Одна архитектурная перспектива ядра Linux
Интерфейс системных вызовов
SCI — это тонкий слой, который предоставляет средства для выполнения вызовов функций из пользовательского пространства в ядро. Как обсуждалось ранее, этот интерфейс может зависеть от архитектуры даже в пределах одного семейства процессоров. На самом деле SCI представляет собой интересную услугу мультиплексирования и демультиплексирования вызовов функций. Вы можете найти реализацию SCI в ./linux/kernel, а также архитектурно-зависимые части в./ linux / arch.
Управление процессами
Что такое ядро?
Как показано на рисунке 3, ядро на самом деле не более чем менеджер ресурсов. Независимо от того, является ли управляемый ресурс процессом, памятью или аппаратным устройством, ядро управляет и разрешает доступ к ресурсу между множеством конкурирующих пользователей (как в ядре, так и в пользовательском пространстве).
Управление процессами ориентировано на выполнение процессов. В ядре они называются потоками и представляют собой индивидуальную виртуализацию процессора (код потока, данные, стек и регистры ЦП).В пользовательском пространстве обычно используется термин процесс , хотя реализация Linux не разделяет эти две концепции (процессы и потоки). Ядро предоставляет программный интерфейс приложения (API) через SCI для создания нового процесса (функции fork, exec или Portable Operating System Interface [POSIX]), остановки процесса (kill, exit), а также связи и синхронизации между ними ( signal или механизмы POSIX).
Также в управлении процессами необходимо разделять ЦП между активными потоками.Ядро реализует новый алгоритм планирования, который работает в постоянное время, независимо от количества потоков, конкурирующих за ЦП. Это называется планировщиком O (1), что означает, что на планирование одного потока уходит столько же времени, сколько на планирование многих. Планировщик O (1) также поддерживает несколько процессоров (называемых симметричной многопроцессорной обработкой или SMP). Вы можете найти источники управления процессами в ./linux/kernel и архитектурно-зависимые источники в ./linux/arch).
Управление памятью
Еще одним важным ресурсом, которым управляет ядро, является память.Для повышения эффективности, учитывая способ, которым аппаратное обеспечение управляет виртуальной памятью, память управляется так называемыми страницами , (размер 4 КБ для большинства архитектур). Linux включает средства для управления доступной памятью, а также аппаратные механизмы для физических и виртуальных сопоставлений.
Но управление памятью — это гораздо больше, чем управление буферами 4 КБ. Linux предоставляет абстракции для буферов размером 4 КБ, например, slab-распределитель. Эта схема управления памятью использует в качестве основы буферы 4 КБ, но затем выделяет структуры изнутри, отслеживая, какие страницы полны, частично использованы и пусты.Это позволяет схеме динамически расти и сокращаться в зависимости от потребностей более крупной системы.
Поддержка нескольких пользователей памяти, иногда бывает, что доступная память может быть исчерпана. По этой причине страницы могут быть перемещены из памяти на диск. Этот процесс называется подкачки , потому что страницы выгружаются из памяти на жесткий диск. Вы можете найти источники управления памятью в ./linux/mm.
Виртуальная файловая система
Виртуальная файловая система (VFS) является интересным аспектом ядра Linux, поскольку она обеспечивает общую абстракцию интерфейса для файловых систем.VFS обеспечивает уровень переключения между SCI и файловыми системами, поддерживаемыми ядром (см. Рисунок 4).
Рисунок 4. VFS обеспечивает коммутационную матрицу между пользователями и файловыми системами.
В верхней части VFS находится общая абстракция API таких функций, как открытие, закрытие, чтение и запись. Внизу VFS находятся абстракции файловой системы, которые определяют, как реализуются функции верхнего уровня. Это плагины для данной файловой системы (которых существует более 50).Вы можете найти исходники файловой системы в ./linux/fs.
Ниже уровня файловой системы находится буферный кеш, который обеспечивает общий набор функций для уровня файловой системы (независимо от какой-либо конкретной файловой системы). Этот уровень кэширования оптимизирует доступ к физическим устройствам, сохраняя данные в течение короткого времени (или предположительно считывая вперед, чтобы данные были доступны, когда это необходимо). Под буферным кешем находятся драйверы устройств, которые реализуют интерфейс для конкретного физического устройства.
Сетевой стек
Сетевой стек по своей конструкции следует многоуровневой архитектуре, смоделированной по образцу самих протоколов. Напомним, что Интернет-протокол (IP) является основным протоколом сетевого уровня, который находится ниже транспортного протокола (чаще всего протокола управления передачей или TCP). Выше TCP находится уровень сокетов, который вызывается через SCI.
Уровень сокетов является стандартным API для сетевой подсистемы и предоставляет пользовательский интерфейс для различных сетевых протоколов.От доступа к необработанным кадрам до блоков данных протокола IP (PDU) и до TCP и протокола пользовательских дейтаграмм (UDP), уровень сокетов обеспечивает стандартизированный способ управления соединениями и перемещения данных между конечными точками. Вы можете найти сетевые источники в ядре по адресу ./linux/net.
Драйверы устройств
Подавляющее большинство исходного кода ядра Linux существует в драйверах устройств, которые делают конкретное устройство пригодным для использования. В дереве исходных кодов Linux есть подкаталог драйверов, который дополнительно разделен на различные поддерживаемые устройства, такие как Bluetooth, I2C, последовательный порт и т. Д.Вы можете найти источники драйверов устройств в ./linux/drivers.
Код, зависящий от архитектуры
Хотя большая часть Linux не зависит от архитектуры, на которой он работает, есть элементы, которые должны учитывать архитектуру для нормальной работы и эффективности. Подкаталог ./linux/arch определяет архитектурно-зависимую часть исходного кода ядра, содержащуюся в ряде подкаталогов, специфичных для данной архитектуры (вместе образующих BSP). Для обычного рабочего стола используется каталог i386.Каждый подкаталог архитектуры содержит ряд других подкаталогов, которые сосредоточены на определенных аспектах ядра, таких как загрузка, ядро, управление памятью и другие. Вы можете найти архитектурно-зависимый код в ./linux/arch.
Интересные особенности ядра Linux
Если переносимости и эффективности ядра Linux было недостаточно, оно предоставляет некоторые другие функции, которые не могли быть классифицированы в предыдущей декомпозиции.
Linux, производственная операционная система с открытым исходным кодом, является отличным испытательным полигоном для новых протоколов и усовершенствований этих протоколов.Linux поддерживает большое количество сетевых протоколов, включая типичный TCP / IP, а также расширение для высокоскоростной сети (более 1 Gigabit Ethernet [GbE] и 10 GbE). Linux также поддерживает такие протоколы, как протокол передачи управления потоком (SCTP), который предоставляет множество дополнительных функций по сравнению с TCP (в качестве протокола транспортного уровня замены).
Linux также является динамическим ядром, поддерживающим добавление и удаление программных компонентов на лету. Они называются динамически загружаемыми модулями ядра, и они могут быть вставлены при загрузке, когда они необходимы (когда определенное устройство обнаруживает, что модуль требует) или в любое время пользователем.
Недавним достижением Linux является его использование в качестве операционной системы для других операционных систем (так называемый гипервизор). Недавно в ядро была внесена модификация, которая называется виртуальной машиной на основе ядра (KVM). Эта модификация позволила создать новый интерфейс для пользовательского пространства, который позволяет другим операционным системам работать поверх ядра с поддержкой KVM. Помимо запуска другого экземпляра Linux, Microsoft® Windows® также можно виртуализировать. Единственное ограничение состоит в том, что базовый процессор должен поддерживать новые инструкции виртуализации.
Дальше
Эта статья лишь поверхностно коснулась архитектуры ядра Linux, его функций и возможностей. Вы можете проверить каталог документации, который есть в каждом дистрибутиве Linux, для получения подробной информации о содержимом ядра.
.
Архитектура ядра Linux — Скачать PDF бесплатно
Структура операционной системы
Структура операционной системы Лекция 3 Отказ от ответственности: некоторые слайды взяты из слайдов авторов книги. Слайды с разрешения. Резюме. Архитектура компьютера. ЦП, память, диск, устройства ввода-вывода. Иерархия памяти. Архитектура
.
Дополнительная информация
Глава 10 Пример 1: LINUX
СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМЫ Третье издание ЭНДРЮ С.ТАНЕНБАУМ Глава 10 Пример 1: История LINUX UNIX и Linux UNICS PDP-11 UNIX Portable UNIX Berkeley UNIX Standard UNIX MINIX Linux UNIX / Linux Цели
Дополнительная информация
Пример стандартного API
16 Пример реализации стандартного системного вызова API Обычно номер, связанный с каждым системным вызовом Интерфейс системного вызова поддерживает таблицу, индексированную в соответствии с этими номерами Интерфейс системного вызова
Дополнительная информация
TELE 301 Лекция 7: Linux / Unix файл
Обзор Последняя лекция Создание сценариев Эта лекция Файловая система Linux / Unix Следующая лекция Установка системы Источники Руководство по установке и началу работы Руководство системного администратора Linux Глава 6 в Принципах
Дополнительная информация
Виртуальная файловая система Linux
Обзор лекции Файловая система Linux Обзор виртуальной файловой системы Linux (VFS) Общая модель файлов Суперблок, индексный дескриптор, файл, dentry Объектно-ориентированная файловая система Ext2 Структуры данных на диске Суперблок, группа блоков,
Дополнительная информация
Глава 12 Управление файлами.Дорожная карта
Операционные системы: внутреннее устройство и принципы проектирования, 6 / E Уильям Столлингс Глава 12 Управление файлами Дэйв Бремер Отаго, Политехнический институт, штат Нью-Зе. 2008, Prentice Hall Обзор Дорожная карта Организация файлов и доступ
Дополнительная информация
Глава 12 Управление файлами
Операционные системы: внутреннее устройство и принципы проектирования, 6 / E Уильям Столлингс Глава 12 Управление файлами Дэйв Бремер Отаго, Политехнический институт, Н.Z. 2008, Обзор дорожной карты Prentice Hall Организация файлов и доступ
Дополнительная информация
COS 318: Операционные системы
COS 318: Операционные системы Структуры ОС и системные вызовы Энди Бавьер Департамент компьютерных наук Принстонского университета http://www.cs.princeton.edu/courses/archive/fall10/cos318/ Схема механизмов защиты
Дополнительная информация
Глава 2 Системные структуры
Глава 2 Структуры системы Структуры операционной системы Цели: Обеспечить способ понимания операционной системы Интерфейс служб Компоненты системы Требуемый тип системы является основой для выбора
Дополнительная информация
API-интерфейс POSIX Socket
Программное обеспечение POSIX Giovanni Agosta Piattaforme для Rete Modulo 2 G.Agosta Общие сведения о POSIX Сокеты и TCP-соединения 1 Сокеты и TCP-соединения 2 3 4 G. Agosta Предварительные сведения о POSIX TCP-соединениях
Дополнительная информация
Модуль 20: Система Linux.
Модуль 20: История системы Linux Принципы проектирования Модули ядра Управление процессами Планирование Управление памятью Файловые системы Ввод и вывод Межпроцессное взаимодействие Структура сети Безопасность
Дополнительная информация
Глава 12 Управление файлами
Операционные системы: внутреннее устройство и принципы разработки Глава 12 Управление файлами, восьмое издание Уильям Столлингс Файлы Коллекции данных, созданные пользователями Файловая система — одна из наиболее важных частей
Дополнительная информация
ГЛАВА 17: Управление файлами
ГЛАВА 17: Управление файлами Архитектура компьютерного оборудования, системного программного обеспечения и сетей: подход к информационным технологиям, 4-е издание, Ирв Энгландер, Джон Вили и сыновья, 2010 г., слайды PowerPoint
Дополнительная информация
Функции управления устройством
ОПЕРАЦИОННЫЕ СИСТЕМЫ В РЕАЛЬНОМ ВРЕМЕНИ Урок 6: Функции управления устройством 1 1.Функции диспетчера устройств 2 ISR драйверов устройств Количество ISR драйверов устройств в системе, каждое устройство или функция устройства имеют
Дополнительная информация
Операционные системы 4-го класса
Операционные системы 4-й класс Лекция 1 Операционные системы Операционные системы являются неотъемлемой частью любой компьютерной системы. Следовательно, курс операционных систем является неотъемлемой частью любой информатики
.
Дополнительная информация
Структуры операционной системы
COP 4610: Введение в операционные системы (весна 2015 г.) Структуры операционных систем Чжи Ван Государственный университет Флориды Содержание Службы операционной системы Пользовательский интерфейс Системные вызовы Системные программы Операционная
Дополнительная информация
Сетевое программирование TDC 561
Сетевое программирование TDC 561 Лекция №1 Др.Школа компьютерных наук и телекоммуникаций им. Эхаба С. Аль-Шаера, Университет ДеПола, Чикаго, штат Иллинойс. 1 Цели этого курса по сетевому программированию: изучение, оценка
Дополнительная информация
Краткое описание: Операционные системы
Краткое содержание: Операционные системы Что такое ОС Функции ОС Многозадачность Файловые системы виртуальной памяти Оконные системы Операционные системы ПК Войны: Windows против Linux 1 Операционная система предоставляет способ загрузки (запуска)
Дополнительная информация
CSC 2405: Компьютерные системы II
CSC 2405: Computer Systems II Spring 2013 (TR 8: 30-9: 45 в G86) Мирела Дамиан http: // www.csc.villanova.edu/~mdamian/csc2405/ Введение Мирела Дамиан Комната 167A в здании науки Менделя [email protected]
Дополнительная информация
Компоненты операционной системы
Обзор лекции Введение в программное обеспечение операционной системы Компоненты ОС Службы ОС Структура ОС Операционные системы — 24 апреля 2001 г. Компоненты операционной системы Управление процессами Управление памятью Вторичная
Дополнительная информация
Виртуальные частные системы для FreeBSD
Виртуальные частные системы для FreeBSD Клаус П.Ohrhallinger 06. июнь 2010 Аннотация Виртуальные частные системы для FreeBSD (VPS) — это новая реализация виртуализации, основанная на операционной системе
Дополнительная информация
РУКОВОДСТВО ДЛЯ ИЗУЧЕНИЯ ГЛАВА 4
РУКОВОДСТВО ДЛЯ ИЗУЧЕНИЯ ГЛАВА 4 Верно / Неверно Укажите, истинно ли утверждение или нет. 1. Операционная система для настольных ПК предназначена для настольных компьютеров или ноутбуков. 2. Зеркальный пользовательский интерфейс
Дополнительная информация
Структуры операционной системы
Структуры операционной системы Meelis ROOS mroos @ ut.ee Институт компьютерных наук Тартуский университет осень 2009 Литература А. С. Таненбаум. Современные операционные системы. 2-е изд. Прентис Холл. 2001. Г. Натт.
Дополнительная информация
Учебник по программированию сокетов
Учебное пособие по программированию сокетов в компьютерных сетях — CSC 458 Департамент компьютерных наук Сейед Хоссейн Мортазави (слайды в основном взяты от Монии Гобади и Амина Тутунчиана) 1 Схема клиент-сервер
Дополнительная информация
Понятия и структура ОС
Концепции и структура ОС Сегодня ОС обслуживает Интерфейс ОС для программистов / пользователей Компоненты ОС и взаимосвязи Структурирование ОС В следующий раз Процессы между оборудованием и вашими приложениями Пользовательские процессы Thunderbird
Дополнительная информация
Лекция 25 Symbian OS
Лекция по проектированию операционных систем CS 423 25 ОС Symbian Клара Нарштедт, осень 2011 г. На основе слайдов Эндрю С.Учебник Таненбаума и другие веб-материалы (см. Благодарности) cs423 Осень 2011 г. 1 Обзор
Дополнительная информация
Системные вызовы и стандартный ввод / вывод
Системные вызовы и стандартный ввод-вывод Профессор Дженнифер Рексфорд http://www.cs.princeton.edu/~jrex 1 Цели современного класса Системные вызовы o Как пользовательский процесс связывается с операционной системой o Для расширенных сервисов
Дополнительная информация
LSN 10 Linux Обзор
LSN 10 Обзор Linux ECT362 Операционные системы Департамент инженерных технологий LSN 10 Обзор Linux Linux Современная реализация UNIX с открытым исходным кодом, доступная бесплатно в Интернете Представлено
Дополнительная информация
Проектирование параллельного файлового сервера
Проектирование параллельного файлового сервера Джеймс Уайтхед II Оксфордский университет джим[email protected] 28 августа 2012 г. Архитектура коммуникационных процессов 2012 г. Авторские права, 2012 г., Джеймс Уайтхед II. 1/22 дом
Дополнительная информация
Операционные системы центра обработки данных
Операционные системы центров обработки данных CSE451 Саймон Питер Благодарность Тимоти Роско (ETH Zurich) Осень 2015 г. Эта лекция Что такое центр обработки данных Почему центры обработки данных Типы центров обработки данных Гипермасштабируемые центры обработки данных Major
Дополнительная информация
УСЛУГИ ОПЕРАЦИОННОЙ СИСТЕМЫ
УСЛУГИ ОПЕРАЦИОННОЙ СИСТЕМЫ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ Интерфейс командной строки (cli): использует текстовые команды и метод их ввода. Пакетный интерфейс (bi): вводятся команды и директивы для управления этими командами
Дополнительная информация
Виртуальные частные сети
Виртуальные частные сети Джонатан Рид jdreed @ mit.edu MIT IS&T VPN Release Team Обзор Основные сетевые термины Общие концепции Как работает VPN Почему это полезно На что обращать внимание при вопросах и ответах Сетевое взаимодействие 101
Дополнительная информация
CS161: Операционные системы
CS161: Операционные системы Мэтт Уэлш [email protected] Лекция 2: Структура ОС и системные вызовы 6 февраля 2007 г. 1 Обзор лекции Границы защиты и уровни привилегий Чем отличается ядро
Дополнительная информация
Сетевая файловая система (NFS)
Сетевая файловая система (NFS) Брэд Карп UCL Computer Science CS GZ03 / M030 10 октября 2011 г. NFS актуальна Оригинальная статья 1985 г. Очень успешная, широко используется сегодня Ранний результат; много последующих
Дополнительная информация
Внутреннее устройство Red Hat Linux
Внутреннее устройство Red Hat Linux Узнайте, как работает ядро Linux, и приступите к разработке модулей.Внутреннее устройство Red Hat Linux учит вас всем фундаментальным требованиям, необходимым для понимания и начала разработки
.
Дополнительная информация
.