Главная » Ядро Linux » Обзор операционных систем и ядер

0

Из-за неуклонного роста  возможностей и не  очень  качественного построения некоторых современных операционных систем, понятие операционной системы стало несколько неопределенным. Многие пользователи считают, что  то, что они  видят  на экране, — и есть операционная система. Обычно, и в этой  книге  тоже, под  операционной системой понимается часть  компьютерной системы, которая отвечает  за основные  функции использования и администрирования. Это включает в себя  ядро  и драйверы  устройств, системный  загрузчик (boot  loader), командный  процессор и другие интерфейсы пользователя, а также  базовую  файловую систему  и системные утилиты. В общем, только необходимые компоненты. Термин система обозначает операционную систему  и все  пользовательские программы,  которые работают под  ее управлением.

Конечно , основно й  темо й  это й  книги  будет  ядро  операционно й  системы . Интерфейс пользователя — это  внешняя часть операционной системы, а ядро — вну-

3 Для тех, кому  интересно , дискуссии по  поводу  отличия свободного кода  от открытого доступна  в

Интерне т  п о  адресам   http://www.fsf.or g и  http://www.opensource.org .

4 Вероятно, вам нужно  прочесть  лицензию GNU GPL, если вы еще не читали  ее. В файле  COPYING, в  исходно м  коде  ядра , есть  копи я  это й  лицензии .  В Интерне т лицензи я  доступна  п о  адресу http://www.fsf.org .

тренняя. В своей  основе ядро — это  программное обеспечение, которое предоставляет базовые функции для  всех  остальных частей  операционной  системы, занимается управлением аппаратурой и  распределяет системные ресурсы. Ядро  часто  называют основной частью  (core)   или  контроллером  операционной системы. Типичные компоненты ядра — обработчики прерываний,  которые обслуживают запросы на  прерывания,  планировщик,  который распределяет процессорное время  между  многими процессами,  система управления памятью,  которая управляет адресным пространством  процессов, и  системные службы, такие  как  сетевая   подсистема и подсистема межпроцессного взаимодействия.  В современных системах с устройствами управления  защищенной памятью ядро  обычно занимает привилегированное положение по отношению к  пользовательским программам. Это  включает доступ  ко  всем  областям защищенной памяти и полный доступ  к аппаратному обеспечению. Состояние системы, в котором находится ядро, и область  памяти, в которой находится ядро, вместе называются пространством  ядра  (или  режимом ядра,  kernel-space). Соответственно, пользовательские программы выполняются в пространствах  задач (пользовательский режим, режим   задач, user-space). Пользовательским  программам доступно лишь  некоторое подмножество машинных  ресурсов,  они  не  могут  выполнять  некоторые системные функции,  напрямую обращаться к  аппаратуре и  делать  другие  недозволенные вещи.   При  выполнении программного кода  ядра  система находится в пространстве (режиме) ядра, в отличие от  нормального выполнения  пользовательских программ,  которое происходит в режиме задачи.

Прикладные программы, работающие в  системе,  взаимодействуют с ядром  с  помощью интерфейса системных вызовов  (system  call)  (рис.  1.1).  Прикладная программа обычно вызывает функции различных библиотек, например библиотеки  функций  языка  С, которые, в свою  очередь,  обращаются к  интерфейсу системных вызовов для того,  чтобы  отдать  приказ ядру  выполнить определенные действия от  их  имени. Некоторые библиотечные вызовы предоставляют функции,  для  которых отсутствует системный вызов, и поэтому обращение к ядру — это  только  один  этап  в более  сложной  функции. Давайте рассмотрим всем  известную функцию print f () .  Эта  функции обеспечивает форматирование и буферизацию данных  и лишь  после  этого  один  раз обращается к системному вызову  writ e ()  для  вывода  данных  на  консоль. Некоторые библиотечные функции соответствуют функциям ядра один  к одному. Например, библиотечная функция open  ()  не делает  ничего, кроме  выполнения  системного вызова open () . В то же время  некоторые библиотечные функции, как, например, strcp y () , надо  полагать, вообще не используют обращения к ядру.  Когда  прикладная программа выполняет системный вызов, то говорят, что ядро выполняет работу от имени прикладной программы.  Более  того, говорят, что  прикладная программа выполняет  системный вызов в пространстве ядра,  а ядро  выполняется в контексте процесса.  Такой тип  взаимодействия, когда  прикладная программа входит в ядро  через  интерфейс системных вызовов, является фундаментальным способом выполнения задач.

В функции ядра  входит  также  управление системным  аппаратным обеспечением. Практически все  платформы,  включая те, на  которых работает операционная  система  Linux,  используют  прерывания  (interrupt).  Когда  аппаратному устройству необходимо  как-то  взаимодействовать с системой, оно  генерирует прерывание,  которое прерывает работу  ядра  в  асинхронном  режиме5.

5 Иным исловами, заранее  неизвестно, в какой  момент  времени это событие  произойдет и в каком состоянии буде т система  в этот момент  времени. Прим*. перев.

Прикладная программа 1

Прикладная программа 2

Прикладная программа 3

Пространство задачи

Интерфейс системных вызовов

Пространство ядра

Подсистемы ядра

Драйверы устройств

Аппаратное обеспечение

Рис.1.1.Взаимодействиемеждуприкладнымипрограммами,ядромиаппа-

ратным обеспечением.  .

Обычно  каждому  типу  прерываний  соответствует номер.   Ядро  использует  номер прерывания для  выполнения  специального обработчика прерывания  (interrupt handler), который обрабатывает прерывание и отправляет на него  ответ.  Например, при вводе  символа с  клавиатуры,  контроллер клавиатуры генерирует прерывание,  чтобы дать  знать  системе,  что  в  буфере  клавиатуры  есть  новые  данные.  Ядро  определяет номер  прерывания,  которое пришло в систему  и  выполняет  соответствующий обработчик  прерывания.  Обработчик прерывания обрабатывает данные,  поступившие с клавиатуры,  и  даст  знать  контроллеру клавиатуры,  что  ядро  готово  для  приема   новых  данных.   Для  обеспечения синхронизации  выполнения  ядро  обычно может  запрещать прерывания:  или  все  прерывания, или  только  прерывание с определенным номером. Во  многих  операционных системах  обработчики прерываний  не  выполняются  в контексте процессов. Они  выполняются в специальном контексте прерывания (interrup context), который не  связан ни  с одним  процессом. Этот  специальный контекст  существует  то только  для того, чтобы дать обработчику прерывания возможность быстро  отреагировать на  прерывание и  закончить работу.

Контексты  выполнения  заданий  полностью определяют всю  широту  возможных действий ядра.  Фактически, можно  заключить,  что  в  операционной системе  Linux процессор в любой  момент  времени выполняет один  из  трех типов  действий.

• Работа  от имени определенного процесса в режиме  ядра  в контексте процесса.

•  Работа  по  обработке   прерывания  в  режиме  ядра  в  контексте   прерывания,   не связанном  с  процессами.

•  Выполнение  кода пользовательской  программы  в режиме  задачи.

Источник: Лав,  Роберт. Разработка ядра  Linux, 2-е  издание. : Пер.  с англ.  — М.  : ООО  «И.Д.  Вильяме» 2006. — 448 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии