Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
25. Лекция: Обзор архитектуры и возможностей системы Linux: архитектура, ядро, распространение и лицензирование, принципы проектирования, управление процессами
В лекции рассмотрены следующие вопросы: история создания Linux; Linux и GNU-проекты; ядро Linux; развитие Linux; архитектура Linux; диалекты Linux; Linux как серверная ОС; принципы проектирования Linux; компоненты Linux; динамически подгружаемые модули ядра; управление процессами.
Содержание
Введение
Данная и следующая лекции посвящены обзору возможностей одного из самых популярных семейств операционных систем Linux. В настоящей лекции и "Обзор архитектуры и возможностей системы Linux: управление памятью, ресурсами, файловые системы, драйверы устройств, сети, безопасность" рассмотрены следующие вопросы:
История Linux
Linux современная, свободно распространяемая ОС, основанная на стандартах и традициях UNIX.
История Linux берет свое начало с 1983 г., когда Ричард Столмен (Richard Stallman) начал проект GNU, а в 1985 г. основал некоммерческую организацию Free Software Foundation. Основная цель разработка UNIX-подобной системы, которая состояла бы только из свободно распространяемого программного обеспечения.
Впервые Linux разработана как небольшое, но самодостаточное ядро ОС в 1991 Линусом Торвальдсом (Linus Torvalds), с основной целью добиться совместимости с UNIX.
История Linux это история многолетнего (удаленного) взаимодействия пользователей всего мира, которое осуществляется почти исключительно через Интернет.
Система была спроектирована с целью эффективного и надежного использования на распространенных персональных компьютерах, но она также используется и на многих других аппаратных платформах.
Основная часть ОС Linux полностью оригинальна, но на ней может также исполняться значительная часть свободно распространяемого программного обеспечения для UNIX, и в результате в распоряжении пользователей имеется оригинальная, свободно распространяемая, совместимая с UNIX система, в которой нет корпоративного конфиденциального кода.
Ядро Linux
Версия 0.01 (май 1991) не содержала сетевых средств, выполнялась только на 80386-совместимых Intel процессорах, имела очень ограниченный набор драйверов устройств и поддерживала только файловую систему MINIX (MINIX операционная система типа UNIX, разработанная Andrew Tannenbaum).
Версия Linux 1.0 (март 1994) включала следующие новые возможности:
Версия Linux 1.2 (март 1995) была последней версией ядра Linux только для персональных компьютеров.
Версия Linux 2.0 выпущена в июне 1996, со следующими новыми возможностями:
Версия Linux 2.0 была доступна на процессорах Motorola 68000, Sun SPARC, PC (x86) и PowerMac.
Современное состояние Linux, дистрибутивы и лицензирование
ОС Linux использует многие инструменты, разработанные как части Berkeley BSD UNIX, системы X Window разработки MIT, а также проекта GNU некоммерческой ассоциации Free Software Foundation (FSF).
Минимальный набор системных библиотек был разработан как часть проекта GNU, с улучшениями, разработанными сообществом Linux.
Средства сетевого администрирования Linux были разработаны на основе версии 4.3 Berkeley Software Distribution (BSD) UNIX. Недавние производные от BSD (например, UNIX FreeBSD), в свою очередь, заимствовали код из Linux.
Система Linux поддерживается слабо связанной сетью разработчиков, взаимодействующих через Internet. Небольшое число публично доступных ftp-серверов используется как хранилища информации о де-факто стандартах.
Стандартный предварительно откомпилированный набор пакетов, или дистрибутивов, включает базовую систему Linux, утилиты для инсталляции системы и управления системой, а также готовые к инсталляции пакеты инструментов для UNIX.
Ранние дистрибутивы включали диалекты SLS и Slackware. Red Hat и Debian популярные дистрибутивы, соответственно, основанные на коммерческих и некоммерческих исходных кодах.
Единый формат файла пакета - RPM обеспечивает совместимость между различными дистрибутивами Linux.
Что касается инсталляции Linux, то, по личному опыту автора, при частичных инсталляциях Linux в различных конфигурациях (например, workstation) и последующих "доинсталляциях" до полной версии возможны проблемы: инсталлятор "путает" фактический состав инсталлируемых пакетов (Linux Red Hat, 2003), по крайней мере, дополнить Linux до полной версии путем итеративных инсталляций не удается, и рекомендуется сразу же инсталлировать полную версию, т.е. явным образом изменить умолчания инсталлятора.
Ядро Linux распространяется на условиях GNU General Public License (GPL), которые установлены организацией Free Software Foundation.
Программист, использующий Linux, либо создающий свои собственные системы на базе Linux, не имеет права превращать свой продукт в коммерческий (ведомственный); программное обеспечение, распространяемое на основе GPL, не может распространяться только в виде двоичного кода (т.е. в поставку Linux должен быть включен исходный код). Это было одной из принципиальных целей проекта.
Linux в основном используется как серверная операционная система, ввиду ее высокой надежности. Что касается использования Linux как клиентской ОС, то доля ее использования очень мала, как показывает приведенная на рис. 25.1 диаграмма использования различных ОС как Web-клиентов.
Рис. 25.1. Использование различных операционных систем как Web-клиентов, март 2010.
Принципы проектирования и компоненты системы Linux
Linux многопользовательская и многозадачная ОС с полным набором UNIX-совместимых инструментов.
Ее файловая система соответствует традиционной семантике UNIX. Она полностью реализует стандартную сетевую модель UNIX.
Основные цели проектирования Linux скорость, эффективность и стандартизация.
ОС Linux разработана как система, совместимая со стандартами POSIX по крайней мере два дистрибутива Linux были официально сертифицированы как совместимые с POSIX. Программный интерфейс Linux соответствует семантике диалекта SVR4 UNIX (разработанного фирмой AT&T), но не диалекта BSD UNIX (разработанного университетом Беркли).
Компоненты системы Linux изображены на рис. 25.2.
Рис. 25.2. Компоненты системы Linux.
Как большинство реализаций UNIX, Linux состоит из трех основных групп кода ядро, системные библиотеки и системные утилиты; наиболее важно различие между ядром и всеми остальными компонентами.
Ядро отвечает за поддержку основных концепций (абстракций) ОС.
Код ядра исполняется в привилегированном режиме, и ему полностью доступны все аппаратные ресурсы компьютера.
Весь код и структуры даны ядра хранятся и исполняются в едином адресном пространстве.
Системные библиотеки определяют стандартный набор функций, с помощью которого приложения взаимодействуют с ядром, и которые реализуют основную часть функциональности ОС, не требующую исполнения в привилегированном режиме.
Системные утилиты выполняют индивидуальные специфические задачи.
Загружаемые модули ядра Linux
Одним из важнейших новшеств в ядре Linux являются загружаемые модули ядра (loadable kernel modules, LKM), появившиеся в версии 1.2. Они обеспечивают ядру гибкость и функциональность.
Части (секции) кода ядра могут компилироваться, загружаться и выгружаться, независимо от остальной части ядра.
Модуль ядра может реализовывать драйвер устройства, файловую систему или сетевой протокол.
Модульный интерфейс позволяет сторонним разработчикам реализовывать и распространять на своих собственных условиях драйверы или файловые системы, которые не могут распространяться на основе GPL.
Модули ядра позволяют инсталлировать Linux в виде стандартного, минимального ядра, без использования каких-либо встроенных устройств.
Три компоненты модуля Linux поддерживают:
Компонента управление модулем управляет загрузкой модуля в память и его взаимодействием с остальной частью ядра.
Управление модулем разбито на две части:
Компонента module requestor управляет загрузкой запрошенных, но еще не загруженных модулей. Она также регулярно опрашивает ядро, чтобы убедиться, что модуль до сих пор используется, и выгружает модуль, если он долгое время активно не использовался.
Схема исходного кода загружаемого модуля ядра Linux изображена на рис. 25.3.
Рис. 25.3. Схема исходного кода загружаемого модуля ядра Linux.
Компонента регистрация драйверов предоставляет модулю возможность сообщить ядру, что новый драйвер доступен.
Ядро поддерживает динамическую таблицу всех известных драйверов и обеспечивает набор подпрограмм для добавления драйверов в эти таблицы или удаления из них в любое время.
Таблицы регистрации включают следующие элементы:
Модуль разрешения конфликтов предоставляет механизм, который позволяет различным драйверам устройств резервировать аппаратные ресурсы и защищать эти ресурсы от случайного использования другими драйверами.
Цели модуля разрешения конфликтов:
Управление процессами в Linux
В классической системе UNIX средства управления процессами разделяют создание процесса и запуск новой программы на две различные операции:
В UNIX процесс содержит всю информацию, которую ОС должна поддерживать для реализации концепции отдельного исполнения отдельной программы.
В системе Linux свойства процесса делятся на три группы: идентификация процесса, его окружение и контекст.
Идентификатор процесса (PID) - уникальный идентификатор процесса (число); используется для указания процессов в операционной системе, когда приложение выполняет системный вызов signal, modify или wait для другого процесса.
Полномочия (Credentials). Каждый процесс должен иметь связанный с ним идентификатор пользователя и один или более идентификаторов групп, определяющих права процесса для доступа к системным ресурсам и файлам.
Идентификация личности (Personality). Хотя это и нетрадиционно для систем типа UNIX, в Linux каждый процесс имеет уникальный идентификатор личности, с помощью которого возможна некоторая модификация семантики ряда системных вызовов. Он используется главным образом в библиотеках эмуляции, для запроса о совместимости системных вызовов с тем или иным специфическим диалектом UNIX.
Окружение процесса наследуется от процесса-родителя. Состоит из двух векторов, завершающихся нулями:
Передача переменных окружения между процессами и наследование этих переменных дочерними процессами гибкие средства передачи информации компонентам системного программного обеспечения, работающим в непривилегированном режиме.
Механизм переменных окружения обеспечивает средства настройки ОС, которые могут устанавливаться для каждого процесса отдельно, а не путем конфигурирования системы в целом.
Контекст процесса это постоянно изменяющееся состояние исполняемой программы в любой момент времени.
Контекст планирования наиболее важная часть контекста процесса; это информация, которую использует планировщик для приостановки и запуска процесса.
Ядро поддерживает хранение статистической информации о ресурсах, потребляемых в каждый момент каждым процессом и общем объеме ресурсов, использованным каждым процессом с момента его создания по настоящий момент.
Таблица файлов это вектор указателей на системные файловые структуры. При выполнении системных вызовов для ввода-вывода процессы ссылаются на эти структуры с помощью индексов в таблице файлов.
В то время как таблица файлов содержит список открытых файлов, контекст файловой системы применяется для запросов об открытии новых файлов. Здесь хранятся ссылки на текущую корневую (root) директорию и рабочую (default) директорию для поиска файлов.
Таблица обработчиков сигналов определяет подпрограммы в адресном пространстве процесса, которые должны быть вызваны при возникновении соответствующих сигналов.
Контекст виртуальной памяти процесса определяет все содержимое его персонального адресного пространства.
Процессы и потоки. Linux использует одно и то же внутреннее представление для процессов и потоков. Поток в Linux это новый процесс, который использует общее адресное пространство с процессом-родителем.
Различие проявляется только в случае, когда новый поток создается системным вызовом clone:
Использование системного вызова clone дает процессам возможность явного контроля над тем, какие ресурсы совместно используются потоками.
Напомним, счто планирование это распределение операционной системой процессорного времени между различными задачами. В то время как в большинстве ОС под планированием понимается запуск и приостановка процессов, в Linux планирование также включает выполнение различных задач ядра. Выполнение задач ядра включает как задания, запрошенные данным процессом, так и задания, исполняемые в процессе работы драйверов.
Запрос на исполнение в режиме ядра может возникнуть в двух случаях:
Синхронизация в ядре требует, чтобы критические секции ядра исполнялись без их прерывания другими критическими секциями.
Linux использует два метода для защиты критических секций:
Во избежание потери производительности, ядро Linux использует архитектуру синхронизации, которая позволяет большим критическим секциям исполняться без необходимости отключения прерываний на все время исполнения критической секции.
Службы обработки прерываний делятся на верхнюю половину (top half) и нижнюю половину (bottom half):
Эта архитектура дополняется механизмом для выбора нижних половин при исполнении обычного кода ядра.
На рис. 25.4 изображены уровни защиты прерываний.
Рис. 25.4. Уровни защиты прерываний.
Код каждого уровня может быть прерван кодом более высокого уровня, но никогда не будет прерван кодом того же или более низкого уровня.
Пользовательский процесс может быть всегда прерван другим процессом, если происходит прерывание для планирования в режиме разделения времени.
Linux использует два алгоритма планирования процессов:
Класс планирования процесса определяет, какой именно алгоритм применить.
Для процессов с разделением времени Linux использует алгоритм на основе доверия (credits) с приоритетами (priority). Правило credits := credits / 2 + priority учитывает как историю процесса, так и его приоритет. По такой системе автоматически определяются приоритеты интерактивных процессов или исполняющих ввод-вывод.
Linux реализует классы планирования: FIFO и round-robin; в обоих случаях каждый процесс имеет приоритет, а не только определенный класс планирования.
Планировщик запускает процесс с наивысшим приоритетом; для процессов с одним и тем же приоритетом, он исполняет процесс, который дольше всего ждал.
FIFO процессы исполняются до их завершения или блокировки.
round-robin процесс будет прерван через некоторое время и помещен в конец очереди планирования, так что RR-процессы одинакового приоритета автоматически разделяют время между собой.
Версия Linux 2.0 была первым ядром Linux, поддерживающим SMP-оборудование; различные процессы или потоки могут исполняться параллельно на нескольких процессорах.
Для соблюдения требований ядра об исполнении без прерываний, SMP накладывает следующее ограничение: не более чем один процесс в каждый момент может исполнять код в режиме ядра.
GNU General Public License (GPL) лицензия, согласно которой используется и распространяется Linux: программист, использующий Linux, либо создающий свои собственные системы на базе Linux, не имеет права превращать свой продукт в коммерческий; программное обеспечение, распространяемое на основе GPL, не может распространяться только в виде двоичного кода (т.е. в поставку Linux должен быть включен исходный код).
Загружаемый модуль ядра (loadable kernel module, LKM) механизм Linux, обеспечивающий возможность компиляции, загрузки и выгрузки отдельных модулей кода ядра, независимо от остальной части ядра.
Идентификатор процесса (PID) - уникальный идентификатор процесса (число), используемое для указания процессов в операционной системе.
Контекст процесса состояние исполняемой программы в любой момент времени; состоит из контекста планирования, контекста системы файлов, таблицы обработчиков сигналов и контекста виртуальной памяти.
Окружение процесса системная структура, состоящая из двух векторов, завершающихся нулями: вектор аргументов командной строки процесса и вектор (переменных) окружения процесса.
Система Linux популярная ОС, созданная в начале 1990-х гг. с целью разработки UNIX-совместимой ОС с открытым исходным кодом. Создатель Linux Линус Торвальдс. Основная часть Linux полностью оригинальна и не содержит ведомственного конфиденциального кода.
Linux использует разработки BSD UNIX, AT&T UNIX, библиотеку X Windows. Разработка Linux поддерживается сетью разработчиков, связанных через Интернет.
Дистрибутивы Linux имеют стандартный формат (RPM), что обеспечивает совместимость между многочисленными диалектами Linux.
Ядро Linux распространяется на условиях GNU General Public License, суть которых в том, что разработки на основе кода Linux нельзя использовать для коммерческих целей, и распространение ПО, разработанного на основе Linux, должно включать исходные коды.
Linux в основном используется как серверная ОС. Доля ее использования как клиентской ОС очень мала.
Linux свободно распространяемая полнофункциональная ОС с полным набором UNIX-совместимых инструментов. Обеспечивается совместимость с POSIX. Linux API соответствует UNIX SVR4, но не UNIX BSD.
Linux состоит из ядра, системных библиотек и системных утилит. Код ядра исполняется в привилегированном режиме. Системные библиотеки и утилиты исполняются в пользовательском режиме.
Важное новшество в Linux механизм динамически загружаемых модулей ядра, который дает возможность отдельно компилировать, загружать, запускать и выгружать модули ядра. Компоненты модуля ядра управление загрузкой модуля, регистрация драйверов и разрешение конфликтов.
Для управления процессами в Linux для каждого процесса создаются и используются его идентификация, окружение и контекст.
Для поддержки многопоточности в Linux используется системный вызов clone, который создает новый процесс в адресном пространстве процесса-родителя.
В отличие от многих ОС, планирование в Linux включает также и планирование задач ядра. Синхронизация в ядре требует, чтобы критическая секция одной части ядра не прерывалась другими критическими секциями.
При обработке прерываний все прерывания разделены на верхнюю половину (обычная обработка прерываний, с отключением рекурсивных прерываний) и нижнюю половину, исполняемую при включенном режиме прерываний с использованием мини-планировщика.
При планировании процессов в Linux учитываются кредиты и приоритеты. Используются классы планирования FIFO и round-robin.
Linux поддерживает симметричное мультипроцессирование (SMP).
Вопросы
Упражнения
Темы для курсовых работ, рефератов, эссе