Файл: А. В. Гордеев А. Ю. Молчанов системное программное обеспечение электронный вариант книги издательства Питер СанктПетербург Челябинск юургу каф. Автоматика и управление 2002 2 Предисловие Настоящий учебник.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.01.2024

Просмотров: 1040

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

238
♦ Найдите таблицы размещения файлов для двух разделов магнитного диска.
Сохраните их на дискете. Выйдите из программы Disk Editor.
♦ Запустите программу FDISK. Посмотрите структуру диска – сколько и ка- ких разделов на нём расположено?
♦ Удалите все логические диски с помощью программы FDISK.
♦ Перезапустите компьютер и убедитесь, что операционная система, распо- ложенная раньше на магнитном диске, больше не функционирует. Покажите пре- подавателю.
♦ Восстановите операционную систему и файлы, расположенные на магнит- ном диске, используя программу Disk Editor и файлы, которые вы ранее создали с её помощью. Покажите преподавателю.
ГЛАВА 5 Архитектура операционных систем и интерфейсы прикладного программирования
Несмотря на тот факт, что в наши дни уже практически никто не разрабатыва- ет операционные системы (естественно, за исключением нескольких известных компаний, специализирующихся на этом направлении, кстати, одном из сложней- ших) и все являются пользователями наиболее распространенных систем, мы всё- таки рассмотрим кратко вопросы архитектуры ОС. Сделать это необходимо пото- му, что многие возможности и характеристики ОС определяются в значительной мере её архитектурой.

239
Основные принципы построения
операционных систем
Среди множества принципов, которые используются при построении ОС, пе- речислим несколько наиболее важных (на наш взгляд, так как в соответствующих публикациях на эту тему перечисляется существенно большее их количество).
Принцип модульности
Под модулем в общем случае понимают функционально законченный элемент системы, выполненный в соответствии с принятыми межмодульными интерфей- сами. По своему определению модуль предполагает возможность без труда заме- нить его на другой при наличии заданных интерфейсов. Способы обособления со- ставных частей ОС в отдельные модули могут существенно различаться, но чаще всего разделение происходит именно по функциональному признаку. В значитель- ной степени разделение системы на модули определяется используемые методом проектирования ОС (снизу вверх или наоборот).
Особо важное значение при построении ОС имеют привилегированные, по-
вторно входимые и реентерабельные модули, так как они позволяют более эффек- тивно использовать ресурсы вычислительной системы. Как мы уже знаем (см. раз- дел «Основные виды ресурсов», глава 1), достижение реентерабельности реализу- ется различными способами. В некоторых системах реентерабельность программа получают автоматически, благодаря неизменяемости кодовых частей программ при исполнении (из-за особенностей системы команд машины), а также автоматиче- скому распределению регистров, автоматическому отделению кодовых частей про- грамм от данных и помещению последних в системную область памяти Естествен- но, что для этого необходима соответствующая аппаратная поддержка В других случаях это достигается программистами за счёт использования специальных сис- темных модулей.
Принцип модульности отражает технологические и эксплуатационные свойст- ва системы. Наибольший эффект от его использования достижим в случае, когда


240
принцип распространён одновременно на операционную систему, прикладные про- граммы и аппаратуру.
Принцип функциональной избирательности
В ОС выделяется некоторая часть важных модулей, которые должны постоян- но находиться в оперативной памяти для более эффективной организации вычис- лительного процесса. Эту часть в ОС называют ядром, так как это действительно основа системы. При формировании состава ядра требуется учитывать два проти- воречивых требования. В состав ядра должны войти наиболее часто используемые системные модули. Количество модулей должно быть таковым, чтобы объём памя- ти, занимаемый ядром, был бы не слишком большим. В состав ядра, как правило,
входят модули по управлению системой прерываний, средства по переводу про- грамм из состояния счёта в состояние ожидания, готовности и обратно, средства по распределению таких основных ресурсов, как оперативная память и процессор.
Помимо программных модулей, входящих в состав ядра и постоянно распола- гающихся в оперативной памяти, может быть много других системных программ- ных модулей, которые получают название транзитных. Транзитные программные модули загружаются в оперативную память только при необходимости и в случае отсутствия свободного пространства могут быть замещены другими транзитными модулями. В качестве синонима к термину «транзитный» можно использовать тер- мин «диск-резидентный».
Принцип генерируемости ОС
Основное положение этого принципа определяет такой способ исходного представления центральной системной управляющей программы ОС (её ядра и ос- новных компонентов, которые должны постоянно находиться в оперативной памя- ти), который позволял бы настраивать эту системную супервизорную часть, исходя из конкретней конфигурации конкретного вычислительного комплекса и круга ре- шаемых задач. Эта процедура проводится редко, перед достаточно протяженным периодом эксплуатации ОС. Процесс генерации осуществляется с помощью специ-

241
альной программы-генератора и соответствующего входного языка для этой про- граммы, позволяющего описывать программные возможности системы и конфигу- рацию машины. В результате генерации получается полная версия ОС. Сгенериро- ванная версия ОС представляет собой совокупность системных наборов модулей и данных.
Упомянутый раньше принцип модульности положительно проявляется при генерации ОС. Он существенно упрощает настройку ОС на требуемую конфигура- цию вычислительной системы. В наши дни при использовании персональных ком- пьютеров с принципом генерируемости ОС можно столкнуться разве что только при работе с Linux. В этой UNIX-системе имеется возможность не только исполь- зовать какое-либо готовое ядро ОС, но и самому сгенерировать (скомпилировать)
такое ядро, которое будет оптимальным для данного конкретного персонального компьютера и решаемых на нем задач. Кроме генерации ядра в Linux имеется воз- можность указать и набор подгружаемых драйверов и служб, то есть часть функ- ций может реализовываться модулями, непосредственно входящими в ядро систе- мы, а часть – модулями, имеющими статус подгружаемых, транзитных.
В остальных современных распространенных ОС для персональных компью- теров конфигурирование ОС под соответствующий состав оборудования осущест- вляется на этапе инсталляции, а потом состав драйверов и изменение некоторых параметров ОС может быть осуществлено посредством редактирования конфигу- рационного файла.
Принцип функциональной избыточности
Этот принцип учитывает возможность проведения одной и той же работы раз- личными средствами. В состав ОС может входить несколько типов мониторов (мо- дулей супервизора, управляющих тем или другим видом ресурса), различные сред- ства организации коммуникаций между вычислительными процессами. Наличие нескольких типов мониторов, нескольких систем управления файлами позволяет пользователям быстро и наиболее адекватно адаптировать ОС к определенной конфигурации вычислительной системы, обеспечить максимально эффективную


242
загрузку технических средств при решении конкретного класса задач, получить максимальную производительность при решении заданного класса задач.
Принцип виртуализации
Построение виртуальных ресурсов, их распределение и использование теперь используется практически в любой ОС. Этот принцип позволяет представить структуру системы в виде определенного набора планировщиков процессов и рас- пределителей ресурсов (мониторов) и использовать единую централизованную схему распределения ресурсов. Наиболее естественным и законченным проявлени- ем концепции виртуальности является понятие виртуальной машины. По сути, лю- бая операционная система, являясь средством распределения ресурсов и организуя по определенным правилам управление процессами, скрывает от пользователя и его приложений реальные аппаратные и иные ресурсы, заменяя их некоторой абст- ракцией. В результате пользователи видят и используют виртуальную машину как некое устройство, способное воспринимать их программы, написанные на опреде- лённом языке программирования, выполнять их и выдавать результаты. При таком языковом представлении пользователя совершенно не интересует реальная конфи- гурация вычислительной системы, способы эффективного использования её ком- понентов и подсистем. Он мыслит и работает с машиной в терминах используемо- го им языка и тех ресурсов, которые ему предоставляются в рамках виртуальной машины.
Чаще виртуальная машина, предоставляемая пользователю, воспроизводит ар- хитектуру реальной машины, но архитектурные элементы в таком представлении выступают с новыми или улучшенными характеристиками, часто упрощающими работу с системой. Характеристики могут быть произвольными, но чаще всего пользователи желают иметь собственную «идеальную» по архитектурным характе- ристикам машину в следующем составе:
♦ единообразная по логике работы память (виртуальная) практически неогра- ниченного объёма. Среднее время доступа соизмеримо со значением этого пара- метра оперативной памяти. Организация работы с информацией в такой памяти

243
производится в терминах обработки данных – в терминах работы с сегментами данных на уровне выбранного пользователем языка программирования;
♦ произвольное количество процессоров (виртуальных), способных работать параллельно и взаимодействовать во время работы. Способы управления процес- сорами, в том числе синхронизация и информационные взаимодействия, реализо- ваны и доступны пользователям на уровне используемого языка в терминах управ- ления процессами;
♦ произвольное количество внешних устройств (виртуальных), способных ра- ботать с памятью виртуальной машины параллельно или последовательно, асин- хронно или синхронно по отношению к работе того или иного виртуального про- цессора, которые инициируют работу этих устройств. Информация, передаваемая или хранимая на виртуальных устройствах, не ограничена допустимыми размера- ми. Доступ к такой информации осуществляется на основе либо последовательно- го, либо прямого способа доступа в терминах соответствующей системы управле- ния файлами. Предусмотрено расширение информационных структур данных, хра- нимых на виртуальных устройствах.
Степень приближения к «идеальной» виртуальной машине может быть боль- шей или меньшей в каждом конкретном случае. Чем больше виртуальная машина,
реализуемая средствами ОС на базе конкретной аппаратуры, приближена к «иде- альной» по характеристикам машине и, следовательно, чем больше ее архитектур- но-логические характеристики отличны от реально существующих, тем больше степень виртуальности у полученной пользователем машины. Одним из аспектов виртуализации является организация возможности выполнения в данной ОС при- ложений, которые разрабатывались для других ОС. Другими словами, речь идет об организации нескольким операционных сред, о чем мы уже говорили (см. главу 1).
Реализация этого принципа позволяет такой ОС иметь очень сильное преимущест- во перед аналогичными ОС, не имеющими такой возможности. Примером реализа- ции принципа виртуализации может служить VDM-машина (virtual DOS machine) –
защищённая подсистема, предоставляющая полную среду MS-DOS и консоль для выполнения MS-DOS приложений. Одновременно может выполняться практически


244
произвольное число VDM-сессий. Такие VDM-машины имеются и в системах Mi- crosoft Windows, и в OS/2.
Принцип независимости программ от внешних устройств
Этот принцип реализуется сейчас в подавляющем большинстве ОС общего применения. Мы уже говорили о нём, рассматривая принципы организации вво- да/вывода. Пожалуй, впервые наиболее последовательно данный принцип был реа- лизован в ОС UNIX. Реализован он и в большинстве современных ОС для ПК. На- помним, этот принцип заключается в том, что связь программ с конкретными уст- ройствами производится не на уровне трансляции программы, а в период планиро- вания её исполнения. В результате перекомпиляция при работе программы с новым устройством, на котором располагаются данные, не требуется.
Принцип позволяет одинаково осуществлять операции управления внешними устройствами независимо от их конкретных физических характеристик. Например,
программе, содержащей операции обработки последовательного набора данных,
безразлично, на каком носителе эти данные будут располагаться. Смена носителя и данных, размещаемых на них (при неизменности структурных характеристик дан- ных), не принесёт каких-либо изменений в программу, если в системе реализован принцип независимости.
Принцип совместимости
Одним из аспектов совместимости является способность ОС выполнять про- граммы, написанные для других ОС или для более ранних версий данной операци- онной системы, а также для другой аппаратной платформы.
Необходимо разделять вопросы двоичной совместимости и совместимости на уровне исходных текстов приложений. Двоичная совместимость достигается в том случае, когда можно взять исполняемую программу и запустить её на выполнение на другой ОС. Для этого необходимы: совместимость на уровне команд про- цессора, совместимость на уровне системных вызовов и даже на уровне библио- течных вызовов, если они являются динамически связываемыми.

245
Совместимость на уровне исходных текстов требует наличия соответствую- щего транслятора в составе системного программного обеспечения, а также со- вместимости на уровне библиотек и системных вызовов. При этом необходима пе- рекомпиляция имеющихся исходных текстов в новый выполняемый модуль. Го- раздо сложнее достичь двоичной совместимости между процессорами, основанны- ми на разных архитектурах. Для того чтобы один компьютер выполнял программы другого (например, программу для ПК типа IBM PC желательно выполнить на ПК
типа Macintosh фирмы Apple), этот компьютер должен работать с машинными ко- мандами, которые ему изначально непонятны. В таком случае процессор типа
680х0 (или PowerPC) на Mac должен исполнять двоичный код, предназначенный для процессора i80x86. Процессор 80х86 имеет свои собственные дешифратор ко- манд, регистры и внутреннюю архитектуру. Процессор 680х0 не понимает двоич- ный код 80х86, поэтому он должен выбрать каждую команду, декодировать её,
чтобы определить, для чего она предназначена, а затем выполнить эквивалентную подпрограмму, написанную для 680х0. Так как к тому же у 680х0 нет в точности таких же регистров, флагов и внутреннего арифметико-логического устройства,
как в 80х86, он должен имитировать все эти элементы с использованием своих ре- гистров или памяти. И он должен тщательно воспроизводить результаты каждой команды, что требует специально написанных подпрограмм для 680х0, гаранти- рующих, что состояние эмулируемых регистров и флагов после выполнения каж- дой команды будет в точности таким же, как и на реальном 80х86. Выходом в та- ких случаях является использование так называемых прикладных сред или эмуля- торов. Учитывая, что основную часть программы, как правило, составляют вызовы библиотечных функций, прикладная среда имитирует библиотечные функции це- ликом, используя заранее написанную библиотеку функций аналогичного назначе- ния, а остальные команды эмулирует каждую по отдельности.
Одним из средств обеспечения совместимости программных и пользователь- ских интерфейсов является соответствие стандартам POSIX. Использование стан- дарта POSIX позволяет создавать программы в стиле UNIX, которые впоследствии могут легко переноситься из одной системы в другую.


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

247
чить те части кода, которые непосредственно взаимодействуют с аппаратными средствами. Зависимость от аппаратуры может иметь много форм. Некоторые оче- видные формы зависимости включают прямое манипулирование регистрами и дру- гими аппаратными средствами. Наконец, если аппаратно-зависимый код не может быть полностью исключен, то он должен быть изолирован в нескольких хорошо локализуемых модулях. Аппаратно-зависимый код не должен быть распределен по всей системе. Например, можно спрятать аппаратно-зависимую структуру в про- граммно задаваемые данные абстрактного типа. Другие модули системы будут ра- ботать с этими данными, а не с аппаратурой, используя набор некоторых функций.
Когда ОС переносится, то изменяются только эти данные и функции, которые ими манипулируют.
Введение стандартов POSIX преследовало цель обеспечить переносимость создаваемого программного обеспечения.
Принцип обеспечения безопасности вычислений
Обеспечение безопасности при выполнении вычислений является желатель- ным свойством для любой многопользовательской системы. Правила безопасности определяют такие свойства, как защита ресурсов одного пользователя от других и установление квот по ресурсам для предотвращения захвата одним пользователем всех системных ресурсов (таких, как память).
Обеспечение защиты информации от несанкционированного доступа являет-
ся обязательной функцией сетевых операционных систем. Во многих современ- ных ОС гарантируется степень безопасности данных, соответствующая уровню С2
в системе стандартов США. Основы стандартов в области безопасности были за- ложены в документе «Критерии оценки надёжных компьютерных систем». Этот документ, изданный Национальным центром компьютерной безопасности (NCSC –
National Computer Security Center) в США в 1983 году, часто называют Оранжевой книгой.
В соответствии с требованиями Оранжевой книги безопасной считается сис- тема, которая «посредством специальных механизмов защиты контролирует доступ