Архитектура ОС 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). Части ядра – называют модулями.
При этом модуль ядра — это часть ядра, то есть модуль не является полноценной, независимой программой, а является частью одной большой программы, которая называется ядро ОС.
Все модули используют единое адресное пространство оперативной памяти, одни и те же данные. Иными словами, любой модуль может обратиться к данным которые использует другой модуль, так и к ОП другого модуля.
Как вывод крах одного модуля может повлечь за собой крах другого модуля или всей системы. К примеру, в случае если модуль некорректно изменит общие данные, то это может привести к ошибке в другом модуле и возможно к ошибке во всем ядре.
В архитектуре монолитного ядра есть свои плюсы и минусы. Плюсы заключаются в том, что разрабатывать отдельные модули ядра очень просто, и работает такое ядро очень быстро.
Минусом является то, что ошибка в работе любого модуля, может приведет к краху всей системы.
Старые ядра Linux требовали перекомпиляции ядра (то есть созданию нового ядра) при использовании нового оборудования.
То есть если возникала необходимость добавить новый модуль в ядро, то приходилось целиком пересобрать ядро. Новые ядра Linux могут на ходу подгружать модули. Такие модули часто называют динамическими.
Структурная схема ядра:
Посмотрим на архитектуру GNU/Linux немного детальней. Архитектура разбита на 3 функциональных уровня: уровень пользователя, уровень ядра и уровень аппаратуры.
Уровень пользователя — это то, что до этого момента мы называли: программы (Applications). На этом уровне работают разные программы, службы, системные утилиты и т.д.
Уровень ядра – тут находится само ядро ОС.
Уровень аппаратуры — тут находятся разные устройства таки как оперативная память, процессор, жесткие диски, видеокарта и т.д.
В уровне пользователя есть программное обеспечение (пользовательские приложения), которое может работать напрямую с ядром, либо посредством специальных системных библиотек (к примеру: glibc).
В пространстве ядра есть “обращение к операционной системе”, это посредник между программами и ядром. (Executive Services), который принимает данные от программ и передает их ядру системы, а ядро непосредственно работает с оборудованием.
Как видно из схемы после “обращения к операционной системе”, есть всего два варианта развития дальнейших событий.
Обращаться можно только к “подсистема управления файлами” либо к “подсистема управления процессами”. “Подсистема управления файлами” – управляет всем: вводом/выводом, устройствами и т.д. “Подсистема управления процессами” – управляет процессорным временем, ОП, процессами и т.д. “Подсистема управления процессами” позволяет процессам обмениваться данными друг с другом с помощью специальных процедур, которые называют каналы. “Подсистема управления файлами” и “подсистема управления процессами” могут между собой взаимодействовать.
Именно “Подсистема управления файлами” ( файловая система) и “подсистема управления процессами”( управления процессами) — две основных компоненты ядра. “Подсистема управления файлами” формирует нужного синтаксиса данные и отправляет их “Драйверу устройства”. “Подсистема управления файлами” может передавать символы или блоки данных. Стоит отметить, что Linux изначально разрабатывался под девизом: «Пишите программы, которые бы поддерживали текстовые потоки, поскольку это универсальный интерфейс» (Дуг МакИлрой, изобретатель каналов UNIX).
Именно поэтому Подсистема управления файлами связана с драйверами напрямую не битовыми потоками, а символьными.
Подсистема управления файлами разрабатывалась с возможностью отобразить все что есть в системе: устройства (жесткий диск, принтеры и т.д.), процессы, и т.д. Как видно из схемы, именно на файловую систему ложится задача передавать данные устройствам. Именно здесь, в файловой системе, каждое устройство представляется в виде отдельного специального файла, что позволяет легко и просто обращаться к любому устройству.
Для связи с жестким диском процесс использует файл “/dev/hdа”. Который в свою очередь связывается с драйвером жесткого диска. Драйвер жесткого диска уже непосредственно обращается к жесткому диску и производит чтение или запись. Еще несколько примеров.
Например: принтер – это специальный файл, и все что будет скопировано в этот файл — будет распечатано.
Например: сетевой адаптер – это специальный файл, и все что будет скопировано в этот файл, будет передано по сети. Например: терминал (консоль пользователя) – это специальный файл, и все что в него будет записано, будет выведено на экране терминала (консоль пользователя).
Вывод:
В этой статье вы прочитали про архитектура ОС Linux, думаю вам было вполне интересно и вы многое узнали.