Ядро (kernel)

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

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

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

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

Исполняемая программа ядра Linux обычно находится в каталоге с именем /boot и называется vmlinuz-x.y.z-r-architecture (например, vmlinuz-3.2.0-4-amd64). Происхождение этого имени имеет исторические корни. В ранних реализациях UNIX ядро называлось unix. В более поздних реализациях uNIX, работающих с виртуальной памятью, ядро было переименовано в vmunix. В Linux в имени файла отобразилось название название системы, а вместо последней буквы x использована буква z. Это говорит о том, что ядро является сжатым исполняемым файлом.

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

Диспетчеризация процессов

У компьютера имеется один или несколько центральных процессоров (CPU), выполняющих инструкции программ. Как и другие UNIX-системы, Linux является многозадачной операционной системой с вытеснением. Многозадачность означает, что несколько процессов (например, запущенные программы) могут одновременно находится в памяти и каждая может получить в своё распоряжение центральный процессор (процессоры). Вытеснение означает, что правила, определяющие, какие именно процессы получают в своё распоряжение центральный процессор (ЦП) и на какой срок, устанавливает имеющийся в ядре диспетчер процессов (а не сами процессы).

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

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

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

Предоставление файловой системы

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

Создание и завершение процессов

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

Доступ к устройствам

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

Работа в сети

Ядро от имени пользовательских процессов отправляет и принимает сетевые сообщения (пакеты). Эта задача включает в себя маршрутизацию сетевых пакетов в направлении целевой операционной системы.

Предоставление API системых вызовов

Процессы могут запрашивать у ядра выполнение различных задач с использованием точек входа в ядро, известных как системные вызовы.

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

...

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

Далее

Сайт разработчиков ядра Linux