Основа операционной системы Linux: ядро

Ядро Linux - основные сведенияПонятие «операционная система» зачастую употребляется в двух различных значениях.

  • Для обозначения всего пакета, содержащего основные программные средства управ­ления ресурсами компьютера и все сопроводительные стандартные программные инструменты: интерпретаторы командной строки, графические пользовательские интерфейсы, файловые утилиты и редакторы.
  • В более узком смысле — для обозначения основных программных средств, управля­ющих ресурсами компьютера (например, центральным процессором, оперативной памятью и устройствами) и занимающихся их распределением.

В качестве синонима второго значения зачастую используется такое понятие, как «ядро». Именно в этом смысле операционная система и будет рассматриваться в моем блоге.



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

Исполняемая программа ядра Linux обычно находится в каталоге с путевым именем /boot/vmlinuz или же в другом подобном ему каталоге. Происхождение этого имени имеет исто­рические корни. В ранних реализациях UNIX ядро называлось unix. В более поздних реа­лизациях UNIX, работающих с виртуальной памятью, ядро было переименовано в vmunix. В Linux в имени файла отобразилось название системы, а вместо последней буквы х ис­пользована буква z. Это говорит о том, что ядро является сжатым исполняемым файлом.

 

Задачи, выполняемые ядром Linux

Кроме всего прочего, в круг задач, выполняемых ядром, входят следующие.

  • Диспетчеризация процессов. У компьютера имеется один или несколько централь­ных процессоров (CPU), выполняющих инструкции программ. Как и другие UNIX- системы, Linux является многозадачной операционной системой с вытеснением. Много­задачность означает, что несколько процессов (например, запущенные программы) могут одновременно находиться в памяти и каждая может получить в свое распо­ряжение центральный процессор (процессоры). Вытеснение означает, что правила, определяющие, какие именно процессы получают в свое распоряжение центральный процессор (ЦП) и на какой срок, устанавливает имеющийся в ядре диспетчер процессов (а не сами процессы).  
  • Управление памятью. По меркам конца прошлого века объем памяти современного компьютера огромен, но и объем программ также соответственно увеличился. При этом физическая (оперативная) память осталась в разряде ограниченных ресурсов, которые ядро должно распределять между процессами справедливым и эффективным образом. Как и в большинстве современных операционных систем, в Linux исполь­зуется управление виртуальной памятью — технология, дающая два основных преимущества.
    • Процессы изолированы друг от друга и от ядра, поэтому один процесс не может читать или изменять содержимое памяти другого процесса или ядра.
    • В памяти требуется хранить только часть процесса, снижая таким образом объем памяти, требуемый каждому процессу и позволяя одновременно содержать в опе­ративной памяти большее количество процессов. Вследствие этого повышается эффективность использования центрального процессора, так как в результате увеличивается вероятность того, что в любой момент времени есть по крайней мере один процесс, который может быть выполнен центральным процессором (процессорами).
  • Предоставление файловой системы. Ядро предоставляет файловую систему на диске, позволяя создавать, считывать обновлять, удалять файлы, выполнять их выборку и производить с ними другие действия.
  • Создание и завершение процессов. Ядро может загрузить новую программу в память, предоставить ей ресурсы (например, центральный процессор, память и доступ к файлам), необходимые для работы. Такой экземпляр запущенной программы называется процессом. Как только выполнение процесса завершится, ядро обеспе­чивает высвобождение используемых им ресурсов для дальнейшего применения другими программами.
  • Доступ к устройствам. Устройства (мыши, мониторы, клавиатуры, дисковые и лен­точные накопители и т. д.), подключенные к компьютеру, позволяют обмениваться информацией между компьютером и внешним миром — осуществлять ввод/вы­вод данных. Ядро предоставляет программы с интерфейсом, упрощающим доступ к устройствам. Этот доступ происходит в рамках определенного стандарта. Одновре­менно с этим ядро распределяет доступ к каждому устройству со стороны нескольких процессов.
  • Работа в сети. Ядро от имени пользовательских процессов отправляет и принимает сетевые сообщения (пакеты). Эта задача включает в себя маршрутизацию сетевых пакетов в направлении целевой операционной системы.
  • Предоставление интерфейса прикладного программирования (API) системных вызовов. Процессы могут запрашивать у ядра выполнение различных задач с использовани­ем точек входа в ядро, известных как системные вызовы. 

Кроме перечисленных выше свойств, такая многопользовательская операционная система, как Linux, обычно предоставляет пользователям абстракцию виртуального персонального компьютера. Иначе говоря, каждый пользователь может зайти в систему и работать в ней практически независимо от других. Например, у каждого пользователя имеется собственное дисковое пространство (домашний каталог). Кроме этого, пользова­тели могут запускать программы, каждая из которых получает свою долю времени цен­трального процессора и работает со своим виртуальным адресным пространством. Эти программы, в свою очередь, могут независимо друг от друга получать доступ к устрой­ствам и передавать информацию по сети. Ядро занимается разрешением потенциальных конфликтов при доступе к ресурсам оборудования, поэтому пользователи и процессы обычно даже ничего о них не знают.

 

Режим ядра и пользовательский режим

Современные вычислительные архитектуры обычно позволяют центральному процессо­ру работать как минимум в двух различных режимах: пользовательском и режиме ядра (который иногда называют защищенным). Аппаратные инструкции позволяют переклю­чаться из одного режима в другой. Соответственно области виртуальной памяти могут быть помечены в качестве части пользовательского пространства или пространства ядра. При работе в пользовательском режиме ЦП может получать доступ только к той памяти, которая помечена в качестве памяти пользовательского пространства. Попытки обращения к памяти в пространстве ядра приводят к выдаче аппаратного исключения. При работе в режиме ядра центральный процессор может получать доступ как к поль­зовательскому пространству памяти, так и к пространству ядра.

Некоторые операции могут быть выполнены только при работе процессора в режиме ядра. Сюда можно отнести выполнение инструкции halt для остановки системы, обраще­ние к оборудованию, занимающемуся управлением памятью, и инициирование операций ввода-вывода на устройствах. Используя эту конструктивную особенность оборудования для размещения операционной системы в пространстве ядра, разработчики ОС могут обеспечить невозможность доступа пользовательских процессов к инструкциям и струк­турам данных ядра или выполнения операций, которые могут отрицательно повлиять на работу системы.

 

Сравнение взглядов на систему со стороны процессов и со стороны ядра

Решая множество повседневных программных задач, мы привыкли думать о програм­мировании, ориентируясь на процессы. Но, прежде чем рассматривать различные темы, может быть полезно переориентировать свои взгляды на систему, став на сторону ядра. Чтобы контраст стал заметнее, рассмотрим, как все вы­глядит, сначала с точки зрения процесса, а затем с точки зрения ядра.

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

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

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

 

Дополнительная информация

В число современных публикаций, охватывающих концепции и конструкции операци­онных систем с конкретными ссылками на системы UNIX, входят труды [Tanenbaum, 2007], [Tanenbaum & Woodhull, 2006] и [Vahalia, 1996]. В последнем подробно описаны архитектуры виртуальной памяти. Издание [Goodheart & Сох, 1994] предоставляет по­дробную информацию, касающуюся System V Release 4. Публикация [Maxwell, 1999] содержит аннотированный перечень избранных частей ядра Linux 2.2.5. В издании [Lions, 1996] представлен детально разобранный исходный код Sixth Edition UNIX, который и сегодня остается полезным источником информации о внутреннем устройстве UNIX. В публикации [Bovet & Cesati, 2005] дается описание реализации ядра Linux 2.6.

Вас заинтересует / Intresting for you:

Linux: как инсталлировать прог...
Linux: как инсталлировать прог... 468 просмотров Дэйзи ак-Макарова Sun, 11 Nov 2018, 11:54:59
Команда man Linux: чтение стра...
Команда man Linux: чтение стра... 515 просмотров Дэйзи ак-Макарова Sun, 11 Nov 2018, 09:36:51
Файловая система /proc в Linux
Файловая система /proc в Linux 492 просмотров Fortan Fri, 22 Feb 2019, 06:05:18
LILO и GRUB - выбираем и настр...
LILO и GRUB - выбираем и настр... 1501 просмотров Андрей Волков Thu, 22 Nov 2018, 15:21:00

Войдите чтобы комментировать