Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособение для экзамена.pdf
Скачиваний:
3
Добавлен:
16.05.2024
Размер:
1.02 Mб
Скачать

безопасности, которые будут обсуждены ниже, должно проводиться с большой осторожностью.

4.6.Linux

Linux — это вариант системы UNIX, однако существует множество других версий и вариантов UNIX, включая AIX, FreeBSD, HP-UX, SCO UNIX, System V, Solaris и др. К

счастью, фундаментальные принципы и системные вызовы для всех этих систем во многом совпадают (это обусловлено их дизайном). Более того, сходными являются общие стратегии реализации, алгоритмы и структуры данных, хотя имеются и некоторые различия. Чтобы примеры были конкретными, лучше всего выбрать одну из них и последовательно описать ее. Поскольку большинство пользователей вероятнее всего сталкивались именно с Linux (а не с другими версиями), то именно ее мы и будем использовать в качестве примера - однако не будем забывать, что, за исключением информации по реализации, большая часть описания применима ко всем. Linux может быть установлена на очень широкий спектр компьютерных платформ – начиная с мобильных телефонов и заканчивая суперкомпьютерами. Наиболее часто Linux используется в Интернет серверах – примерно 70 – 80 % всех серверов, десять наиболее быстрых суперкомпьютеров используют Linux да и в целом 90% всех суперкомпьютеров также используют Linux.

Первая версия 0.01 операционной системы Linux была выпущена в 1991 году, когда финский студент Линус Торвалдс создал первое ядро. Linux имеет монолитный тип ядра. Linux является модульной UNIX-подобной системой. Ядро ОС осуществляет контроль над процессами, сетевыми операциями, периферийными устройствами и файловой системой. Драйвера устройств или интегрируются непосредственно в ядро или добавляются как модули, подгружаемые в процессе работы ОС по необходимости. В Linux активно используется система, называемая «пользовательским пространством», которая играет важную роль в ОС. Под этим подразумевают различные процессы и библиотеки, запускаемые в адресном пространстве за пределами адресного пространства ядра и которые ОС использует для взаимодействия с ядром. Графический интерфейс системы базируется на X Window системе.

Операционная система Linux развилась в полноценный клон UNIX с виртуальной памятью, более сложной файловой системой и многими другими дополнительными

59

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

Номер версии ядра Linux состоит из четырех чисел: A.B.C.D (например, 2.6.9.11). Первое число обозначает версию ядра. Второе число обозначает основную версию. До ядра 2.6 четные номера версии обозначали стабильную версию ядра, а нечетные — нестабильную (находящуюся в разработке). Начиная с версии ядра 2.6 это не так. Третье число обозначает номер ревизии (например, добавлена поддержка новых драйверов). Четвертое число обозначает исправление ошибок.

Важной особенностью Linux, например, по сравнению с MS Windows, является возможность настройки ядра ОС. Более того, пользователь может периодически загружать самые свежие версии ядер из Интернета и устанавливать их. Настройка ядра позволяет серьезно оптимизировать функционирование компьютерной системы применительно к имеющейся конфигурации аппаратуры и выполняемым задачам. Конечно, самостоятельная конфигурация и сборка ядра подразумевает определенный уровень компьютерных знаний и опыта.

В систему Linux была перенесена внушительная часть стандартного программного обеспечения UNIX, включая оконную систему X Windows и большое количество сетевого программного обеспечения. Пользователь работает в системе на основе двух интерфейсов. Это интерфейс командной строки и графический. Необходимо отметить, что Linux будет полноценно работать даже только при наличии командной строки. Графический интерфейс может быть запущен при желании дополнительно. Однако можно настроить систему таким образом, что он будет загружаться по умолчанию. Графический интерфейс на основе X Windows взаимодействует с оконным менеджером, который является конечным слоем для организации контакта с пользователем. Основные оконные менеджеры на сегодняшний день это: GNOME и KDE. Они являются полноценными системами, сравнимыми по дизайну, а зачастую и превышающими по возможностям ОС семейства MS Windows. Кроме того существует достаточно большой набор более облегченных оконных менеджеров. Достоинством ОС Linux является то, что пользователь может сам выбрать тип интерфейса и вид оконного менеджера.

Особенностью Linux является ее бесплатное программное обеспечение. Система Linux поставляется вместе с лицензией GPL. GPL расшифровывается как «GNU

60

публичная лицензия», которая во всем мире используется для лицензирования свободно распространяемых программных продуктов. Эта лицензия указывает, что вы можете и чего не можете делать с кодом. Пользователи могут бесплатно использовать, копировать, модифицировать и распространять исходные коды и двоичные файлы. Основное ограничение касается отдельной продажи или распространения двоичного кода без исходных текстов. Исходные коды должны либо поставляться вместе с двоичными файлами, либо предоставляться по требованию. Сам же проект GNU основан в 1983 году. Его целью являлось создание UNIXподобной ОС, состоящей только из свободно распространяемых программных продуктов. Таким образом, ОС Linux разрабатывается только на основе усилий добровольцев. В тоже время многие крупные корпорации на добровольной основе вносят свой программный код в систему Linux. Весь программный код системы и прикладных программ, следуя лицензии GPL, является открытым и может быть проанализирован, что является важным с точки зрения компьютерной безопасности.

Linux старается поддерживать стандарты POSIX, ANSI и другие, если это возможно. Существуют разные дистрибутивы Linux. Наиболее известные: Debian, Ubuntu, openSUSE, Mandriva, Slackware, Archlinux, RedHat/Fedora/CentOS и т.д.. Под дистрибутивом здесь понимается проект, который управляет удаленной коллекцией системных программ, пакетов приложений, доступных для загрузки и установки через Интернет. Дистрибутивы поддерживаются добровольцами через самоорганизующиеся группы. Дистрибутивы используют специальные менеджеры управления установкой - удаления программных пакетов.

Linux поддерживает большое количество программных языков. Основная часть является компиляторами из так называемой GNU коллекции. Она включает в себя языки С/С+, Java, Pascal, Fortran, Ada. Кроме того существует большой набор коммерческих компиляторов, поддерживающих Linux. Многие программные продукты, используемые под MS Windows , также имеют свою версию под Linux. Интересной особенностью Linux является также то, что после установки дистрибутива, пользователь может обновлять любые его компоненты часто независимо от остальных. Более того, для этого нет необходимости использовать дистрибутив, а можно обращаться напрямую на сайт разработчиков.

До ядра 2.6.23 в Linux был реализован алгоритм О(1) планирования выполнения процессов [24]. Этот алгоритм является статическим, т.е время, затрачиваемое на выбор процесса для выполнения, постоянно и не зависит от числа процессов в системе в данный

61

момент. Таким образом, функционирование системы планирования процессов хорошо масштабируется и использует очень малые накладные расходы в функционировании ОС.

С ядра 2.6.23 по настоящий момент в Linux используется алгоритм «полностью честного планирования» процессов. Основная цель данного алгоритма максимизировать использование процессора одновременно максимизировав интерактивные свойства системы. Алгоритм сохраняет записи по планируемым процессам в бинарном дереве особого типа, называемом «красно-черное», которое обеспечивает честность выбора. Этот тип деревьев является самобалансирующимся. Т.е. в дереве всегда не существует такого пути, который бы был длиннее более чем в два раза, чем другие. Второе свойство «красно-черного» дерева в том, что операции над ним занимают времени О(log(N)) (N – количество узлов в дереве). Т.е. вставка или удаление задач проходит достаточно быстро.

Потраченное время каждого процесса на CPU используется как ключ для сортировки дерева. Это позволяет очень быстро находить задачи, которые использовали наименьшее количество процессорного времени, т.к. они занимают самые крайние левые позиции. После выполнения на CPU выбранного из бинарного дерева приложения в течение некоторого времени до выбора следующей наиболее приоритетной по данному алгоритму задачи его информация о затраченном времени изменяется и, следовательно, его позиция в бинарном дереве так же модифицируется. После этого опять выбирается процесс с наименьшим затраченным процессорным временем и итерация повторяется. Таким образом, каждая выполняемая задача как бы преследует другие, для поддержания баланса времени выполнения по всем процессам в системе. Если задача тратит много времени на ожидание или сон, то ее потраченное процессорное время будет наименьшим, и она получит автоматически увеличение приоритета при выборе. Следовательно, такие задачи не получат меньше процессорного времени, чем постоянно выполняемые процессы. Таким образом, интерактивные задачи, которые часто проводят время в ожидании ввода от пользователя, получают справедливое разделение процессорных ресурсов, когда они им необходимы. Сложность данного алгоритма оценивается как О(1) при выборе процесса на выполнение, т.е. постоянное время как и в предыдущем алгоритме. Но для изменения позиции задачи после выполнения сложность является О(log(N)) (N – количество процессов в системе в данный момент времени) из-за операций с бинарным деревом. Что интересно, в алгоритме отсутствуют временные кванты, т.к. они варьируются. Основой этого является установка достаточно малого времени проверки (наносекунды) состояния выполняемой задачи и следующего процесса в бинарном дереве для выполнения.

62

Приоритеты используются в алгоритме планирования косвенным образом. Они применяются для установки фактора угасания возможности задачи быть выбранной для выполнения. У низко приоритетных задач угасание происходит быстрее, и они имеют меньше шансов быть выбранными. Необходимо помнить, что Linux является, в силу своей специфики, достаточно динамично развивающейся системой. Поэтому используемый в настоящее время алгоритм планирования задач не является догмой и может быть изменен в будущем на более эффективный.

Достаточно интересно организован механизм образования нового процесса в Linux и в других UNIX подобных системах. Когда процесс создает новый процесс, он вызывает системный вызов fork(). При выполнении fork() создается дескриптор создаваемого процесса и его идентификационный номер. Происходит копирование значений дескриптора родительского процесса в дочерний. На этой стадии адресное пространство родительского процесса не копируются, а оба процесса разделяют одно и тоже адресное пространство. Системный вызов exec() копирует новую программу в адресное пространство дочернего процесса. Т.к. оба процесса разделяют одно и то же пространство, запись новой программы вызывает страничную ошибку памяти. В этот момент ядро ОС назначает новые физические страницы памяти для дочернего процесса. Когда выполнение дочернего процесса закончено, то выполняется системный вызов exit(), который очищает данные процесса и уведомляет родительский процесс о завершении дочернего. В этот момент дочерний процесс называется «зомби». Дочерний процесс не будет полностью удален до уведомления родительского процесса через системный вызов wait(). Как только родительский процесс получает уведомление о завершении работы дочернего, он удаляет его данные и дескриптор процесса – рис. 12.

 

wait()

 

родительский

родительский

 

процесс

 

процесс

 

 

 

fork()

 

 

дочерний

 

дочерний

 

зомби

процесс

exec()

процесс

exit()

процесс

 

 

 

Рис. 12. Жизненный путь типичного процесса в ОС Linux.

63

Каждый процесс системы Linux на 32-разрядной машине обычно получает 3 Гбайт виртуального адресного пространства для себя, а оставшийся 1 Гбайт памяти резервируется для данных ядра. 1 Гбайт ядра не виден в пользовательском режиме. Распределение памяти для 32-х и 64-х разрядных версий приведено на рис 13 .

4 Гб

16 ЕБ

компоненты

компоненты

ядра ОС

ядра ОС

3 Гб

512 Гб

 

или

 

больше

Прикладные

Прикладные

программы

программы

а)

б)

Рис. 13 . Распределение памяти для 32-х (а) и 64-х (б) разрядных версий ОС Linux.

Здесь ЕБ обозначает величину эксабайт, что соответствует значению 1018 байт. Видно, что 64-х разрядная версия предоставляет практически неограниченное на сегодняшний день адресное пространство.

Linux отслеживает использование физической памяти, выделяет при

необходимости дополнительную память пользовательским процессам и компонентам

64

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

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

Важной особенностью Linux по сравнению с другими ОС, например, MS Windows является поддержка большого количества файловых систем. Современные ядра ОС Linux поддерживают практически все существующие на сегодняшний день файловые системы. Оригинальными файловыми системами Linux являются Ext2, Ext3, Ext4 и ReiserFS. Последние три есть журнальные файловые системы. В основе работы ядра с файлами лежит виртуальная файловая система, концепция которой представлена на рис. 14.

При использовании ОС типа Linux для задач ЯЭ необходимо помнить о всех плюсах и минусах. Существенным достоинством является полная открытость исходных кодов и лицензионная чистота. Также в мире существует гораздо меньшее количество вирусов для UNIXподобных систем. Опыт использования Linux для суперкомпьютеров и корпоративных систем показывает ее отличную масштабируемость и быстродействие. Использование семейства компиляторов GNU позволяет разрабатывать лицензионно чистые программные продукты. В мире имеется большой положительный опыт использования Linux в ЯЭ. Это упомянутая выше платформа для АСУТП, использование для тренажеров, применение на БЩУ (блочный щит управления).

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

65

приложение - cp

системный вызов – open(), read(), write()

Виртуальная файловая система – преобразование для каждой поддерживаемой файловой системе

ext2

ext3

XFS

JFS

ReisorFS

VFAT

NTFS

proc

Рис. 14. Концепция виртуальной файловой системы Linux.

Контрольные вопросы:

1.В каких случаях на современных компьютерах используют DOS?

2.Какие файлы необходимы для загрузки DOS?

3.Что применяют в DOS для запуска программ с большими требованиями по памяти?

4.Что я вилось причиной возникновения WINDOWS?

5.Основной недостаток WINDOWS 3.1 и причины возникновения семейства

WINDOWS 9х.

6.Как происходило развитие ОС WINDOWS NT?

7.Какие основные особенности ОС WINDOWS NT наиболее важно учитывать при применении в ядерной энергетике?

8.Основные особенности ОС LINUX.

9.Что такое процесс в LINUX?

10.Какие виды процессов в LINUX вы знаете?

11.Как осуществляется создание и развития процесса в LINUX?

12.Какие графические оболочки в LINUX вы знаете?

13.Различие WINDOWS и LINUX с точки зрения поддержки файловых систем.

66