ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.12.2021
Просмотров: 12144
Скачиваний: 10

Примеры операционных систем 483
UNIX изначально должен был быть маленькой системой, чтобы достигнуть
увеличения надежности и высокой производительности. Первые версии UNIX
были полностью текстовыми и использовали терминалы, которые могли отобра-
жать 24 или 25 строк по 80 символов ASCII-кодов. Пользовательским интерфей-
сом управляла программа, так называемая
оболочка,
которая предоставляла ин-
терфейс командной строки. Поскольку оболочка не являлась частью ядра, было
легко добавлять новые оболочки в UNIX, и с течением времени было придумано
несколько черезвычайно сложных оболочек.
Позднее, когда появились графические терминалы, в Массачусетском техно-
логическом институте для UNIX была разработана система
X Windows.
Еще поз-
же полностью доработанный
графический интерфейс пользователя
под названи-
ем
Motif
был установлен поверх X Windows. Поскольку требовалось сохранить
маленькое ядро, практически весь код системы X Windows и Motif работают в пользо-
вательском режиме вне ядра.
Windows NT
Первая машина IBM PC, выпущенная в 1981 году, была оснащена 16-битной опе-
рационной системой индивидуального пользования, работающей в реальном ре-
жиме, с командной строкой. Она называлась MS-DOS 1.0. Эта операционная сис-
тема состояла из находящейся в памяти программы на 8 Кбайт. Через два года
появилась более мощная система на 24 Кбайт — MS-DOS 2.O. Она содержала про-
цессор командной строки (оболочку) с рядом особенностей, заимствованных из
системы UNIX. В 1984 году компания IBM выпустила машину PC/AT с операци-
онной системой MS-DOS 3.0, размер которой к тому моменту составлял 36 Кбайт.
С годами у системы MS-DOS появлялись все новые и новые особенности, но она
при этом оставалась системой с командной строкой.
Вдохновленная успехом Apple Macintosh, компания Microsoft решила создать
графический пользовательский интерфейс, который она назвала
Windows.
Пер-
вые три версии Windows, включая систему Windows 3.x, были не настоящими опе-
рационными системами, а графическими пользовательскими интерфейсами на базе
MS-DOS. Все программы работали в одном и том же адресном пространстве, и ошиб-
ка в любой из них могла привести к остановке всей системы.
В 1995 году появилась система Windows 95, но это не устранило MS-DOS, хотя
MS-DOS уже представляла собой новую версию 7.0. Windows 95 и MS-DOS 7.0
в совокупности включали в себя особенности развитой операционной системы,
в том числе виртуальную память, управление процессами и мультипрограммиро-
вание. Однако операционная система Windows 95 не была полностью 32-битной
программой. Она содержала большие куски старого 16-битного кода и все еще
использовала файловую систему MS-DOS со всеми ограничениями. Единствен-
ным изменением в системе файлов было добавление длинных имен файлов (ранее
в MS-DOS длина имен файлов была не более 8+3 символов).
Даже при выпуске Windows 98 в 1998 году система MS-DOS все еще присут-
ствовала (на этот раз версия 7.1) и включала 16-битный код. Система Windows 98
не очень отличалась от Windows 95, хотя часть функций перешла от MS-DOS к Win-
dows и формат дисков, подходящий для дисков большего размера, стал стандарт-
ным. Основным различием был пользовательский интерфейс, который объединил
рабочий стол, Интернет, телевидение и сделал систему более закрытой. Именно

4 8 4 Глава 6. Уровень операционной системы
это и привлекло внимание судебного департамента США, который тогда подал на
компанию Microsoft в суд, обвинив ее в незаконном монополизме.
Во время всех этих преобразований компания Microsoft разрабатывала совер-
шенно новую 32-битную операционную систему, которая была написана заново с нуля.
Эта новая система называлась
Windows New Technology
(новая технология) или
Windows NT
1
.
Изначально предполагалось, что она заменит все другие операци-
онные системы компьютеров на базе процессоров Intel, но она очень медленно рас-
пространялась и позднее была переориентирована на более дорогостоящие компью-
теры. Постепенно она стала пользоваться популярностью и в других кругах.
NT продается в двух вариантах: для серверов и для рабочих станций. Эти две
версии практически идентичны и выработаны из одного исходного кода. Первая
версия предназначена для локальных файловых серверов и серверов для печати и
имеет более сложные особенности управления, чем версия для рабочих станций,
которая предназначена для настольных вычислений одного пользователя. Существу-
ет особый вариант версии для серверов, предназначенный для больших сайтов. Раз-
личные версии настраиваются по-разному, и каждая из них оптимизирована для
ожидаемого окружения. Во всем остальном эти версии сходны. Практически все
выполняемые файлы идентичны для всех версий. Система NT сама определяет
свою версию по специальной переменной во внутренней структуре данных (сис-
темный реестр). Пользователям запрещено изменять эту переменную и таким об-
разом превращать дешевую версию для рабочей станции в более дорогостоящую
версию для сервера или в версию для предприятия. В дальнейшем мы не будем
заострять внимание на различиях.
MS-DOS и все предыдущие версии Windows были рассчитаны на одного пользо-
вателя. NT поддерживает мультипрограммирование, поэтому на одной и той же
машине в одно и то же время могут работать несколько пользователей
2
. Например,
сетевой сервер позволяет нескольким пользователям входить в систему по сети од-
новременно, причем каждый из них получает доступ к своим собственным файлам.
NT представляет собой реальную 32-битную операционную систему с мульти-
программированием. Она поддерживает несколько пользовательских процессов,
каждый из которых имеет в своем распоряжении полное 32-битное виртуальное
адресное пространство с подкачкой страниц по требованию. Кроме того, сама сис-
тема написана как 32-битный код.
NT, в отличие от Windows 95, имеет модульную структуру. Она состоит из
небольшого ядра, которое работает в привилегированном режиме, и нескольких
обслуживающих процессов, работающих в пользовательском режиме. Пользо-
1
Работы над операционной системой, получившей впоследствии название Windows NT, начались
в рамках совместного проекта по созданию новой 32-битной версии операционной системы OS/2,
который одно время осуществляли компании IBM и Microsoft после ряда неудач с предыдущей
16-битной версией системы OS/2. Этот проект, ориентированный на возможности микропроцессора
5386, начался в 1989 году, однако уже в следующем году пути этих компаний разошлись, и Microsoft,
продолжившая работу над системой OS/2 v.3.0, затем дала ей имя Windows NT, желая этим показать
и использование единого графического интерфейса со своими популярными одноименными оболоч-
ками, и дистанцирование от компании IBM. —
Примеч. научн. ред.
2
Необходимо заметить, что, в отличие от UNIX, Windows NT не позволяет нескольким пользователям
одновременно работать с компьютером, поскольку это однотерминальная система, тогда как UNIX —
это мультитерминальная операционная система. Однако по сети с ней могут одновременно взаимо-
действовать несколько пользователей, работающих на своих компьютерах. —
Примеч. научн. ред.

Примеры операционных систем
4 8 5
вательские процессы взаимодействуют с обслуживающими процессами с приме-
нением модели клиент—сервер: клиент посылает запрос серверу, а сервер выпол-
няет работу и отправляет результат клиенту. Модульная структура позволяет пе-
реносить систему NT на некоторые компьютеры не из семейства Intel (DEC Alpha,
IBM Power PC и SGI MIPS). Однако из соображений повышения производитель-
ности начиная с NT 4.0 большая часть системы была перенесена обратно в ядро.
Можно до бесконечности долго рассказывать, какова структура NT и каков ее
интерфейс. Поскольку нас в первую очередь интересует виртуальная машина, пред-
ставленная различными операционными системами, мы кратко расскажем о струк-
туре системы, а затем перейдем к интерфейсу.
Структура NT показана на рис. 6.25. Она состоит из ряда модулей, которые рас-
положены по уровням. Их совместная работа реализует операционную систему.
Каждый модуль выполняет определенную функцию и имеет определенный ин-
терфейс с другими модулями. Практически все модули написаны на языке С, хотя
часть графического интерфейса написана на C++, а кое-что из самых нижних уров-
ней — на ассемблере.
В самом низу расположен
уровень аппаратных абстракций.
Он должен снаб-
жать операционную систему абстрактными аппаратными устройствами, лишен-
ными всех недостатков, которых у реального аппаратного обеспечения в избытке.
К моделируемым устройствам относятся кэш-память вне кристалла, тактовые
генераторы, шины ввода-вывода, контроллеры прерываний и контроллеры пря-
мого доступа к памяти. Если эти устройства представить перед операционной
системой в идеализированном виде, то это упростит перенос NT на другие аппа-
ратные платформы, поскольку большая часть необходимых изменений концент-
рируется в одном месте.
Программа POSIX
Подсистема POSIX
Программа Win32
Подсистема Win32
Программа OS/2
Подсисте>ма OS/2
Системный интерфейс
Системные службы
Ввод-
вывод
Кэш
файлов
Системы
файлов
Виртуальная
память
Процессы
и потоки
Защита
Управление объектами
Драйверы устройств
Микроядро
Уровень аппаратных абстракций
Win32
и интерфейс
графических
устройств
Аппаратное обеспечение
S
а.
Рис. 6.25.
Структура Windows NT

4 8 6 Глава 6. Уровень операционной системы
Над уровнем аппаратных абстракций расположен уровень, содержащий мик-
роядро и драйверы устройств. Микроядро и все драйверы устройств имеют пря-
мой доступ к аппаратному обеспечению, поскольку они содержат зависимый от
аппаратного обеспечения код.
Микроядро
поддерживает примитивные объекты ядра, обработку прерываний,
ловушек, исключений, синхронизацию процессов, синхронизацию работы процес-
соров в многопроцессорных системах и управление временем. Основная задача
этого уровня — сделать остальную часть операционной системы полностью неза-
висимой от аппаратного обеспечения и, следовательно, высокомобильной. Мик-
роядро постоянно находится в основной памяти и никуда не передается, хотя оно
временно может передать управление прерываниям ввода-вывода.
Каждый
драйвер устройств
может управлять одним или несколькими устрой-
ствами ввода-вывода. Кроме того, драйвер устройств может выполнять какие-то
функции, не связанные с конкретным устройством, например шифровку потока
данных или даже обеспечение доступа к структурам данных ядра. Так как пользо-
ватели имеют возможность устанавливать новые драйверы устройств, они могут
повлиять на ядро и испортить всю систему. По этой причине драйверы нужно пи-
сать с особой осторожностью.
Над микроядром и драйверами устройств находится исполняющая система.
Исполняющая система
— независимая архитектура, поэтому ее можно переносить
на другие машины. Она состоит из трех уровней.
Самый нижний уровень содержит файловые системы и диспетчер объектов.
Файловые системы
управляют использованием файлов и директорий.
Диспетчер
объектов
управляет объектами, известными ядру (процессами, потоками, директо-
риями, семафорами, устройствами ввода-вывода, тактовыми генераторами и т. п.).
Эта программа также управляет пространством имен, куда можно помещать новые
объекты, чтобы обращаться к ним позже в случае необходимости.
Следующий уровень состоит из 6 основных частей, как показано на рис. 6.25.
Диспетчер ввода-вывода
обеспечивает структуру для управления устройствами
ввода-вывода, а также общими службами ввода-вывода. Диспетчер ввода-вывода
использует службы файловой системы, которая, в свою очередь, использует драй-
веры устройств, а также службы диспетчера объектов.
Диспетчер кэш-памяти
хранит в памяти блоки с диска, которые недавно ис-
пользовались, чтобы повысить скорость доступа к ним, если они понадобятся сно-
ва. Диспетчер кэш-памяти должен вычислять, какие блоки могут понадобиться
снова, а какие — нет. Можно конфигурировать NT с несколькими системами фай-
лов. В этом случае диспетчер кэш-памяти работает на все системы файлов, поэтому
отдельный диспетчер для каждой из них не нужен. Если требуется какой-либо блок
диска, диспетчеру кэш-памяти посылается сигнал выдать этот блок. Если данного
блока нет, диспетчер вызывает соответствующую систему файлов, чтобы получить
этот блок. Поскольку файлы могут быть отображены на адресные пространства
процессов, диспетчер кэш-памяти должен взаимодействовать с модулем управле-
ния виртуальной памятью, чтобы обеспечить необходимую согласованность.
Модуль управления виртуальной памятью
реализует архитектуру виртуаль-
ной памяти с подкачкой страниц по требованию. Он управляет отображением вир-
туальных страниц на физические страничные кадры. Он вводит дополнительные

Примеры операционных систем 487
правила защиты, которые ограничивают доступ каждого процесса только к тем
страницам, которые принадлежат его адресному пространству. Он также обраба-
тывает некоторые системные вызовы, которые связаны с виртуальной памятью.
Диспетчер процессов и потоков
управляет процессами и потоками, в том чис-
ле их созданием и удалением.
Диспетчер безопасности
предоставляет механизмы безопасности NT, кото-
рые удовлетворяют требованиям Оранжевой книги департамента защиты США.
В Оранжевой книге определяется огромное количество правил, которым должна
удовлетворять система, начиная с пароля и заканчивая тем, что виртуальные стра-
ницы должны обнуляться перед повторным использованием.
Интерфейс графических устройств
управляет изображением на мониторе и
принтерами. Он обеспечивает системные вызовы, которые позволяют пользова-
тельским программам записывать информацию на монитор или принтеры незави-
симо от устройств. Он также содержит диспетчер окон и драйверы аппаратных
устройств. В версиях NT до NT 4.0 он находился в пользовательском пространстве,
но производительность при этом оставляла желать лучшего, поэтому компания
Microsoft перенесла его в ядро. Модуль Win32 также управляет многими систем-
ными вызовами. Изначально он тоже располагался в пользовательском простран-
стве, но позднее был перемещен в ядро с целью повышения производительности.
Самый верхний уровень исполняющей системы —
системные
службы. Этот
уровень обеспечивает интерфейс с исполняющей системой. Он принимает систем-
ные вызовы NT и вызывает другие части исполняющей системы для выполнения.
Вне ядра находятся пользовательские программы и
подсистемы окружения.
Необходимость подсистем окружения объясняется тем, что пользовательские про-
граммы не способны непосредственно осуществлять системные вызовы. Поэтому
каждая такая подсистема экспортирует определенный набор вызовов функций,
которые могут использовать пользовательские программы. На рисунке 6.25 пока-
заны 3 подсистемы окружения: Win32 (для программ NT и Windows 95/98), POSIX
(для программ UNIX) и OS/2 для программ OS/2
1
.
Приложения Windows используют функции
подсистемы Win32
и взаимодей-
ствуют с подсистемой Win32, чтобы совершать системные вызовы.
Подсистема
Win32
принимает вызовы функций Win32 и использует модуль
системного ин-
терфейса,
чтобы системные вызовы NT могли выполнять их.
Подсистема POSIX
обеспечивает поддержку для приложений UNIX. Она под-
держивает только стандарт Р 1003.1. Это закрытая подсистема. Ее приложения не
могут использовать приспособления подсистемы Win32, что сильно ограничивает
ее возможности. На практике перенос любой программы UNIX на NT с использо-
ванием этой подсистемы почти невозможен. Ее включили в NT только потому, что
правительство США потребовало, чтобы операционные системы на компьютерах
в правительстве соответствовали стандарту Р 1003.1. Эта подсистема не является са-
модостаточной, поэтому для своей работы она использует подсистему Win32, но при
этом не передает полный интерфейс Win32 своим пользовательским программам.
Бытует заблуждение, что Windows NT может выполнять различные программы, разработанные для
OS/2. Однако на самом деле эта подсистема NT позволяет выполнять только те немногие 16-битные
программы OS/2, которые работают исключительно в текстовом режиме. 32-битные программы OS/2
система Windows NT выполнять не может. —
Примеч. научн. ред.