Какую архитектуру ядра использует linux

Архитектура ОС GNU/Linux

Архитектура ОС GNU/Linux как это устроено

В этой статье вы прочитаете про архитектура ОС Linux, думаю будет очень интересно и полезно.

Также посмотрите статью «Лучшие книги для изучения Linux», там вы найдёте ещё книги для изучения Linux.

Архитектура ОС GNU/Linux:

Для того что бы понять GNU/Linux нужно разобраться с его архитектурой для этого вспомним что же такое операционная система (сокращенно ОС). ОС – это системная программа, которая выступает в качестве посредника между пользователем и аппаратурой компьютера. ОС – это системная программа, которая выступает в качестве посредника между прикладными программами и аппаратурой компьютера.

Для простоты условно разделим архитектуру на 3 части: двух уровневая (простая), структурная (схематическая, с основными компонентами системы) и полная схема ядра (объединение всех частей ядра в единую схему). Постепенно разберемся с каждой из них и будем углублять знания о GNU/Linux. И в конце сравним архитектуры Windows и Linux.

  • Двухуровневая архитектура;
  • Структурная архитектура;
  • Сравнение Windows и GNU/Linux;
  • Полная схема ядра Linux;

Двух уровневая архитектура:

Архитектура любой ОС может быть разделена структурно на 2 части это ядро (Kernel) и программы (Applications). Applications+Kernel это ОС. Ядро (Kernel) – это центр ОС.

Оно обеспечивает доступ программы к оборудованию компьютера, такого как оперативная память, процессорное время, жесткие диски, видеокарта и т.д.

Программы (Applications) – это разные утилиты, сервисы, прикладные программы и т.д. Из 2-х уровневой архитектуры, можно сделать вывод: ничего особенного.

Схематически так можно изобразить любую операционную систему. Windows, Dos, Unix, MAC ОС и другие. Попробуем разобраться детальней.

Программное обеспечение в GNU/Linux взято из проекта Ричарда Столлмэна GNU — то самое свободное программное обеспечение (open source). Ядро, которое использует GNU/Linux, то самое ядро Linux, написанное Линусом Торвальдсом.

Ядро любой ОС можно классифицировать как: монолитное ядро, модульное ядро, микроядро, экзо-ядро, нано-ядро, гибридное ядро. В ОС GNU/Linux используется монолитное ядро.

Монолитное ядро – изображено на рисунке и состоит из ядра (kernel) и модулей (modules). Части ядра – называют модулями.

При этом модуль ядра — это часть ядра, то есть модуль не является полноценной, независимой программой, а является частью одной большой программы, которая называется ядро ОС.

Читайте также:  Audit logging in linux

Все модули используют единое адресное пространство оперативной памяти, одни и те же данные. Иными словами, любой модуль может обратиться к данным которые использует другой модуль, так и к ОП другого модуля.

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

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

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

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

Структурная схема ядра:

Посмотрим на архитектуру GNU/Linux немного детальней. Архитектура разбита на 3 функциональных уровня: уровень пользователя, уровень ядра и уровень аппаратуры.

Уровень пользователя — это то, что до этого момента мы называли: программы (Applications). На этом уровне работают разные программы, службы, системные утилиты и т.д.
Уровень ядра – тут находится само ядро ОС.

Уровень аппаратуры — тут находятся разные устройства таки как оперативная память, процессор, жесткие диски, видеокарта и т.д.

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

В пространстве ядра есть “обращение к операционной системе”, это посредник между программами и ядром. (Executive Services), который принимает данные от программ и передает их ядру системы, а ядро непосредственно работает с оборудованием.

Как видно из схемы после “обращения к операционной системе”, есть всего два варианта развития дальнейших событий.

Обращаться можно только к “подсистема управления файлами” либо к “подсистема управления процессами”. “Подсистема управления файлами” – управляет всем: вводом/выводом, устройствами и т.д. “Подсистема управления процессами” – управляет процессорным временем, ОП, процессами и т.д. “Подсистема управления процессами” позволяет процессам обмениваться данными друг с другом с помощью специальных процедур, которые называют каналы. “Подсистема управления файлами” и “подсистема управления процессами” могут между собой взаимодействовать.

Читайте также:  Два монитора astra linux

Именно “Подсистема управления файлами” ( файловая система) и “подсистема управления процессами”( управления процессами) — две основных компоненты ядра. “Подсистема управления файлами” формирует нужного синтаксиса данные и отправляет их “Драйверу устройства”. “Подсистема управления файлами” может передавать символы или блоки данных. Стоит отметить, что Linux изначально разрабатывался под девизом: «Пишите программы, которые бы поддерживали текстовые потоки, поскольку это универсальный интерфейс» (Дуг МакИлрой, изобретатель каналов UNIX).

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

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

Для связи с жестким диском процесс использует файл “/dev/hdа”. Который в свою очередь связывается с драйвером жесткого диска. Драйвер жесткого диска уже непосредственно обращается к жесткому диску и производит чтение или запись. Еще несколько примеров.

Например: принтер – это специальный файл, и все что будет скопировано в этот файл — будет распечатано.

Например: сетевой адаптер – это специальный файл, и все что будет скопировано в этот файл, будет передано по сети. Например: терминал (консоль пользователя) – это специальный файл, и все что в него будет записано, будет выведено на экране терминала (консоль пользователя).

Вывод:

В этой статье вы прочитали про архитектура ОС Linux, думаю вам было вполне интересно и вы многое узнали.

Источник

Linux First: Кратко о linux-ядре

Этим постом начинаю серию статей “Linux First” — разбираюсь как устроен и как работает linux с начала загрузки ядра и дальше про подсистемы, сеть, процессы и многое другое.

Cписок статей серии можно найти по тэгу linux-first

Сегодня немного про историю и в общем про архитектуру.

История #

В августе 1991 года Линус Торвальдс написал в новостную ленту “minix” сообщение о том что он разрабатывает свободную операционую систему и хочет получить фидбэк от заинтересованных людей.

Читайте также:  Commands to create files in linux

В сентябре Линус опубликовал версию 0.01. Этот исторический код можно посмотреть на github.

Особо сентиментальные ребята запилили образы для Qemu, в которых запускаются первые версии ядра и можно даже вызывать “доисторические” команды ls без хэлпов и прочих прелестей современных unix-команд.

К проекту сразу появился интерес и совместными усилиями Линуса и коммьюнити linux-ядро начало развиваться.

Через 3 года в 1994 выходит первая версия.

Ядро изначально проектировалось как монолитное и переносимое на разные процессорные архитектуры. Собственно из-за аритектуры в 1992 в группе обсуждения minix разгорелся холивар “монолит-ядро vs микро-ядрo” между Линусом Торвальдсом и Эндрю Таненбаумом (почти как и сейчас про монолит vs микросервисы).

Основной посыл холивара был в том что монолитное ядро устарело уже в 1992 году, а микроядра рулят и за ними будущее, но как показала история, даже 26 лет спустя монолитное ядро все еще живо и продолжает развиваться.

Текущая версия доросла до 5.6 (май 2020) и код начиная с 2.6 можно смотреть на оф сайте или на github-зеркале torvalds/linux

Архитектура #

Cхема из статьи IBM

Ядро делится на пространство ядра и пространство пользователя.

Пространство ядра через Интерфейс системных вызовов (SCI) позволяется вызывать функции ядра из пространства пользователя.

Вся работа с железом контролируется ядром, основная часть ядра архитектурно-независима, то есть этот код работает на любой архитектуре процессоров.

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

Ресурсы CPU распределяются между процессами планировщиком процессов O(1). Код планировщика может использовать фишки определенной процессорной архитектуры, поэтому как раз код планировщика разделен на архитектурно-независимый и архитектурно-зависимый.

Память аналогично ресурсам CPU контролируется ядром и эта же подсистема управляет подкачкой (swap).

Виртуальная файловая система (VFS) абстрагирует от конкретных файловых систем и через SCI позволяет работать с любыми файловыми система одинаково. Поддержка конкретных файлов систем добавляется через модули ядра.

Сеть контролируется отдельной подсистемой и через все тот же SCI позволяет открывать и работать с сетевыми сокетами разных протоколов.

Если хочется узнать подробнее про подсистемы — есть целая интерактивная карта linux-ядра, из которой можно узнать много нового и интересного — www.makelinux.net/kernel_map

Источники #

Источник

Оцените статью
Adblock
detector