Принципы проектирования и компоненты системы Linux
Linux – многопользовательская и многозадачная ОС с полным набором UNIX-совместимых инструментов. Ее файловая система соответствует традиционной семантике UNIX. Она полностью реализует стандартную сетевую модель UNIX. Основные цели проектирования Linux – скорость, эффективность и стандартизация. ОС Linux разработана как система, совместимая со стандартами POSIX по крайней мере два дистрибутива Linux были официально сертифицированы как совместимые с POSIX. Программный интерфейс Linux соответствует семантике диалекта SVR4 UNIX (разработанного фирмой AT&T), но не диалекта BSD UNIX (разработанного университетом Беркли). Как большинство реализаций UNIX, Linux состоит из трех основных групп кода – ядро, системные библиотеки и системные утилиты; наиболее важно различие между ядром и всеми остальными компонентами. Ядро отвечает за поддержку основных концепций (абстракций) ОС.
Код ядра исполняется в привилегированном режиме, и ему полностью доступны все аппаратные ресурсы компьютера. Весь код и структуры данных ядра хранятся и исполняются в едином адресном пространстве. Системные библиотеки определяют стандартный набор функций, с помощью которого приложения взаимодействуют с ядром, и которые реализуют основную часть функциональности ОС, не требующую исполнения в привилегированном режиме.Системные утилиты выполняют индивидуальные специфические задачи.
Загружаемые модули ядра Linux
Одним из важнейших новшеств в ядре Linux являются загружаемые модули ядра (loadable kernel modules, LKM), появившиеся в версии 1.2. Они обеспечивают ядру гибкость и функциональность.
Части (секции) кода ядра могут компилироваться, загружаться и выгружаться, независимо от остальной части ядра. Модуль ядра может реализовывать драйвер устройства, файловую систему или сетевой протокол.Модульный интерфейс позволяет сторонним разработчикам реализовывать и распространять на своих собственных условиях драйверы или файловые системы, которые не могут распространяться на основе GPL.Модули ядра позволяют инсталлировать Linux в виде стандартного, минимального ядра, без использования каких-либо встроенных устройств.
Три компоненты модуля Linux поддерживают:
Компонента управление модулем управляет загрузкой модуля в память и его взаимодействием с остальной частью ядра.Управление модулем разбито на две части:
Управление частями кода модуля в памяти ядра
Управление символами, на которые модуль разрешает ссылаться.
Компонента module requestor управляет загрузкой запрошенных, но еще не загруженных модулей. Она также регулярно опрашивает ядро, чтобы убедиться, что модуль до сих пор используется, и выгружает модуль, если он долгое время активно не использовался.
Компонента регистрация драйверов предоставляет модулю возможность сообщить ядру, что новый драйвер доступен.Ядро поддерживает динамическую таблицу всех известных драйверов и обеспечивает набор подпрограмм для добавления драйверов в эти таблицы или удаления из них в любое время.
Таблицы регистрации включают следующие элементы:
Модуль разрешения конфликтов предоставляет механизм, который позволяет различным драйверам устройств резервировать аппаратные ресурсы и защищать эти ресурсы от случайного использования другими драйверами.Цели модуля разрешения конфликтов:
Предотвратить конфликты, связанные с использованием аппаратуры
Предотвратить автопроверки (autoprobes) от пересечения с уже существующими драйверами устройств
Разрешить конфликты различных драйверов, пытающихся иметь доступ к одной и той же аппаратуре.
Структура операционной системы Linux
Любая UNIX-подобная операционная система состоит из ядра, некоторых системных и прикладных программ. Системные программы используют средства, предоставляемые ядром для обеспечения выполнения различных функций операционной системы. Системные и все остальные программы выполняются «на поверхности ядра» — в пользовательском режиме. Довольно часто операционная система содержит компиляторы и соответствующие им библиотеки (GCC и C библиотеки для Linux), хотя не обязательно все языки программирования должны быть частью операционной системы. Документация, а иногда даже игры, могут являться ее частью. Обычно состав операционной системы определяется содержимым установочного диска.
Операционную систему Linux можно рассматривать в виде Unix-пирамиды, изображенной на рисунке.
Рисунок Уровни операционной системы Unix
На самом нижнем уровне располагается аппаратное обеспечение, состоящее из центрального процессора, памяти, дисков, терминалов и других устройств.
На голом «железе» работает система Unix, функции которой заключаются в управлении аппаратным обеспечением и предоставлении всем программам интерфейса системных вызовов. Эти системные вызовы позволяют программа создавать процессы, файлы и прочие ресурсы, а так же управлять ими.
Все программы обращаются к системным вызовам, помещая аргументы в регистры центрального процессора и выполняя команду эмулированного прерывания для переключения из пользовательского режима в режим ядра и передачи управления операционной системе Unix. За работу команд эмулированного прерывания отвечают библиотечные функции, по одной на системный вызов. Таким образом, чтобы обратиться к системному вызову READ, программа на С должна вызвать библиотечную процедуру READ.
Помимо операционной системы и библиотеки системных вызовов все версии Unix содержать большое количество стандартных программ. К этим программам относятся: командный процессор (оболочка), компиляторы, редакторы, программы обработки текста и утилиты для работы с файлами.
Многие утилиты можно отнести к одной из трех категорий:
Фильтры – считывают входную информацию, поступившую либо от пользователя, либо из файла или другого источника, изучают и обрабатывают ее, а затем выдают результат. Для написания скрипта-фильтра используется специальный язык AWK. К фильтрам относятся – grep, sort, wc, pr, cmp, comm., cpio, fmt, fgrep, srd;
Коммуникационные программы – используются для связи с другими пользователями Вашей системы и других систем.
Таким образом, мы можем говорить о трех интерфейсах в операционной системе Unix: интерфейс системных вызовов, интерфейс библиотечных функций и интерфейс, образованный набором стандартных обслуживающих программ.
Хотя именно последний интерфейс большинство пользователей считает системой Unix, в действительности он не имеет практически ни какого отношения к самой операционной системе и легко может быть заменен.
Дистрибутивы Linux
Дистрибутив Linux – это набор пакетов программного обеспечения, включающий базовые компоненты операционной систем (в том числе, ядро Linux), некоторую совокупность программных приложений и программу инсталляции, которая позволяет установить на компьютер пользователя операционную систему GNU/Linux без привлечения высококвалифицированного эксперта, и набор прикладных программ, необходимых для конкретного применения системы.
Признаков, по которым различаются отдельные дистрибутивы существует очень много. Вот только некоторые из них:
- ориентация (или назначение) дистрибутива на конкретную область применений;
- требования к аппаратному обеспечению;
- используемая графическая оболочка (например, KDE, GNOME или XFce);
- наличие средств локализации, обеспечивающих поддержку необходимых вам;
- носитель, с которого может запускаться система;
- организация процедуры начальной загрузки системы (System V или BSD);
- используемая система управления пакетами (например, dpkg в Debian, RPM в Fedora Core). Программное обеспечение, содержащееся в пакете, поставляется в одном из двух основных видов: в виде бинарных файлов, которые предназначены для непосредственной установки в вашу систему, без какой-либо дополнительной обработки (например, компиляции) и в виде исходных текстов, которые обычно содержат текст на каком-то языке программирования, заархивированный в формате tar и упакованный программой gzip, а также вспомогательные файлы, необходимые для компиляции приложения из файлов пакета;
- структура каталогов файловой системы (хотя все файловые системы должны по возможности соответствовать стандарту на структуру каталогов файловой системы FHS — Filesystem Hierarchy Standard);
- родословная или история происхождения дистрибутива (большая часть современных дистрибутивов ведет свою родословную либо от Red Hat, либо от Debian);
- состав базового устанавливаемого программного обеспечения;
- доступность дополнительных пакетов;
- наличие и состав коммерческих программ, включенных в дистрибутив;
- предоставляемые инструменты управления системой и так далее .
Рассмотрев более подробно все аспекты, по которым различаются дистрибутивы, можно констатировать, что существует три существенных критерия классификации дистрибутивов Linux:
- стиль загрузки;
- система управления пакетами;
- назначение дистрибутива.
- Файловая система — это часть операционной системы, работающая
файлами, и предоставляющая способы хранения данных и организации доступа к ним, на информационном носителе или его разделе. В Unix-системах файловая система представляет собой некоторое устройство (жесткий диск или компакт-диск) или раздел диска, используемые для хранения файлов.
Основной файловой системой операционной системы Linux стала – Ext2, с длинными именами файлов, длинными файлами и высоко производительностью. Однако Linux также поддерживает и другие файловые системы, используя для этого файловую систему NFS. При компоновке операционной системы Linux предлагает сделать выбор файловой системы, которая будет встроена в ядро. Другие файловые системы при необходимости могут динамически подгружаться во время исполнения в виде модулей.
Ext2 очень похожа на файловую систему BSD с небольшими изменениями. Размещение файловой системы Ext2 на диске показано на рисунке.
Файловая система Linux организована в виде дерева с одной исходной вершиной, которая называется корнем (записывается: « / »), промежуточные вершины которого соответствуют каталогам, и листья — файлам и пустым каталогам. Символ « / » так же используется для разделения имен каталогов. Каждый каталог и файл файловой системы имеет уникальное полное имя. В каталоге содержатся два специальных имени: имя « . » — именующее сам этот каталог, и имя « . . » — именующее «родительский» каталог данного каталога. Файловая система Linux использует два имени пути: полное (абсолютное), которое начинается с корня, т.е. со знака « / » и родственное (относительное), которое начинается и имени текущего каталога.
- Ext2 очень похожа на файловую систему BSD с небольшими изменениями. Размещение файловой системы Ext2 на диске показано на рисунке.
Рисунок – Размещение файловой системы Ext2 на диске
Вместо групп цилиндров Ext2 делит диск на группы блоков. Описатель группы содержит информацию о расположении битовых массивов, количестве свободных блоков и i-узлов в группе, а также количество каталогов в группе. В двух битовых массивах (блоковый битовый массив и битовый массив i-узлов) ведется учет свободных блоков и свободных i-узлов. Размер каждого битового массива равен одному блоку.