Архитектура ОС Linux
Основные компоненты Linux представлены на рис.1.
Являясь операционной системой семейства Unix, Linux следует установленным стандартам и объединяет в себе три основных части:
Ядро (kernel) — основной компонент ОС, отвечающий за управление процессами, виртуальной памятью и драйверами устройств.
Ядро Linux представляет собой единый блок бинарного кода. Все коды ядра и структуры данных, в том числе драйверы устройств, коды распределения ресурсов и виртуальной памяти, сетевой поддержки, а так же файловая система — хранятся в едином адресном пространстве. Преимуществом такой структуры является то, что не требуется никаких переключений при запросах процессами системных ресурсов или прерываниях от различных устройств.
Общее адресное пространство, однако, не препятствует модульности системы. По мере необходимости Linux подгружает в память либо выгружает из нее указанные модули.
В Linux все ядро работает в привилегированном режиме — режиме ядра. Никакая часть кода не работает в режиме пользователя. Фрагменты поддержки ОС, не требующие запуска в режиме ядра, помещаются в раздел системных библиотек.
Разделяемые системные библиотеки (system libraries) содержат стандартный набор функций, используемых приложениями для запросов к системным сервисам ядра. В библиотеках хранятся также код функций отдельных сервисов ядра, исполняемых в обычном режиме без привилегий ядра.
Рис.1 Компоненты Linux
При обращении приложения к системным ресурсам управление от части системы, работающей в пользовательском режиме, передается ядру. Библиотеки осуществляют контроль за корректностью представленного запроса и преобразование параметров/аргументов запроса к требуемому формату.
Под системными утилитами (system utilities, программы управления системой) понимают программы, отвечающие за выполнение отдельных специализированных задач управления (управляющих функций системы). Одни утилиты запускаются лишь один раз для инициализации и конфигурирования отдельных элементов системы, другие вызываются регулярно, например, утилиты принимающие запросы на регистрацию с терминалов системы, либо утилиты обновляющие файлы регистрации.
Не все утилиты выполняют функции системного администрирования. Часть системных программ отвечают за выполнение простых задач, в частности, просмотр каталогов, перенос и удаление файлов, просмотр содержимого файла. Более сложные поддерживают некоторые функции обработки текстовых данных, например, сортировку данных либо поиск по заданному шаблону в тексте.
Источник
Архитектура Linux. Детальное описание анатомии Линукса от и до
Архитектура Linux берет свое начало еще в далеком 1969 -м году. Именно в то время команда разработчиков-энтузиастов начала работу над грандиозным проектом создания обобщенной операционной системы для различных видов компьютеров, дав ей название «Unix».
Краткая история возникновения Linux — систем
Как мы знаем, Linux — это часть сообщества unix-подобных операционных систем, которые функционируют на ядре Линукс. Это ядро в 1991-м году разработал финно-американский студент-разработчик Линус Торвальдс. На такую разработку его вдохновило прочтение книги о проектировании ОС Unix , и он решил продолжить эту идею. В 91-м году выходят 2 прототипа экспериментальных Линукс-систем, которые были, мягко говоря, не работоспособными. Потом в течение 2-х лет велась упорная работа над разработкой рабочей версии ОС Linux. И вот в 1994-м году увидела свет первая стабильная и работоспособная версия операционной системы Линукс. Внутри себя она содержала ядро Linux и небольшое количество программного обеспечения для поддержки работоспособност и системы, которое разработала та же команда разработчиков, которая создала и само ядро. Это был довольно скудный набор инструментов, но зато был дан старт эпохе Linux — систем. Еще один момент — эта «первая» операционная система тогда называлась «Freax», а имя «Linux» она приобрела несколько позже.
Уже с тех времен главным принципом этой ОС была поддержка открытого исходного кода. Именно это позволило развиваться Линукс-системам и дорасти до того, что сегодня имеем мы.
Это сейчас мы в слово «Linux» вкладываем полноценную операционную систему, которую можно инсталлировать и сразу пользоваться, но по сути «Linux» — это просто ядро. А все остальное его программное обеспечение — это труд многих «свободных» программистов, которые трудились над разработкой ядра и создавали для него свое ПО. И то , что мы сейчас понимаем под «операционной системой Линукс», — это симбиоз ядра Linux и стороннего программного обеспечения.
Любая операционная система, которая использует ядро Линукс, будет именоваться «дистрибутивом Линукс а ». И это будет полноценная ОС, как Windows или MacOS. Но дистрибутивы Линукса от других ОС отличает важная особенность — открытый исходный код. А это означает, что фактически любой пользователь способен внести туда собственные корректировки и разработать индивидуальную операционную систему или отредактировать старую под собственные нужды. При этом нужно заметить, что дистрибутивы « пингвина » бывают и платными — это когда их разработчики «закрывают» собственные наработки от стороннего вмешательства.
Даже те, кто не знаком с Линукс — системами, знают, что талисманом ядра Linux является пингвин. У него даже есть имя — Tux. Он стал талисманом еще в 1996-м году и был предложен самим создателем ядра — Линусом Торвальдсом.
Архитектура Linux
Архитектура Linux — систем состоит всего их 4-х основных компонентов , к аждый из которых имеет в своем составе различные собственные элементы. Давайте представим себе круг и начнем двигаться от его центра к краю, перечисляя компоненты:
- «Железо». Это аппаратные характеристики устройства, на котором используется Линукс: архитектура системы, вид е окарта, аудиокарта, процессор, ядра и т. д.
- «Ядро Linux». Это основной компонент Линукс-систем. По сути это «мостик», который связывает низкоуровневое «железо» и высокоуровневые компоненты операционной системы.
- «Оболочка». Это пользовательский интерфейс, который налаживает согласованность между пользователем и ядром операционной системы. Это тоже «мостик», но только более «продвинутый», так как создан для человека, чтобы он мог влиять на работу Линукс-системы.
- «Утилиты». Это программное обеспечение, которое дает возможность пользователю системы использовать ее потенциальные возможности.
Как мы уже писали, основным компонентом Линукс-системы является ядро. Ядро — это важнейшая программа в операционной системе. Именно оно:
- является посредником между всеми компонентами «железа» и налаживает их взаимодействие с пользователем системы;
- распределяет ресурсы системы между работающими программами и всеми запущенными процессами;
- всегда первым загружается в систему и постоянно находится в рабочем состоянии.
Заключение
Архитектура Linux настолько проста и эффективна, что ее можно интегрировать в различные устройства. Линукс можно встретить в:
- персональных компьютерах;
- суперкомпьютерах;
- смартфонах;
- серверах;
- других системах и устройствах.
Linux не задумывался как альтернатива Windows или MacOS. Его разработка являлась желанием сделать доступную и эффективную операционную систему. Но результат превзошел ожидания , и по факту получилась целая экосистема с продуктами Linux, что не может не радовать последователей этой системы.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Источник
Архитектура ОС Linux.
Лабораторная работа №1. Введение в операционные системы семейства Linux.
Цель: ознакомление с семейства ОС Linux. Таблица разделов Linux. Установка ОС Linux.
GNU/Linux – общее название Unix-подобных операционных систем на основе ядра Linux, библиотек и системных программ, разработанных в рамках проекта GNU, а также другого программного обеспечения. В большинстве случаев – это ОС с открытым исходным кодом. Большинство модулей, а также ядро системы может быть получено в исходном коде. Данная ОС способна работать на множестве архитектур: x86, x86-64, SunSPARC, ARM, ATMEL AVR, PowerPC и др. Unix-подобные ОС (Linux входит в их число) имеютширокое применение во многих решениях – в оборонной и военной промышленности (ОС семейства Unix QNX), в беспроводных устройствах и роутерах, сотовых телефонах (MeeGo, Android), как основа ОС MacOS X/iOS, основа для систем виртуализации (к примеру, ESXi) и облачных вычислений.
К примеру, в TOP-500 суперкомпьютеров доля ОС Unix достигает
1% — ОС компании Microsoft. Однако в пользовательском сегменте на январь 2012 года:
§ по данным W3Schools: ОС Linux занимает 5%, ОС MacOS занимает 9%;
§ OSNews: Linux — 29%;
§ NetMarketShare: Linux — 0.97%, Mac — 6.00%, iOS — 4.31%, Android — 1.34%.
Стоит отличать ОС Linux от ОС Unix. Исторически, ОС Linux развился из ОС семейства Unix. Но в целом, они имеют похожую структуру и знание одного семейства не вызовет трудностей при работе с другим семейством ОС Unix (поэтому их часто называют *nix или nix). Во многом это связано со стандартизацией среди разработчиков Unix: во многом именно им принадлежат Single UNIX Specification и стандарты POSIX. Т.е., грубо говоря, всё что сказано для Linux, во многих случаях правильно для всех систем Unix.
Рисунок 1 – история Unix-систем.
Более подробно история Unix-систем представлена в приложении (п.1.).
В отличие от большинства других операционных систем, Linux не имеет единой «официальной» комплектации. Вместо этого Linux поставляется в большом количестве так называемых дистрибутивов, в которых ядро Linux соединяется с утилитами GNU и другими прикладными программами.
Большинство пользователей для установки Linux используют дистрибутивы. Дистрибутив — это не просто набор программ, а ряд решений для разных задач пользователей, объединённых едиными системами установки, управления и обновления пакетов, настройки и поддержки.
Самые распространённые в мире дистрибутивы:
§ Ubuntu — дистрибутив, основанный на Debian и быстро завоевавший популярность. Поддерживается сообществом, разрабатывается Canonical Ltd. Основная сборка ориентирована на лёгкость в освоении и использовании, при этом существуют серверная и минимальная сборки.
§ openSUSE — дистрибутив, разрабатываемый сообществом при поддержке компании Novell. Отличается удобством в настройке и обслуживании благодаря использованию утилиты YaST.
§ Fedora — поддерживается сообществом и корпорацией RedHat, предшествует выпускам коммерческой версии RHEL.
§ Debian — дистрибутив, разрабатываемый обширным сообществом разработчиков. Служит основой для создания множества других дистрибутивов. Отличается строгим подходом к включению несвободного ПО.
§ Mandriva Linux — французско-бразильский дистрибутив, объединение бывших Mandrake и Conectiva (англ.).
§ Slackware — один из старейших дистрибутивов, отличается консервативным подходом в разработке и использовании. Ориентирован на экспертов и опытных пользователей.
§ Gentoo — дистрибутив, полностью собираемый из исходных кодов. Позволяет очень гибко настраивать конечную систему и оптимизировать производительность, поэтому часто называет себя мета-дистрибутивом. Ориентирован на экспертов и опытных пользователей.
§ Arch Linux — ориентированный на применение самых последних версий программ и постоянно обновляемый, поддерживающий одинаково как бинарную, так и установку из исходных кодов и построенный на философии простоты KISS, этот дистрибутив ориентирован на компетентных пользователей, которые хотят иметь всю силу и модифицируемость Linux, но не в ущерб времени обслуживания.
§ CentOS — дистрибутив Linux, основанный на свободных исходных текстах коммерческого дистрибутива Red Hat Enterprise Linux компании Red Hat, и совместимый с ним. Достаточно гибкий дистрибутив, который можно адаптировать под любые требования.
Помимо перечисленных, существует множество других дистрибутивов, как базирующихся на перечисленных, так и созданных с нуля и зачастую предназначенных для выполнения ограниченного количества задач. Каждый из них имеет свою концепцию, свой набор пакетов, свои достоинства и недостатки. Ни один не может удовлетворить всех пользователей.
Примечание | История Linux систем хорошо показана на http://upload.wikimedia.org/wikipedia/commons/8/8c/Gldt.svg |
В общем случае все дистрибутивы часто делят на 2 класса:
§ RPM-based – основанные на базе менеджера пакетов RPM Package Manager и пакетов RPM;
§ DEB-based – основанные на базе менеджера пакетов deb и пакетах deb;
§ Source-based – основаны на идеи сбора пакетов из исходного кода.
Стоит отметить, что основное отличие пакеты deb и RPM отличаются по структуре хранения программы, начальным скриптам, отслеживанию связей. Наиболее распространенными являются rpm-пакеты, однако многие признают, что управление deb-пакетами зачастую удобнее из-за более качественного менеджера зависимостей между пакетами.
Для желающих досконально разобраться с Linux подойдёт любой из дистрибутивов, однако довольно часто для этой цели используются так называемые source-based дистрибутивы, то есть предполагающие самостоятельную сборку всех (или части) компонентов из исходных кодов, такие как Slackwave, Gentoo, LFS.
Правительством РФ планируется создать к 2015 году национальную программную платформу и национальную операционную систему на базе Linux (наверное… в следующей жизни… ла-ла ла-ла)
Архитектура ОС Linux.
Архитектура ОС Linux относится к макроядерным архитектурам (архитектура с монолитным ядром или гибридным ядром, см приложение, п.2). В терминах Linux «модуль» – это динамически подгружаемый вспомогательный элемент ядра. В основном модули ядра — это драйверы устройств, драйверы файловой системы и сетевых протоколов. Модули могут загружаться как явно (командами insmod и rmmod), так и не явно (демон kerneld). Драйверы устройств и расширения ядра обычно запускаются в 0-кольце защиты, с полным доступом к оборудованию. Соответственно, существует недостаток, связанный с тем, что любой сбой может привести к падению системы (ошибка: «kernel oops!»).
Графически ее можно представить следующим образом:
Рисунок 2 – архитектура Linux.
В основе любого дистрибутивов Linux лежит ядро (kernel). Ядро во всех дистрибутивах одинаковое, однако набор библиотек, приложений и их настроек зачастую очень сильно отличается, иногда даже приводя к тому, что одни и те же приложения могут быть несовместимы для разных дистрибутивов с одинаковым ядром.
Ниже приведены несколько иные взгляды на ядро Linux (еще один наиболее полный взгляд на ядро вынесен в приложение, п.4):
Рисунок 3 – еще одна архитектура Linux в виде иерархии компонентов.
Рисунок 4 –подсистемы ядра Linux.
Следует отметить, что ядро Linux является динамическим (поддерживает добавление и удаление программных компонентов без остановки системы). Эти компоненты называются динамически загружаемыми модулями ядра. Их можно вводить в систему при необходимости, как во время загрузки (если найдено конкретное устройство, для которого требуется такой модуль), так и в любое время по желанию пользователя. Последняя версия ядра Linux имеет нумерацию 3.2 (см. приложение, п. 3).
Рассмотрим подсистемы подробнее.
Интерфейс системных вызовов
SCI — это тонкий уровень, предоставляющий средства для вызова функций ядра из пространства пользователя. Как уже говорилось, этот интерфейс может быть архитектурно зависимым, даже в пределах одного процессорного семейства. SCI фактически представляет собой службу мультиплексирования и демультиплексирования вызова функций. Реализация SCI находится в ./linux/kernel, а архитектурно-зависимая часть — в ./linux/arch.
Управление процессами сконцентрировано на исполнении процессов. В ядре эти процессы называются потоками (threads); они соответствуют отдельным виртуализованным объектам процессора (код потока, данные, стек, процессорные регистры). В пространстве пользователя обычно используется термин процесс, хотя в реализации Linux эти две концепции (процессы и потоки) не различают. Ядро предоставляет интерфейс программирования приложений (API) через SCI для создания нового процесса (порождения копии, запуска на исполнение, вызова функций Portable Operating System Interface [POSIX]), остановки процесса (сигналы kill, exit), взаимодействия и синхронизации между процессами (сигналы или механизмы POSIX).
Примечание | Windows – православная ОС, в ней есть иконки и службы. Linux – сатанинская ОС, в ней есть демоны и зомби. В рамках unix-систем существует понятие процессов-демонов (daemon) и процессов-зомби (zombie). |
Задание | Найдите, что такое «демон» и «зомби» в понятиях unix-систем? |
Еще одна задача управления процессами — совместное использование процессора активными потоками. В ядре реализован новаторский алгоритм планировщика, время работы которого не зависит от числа потоков, претендующих на ресурсы процессора. Название этого планировщика — O(1) — подчеркивает, что на диспетчеризацию одного потока затрачивается столько же времени, как и на множество потоков. Планировщик O(1) также поддерживает симметричные многопроцессорные конфигурации (SMP). Исходные коды системы управления процессами находятся в ./linux/kernel, а коды архитектурно-зависимой части — в ./linux/arch).
Другой важный ресурс, которым управляет ядро — это память. Для повышения эффективности, учитывая механизм работы аппаратных средств с виртуальной памятью, память организуется в виде т.н. страниц (в большинстве архитектур размером 4 КБ, однако стоит обратить внимание на то, что потенциально возможно использование разных механизмов управления памятью). В Linux имеются средства для управления имеющейся памятью, а также аппаратными механизмами для установления соответствия между физической и виртуальной памятью.
Однако управление памятью — это значительно больше, чем просто управление буферами по 4 КБ. Linux предоставляет абстракции над этими 4 КБ буферами, например, механизм распределения slab allocator. Этот механизм управления базируется на 4 КБ буферах, но затем размещает структуры внутри них, следя за тем, какие страницы полны, какие частично заполнены и какие пусты. Исходные коды управления памятью находятся в ./linux/mm.
Виртуальная файловая система
Еще один интересный аспект ядра Linux — виртуальная файловая система (VFS), которая предоставляет общую абстракцию интерфейса к файловым системам. VFS предоставляет уровень коммутации между SCI и файловыми системами, поддерживаемыми ядром.
На верхнем уровне VFS располагается единая API-абстракция таких функций, как открытие, закрытие, чтение и запись файлов. На нижнем уровне VFS находятся абстракции файловых систем (к примеру, ntfs-3g или ext2/3/4), которые определяют, как реализуются функции верхнего уровня. Они представляют собой подключаемые модули для конкретных файловых систем (которых существует более 50). Исходные коды файловых систем находятся в ./linux/fs.
Ниже уровня файловой системы находится кэш буферов, предоставляющий общий набор функций к уровню файловой системы (независимый от конкретной файловой системы). Этот уровень кэширования оптимизирует доступ к физическим устройствам за счет краткосрочного хранения данных (или упреждающего чтения, обеспечивающего готовность данных к тому моменту, когда они понадобятся). Ниже кэша буферов находятся драйверы устройств, реализующие интерфейсы для конкретных физических устройств.
Рисунок 5 – структура работы подсистемы дисковых устройств
Сетевой стек по своей конструкции имеет многоуровневую архитектуру, повторяющую структуру самих протоколов. Работа с сетью обеспечивается посредством сокетов, вызываемый через SCI.
Уровень сокетов представляет собой стандартный API к сетевой подсистеме. Он предоставляет пользовательский интерфейс к различным сетевым протоколам. Уровень сокетов реализует стандартизованный способ управления соединениями и передачи данных. Исходные коды сетевой подсистемы ядра находятся в каталоге ./linux/net.
Подавляющее большинство исходного кода ядра Linux приходится на драйверы устройств, обеспечивающие возможность работы с конкретными аппаратными устройствами. В дереве исходных кодов Linux имеется подкаталог драйверов, в котором, в свою очередь, имеются подкаталоги для различных типов поддерживаемых устройств, таких как Bluetooth, I2C, последовательные порты и т.д. Исходные коды драйверов устройств находятся в ./linux/drivers.
Хотя основная часть Linux независима от архитектуры, на которой работает операционная система, в некоторых элементах для обеспечения нормальной работы и повышения эффективности необходимо учитывать архитектуру. В подкаталоге ./linux/arch находится архитектурно-зависимая часть исходного кода ядра, разделенная на ряд подкаталогов, соответствующих конкретным архитектурам. В случае обычного настольного ПК используется каталог i386. Подкаталог для каждой архитектуры содержит ряд вложенных подкаталогов, относящихся к конкретным аспектам ядра, таким как загрузка, ядро, управление памятью и т.д. Исходные коды архитектурно-зависимой части находятся в ./linux/arch.
Данный компонент не выделен на рисунке 4, но, в виду высокой актуальности, на сегодняшний день игнорировать данный механизм глупо.
Еще одно недавнее усовершенствование Linux — возможность ее использования в качестве операционной системы для других операционных систем (т.н. гипервизора). На текущий момент в ядре Linux поддерживается несколько гипервизоров: HyperV, ESXi, KVM (Kernel-based Virtual Machine). В результате этой модификации в пространстве пользователя реализован новый интерфейс, позволяющий исполнять поверх ядра с поддержкой KVM другие операционные системы. В таком режиме можно не только исполнять другие экземпляры Linux, но и виртуализовать Microsoft® Windows®. Единственное ограничение состоит в том, что используемый процессор должен поддерживать новые инструкции виртуализации.
Не нашли, что искали? Воспользуйтесь поиском:
Источник