Иccледуем Linux. Ядро Linux

15.11.2021 Автор: Mohira Абдукаримова

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

 4 основные составляющие системы:

  • Ядро Linux
  • Утилиты GNU
  • Графическая среда рабочего стола
  • Программное обеспечение

Каждый из этих частей имеют свою роль в системе Linux, и не так сильно пригодны сами по себе.  Ядро контролирует все программное обеспечение и оборудование в компьютерной системе. Его создал Линус Торвальдс.

Ядро в первую очередь отвечает за 4 основные функции:

  • Управление системной памятью
  • Управление программного обеспечения
  • Управление оборудованием
  • Управление файловых систем

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

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

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

Управление программного обеспечения.

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

  1. SysVinit: метод инициализации SysVinit (SysV), исходный метод, используемый Linux, был основан на методе инициализации Unix System V. Хотя в наши дни он не используется во многих дистрибутивах Linux, вы все еще можете найти его в старых дистрибутивах Linux.
  2. Systemd: метод инициализации systemd, созданный в 2010 году, стал самой популярной системой инициализации и управления процессами, используемой дистрибутивами Linux.

В методе инициализации SysVinit для определения того, какие процессы запускать, используется концепция, называемая уровнями выполнения. Уровень запуска определяет состояние работающей системы Linux и процессы, которые должны выполняться в каждом состоянии.

Метод инициализации systemd стал популярным, потому что он имеет возможность запускать процессы на основе разных событий:

  • Когда система загружается
  • Когда подключено определенное аппаратное устройство
  • Когда служба запущена
  • Когда сетевое соединение установлено
  • Когда таймер истек

Метод systemd определяет, какие процессы запускать, связывая события с файлами модулей. Каждый файл модуля определяет программы, запускаемые при наступлении указанного события. Программа systemctl позволяет запускать, останавливать и выводить список файлов модулей, запущенных в настоящее время в системе.

Метод systemd группирует файлы модулей в целевые объекты. Цель определяет конкретное рабочее состояние системы Linux, аналогично концепции уровня запуска SysVinit. При запуске системы модуль default.target определяет все файлы модуля для запуска. Вы можете просмотреть текущую цель по умолчанию, используя команду systemctl:

$ systemctl get-default

graphical.target

$

Управление оборудованием. 

Еще одна ответственность за ядро ​​- это управление оборудованием. Любое устройство, с которым система Linux должна взаимодействовать, требует кода драйвера, вставленного в код ядра. Код драйвера позволяет ядру передавать данные туда и обратно на устройство, выступая в качестве посредника между приложениями и оборудованием. Для вставки кода драйвера устройства в ядро ​​Linux используются два метода:

  • Драйверы скомпилированы в ядре
  • Модули драйверов добавлены в ядро

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

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

Система Linux идентифицирует аппаратные устройства как специальные файлы, называемые файлами устройств. Существует три классификации файлов устройств:

  • Символьный
  • Блочный
  • Сетевой

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

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

Linux создает специальные файлы, называемые узлами, для каждого устройства в системе. Вся связь с устройством осуществляется через узел устройства. Каждый узел имеет уникальную пару номеров, которая идентифицирует его для ядра Linux. Пара номеров включает старший и младший номер устройства. Подобные устройства сгруппированы под одним и тем же основным номером. Младший номер устройства используется для идентификации конкретного устройства в основной группе устройств.

Управление файловых систем.

В отличие от некоторых других операционных систем, ядро ​​Linux может поддерживать различные типы файловых систем для чтения и записи данных на жесткие диски и с них. Помимо наличия более десятка собственных файловых систем, Linux может читать и записывать данные в файловые системы, используемые другими операционными системами, такими как Microsoft Windows. Ядро должно быть скомпилировано с поддержкой всех типов файловых систем, которые система будет использовать. В таблице ниже перечислены стандартные файловые системы, которые система Linux может использовать для чтения и записи данных.

Файловая системаОписание
extРасширенная файловая система Linux — оригинальная файловая система Linux
ext2Вторая расширенная файловая система; предоставлены расширенные функции по сравнению с расширением
ext3Третья расширенная файловая система; поддерживает ведение журнала
ext4Четвертая расширенная файловая система; поддерживает расширенное ведение журнала
btrfsНовая высокопроизводительная файловая система, поддерживающая ведение журнала и большие файлы.
exfatРасширенная файловая система Windows, используемая в основном для SD-карт и USB-накопителей.
hpfsOS / 2 высокопроизводительная файловая система
jfsФайловая система журналирования IBM
iso9660Файловая система ISO 9660 (CD-ROM)
minixФайловая система MINIX
msdosMicrosoft FAT16
ncpФайловая система NetWare
nfsСетевая файловая система
ntfsПоддержка файловой системы Microsoft NT
procДоступ к системной информации
smbФайловая система Samba SMB для доступа к сети
sysvСтарая файловая система Unix
ufsФайловая система BSD
umsdosUnix-подобная файловая система, расположенная поверх msdos
vfatФайловая система Windows 95 (FAT32)
xfsВысокопроизводительная 64-битная файловая система с журналированием