Лекции и тесты (часть 1-2)

advertisement
1
Глава 1. Введение
1.1. Вычислительные и операционные системы. Общие понятия
Компьютерная система является сложной комплексной системой, состоящей из процессоров, оперативной памяти, дисковых накопителей,
клавиатуры, монитора, сетевого оборудования, принтеров и пр. Написание
программ, корректно использующих компоненты компьютерной системы
представляет собой очень сложную задачу. По этой причине компьютеры
оснащаются специальным уровнем программного обеспечения – операционной системой, которая отвечает за управление вышеперечисленных
компонентов и обеспечивает пользователя программами, имеющими простой интерфейс, для работы с аппаратурой.
Пользователь
Операционная
система
Аппаратное
обеспечение
Программное
обеспечение
Прочие системные
программы
Системные
программы
Вычислительная
система
Прикладные
программы
Аппаратное обеспечение:
 машинный язык;
 микроархитектура;
 физические устройства.
Рис.1.1. Слои программного обеспечения вычислительной системы
В общей структуре компьютера (рис.1.1.) операционная система расположена над аппаратным обеспечением, которое может состоять из двух
или более уровней (слоев). Самый нижний уровень содержит физические
устройства, состоящие из интегральных микросхем, проводников, источников питания и пр. Выше расположен уровень микроархитектуры, на котором физические устройства рассматриваются с точки зрения функциональных единиц, обычно на данном уровне находятся внутренние регистры центрального процессора и арифметико-логическое устройство. Во
время работы процессора на каждом такте из регистра выбирается один
или два операнда, которые обрабатываются в арифметико-логическом
устройстве. Результат сохраняется в одном или нескольких регистрах. В
некоторых компьютерах операции над данными контролируются программными приложениями (микропрограммами), в других – аппаратными
цепями.
Команды, выполняемые процессором, передаются по маршруту передачи данных, причем некоторые команды выполняются за один цикл передачи данных, другие требуют несколько циклов при использовании реги-
2
стров или других возможностей аппаратуры. Команды, написанные на ассемблере, формируют уровень, называемый машинным языком, который
служит для перемещения данных, выполнения арифметических операций
и сравнения величин. Управление устройствами осуществляется с помощью загрузки определенных данных в регистры устройств. Например, для
выполнения команды «чтение с диска» в регистры диска записываются:
адрес места на диске, адрес в основной памяти, число байтов для чтения,
тип действия (чтение/запись) и др.
Операционная система предназначена для того, чтобы скрыть от пользователя сложную работу вычислительной системы, избавить программиста от необходимости общения с аппаратурой напрямую и предоставить
ему более удобную систему команд. Над операционной системой располагаются остальные системные программы: интерпретатор команд (оболочка), компилятор, редактор и другие программы, которые запускаются в
пользовательском режиме и могут иметь прямое отношение к операционной системе. Выше расположены прикладные программы, которые используются для решения пользовательских задач.
Операционная система (ОС) – это совокупность программных средств,
которые осуществляют управление ресурсами компьютера, запуск прикладных программ и их взаимодействие с внешними устройствами и другими программами и обеспечивают диалог пользователя с компьютером.
Операционная система, как комплекс системных и управляющих программ, предназначена для наиболее эффективного использования всех
ресурсов вычислительной системы и удобства работы с ней. Назначение
операционных систем:
- организация вычислительного процесса в вычислительной системе,
рациональное распределение вычислительных ресурсов между отдельными решаемыми задачами;
- предоставление пользователям многочисленных сервисных средств,
облегчающих процесс программирования и отладки задач.
Вычислительная система (ВС) – это взаимосвязанная совокупность
аппаратных средств вычислительной техники и программного обеспечения, предназначенная для обработки информации. Основными ресурсами
вычислительной системы являются процессоры, области оперативной памяти, наборы данных, периферийные устройства, программы. Структура
вычислительной системы (рис.1.1.):
- техническое обеспечение (hardware): процессор, память, монитор,
дисковые устройства и т.д., объединенные магистральным соединением,
называемым шиной;
- программное обеспечение: прикладное и системное.
К прикладному программному обеспечению относятся разнообразные
пользовательские программы, игры, текстовые процессоры и т.п. К системному – программы, способствующие функционированию и разработке прикладных программ. Операционная система является фундаментальным
компонентом системного программного обеспечения.
3
В зависимости от ряда признаков различают следующие вычислительные системы:
- по количеству программ, одновременно находящихся в оперативной
памяти: однопрограммные и многопрограммные вычислительные системы;
- по числу пользователей, которые одновременно могут использовать
ресурсы вычислительной системы: индивидуального и коллективного пользования;
- по организации и обработки заданий: вычислительные системы с пакетной обработкой и вычислительные системы с разделением времени;
- по числу процессоров: однопроцессорные вычислительные системы,
многопроцессорные и многомашинные;
- по территориальному расположению и взаимодействию технических
средств: сосредоточенные, распределенные (вычислительные сети) и вычислительные системы с теледоступом;
- по соотношению скоростей поступления задач в вычислительные системы и их решения: работающие или не работающие в режиме реального
времени;
- по назначению: универсальные вычислительные системы, специализированные и проблемно-ориентированные.
В зависимости от класса ЭВМ и вида операционной системы вычислительные системы могут работать в двух режимах: однопрограммном или
мультипрограммном.
Однопрограммный режим. В памяти ЭВМ находится и выполняется
только одна программ. Данный режим обычно характерен для микро-ЭВМ
и персональных ЭВМ, то есть для ЭВМ индивидуального пользования.
Мультипрограммный режим (многопрограммный). В памяти ЭВМ
находится несколько программ, которые выполняются частично или полностью между переходами процессора от одной задачи к другой в зависимости от ситуации, складывающейся в системе. В мультипрограммном режиме более эффективно используются машинное время и оперативная
память, так как при возникновении в выполняемой задаче ситуаций, требующих перехода процессора в режим ожидания, процессор переключается на другую задачу и выполняет ее до тех пор, пока в ней не возникает
подобная ситуация и т.д.
При реализации мультипрограммного режима требуется определять
очередность переключения задач и выбирать моменты переключения,
чтобы эффективность использования машинного времени и памяти была
максимальной. Мультипрограммный режим обеспечивается аппаратными
средствами ЭВМ и средствами операционной системы. Он характерен для
сложных ЭВМ, где стоимость машинного времени значительно выше, чем
у микро-ЭВМ. Разработаны также мультипрограммные операционные системы, позволяющие одновременно следить за решением нескольких задач и повышать эффективность работы пользователя. В зависимости от
того, в каком порядке при мультипрограммном режиме выполняются программы пользователей, различают следующие режимы:
4
- режим пакетной обработки задач – задачи выстраиваются в одну или
несколько очередей и последовательно выбираются для их выполнения;
- режим коллективного доступа – каждый пользователь ставит свою задачу на выполнение в любой момент времени, то есть для каждого пользователя осуществляется режим индивидуального пользования.
Режим индивидуального пользования реализуется обычно с помощью
квантования машинного времени, когда каждой задаче, находящейся в
оперативной памяти ЭВМ, выделяется квант времени. После окончания
заданного кванта времени процессор переключается на другую задачу или
продолжает выполнение прерванной в зависимости от ситуации в вычислительной системе. Вычислительные системы, обеспечивающие коллективный доступ пользователей с квантованием машинного времени, называются вычислительными системами с разделением времени.
В программном обеспечении вычислительной системы операционная
система занимает основное положение, поскольку осуществляет планирование и контроль всего вычислительного процесса. Любая из компонент
программного обеспечения обязательно работает под управлением операционной системы. В соответствии с условиями применения различают
три режима работы операционной системы:
- режим пакетной обработки – операционная система последовательно выполняет собранные в пакет задания, пользователь не имеет контакта
с ЭВМ и получает только результаты вычислений;
- режим разделения времени – операционная система одновременно
выполняет несколько задач, допуская обращение каждого пользователя к
ЭВМ;
- режим реального времени – операционная система обеспечивает
управление объектами в соответствии с принимаемыми входными сигналами, причем время отклика ЭВМ на возмущающее воздействие должно
быть минимальным.
Операционная система опирается на базовое программное обеспечение компьютера BIOS, с другой стороны, она сама является опорой для
программного обеспечения более высокого уровня – прикладных и большинства служебных приложений. Приложение операционной системы
представляет собой прикладную программу, которая не относится к компонентам операционной системы, но работает под ее управлением.
Операционная система в общем случае может содержать несколько
операционных сред. Операционная среда – это набор функций, сервисов и
правил обращения к ним, так же набор интерфейсов, необходимый программам и пользователям для обращения к операционной системе с целью получения определенного сервиса. Интерфейс обозначает физическое аппаратное устройство и совокупность алгоритмических правил обмена информацией с возможностью их перепрограммирования. Интерфейс, по определению – это правила взаимодействия операционной системы с пользователями, а также соседних уровней в сети ЭВМ. От интерфейса зависит технология общения человека с компьютером.
5
Операционная среда может включать несколько интерфейсов, так
пользователь взаимодействует с операционной системой на уровне пользовательского интерфейса (UI - User Interface), программист – на уровне
программного интерфейса (API - Application Program Interface). Операционная среда предоставляет системное программно окружение, в котором
могут выполняться программы, созданные по правилам работы этой среды.
Основная функция всех операционных систем – посредническая, которая заключается в обеспечении ряда интерфейсов:.
1.Интерфейс пользователя – интерфейс между пользователем и программно-аппаратными средствами компьютера.
2.Аппаратно-программный интерфейс – интерфейс между программным и аппаратным обеспечением.
3.Программный интерфейс – интерфейс между разными видами программного обеспечения, который представляет собой подпрограммы высокого уровня, документированные разработчиком и вызываемые на языках программирования. В современных операционных системах наборы
вызываемых подпрограмм API сходного назначения объединяются в один
двоичный файл, который приложение может использовать, загружая в
процессе своей работы динамически подключаемую библиотеку (DLL).
Пользователь 1
Пользователь 2
Пользователь 3
Текстовые
документы
Электронные
таблицы
Работа с
графикой
Программист
Интерфейс пользователя User Interface
Интерфейс прикладного программирования Application Programming Interface
Операционная система
Аппаратура
Рис.1.2. Взаимодействие пользователей и программистов
Операционная система, как интерфейс между пользователем и аппаратными средствами компьютера, работает на двух уровнях (рис.1.2.):
- на прикладном уровне – предоставляет возможности исполнения программ, доступ к периферийным устройствам ввода-вывода и файловой системе;
- на программном уровне – пользователи могут разрабатывать свои
прикладные и системные приложения, пользуясь интерфейсами программирования (например, в операционной системе Windows ХР базовым программным интерфейсом является Win32 API).
Операционная система, играя роль посредника, служит двум целям:
эффективно использовать ресурсы вычислительной системы и создавать
условия для эффективной работы пользователя.
6
Все операционные системы способны обеспечивать как пакетный, так
и диалоговый режим работы с пользователем. В пакетном режиме операционная система автоматически исполняет заданную последовательность
команд. Суть диалогового режима состоит в том, что операционная система находится в ожидании команды пользователя, получив ее, приступает к
исполнению, исполнив команду, возвращает отклик и ждет очередной команды. Диалоговый режим работы основан на использовании прерываний
процессора и прерываний BIOS (которые, в свою очередь, также основаны
на использовании прерываний процессора) Опираясь на эти аппаратные
прерывания, операционная система создает свой комплекс системных
прерываний. Способность операционной системы прервать текущую работу и отреагировать на события, вызванные пользователем с помощью
управляющих устройств, называется диалоговым режимом работы.
1.2. Виды интерфейсов. Технологии реализации интерфейсов
Компьютер обменивается информацией с человеком посредством
набора определенных правил, обязательных как для машины, так и для
человека. Эти правила называются интерфейсом. Интерфейс может быть
понятным и непонятным, дружественным или нет. Современными видами
интерфейсов являются:
1.Командный интерфейс – пользователь дает команды компьютеру,
который их выполняет и выдает результат пользователю. Командный интерфейс реализован в виде пакетной технологии и технологии командной
строки.
2.WIMP-интерфейс (WIMP от: Window – окно; Image – образ; Menu –
меню; Pointer – указатель) – диалог пользователя с компьютером ведется
при помощи графических образов: меню, окон и других элементов. Интерфейс реализован на двух уровнях технологий: простой графический интерфейс и WIMP-интерфейс.
3.SILK-интерфейс (SILK от: Speech – речь; Image – образ; Language –
язык; Knowlege – знание) – разговор пользователя с компьютером. Интерфейс наиболее приближен к обычной, человеческой форме общения. При
этом компьютер определяет команды, анализируя человеческую речь и
находя в ней ключевые фразы. Результат выполнения команд компьютер
преобразует в понятную человеку форму. Этот вид интерфейса наиболее
требователен к аппаратным ресурсам компьютера, поэтому его применяют
в основном для военных целей.
Основными технологиями реализации интерфейсов являются следующие технологии (рис.1.3.):
1.Пакетная технология. Исторически технология появилась первой и
существовала уже на релейных машинах Зюса и Цюзе (Германия, 1937
год). На вход компьютера подавалась последовательность символов, в которых по определенным правилам указывалась последовательность запущенных на выполнение программ. После выполнения очередной про-
7
граммы запускалась следующая программа и т.д. Машина по определенным правилам находила команды и данные. Например, в качестве такой
последовательности выступали: перфолента, стопка перфокарт, последовательность нажатия клавиш электрической пишущей машинки (типа
CONSUL). Машина выдавала свои сообщения на перфоратор, алфавитноцифровое печатающее устройство (АЦПУ), ленту пишущей машинки. Такая машина представляла собой шкаф, в который постоянно подавалась
информация, и который постоянно информировал о своем состоянии.
Пользователь имел малое влияние на работу машины. Он мог лишь приостановить работу машины, сменить программу и вновь запустить ЭВМ.
Пользовательские
интерфейсы
Командный интерфейс
WIMP интерфейс
SILK интерфейс
Типы ОС
Однопользовательская
ОС
Многопрограммная
ОС
Многопользовательская
ОС
Технологии
Пакетная технология
Диалоговая технология
Сетевая технология
Рис.1.3. Взаимодействие типов операционных систем,
пользовательских интерфейсов и технологий их реализации
2.Технология командной строки. Информация пользователя для компьютера передается посредством клавиатуры. Компьютер выводит информацию на алфавитно-цифровой дисплей (монитор). Комбинацию «монитор + клавиатура» назвали терминалом или консолью. Команды набираются в командной строке, которая представляет собой символ приглашения и мигающий прямоугольник – курсор. При нажатии клавиши на месте курсора появляются символы и курсор смещается вправо, неправильно набранный символ стирается нажатием клавиши Delete (del). Команда
заканчивается нажатием клавиши Enter (Return.), после чего осуществляется переход в начало следующей строки, в позиции которой компьютер
выдает на монитор результаты своей работы. Затем процесс повторяется.
Технология командной строки уже работала на монохромных алфавитноцифровых дисплеях.
Поскольку вводить позволялось только буквы, цифры и знаки препинания, то технические характеристики дисплея были не существенны. В качестве монитора можно было использовать телевизионный приемник или
трубку осциллографа. Преобладающим видом файлов при работе с командным интерфейсом были текстовые файлы, которые можно было создавать при помощи клавиатуры. На время наиболее широкого использования интерфейса командной строки приходится появление операционной
системы UNIX и появление первых восьмиразрядных персональных компьютеров с многоплатформенной операционной системой CP/M.
8
3.Технология графического интерфейса. Идея графического интерфейса возникла в середине 70-х годов, когда в исследовательском центре
Xerox Palo Alto Research Center (PARC) была разработана концепция визуального интерфейса. Предпосылкой графического интерфейса явилось
уменьшение времени реакции компьютера на команду, увеличение объема оперативной памяти, развитие технической базы компьютеров. Аппаратным основанием концепции явилось появление алфавитно-цифровых
дисплеев, которые стали поддерживать новые эффекты: мерцание символов, инверсию цвета (смена начертания белых символов на черном фоне
черными символами на белом фоне), подчеркивание символов. Эффекты
распространились не на весь экран, а только на один или более символов.
Следующим шагом явилось создание цветного дисплея, позволяющего
выводить, вместе с этими эффектами, символы в 16 цветах на фоне с палитрой (то есть цветовым набором) из 8 цветов.
Первая система с графическим интерфейсом 8010 Star Information
System группы PARC появилась в начале 1981 года. Первоначально интерфейс использовался только в программах. Постепенно он стал переходить и на операционные системы, используемые сначала на компьютерах
Atari и Apple Macintosh, затем и на IBM-совместимых компьютерах. Под
влиянием новых концепций проходил процесс по унификации в использовании клавиатуры и мыши прикладными программами. Графический интерфейс пользователя за время своего развития прошел две стадии с
1974 года по настоящее время.
Простой графический интерфейс. На первом этапе графический интерфейс очень походил на технологию командной строки, за исключением
следующих отличий:
- при отображении символов допускалось выделение части символов
цветом, инверсным изображением, подчеркиванием и мерцанием, благодаря чему повысилась выразительность изображения;
- в зависимости от конкретной реализации графического интерфейса
курсор мог представляться мерцающим прямоугольником или некоторой
областью, охватывающей несколько символов, которая отличалась от других невыделенных частей;
- нажатие клавиши Enter не всегда приводило к выполнению команды и
переходу к следующей строке, так как реакция на нажатие любой клавиши
во многом зависела от того, в какой части экрана находился курсор;
- кроме клавиши Enter на клавиатуре стали использовать клавиши
управления курсором и манипуляторы (мышь, трекбол и др., рис.1.4.), которые позволяли быстро выделять нужную часть экрана и перемещать
курсор.
Отличительные особенности интерфейса: выделение областей экрана;
переопределение клавиш клавиатуры в зависимости от контекста; использование манипуляторов и клавиш управления курсором; широкое использование цветных мониторов. Появление интерфейса совпадает с широким
распространением операционной системы MS-DOS, которая внедрила
9
этот интерфейс и улучшила характеристики отображения символов и другие параметры монитора. Примеры использования интерфейса: файловая
оболочка Nortron Commander, текстовый редактор Multi-Edit, редакторы:
Лексикон и ChiWriter, текстовый процессор Microsoft Word for Dos.
Рис.1.4. Виды манипуляторов для работы с графическим интерфейсом
WIMP-интерфейс стал вторым этапом в развитии графического интерфейса, его характерные особенности:
- работа с программами, файлами и документами происходит в окнах частях экрана, определенных очерченных рамкой;
- программы, файлы, документы, устройства и другие объекты представляются в виде значков – иконок, которые при открытии превращаются
в окна;
- действия с объектами осуществляются с помощью меню, которое стало основным элементом управления;
- одним из основных элементов управления стал манипулятор, которым
указывают на область экрана, окна или иконки, выделяют ее и посредством меню или с использованием других технологий осуществляют
управление ими.
Для реализации WIMP-интерфейсу требуются: цветной растровый дисплей с высоким разрешением, манипулятор и программы, ориентированные на данный вид интерфейса, которые предъявляют повышенные требования к производительности компьютера, объему его памяти, пропускной способности шины и т.п. В настоящее время WIMP-интерфейс является стандартом.
4.Речевая технология. Появилась в середине 90-х годов после появления недорогих звуковых карт. По этой технологии команды подаются голосом путем произнесения специальных зарезервированных слов – команд. Основными командами являются:
«Проснись» – включение голосового интерфейса;
«Отдыхай» – выключение речевого интерфейса;
«Открыть» – переход в режим вызова той или иной программы, имя
программы называется в следующем слове;
«Буду диктовать» – переход из режима команд в режим набора текста
голосом;
10
«Режим команд» – возврат в режим подачи команд голосом и др.
Слова должны выговариваться четко, в одном темпе. Между словами
обязательна пауза. Из-за неразвитости алгоритма распознавания речи такие системы требует индивидуальной предварительной настройки на каждого конкретного пользователя. Речевая технология является простейшей
реализацией SILK - интерфейса.
5.Биометрическая технология (мимический интерфейс.). Технология
возникла в конце 90-х годов XX века. Для управления компьютером используется выражение лица человека, направление его взгляда, размер
зрачка и другие признаки. Для идентификации пользователя используется
рисунок радужной оболочки его глаз, отпечатки пальцев и другая уникальная информация. Изображения считываются с цифровой видеокамеры, а
затем с помощью специальных программ распознавания образов из этого
изображения выделяются команды. Эта технология используется в программных продуктах и приложениях для идентификации пользователя
компьютера.
6.Технология семантического интерфейса (общественного интерфейса). Технология возникла в конце 70-х годов XX века с развитием искусственного интеллекта и основана на семантических сетях. Данный вид
интерфейса включает в себя: интерфейс командной строки, графический
интерфейс, речевой интерфейс и мимический интерфейс. Основная его
отличительная черта – отсутствие команд при общении с компьютером.
Запрос формируется на естественном языке в виде связанного текста и
образов. По своей сути интерфейс является моделированием общения
человека с компьютером.
1.3. История создания и развития операционных систем
История развития операционных систем насчитывает много лет. Так
как операционные системы появились и развивались в процессе конструирования компьютеров, то эти события исторически тесно связаны.
Первый настоящий цифровой компьютер был изобретен английским
математиком Чарльзом Бэббиджем (Charles Babbage, 1792-1871). Хотя
большую часть жизни Бэббидж посвятил попыткам создания «аналитической машины», он так и не смог заставить ее работать должным образом.
Это была чисто механическая машина, так как технологии данного времени не были достаточно развиты для изготовления многих деталей и механизмов высокой точности. Первая аналитическая машина не имела операционной системы. Бэббидж понимал, что для успешного функционирования машины необходимо программное обеспечение, поэтому он пригласил
Аду Лавлейс (Ada Lovelace), дочь знаменитого британского поэта Лорда
Байрона, для совместной работы. Ада стала первым в мире программистом, и язык программирования Ada был назван в ее честь.
Программное и аппаратное обеспечение эволюционировали совместно, оказывая взаимное влияние друг на друга. Появление новых техниче-
11
ских возможностей приводило к прорыву в области создания удобных,
эффективных и безопасных программ, которые в свою очередь были
направлены на поиск новых технических решений. Ниже приведена краткая историческая эволюция вычислительных систем.
1.Первое поколение (1945-1955): электронные лампы и коммутационные панели. Операционных систем нет. После неудачных попыток Бэббиджа в конструировании цифровых компьютеров вплоть до Второй мировой войны не было практически никакого прогресса. Примерно в середине
1940-х годов Говард Айкен (Howard Aiken) в Гарварде, Джон фон Нейман
(John von Neumann) в Институте углубленного изучения в Принстоне, Дж.
Преспер Эккерт (J. Presper Eckert), Вильям Мочли (William Maucl) в Пенсильванском университете, Конрад Цузе (Konrad Zuse) в Германии и многие другие продолжили работу в направлении создания вычислительных
машин.
На первых вычислительных машинах использовались механические
реле, которые были очень медлительны. Позже реле заменили электронными лампами. Машины получались громоздкими, заполняющими целые
комнаты, с десятками тысяч электронных ламп. Каждую машину разрабатывала, строила, программировала, эксплуатировала и поддерживала в
рабочем состоянии одна команда. Все программирование выполнялось на
абсолютном машинном языке. Управление основными функциями машины
осуществлялось при помощи соединения коммутационных панелей проводами. Фактически на компьютерах занимались только прямыми числовыми
вычислениями, например расчетами таблиц синусов, косинусов и логарифмов. К началу 50-х годов появилась возможность записывать и считывать программы с перфокарт, но процедура вычислений оставалась прежней.
2.Второе поколение (1955 – начало 60-х): транзисторы и системы пакетной обработки. Пакетные операционные системы. В середине 50-х
годов изобретение и применение транзисторов сделало компьютеры более
надежными. Впервые сложилось четкое разделение между проектировщиками, сборщиками, операторами, программистами и обслуживающим персоналом. Машины, называемые мэйнфреймами, располагались в специальных комнатах с кондиционированным воздухом, где ими управлял целый штат профессиональных операторов. Чтобы выполнить задание программист сначала должен был записать его на бумаге (на Фортране или ассемблере), а затем перенести на перфокарты и передать оператору для
последующей обработки. Для повышения эффективности использования
машинного времени общепринятым решением стала система пакетной
обработки. Суть системы заключалась в том, чтобы собрать полный комплект заданий (перфокарт) в комнате входных данных и затем переписать
их на магнитную ленту при использовании небольшого недорогого компьютера. Например, компьютер класса IBM 1401 использовался для считывания карт, копирования лент и печати выходных данных, но не подходил
12
для числовых вычислений; для вычислений использовались более дорогостоящие машины, такие как IBM 7094.
Структура типичного входного задания начиналась с перфокарты, на
которой указывалось максимальное время выполнения задания в минутах,
загружаемый учетный номер и имя программиста. Затем поступала карта
&SFORTRAN, дающая операционной системе указание загрузить компилятор языка Фортран с системной магнитной ленты. Эта карта следовала за
программой, которую нужно было компилировать, а после нее шла карта
SLOAD, указывающая операционной системе загрузить скомпилированную
объектную программу. (Скомпилированные программы часто записывались на временных лентах, данные с которых могли стираться сразу после
использования). Следом шла карта SRUN с данными, дающая операционной системе команду выполнять программу. Последняя карта завершения
SEND отмечала конец задания. Эти примитивные управляющие перфокарты были предшественниками современных языков управления и интерпретаторов команд.
Большие компьютеры второго поколения использовались главным образом для научных и технических вычислений, таких как решение дифференциальных уравнений в частных производных, часто встречающихся в
физике и инженерных задачах. В основном на них программировали на
языке Фортран и ассемблере. Типичными операционными системами были: FMS (Fortran Monitor System) и IBSYS (операционная система, которая
была создана корпорацией IBM для компьютера IBM 7094).
3.Третье поколение (1960-1980): интегральные схемы и многозадачность. Первые многозадачные операционные системы. Период характеризуется переходом от отдельных полупроводниковых элементов типа
транзисторов к интегральным микросхемам. Вычислительная техника стала более надежной и дешевой. К началу 60-х годов большинство изготовителей компьютеров имели две отдельные, полностью несовместимые
производственные линии:
- научные крупномасштабные компьютеры с пословной обработкой текста (например, IBM 7094, использовавшиеся для числовых вычислений в
науке и технике);
- коммерческие компьютеры с посимвольной обработкой (например,
IBM 1401, используемые банками и страховыми компаниями для сортировки и печатания данных).
В начальный период развития персональных компьютеров была создана операционная система USCD p-system. Основу этой системы составляла П-машина – программа, эмулирующая гипотетическую универсальную
вычислительную машину. П-машина имитировала работу процессора, памяти и внешних устройств, выполняя специальные команды, называемые
П-кодом. Программные компоненты П-системы (в том числе компиляторы) были составлены на П-коде, прикладные программы также компилировались в П-код. Главной отличительной чертой системы была минимальная зависимость от особенностей аппаратуры ПЭВМ, что обеспечи-
13
вало переносимость П-системы на различные типы машин. Компактность
П-кода и удобно реализованный механизм подкачки позволял выполнять
сравнительно большие программы на ПЭВМ, имеющих небольшую оперативную память. Особенностью данной системы являлся преимущественно
интерпретационный режим исполнения прикладных программ, что приводило к интенсивному обмену информацией между оперативной памятью и
внешними накопителями и существенно замедляло работу.
Развитие и поддержка двух разных производственных линий для больших и малых ЭВМ для изготовителей было дорого и неудобно. Многим покупателям изначально требовалась небольшая машина, но через некоторое время возникала необходимость в более мощном компьютере. Корпорация IBM попыталась решить эти проблемы, выпустив серию программно-совместимых машин IBM/360, варьирующихся от компьютеров размером с IBM 1401 до машин, значительно более мощных, чем IBM 7094 для
поддержки научных и коммерческих вычислений
Так как все машины имели одинаковую структуру и набор команд, то
программы, написанные для одного компьютера, могли работать на всех
других. Таким образом, одно семейство машин могло удовлетворить нужды всех покупателей. В последующие годы корпорация IBM выпустила
компьютеры, совместимые с 360, серии: 370, 4300, 3080 и 3090.
Серия 360-тых стала первой основной линией компьютеров, на которой
использовались мелкомасштабные интегральные схемы, дававшие преимущество в цене и качестве по сравнению с машинами второго поколения, созданными из отдельных транзисторов. В компьютерных центрах до
сих пор можно встретить потомков этих машин. В настоящее время они
используются для управления огромными базами данных (например, для
систем бронирования и продажи билетов на авиалиниях) или как серверы
узлов Интернета, которые должны обрабатывать тысячи запросов в секунду.
Преимущество одного семейства оказалось одновременно и его слабостью. Программное обеспечение (включая операционную систему OS/360)
должно было одинаково хорошо работать на всех моделях компьютеров: в
небольших системах (такие системы часто заменяли 1401-е и применялись для копирования перфокарт на магнитные ленты) и на огромных системах (такие системы, заменяли 7094-е и использовались для расчета
прогноза погоды и других сложных вычислений). Кроме того, операционная система должна была поддерживать работу с разными внешними
устройствами и разным их количеством.
Для решения поставленной задачи была разработана операционная
система OS/360, которая состояла из миллионов строк, написанных на ассемблере разными программистами, и содержала много ошибок. Часть
ошибок в последующих версиях исправлялась, но вместо них появлялись
новые. Несмотря на свои огромные размеры и недостатки операционная
система OS/360 и подобные ей операционные системы третьего поколе-
14
ния, созданные другими производителями компьютеров удовлетворяли
требованиям большинства клиентов.
С повышением производительности процессоров увеличилась сложность задач, решаемых компьютерами. Повышению эффективности использования процессорного времени мешала низкая скорость работы механических устройств ввода-вывода (быстрый считыватель перфокарт мог
обработать 1200 перфокарт в минуту, принтеры печатали до 600 строк в
минуту). Вместо непосредственного чтения пакета заданий с перфокарт в
память, стали использовать его предварительную запись, сначала на магнитную ленту, а затем и на диск. Когда в процессе выполнения задания
требовался ввод данных, они стали читаться с диска. Точно так же выходная информация сначала копировалась в системный буфер и записывалась на ленту или диск, а печаталась только после завершения задания.
Вначале действительные операции ввода-вывода осуществлялись в режиме off-line – при использовании других, более простых, отдельно стоящих компьютеров. В дальнейшем они стали выполняться на том же компьютере, который производил вычисления, то есть в режиме on-line. Такой
прием получил название spooling (Simultaneous Peripheral Operation On
Line – совместная периферийная операция в интерактивном режиме) или
подкачка-откачка данных. Введение техники спулинга в пакетные системы
позволило совместить реальные операции ввода-вывода одного задания с
выполнением другого задания, но потребовало разработки аппарата прерываний для извещения процессора об окончании этих операций.
Магнитные ленты были устройствами последовательного доступа, то
есть информация считывалась с них в том порядке, в каком была записана. Появление магнитного диска, для которого не важен порядок чтения
информации, то есть устройства прямого доступа, привело к дальнейшему
развитию вычислительных систем. При обработке пакета заданий на магнитной ленте очередность запуска заданий определялась порядком их
ввода. При обработке пакета заданий на магнитном диске появилась возможность выбора очередного выполняемого задания. Пакетные системы
начали заниматься планированием заданий – задание стало выбираться в
зависимости от наличия запрошенных ресурсов, срочности вычислений и
др.
Дальнейшее повышение эффективности использования процессора
было достигнуто с помощью мультипрограммирования – пока одна программа выполняла операцию ввода-вывода, процессор не простаивал (как
при однопрограммном режиме), а выполнял другую программу; когда операция ввода-вывода заканчивалась, процессор возвращался к выполнению первой программы. Появление мультипрограммирования потребовало изменений в строении вычислительной системы, наиболее существенные из них:
- реализация защитных механизмов – программы не должны иметь самостоятельного доступа к распределению ресурсов, что привело к появлению привилегированных и непривилегированных режимов;
15
- реализация механизма прерываний – внешние прерывания оповещают операционную систему о происхождении асинхронного события,
например завершения операции ввода-вывода; внутренние прерывания
(исключительные ситуации) возникают, когда при выполнении программы
возникают ситуации, требующие вмешательства операционной системы
(например, деление на ноль; попытка нарушения защиты);
- развитие параллелизма в архитектуре – прямой доступ к памяти и организация каналов ввода-вывода позволили освободить центральный
процессор от рутинных операций.
В организации мультипрограммирования важная роль отводилась операционной системы, которая стала отвечать за выполнение следующих
операций:
- за организацию интерфейса между прикладной программой и операционной системой при помощи системных вызовов;
- за планирование использование процессора, (организация очереди из
заданий в памяти потребовала выделение процессора одному из заданий);
- за сохранение контекста для обеспечения правильного продолжения
вычислений (переключение с одного задания на другое требует сохранения содержимого регистров и структур данных, необходимых для выполнения задания);
- за упорядочение процессов размещения, замещения и выборки информации из памяти (управление памятью);
- за организацию хранения информации на внешних носителях в виде
файлов и обеспечение доступа к конкретному файлу только определенным категориям пользователей;
- за обеспечение программ средствами коммуникации для возможного
санкционированного обмена данными;
- за снабжение системы средствами синхронизации, которые необходимы для корректного обмена данными и разрешения конфликтных ситуаций, возникающих при работе с различными ресурсами.
Мультипрограммные системы обеспечили возможность более эффективного использования системных ресурсов (например, процессора памяти, периферийных устройств), но они еще долго оставались пакетными.
Пользователь не мог непосредственно взаимодействовать с заданием и
должен был предусмотреть с помощью управляющих карт все возможные
ситуации. Отладка программ по-прежнему занимала много времени и требовала изучения многостраничных распечаток содержимого памяти и регистров или использования отладочной печати.
Самым важным достижением этого периода явилась многозадачность
– управление разделением совместно используемых ресурсов, таких как
процессор, оперативная память, файлы и внешние устройства. Другим достижением операционных систем третьего поколения стала способность
считывать задание с перфокарт на диск – спулинг. Когда текущее задание
заканчивалось, операционная система загружала новое задание с диска в
16
освободившийся раздел памяти и запускала его. Спулинг стали использовать так же для выдачи полученных данных. С появлением подкачки данных стали не нужны 1401-е, так как исчезли многократные переносы с магнитных лент.
Хотя операционные системы третьего поколения могли использоваться
для больших научных вычислений и справлялись с крупными коммерческими обработками данных, они по существу, представляли собой разновидности систем пакетной обработки, в которых временной промежуток
между передачей задания и возвращением результатов часто составлял
несколько часов. Желание сократить время ожидания ответа привело к
разработке режима разделения времени – варианту многозадачности, при
котором у каждого пользователя есть свой диалоговый терминал.
Логическим расширением систем мультипрограммирования стали системы разделения времени (time-sharing). В них процессор переключался
между задачами не только на время операций ввода-вывода, но и по прошествии определенного времени. Эти переключения происходили так часто, что пользователи могли взаимодействовать со своими программами
во время их выполнения, то есть интерактивно. В результате появилась
возможность одновременной работы нескольких пользователей на одной
компьютерной системе. У каждого пользователя для этого должна быть
хотя бы одна программа в памяти. Чтобы уменьшить ограничения на количество работающих пользователей, была внедрена идея неполного
нахождения исполняемой программы в оперативной памяти. Основная
часть программы находится на диске и фрагмент, который необходимо в
данный момент выполнять, может быть загружен в оперативную память, а
ненужный – выкачан обратно на диск. Это было реализовано с помощью
механизма виртуальной памяти. Основным достоинством такого механизма явилось создание иллюзии неограниченной оперативной памяти
ЭВМ.
В системах разделения времени пользователь получил возможность
эффективно производить отладку программы в интерактивном режиме и
записывать информацию на диск, не используя перфокарты, а непосредственно с клавиатуры. Появление on-line-файлов привело к необходимости разработки развитых файловых систем.
Первая серьезная система с режимом разделения времени CTSS
(Compatible Time Sharing System – Совместимая система разделения времени) была разработана в Массачусетском технологическом институте на
специально переделанном компьютере IBM 7094. Однако режим разделения времени не стал популярным до тех пор, пока не получили широкое
распространение необходимые технические средства защиты.
После успеха системы CTSS Массачусетский технологический институт, система исследовательских лабораторий Bell Labs и корпорация General Electric (главный изготовитель компьютеров) начали разработку машины, которая должна была поддерживать сотни одновременно работающих
пользователей в режиме разделения времени – MULTICS (MULTiplexed In-
17
formation and Computing Service – мультиплексная информационная и вычислительная служба). Приблизительно 80 систем MULTICS было установлено в университетах и в больших компаниях. Так, компании General
Motors, Ford и Управление национальной безопасности США оставили
свои системы MULTICS только в конце 90-х годов, проработав на них более 30 лет. Существовало много причин, по которым система MULTICS не
получила широкого распространения. Одной из них было то, что система
была написана на языке PL/I, компилятор которого появился лишь спустя
несколько лет. Несмотря на неудачу с точки зрения коммерции, система
MULTICS значительно повлияла на развитие последующих операционных
систем.
Еще одним важным моментом данного времени был большой рост мини-компьютеров, начиная с выпуска машин класса PDP-1 корпорацией
DEC в 1961 году, которые обладали очень маленькой оперативной памятью, но стоили дешево и поэтому имели большой спрос. Некоторые виды
работ они выполняли с такой же скоростью, что и IBM 7094, что дало толчок к появлению новой индустрии мини компьютеров. Кен Томпсон (Ken
Thompson), один из специалистов по компьютерам в Bell Labs, работавший
над проектом MULTICS, решил для мини-компьютера PDP-7 написать усеченную однопользовательскую версию операционной системы MULTICS,
которая позже развилась в операционную систему UNIX.
Впоследствии появилось очень много версий операционной системы
UNIX. Чтобы стало возможным писать программы, работающие в любой
UNIX-системе, Институт инженеров по электротехнике и электронике IEEE
разработал стандарт системы UNIX, называемый POSIX, который теперь
поддерживают большинство версий UNIX. Стандарт POSIX определяет
минимальный интерфейс системного вызова, который должны поддерживать совместимые системы UNIX. Некоторые другие операционные системы теперь тоже поддерживают интерфейс POSIX. В 1987 году Кен Томпсон создал маленький клон системы UNIX для образовательных целей –
MINIX. Функционально система MINIX очень похожа на UNIX, включая
поддержку стандарта POSIX.
Желание иметь свободно распространяемую рабочую версию MINIX (в
противоположность образовательной) привело финского студента Линуса
Торвальд (Linus Torvalds) к написанию системы Linux. Эта система была
разработана на основе операционной сстемы MINIX и первоначально обладала ее характерными особенностями, например, поддерживала ту же
файловую систему. Позже система Linux была значительно расширена, но
сохранила большую часть структуры, общей как для системы MINIX, так и
для системы UNIX, на которой и была основана.
4.Четвертое поколение (с 1980 года по наши дни): персональные
компьютеры, классически сетевые и распределенные системы. Следующий период в эволюции операционных систем связан с появлением
больших интегральных схем (LSI, Large Scale Integration) – кремниевых
микросхем, содержащих тысячи транзисторов на одном квадратном сан-
18
тиметре. В 1974 году, когда компания Intel выпустила первый универсальный 8-разрядный центральный процессор Intel 8080 для него потребовалась операционная система, с помощью которой можно было бы его протестировать.
Компания Intel привлекла к разработкам одного из своих консультантов
Гэри Килдэлла (Gary Kildall), который вместе с другом вначале сконструировал контроллер для 8-дюймового гибкого диска, недавно выпущенного
компанией Shugart Associates, затем подключил диск к процессору Intel
8080. Таким образом, появился первый микрокомпьютер с диском для которого в 1974 году Килдэлл написал дисковую операционную систему
СР/М (Control Program for Microcomputers – программа управления для
микрокомпьютеров), положившую начало созданию операционных систем
для микро-ЭВМ. В 1977 году компания Digital Research переработала ОС
СР/М, чтобы сделать эту систему пригодной для работы с другими 8разрядными машинами.
В рамках операционной системы СР/М было создано программное
обеспечение значительного объема, включающее трансляторы с языков
Бейсик, Паскаль, Си, Фортран, Кобол, Лисп, Ада и др., текстовые и табличные процессоры, системы управления базами данных, графические
пакеты, символьные отладчики и другие проблемно ориентированные программы. Успех системы в значительной степени был обусловлен ее предельной простотой и компактностью, возможностью быстрой настройки на
различные конфигурации ПЭВМ. Первая версия системы занимала всего 4
Кб, что было весьма важно в условиях ограниченности объемов памяти
ПЭВМ того времени. Позже было написано множество прикладных программ, работающих в операционной системе СР/М, что позволило ей занимать высшую позицию в мире микрокомпьютеров на протяжении 5 лет.
В начале 80-х корпорация IBM разработала IBM PC (Personal Computerперсональный компьютер) и начала искать для него программное обеспечение. Сотрудники IBM обратились к Биллу Гейтсу (Bill Gates), чтобы получить лицензию на право использования его интерпретатора языка Бейсик
(BASIC). Они также поинтересовались, не знает ли он операционную систему, которая могла бы работать на IBM PC. Гейтс посоветовал обратиться к Килдэллу, главе компании Digital Research, но их сотрудничество
не стало успешным, поэтому Корпорация IBM снова обратилась к Гейтсу с
просьбой обеспечить ее операционной системой.
После повторного запроса Гейтс выяснил, что в компании изготовителе
компьютеров, Seattle Computer Products, есть подходящая операционная
система DOS (Disk Operating System – дисковая операционная система).
Он выкупил операционную систему DOS и создал пакет программ
DOS/BASIC, который был куплен компанией IBM. Впоследствии для усовершенствования программы корпорация IBM пригласила Билла Гейтса и
Тима Патерсона (Tim Paterson), автора DOS, ставшего первым служащим
компании Гейтса Microsoft. Видоизмененная система была переименована
в MS-DOS (MicroSoft Disk Operating System) и быстро заняла доминирую-
19
щее положение на рынке IBM PC. Самым важным оказалось решение
Гейтса продать MS-DOS компьютерным компаниям для установки вместе
с их оборудованием.
Позже был написан стандарт MSX, который определял ОС и характеристики аппаратных средств для школьных ПЭВМ. Согласно стандарту
MSX машина должна была иметь: оперативную память объемом не менее
16 Кб; постоянную память объемом 32 Кб с встроенным интерпретатором
языка Бейсик; цветной графический дисплей с разрешающей способностью 256 х 192 точки и 16 цветами; трехканальный звуковой генератор на 8
октав; параллельный порт для подключения принтера; контроллер для
управления внешним накопителем, подключаемым снаружи.
Операционная система такой машины должна была обладать следующими свойствами: требуемая память – не более 16 Кб, совместимость с
СР/М на уровне системных вызовов, совместимость с DOS по форматам
файлов на внешних накопителях на основе гибких магнитных дисков, поддержка трансляторов языков Бейсик, Си, Фортран и Лисп. Таким образом,
эта операционная система, получившая название MSX-DOS, учитывала
необходимость поддержки обширного программного обеспечения, разработанного для СР/М, и одновременно ориентировалась на новые разработки, связанные с DOS.
С появлением ПЭВМ, использующих 16-разрядные микропроцессоры
типа Intel 8088 и 8086, операционная система MS DOS стала доминирующей и самой долголетней. С момента появления в 1981 году MS DOS распространилась настолько широко, что завоевала право считаться самой
популярной в мире. Когда в 1983 году появился компьютер IBM PC/AT с
центральным процессором Intel 80286, операционная система СР/М доживала свои последние дни. Позже система MS-DOS широко использовалась
на компьютерах с процессорами 80386 и 80486. Хотя первоначальная версия MS-DOS была довольно примитивна, последующие версии системы
выходили более совершенными с новыми свойствами, включая многое,
позаимствованное от UNIX. В настоящее время для MS DOS разработан
огромный фонд программного обеспечения:
- трансляторы для практически всех популярных языков высокого уровня: Бейсик, Паскаль, Фортран, Си, Модула-2, Лисп, Лого, АПЛ, Форт, Ада,
Кобол, ПЛ-1, Пролог, Смолток и др., причем для большинства языков существует несколько вариантов трансляторов;
- инструментальные средства для разработки программ в машинных
кодах: ассемблеры, символьные отладчики и др., которые сопровождаются редакторами, компоновщиками и другими сервисными системами, необходимыми для разработки сложных программ;
- кроме системного программного обеспечения для DOS создано множество прикладных программ.
Операционные системы СР/М, MS-DOS и другие для первых микрокомпьютеров полностью основывались на вводе команд с клавиатуры. Затем,
благодаря исследованиям, проведенным в 60-е годы Дагом Энгельбартом
20
(Doug Engelbart) в научно-исследовательском институте Стэнфорда (Stanford Research Institute), это свойство операционной системы изменилось.
Энгельбарт изобрел графический интерфейс пользователя (GUI, Graphical
User Interface), состоящий из окон, значков, различных меню и мыши. Эту
идею переняли разработчики из Xerox PARC и встроили в сконструированные ими машины.
Однажды Стив Джобе (Steve Jobs), который изобрел компьютер Apple,
посетил PARC и увидел GUI. Он осознал его потенциальную ценность и
приступил к созданию Apple с графическим интерфейсом. Это привело к
проекту Lisa, который был слишком дорог и потерпел коммерческую неудачу. Вторая попытка Джобса, Apple Macintosh, имела огромный успех не
только из-за недорогой цены, но и потому, что на нем работал дружественный интерфейс, то есть предназначенный для пользователей, ничего
не знающих о компьютерах и не желающих чему-либо обучаться.
В первом проекте дисплей был монохромным, во втором – цветным, но
оба имели высокую разрешающую способность и скорость вывода графической информации. Операционные системы для этих машин были спроектированы так, чтобы максимально использовать возможности работы с
графикой. В них используется многооконный интерфейс и манипулятор
мышь. Для выбора той или иной операции или рабочего объекта на экран
выводится несколько условных графических символов (пиктограмм), среди
которых пользователь делает выбор с помощью мыши.
Когда корпорация Microsoft решила создать преемника MS-DOS, она
находилась полностью под влиянием успехов компании Macintosh. Была
разработана система, получившая название Windows, которая на протяжении 10 лет, с 1985 по 1995 год, исполняла роль графической среды поверх операционной системы MS-DOS. В 1995 году вышла в свет автономная версия Windows 95, которая включила в себя множество особенностей операционной системы MS-DOS, но только для загрузки и выполнения старых программ. В 1998 году была выпущена измененная версия
этой системы – Windows 98, которая все еще содержала большое количество программ 16-разрядного ассемблера Intel.
Другой операционной системой Microsoft стала Windows NT (NT, New
Technology – новая технология), которая на определенном уровне совместима с Windows 95, но ее ядро полностью переписано. Это 32-разрядная
система. Дэвид Катлер, главный разработчик Windows NT, был также одним из создателей операционной системы VMS для компьютеров VAX, поэтому некоторые идеи системы VMS присутствуют и в Windows NT. Корпорация Microsoft ожидала, что первая же версия Windows NT вытеснит MSDOS и все другие версии Windows, так как это была система, намного превосходящая предыдущие, но надежда не оправдалась. И только системе
Windows NT 4.0 удалось получить относительно широкое распространение, особенно в корпоративных сетях. Версия Windows NT 5.0 была переименована в Windows 2000 в начале 1999 года. Она должна была стать
преемником Windows 98 и Windows NT 4.0. Но этому также не было сужде-
21
но случиться, поэтому корпорация Microsoft выпустила еще одну версию
Windows 98, названную Windows Me (Me, Millennium edition – выпуск тысячелетия).
Главным соперником Windows в мире персональных компьютеров становится система UNIX, которая является самой сильной операционной системой для рабочих станций и сетевых серверов. Она стала особенно популярна на машинах с высокопроизводительными RISC-процессорами
(RISC, reduced instruction set computer – компьютер с сокращенным набором команд). На компьютерах с процессорами Pentium популярной альтернативой Windows для студентов и других разнообразных пользователей становится Linux.
Хотя многие пользователи UNIX, особенно опытные программисты,
предпочитают командный интерфейс графическому, почти все UNIXсистемы поддерживают оконную систему, созданную в Массачусетсском
технологическом институте. Она называется X Windows. Эта система оперирует основными функциями окна, позволяя пользователю создавать,
удалять, перемещать окна и изменять их размеры с помощью мыши. Часто поверх системы X Windows может быть установлен полный графический интерфейс, например Motif, придающий системе UNIX внешний вид
системы типа Microsoft Windows или как у компьютера Macintosh.
С середины 80-х годов начали развиваться сети персональных компьютеров, управляемые сетевыми и распределенными операционными системами. В сетевой операционной системе пользователи могут регистрироваться на удаленных машинах и копировать файлы с одной машины на
другую. Каждый компьютер работает под управлением локальной операционной системы и имеет своего собственного локального пользователя.
Сетевые операционные системы несущественно отличаются от однопроцессорных операционных систем. Дополнительно им требуются: сетевой
интерфейсный контроллер; специальное низкоуровневое программное
обеспечение, поддерживающее работу контроллера; программы, разрешающие пользователям удаленную регистрацию в системе и доступ к
удаленным файлам.
Распределенная операционная система представляется пользователям традиционной однопроцессорной системой, хотя она и составлена из
ряда процессоров, которые автоматически обрабатывают программы и
файлы. Распределенные системы позволяют прикладным задачам одновременно обрабатываться на нескольких процессорах, поэтому требуется
сложный алгоритм загрузки процессоров для оптимизации распараллеливания.
Первоначально прототипы современных операционные системы создавались как средство, освобождающее операторов ЭВМ второго поколения от рутинных работ (по установке лент и колод перфокарт на соответствующие внешние устройства, по загрузке программ для исполнения,
по обработке ошибок при чтении данных и сбоях процессора, по составлению очередности прохождения отдельных заданий, перемотке лент и т.д.).
22
Ко второй половине 80-х годов на мировом рынке ПЭВМ утвердились три
группы операционных систем, ориентированных на определенные классы
ПЭВМ.
1.Простейшие операционные системы для 8-разрядных ПЭВМ с оперативными запоминающими устройствами емкостью 50…150 Кб и внешней
памятью на гибких магнитных дисках. В группу простейших операционных
систем входят: ОС ДВК, МИКРОС, МикроДОС, СР/М-80. Эти системы были
рассчитаны на обслуживание одного пользователя, причем в каждый момент в памяти ПЭВМ могла находиться только одна прикладная программа. Сервис, предоставляемый пользователю, был минимален. Операционные системы этой группы характеризуются предельной простотой процедур обращения к ядру системы и достаточной гибкостью работы с
устройствами внешней памяти.
2.Инструментальные однопользовательские операционные системы
для 16-разрядных ПЭВМ с оперативными запоминающими устройствами
емкостью 256…1024 Кб (файлы размещаются как на гибких дисках, так и
на жестких дисках). В группу инструментальных однопользовательских
операционных систем входят: РАФОС-2 (с модификациями), МИКРОС-86,
АДОС для ПЭВМ «Искра 1030/1130», ДОС для ПЭВМ ЕС-1840/1841, MSDOS.
3.Мобильные инструментальные операционные системы для 32разрядных ПЭВМ с оперативными запоминающими устройствами емкостью более 1 Мб. К этой группе относятся операционные системы: UNIX,
XENIX, ИНМОС, ДЕМОС, МНОС, СР/М-68К.
1.4. Классификация операционных систем
Развитие компьютеров привело к появлению большого количества различных операционных систем. Единой классификации операционных систем нет, но в зависимости от разных факторов-критериев все операционные системы можно разделить на классы.
1.Классификация операционных систем по мощности аппаратных
средств.
1.1.Операционные системы мэйнфреймов – больших компьютеров, которые еще используются в центрах данных корпораций. Мэйнфреймы отличаются от персональных компьютеров по возможностям ввода-вывода.
Часто встречаются мэйнфреймы с большим количеством дисков и терабайтами данных. Мэйнфреймы возвращаются в виде мощных webсерверов, серверов для крупномасштабных электронно-коммерческих сайтов и серверов для транзакций в бизнесе. Операционные системы для
мэйнфреймов в основном ориентированы на обработку множества одновременных заданий, большинству из которых требуется огромное количество операций ввода-вывода. Обычно они предлагают три вида обслуживания:
- пакетная обработка, которая представляет собой систему, выпол-
23
няющую стандартные задания без присутствия пользователей, работающих в интерактивном режиме, например, обработка исков в страховых
компаниях, составление отчетов о продажах для цепи магазинов;
- системы обработки транзакций – системы, которые управляют
очень большим количеством маленьких запросов, например, контролируют процесс работы в банке или бронирование авиабилетов, каждый отдельный запрос невелик, но система должна отвечать на сотни или тысячи
запросов в секунду;
- системы, работающие в режиме разделения времени – системы, которые позволяют множеству удаленных пользователей одновременно выполнять свои задания на одной машине, например, работа с большой базой данных.
Указанные функции тесно связаны между собой, и зачастую операционная система мэйнфрейма выполняет их все, например, операционная
система OS/390, произошедшая от OS/360.
1.2.Серверные операционные системы – системы, которые работают
на серверах и представляют собой очень большие персональные компьютеры, рабочие станции или мэйнфреймы. Они одновременно обслуживают
множество пользователей и позволяют им делить между собой программные и аппаратные ресурсы. Серверы предоставляют возможность работы
с печатающими устройствами, файлами или Интернетом. Интернетпровайдеры обычно запускают в работу несколько серверов для того, чтобы поддерживать одновременный доступ к сети множества клиентов. На
серверах хранятся страницы web-сайтов и обрабатываются входящие запросы. Типичными серверными операционными системами являются
UNIX и Windows 2000, теперь в этих целях стала использоваться и операционная система Linux.
1.3.Операционные системы для персональных компьютеров. Их работа заключается в предоставлении удобного интерфейса для одного пользователя. Такие системы широко используются для работы с текстом,
электронными таблицами и для доступа к Интернету. Например: Windows
98, Windows 2000, ОС компьютера Macintosh и Linux. В настоящее время
распространены следующие семейства операционных систем: DOS (первый представитель этого семейства – система MS-DOS, Microsoft Disk
Operating System – дисковая операционная система фирмы Microsoft была
выпушена в 1981 году в связи с появлением IBM PC); OS/2; UNIX;
Windows; операционные системы реального времени.
1.4.Встроенные операционные системы – простые операционные системы, устанавливаемые в принтерах, кассовых аппаратах и других внешних устройствах. Состоят из микроядра и функциональных блоков, обеспечивающих подключение в сеть внешнего устройства. Такие системы,
управляющие действиями устройств, работают на машинах, обычно не
считающихся компьютерами, например в телевизорах, микроволновых печах, мобильных телефонах и карманных компьютерах. Карманный компьютер (PDA, Personal Digital Assistant – персональный цифровой помощник)
24
– это маленький компьютер, помещающийся в кармане брюк, выполняющий небольшой набор функций (телефонной записной книжки и блокнота).
Данный класс систем часто обладает такими же характеристиками, что и
системы реального времени, но при этом имеют особый размер, память и
ограничение мощности, что выделяет их в отдельный класс. Например,
операционные системы: Palm OS, Windows CE (Consumer Electronics – бытовая техника).
1.5.Операционные системы для смарт-карт – самые маленькие операционные системы, которые работают на смарт-картах. Смарт-карты
представляют собой устройства размером с кредитную карту, содержащие
центральный процессор. На операционные системы накладываются
крайне жесткие ограничения по мощности процессора и памяти. Некоторые из них могут управлять только одной операцией, например электронным платежом, другие выполняют более сложные функции. Часто они являются патентованными системами. Некоторые смарт-карты являются Java-ориентированными. Это означает, что ПЗУ (постоянная память, ROM,
Read Only Memory – память только для чтения) смарт-карт содержит интерпретатор виртуальной машины Java (JVM, Java Virtual Machine). Апплеты Java (маленькие программы) загружаются на карту и выполняются JVMинтерпретатором. Некоторые из таких карт могут одновременно управлять
несколькими апплетами Java, что приводит к многозадачности и необходимости планирования. Из-за одновременной работы двух и более программ возникает необходимость в управлении ресурсами и защитой. Все
эти задачи выполняет операционная система, находящаяся на смарткарте.
2.Классификация операционных систем для компьютеров по выполняемым функциям.
2.1.Дисковые операционные системы (ДОС) – системы, берущие на
себя выполнение только простых функций. Как правило, они представляют
собой некий резидентный набор подпрограмм. ДОС загружает пользовательскую программу в память и передает ей управление, по завершении
работы программа передает управление ДОС. Например, различные загрузочные мониторы для машин класса Spectrum. Как правило, такие системы работают одновременно только с одной программой. Прямым
наследником одного из таких резидентных мониторов является дисковая
операционная система MS DOS для IBM PC-совместимых ПК. Существование систем этого класса обусловлено их простотой и тем, что они потребляют мало ресурсов.
2.2.Операционные системы общего назначения (ОС). К этому классу
относятся системы, берущие на себя выполнение всех функций. Разделение на ОС и ДОС идет от систем IBM DOS/360 и OS/360 для больших компьютеров, клоны которых известны под названием ЕС ЭВМ серии 10ХХ.
ОС общего назначения рассчитаны на интерактивную работу одного или
нескольких пользователей в режиме разделения времени, при не очень
жестких требованиях ко времени реакции системы на внешние события.
25
Как правило, в таких системах уделяется большое внимание защите самой
системы, программного обеспечения и пользовательских данных от ошибочных и злонамеренных программ. Обычно подобные системы используют встроенные в архитектуру процессора средства защиты и виртуализации памяти. К этому классу относятся широко распространенные системы
семейства Windows 2000 и семейства Unix.
2.3.Системы виртуальных машин (СВМ) – операционные системы,
допускающие одновременную работу нескольких программ, но создающие
при этом для каждой программы иллюзию того, что машина находится в
полном ее распоряжении, как при работе под управлением ДОС. Зачастую, программой оказывается полноценная операционная система.
Например: операционная система VMWare для машин с архитектурой х86
или VM для System/370 и ее потомков. Виртуальные машины являются
ценным средством при разработке и тестировании кросс-платформенных
приложений. Реже они используются для отладки модулей ядра или самой
операционной системы. Такие системы отличаются высокими накладными
расходами и сравнительно низкой надежностью, поэтому относительно
редко находят промышленное применение. Часто СВМ являются подсистемой операционных систем общего назначения: MS DOS и MS Windowsэмуляторы для UNIX и OS/2, подсистема WoW в Windows NT/2000/XP,
DOS в Windows З.х/95/98/МЕ, эмулятор RT-11 в VAX/ VMS. В системах
виртуальных машин, как правило, приходится уделять много внимания
эмуляции работы аппаратуры. Например, несколько программ могут
начать программировать системный таймер. СВМ должна отследить такие
попытки и создать для каждой из программ иллюзию, что она запрограммировала таймер именно так, как хотела.
2.4.Операционные системы реального времени – системы с гарантированным временем реакции на событие, используются в системах технологического управления атомными станциями, химическими производствами и пр. Они предназначены для облегчения разработки приложений
реального времени, т.е. программ, управляющих некомпьютерным оборудованием, часто с очень жесткими ограничениями по времени. Жесткими
ограничениями по времени считаются такие ограничения, когда некоторое
действие должно произойти в конкретный момент времени или внутри заданного диапазона времени. Главным параметром таких систем является
время.
Примеры: программа бортового компьютера самолета, системы управления ускорителем элементарных частиц или промышленным оборудованием. В системах управления производством компьютеры, работающие в
режиме реального времени, собирают данные о промышленном процессе
и используют их для управления машинами на фабрике. Часто такие процессы должны удовлетворять жестким временным требованиям. Так, если
автомобиль передвигается по конвейеру, то каждое действие должно быть
осуществлено в строго определенный момент времени. Если сварочный
робот сварит шов слишком рано или слишком поздно, то нанесет непопра-
26
вимый вред машине. В вышеперечисленных случаях речь идет о жесткой
системе реального времени.
Подобные системы обязаны поддерживать многопоточность, гарантированное время реакции на внешнее событие, простой доступ к таймеру и
внешним устройствам. Способность гарантировать время реакции является отличительным признаком систем реального времени. Существует и
другой вид: гибкая система реального времени, в которой допустимы случающиеся время от времени пропуски сроков выполнения операций. В эту
категорию попадают цифровое аудио и мультимедийные системы. Наиболее известные операционные системы реального времени: VxWorks и
QNX.
2.5.Средства кросс-разработки – это системы, которые предназначены для разработки программ в двухмашинной конфигурации, когда редактирование, компиляция, а зачастую и отладка кода производятся на инструментальной машине, а потом скомпилированный код загружается в
целевую систему. Чаще всего они используются для написания и отладки
программ, позднее прошиваемых в постоянно запоминающем устройстве
(ПЗУ). Примерами таких операционных систем являются системы программирования микроконтроллеров Intel, Atmel, PIC и др., системы
Windows СЕ, Palm OS и т.д. Такие системы, как правило, включают в себя:
- набор компиляторов и ассемблеров, работающих на инструментальной машине с нормальной операционной системой;
- библиотеки, выполняющие большую часть функций операционных систем при работе программы, кроме загрузки программы;
- средства отладки.
Иногда встречаются кросс-системы, в которых компилятор работает не на
инструментальной машине, а в целевой системе, например, так устроена
среда разработки для семейства микропроцессоров Transputer компании
Inmos.
2.6.Системы промежуточных типов. Существуют системы, которые
нельзя отнести к одному из вышеперечисленных классов. Например:
- система RT-11, которая, по сути своей, является ДОС, но позволяет
одновременное исполнение нескольких программ с довольно богатыми
средствами взаимодействия и синхронизации;
- MS Windows 3.x и Windows 95, которые, как операционные системы
общего назначения, используют аппаратные средства процессора для защиты и виртуализации памяти и даже могут обеспечивать некоторое подобие многозадачности, но не защищают себя и программы от ошибок
других программ, подобно ДОС;
- системы реального времени, подобные QNX, могут использоваться в
качестве самостоятельной операционной системой, загружаемой с жесткого диска в оперативную память; в то же время, будучи прошиты в постоянном запоминающем устройстве (ПЗУ), они могут быть отнесены одновременно к операционным системам общего назначения и к системам кроссразработки.
27
3.Классификация операционных систем по числу одновременно выполняемых задач:
- однозадачные операционные системы – системы, которые поддерживают режим выполнения только одной программы в отдельный момент
времени, например, MS-DOS;
- многозадачные операционные системы – системы, которые поддерживают параллельное выполнение нескольких программ в рамках одной
вычислительной системы в один момент времени, например: UNIX, OS/2,
Windows.
Многозадачная операционная система, решая проблемы распределения ресурсов и конкуренции, полностью реализует мультипрограммный
режим. Многозадачный режим, который воплощает в себе идею разделения времени, называется вытесняющим (preemptive). Каждой программе
выделяется квант процессорного времени, по истечении которого управление, передается другой программе. В таком режиме работают пользовательские программы большинства коммерческих операционных систем. В
некоторых операционных системах (Windows 3.11) пользовательская программа может монополизировать процессор, то есть работает в невытесняющем режиме. Как правило, в большинстве систем код операционной
системы не подлежит вытеснению, ответственные программы, в частности
задачи реального времени, также не вытесняются. К многозадачным операционным системам относятся:
- операционные системы пакетной обработки – из программ, подлежащих выполнению, формируется пакет (набор) заданий, вводимых в ЭВМ
и выполняемых в порядке очередности с возможным учетом приоритетности;
- операционные системы разделения времени – системы, которые
обеспечивают одновременный диалоговый (интерактивный) режим доступа к ЭВМ пользователей на разных терминалах, которым по очереди выделяются ресурсы машины, что координируется операционной системой в
соответствии с заданной дисциплиной обслуживания;
- операционные системы реального времени – системы, которые
обеспечивают определенное гарантированное время ответа машины на
запрос пользователя при управлении им внешними событиями, процессами или объектами по отношению к ЭВМ.
4.Классификация операционных систем по числу одновременно работающих пользователей:
- однопользовательские операционные системы – системы, которые
поддерживают работу только одного пользователя (MS-DOS, Windows 3.x);
- многопользовательские операционные системы – системы, которые
поддерживают одновременную работу на ЭВМ нескольких пользователей
за различными терминалами (Windows NT, Unix).
Наиболее существенное отличие между этими операционными системами заключается в наличии у многопользовательских систем механизмов
защиты персональных данных каждого пользователя.
28
5.Классификация операционных систем по разрядности кода:
- 8-разрядные операционные системы;
- 16-разрядные операционные системы;
- 32-разрядные операционные системы;
- 64-разрядные операционные системы.
Разрядность показывает, какую разрядность внутренней шины данных
центрального процессора способна поддержать операционная система и
определяет программы, с которыми она будет работать. Все современные
операционные системы поддерживают 32-разрядный интерфейс прикладных программ. Разрядность кода интерфейса прикладных программ имеет
непосредственное отношение к адресному пространству оперативного запоминающего устройства (ОЗУ). Адресное пространство памяти – это
область адресов памяти, распределяющейся между операционной системой и данными; между видеопамятью, памятью BIOS ,блоком информации
запрещенного режима работы и т.д. Операционная система может поддерживать два режима работы центрального процессора: реальный и защищенный. В реальном режиме работы процессора, характерном для MS
DOS, все программы и данные располагаются в одной области оперативной памяти, т.е. пользователь может войти в системную программу и случайно испортить ее. Защищенный режим работы процессора поддерживается 32-разрядными операционными системами и позволяет хранить
программы и данные отдельно в соответствии с их важностью в системе.
6.Классификация операционных систем по количеству поддерживаемых процессоров:
- однопроцессорные операционные системы;
- многопроцессорные операционные системы.
До недавнего времени вычислительные системы имели один центральный процессор. В результате требований к повышению производительности появились многопроцессорные системы, состоящие из двух и
более процессоров общего назначения, осуществляющих параллельное
выполнение команд. Данный способ увеличения мощности компьютеров
заключается в соединении нескольких центральных процессоров в одной
системе. В зависимости от вида соединения процессоров и разделения
работы такие системы называются параллельными компьютерами,
мультикомпьютерами или многопроцессорными системами. Для них
требуются специальные операционные системы, но часто такие операционные системы представляют собой варианты серверных операционных
систем со специальными возможностями связи.
Поддержка мультипроцессирования является важным свойством операционных систем и приводит к усложнению всех алгоритмов управления
ресурсами. Многопроцессорная обработка реализована в операционных
системах: Linux, Solaris, Windows NT и др. Многопроцессорные операционные системы подразделяются на:
- симметричные операционные системы – на каждом процессоре
функционирует одно и то же ядро и задача может быть выполнена на лю-
29
бом процессоре, т.е. обработка полностью децентрализована, при этом
каждому из процессоров доступна вся память;
- асимметричные операционные системы – системы, в которых процессоры неравноправны, обычно существует главный процессор (master) и
подчиненные (slave), загрузку и характер работы которых определяет
главный процессор.
7.Классификация операционных систем по типу доступа пользователя к
ЭВМ:
- операционные системы пакетной обработки – из программ, подлежащих выполнению, формируется пакет (набор) заданий, вводимых в ЭВМ и
выполняемых в порядке очередности с возможным учетом приоритетности;
- операционные системы разделения времени – системы, которые,
обеспечивающих одновременный диалоговый (интерактивный) режим доступа к ЭВМ нескольких пользователей на разных терминалах, которым по
очереди выделяются ресурсы машины, что координируется операционной
системой в соответствии с заданной дисциплиной обслуживания;
- операционные системы реального времени – системы, которые
обеспечивают определенное гарантированное время ответа машины на
запрос пользователя с управлением им какими-либо внешними по отношению к ЭВМ событиями, процессами или объектами.
8.Классификация операционных систем по типу использования ресурсов:
8.1.Стандартные операционные системы (операционные системы
общего назначения) – предназначены для реализации следующих задач:
- для управления аппаратными средствами компьютера;
- для создания рабочей среды и интерфейса пользователя;
- для выполнения команд пользователя и программных инструкций;
- для организации ввода-вывода;
- для хранения и управления файлами и данными.
Наиболее известными стандартными операционных систем являются
MS DOS, MS Windows 95-98, Windows-2000, Professional, MS Windows Nt,
Ibm OS /2, At&T, Unix.
8.2.Сетевые операционные системы – системы, предназначеные для
управления ресурсами компьютеров, объединенных в сеть с целью совместного использования данных, которые предоставляют мощные средства разграничения доступа к данным в рамках обеспечения их целостности и сохранности, а также сервисные возможности по использованию сетевых ресурсов. Сетевые операционные системы подразделяются на следующие типы:
- одноранговые операционные системы, которые могут устанавливаться на любой рабочей станции и использоваться самостоятельно в виде отдельных программных средств, либо входить в состав пакетов, другую половину которых представляют программы, обслуживающие мощные
компьютеры управления сетями – серверы, например: OS/2, Windows Nt
Workstation;
- серверные операционные системы, которые отличаются большей
30
сложностью и мощностью, полностью заменяют собой стандартную операционную систему и состоят из 2-х частей, одна из которых расположена
на сервере, другая – на рабочих станциях.
К числу серверных операционных систем с высокой производительностью и широкими сетевыми возможностями относятся: Windows NT Server
Novell Net Ware, OS/2 SMP и др. Операционная система Windows 2000
Server, базируется на платформе Windows NT Server, в отличие от которой
имеет более высокую производительность и надежность. В состав семейства входят Windows 2000 Server для рабочих групп, Windows 2000
Advanced Server для приложений и более надежных серверов, Windows
2000 Data Saved Server или Windows 2000 Data Centered Server для наиболее ответственных систем обработки данных.
9.Классификация операционных систем по типу используемого интерфейса:
- текстовые операционные системы – операционные системы, основанные на интерфейсе командной строки, например: OS/360, CP/M, первые
версии MS-DOS и UNIX.
- операционные системы, поддерживающие графический интерфейс,
например, семейства операционных систем Microsoft Windows.
10.Семейства операционных систем. Часто можно проследить преемственность между различными операционными системами, необязательно
разработанными одной компанией. Преемственность обусловлена требованиями совместимости или переносимости прикладного программного
обеспечения и заимствованием отдельных удачных концепций. На основании преемственности можно выстроить генеалогические деревья операционных систем и объединять их в семейства. Можно выделить минимум
три семейства ныне эксплуатирующихся операционных систем и еще несколько вымерших или близких к тому:
- системы для больших компьютеров фирмы IBM: OS/390, z/OS и IBM
VM;
- семейство Unix обширное, постоянно развивающееся, выделяют три
рода: Unix System V Release 4.x: Sunsoft Solans, SCO UnixWare; Berkeley
Software Distribution Unix: BSDI, FreeBSD; Linux;
- семейство прямых и косвенных потомков Control Program/Monitor
(СР/М) фирмы Digital Research; в этом семействе выделяют широко известное подсемейство \sisname{Win 32}-платформ.;
- семейство практически вымершее, но оставившее в наследство ряд
важных и интересных концепций: операционные системы для мини- и микрокомпьютеров фирмы DEC: RT-11, RSX-11 и VAX/VMS;
- семейства операционных систем Windows, в настоящее время существует несколько различающихся направлений в семействе:
- Windows NT/2000;
- Windows XP;
- Windows 2003 Server.
31
Каждое направление состоит из некоторого числа модификаций версий
Windows, что позволяет выделить две области применения:
- версии персональные, такие как Windows XP Home Edition;
- версии для рабочих станций сетей, Windows 2000 Professional, Windows XP Professional;
- версии для серверов сетей, Windows 2000 Server, Windows 2000 Advanced Server, Windows 2000 Datacenter Server, Windows 2003 Server.
Среди общего числа версий Windows есть преемники принципиально
нового направления, технологии NT (New Technology, разрабатываемой
Microsoft с 1989 г.). К операционным системам технологии NT предъявляется ряд повышенных требований, в сравнении с потребительскими версиями Windows: поддержка многопроцессорных систем, вытесняющая
многозадачность, работа с виртуальной памятью, защищенная файловая
система и др. К ним относятся все версии операционных систем Windows
2000 и Windows XP. Системные файлы этих модификаций одинаковы, как
и ядро операционных систем. Они различаются между собой по числу
поддерживаемых процессоров, объему поддерживаемой физической памяти, одновременному числу сетевых подключений и наличием дополнительных сетевых сервисов.
В сравнении с предыдущими версиями (Windows 95/98/ME), у операционных систем технологии NT имеется ряд существенных отличий:
- повышение надежности работы ядра системы и исключение возможности зависания операционной системы из-за зависания или некорректной
работы пользовательской программы;
- возможность использования не только файловых систем из предыдущих версий Windows: FAT16 и FAT32, но и более безопасной и надежной
файловой системы NTFS (NT File System);
- NTFS повышает безопасность компьютера, так как допускает защиту
данных (файлов и папок) путем их шифрования и возможности установки
запрета на доступ к ним, кроме этого, обеспечивает более высокую степень сжатия информации и полную поддержку разделов и файлов большого размера;
- на одном компьютере можно запускать не только версии Windows
2000/XP, но и более ранние версии Windows 95/98/МЕ, для чего используется конфигурация с двойной загрузкой, где можно выбрать требуемую
операционную систему в данном сеансе работы.
Выбор типа операционной системы часто представляет собой сложную
задачу. Некоторые приложения накладывают жесткие требования, которым
удовлетворяет только небольшое количество систем. Например, задачи
управления промышленным или исследовательским оборудованием в режиме жесткого реального времени вынуждают делать выбор между специализированными операционными системами реального времени и некоторыми
операционными системами общего назначения, такими как Unix System V
Release 4. Хотя Unix SVR4 теоретически способна обеспечивать гарантированное время реакции, системы этого семейства имеют ряд недостатков с
32
точки зрения задач реального времени, поэтому чаще всего предпочтительными оказываются специализированные операционные системы (QNX,
VxWorks, OS-9 и пр.). Другие приложения, например серверы баз данных,
требуют высокой надежности и производительности, что отсекает системы
класса ДОС и MS Windows.
Некоторые задачи, такие как автоматизация конторской работы в небольших организациях, не предъявляют высоких требований к надежности, производительности и времени реакции системы, поэтому можно выбирать между
различными ДОС, MS Windows, Mac OS и другими операционными системами
общего назначения. При этом технические параметры системы перестают
иметь значимость, так как основополагающую роль играют другие факторы.
1.5. Требования, предъявляемые к современным
операционным системам
Операционная система является сердцевиной программного обеспечения, она создает среду для выполнения приложений и во многом определяет, какими полезными для пользователя свойствами эти приложения
будут обладать, поэтому к операционным системам предъявляются особые требования. Главным требованием, предъявляемым к операционным
системам, является способность выполнения основных функций, таких
как: эффективное управление ресурсами; обеспечение удобного интерфейса для пользователя и прикладных программ; реализация мультипрограммной обработки, виртуальной памяти, свопинг1, поддержка многооконного интерфейса и др. К современным операционным системам предъявляются не менее важные рыночные требования: расширяемость, переносимость, надежность и отказоустойчивость, совместимость, производительность, безопасность.
Требования, предъявляемые к современным операционным системам
Расширяемость
и переносимость
Надежность
и отказоустойчивость
Система научнотехнической
информации
Совместимость
Производительность
Безопасность
Рис. 1.5. Рыночные требования, предъявляемые к операционным системам
1.Расширяемость. Код операционной системы должен быть написан
таким образом, чтобы при необходимости можно было легко внести дополнения и изменения, не нарушая целостности системы. В то время как
аппаратная часть компьютера устаревает за несколько лет, полезная
Свопинг (подкачка) – операции выгрузки сегментов во внешнюю память и их повторная загрузка в основную память.
1
33
жизнь операционной системы может измеряться десятилетиями, например
ОС UNIX. Операционные системы эволюционно изменяются со временем,
и эти изменения более значимы, чем изменения аппаратных средств. Изменения операционной системы представляют собой приобретение новых
свойств, например, поддержка новых устройств, возможность связи с сетями нового типа, поддержка новых технологий. Причем сохранение целостности кода, какие бы изменения не вносились в операционную систему, является главной целью разработки.
Расширяемость может достигаться за счет модульной структуры операционной системы, при которой программы строятся из набора отдельных модулей, взаимодействующих через функциональный интерфейс. Новые компоненты добавляются в операционную систему модульным путем
и выполняют свою работу, используя интерфейсы, поддерживаемые существующими компонентами. Использование объектов для представления
системных ресурсов также улучшает расширяемость системы. Объекты –
это абстрактные типы данных, над которыми можно производить только те
действия, которые предусмотрены специальным набором объектных
функций. Объекты позволяют единообразно управлять системными ресурсами. Добавление новых объектов не разрушает существующие объекты и
не требует изменений существующего кода.
Прекрасные возможности для расширения предоставляет подход к
структурированию операционных систем по типу клиент-сервер с использованием микроядерной технологии. В соответствии с этим подходом операционная система строится как совокупность привилегированной управляющей программы и набора непривилегированных услуг-серверов. Основная часть операционной системы может оставаться неизменной при
добавлении новых серверов или улучшения старых. Другой возможностью
расширить функциональные возможности операционной системы являются средства вызова удаленных процедур (RPC), которые могут добавляться в любую машину сети и немедленно поступать в распоряжение прикладных программ на других машинах сети.
Некоторые операционные системы для улучшения расширяемости
поддерживают загружаемые драйверы, которые добавляются в систему во
время ее работы. Новые файловые системы, устройства и сети могут поддерживаться путем написания драйвера устройства, драйвера файловой
системы или транспортного драйвера и загрузки его в систему.
2.Переносимость. Код операционной системы должен легко переноситься с процессора одного типа на процессор другого типа и с аппаратной платформы (которая включает наряду с типом процессора и способ
организации всей аппаратуры компьютера) одного типа на аппаратную
платформу другого типа. Требование переносимости кода тесно связано с
расширяемостью. Расширяемость позволяет улучшать операционную систему, в то время как переносимость дает возможность перемещать всю
систему на машину, базирующуюся на другом процессоре или аппаратной
платформе, делая при этом по возможности небольшие изменения в коде.
34
Операционные системы описываются либо как переносимые, либо как непереносимые. При написании переносимой операционной системы нужно
следовать следующим правилам:
- большая часть кода должна быть написана на языке, который имеется
на всех машинах, обычно на языке высокого уровня, предпочтительно
стандартизованном, например, на языке С (программа, написанная на ассемблере, не является переносимой, если только ее не придется переносить на машину, обладающую командной совместимостью с той, для которой написана операционная система);
- необходимо учитывать физическое окружение, в которое программа
должна быть перенесена, так как различная аппаратура требует различных решений при создании операционной системы (например, операционная система, построенная на 32-битовых адресах, не может быть перенесена на машину с 16-битовыми адресами);
- нужно минимизировать или по-возможности исключить части кода, которые непосредственно взаимодействуют с аппаратными средствами, так
как зависимость от аппаратуры может иметь много форм (некоторые очевидные формы зависимости включают прямое манипулирование регистрами и другими аппаратными средствами);
- если аппаратно зависимый код не может быть полностью исключен, то
он должен быть изолирован в нескольких хорошо локализуемых модулях.
3.Надежность и отказоустойчивость. Система должна быть защищена от внутренних и внешних ошибок, сбоев и отказов. Действия операционной системы должны быть предсказуемыми и приложения не должны
приводить к ее сбоям.
4.Совместимость. Операционная система должна иметь средства для
выполнения прикладных программ, написанных для других операционных
систем, или для более ранних версий данной операционной системы, причем пользовательский интерфейс должен быть совместим с существующими системами и стандартами. Совместимость операционных систем
рассматривается на двух уровнях:
- на уровне двоичной совместимости, которая достигается совместимостью на уровне команд процессора, на уровне системных вызовов и на
уровне библиотечных вызовов, если они являются динамически связываемыми;
- на уровне совместимости исходных текстов приложений, что требует наличия соответствующего компилятора в составе программного
обеспечения, а также совместимости на уровне библиотек и системных
вызовов, при этом необходима перекомпиляция имеющихся исходных текстов в новый выполняемый модуль.
Совместимость на уровне исходных текстов важна для разработчиков
приложений, для конечных пользователей практическое значение имеет
только двоичная совместимость, благодаря которой один и тот же коммерческий продукт можно использовать в различных операционных средах и на
различных машинах. Совместимость зависит от многих факторов, самый
35
важный фактор – архитектура процессора. Если процессор, на который переносится операционная система, использует аналогичный набор команд
(возможно с некоторыми добавлениями) и тот же диапазон адресов, тогда
двоичная совместимость может быть достигнута достаточно просто. Совместимость между процессорами, основанными на разных архитектурах, требует написания специальных подпрограмм и использование прикладных
сред. Учитывая, что основную часть программы, как правило, составляют
вызовы библиотечных функций, прикладная среда имитирует библиотечные
функции целиком, используя заранее написанную библиотеку функций аналогичного назначения, а остальные команды эмулирует каждую по отдельности.
Другим средством обеспечения совместимости программных и пользовательских интерфейсов является соответствие стандартам POSIX, которые
правительственные агентства США начали разрабатывать во второй половине 80-х годов в качестве стандартов на поставляемое оборудование при
заключении правительственных контрактов в компьютерной области. POSIX
– собрание международных стандартов интерфейсов операционных систем в стиле UNIX. Использование стандарта POSIX (IEEE стандарт 1003.1
- 1988) позволяет создавать программы в стиле UNIX, которые могут легко
переноситься из одной вычислительной системы в другую.
5.Безопасность. Операционная система должна обладать средствами
защиты ресурсов одних пользователей от других. В дополнение к стандарту
POSIX правительство США определило требования компьютерной безопасности для приложений, используемых правительством, которые стали желаемыми свойствами для любой многопользовательской системы. Правила
безопасности определяют такие свойства, как защита ресурсов одного пользователя от других и установление квот по ресурсам для предотвращения
захвата одним пользователем всех системных ресурсов, например, памяти.
Обеспечение защиты информации от несанкционированного доступа является обязательной функцией сетевых операционных систем. В большинстве
популярных систем гарантируется степень безопасности данных, соответствующая уровню С2 в системе стандартов США.
Основы стандартов в области безопасности были заложены правилами
«Критерии оценки надежных компьютерных систем». Этот документ, изданный в США в 1983 году национальным центром компьютерной безопасности
(NCSC – National Computer Security Center), часто называют Оранжевой Книгой. В соответствии с требованиями Оранжевой книги безопасной считается
такая система, которая «посредством специальных механизмов защиты контролирует доступ к информации таким образом, что только имеющие соответствующие полномочия лица или процессы, выполняющиеся от их имени,
могут получить доступ на чтение, запись, создание или удаление информации».
Иерархия уровней безопасности, приведенная в Оранжевой Книге, помечает низший уровень – «D», высший – «А». В класс D попадают системы,
оценка которых выявила их несоответствие требованиям всех других клас-
36
сов. Основными свойствами уровня С являются: наличие подсистемы учета
событий, связанных с безопасностью, и избирательный контроль доступа.
Уровень С включает два подуровня: С1 – обеспечивает защиту данных от
ошибок пользователей; С2 – обеспечивает идентификацию пользователей
путем ввода уникального имени и пароля перед доступом к системе.
Избирательный контроль доступа позволяет владельцу ресурса определить, кто имеет доступ к ресурсу и что он может с ним делать, путем предоставляемых прав доступа пользователю или группе пользователей. Средства учета и наблюдения (auditing) обеспечивают возможность обнаружить и
зафиксировать важные события, связанные с безопасностью, или любые попытки создать, получить доступ или удалить системные ресурсы. Защита
памяти обеспечивается инициализацией перед повторным использованием.
На этом уровне система не защищена от ошибок пользователя, но поведение его может быть проконтролировано по записям в журнале, оставленным
средствами наблюдения и аудитинга.
Системы уровня В основаны на помеченных данных и распределении
пользователей по категориям, то есть реализуют мандатный контроль доступа. Каждому пользователю присваивается рейтинг защиты, и он может
получать доступ к данным только в соответствии с этим рейтингом. Этот
уровень в отличие от уровня С защищает систему от ошибочного поведения
пользователя. Уровень А является самым высоким уровнем безопасности,
он требует в дополнение ко всем требованиям уровня В выполнения формального, математически обоснованного доказательства соответствия системы требованиям безопасности. Уровень безопасности А занимает своими
управляющими механизмами до 90% процессорного времени.
6.Производительность. Система должна обладать настолько хорошим
быстродействием и временем реакции, насколько это позволяет аппаратная
платформа.
37
Вопросы
1. Перечислите слои программного обеспечения вычислительной системы.
2. Определите назначения уровня микроархитектуры.
3. Как определяется термин «операционная система»?
4. Определите назначение операционных систем.
5. Как определяется термин «вычислительная система»?
6. Определите структуру вычислительной системы.
7. Определите типы вычислительных систем.
8. Определите отличие однопрограммного режима от мультипрограммного режима.
9. Определите отличие режима пакетной обработки задач от режима
коллективного доступа.
10. Определите режимы работы операционной системы.
11. Как определяется термин «приложение операционной системы»?
12. Как определяется термин «операционная среда»?
13. Как определяется термин «интерфейс»?
14. Определите отличие диалогового режима от пакетного режима.
15. Определите виды интерфейсов.
16. Определите основные технологии реализации интерфейсов.
17. Какие группы операционных систем, ориентированных на определенные классы ПЭВМ, утвердились ко второй половине 80-х годов на мировом рынке ПЭВМ?
18. Перечислите типы операционных систем, отличающихся по мощности аппаратных средств..
19. Перечислите типы операционных систем, отличающихся по числу
одновременно выполняемых задач.
20. Перечислите типы операционных систем, отличающихся по типу используемых ресурсов.
21. Перечислите типы сетевых операционных систем.
22. Какими требованиями обусловлена преемственность операционных
систем?
23. Перечислите наиболее известные семейства операционных систем.
24. Определите главное требование, предъявляемое к операционным
системам.
25. Перечислите основные требования, предъявляемые к современным
операционным системам.
26. Определите уровни совместимости операционных систем.
27. Перечислите факторы, от которых зависит совместимость операционных систем.
28. Как определяется термин «POSIX»?
29. Назовите документ, ставший основой стандартов в области безопасности операционных систем.
38
Тесты
1.Какие элементы входят в состав аппаратного обеспечения вычислительной системы?
физические устройства
микроархитектура и физические устройства
машинный язык, микроархитектура и физические устройства
2.Какие элементы входят в состав вычислительной системы?
техническое обеспечение
программное обеспечение
техническое и программное обеспечение
3.Какими средствами вычислительной системы обеспечивается
мультипрограммный режим?
аппаратными средствами ЭВМ
программными средствами
аппаратными средствами и средствами операционной системы
4.Какая техническая база характерна для первого периода развития
вычислительной техники?
полупроводниковая
интегральные микросхемы
лампы
5.Что было прообразом современных операционных систем?
компиляторы с символических языков
библиотеки математических си служебных программ
системы пакетной обработки
6.Какие режимы работы операционной системы различают в соответствии с условиями применения?
режим пакетной обработки
режим реального времени, режим разделения времени
режим реального времени, режим разделения времени, режим пакетной обработки
7.Какие типы интерфейсов обеспечивает операционная система?
39
интерфейс пользователя и программный интерфейс
аппаратно-программный интерфейс
аппаратно-программный интерфейс, интерфейс пользователя, программный интерфейс
8.На каких уровнях работает операционная система, как интерфейс
между пользователем и аппаратными средствами компьютера.
на прикладном уровне
на программном уровне
на прикладном уровне и программном уровнях
9.К чему относится термин спулинг?
к организации реального ввода пакета заданий и вывода результатов
на отдельных специализированных ЭВМ
к сбору заданий с одинаковым набором ресурсов в пакеты заданий
к организации реального ввода пакета заданий и вывода результатов
на том же компьютере, который производит вычисления
10.Планирование заданий стало возможным:
с появлением систем пакетной обработки
с появлением последовательной обработки данных
с появлением предварительной записи пакета заданий на магнитный
диск
11.Возможность интерактивного взаимодействия пользователя и
программы возникла с появлением:
систем пакетной обработки
мультипрограммных вычислительных систем
систем разделения времени
12.Мультипрограммная вычислительная система это:
система, в которой реализован спулинг
система, в памяти которой одновременно находится несколько программ, чье исполнение чередуется по прошествии определенного
промежутка времени
система, в памяти которой одновременно находится несколько программ; когда одна из программ ожидает завершения операции вводавывода, другая программа может исполняться
40
Глава 2. Особенности архитектуры операционных систем
2.1. Функции операционных систем
Все операционные системы выполняют ряд функций (рис.2.1.).
1.Обеспечение интерфейса пользователя. По реализации интерфейса пользователя различают неграфические и графические операционные
системы. Неграфические операционные системы реализуют интерфейс
командной строки, при котором основным устройством управления является клавиатура. Управляющие команды вводят в поле командной строки,
где их можно редактировать. Исполнение команды начинается после ее
утверждения, например нажатием клавиши Enter. Для компьютеров платформы IBM PC интерфейс командной строки обеспечивается семейством
операционных систем под общим названием MS-DOS (версии от MS-DOS
1.0 до MS-DOS 6.2).
Прочие функции:
 обеспечение доступа к службам
Интернета;
 наличие средств
защиты от несанкционированного доступа;
 и пр.
Обслуживание
компьютера
Обеспечение взаимодействия с
аппаратным обеспечением
Управление установкой, исполнением и удалением
приложений
Обслуживание
файловой
структуры
Организация
файловой
системы
Обеспечение автоматического
запуска
Обеспечение интерфейса пользователя
Функции операционных систем
Рис. 2.1. Функции операционных систем персональных компьютеров
Графические операционные системы реализуют более сложный тип
интерфейса, в котором в качестве органа управления кроме клавиатуры
может использоваться мышь или адекватное устройство позиционирования. Работа с графической операционной системой основана на взаимодействии активных и пассивных экранных элементов управления. Активным элементом управления выступает указатель мыши – графический
объект, перемещение которого на экране синхронизировано с перемещением мыши. В качестве пассивных элементов управления выступают графические элементы управления приложений (экранные кнопки, значки,
переключатели, флажки, раскрывающиеся списки, строки меню и многие
другие). Характер взаимодействия между активными и пассивными элементами управления выбирает сам пользователь. В его распоряжении
приемы наведения указателя мыши на элемент управления, щелчки кнопками мыши и другие средства.
2.Обеспечение автоматического запуска. Все операционные системы
обеспечивают свой автоматический запуск. Для дисковых операционных
систем в специальной (системной) области диска создается запись программного кода. Обращение к этому коду выполняют программы, находя-
41
щиеся в базовой системе ввода-вывода (BIOS). Завершая свою работу,
они дают команду на загрузку и исполнение содержимого системной области диска. Недисковые операционные системы используются в специализированных вычислительных системах (например, в компьютеризированных устройствах автоматического управления). Математическое обеспечение таких систем содержится в микросхемах ПЗУ и его можно условно
рассматривать как аналог операционной системы, автоматический запуск
которой осуществляется аппаратно. При подаче питания процессор обращается к фиксированному физическому адресу ПЗУ (его можно изменять
аппаратно с использованием логических микросхем), с которого начинается запись программы инициализации операционной системы.
3.Организация файловой системы. Все современные дисковые операционные системы обеспечивают создание файловой системы, предназначенной для хранения данных на дисках и обеспечения доступа к ним.
Принцип организации файловой системы – табличный. Поверхность
жесткого диска рассматривается как трехмерная матрица, измерениями
которой являются номера поверхности, цилиндра и сектора. Под цилиндром понимается совокупность всех дорожек, принадлежащих разным поверхностям и находящихся на равном удалении от оси вращения. Данные
о месте нахождения файла не диске хранятся в системной области диска
в FAT-таблицах – таблицах размещения файлов. Нарушение FAT-таблицы
приводит к невозможности воспользоваться данными, записанными на
диске. Поэтому к таблице предъявляются особые требования надежности,
и она имеет дубликат. Идентичность таблиц регулярно контролируется
средствами операционной системы.
Наименьшей физической единицей хранения данных является сектор,
размер которого равен 512 байт. Поскольку размер FAT-таблицы ограничен, то для дисков, размер которых превышает 32 Мбайт, обеспечить адресацию к каждому отдельному сектору не представляется возможным. В
связи с этим группы секторов условно объединяются в кластеры –
наименьшие единицы адресации к данным, размер которых не фиксирован и зависит от емкости диска.
Операционные системы MS-DOS, OS/2, Windows 95 и Windows NT реализуют 16-разрядные поля в таблицах размещения файлов. Такая файловая система называется FAT16. Она позволяет разместить в FATтаблицах не более 65536 записей (216). Размер кластера для дисков объемом от 1 до 2 Гбайт составляет 32 Кбайт (64 сектора), что не является рациональным расходом рабочего пространства, поскольку файл (даже
очень маленький) полностью занимает весь кластер и ему соответствует
только одна адресная запись в FAT-таблице. Если файл большой и располагается в нескольких кластерах, то в последнем кластере все равно
остается часть свободного пространства, что приводит к его нерациональному использованию.
Для современных жестких дисков потери, связанные с неэффективностью файловой системы, весьма значительны и могут составлять от 25%
42
до 40% полной емкости диска, в зависимости от среднего размера хранящихся файлов. С дисками же размером более 2 Гбайт файловая система
FAT16 работать не может. Более совершенную организацию файловой системы обеспечивает операционная система с 32-разрядными полями в
таблице размещения файлов – FAT32 . Для дисков размером до 8 Гбайт
эта система обеспечивает размер кластера 4 Кбайт (8 секторов).
4.Обслуживание файловой системы. Несмотря на то, что данные о местоположении файлов хранятся в табличной форме, пользователю они
предоставляются в виде иерархической структуры. Все необходимые преобразования берет на себя операционная система. К функции обслуживания файловой системы относятся следующие операции:
- создание файлов и присвоение им имен;
- создание каталогов (папок) и присвоение им имен;
- переименование файлов и каталогов (папок);
- копирование и перемещение файлов между дисками компьютера и
между каталогами (папками) одного диска;
- удаление файлов и каталогов (папок);
- навигация по файловой структуре с целью доступа к заданному файлу, каталогу (папке);
- управление атрибутами файлов.
4.1.Создание и именование файлов. Файл представляет собой именованная последовательность байтов произвольной длины. Из определения
вытекает, что файл может иметь нулевую длину, поэтому фактически создание файла состоит в присвоении ему имени и регистрации его в файловой системе. По способам именования файлов различают короткое и
длинное имя. До появления операционной системы Windows 95 общепринятым способом именования файлов на компьютерах IBM PC было соглашение 8.3, согласно которому имя файла состояло из двух частей: собственно имени и расширения имени. На имя файла отводилось 8 символов, на его расширение – 3 символа. Имя от расширения отделялось точкой. В имя и расширение включались только алфавитно-цифровые символы латинского алфавита и некоторые специальные символы.
Основным недостатком коротких имен была их низкая содержательность, поэтому с появлением операционной системы Windows 95 было
введено понятие длинного имени, которое могло содержать до 256 любых
символов, кроме девяти специальных: \ /:*?"<> |. В имени разрешалось использовать пробелы и несколько точек. Расширением имени считатались
символы, идущие после последней точки. Наряду с длинным именем операционные системы семейства Windows создают и короткое имя файла,
которое необходимо для возможности работы с данным файлом на рабочих местах с устаревшими операционными системами.
4.2.Создание каталогов (папок). Каталоги (папки) – элементы иерархической структуры, необходимые для обеспечения удобного доступа к
файлам, если файлов на носителе много. Файлы объединяются в каталоги
по любому общему признаку, заданному их создателем (по типу, по при-
43
надлежности, по назначению, по времени создания и т.п.). Каталоги низких
уровней вкладываются в каталоги более высоких уровней и являются для
них вложенными. Верхним уровнем вложенности иерархической структуры
является корневой каталог диска. Все современные операционные системы позволяют создавать каталоги. Правила присвоения имени каталогу
аналогичны правилам присвоения имени файлу, только для каталогов не
принято задавать расширения имен.
В иерархических структурах данных адрес объекта задается маршрутом, ведущим от вершины структуры к объекту. При записи пути доступа к
файлу, проходящего через систему вложенных каталогов, все промежуточные каталоги разделяются между собой определенным символом. Во
многих операционных системах в качестве такого символа используется
«\» (обратная косая черта). В ранних версиях операционных систем при
описании иерархической файловой структуры использовался термин «каталог». С появлением Windows 95 был введен новый термин «папка». В
обслуживании файловой структуры носителя данных эти термины равнозначны. Основное отличие понятий «папка» и «каталог» проявляется в
организации хранения объектов. Например, в операционных системах семейства Windows существуют специальные папки, представляющие собой
удобные логические структуры, которым не соответствует ни один каталог
диска.
4.3.Копирование и перемещение файлов. В неграфических операционных системах операции копирования и перемещения файлов выполняются
вводом команды в поле командной строки. При этом указывается имя команды, путь доступа к каталогу-источнику и путь доступа к каталогуприемнику. В графических операционных системах используются приемы
работы с устройством позиционирования, позволяющие выполнять эти
команды наглядными методами.
4.4.Удаление файлов и каталогов (папок). Существует три режима
удаления данных: удаление, уничтожение и стирание. Операционная система обеспечивают только два первых режима. Режим стирания данных
обеспечивают специальные программные средства. В операционных системах семейства Windows удаление организовано с помощью специальной папки - Корзины, в которую перемещаются удаляемые файлы. Эта
операция происходит на уровне файловой структуры операционной системы и изменяет путь доступа к «удаленным» файлам. На уровне файловой системы жесткого диска файлы остаются в секторах, где были ранее
записаны. Уничтожение файлов происходит при очистке Корзины или при
их удалении в операционной системе MS-DOS или. В этом случае файл
полностью удаляется из файловой структуры операционной системы, но
на уровне файловой системы диска с ним происходят лишь незначительные изменения. В таблице размещения файлов он помечается как удаленный, хотя физически остается там же, где и был. Это сделано для минимизации времени операции. При этом открывается возможность записи
новых файлов в кластеры, помеченные как «свободные».
44
Операция стирания файлов, выполняемая специальными служебными
программами, состоит в заполнении кластеров, помеченных как «свободные», оставшиеся после уничтоженного файла. Поскольку даже после перезаписи данных их еще можно восстановить специальными аппаратными
средствами (путем анализа остаточного магнитного гистерезиса), для
надежного стирания файлов требуется провести не менее пяти актов случайной перезаписи в одни и те же сектора. Эта операция весьма продолжительна и массовому потребителю не нужна, поэтому ее не включают в
стандартные функции операционных систем.
4.5.Навигация по файловой структуре. Цель навигации состоит в
обеспечении доступа к нужной папке и ее содержимому. В операционных
системах, имеющих интерфейс командной строки, навигацию осуществляют путем ввода команд перехода с диска на диск или из каталога в каталог. В связи с неудобством такой навигации, широкое применение
нашли специальные служебные программы – файловые оболочки неграфические и графические. Например, для MS-DOS: неграфическая файловая оболочка – диспетчер файлов Norton Commander; графическая файловая оболочка – Windows 1.0 и 2.0, которые развились до операционной
среды (в версиях Windows 3.x) и далее до самостоятельного класса операционных систем семейства Windows. В графических операционных системах навигация по файловой структуре осуществляется устройствами
позиционирования. Например, в операционных системах семейства
Windows навигация осуществляется в левой панели программы Проводник, где показана структура папок.
4.6.Управление атрибутами файлов. Операционная система хранит
для каждого файла имя и расширение имени, дату его создания (изменения) и атрибуты – дополнительные параметры, определяющие свойства
файлов. Операционная система позволяет контролировать и изменять;
состояние атрибутов, которое учитывается при проведении операций с
файлами. Основных атрибутов четыре: Только для чтения (Read only);
Скрытый (Hidden); Системный (System); Архивный (Archive).
Атрибут «Только для чтения» ограничивает возможности работы с
файлом, который не предназначен для внесения изменений. Атрибут
«Скрытый» сообщает операционной системе о том, что данный файл не
следует отображать на экране при проведении файловых операций, что
является мерой защиты против случайного (умышленного или неумышленного) повреждения файла. Атрибутом «Системный» помечаются файлы, обладающие важными функциями в работе операционной системы и
их нельзя изменить средствами операционной системы. Большинство
файлов, имеющих установленный атрибут «Системный», имеют также
атрибут «Скрытый».
Атрибут «Архивный» в прошлом использовался для работы программ
резервного копирования. Предполагалось, что любая программа, изменяющая файл, должна автоматически устанавливать этот атрибут, а средство резервного копирования должно его сбрасывать. Таким образом,
45
очередному резервному копированию подлежали только те файлы, у которых этот атрибут был установлен. Современные программы резервного
копирования используют другие средства для установления факта изменения файла, и данный атрибут во внимание не принимается, а его изменение вручную средствами операционной системы не имеет практического
значения.
5.Управление установкой, исполнением и удалением приложений. С
точки зрения управления исполнением приложений, различают однозадачные и многозадачные операционные системы. Однозадачные операционные системы (например, MS-DOS) передают все ресурсы вычислительной системы одному исполняемому приложению и не допускают ни
параллельного выполнения другого приложения (полная многозадачность), ни его приостановки и запуска другого приложения (вытесняющая
многозадачность). Параллельно с однозадачными операционными системами возможна работа только специальных резидентных программ,
которые не опираются на операционную систему, а непосредственно работают с процессором, используя его систему прерываний.
Большинство современных графических операционных систем являются многозадачными. Они управляют распределением ресурсов вычислительной системы между задачами и обеспечивают:
- возможность одновременной или поочередной работы нескольких
приложений;
- возможность обмена данными между приложениями;
- возможность совместного использования программных, аппаратных,
сетевых и прочих ресурсов вычислительной системы несколькими приложениями.
Надежность вычислительной системы во многом зависит от того, как
операционная система управляет работой приложений. Операционная система должна предоставлять возможность прерывания работы приложений по желанию пользователя и снятия сбойной задачи без ущерба для
работы других приложений. При этом требование надежности операционной системы может входить в противоречие с требованием ее универсальности. Например, наиболее универсальные операционные системы
семейства Windows 95 и Windows 98 могут испытывать общесистемные
сбои из-за работы с приложениями, недостаточно четко соблюдающими их
спецификацию. Операционные системы семейства Windows NT и OS/2 обладают повышенной устойчивостью и не выходят из строя при сбое приложений, но имеют меньшую универсальность, и, соответственно, парк
доступных приложений для них ограничен. Вопрос надежности операционной системы особо остро стоит для программистов. В процессе отладки
программ возможны многочисленные сбои из-за несовершенства их кода.
5.1.Установка приложений. Для правильной работы приложений они
должны пройти операцию установки. Необходимость в установке связана
с тем, что разработчики программного обеспечения не могут заранее
предвидеть особенности аппаратной и программной конфигурации вычис-
46
лительной системы, на которой предстоит работать их программам. Таким
образом, дистрибутивный комплект (установочный пакет) программного
обеспечения, как правило, представляет собой не законченный программный продукт, а полуфабрикат, из которого в процессе установки на компьютере формируется полноценное рабочее приложение. При этом осуществляется привязка приложения к существующей аппаратнопрограммной среде и его настройка на работу в этой среде.
Устаревшие операционные системы не имеют средств для управления
установкой приложений. Единственное средство, которое они предоставляют – возможность запуска устанавливающей программы, прилагаемой к
дистрибутивному комплекту. Такая установка отличается крайней простотой, но и невысокой надежностью, поскольку правильность привязки приложения к окружающей программно-аппаратной среде зависит от того,
насколько разработчик устанавливающей программы сумел заранее
предусмотреть возможные варианты конфигурации вычислительной системы конкретного пользователя.
Современные графические операционные системы берут на себя
управление установкой приложений. Они управляют распределением ресурсов вычислительной системы между приложениями, обеспечивают доступ устанавливаемых приложений к драйверам устройств вычислительной системы, формируют общие ресурсы, которые могут использоваться
разными приложениями, выполняют регистрацию установленных приложений и выделенных им ресурсов.
5.2.Удаление приложений. Процесс удаления приложений имеет свои
особенности. В операционной системе, где каждое приложение обеспечено собственными ресурсами (например, в MS-DOS), его удаление не требует специального вмешательства операционной системы. Достаточно
удалить каталог, в котором размещается приложение.
В операционных системах, реализующих принцип совместного использования ресурсов, процесс удаления приложений имеет особенности.
Нельзя допустить, чтобы при удалении одного приложения были удалены
ресурсы, на которые опираются другие приложения. В связи с этим удаление приложений происходит под строгим контролем операционной системы. Полнота удаления и надежность последующего функционирования
операционной системы и оставшихся приложений во многом зависят от
корректности установки и регистрации приложений в реестре операционной системы.
6.Обеспечение взаимодействия с аппаратным обеспечением. Средства аппаратного обеспечения вычислительной техники отличаются большим многообразием, поэтому ни один разработчик программного обеспечения не может предусмотреть все варианты взаимодействия своей программы с аппаратными средствами. Гибкость аппаратных и программных
конфигураций вычислительных систем поддерживается за счет разработки разработчиком оборудования специальных программных средств
управления оборудованием – драйверов, предназначенных для основных
47
операционных систем. Драйверы имеют точки входа для взаимодействия с
прикладными программами, а диспетчеризация обращений прикладных
программ к драйверам устройств является одной из функций операционной системы.
В операционной системе MS-DOS драйверы устройств загружались как
резидентные программы, напрямую работающие с процессором и другими
устройствами материнской платы. Участие операционной системы сводилось к предоставлению пользователю возможности загрузки драйвера, после чего драйвер перехватывал прерывания, используемые для обращения к устройству, и управлял его взаимодействием с вызывающей программой. Загрузка драйверов устройств осуществлялась двумя способами.
Ручная загрузка производилась после первоначальной загрузки компьютера, когда пользователь сам выдавал команды на загрузку драйверов. Автоматическая загрузка реализовалась с помощью команд на загрузку и
настройку драйверов включенных в состав файлов, автоматически читаемых при загрузке компьютера. Например, в MS-DOS такие файлы назывались файлами конфигурации: autoexec.bat и config.sys. В эти файлы включали команды загрузки драйвера мыши, дисковода CD-ROM, звуковой карты, расширенной памяти и пр.
Современные операционные системы берут на себя все функции по
установке драйверов устройств и передаче им управления от приложений.
Во многих случаях операционная система не нуждается в драйверах, полученных от разработчика устройства, так как использует драйвера из
собственной базы данных. Каждое подключенное устройство может использовать до трех аппаратных ресурсов устройств материнской платы:
адресов внешних портов процессора, прерываний процессора и каналов
прямого доступа к памяти. Если устройство подключается к материнской
плате через шину PCI, имеется техническая возможность организовать
между ним и материнской платой обратную связь. Это позволяет операционной системе анализировать требования устройств о выделении им ресурсов и гибко реагировать на них, исключая захват одних и тех же ресурсов разными устройствами. Такой принцип динамического распределения
ресурсов операционной системой получил название plug-and-play, а
устройства, удовлетворяющие этому принципу, называются самоустанавливающимися.
Если же устройство подключается к устаревшей шине ISA и не является самоустанавливающимся, то в этом случае операционная система не
может динамически выделять ему ресурсы, но при распределении ресурсов для самоустанавливающихся устройств она учитывает ресурсы, захваченные им.
7.Обслуживание компьютера. Предоставление операционной системой основных средств обслуживания компьютера обычно реализуется за
счет включения в ее базовый состав служебных приложений.
7.1.Средства проверки дисков. Надежность работы дисков определяет
надежность работы компьютера и безопасность хранения данных. Сред-
48
ства проверки дисков реализуются в двух категориях: средства логической проверки – проверки целостности файловой структуры, и средства
физической диагностики поверхности. Логические ошибки, как правило,
устраняются средствами операционной системы, а физические дефекты
поверхности только локализуются, операционная система принимает во
внимание факт повреждения магнитного слоя в определенных секторах и
исключает их из работы.
Логические ошибки файловой структуры имеют два характерных проявления: потерянные кластеры или общие кластеры. Потерянные кластеры образуются в результате неправильного (или аварийного) завершения работы с компьютером. Во всех операционных системах нельзя выключать компьютер, если на нем запущены приложения, осуществляющие
обмен информацией с дисками. В операционных системах семейства
Windows нельзя выключать компьютер, если не исполнена специальная
процедура завершения работы с операционной системой. Механизм образования потерянных кластеров следующий:
- во время работы с файлом приложение манипулирует с кластерами,
занимая или освобождая их, и регистрирует сведения об этом в FATтаблице, но не записывает полные сведения о файле в каталог;
- если при завершении работы с приложением происходит сохранение
результатов деятельности, оно вносит окончательные изменения в FATтаблицы и регистрирует данные, записанные в кластерах, как файл в каталоге;
- если при завершении работы с приложением файл уничтожается, информация не фиксируется в каталоге, а использованные кластеры освобождаются;
- если компьютер выключается до завершения работы с приложением,
кластеры остаются помеченными как «занятые», но ссылки на них в каталоге не создаются, так что согласно данным FAT-таблицы этим кластерам
не соответствует ни один файл.
Ошибка, связанная с потерянными кластерами, легко парируется средствами операционной системы. При этом можно либо полностью освободить данные кластеры, либо превратить их в полноценные файлы, которые можно просмотреть в поисках ценной информации, утраченной во
время сбоя.
Ошибка, связанная с общими кластерами характеризуется тем, что согласно данным FAT-таблиц, два или более файлов претендуют на то, что
их данные находятся в одном и том же месте диска. При нормальной работе такой ситуации быть не может. Причиной появления общих кластеров
может стать самопроизвольное изменение данных в FAT-таблицах или некорректное восстановление ранее удаленных данных с помощью внесистемных средств. Некорректность может быть обусловлена нарушением
порядка операций восстановления данных или неадекватностью средств
восстановления данных (например, использованием средств MS-DOS для
восстановления файлов, записанных средствами Windows).
49
Ошибка, связанная с общими кластерами, парируется повторной записью обоих конфликтующих файлов. Один из них обязательно испорчен и
подлежит последующему удалению, но велика вероятность того, что испорчены оба файла. Дополнительно к вышеуказанным логическим ошибкам
операционные системы семейства Windows определяют логические ошибки, связанные с некорректной записью даты создания файла и с представлением «короткого» имени файла для заданного «длинного» имени.
7.2.Средства «сжатия» дисков. Некоторые операционные системы
предоставляют служебные средства для программного сжатия дисков путем записи данных на диск в уплотненном виде посредством специального
драйвера (резидентного для MS-DOS или работающего в фоновом режиме
для Windows).
7.3.Средства управления виртуальной памятью. Ранние операционные системы ограничивали возможность использования приложений по
объему необходимой для их работы оперативной памяти. Например, без
специальных драйверов (менеджеров оперативной памяти) операционная
система MS-DOS ограничивала предельный размер исполняемых программ
до 640 Кбайт. Современные операционные системы не только обеспечивают непосредственный доступ ко всему полю оперативной памяти, установленной в компьютере, но и позволяют ее расширить за счет создания виртуальной памяти на жестком диске.
Виртуальная память реализуется в виде файла подкачки. Если оперативной памяти недостаточно для работы приложения, то часть ее временно
освобождается с сохранением образа на жестком диске. В процессе работы
приложений происходит многократный обмен между основной установленной оперативной памятью и файлом подкачки. Поскольку операции в оперативной памяти происходят намного быстрее, чем операции взаимодействия с диском, увеличение размера оперативной памяти компьютера всегда благоприятно сказывается на ускорении операций и повышении производительности всей вычислительной системы. Операционная система не
только выполняет обмен данными между ОЗУ и диском, но и позволяет в
определенной степени управлять размером файла подкачки вручную.
7.4.Средства кэширования дисков. Взаимодействие процессора с дисками происходит медленнее операций обмена с оперативной памятью, поэтому операционная система сохраняет прочитанные данные с диска в
оперативной памяти. Если процессору или программному коду потребуется
обратиться к ранее считанным данным, то он может найти их в области
ОЗУ, называемой дисковым кэшем. В ранних операционных системах
функции кэширования диска возлагались на внешнее программное средство, подключаемое через файлы конфигурации. В современных операционных системах эту функцию включают в ядро системы, и она работает автоматически, без участия пользователя, хотя определенная возможность
настройки размера кэша за ним сохраняется.
7.5.Средства резервного копирования данных. Ценность данных, размещенных на компьютере, принято измерять совокупностью затрат, кото-
50
рые может понести владелец в случае их утраты. Важным средством защиты данных является регулярное резервное копирование на внешний носитель. В связи с особой важностью этой задачи операционные системы
обычно содержат базовые средства для выполнения резервного копирования.
8.Прочие функции операционных систем. Кроме основных (базовых)
функций операционные системы могут предоставлять различные дополнительные функции:
- возможность поддерживать функционирование локальной компьютерной сети без специального программного обеспечения;
- обеспечение доступа к основным службам Интернета средствами, интегрированными в состав операционной системы;
- возможность создания системными средствами сервера Интернета,
его обслуживание и управление посредством удаленного соединения;
- наличие средств защиты данных от несанкционированного доступа,
просмотра и внесения изменений;
- возможность оформления рабочей среды операционной системы, в
том числе и средствами, относящимися к категории мультимедиа;
- возможность обеспечения комфортной поочередной работы различных пользователей на одном персональном компьютере с сохранением
персональных настроек рабочей среды каждого из них;
- возможность автоматического исполнения операций обслуживания
компьютера по заданному расписанию или под управлением удаленного
сервера;
- возможность работы с компьютером для лиц, имеющих физические
недостатки, связанные с органами зрения, слуха и другими.
Кроме перечисленных функций операционные системы могут включать
минимальный набор прикладного программного обеспечения, которое
можно использовать для исполнения простейших практических задач:
- чтение, редактирование и печать текстовых документов;
- создание и редактирование простейших рисунков;
- выполнение арифметических и математических расчетов;
- ведение дневников и служебных блокнотов;
- создание, передача и прием сообщений электронной почты;
- создание и редактирование факсимильных сообщений;
- воспроизведение и редактирование звукозаписи;
- воспроизведение видеозаписи;
- разработка и воспроизведение комплексных электронных документов,
включающих текст, графику, звукозапись и видеозапись.
Конкретный выбор операционной системы определяется совокупностью предоставляемых функций и конкретными требованиями к рабочему
месту. По мере развития аппаратных средств вычислительной техники и
средств связи, функции операционных систем непрерывно расширяются, а
средства их исполнения совершенствуются.
51
2.2. Компонентный состав операционных систем.
Системные вызовы
Любая сложная система должна иметь понятную и рациональную
структуру, то есть разделяться на модули, имеющие законченное функциональное назначение с четкими правилами взаимодействия. Функциональная сложность операционной системы неизбежно приводит к сложности ее архитектуры – структурной организации на основе различных программных модулей. Обычно в состав операционной системы входят: исполняемые и объектные модули, библиотеки, модули исходного текста
программ, программные модули специального формата (загрузчик операционной системы, драйверы ввода-вывода), файлы конфигурации, файлы
документации, модули справочной системы и пр. Большинство современных операционных систем представляют собой хорошо структурированные модульные системы, способные к развитию, расширению и переносу
на новые платформы. Единой архитектуры операционных систем не существует, но существуют универсальные подходы к ее структурированию.
Общим подходом к структуризации является разделение всех модулей на
две группы:
1.Ядро – модули, выполняющие основные функции операционной системы: управление процессами, управление памятью, управление устройствами ввода-вывода и т.п. В состав ядра входят:
- функции, решающие внутрисистемные задачи организации вычислительного процесса: переключение контекстов, загрузка/выгрузка станиц,
обработка прерываний;
- функции для поддержки приложений, создающие для них прикладную
программную среду.
Приложения могут обращаться к ядру с запросами (системными вызовами) для выполнения конкретных действий, например, открытия и чтения
файла, получения системного времени и т.д. Функции ядра, которые могут
вызываться приложениями, образуют интерфейс прикладного программирования API. Функции ядра являются наиболее часто выполняемыми, поэтому скорость их выполнения определяет производительность всей системы. Для обеспечения высокой скорости работы операционной системы
все модули ядра или большая их часть постоянно находятся в оперативной памяти, то есть являются резидентными. Обычно ядро оформляется
в виде программного модуля специального формата, отличающегося от
формата пользовательских приложений.
2.Модули, выполняющие вспомогательные функции операционной системы, например, программы архивирования данных, программы дефрагментации. Вспомогательные модули оформляются либо в виде приложений, либо в виде библиотек процедур. Так как некоторые компоненты
операционной системы оформляются в виде приложений (т.е. в виде исполняемых модулей стандартного формата для операционной системы),
то бывает сложно провести четкую грань между операционной системой и
52
приложениями (рис.2.2.). Решение о том, является программа частью операционной системы или нет, принимает разработчик. Программа может
существовать определенное время как пользовательское приложение, а
потом стать частью операционной системы, или наоборот. Например,
Web-браузер компании Microsoft сначала поставлялся как отдельное приложение, затем стал частью операционных систем семейства Windows.
– вспомогательные модули
Ядро ОС
– пользовательские приложения
Рис. 2.2. Нечеткость границы между ОС и приложениями
– системные обрабатывающие программы
Ядро ОС
– пользовательские приложения
– утилиты
– библиотеки процедур
Рис. 2.3. Взаимодействие между ядром и вспомогательными модулями ОС
Вспомогательные модули операционной системы обычно подразделяются на следующие группы:
- утилиты – программы, решающие отдельные задачи управления и
сопровождения компьютерной системы, например, программы сжатия дисков, программы архивирования данных;
- системные обрабатывающие программы – текстовые или графические редакторы, компиляторы, компоновщики, отладчики;
- программы предоставления пользователю дополнительных услуг –
специальный вариант пользовательского интерфейса, калькулятор, игры;
- библиотеки процедур, упрощающие разработку приложений: библиотека математических функций, функций ввода-вывода и т.д.
Как и обычные приложения, для выполнения своих задач утилиты, обрабатывающие программы и библиотеки операционной системы, обращаются к функциям ядра посредством системных вызовов (рис.2.3).
Модули операционной системы, оформленные в виде утилит, системных обрабатывающих программ и библиотек, обычно загружаются в опе-
53
ративную память только на время выполнения своих функций, то есть являются транзитными. Постоянно в оперативной памяти располагаются
только самые необходимые коды операционной системы, составляющие
ее ядро. Такая организация операционной системы экономит оперативную
память компьютера. Важным свойством архитектуры операционной системы, основанной на ядре, является возможность защиты кодов и данных
операционной системы за счет выполнения функций ядра в привилегированном режиме. Разделение операционной системы на ядро и модулиприложения обеспечивает легкую расширяемость. Чтобы добавить новую
высокоуровневую функцию, достаточно разработать новое приложение.
Компонентный состав операционной системы определяется набором
функций, для выполнения которых она предназначена. Все программы,
входящие в ее состав, можно разбить на две группы: управляющие программы и системные обрабатывающие программы (рис.2.4.).
Операционная система
Управляющие программы (ядро)
Системные программы
Управление статистическими ресурсами
(управление заданиями)
Ассемблеры
Управление динамическими ресурсами
(управление задачами)
Трансляторы с языков высокого уровня
Управление данными
Редакторы связей
Управление восстановлением
Загрузчики
Рис.2.4. Компонентный состав операционной системы
1.Управляющая программа (микроядро операционной системы) – обязательный компонент, выполняющий следующие функции:
- планирование прохождения непрерывного потока заданий;
- управление распределением ресурсов;
- реализация принятых методов организации данных;
- управление операциями ввода-вывода;
- организация мультипрограммной работы;
- управление работоспособностью системы после сбоев.
2.Управление статическими ресурсами (заданиями) – ядро операционной системы осуществляет предварительное планирование потока заданий для выполнения и статическое распределение ресурсов между одновременно выполняемыми заданиями в процессе подготовки к выполнению (инициализации). К таким ресурсам относятся разделы памяти (оперативной, дисковой, внешней) и устройства, допускающие только монопольное использование. Данные ресурсы закрепляются за заданием или
его частью с момента его инициализации до момента завершения. Такое
54
управление называется мониторингом, а программы, его осуществляющие – мониторами.
3.Управление динамическими ресурсами (задачами) – ядро операционной системы осуществляет динамическое распределение ресурсов между
несколькими задачами, решаемыми одновременно в мультипрограммном
режиме для выполняемого потока заданий. Управление выполняет программа супервизор (планировщик).
4.Управление данными – ядро операционной системы обеспечивает
все операции ввода-вывода (обмена между оперативной памятью и периферийными устройствами) на физическом и логическом уровнях. Например, организация необходимых информационных структур и таблиц,
управление файловой системой и режимом прямого доступа к памяти, обработка ошибок ввода-вывода и т.д.
5.Управление восстановлением – ядро операционной системы регистрирует машинные сбои и отказы и восстанавливает работоспособность
системы после их возникновения, если это возможно.
В качестве основных аппаратных ресурсов компьютера, подлежащих
распределению, обычно рассматривают: время работы процессора; адресное пространство основной памяти; оборудование ввода-вывода; файлы, хранящиеся во внешней памяти. Основными подсистемами, обеспечивающими распределение указанных ресурсов операционной системы, являются:
- подсистема управления процессами (распределяет ресурс «процессорное время»);
- подсистема управления памятью (распределяет ресурс «адресное
пространство основной памяти»);
- подсистема управления устройствами (распределяет ресурсы
«оборудование ввода-вывода»;
- подсистема управления данными (распределяет ресурс «данные или
файлы»).
Интерфейс между операционной системой и программами пользователя определяется набором системных вызовов, предоставляемых операционной системой. Концепция, лежащая в основе системных вызовов, практически одинакова для всех операционных систем. Механизм обращения к
системным функциям является машинно-зависимым и часто реализуется
на ассемблере, поэтому существуют библиотеки процедур, делающие
возможным обращение к системным процедурам из программ написанных
на языке С и др. Механизм действия системных вызовов можно рассмотреть на примере системного вызова read в UNIX (при использовании международного стандарта POSIX), который имеет три параметра:
- fd – параметр для задания файла;
- buffer – параметр, который указывает на буфер;
- nbytes – параметр, задающий количество байтов, которое нужно прочитать.
55
Как практически все системные вызовы, он запускается из программы,
написанной на языке C с тем же именем, что и системный вызов read. Вызов из программы С:
count = read(fd, buffer, nbytes);
Возврат к вызывающей процедуре
Переключение в режим ядра
Передача кода для чтения в регистр
Пространство
пользователя
Шаг 5
Шаг 11
Шаг 3
Шаг 2
Шаг 1
Шаг10
Шаг 4
Увеличение показателя
Вызов read
Передача fd
Передача &buffer
Передача nbytes
Шаг 6
Операционная
система (ядро)
Отправка
Библиотечная
процедура read
Программа
пользователя,
вызывающая
read
Шаг 9
Шаг 7
Шаг 8
Обработчик
системного
вызова
Рис. 2.5. Этапы выполнения системного вызова read (fd, buffer, nbytes)
Системный вызов (и библиотечная процедура) возвращает количество
прочитанных байтов в переменной count. Обычно это значение совпадает
с параметром nbytes, но может быть и меньше, если, например, в процессе чтения процедуре встретился конец файла. Если системный вызов не
может быть выполнен, значение счетчика count устанавливается равным 1
и номер ошибки помещается в глобальную переменную errno. Программа
всегда должна проверять результат системного вызова, чтобы отслеживать появление ошибки.
Системные вызовы выполняются за серию шагов (рис. 2.5.). Вначале
при подготовке к вызову библиотечной процедуры read, которая фактически осуществляется одноименным системным вызовом, вызывающая программа помещает параметры в стек (шаги 1-3). Компиляторы С и С++ помещают параметры в стек в обратном порядке. Первый и третий параметры передаются по значению, второй – по ссылке (передается адрес буфера, на что указывает символ &). Затем по команде процессора производится вызов библиотечной процедуры (шаг 4).
Библиотечная процедура обычно помещает номер системного вызова в
то место, где его ожидает операционная система, например, регистр (шаг
5). Затем она выполняет команду TRAP (эмулированное прерывание) для
переключения из пользовательского режима в режим ядра и начинает выполнение с фиксированного адреса внутри ядра (шаг 6). Запускаемая программа ядра проверяет номер системного вызова и отправляет его соот-
56
ветствующему обработчику, как правило, при использовании таблицы указателей на обработчики системных вызовов, индексированной по номерам
вызовов (шаг 7). Далее запускается обработчик системных вызовов (шаг
8), по завершению работы которого управление передается в пространство пользователя к библиотечной процедуре – команде следующей за
командой TRAP (шаг 9)2. Эта процедура передает управление программе
пользователя обычным способом, которым производится возврат из вызванной процедуры (шаг 10).
Чтобы закончить работу, программа пользователя должна очистить
стек (шаг 11), как это делается после каждого вызова процедуры. Последняя команда увеличивает указатель стека, таким образом, чтобы удалить
параметры, помещенные в стек перед запросом read. Далее программа
может продолжать свою работу.
В POSIX существует более 100 системных вызовов, точнее библиотечных процедур, которые выполняют эти вызовы. Некоторые из них, которые
наиболее часто используются, приведены в таблице 2.1.
Таблица 2.1.
Системные вызовы стандарта POSIX
Вызов
Описание
Управление процессами
Pid=fork()
Создает дочерний процесс, идентичный родительскому
Pid=waitpid(pid, &statioc, options) Ожидает завершения дочернего процесса
s=execve(name, argv, environp) Перемещает образ памяти процесса
Exit(status)
Завершает выполнение процесса и возвращает статус
Управление файлами
fd=open(file, how, ...)
Открывает файл для чтения, записи
s=close(fd)
Закрывает открытый файл
n=read(fd, buffer, nbytes)
Читает данные из файла в буфер
n=write(fd, buffer, nbytes)
Пишет данные из буфера в файл
Position=lseek(fd, offset, whence) Передвигает указатель файла
s=stat(name, &buf)
Получает информацию о состоянии файла
Управление каталогами и файловой системой
s=mkdir(name, mode)
Создает новый каталог
s=rmdir(name)
Удаляет пустой каталог
s=link(name1, name2)
Создает новый элемент с именем
s=unlink(name)
Удаляет элемент каталога
s=mount(special, name, flag)
Монтирует файловую систему
s=umount(special)
Демонтирует файловую систему
Разные
s=chdir(dimame)
Изменяет рабочий каталог
s=chmod(name, mode)
Изменяет биты защиты файла
s=kill(pid, signal)
Посылает сигнал процессу
Seconds=time(&seconds)
Получает время, прошедшее с 1 января 1970 года
Системный вызов может блокировать вызвавшую его процедуру, если, например, она пытается прочесть то, что
еще не введено с клавиатуры, поэтому процедура должна быть блокирована. В этом случае операционная система
ищет процесс, который может быть запущен следующим. Позже, когда нужное устройство станет доступным, система вспомнит о блокированном процессе и шаги 9-11 будут выполнены.
2
57
Системный вызов fork (разветвление) является единственным способом создания нового процесса в UNIX. Он создает точную копию исходного процесса, включая дескрипторы файла, регистры и т.п. После вызова
fork исходный процесс и его копия (родительский и дочерний) развиваются
по отдельности друг от друга. Все переменные имеют одинаковые величины во время вызова fork, но как только родительские данные скопированы
для создания дочернего процесса, последующие изменения в одном из
них уже не влияют на другой.
В большинстве случаев после вызова fork дочернему процессу необходимо выполнить программный код, отличный от предназначенного для родительского процесса. Например, оболочка читает команды с терминала,
запускает дочерний процесс, ждет, пока дочерний процесс выполнит команду и читает следующую команду после завершения работы дочернего
процесса. Ожидая, пока дочерний процесс закончит работу, родительский
процесс выполняет системный вызов waitpid, который ожидает завершения дочернего процесса (или всех дочерних процессов, если их на данный
момент несколько). Для того чтобы Waitpid(pid, &statioc, options) ждал
окончания дочернего процесса, задается первый параметр вызова равным
-1. Когда waitpid выполнен, указатель, задаваемый вторым параметром,
устанавливается на статус завершения дочернего процесса (нормальное
или аварийное завершение и выходное значение). Третий параметр определяет различные необязательные настройки.
Когда печатается команда, оболочка создает дочерний процесс, который должен выполнить команду пользователя. Он делает это с помощью
системного вызова execve(name, argv, environp), заменяющего его образ
памяти файлом, названным в первом параметре. В общем случае у команды execve есть три параметра: имя файла, который будет выполняться, указатель на массив аргументов и указатель на массив переменных
окружения. Различные библиотечные программы разрешают пропускать
параметры или определять их другими способами.
При копировании файла из одного файла в другой (file1 в файл file2)
используется команда:
ср filel file2
После создания оболочкой дочернего процесса последний находит и
исполняет файл ср и передает ему имена исходного и целевого файлов.
Основной модуль программы ср содержит определение:
main(argc, argv, envp)
Параметр argc указывает количество записей в командной строке,
включая имя программы. Параметр argv является указателем на массив
указателей. Элемент i массива указывает на i-ю запись в командной строке. Параметр envp – указатель на массив строковых переменных окружения вида: имя=величина, которые используются для передачи программе
информации типа терминала или имя каталога.
58
В UNIX под процессы отводится часть памяти, которая, в свою очередь,
делится на три сегмента: текстовый (код программы), сегмент данных
(переменные) и сегмент стека. Сегмент данных увеличивается снизу
вверх, а стек увеличивается сверху вниз. Между ними находится часть неиспользованного адресного пространства. Стек автоматически занимает
нужную ему часть участка памяти, но расширение сегмента данных выполняется явным образом. Для этого используется специальный системный вызов brk, задающий новый адрес для границы сегмента данных.
Многие системные вызовы имеют отношение к файловой системе. Чтобы прочитать или записать файл, его сначала нужно открыть при помощи
вызова open(file, how, ...). Для этого вызова указывается имя открываемого
файла (задается абсолютный путь файла или ссылка на рабочий каталог)
и код, означающий, что файл открывается для чтения, записи или того и
другого. Возвращаемый дескриптор файла употребляется при чтении или
записи. Файл закрывается с помощью вызова close, который делает дескриптор файла доступным при следующем открытии (open).
Несмотря на то, что большинство программ читает и записывает файлы с помощью последовательного доступа, некоторым прикладным программам необходима возможность доступа к любой, случайно выбранной
части файла. Связанный с каждым файлом указатель содержит текущую
позицию в файле. Когда чтение (запись) осуществляется последовательно, он обычно указывает на байт, который должен быть прочитан (записан)
следующим. Вызов lseek(fd, offset, whence) может изменить значение позиции указателя, так что следующий вызов read или write начнет операцию
в другой части файла. Первый параметр является идентификатором файла, второй – определяет позицию в файле, третий – указывает, является
ли второй параметр позицией в файле относительно начала файла, относительно текущей позиции или относительно конца файла. Вызов lseek
возвращает абсолютную позицию в файле после изменения указателя.
Для каждого файла UNIX хранит следующие данные: тип файла (обычный, специальный, каталог и пр.), размер, время последнего изменения и
другую информацию. Программа может запросить эту информацию через
системный вызов stat(name, &buf), первый параметр которого определяет
требуемый файл, второй – указывает на структуру, куда нужно поместить
информацию.
Вызовы mkdir и rmdir соответственно создают и удаляют пустые каталоги. Вызов link разрешает одному файлу появляться под двумя или более
именами, часто в разных каталогах. Этот вызов обычно используется, когда несколько программистов, работающих в одной команде, должны совместно использовать один общий файл. Вызов mount позволяет объединять в одну две файловые системы. Например: на жестком диске находится корневая файловая система, содержащая исполняемые версии общих
команд и наиболее часто используемые файлы. Пользователю нужно прочитать файлы с гибкого диска. При помощи системного вызова mount фай-
59
ловая система с гибкого диска присоединяется к корневой файловой системе, например:
mount("/dev/fdO", "/mnt", 0);
Первый параметр определяет имя специального блочного файла на
диске О, второй – место в дереве, куда будет вмонтирована файловая система, третий – указывает какая встроенная файловая система монтируется: для чтения и записи или только для чтения. После выполнения вызова mount доступ к файлу на диске О можно получить, указав его путь из
корневого или рабочего каталога. Когда файловая система не нужна, ее
демонтируют с помощью системного вызова umount.
2.3. Архитектурные особенности и структура
операционных систем
На практике в разных системах применялись несколько типов моделей.
1.Монолитные системы (монолитное ядро, monolithic kernel). В общем
случае организация системы представляет собой простейшую структуру,
когда компоненты операционной системы являются не самостоятельными
модулями, а составными частями одной программы. Операционная система написана в виде набора процедур. При использовании такой техники
каждая процедура системы имеет строго определенный интерфейс и имеет возможность вызвать любую другую процедуру для выполнения поставленной задачи. Все процедуры работают в привилегированном режиме. Таким образом, монолитная система – это схема операционной системы, при которой все ее компоненты являются составными частями одной
программы, используют общие структуры данных и взаимодействуют друг
с другом путем непосредственного вызова процедур.
Для построения монолитной системы необходимо скомпилировать все
отдельные процедуры, а затем связать их в единый объектный файл с помощью компоновщика. В такой модели полностью отсутствует сокрытие
деталей реализации – каждая процедура видит любую другую процедуру.
Во многих монолитных системах компиляция (сборка) осуществляется отдельно для каждого компьютера, при этом можно выбрать список оборудования и программных протоколов, поддержка которых будет включена в
систему. В связи с тем, что монолитная система представляет собой единую программу, то перекомпиляция является единственным способом добавления новых компонентов и исключение неиспользуемых. Присутствие
лишних компонентов не желательно, так как система полностью располагается в оперативной памяти, кроме того, исключение ненужных компонентов повышает ее надежность.
При обращении к системным вызовам, поддерживаемым операционной
системой, параметры помещаются в строго определенные места – регистры или стек, после чего выполняется специальная команда прерывания, известная как вызов ядра или вызов супервизора. Эта команда пере-
60
ключает машину из режима пользователя в режим ядра и передает управление операционной системе (шаг 6, рис.2.5.). Затем операционная система проверяет параметры вызова, чтобы определить, какой системный вызов должен быть выполнен. После этого операционная система обращается к таблице как к массиву с номером системного вызова в качестве индекса. В k-м элементе таблицы содержится ссылка на процедуру обработки системного вызова k. Такая организация операционной системы предполагает следующую структуру (рис.2.6.):
- главная программа, вызывающая требуемую служебную процедуру;
- набор служебных процедур, выполняющих системные вызовы;
- набор утилит, обслуживающих служебные процедуры.
В этой модели для каждого системного вызова имеется одна служебная процедура. Утилиты выполняют функции, которые нужны нескольким
служебным процедурам. Монолитная структура – старейший способ организации операционных систем. Примером таких систем является большинство Unix систем.
Главная процедура
Сервисные процедуры
Утилиты
Рис.2.6. Простая модель монолитной системы
2.Многоуровневые системы. Обобщением подхода является организация операционных систем в виде иерархии уровней. Первой многоуровневой системой была система THE, созданная в Technische Hogeschool
Eindhoven (Нидерланды) Э. Дейкстроем (Е.W. Dijkstra) и его студентами в
1968 году. Она была простой пакетной системой для голландского компьютера Electrologica X8, память которого состояла из 32 Кбайт 27разрядных слов. Система включала 6 уровней (рис.2.7.):
- уровень 0 занимался распределением времени процессора, переключая процессы при возникновении прерывания или при срабатывании таймера, то есть обеспечивал базовую многозадачность процессора;
- уровень 1 управлял памятью, он выделял процессам пространство в
оперативной памяти и на магнитном барабане объемом 512 К слов для тех
частей процессов (страниц), которые не помещались в оперативной памяти;
- уровень 2 управлял связью между консолью оператора и процессами,
процессы, расположенные выше этого уровня, имели свою собственную
консоль оператора;
61
- уровень 3 управлял устройствами ввода-вывода и буферизовал потоки информации к ним и от них, поэтому любой процесс выше уровня 3,
вместо того чтобы работать с конкретными устройствами, мог обращаться
к абстрактным устройствам ввода-вывода, обладающими удобными для
пользователя характеристиками;
- уровень 4 был предназначен для работы пользовательских программ,
которым не нужно было заботиться ни о процессах, ни о памяти, ни о консоли, ни об управлении устройствами ввода-вывода;
- уровень 5 предназначался для процесса системного оператора.
Уровни
5
4
3
2
1
0
Функции
Оператор
Программы пользователя
Управление вводом-выводом
Связь оператор-процесс
Управление памятью и барабаном
Распределение процессора и многозадачность
Рис.2.7. Структура операционной системы THE
Дальнейшее обобщение многоуровневой концепции было сделано в
операционной системе MULTICS, где уровни представляли серию концентрических колец, причем внутренние кольца являлись более привилегированными, чем внешние. Когда процедура внешнего кольца хотела вызвать
процедуру кольца лежащего внутри, она должна была выполнить эквивалент системного вызова, то есть команду TRAP, параметры которой тщательно проверяются перед вызовом. Хотя операционная система
MULTICS являлась частью адресного пространства каждого пользовательского процесса, аппаратура обеспечивала защиту данных на уровне
сегментов памяти, разрешая или запрещая доступ к индивидуальным процедурам (сегментам памяти) для записи, чтения или выполнения.
В системе THE многоуровневая схема представляла собой конструкционное решение, и все части системы были связаны в один объектный
файл, а в MULTICS механизм разделения колец действовал во время исполнения на аппаратном уровне. Преимущество подхода MULTICS заключалось в том, что его можно было расширить и на структуру пользовательских подсистем.
3.Виртуальные машины. Большое количество пользователей операционной системы пакетной обработки OS/360 хотели работать в системе с
разделением времени, поэтому программисты в корпорации IBM и в других центрах, решили написать систему с разделением времени. Официальная операционная система с разделением времени TSS/360 от IBM
оказалась громоздкой и медленной. Группа из научного центра IBM в Кембридже, штат Массачусетс, разработала новую систему, которую IBM приняла как законченный продукт. Сейчас она используется на оставшихся
мэйнфреймах. Эта система, в оригинале называвшаяся CP/CMS, а позже
62
переименованная в VM/370, была основана на двух разделяемых принципах (рис.2.8.):
- система с разделением времени обеспечивает многозадачность;
- система с разделением времени обеспечивает расширенную машину
с более удобным интерфейсом, чем тот, что предоставляется оборудованием напрямую.
Виртуальные 370-е
Системные вызовы
Команды ввода-вывода
Прерывания
CMS
CMS
VM/370
Оборудование 370
CMS
Прерывания
Рис. 2.8. Структура VM/370 с системой CMS
Сердце системы – монитор виртуальной машины работает с оборудованием и обеспечивает многозадачность, предоставляя верхнему слою
не одну, а несколько виртуальных машин. В отличие от других операционных систем, эти виртуальные машины не являются расширенными, так как
они не поддерживают файлы и прочие удобства, а представляют собой
точные копии аппаратуры, включая режимы ядра и пользователя, вводвывод данных, прерывания и пр., присутствующее на реальном компьютере. Поскольку каждая виртуальная машина идентична настоящему оборудованию, на каждой из них может работать любая операционная система,
которая запускается прямо на аппаратуре. На некоторых из них для обработки пакетов и транзакций работают потомки OS/360, а на других для интерактивного разделения времени пользователей работает однопользовательская интерактивная система CMS (Conversational Monitor System – система диалоговой обработки).
Когда операционная система CMS выполняет системный вызов, он
прерывает операционную систему на своей собственной виртуальной машине, а не на VM/370, как произошло бы, если бы вызов работал на реальной машине. Затем операционная система CMS выдает обычные команды ввода-вывода для чтения своего виртуального диска или другие
команды, которые могут понадобиться для выполнения вызова. Эти команды перехватываются VM/370, которая выполняет их в рамках моделирования реального оборудования. При полном разделении функций многозадачности и предоставления расширенной машины каждая часть может
быть намного проще, гибче и удобней для обслуживания.
В настоящее время идея виртуальной машины используется для работы старых программ, написанных для системы MS-DOS на Pentium (или на
других 32-разрядных процессорах Intel). При разработке компьютера
Pentium и его программного обеспечения компании Intel и Microsoft учитывали потребность в работе старых программ на новом оборудовании. По-
63
этому корпорация Intel создала на процессоре Pentium режим виртуального процессора 8086. В этом режиме машина действует как 8086 (которая с
точки зрения программного обеспечения идентична 8088), включая 16разрядную адресацию памяти с ограничением объема памяти в 1 Мбайт.
Такой режим используется системой Windows и другими операционными
системами для запуска программ MS-DOS. Программы запускаются в режиме виртуального процессора 8086. Пока они выполняют обычные команды, они работают напрямую с оборудованием. Но когда программа пытается обратиться по прерыванию к операционной системе, чтобы сделать
системный вызов, или пытается напрямую осуществить ввод-вывод данных, происходит прерывание с переключением на монитор виртуальной
машины. Существует два типа монитора:
- система MS-DOS загружена в адресное пространство виртуальной
машины 8086 (монитор виртуальной машины только отсылает прерывания
назад к MS-DOS, как это происходит на реальной 8086); когда MS-DOS пытается самостоятельно осуществить ввод-вывод, операция перехватывается и выполняется монитором виртуальной машины;
- монитор виртуальной машины перехватывает первое прерывание и
сам выполняет ввод-вывод, так как он знает все системные вызовы MSDOS.
Корпорация Sun Microsystems разработала язык программирования
Java и виртуальную машину (то есть архитектуру компьютера), называемую JVM (Java Virtual Machine – виртуальная машина Java). Компилятор
Java выдает код для JVM, который затем выполняется программным интерпретатором JVM. Преимущество этого подхода заключается в том, что
код JVM можно передавать через Internet на любой компьютер, имеющий
интерпретатор JVM, и запускать там.
4.Экзоядро. Развив идею виртуальной машины VM/370, когда каждый
пользователь получает точную копию настоящей машины, исследователи
из Массачусетсского технологического института изобрели новую систему.
В этой системе реализован принцип обеспечения каждого пользователя
абсолютной копией реального компьютера, но с подмножеством ресурсов.
Например, одна виртуальная машина может получить блоки на диске с
номерами от 0 до 1023, следующая – от 1024 до 2047 и т.д. На нижнем
уровне в режиме ядра работает программа – экзоядро (exokernel) в задачу
которой входит распределение ресурсов для виртуальных машин и проверка их использования (отслеживание попыток машин использовать чужой ресурс). Каждая виртуальная машина на уровне пользователя может
работать с собственной операционной системой, как на VM/370 или на
виртуальных машинах 8086-х для Pentium, с той разницей, что каждая машина ограничена набором ресурсов, которые она запросила и которые ей
были предоставлены. Преимущества подхода:
- отделяется многозадачность (в экзоядре) от операционных систем
пользователя (в пространстве пользователя) с меньшими затратами, так
64
как для этого экзоядру необходимо только не допускать вмешательства
одной виртуальной машины в работу другой.
- можно обойтись без уровня отображения, так как экзоядру нужно
только хранить запись о том, какой виртуальной машине выделен данный
ресурс (при других подходах виртуальная машина считает, что она использует свой собственный диск с нумерацией блоков от 0 до некоторого
максимума, поэтому монитор виртуальной машины должен поддерживать
таблицы преобразования адресов на диске).
Утилиты
Системные обрабатывающие Приложения
пользователей
программы
Пользовательский режим
Привилегированный режим
Ядро ОС
Рис. 2.9. Архитектура ОС с ядром в привилегированном режиме
5.Ядро в привилегированном режиме. Операционная система должна
иметь по отношению к приложениям определенные привилегии, иначе некорректно работающее приложение может вмешаться в работу операционной системы и разрушить часть ее кодов. Операционная система должна обладать исключительными полномочиями в распределении ресурсов
для приложений в мультипрограммном режиме. Обеспечить привилегии
невозможно без специальных средств аппаратной поддержки. Аппаратура
компьютера должна поддерживать как минимум два режима работы –
пользовательский режим (user mode) и привилегированный режим (режим
ядра, kernel mode или режим супервизора, supervisor mode). Так как ядро
выполняет все основные функции операционной системы, то чаще всего
именно оно работает в привилегированном режиме (рис. 2.9.).
Приложения ставятся в подчиненное положение за счет запрета выполнения в пользовательском режиме некоторых критичных команд, связанных с переключением процессора с задачи на задачу, управлением
устройствами ввода-вывода, доступом к механизмам распределения и защиты памяти. Выполнение некоторых инструкций в пользовательском режиме запрещается безусловно или только при определенных условиях.
Например, инструкции ввода-вывода могут быть запрещены приложениям
при доступе к контроллеру жесткого диска, который хранит данные, общие
для операционной системы и всех приложений, но разрешены при доступе
к последовательному порту, который выделен в монопольное владение
для определенного приложения.
65
Условия разрешения выполнения критичных инструкций находятся под
полным контролем операционной системы. Контроль обеспечивается за
счет набора определенных инструкций. Аналогичным образом обеспечиваются привилегии операционной системы при доступе к памяти. Например, выполнение инструкции доступа к памяти для приложения разрешается, если инструкция обращается к области памяти, отведенной данному
приложению операционной системы, и запрещается при обращении к областям памяти, занимаемым операционной системой или другими приложениями. Полный контроль операционной системы над доступом к памяти
достигается за счет того, что инструкции конфигурирования механизмов
защиты памяти разрешается выполнять только в привилегированном режиме.
Каждое приложение работает в своем адресном пространстве, что позволяет локализовать некорректно работающее приложение таким образом, чтобы его ошибки не оказывали влияния на другие приложения и операционную систему. Между количеством уровней привилегий, реализуемых аппаратно, и количеством уровней привилегий, поддерживаемых операционной системой, нет прямого соответствия. Например, на базе четырех уровней, обеспечиваемых процессорами компании Intel, операционная
система OS/2 строит трехуровневую систему привилегий, а операционная
система Windows NT, UNIX и некоторые другие ограничиваются двухуровневой системой.
Если аппаратура поддерживает хотя бы два уровня привилегий, то
операционная система может создать программным способом развитую
систему защиты, поддерживающую несколько уровней привилегий, образующих иерархию. Это позволяет более точно распределять полномочия
между модулями операционной системы и приложениями. Появление
внутри операционной системы более привилегированных и менее привилегированных частей позволяет повысить устойчивость системы к внутренним ошибкам программных кодов, так как ошибки будут распространяться только внутри модулей с определенным уровнем привилегий. Таким образом, можно построить сложную систему индивидуальной защиты
ресурсов, например, систему защиты файлов и каталогов, которая позволит задать для любого пользователя определенные права доступа к каждому из файлов и каталогов.
Повышение устойчивости операционной системы, обеспечиваемое переходом ядра в привилегированный режим, достигается за счет некоторого замедления выполнения системных вызовов. Системный вызов привилегированного ядра инициирует переключение процессора из пользовательского режима в привилегированный, а при возврате к приложению –
переключение из привилегированного режима в пользовательский
(рис.2.10.). Во всех типах процессоров из-за дополнительной двукратной
задержки переключения переход на процедуру со сменой режима выполняется медленнее, чем вызов процедуры без смены режима.
66
Архитектура операционной системы, основанная на привилегированном ядре и приложениях пользовательского режима, стала классической.
Ее используют многие популярные операционные системы: версии UNIX,
VAX VMS, IBM OS/390, OS/2 и Windows NT (с определенными модификациями).
Работа приложения
Работа приложения
Системный
вызов
Пользовательский режим
Работа ядра
Привилегированный режим
Время переключения режимов
Рис. 2.10. Смена режимов при выполнении системного вызова
к привилегированному ядру
Пользовательский режим
Привилегированный режим
Ядро NetWare
NLM
Рис. 2.11. Упрощенная архитектура операционной системы NetWare
В некоторых случаях разработчики операционных систем отступают от
этого классического варианта архитектуры, организуя работу ядра и приложений в одном и том же режиме. Например, операционная система
NetWare компании Novell использует привилегированный режим процессоров Intel x86/Pentium для работы ядра и для работы приложений – загружаемых модулей NLM (рис.2.11). При таком построении операционной системы обращения приложений к ядру выполняются быстрее, так как нет
переключения режимов, однако при этом отсутствует надежная аппаратная защита памяти, занимаемой модулями операционной системы, от некорректно работающего приложения. Разработчики NetWare пошли на
снижение надежности операционной системы, поскольку ограниченный
набор ее специализированных приложений позволяет компенсировать
этот архитектурный недостаток за счет тщательной отладки каждого приложения.
67
В одном режиме работали ядро и приложения операционных систем,
которые были разработаны для процессоров, не поддерживающих привилегированный режим работы. Например, процессор Intel 8088/86 компании
IBM и операционная система MS-DOS разработанная для него компанией
Microsoft. Операционная система состояла из двух модулей msdos.sys и
io.sys, составлявших ядро системы, к которым с системными вызовами обращались командный интерпретатор command.com, системные утилиты и
приложения. Некорректно написанные приложения могли разрушить основные модули MS-DOS, что иногда и происходило, но область использования MS-DOS (и других ранних операционных систем для персональных
компьютеров) и не предъявляла высоких требований к надежности операционных систем.
Появление в более поздних версиях процессоров Intel (начиная с
80286) возможности работы в привилегированном режиме не было использовано разработчиками MS-DOS. Эта операционная система работала на процессорах данного типа в реальном режиме, в котором эмулировался процессор 8086/88. Реальный режим был реализован только для совместимости поздних моделей процессоров с ранней моделью 8086/88 и альтернативой ему явился защищенный режим работы процессора, в котором
стали доступными все особенности процессоров поздних моделей, в том
числе и работа на одном из четырех уровней привилегий.
Аппаратура
ядро
утилиты
утилиты, системные обрабатывающие
программы, библиотеки
Рис.2.12. Трехслойная схема вычислительной системы
6.Многослойная структура операционной системы. Вычислительную
систему, работающую под управлением операционной системы на основе
ядра, можно рассматривать как систему, состоящую из трех иерархически
расположенных слоев: нижний слой образует аппаратура, промежуточный –
ядро, верхний – утилиты, обрабатывающие программы и приложения
(рис.2.12.). При такой организации приложения не могут непосредственно
взаимодействовать с аппаратурой, а только через слой ядра.
Многослойный подход является универсальным и эффективным способом декомпозиции сложных систем любого типа. В соответствии с этим подходом система состоит из иерархии слоев, каждый слой обслуживает вышележащий, выполняя для него набор функций, которые образуют межслойный
интерфейс. На основе функций нижележащего слоя вышележащий слой
строит свои более сложные функции. Между слоями существуют строгие
68
правила взаимодействия, а между модулями внутри слоя связи могут быть
произвольными. Отдельный модуль может выполнить свою работу либо самостоятельно, либо обратиться к другому модулю своего слоя, либо обратиться за помощью к нижележащему слою через межслойный интерфейс.
Такая организация системы имеет много достоинств. Она существенно
упрощает разработку системы, так как позволяет сначала определить
«сверху вниз» функции слоев и межслойные интерфейсы, а затем при детальной реализации постепенно наращивать мощность функций слоев,
двигаясь «снизу вверх». Кроме того, при модернизации системы можно
изменять модули внутри слоя без необходимости производить какие-либо
изменения в остальных слоях, если при этих внутренних изменениях межслойные интерфейсы остаются в силе. Поскольку ядро представляет собой сложный многофункциональный комплекс, то многослойный подход
обычно распространяется и на структуру ядра. Ядро может состоять из
следующих слоев (рис.2.13.):
Аппаратура
1
2
3
4
5
1 – средства аппаратной поддержки ОС
2 – машинно-зависимые модули
3 – базовые механизмы ядра
4 – менеджеры ресурсов
5 – интерфейс системных вызовов
Рис.2.13. Многослойная структура ядра ОС
Средства аппаратной поддержки операционной системы – средства,
которые прямо участвуют в организации вычислительных процессов:
средства поддержки привилегированного режима, система прерываний,
средства переключения контекстов процессов, средства защиты областей
памяти и т.п.
Машинно-зависимые компоненты операционной системы – образуются программными модулями, в которых отражается специфика аппаратной
платформы компьютера. В идеале этот слой полностью экранирует вышележащие слои ядра от особенностей аппаратуры, что позволяет разрабатывать вышележащие слои на основе машинно-независимых модулей,
существующих в единственном экземпляре для всех типов аппаратных
платформ, поддерживаемых данной операционной системой. Пример:
экранирующий слой HAL операционной системы Windows NT.
Слой базовых механизмов ядра – выполняет самые примитивные операции ядра: программное переключение контекстов процессов; диспетче-
69
ризацию прерываний; перемещение страниц из памяти на диск и обратно
и т.п. Модули слоя не принимают решений о распределении ресурсов, они
только отрабатывают принятые «наверху» решения, поэтому их называют
исполнительными механизмами для модулей верхних слоев. Например,
решение о прерывании выполнения текущего процесса А и начале выполнения процесса В принимает менеджер процессов вышележащего слоя, а
слой базовых механизмов получает директиву о том, что нужно выполнить
переключение с контекста текущего процесса на контекст процесса В.
Менеджеры ресурсов – слой состоит из мощных функциональных модулей, реализующих стратегические задачи по управлению основными ресурсами вычислительной системы. Обычно на данном слое работают менеджеры (диспетчеры) процессов, ввода-вывода, файловой системы и
оперативной памяти. Каждый из менеджеров ведет учет свободных и используемых ресурсов определенного типа и планирует их распределение
в соответствии с запросами приложений. Для исполнения принятых решений менеджер обращается к нижележащему слою базовых механизмов с
конкретными запросами. Внутри слоя менеджеров существуют тесные
взаимные связи, так как для выполнения процессу может потребоваться
доступ одновременно к нескольким ресурсам: процессору, памяти, определенному файлу или устройству ввода-вывода и пр. Например, при создании процесса менеджер процессов обращается к менеджеру памяти,
который должен выделить процессу определенную область памяти для
его кодов и данных.
Интерфейс системных вызовов – самый верхний слой ядра, который
взаимодействует непосредственно с приложениями и системными утилитами, образуя прикладной программный интерфейс операционной системы. Функции API, обслуживающие системные вызовы, предоставляют доступ к ресурсам системы в удобной и компактной форме, без указания деталей их физического расположения.
Приведенное разбиение ядра операционной системы на слои является
условным. В реальной системе количество слоев и распределение функций между ними может быть и иным. В системах, предназначенных для
аппаратных платформ одного типа, например операционной системе
NetWare, слой машинно-зависимых модулей сливается со слоем базовых
механизмов и частично со слоем менеджеров ресурсов. Не всегда оформляются в отдельный слой базовые механизмы, в этом случае менеджеры
ресурсов не только планируют использование ресурсов, но и самостоятельно реализуют свои планы. В некоторых операционных системах ядро
состоит из большего количества слоев, например, менеджеры ресурсов
имеют многослойную структуру. Прежде всего, это относится к менеджеру
ввода-вывода, нижний слой которого составляют драйверы устройств
(драйвер жесткого диска, драйвер сетевого адаптера и пр.), а верхние
слои – драйверы файловых систем или протоколов сетевых служб, имеющие дело с логической организацией информации.
70
Способ взаимодействия слоев в реальной операционной системе также
может отклоняться от выше описанной схемы. В ряде операционных систем для ускорения работы ядра происходит обращение с верхнего слоя к
функциям нижних слоев, минуя промежуточные. Например, на многих аппаратных платформах для реализации системного вызова используется
инструкция программного прерывания. Приложение вызывает модуль первичной обработки прерываний из слоя базовых механизмов, который вызывает нужную функцию из слоя системных вызовов. Сами функции системных вызовов также иногда нарушают субординацию иерархических
слоев, обращаясь прямо к базовым механизмам ядра.
При выборе количества слоев учитывается, что увеличение числа слоев приводит к некоторому замедлению работы ядра за счет дополнительного межслойного взаимодействия; уменьшение числа слоев ухудшает
расширяемость и логичность системы. Обычно операционные системы,
прошедшие долгий путь эволюционного развития, например, многие версии UNIX, имеют неупорядоченное ядро с небольшим числом четко выделенных слоев, а у операционных систем нового поколения, например,
Windows NT, ядро разделено на большее число слоев, взаимодействие
которых формализовано в большей степени.
7.Микроядерная архитектура. Микроядерная архитектура является
альтернативой классическому многослойному способу построения операционных систем и состоит в перенесении значительной части системного
кода на уровень пользователя и одновременной минимизацией ядра. Подход, когда большинство составляющих операционной системы являются
самостоятельными программами, называется микроядерной архитектурой (microkernel architecture). Взаимодействие между программами операционной системы обеспечивает специальный модуль ядра – микроядро.
Микроядро работает в привилегированном режиме и обеспечивает взаимодействие между программами, планирование использования процессора, первичную обработку прерываний, операции ввода-вывода и базовое
управление памятью. Остальные компоненты системы взаимодействуют
друг с другом путем передачи сообщений через микроядро (рис.2.14.).
Микроядро защищено от остальных частей операционной системы и
приложений. В состав ядра входят машинно-зависимые модули и модули,
выполняющие базовые функции ядра по управлению процессами, обработке прерываний, управлению виртуальной памятью, пересылке сообщений и управлению устройствами ввода-вывода, связанные с загрузкой или
чтением регистров устройств. Все остальные более высокоуровневые
функции ядра оформляются в виде приложений, работающих в пользовательском режиме (рис.2.15.). Основным назначением такого приложения
является обслуживание запросов других приложений, например, создание
процесса, выделение памяти, проверка прав доступа к ресурсу и т.п. Другими словами многие менеджеры ресурсов, являющиеся неотъемлемыми
частями обычного ядра (файловая система, подсистемы управления виртуальной памятью и процессами, менеджер безопасности и т.п.), стано-
71
вятся периферийными модулями, которые работают в пользовательском
режиме и обслуживают запросы локальных приложений и других модулей
операционной системы.
Операционные системы, основанные на концепции микроядра, удовлетворяют большинству требований, предъявляемых к современным операционным системам, обладая переносимостью, расширяемостью, надежностью и создавая хорошие предпосылки для поддержки распределенных
приложений. За эти достоинства приходится платить снижением производительности, так как возникают дополнительные временные расходы, связанные с передачей запросов. Для того чтобы микроядерная операционная система по скорости не уступала операционной системе на базе монолитного ядра, требуется очень аккуратно проектировать разбиение системы на компоненты, стараясь минимизировать взаимодействие между
ними.
Привилегированный режим
Приложение
В
Менеджер
файл. системы
Менеджер
сети
Микроядро
Приложение
А
Менеджер
памяти
Непривилегированный режим
Рис.2.14. Микроядерная архитектура операционной системы
Приложения
пользователей
Утилиты ОС
Пользовательский режим
Привилегированный режим
Ядро ОС
Приложения
пользователей
Утилиты ОС
Пользовательский режим
Привилегированный режим
Менеджеры ОС
Микроядро
Рис.2.15. Перенос основного объема функций ядра
в пользовательское пространство
8.Модель клиент-сервер. В развитии современных операционных систем наблюдается тенденция в сторону дальнейшего переноса кода в
верхние уровни и минимизации ядра, что достигается перекладыванием
выполнения большинства задач операционной системы на средства пользовательских процессов. Менеджеры ресурсов, вынесенные в пользова-
72
тельский режим, называются серверами операционных систем. Получая
запрос на какую-либо операцию, например, чтение блока файла, пользовательский процесс (обслуживаемый или клиентский) посылает запрос
серверному (обслуживающему) процессу, который его обрабатывает и высылает назад ответ (рис.2.16).
Схематично механизм обращения к функциям операционной системы,
оформленным в виде серверов, выглядит следующим образом. Клиент,
которым может быть либо прикладная программа, либо другой компонент
операционной системы, запрашивает выполнение некоторой функции у
соответствующего сервера, посылая ему сообщение. Непосредственная
передача сообщений между приложениями невозможна, так как их адресные пространства изолированы друг от друга. Микроядро, находящееся в
привилегированном режиме, имеет доступ к адресным пространствам
каждого из этих приложений и поэтому может работать в качестве посредника. Микроядро сначала передает сообщение, содержащее имя и параметры вызываемой процедуры нужному серверу, затем сервер выполняет
запрошенную операцию, после чего ядро возвращает результаты клиенту
с помощью другого сообщения. В задачу ядра входит только управление
связью между клиентами и серверами.
Клиентпроцесс
Клиентпроцесс
Сервер
процессов
Сервер
терминала
……..
Сервер
файлов
Сервер
памяти
Пользовательский
режим
Режим работы
ядра
Клиент посылает сообщение серверу процессов и.т.о.
получает выполнение операции
Рис.2.16. Модель клиент-сервер
Благодаря разделению операционной системы на части, каждая из которых управляет всего одним элементом системы (файловой системой,
процессами, терминалом или памятью), все части становятся маленькими
и управляемыми. Поскольку все серверы работают как процессы в режиме
пользователя, они не имеют прямого доступа к оборудованию. Поэтому
если происходит ошибка на файловом сервере, может разрушиться только
служба обработки файловых запросов, что обычно не приводит к остановке всей машины.
Другое преимущество модели клиент-сервер заключается в ее простой
адаптации к использованию в распределенных системах (рис.2.17.). Если
клиент общается с сервером, посылая ему сообщения, клиенту не нужно
знать, обрабатывается ли его сообщение локально на его собственной
машине или оно было послано по сети серверу на удаленной машине.
Некоторые функции операционной системы, такие как загрузка команд
в регистры физических устройств ввода-вывода, трудно выполнить из программ в пространстве пользователя. Есть два способа разрешения этой
73
проблемы. Первый заключается в том, что некоторые критические серверные процессы (например, драйверы устройств ввода-вывода) запускаются
в режиме ядра, с полным доступом к аппаратуре, но при этом общаются с
другими процессами при помощи обычной схемы передачи сообщений.
Второй способ состоит в том, чтобы встроить минимальный механизм
обработки информации в ядро, но оставить принятие решений за серверами в пользовательском пространстве. Например, ядро может опознавать сообщения, посланные по определенным адресам. Для ядра это
означает, что нужно взять содержимое сообщения и загрузить его, например, в регистры ввода-вывода диска для запуска операции чтения диска.
…
Машина 1
Машина 2
Машина 3
Машина 4
Клиент
Сервер файлов
Клиент
Клиент
Ядро
Ядро
Ядро
Ядро
Сообщение от клиента к серверу
…
Сеть
Рис.2.17. Модель клиент-сервер в распределенной системе
9.Смешанные системы. Все рассмотренные подходы к построению
операционных систем имеют свои достоинства и недостатки. В большинстве случаев современные операционные системы используют различные
комбинации этих подходов. Ниже приведены три примера.
Ядро операционной системы Linux представляет собой монолитную систему с элементами микроядерной архитектуры. При компиляции ядра можно
разрешить динамическую загрузку и выгрузку очень многих компонентов ядра
– модулей. В момент загрузки модуля его код загружается на уровне системы
и связывается с остальной частью ядра. Внутри модуля могут использоваться
любые экспортируемые ядром функции.
Операционные системы 4.4BSD и MkLinux, основаны на микроядре Mach.
Микроядро обеспечивает управление виртуальной памятью и работу низкоуровневых драйверов. Все остальные функции, в том числе взаимодействие с
прикладными программами, осуществляются монолитным ядром. Данный
подход сформировался в результате попыток использования преимущества
микроядерной архитектуры, сохраняя по возможности отлаженный код монолитного ядра.
Наиболее тесно элементы микроядерной архитектуры и элементы монолитного ядра переплетены в ядре Windows NT. Микроядро Windows NT велико (более 1 Мбайт). Компоненты ядра Windows NT располагаются в вытесняемой памяти и взаимодействуют друг с другом путем передачи сообщений,
как в микроядерных операционных системах. В тоже время все компоненты
работают в одном адресном пространстве и активно используют общие структуры данных, что свойственно монолитным операционным системам.
74
2.4. Общая структура операционной системы Windows 2000
Операционная система Windows 2000 представляет собой улучшенную
версию Windows NT 4.0 с интерфейсом Windows 98, благодаря которому
она осуществляла полную поддержку устройств plug-and-play, шины USB,
стандарта IEEE 1394 (FireWire), IrDA (Infrared Data Association – стандарт
на инфракрасную передачу данных и вывод на печать, разработанный ассоциацией IrDA), управление питанием. Кроме того, были добавлены новые функций, не присутствовавших ранее в других операционных системах корпорации Microsoft:
- каталоговая служба Active Directory;
- система безопасности Kerberos;
- поддержка смарт-карт;
- инструменты мониторинга системы;
- лучшая интеграция ноутбуков и настольных компьютеров;
- инфраструктура системного администрирования;
- рабочие объекты;
- интернационализация (при установке системы и даже для каждого
пользователя можно выбрать язык, который будет использоваться во время работы системы);
- операционная система MS-DOS заменена на новую 32-х разрядную
программу, включающую функциональность системы MS-DOS и ряд новых
функций;
- добавлена новая функция файловой системы NTFS, при использовании которой два пользователя могут совместно использовать один связанный файл; как только один из пользователей начинает запись в этот
файл, автоматически создается копия файла.
Несмотря на многочисленные свойства, способствующие переносимости системы с точки зрения программ, аппаратуры, языков и пр., операционная система Windows 2000 обладает меньшей переносимостью, чем
Windows NT 4.0. Она работает только на двух платформах: Pentium и Intel
IA-642. Изначально операционная система Windows NT поддерживала дополнительные платформы: PowerPC, MIPS и Alpha, но по коммерческим
соображениям корпорация Microsoft перестала поддерживать эти процессоры.
Как и предыдущие версии Windows NT, Windows 2000 поставляется в
виде нескольких уровней продукта: Professional, Server, Advanced server и
Datacenter Server. Однако различия между версиями незначительны, так
как в них используется один и тот же исполняемый двоичный код. При
установке системы тип продукта записывается во внутренней базе данных
(системном реестре). Во время загрузки операционная система проверяет
содержимое реестра, определяя версию программного продукта. Формально различием в версиях управляют в нескольких местах программы
всего две переменные, считываемые из реестра: ProductType и
ProductSuite. В зависимости от их значений выполняется слегка отличный
75
Служебный
процесс
Подсистема POSIX
Подсистема POSIX
Подсистема POSIX
Подсистема POSIX
Подсистема POSIX
Подсистема POSIX
Системный интерфейс (NT DLL.DLL)
Режим пользователя
код. Изменение значений этих переменных рассматривается как нарушение лицензии. Кроме того, система перехватывает любые попытки изменить их и регистрирует эти попытки нестираемым способом, так что впоследствии можно доказать факт нарушения лицензии.
Кроме основной операционной системы, корпорация Microsoft также
разработала несколько инструментальных программ для продвинутых
пользователей: Support Tools, Software Development Kit, Driver Development
Kit и Resource Kit. Это большие наборы утилит для отладки и мониторинга
системы. Инструментарий поддержки распространяется на компакт-диске
Windows 2000 в каталоге \support\tools. Файлы не устанавливаются стандартной процедурой, но их можно установить специальной программой
setup.exe, расположенной в этом же каталоге.
Интерфейс
графических
устройств
Win32
Ядро
Видеодрайвер
Режим ядра
Менеджер
локального вызова
процедуры
Менеджер
объектов
Менеджер
конфигурации
Менеджер
кэша
Менеджер
безопасности
Менеджер
энергопотребления
Драйверы
устройств
Менеджер
памяти
Файловая
система
Менеджер
процессов
Менеджер
вводавывода
Менеджер
объектов
Системные службы
Уровень аппаратной абстракции
Аппаратное обеспечение
Исполняющая система
Рис. 2.18. Упрощенная структура Windows 2000
Операционная система 2000 состоит из двух основных частей: модуля
операционной системы, работающей в режиме ядра, и подсистем окружения, работающих в режиме пользователя. Подсистемы окружения представляют собой отдельные подпрограммы, помогающие пользователю
выполнять определенные функции.
Одно из многих усовершенствований операционной системы Windows
NT заключалось в ее модульной структуре – относительно небольшого ядра, работавшего в привилегированном режиме, и нескольких серверных
процессов, работавших в режиме пользователя. Процессы пользователя
взаимодействовали с серверными процессами с помощью модели «кли-
76
ент-сервер»: клиент посылал серверу сообщение, а сервер выполнял
определенную работу и возвращал клиенту результат в ответном сообщении. Такая модульная структура упрощала перенос системы на другие
платформы. В результате операционная система Windows NT была
успешно перенесена на платформы с процессорами, отличными от процессоров Intel: Alpha корпорации DEC, Power PC корпорации IBM и MIPS
фирмы SGI. Кроме того, такая структура защищала ядро от ошибок в коде
серверов. Однако для увеличения производительности, начиная с версии
Windows NT 4.0, большая часть операционной системы (например, управление системными вызовами и вся экранная графика) были возвращены в
ядро. Такая схема сохранилась и в Windows 2000.
Система подразделяется на несколько уровней, каждый из которых
пользуется службами нижележащего уровня (рис. 2.18.). Исполняющая
подсистема представлена системными службами, разделенными на модули, каждый из которых выполняет определенную функцию и имеет определенный интерфейс для взаимодействия с другими модулями. Два нижних уровня программного обеспечения: уровень аппаратных абстракций
(HAL, Hardware Abstraction Layer) и ядро написаны на языке С и ассемблере и являются частично машинно-зависимыми. Верхние уровни написаны
только на языке С и полностью машинно-независимы. Драйверы написаны
на языке С или C++.
1.Уровень HAL. Одна из целей создания Windows 2000 и Windows NT
заключалась в возможности переносить систему на другие платформы.
Теоретически на новой машине для запуска операционной системы достаточно перекомпилировать операционную систему новым компилятором
для данной машины. Можно добиться полной переносимости верхних
уровней операционной системы, так как в основном они имеют дело с
внутренними структурами данных. Нижние же уровни работают с регистрами устройств, прерываниями, контроллером прямого доступа к памяти
и другими аппаратными устройствами, которые могут сильно отличаются
на разных машинах. Хотя большая часть кода нижнего уровня написана на
языке С, но его нельзя просто перенести с процессора одного типа на процессор другого типа, перекомпилировать и перезагрузить из-за большого
количества мелких различий между разными типами процессоров.
Корпорация Microsoft решила скрыть многие из аппаратных различий в
тонком уровне аппаратных абстракций (HAL, Hardware Abstraction Layer).
Работа уровня заключается в том, чтобы предоставлять остальной системе абстрактные аппаратные устройства, свободные от индивидуальных
отличительных особенностей аппаратного обеспечения. Эти устройства
представляются в виде машинно-независимых служб, (процедурных вызовов и макросов), которые могут использоваться остальной операционной
системой и драйверами. Поскольку драйверы и ядро пользуются службами
HAL и не обращаются напрямую к устройствам, требуется значительно
меньше изменений для их переноса на другую платформу. Перенос уровня HAL достаточно прост, так как весь машинно-зависимый код сконцен-
77
трирован в одном месте. В уровень HAL включены службы, которые зависят от набора микросхем материнской платы и меняются от машины к машине в разумных предсказуемых пределах:
- доступ к регистрам устройств;
- адресация к устройствам, независящим от шины;
- обработка прерываний и возврат из прерываний;
- операции DMA (Direct Memory Access – прямой доступ к памяти);
- управление таймерами и часами реального времени, что обеспечивает переносимость работающих с ним программ (время хранится в интервалах по 100 нс, начиная с 1 января 1601 года);
- синхронизация многопроцессорных конфигураций на очень низком
уровне для избежания конфликтов на многопроцессорных системах;
- управление спин-блокировками нижнего уровня, например, один центральный процессор ждет, пока другой центральный процессор не освободит определенный ресурс;
- интерфейс с BIOS и доступ к CMOS-памяти (после загрузки операционной системы уровень HAL общается с BIOS и инспектирует память конфигурации CMOS, если она используется для определения и настройки
шин и устройств ввода-вывода, содержащихся в системе).
Уровень HAL не предоставляет абстракций или служб для специфических устройств ввода-вывода (клавиатур, мышей, дисков), а также блоков
управления памятью. Так как уровень HAL является машинно-зависимым,
он должен соответствовать системе, на которую установлен, поэтому
набор различных уровней поставляется на установочном компакт-диске
Windows 2000. Во время установки системы выбирается подходящий уровень и копируется на жесткий диск в системный каталог \winnt\system32\ в
виде файла hal.dll. Хотя эффективность уровня высока, для мультимедийных приложений корпорация Microsoft дополнительно поставляет пакет
программного обеспечения DirectX, расширяющий функциональность
уровня HAL дополнительными процедурами и предоставляющий пользовательским процессам прямой доступ к аппаратному обеспечению.
2.Уровень ядра. Над уровнем аппаратных абстракций располагается
уровень ядра и драйверы устройств. Значительная часть ядра представляет собой машинно-зависимую программу, но большая ее часть написана
на языке С, кроме модулей, в которых производительность считается важнее остальных задач. Одной из важнейших функций ядра является предоставление абстрактной модели аппаратуры более высоким уровням. Поэтому часть ядра постоянно находится в оперативной памяти, которая при
помощи установки соответствующего приоритета решает, допустимо ли
прерывание от устройств ввода-вывода или нет.
Назначение ядра заключается в том, чтобы сделать остальную часть
операционной системы независимой от аппаратуры и легко переносимой
на другие платформы. Ядро получает доступ к аппаратуре через уровень
HAL. Оно построено на низкоуровневых службах уровня HAL, формируя из
них абстракции более высоких уровней. Например, уровень HAL содержит
78
вызовы для связывания процедур обработки прерываний с прерываниями
и установки их приоритетов, а ядро предоставляет полный механизм для
переключения контекста: сохраняет все регистры центрального процессора, изменяет таблицы страниц, сохраняет кэш центрального процессора и
т.д. Когда все действия выполнены, работавший ранее поток3 оказывается
полностью сохраненным в таблицах, расположенных в памяти. Затем ядро
настраивает карту памяти нового потока и загружает его регистры, после
чего новый поток готов к работе.
Другой важнейшей функцией ядра является планирование потоков. Когда наступает пора проверить, не готов ли к работе новый поток, например, после того, как истечет выделенный потоку квант времени или по завершении процедуры обработки прерываний ввода-вывода, ядро выбирает поток и выполняет переключение контекста, необходимое, чтобы запустить этот поток.
Третья ключевая функция ядра заключается в: предоставлении низкоуровневой поддержки двум классам объектов – управляющим объектам и
объектам диспетчеризации, которые представляют собой внутренние объекты, на основе которых исполняющая система строит объекты пользователя. Управляющие объекты – это объекты, управляющие системой,
включая примитивные объекты процессов, объекты прерываний, объект
DPC (Deferred Procedure Call), отложенный вызов процедуры; объект АРС
(Asynchronous Procedure Call), асинхронный вызов процедуры.
Объект DPC используется, чтобы отделить часть процедуры обработки
прерываний, для которой время является критичным, от той ее части, для
которой время некритично. Как правило, процедура обработки прерываний
сохраняет несколько аппаратных регистров, связанных с прерывающим
устройством ввода-вывода, чтобы их можно было восстановить, и разрешает аппаратуре продолжать работу. Очередь DPC представляет собой
механизм напоминания о том, что есть работа, которую следует выполнить позднее. Объект АРС отличается тем, что асинхронный вызов процедуры выполняется в контексте определенного процесса. К объектам диспетчеризации относятся: семафоры4, мьютексы5, события6, таймеры7 и
другие объекты, изменение состояния которых могут ждать потоки. Эти
Процесс можно рассматривать как поток исполняемых команд или просто поток. Поток содержит:
счетчик команд, отслеживающий порядок выполнения действий; регистры, в которых хранятся текущие
переменные; стек, содержащий протокол выполнения процесса. Процессы используются для группирования ресурсов, а потоки являются объектами, поочередно исполняющимися на центральном процессоре.
4 Семафор – целая переменная для подсчета сигналов запуска. Переменная может иметь значение 0 (в
случае отсутствия сохраненных сигналов активации процесса) или некоторое положительное число, соответствующее количеству отложенных активизирующих сигналов.
5
Мьютекс – переменная, которая может находиться в одном из двух состояний: блокированном или неблокированном. Используется для блокирования/разблокирования процесса.
6 События – объекты ядра, которые бывают двух видов: сбрасываемые вручную и сбрасываемые автоматически. Каждое событие может находится в одном из двух состояний: установленном и сброшенном.
Поток может ждать события или его вызывать с помощью конкретных функций.
7
Таймеры (часы) – следят за временем суток, не позволяют одному процессу надолго занять центральный процессор и выполняют др. функции.
3
79
объекты напрямую связаны с планированием потоков, поэтому частично
обрабатываются ядром.
3.Исполняющая система. Над ядром и драйверами устройств располагается верхняя часть операционной системы, называемая исполняющей
системой (супервизором или диспетчером), которая написана на языке С,
не зависит от архитектуры и может переносится на другие машины с небольшой корректировкой. Исполняющая система состоит из 10 компонентов, каждый из которых представляет собой набор процедур, работающих
вместе для выполнения некоторой задачи:
- Менеджер объектов управляет всеми объектами операционной системы: процессами, потоками, файлами, каталогами, семафорами устройствами ввода-вывода, таймерами и др.; кроме того, управляет пространством имен, в которое помещается созданный объект, чтобы впоследствии
к нему можно было обратиться по имени. При создании объекта менеджер
объектов получает в адресном пространстве ядра блок виртуальной памяти и возвращает этот блок в список свободных блоков, когда объект уничтожается.
- Менеджер ввода-вывода формирует каркас для управления устройствами ввода-вывода и предоставляет общие службы ввода-вывода. Он
предоставляет остальной части системы независимый от устройств вводвывод, вызывая для выполнения физического ввода-вывода соответствующий драйвер. Файловые системы формально являются драйверами
устройств под управлением менеджера ввода-вывода.
- Менеджер процессов управляет процессами и потоками, включая их
создание и завершение, он является ключевым элементом многозадачности. Менеджер процессов основывается на объектах потоков и процессов
ядра и добавляет к ним дополнительные функции.
- Менеджер памяти реализует архитектуру виртуальной памяти со
страничной подкачкой по требованию операционной системы; управляет
преобразованием виртуальных страниц в физические страничные блоки;
реализует правила защиты, ограничивающие доступ каждого процесса
только к своему адресному пространству; контролирует системные вызовы, относящиеся к виртуальной памяти.
- Менеджер безопасности приводит в исполнение механизм безопасности, удовлетворяющий требованиям класса С2 Оранжевой книги Министерства обороны США.
- Менеджер кэша хранит в памяти блоки диска, которые использовались в последнее время, чтобы ускорить доступ к ним в случае, если они
понадобятся вновь. Количество памяти, выделенной для кэша, динамически изменяется и может увеличиваться или уменьшаться при необходимости. Менеджер кэша будет описан в разделе «Кэширование в Windows
2000».
- Менеджер plug-and-play получает все уведомления об установленных
новых устройствах. Некоторые устройства проверяются при загрузке системы, другие – могут подключаться в любое время. При подключении за-
80
пускается пересылка сообщения менеджеру plug-and-play, который находит и загружает соответствующий драйвер.
- Менеджер энергопотребления управляет потреблением электроэнергии: отключает монитор и диски, если к ним не было обращений в течение
определенного интервала времени; следит за состоянием батарей на переносных компьютерах и сообщает работающим программам об их состоянии.
- Менеджер конфигурации отвечает за состояние реестра. Он добавляет новые записи и ищет запрашиваемые ключи.
- Менеджер вызова локальной процедуры обеспечивает высокоэффективное взаимодействие между процессами и их подсистемами.
4.Интерфейс графических устройств. Исполняющий модуль Win32
GDI (Graphic Device Interface) изначально располагался в пространстве
пользователя, но в версии Windows NT 4.0 был перенесен в пространство
ядра для увеличения производительности. Win32 GDI управляет графическими изображениями для монитора и принтеров. Он содержит оконный
менеджер и драйвер дисплея и предоставляет системные вызовы, позволяющие пользовательским программам выводить данные на монитор и
принтеры независящим от устройств способом.
5.Уровень системных служб. Уровень располагается над исполняющей
системой. Его функция заключается в предоставлении интерфейса к исполняющей системе – приеме системных вызовов Windows 2000 и вызове
других частей исполняющей системы для их выполнения.
При загрузке операционная система Windows 2000 загружается в память как набор файлов. Основная часть операционной системы, состоящая из ядра и исполняющей системы, хранится в файле ntoskml.exe. Уровень HAL представляет собой библиотеку общего доступа, расположенную
в отдельном файле hal.dll. Интерфейс Win32 и интерфейс графических
устройств хранятся вместе в файле win32k.sys. После загрузки ядра операционной системы и исполняющих модулей загружаются драйвера
устройств, большинство из которых имеет расширение .sys.
6.Драйвера устройств. Каждый драйвер может управлять одним или
несколькими устройствами ввода-вывода, шифровать поток данных или
предоставлять доступ к структурам данных ядра. При установки драйвера
в систему он добавляется в реестр и затем динамически загружается при
каждой загрузке системы. Существуют драйверы для физических
устройств ввода-вывода (диски, принтеры) и для внутренних устройств и
микросхем, кроме того, файловые системы также представлены в виде
драйверов устройств.
Объекты Windows 2000 представляют собой однородный и непротиворечивый интерфейс ко всем системным ресурсам и структурам данных:
процессам, потокам, семафорам и т.д. Доступ к объектам предоставляется
при помощи дескрипторов объектов и осуществляется через менеджер
объектов. Поэтому все проверки, связанные с защитой, могут быть размещены в одном месте, с гарантией, что ни один процесс не сможет обойти
81
их. Исполняемый объект представляет собой набор последовательных
слов (структуру данных) в памяти (в виртуальном адресном пространстве
ядра). Файл на диске не является объектом, хотя для файла при его открытии создается объект – структура данных в виртуальном адресном
пространстве ядра. При перезагрузке (или сбое) системы объекты теряются. Когда операционная система загружается, объектов нет, кроме бездействующих системных процессов, чьи объекты жестко прошиты в файле
ntoskml.exe. Все остальные объекты создаются при загрузке системы, во
время работы различных программ инициализации и пользовательских
программ.
Каждый объект содержит заголовок с определенной информацией, общей для объектов всех типов. Поля заголовка включают: имя объекта; каталог, в котором объект живет в пространстве других объектов; информацию защиты (при открытии объекта выполняется определенная проверка);
список процессов, у которых есть открытые дескрипторы к данному объекту (если установлен определенный флаг отладки).
Каждый заголовок объекта содержит поле цены квоты, представляющей собой плату, взимаемую с процесса за открытие объекта. Если файловый объект стоит один пункт, а процесс принадлежит к заданию, у которого есть 10 пунктов квоты, то суммарно все процессы этого задания могут
открыть не более 10 файлов. Таким образом, для объектов каждого типа
могут реализовываться ограничения на ресурсы.
Заголовок объекта
Имя объекта
Каталог, в котором живет объект
Информация о защите (кто может использовать объект)
Цена квоты (стоимость использования объекта)
Список процессов с манипуляторами
Счетчик ссылок
Данные
Указатель на объект типа
Данные, специфические для объекта
Имя типа
Типы доступа
Права доступа
Стоимость квоты
Синхронизируемый?
Выгружаемый
Метод Open
Метод Close
Метод Delete
Метод Query name
Метод Parse
Метод Security
Рис. 2.19. Структура объекта
Объекты занимают участки виртуального адресного пространства ядра,
поэтому, когда в них нет необходимости, они должны быть удалены, а их
адресное пространство возвращено системе. Для этого в заголовке каждого объекта содержится счетчик ссылок на объект, который увеличивается
на единицу, когда объект открывается, и уменьшается на единицу при закрытии объекта. При открытии или освобождении объекта компонентом
исполняющей системы используется второй счетчик. Когда оба счетчика
уменьшаются до 0, это означает, что объект не используется пользовате-
82
лем и ни одним исполняющим процессом, то есть его можно удалить, а его
память освободить.
Часто частям исполняющей системы бывает нужно динамически получать на время участки памяти. Для этого исполняющая система содержит
два пула8 в адресном пространстве ядра: для объектов и для динамических структур данных. Один пул является выгружаемым, другой – невыгружаемым (фиксированным в памяти). Объекты, к которым обращения
частые, хранятся в невыгружаемом пуле; объекты, к которым обращения
редкие (например, ключи реестра; информация, относящаяся к безопасности) хранятся в выгружаемом пуле. Когда памяти не хватает, этот пул может быть выгружен на диск и загружен обратно по страничному прерыванию. Объекты, которые могут понадобиться при выполнении критического
участка программы, когда подкачка не разрешается, должны храниться в
невыгружаемом пуле. Когда требуется небольшое количество памяти,
страница может быть получена из любого пула, а затем разбита на мелкие
участки размером от 8 байт.
Объекты подразделяются на типы. Тип объекта определяется указателем на объект типа (рис. 2.19.). Информация о типе объекта включает: название типа; данные о том, может ли поток ждать изменения состояния этого объекта; должен ли объект этого типа храниться в выгружаемом
или невыгружаемом пуле. Самой важной частью объекта являются указатели на программы для определенных стандартных операций (open, close,
delete). Когда вызывается одна из этих операций, используется указатель
на типовой объект, в котором выбирается и выполняется соответствующая
процедура. Такой механизм предоставляет системе возможность инициализировать новые объекты и освобождать память при их удалении.
Компоненты исполняющей системы могут динамически создавать новые типы объектов, поэтому фиксированного списка типов объектов не
существует (наиболее часто употребляемые типы объектов приведены в
таблице 2.2.).
Для каждого процесса и потока существует один объект, в котором
хранятся основные свойства, необходимые для управления этим процессом или потоком. Семафор, мьютекс и событие, имеют отношение к синхронизации процессов; порт, таймер и очередь также имеют отношение к
связи и синхронизации. События могут быть в одном из двух состояний:
сигнализирующем и несигнализирующем. Если поток ждет события, находящегося в сигнализирующем состоянии, он немедленно получает управление, в ином случае поток блокируется до тех пор, пока какой-либо другой поток не переведет это событие в сигнализирующее состояние. Порты
представляют собой каналы между процессами, используемые для обмена сообщениями. Таймеры предоставляют способ блокировать процесс
или поток на определенный срок. Очереди применяются для уведомления
потоков о завершении асинхронной операции ввода-вывода.
8
Пул (англ. pool – общий котел) – временное объединение.
83
Объекты открытых файлов создаются при открытии файла. Маркеры
доступа представляют собой объекты безопасности. Они идентифицируют
пользователя и сообщают, какие привилегии он имеет. Профили представляют собой структуры, используемые для хранения периодически
фиксируемых значений счетчика команд работающего потока, которые
позволяют определить, на что данная программа тратит свое время.
Секции являются объектами, используемыми системой памяти для
управления отображаемыми на память файлами. Они хранят сведения о
том, какой файл (или часть файла) на какие адреса памяти отображается.
Ключи представляют собой ключи реестра и применяются для установки
связи между именем и значением. Каталоги объектов являются полностью
локальными по отношению к менеджеру объектов и предоставляют способ
объединять связанные объекты. Символьные ссылки позволяют имени в
одной части пространства имен объектов ссылаться на объект в другой
части этого пространства. У каждого известного системе устройства есть
объект устройства, содержащий информацию о нем и использующийся
для ссылки на устройство в системе, также как и у каждого загруженного
драйвера устройства есть объект в пространстве объектов.
Таблица 2.2.
Общие типы объектов исполняющей системы
Тип объекта
Процесс
Поток
Описание типа объекта
Процесс пользователя
Поток внутри процесса
Семафор со счетчиком, используемый для синхронизации проСемафор
цессов
Двоичный семафор, используемый для входа в критическую
Мьютекс
область
Объект синхронизации с перманентным состоянием (сигналиСобытие
зирующий/нет)
Порт
Механизм для передачи сообщений между процессами
Объект, позволяющий потоку спать в течение фиксированного
Таймер
интервала времени
Объект, используемый для уведомления о завершении асинОчередь
хронного ввода-вывода
Открытый файл
Объект, ассоциированный с открытым файлом
Маркер доступа
Описатель защиты для некоторого объекта
Структура данных, используемая для анализа использования
Профиль
центрального процессора
Структура, используемая для отображения файлов на виртуСекция
альное адресное пространство
Ключ
Ключ реестра
Каталог объектов
Каталог для группирования объектов в менеджере объектов
Символьная ссылка Указатель на другой объект по имени
Устройство
Объект устройства ввода-вывода
Драйвер устройства У каждого загруженного драйвера устройства есть свой объект
84
Пользователи могут создавать новые объекты или открывать существующие
при
помощи
вызовов
Win32:
CreateSemaphore
и
OpenSemaphore, которые являются библиотечными процедурами и в конечном итоге обращаются к настоящим системным вызовам. При успешном выполнении первый вызов создает, а второй открывает объект, создавая в результате 64-разрядную запись в таблице дескрипторов, хранящуюся в таблице дескрипторов процесса в памяти ядра. Пользователю
для последующей работы возвращается 32-разрядный индекс, указывающий положение дескриптора в таблице.
64-разрядный элемент таблицы дескрипторов в ядре содержит два 32разрядных слова. Одно слово содержит 29-разрядный указатель на заголовок объекта. Младшие три разряда используются как флаги (например,
указывающие, наследуется ли дескриптор дочерним процессом). Когда
указатель используется, эти разряды маскируются. Второе слово содержит 32-разрядную маску прав доступа. Она нужна, потому что проверка
разрешений выполняется только в то время, когда объект создается или
открывается. Если у процесса есть только разрешение для чтения объекта, тогда все остальные биты маски будут нулями, что дает системе возможность отвергать любую операцию, кроме операции чтения.
Для того чтобы во время выполнения программы менеджеру объектов
можно было следить за созданием и удалением объектов, он поддерживает пространство имен объектов, в котором располагаются все объекты
системы. Процесс использует данное пространство, чтобы найти и открыть
дескриптор объекта другого процесса при условии, что для этого у него
есть необходимые разрешения. Кроме пространства имен объектов
Windows 2000 поддерживает еще два пространства имен: пространство
имен файловой системы и пространство имен реестра. Все пространства имен представляют собой иерархическую организацию имен со множеством уровней каталогов для организации элементов. Объекты каталогов предоставляют средства реализации этого иерархического пространства имен для объектов.
Поскольку объекты исполняющей системы являются временными (исчезают при выключении компьютера), в начале загрузки системы пространство имен объектов пусто. Во время загрузки различные части исполняющей системы создают каталоги и заполняют их объектами. Например, когда менеджер plug-and-play обнаруживает новые устройства, он создает по объекту для каждого устройства и помещает эти объекты в пространство имен. При загрузке каждого драйвера также создается объект, а
его имя добавляется в пространство имен объектов. Обращение к драйверу осуществляется по указателю на его объект. Одним из инструментов
просмотра
имен
объектов
является
программа
winobj
(www.sysinternals.com). При запуске она отображает пространство имен
объектов, как правило, содержащее каталоги объектов, некоторые из них
перечислены в таблице 2.3.
85
Операционная система Windows 2000 состоит из компонентов, работающих в режиме ядра, и компонентов, работающих в режиме пользователя:
динамических библиотек DLL, подсистемы окружения и служебных процессов. Эти компоненты работают вместе, предоставляя каждому пользовательскому процессу интерфейс, отличный от интерфейса системных
вызовов Windows 2000. Операционной системой Windows 2000 поддерживаются три различных документированных интерфейса прикладного программирования API: Win32, POSIX и OS/2. У каждого из них имеется список
библиотечных вызовов. Работа библиотек DLL (Dynamic Link Library, динамически подключаемая библиотека) и подсистем окружения заключается в том, чтобы реализовать функциональные возможности интерфейса и
скрыть истинный интерфейс системных вызовов от прикладных программ.
Таблица 2.3.
Типичные каталоги пространства имен объектов
Имя каталога
??9
Device
Содержание каталога
Начальное место для поиска устройств MS-DOS, например, С:
Все обнаруженные устройства ввода-вывода
Объекты, соответствующие каждому загруженному драйверу
Driver
устройства
ObjectTypes
Объекты типов
Windows
Объекты для отправки сообщений всем окнам
Объекты, создаваемые пользователем, такие как семафоры,
BaseNamedObjs
мьютексы и др.
Arcname
Имена разделов, обнаруженные загрузчиком
NLS
Объекты языковой поддержки
Объекты драйверов файловой системы и объекты распознаватеFileSystem
ля файловой системы
Security
Объекты системы безопасности
Совместно используемые библиотеки, находящиеся в открытом
KnownDLLs
состоянии
Все версии Windows поддерживают динамические библиотеки, содержащие набор тесно связанных библиотечных процедур и их структуры данных в
одном файле с расширением .dll (как правило). Когда приложение компонуется, компоновщик видит, что некоторые библиотечные процедуры принадлежат к динамическим библиотекам, и записывает эту информацию в заголовок
исполняемого файла. Обращения к процедурам динамических библиотек
производятся не напрямую, а при помощи вектора передачи в адресном пространстве вызывающего процесса. Изначально этот вектор заполнен нулями,
так как адреса вызываемых процедур еще неизвестны. При запуске прикладного процесса все требуемые динамические библиотеки обнаруживаются и
отображаются на виртуальное адресное пространство процесса. Затем век-
?? – имя выбрано с целью, чтобы оно оказалось первым в алфавитном порядке для ускорения поиска
всех путей, начинающихся с буквы привода.
9
86
тор передачи заполняется адресами, что позволяет вызывать библиотечные
процедуры через него.
Для реализации интерфейса Win32 в каталоге \winnt\system32 содержится
более 800 отдельных файлов DLL общим объемом в 130 Мбайт. Количество
содержащихся в них вызовов API превышает 13000. Некоторые наиболее
важные файлы динамических библиотек перечислены в таблице 2.4. Для
каждого файла приведено количество экспортируемых функций (видимых за
пределами файла), этот параметр со временем изменяется. 1209 вызовов,
экспортируемых из файла ntoskrnl.exe, являются функциями, доступными для
драйверов устройств и других программ, связанных с ядром. Список экспортируемых функций в любом файле .ехе или .dll можно просмотреть программой depends входящей в пакет Platform SDK (Software Development Kit).
Таблица 2.4.
Ключевые файлы Windows 2000 и их режим работы
Файл
hal.dll
Режим
работы
Количество
функций
режим ядра
95
ntoskrnl.exe режим ядра
1209
win32k.sys режим ядра
-
ntdll.dll
режим ядра
режим
пользователя
режим
kernel32.dll
пользователя
режим
gdi32.dll
пользователя
режим
user32.dll
пользователя
режим
advapi32.dll
пользователя
csrss.exe
1179
0
823
543
695
557
Содержание
Низкоуровневое
управление
аппаратурой,
например, портами ввода-вывода
Операционная система Windows 2000 (ядро +
исполняющая система)
Множество системных вызовов, включая большую часть графики
Диспетчер перехода из режима пользователя в
режим ядра
Процесс подсистемы окружения Win32
Большая часть системных вызовов ядра (неграфических)
Шрифт, текст, цвет, кисть, перо, палитра, растровые изображения, рисование и т.д.
Окна, значки, меню, курсоры, диалоговые окна,
буфер обмена и т.д.
Защита, шифрование, реестр
Интерфейс POSIX предоставляет минимальную поддержку для приложений UNIX. Он поддерживает практически только функции, описанные в
стандарте Р1003.1. Этот интерфейс был включен только потому, что некоторые министерства правительства США требовали, чтобы операционные
системы для правительственных компьютеров были совместимы со стандартом Р1003.1. Чтобы облегчить пользователям UNIX переход на
Windows 2000, корпорация Microsoft разработала программный продукт
Interix, предоставляющий более высокую степень совместимости с системой UNIX. Функциональность интерфейса OS/2 ограничена практически в
той же степени, что и функциональность интерфейса POSIX.
87
2.5. Общая структура операционной системы Windows XP
Windows XP имеет модульную структуру (рис.2.20.), в которой код операционной системы и драйверы выполняются в привилегированном режиме процессора (режиме ядра), обеспечивающем полный доступ ко всей
аппаратной части компьютера, а пользовательские приложения выполняются в непривилегированном режиме процессора – пользовательском режиме без прямого доступа к оборудованию компьютера. В режиме ядра
работают следующие компоненты.
1.Уровень абстрагирования от оборудования (Hardware Abstraction
Layer, HAL). Его задачей является отделение операционной системы от
особенностей конкретных реализаций в аппаратном обеспечении компьютера, то есть от различий в материнских платах, в модификациях процессоров, в наборах микросхем и др. Благодаря этому уровню управление
подсистемами прерываний, прямого доступа к памяти, системными шинами и таймерами для ядра операционной системы является одинаковыми.
Уровень HAL реализован в системном файле Hal.dll.
Системные
процессы
Сервисы сетевой
обработки данных
Пользовательские
приложения
Диспетчер системных процессов, диспетчер сетевых сервисов, подсистемы DLL
API исполняющей системы
Исполняющая
подсистема
Файловая система
Ядро ОС
Диспетчер памяти
Диспетчер окон
Драйверы устройств
Уровень абстрагирования от оборудования (HAL)
Аппаратное обеспечение ПК
Рис. 2.20. Упрощенная структура Windows XP
2.Ядро операционной системы. Ядро содержит наиболее часто вызываемые низкоуровневые функции операционной системы: планирование и
распределение ресурсов между процессами, их переключение и синхронизацию. В обязанности ядра входит также управление прерываниями и обработка ошибочных ситуаций при функционировании операционной системы. Код ядра Windows XP не разделяется на потоки, а находится только в оперативной памяти и не может быть выгружен на диск. Код ядра
Windows XP находится в системном файле Ntoskrnl. exe.
3.Драйверы устройств. Драйверы представляют собой подпрограммы,
транслирующие вызовы, поступившие от пользовательских программ в запросы обработки данных для конкретных устройств. Значительное число
драйверов входит в состав Windows XP (они располагаются в подкаталоге
Isystem32l drivers системного каталога и имеют тип файла *.sys, например,
88
драйвер дисковой подсистемы находится в файле disk.sys), а для нестандартных периферийных устройств драйверы находятся в комплектах поставки.
4.Исполняющая подсистема (NT Executive). Модуль NT Executive состоит из микроядра и подсистем диспетчеризации управления программами с доступом к виртуальной памяти, окнам и графической подсистеме.
Виртуальная память предоставляет пользовательским программам виртуальные адреса адресного пространства процессов и соответствующие физические страницы оперативной памяти компьютера. Графическая подсистема предназначена для создания оконного интерфейса, рисования элементов управления, расположенных в окнах. К исполняющей подсистеме
относятся системные файлы Ntkrnlpa.exe, Kernel32.dll, Advapi32.dll,
User32.dll, Gdi32.dll.
Операционная система Windows XP в значительной мере использует
возможности процессоров, совместимых с семейством Intel x86. В их аппаратной архитектуре предусматривается четыре уровня привилегий выполнения кода программ от 0-го наивысшего привилегированного, до 4-го
пользовательского режима с ограниченным набором команд процессора.
Программы режима ядра операционной системы Windows XP функционируют в нулевом, защищенном и привилегированном режиме, а остальные
пользовательские программы работают в менее привилегированных режимах, находясь под контролем программ режима ядра.
Недоступные в пользовательском режиме операции и приложения обращаются к системным вызовам ядра операционной системы Win32 API. В
состав API входит более 250 функций, обращение к которым осуществляется при помощи системных вызовов, основанных на подпрограммах ядра
операционной системы. Все вызовы Win32 API обслуживаются как системными службами NT, так и модулем NT Executive – исполняющей системы
Windows XP. Модуль NT Executive представляет собой несколько программных потоков, которые выполняются в режиме ядра. Код практически
всех подсистем этого модуля находится в файле ntoskrnl.exe (кроме подсистемы Win32, код которой расположен в файле win32k.sys) и уровне абстрагирования от оборудования HAL, который содержится в файле hal.dll.
В модуле NT Executive сосредоточены все самые важные части операционной системы.
Микроядро отвечает за выделение памяти для приложений и распределение процессорного времени, то есть за реализацию многозадачности.
Для этого в состав микроядра входит планировщик потоков (threads
scheduler), который назначает каждому из потоков один из 32 уровней приоритета. Уровень 0 зарезервирован для системы. Уровни от 1 до 15 назначаются исполняемым программам, а уровни от 16 до 31 могут назначаться
только администраторами. Планировщик делит все процессорное время
на кванты фиксированного размера. При этом каждый программный поток
выполняется только в течение отведенного ему времени, и если по окончанию кванта он не освобождает процессор, планировщик в принудитель-
89
ном порядке приостанавливает этот поток и меняет программное окружение процесса, настраивая его на выполнение другого потока, обладающего тем же приоритетом. Микроядро также осуществляет всю работу, связанную с обработкой программных и аппаратных прерываний.
5.Диспетчеризация управления программами. Модуль состоит из следующего набора системных программ:
- Диспетчер ввода-вывода – интегрирует добавляемые в систему
драйверы устройств в операционную систему Windows XP.
- Диспетчер объектов – служит для управления всеми разделяемыми
ресурсами компьютера. В момент обращения приложения к какому-либо
ресурсу диспетчер объектов сопоставляет этому ресурсу объект (например, окно) и отдает приложению дескриптор10 (№ окна) этого объекта. Используя дескриптор, приложение взаимодействует с объектом, совершая в
его отношении различные операции. Монитор системы безопасности следит при этом за тем, чтобы с объектом выполнялись только разрешенные
действия.
- Диспетчер процессов – предоставляет интерфейс, при помощи которого другие компоненты Windows NT Executive, а также приложения пользовательского режима могут манипулировать процессами и потоками. Во
время работы диспетчер процессов сопоставляет каждому процессу и потоку идентификатор процесса (PID – Process Identifier) и идентификатор
потока (TID – Thret Identifier) соответственно, а также таблицу адресов и
таблицу дескрипторов.
- Диспетчер виртуальной памяти – служит для управления организации подсистемы памяти, позволяет создавать таблицы адресов для процессов и следит за корректностью использования адресного пространства
приложениями. Кроме того, обеспечивает возможность загрузки в оперативную память исполняемых файлов и файлов динамических библиотек.
Диспетчер виртуальной памяти представляет физическую память для
пользовательских приложений – каждому процессу выделяются 4 Гбайта
виртуального адресного пространства, из которых младшие 2 Гбайта используются процессом, а старшие 2 Гбайта (общие для всех процессов)
отводятся на нужды системы. Каждый процесс работает в своем изолированном адресном пространстве и не знает о других процессах. Процессы
обмениваются данными через разделяемую память, которая может быть
спроецирована на виртуальное адресное пространство нескольких процессов. Главная задача диспетчера виртуальной памяти – организация логической памяти, размер которой больше размера физической, установленной на компьютере. Это достигается благодаря тому, что страницы памяти, к которым долго не было обращений, и которые не имеют атрибута
неперемещаемых, сохраняются диспетчером в файле pagefile.sys на жестком диске и удаляются из оперативной памяти, освобождая ее для других
приложений. В момент, когда происходит обращение к данным, находя10
Дескриптор – описание файла
90
щимся в перемещенной на винчестер странице, диспетчер виртуальной
памяти копирует страницу обратно в оперативную память, затем обеспечивает доступ к ней. Этот механизм обеспечивает выделение дополнительной памяти программам, которые нуждаются в ней, и при этом следит
за тем, чтобы все работающие в системе программы обладали достаточным объемом физической памяти для того, чтобы продолжать функционирование.
- Диспетчер кэша – используется для кэшированного чтения и записи и
позволяет существенно ускорить работу жестких дисков и других
устройств. При этом наиболее востребованные файлы дублируются диспетчером кэша в оперативной памяти компьютера, и обращение к ним обслуживается с использованием этой копии, а не оригинала, расположенного на сравнительно медленном долговременном носителе. Кэш в Windows
XP является единым для всех логических дисков, вне зависимости от используемой файловой системы. Кроме того, он является динамическим, а
это значит, что диспетчер управляет его размерами в зависимости от доступного объема свободной физической памяти в каждый конкретный момент.
- Диспетчеры окон и графики – выполняю все функции, связанные с
пересылкой системных сообщений и отображением информации на
экране.
Процесс функционирования Windows XP условно подразделяется на
три фазы: процесс начальной нагрузки, штатный режим работы и завершение работы. Для загрузки Windows XP используется следующий минимальный набор файлов:
- файлы, располагающиеся в корневом каталоге загрузочного диска:
Ntldr, Boot.ini, Bootsect.dos (файл необходим только при использовании
мультизагрузки), Ntdetect.com;
- файлы, располагающиеся в системном подкаталоге /system32:
Ntoskrnl.exe, Hal.dll, разделы реестра SYSTEM;
- файлы, располагающиеся в системном подкаталоге /system32/drivers:
(необходимые драйверы устройств).
Процесс загрузки компьютера начинается с процедуры начального тестирования оборудования (POST – Power-On Self Test). Код, выполняющий
POST, зашит в базовой системе ввода-вывода (BIOS) каждого компьютера, при включении питания ему передается управление. Если в процессе
тестирования обнаруживаются какие-либо ошибки, то BIOS генерирует коды ошибок (POSTcodes), которые отличаются для BIOS разных производителей, и звуковые коды. Если процедура POST завершается успешно,
то BIOS передает управление главной загрузочной записи (MBR – Master
Boot Record) и первая «аппаратная» стадия загрузки компьютера, когда
процесс зависит только от аппаратуры компьютера, завершается.
Далее загрузочная запись, оперируя данными о разбиении жесткого
диска на логические тома, передает управление исполняемому коду, загрузчику Ntldr, расположенному в загрузочном секторе. Загрузчик перехо-
91
дит в защищенный режим и производит необходимые для успешного
функционирования манипуляции с памятью, кроме этого, Ntldr имеет модули, позволяющие работать с файловой системой и некоторыми другими
базовыми ресурсами системы. Все другие действия выполняются с помощью вызова прерываний BIOS.
Если в файле boot.ini зарегистрировано более одной операционной системы, то после первичной инициализации загрузчик предоставляет пользователю возможность выбора путем вывода Ntldr приглашения о выборе
операционной системы. Если выбрана операционная система Windows XP,
загрузчик запускает файл Ntdetect. сот. Этот компонент считывает из
CMOS-памяти системную дату и время, после чего производит поиск и
распознавание аппаратных средств, подключенных в данный момент к
компьютеру. Завершив работу, Ntdetect возвращает управление и собранную им информацию обратно в Ntldr. Далее загружается и инициализируется ядро операционной системы Ntoskrnl.exe и уровень абстрагирования
от оборудования Hal.dll. При инициализации ядро производит ряд действий в следующей последовательности:
- инициализация диспетчера памяти;
- инициализация диспетчера объектов;
- установка системы безопасности;
- настройка драйвера файловой системы;
- загрузка и инициализация диспетчера ввода-вывода;
- загрузка системных сервисов, которые реализуют взаимодействие с
пользователем.
В состав системных сервисов входят следующие модули:
- Smss.exe (диспетчер сеансов) – модуль управляет другими сервисами
и службами Windows; запускает: Win32 (Csrss) и некоторые системные
утилиты, выполняемые на этапе загрузки; реализует графический пользовательский интерфейс и запуск процессов Csrss.exe и WinLogon.exe;
- Csrss.exe – модуль предназначен для организации взаимодействия
между компьютером и пользователем;
- Lsass.exe – служба, запускаемая WinLogon.exe и отвечающая за безопасность системы (предоставляет возможность пользователю зарегистрироваться в системе).
После загрузки операционной системы пользователь должен пройти
процедуру аутентификации – ввести собственное регистрационное имя
(логин) и пароль. Процедура подключения к системе позволяет определить, обладает ли пользователь правом входа и работы с системой. Эту
процедуру выполняет служба WinLogon. При этом в системе происходят
следующие события:
- процесс WinLogon отображает на экране фон рабочего стола и приглашение к вводу пользователем логина и пароля; введенные данные передаются подсистеме безопасности;
92
- подсистема безопасности обращается к базе данных SAM (Security
Accounts Manager) и проверяет, обладает ли пользователь полномочиями
работы с системой.
Если пользователь является авторизированным пользователем системы, то подсистема безопасности формирует для него идентификатор доступа, который вместе с управлением передает обратно процессу WinLogon. Процесс WinLogon посредством обращения к подсистеме Win32 создает новый процесс для пользователя и прикрепляет ему идентификатор
доступа. Каждый процесс в дальнейшем создаваемый пользователем отмечается принадлежащим ему идентификатором доступа, поэтому доступ
пользователя к ресурсам системы контролируется и отслеживается. Благодаря обязательной процедуре подключения к системе упрощается реализация механизмов: аудит системы и квоты на использование ресурсов. Пользовательский идентификатор доступа содержит идентификатор
пользователя, а также идентификаторы всех групп, к которым принадлежит данный пользователь.
Если операционная система не загружается корректно, то при нажатии
в процессе загрузки Windows XP клавиши F8 происходит переход в расширенное меню запуска, содержащее пункты:
- Безопасный режим – загрузка Windows XP с минимальным требуемым
количеством системных файлов и драйверов устройств;
- Безопасный режим с загрузкой сетевых драйверов – загрузка
Windows XP с минимальным требуемым количеством системных файлов и
драйверов устройств с поддержкой подключения к сети;
- Безопасный режим с поддержкой командной строки – загрузка
Windows XP с минимальным требуемым количеством системных файлов и
драйверов устройств с загрузкой режима командной строки;
- Включить протоколирование загрузки – режим позволяет записать
этапы загрузки Windows XP в файл Ntbtlog. txt;
- Включить режим VGA – режим, загружает драйвер стандартного монитора VGA с разрешением 640 на 480 точек на дюйм и 16 цветами;
- Загрузка последней удачной конфигурации – режим, восстанавливает
последнюю неиспорченную копию реестра Windows XP.
2.6. Архитектура операционной системы UNIХ
Операционная система UNIX представляет собой интерактивную систему, разработанную для одновременной поддержки нескольких процессов и нескольких пользователей. UNIX была разработана для опытных
пользователей и программистов, поэтому ее основными свойствами являются: непротиворечивость, гибкость и мощь. Это означает, что в системе
должно быть небольшое количество базовых элементов, которые можно
комбинировать бесконечным числом способов, чтобы приспособить их для
конкретного приложения. Кроме того, UNIX лишена избыточности, например, вместо команды сору можно написать ср. Одно из основных правил
93
UNIX заключается в том, что каждая программа должна выполнять всего
одну функцию, но делать это хорошо.
Операционная система UNIX представляет собой иерархическую многоуровневую структуру (рис. 2.21.). На нижнем уровне располагается аппаратное обеспечение, состоящее из центрального процессора, памяти, дисков, терминалов и других устройств. На вышележащем уровне находится
операционная система, функция которой заключается в управлении аппаратным обеспечением и предоставлении всем программам интерфейса
системных вызовов, которые позволяют программам создавать процессы,
файлы и др. ресурсы и управлять ими.
Интерфейс пользователя
Интерфейс библиотечных
функций
Интерфейс
системных вызовов
Пользователи
Стандартные
обслуживающие программы
Стандартная библиотека
Ядро операционной системы UNIX
Режим
пользователя
Режим
ядра
Аппаратное обеспечение
Рис. 2.21. Уровни операционной системы UNIX
Программы обращаются к системным вызовам, помещая аргументы в
регистры центрального процессора (иногда в стек) и выполняя команду
эмулированного прерывания для переключения из пользовательского режима в режим ядра и передачи управления операционной системе UNIX.
На языке С нельзя написать команду эмулированного прерывания, поэтому процедуры написаны на ассемблере, но могут вызываться из программ,
написанных на С. Процедуры представляют собой библиотечные функции,
по одной на системный вызов.
Каждая такая процедура помещает аргументы в определенное место и
выполняет команду эмулированного прерывания TRAP. Чтобы обратиться
к системному вызову read, программа написанная на языке С должна вызвать библиотечную процедуру read. Стандарт POSIX определяет библиотечные процедуры, соответствующие системным вызовам, их параметры,
их действия и результат выполнения этих действий.
UNIX содержат большое количество стандартных программ, некоторые
из них описываются стандартом POSIX 1003.2: компиляторы, редакторы,
программы обработки текста и утилиты для работы с файлами. Именно
эти программы и запускаются пользователем с терминала. Таким образом,
речь идет о трех интерфейсах в операционной системе UNIX: интерфейсе
системных вызовов, интерфейсе библиотечных функций и интерфейсе,
образованным набором стандартных обслуживающих программ.
94
Ядро операционной системы UNIX состоит из нескольких уровней (рис.
2.22.). Нижний уровень ядра состоит из драйверов устройств и процедуры
диспетчеризации процессов. Драйверы системы UNIX подразделяются на
два класса: драйверы символьных устройств и драйверы блочных
устройств. Основное различие между ним заключается в том, что на блочных устройствах разрешается операция поиска, а на символьных нет. Технически сетевые устройства представляют собой символьные устройства,
но обрабатываются по-иному, поэтому они выделены в отдельный класс.
Диспетчеризация процессов производится при возникновении прерывания.
При этом низкоуровневая программа останавливает выполнение работающего процесса, сохраняет его состояние в таблице процессов ядра и запускает соответствующий драйвер. Диспетчеризация процессов производится также, когда ядро завершает свою работу и наступает момент запуска процесса пользователя. Программа диспетчеризации процессов написана на ассемблере и представляет собой отдельную от процедуры планирования программу.
Аппаратные и эмулированные
прерывания
Системные вызовы
Управление
терминалом
Необработанный
телетайп
Именование Отображе- Страничные
файлов ние адресов прерывания Обработка Создание и
завершение
сигналов
ОбработанСетевые Файловые
процессов
Виртуальная память
ный телетайп протоколы системы
Дисциплины
линии связи
Символьные
устройства
Сокеты
Маршрути- Буферный
зация
кэш
Драйверы
сетевых
устройств
Страничный кэш
Драйверы дисковых устройств
Планирование
процесса
Диспетчеризация
процессов
Аппаратура
Рис. 2.22. Структура ядра операционной системы UNIX
Нижний уровень ядра состоит из драйверов устройств и процедуры
диспетчеризации процессов. Драйверы системы UNIX подразделяются на
два класса: драйверы символьных устройств и драйверы блочных
устройств. Основное различие между ним заключается в том, что на блочных устройствах разрешается операция поиска, а на символьных нет. Технически сетевые устройства представляют собой символьные устройства,
но обрабатываются по-иному, поэтому они выделены в отдельный класс.
Диспетчеризация процессов производится при возникновении прерывания.
При этом низкоуровневая программа останавливает выполнение работающего процесса, сохраняет его состояние в таблице процессов ядра и запускает соответствующий драйвер. Диспетчеризация процессов производится также, когда ядро завершает свою работу и наступает момент запуска процесса пользователя. Программа диспетчеризации процессов напи-
95
сана на ассемблере и представляет собой отдельную от процедуры планирования программу.
Символьные устройства могут использоваться двумя способами. Некоторым программам (например, текстовым редакторам vi и emacs), требуется нажатая клавиша без обработки. Для этого служит ввод-вывод с
необработанного терминала (телетайпа). Другое программное обеспечение, например оболочка shell, принимает на входе уже готовую текстовую
строку, позволяя пользователю редактировать ее, пока не будет нажата
клавиша Enter. Такое программное обеспечение пользуется вводом с терминала в обработанном виде и дисциплинами линии связи.
Сетевое программное обеспечение часто бывает модульным, с поддержкой множества различных устройств и протоколов. Уровень выше сетевых драйверов выполняет функции маршрутизации, гарантируя, что
правильный пакет направляется правильному устройству или блоку
управления протоколами. Большинство систем UNIX содержат в своем ядре полноценный маршрутизатор Интернета. Над уровнем маршрутизации
располагается стек протоколов (включая протоколы IP и TCP). Над сетевыми протоколами располагается интерфейс сокетов, позволяющий программам создавать сокеты11 для отдельных сетей и протоколов. Для использования сокетов пользовательские программы получают дескрипторы
файлов.
Над дисковыми драйверами располагаются буферный кэш и страничный кэш файловой системы. В ранних системах UNIX буферный кэш представлял собой фиксированную область памяти, а остальная память использовалась для страниц пользователя. В современных системах границы не существует, и любая страница памяти может использоваться для
выполнения поставленной задачи. Над буферным кэшем располагаются
файловые системы. Большинством систем UNIX поддерживают несколько
файловых систем, включая быструю файловую систему Беркли, журнальную файловую систему, а также различные виды файловых систем System
V. Файловые системы совместно используют общий буферный кэш. Выше
файловых систем помещается именование файлов, управление каталогами, управление жесткими и символьными связями, а также другие свойства файловой системы, одинаковые для всех файловых систем.
Над страничным кэшем располагается система виртуальной памяти,
содержащая логические алгоритмы работы со страницами. Выше находится программа отображения файлов на виртуальную память и высокоуровневая программа управления страничными прерываниями, которая определяет действия при их возникновении. Вначале она проверяет допустимость обращения к памяти. При положительном ответе определяет местонахождение требуемой страницы и способ ее получения.
Сокеты подобны почтовым ящиками и телефонным розеткам в том смысле, что они образуют пользовательский интерфейс с сетью, как почтовые ящики формируют интерфейс с почтовой системой, телефонные розетки позволяют абоненту подключать телефон и соединяться с телефонной системой.
11
96
Над диспетчером располагается планировщик процессов, выбирающий
процесс, который должен быть запущен следующим. Если потоками
управляет ядро, то управление потоками является также функцией ядра. В
некоторых системах UNIX управление потоками вынесено в пространство
пользователя. Над планировщиком процессов расположена программа
для обработки сигналов и отправки их в требуемом направлении, а также
программа, занимающаяся созданием и завершением процессов.
Верхний уровень представляет собой интерфейс системы. Слева располагается интерфейс системных вызовов, который принимает все системные вызовы и направляет их одному из модулей низших уровней в
зависимости от природы системного вызова. Правая часть верхнего уровня представляет собой вход для аппаратных и эмулированных прерываний, включая сигналы, страничные прерывания, разнообразные исключительные ситуации процессора и прерывания ввода-вывода.
2.7. Аппаратная зависимость и переносимость
операционных систем
Многие операционные системы успешно работают на различных аппаратных платформах благодаря тому, что в большинстве компьютеров
средства аппаратной поддержки операционной системы приобрели типовые черты. В результате в операционных системах можно выделить достаточно компактный слой машинно-зависимых компонентов ядра, а
остальные слои сделать общими для разных аппаратных платформ. Четкой границы между программной и аппаратной реализацией функций операционной системы не существует. Решение о том, какие функции операционной системы будут выполняться программно, а какие – аппаратно,
принимается разработчиками аппаратного и программного обеспечения.
Практически все современные аппаратные платформы имеют типичный
набор средств аппаратной поддержки операционной системы.
1.Средства поддержки привилегированного режима обычно основаны
на системном регистре процессора, называемом «словом состояния»
машины или процессора. Регистр содержит признаки, определяющие режимы работы процессора, в том числе признак текущего режима привилегий. Смена режима привилегий выполняется за счет изменения словасостояния машины в результате прерывания или выполнения привилегированной команды.
2.Средства трансляции адресов выполняют операции преобразования виртуальных адресов, которые содержатся в кодах процесса, в адреса
физической памяти. Таблицы, предназначенные для трансляции адресов,
имеют большой объем, поэтому для их хранения используются области
оперативной памяти, а аппаратура процессора содержит только указатели
на эти области. Средства трансляции адресов используют данные указатели для доступа к элементам таблиц и аппаратного выполнения алгорит-
97
ма преобразования адреса, что значительно ускоряет процедуру трансляции по сравнению с ее чисто программной реализацией.
3.Средства переключения процессов предназначены для быстрого сохранения контекста приостанавливаемого процесса и восстановления контекста процесса, который становится активным. Содержимое контекста
включает содержимое всех регистров общего назначения процессора, регистра флагов операций (флагов нуля, переноса, переполнения и т.п.), системных регистров и указателей, которые связаны с отдельным процессом, например, указателя на таблицу трансляции адресов процесса. Для
хранения контекстов приостановленных процессов обычно используются
области оперативной памяти, которые поддерживаются указателями процессора. Переключение контекста выполняется по определенным командам процессора, например, по команде перехода на новую задачу, которая вызывает автоматическую загрузку данных из сохраненного контекста
в регистры процессора, после чего процесс продолжается с прерванного
ранее места.
4.Система прерываний позволяет компьютеру реагировать на внешние события, синхронизировать выполнение процессов и работу устройств
ввода-вывода, быстро переходить с одной программы на другую. Механизм прерываний нужен для того, чтобы оповестить процессор о возникновении в вычислительной системе некоторого непредсказуемого события
или события, которое не синхронизировано с циклом работы процессора.
Например, некорректное завершение арифметической операции, истечение интервала времени. При возникновении условий прерывания его источник (контроллер внешнего устройства, таймер, арифметический блок
процессора и т.п.) выставляет определенный электрический сигнал. Этот
сигнал прерывает выполнение процессором последовательности команд,
задаваемой исполняемым кодом, и вызывает автоматический переход на
заранее определенную процедуру обработки прерываний. В большинстве
моделей процессоров отрабатываемый аппаратурой переход на процедуру обработки прерываний сопровождается заменой слова состояния машины (или даже всего контекста процесса), что позволяет одновременно с
переходом по нужному адресу выполнить переход в привилегированный
режим. После завершения обработки прерывания происходит возврат к
исполнению прерванного кода.
5.Системный таймер, часто реализуемый в виде быстродействующего регистра-счетчика, необходим операционной системе для выдержки интервалов времени. Для этого в регистр таймера программно загружается
значение требуемого интервала в условных единицах, из которого затем
автоматически с определенной частотой начинает вычитаться по единице.
Частота «тиков» таймера связана с частотой тактового генератора процессора. При достижении нулевого значения счетчика таймер инициирует
прерывание, которое обрабатывается процедурой операционной системы.
Операционная система использует прерывания от системного таймера
для отслеживания временных затрат процессора на выполнение процес-
98
сов. Например, в системе разделения времени при обработке очередного
прерывания от таймера планировщик процессов может принудительно передать управление другому процессу, если данный процесс исчерпал выделенный ему квант времени.
6.Средства защиты областей памяти обеспечивают на аппаратном
уровне проверку возможности программного кода осуществлять с данными
определенной области памяти операции: чтение, запись или выполнение
(при передачах управления). Если аппаратура компьютера поддерживает
механизм трансляции адресов, то средства защиты областей памяти
встраиваются в этот механизм. Функции аппаратуры по защите памяти
обычно состоят в сравнении уровней привилегий текущего кода процессора и сегмента памяти, к которому производится обращение.
Для переносимости операционной системы с одной платформа на другую (например, на компьютеры, отличающихся типом процессора или способом организации аппаратуры) ядро проектируется таким образом, чтобы
только часть модулей была машинно-зависимой. Опыт разработки операционных систем показывает, что в хорошо структурированном ядре машинно-зависимые модули локализованы и образуют программный слой,
примыкающий к слою аппаратуры, что существенно упрощает перенос
операционной системы на другую аппаратную платформу.
Для уменьшения количества машинно-зависимых модулей производители операционных систем ограничивают универсальность машиннонезависимых модулей. Это означает, что их независимость носит условный характер и распространяется только на несколько типов процессоров
и созданных на их основе аппаратных платформ. Например, разработчики
операционной системы Windows NT, ограничили количество типов процессоров для своей системы четырьмя и поставляют различные варианты кодов ядра для однопроцессорных и многопроцессорных компьютеров.
Особое место среди модулей ядра занимают низкоуровневые драйверы внешних устройств. С одной стороны они, как и высокоуровневые
драйверы, входят в состав менеджера ввода-вывода, то есть принадлежат
слою ядра. С другой стороны – отражают все особенности управляемых
внешних устройств, поэтому их можно отнести и к слою машиннозависимых модулей. Такая двойственность низкоуровневых драйверов
еще раз подтверждает схематичность модели ядра со строгой иерархией
слоев.
Для компьютеров на основе процессоров Intel x86/Pentium разработка
экранирующего машинно-зависимого слоя операционной системы несколько упрощается за счет встроенной в постоянную память компьютера
базовой системы ввода-вывода – BIOS. BIOS содержит драйверы для всех
устройств, входящих в базовую конфигурацию компьютера (жестких и гибких дисков, клавиатуры, дисплея и т.д.), которые выполняют примитивные
операции с управляемыми устройствами. За счет этих операций экранируются различия аппаратных платформ компьютера и серверов на процессорах Intel разных производителей. Разработчики операционных си-
99
стем могут пользоваться слоем драйверов BIOS как частью машиннозависимого слоя операционной системы, а могут заменить все или часть
драйверов BIOS компонентами операционной системы.
Если код операционной системы может быть сравнительно легко перенесен с процессора одного типа на процессор другого типа и с аппаратной
платформы одного типа на аппаратную платформу другого типа, то такую
операционную систему называют переносимой (portable), или мобильной.
Для обеспечения свойства мобильности операционной системе, разработчики должны следовать следующим правилам:
1.Большая часть кода должна быть написана на стандартизированном
языке высокого уровня, трансляторы которого имеются на всех машинах.
Большинство переносимых операционных систем написано на языке С.
Операционная система, написанная на ассемблере, является переносимой только в тех случаях, когда перенос операционной системы планируется на компьютер, обладающий той же системой команд. В остальных
случаях ассемблер используется только для тех непереносимых частей
системы, которые должны непосредственно взаимодействовать с аппаратурой (например, обработчик прерываний), или для частей, которые требуют максимальной скорости (например, целочисленная арифметика повышенной точности).
2.Объем машинно-зависимых частей кода, которые непосредственно
взаимодействуют с аппаратными средствами, должен быть по возможности минимизирован. Для уменьшения аппаратной зависимости разработчики операционных систем должны исключить возможность использования
по умолчанию стандартных конфигураций аппаратуры или их характеристик. Для осуществления действий по управлению аппаратурой должен
быть написан набор аппаратно-зависимых функций. Каждый раз, когда какому-либо модулю операционной системы требуется выполнить некоторое
действие, связанное с аппаратурой, он манипулирует абстрактными данными, используя соответствующую функцию из имеющегося набора. Когда
операционная система переносится, то изменяются только эти данные и
функции, которые ими манипулируют. Например, в операционной системе
Windows NT диспетчер прерываний преобразует аппаратные уровни прерываний конкретного типа процессора в стандартный набор уровней прерываний IRQL, с которыми работают остальные модули операционной системы. Поэтому при переносе Windows NT на новую платформу нужно переписать коды диспетчера прерываний, которые занимаются отображением уровней прерывания на абстрактные уровни IRQL, а те модули операционной системы, которые пользуются этими абстрактными уровнями, изменений не потребуют.
3.Аппаратно-зависимый код должен быть надежно изолирован в нескольких модулях. Изоляции подлежат все части операционной системы,
которые отражают специфику, как процессора, так и аппаратной платформы в целом. Низкоуровневые компоненты операционной системы, имеющие доступ к процессорно-зависимым структурам данных и регистрам,
100
должны быть оформлены в виде компактных модулей, которые могут быть
заменены аналогичными модулями для других процессоров. Для снятия
платформенной зависимости, возникающей из-за различий между компьютерами разных производителей, построенными на одном и том же процессоре (например, MIPS R4000), должен быть введен хорошо локализованный программный слой машинно-зависимых функций.
В идеале слой машинно-зависимых компонентов ядра полностью экранирует остальную часть операционной системы от конкретных деталей аппаратной платформы (кэши, контроллеры прерываний ввода-вывода и
т.п.). В результате происходит подмена реальной аппаратуры унифицированной виртуальной машиной, одинаковой для всех вариантов аппаратной
платформы. Все слои операционной системы, лежащие выше слоя машинно-зависимых компонентов, могут быть написаны для управления этой
виртуальной аппаратурой. Таким образом, у разработчиков появляется
возможность создавать один вариант машинно-независимой части операционной системы (включая компоненты ядра, утилиты, системные обрабатывающие программы) для всего набора поддерживаемых платформ.
101
Вопросы
1. Перечислите функции операционных систем.
2. Определите принцип организации файловой системы.
3. Перечислите функции обслуживания файловой системы.
4. Определите основное отличие понятий «папка» и «каталог».
5. Определите цель навигации по файловой структуре.
6. Как определяется термин «атрибуты файлов»? Перечислите и охарактеризуйте атрибуты файлов.
7. Определите отличие однозадачных операционных систем от многозадачных.
8. Определите принцип динамического распределения ресурсов.
9. Определите категории реализации средств проверки дисков.
10. Каким образом операционной системой устраняются логические и
физические ошибки
11. Каким образом операционная система реализует предоставление
основных средств обслуживания компьютера?
12. Перечислите основные средства обслуживания компьютеров операционной системой.
13. Какой характер проявления имеют логические ошибки файловой системы?
14. Определите механизм образования потерянных кластеров.
15. Каким образом исправляется ошибка, связанная с потерянными кластерами?
16. Каким образом исправляется ошибка, связанная с общими кластерами?
17. Каким образом исправляется ошибка, связанная с потерянными кластерами?
18. Как определяется термин «файл подкачки»?
19. Как определяется термин «дисковый кэш»?
20. Перечислите прочие функции операционных систем.
21. Как определяется термин «архитектура операционной системы»?
22. Какой принцип является общим подходом к структурированию операционной системы?
23. Определите состав ядра операционной системы
24. Перечислите стандартные модули операционной системы.
25. Какие модули операционной системы являются резидентными, а какие транзитными.
26. Определите компонентный состав операционной системы.
27. перечислите функции управляющей программы операционной системы.
28. Какие элементы вычислительной системы являются статистическими
ресурсами?
29. Как определяется термин «мониторинг»?
30. Как определяется термин «мониторы»?
102
31. Какие основные аппаратные ресурсы компьютера подлежат распределению?
32. Перечислите основные подсистемы, входящие в состав операционной системы, которые обеспечивают распределение аппаратных ресурсов
компьютера.
33. Перечислите основные типы моделей операционных систем, которые
практически использовались.
34. Определите структуру монолитной операционной системы.
35. Определите структуру многоуровневой операционной системы.
36. Определите принципы организации модели операционной системы
«виртуальная машина».
37. Определите назначение монитора виртуальной машины.
38. Каким образом используется идея виртуальной машины в настоящее
время?
39. Какой принцип лежит в основе модели операционной системе «экзоядро»?
40. Перечислите основные преимущества модели «экзоядро».
41. Какие режимы работы должна поддерживать аппаратура компьютера
для обеспечения привилегии?
42. Каким образом операционная система ставит приложения в подчиненное положение?
43. Определите подход, который является эффективным способом декомпозиции сложных систем любого типа.
44. Перечислите слои, из которых может состоять структура ядра операционной системе в многослойной модели.
45. Из каких модулей состоит слой «менеджеры ресурсов» в многослойной модели операционной системы?
46. Как определяется термин «микроядерная архитектура»?
47. Определите функции микроядра в микроядерной архитектуре операционной системы.
48. Как определяется термин «сервер операционной системы»?
49. Определите назначение серверного (обслуживающего) процесса в
модели операционной системы «клиент-сервер».
50. Какую структуру имеет операционная система Windows XP?
51. Перечислите основные компоненты операционной системы Windows
XP.
52. Из каких системных программ состоит модуль «Диспетчеризация
управления программами» в операционной системе Windows XP?
53. Какой набор средств аппаратной поддержки операционной системы
имеют практически все современные аппаратные платформы?
54. Как определяется термин «переносимая операционная система»?
55. Каким правилам разработчики операционных систем должны следовать для обеспечения свойства мобильности операционной системе?
103
Тесты
1.За счет каких средств поддерживается гибкость аппаратных и программных конфигураций вычислительных систем?
за счет аппаратных средств
за счет операционных систем
за счет программ управления оборудованием (драйверов)
2.Какой принцип распределения ресурсов получил название plugand-play?
принцип статистического распределения ресурсов
принципы статистического и динамического распределения ресурсов
принцип динамического распределения ресурсов
3.В каких категориях реализуются средства проверки дисков?
средствами логической проверки
средствами логической проверки и средствами физической диагностики поверхности
средствами физической диагностики поверхности
4.Какими средствами исправляется ошибка файловой системы,
связанная с потерянными кластерами?
средствами операционной системы
аппаратными средствами вычислительной системы
драйвером диска
5.Какими средствами исправляется ошибка файловой системы,
связанная с общими кластерами?
средствами операционной системы путем повторной записи обоих
конфликтующих файлов
средствами операционной системы путем удаления обоих файлов
средствами операционной системы путем удаления одного файла и
перезаписью другого файла
6.Каким образом реализуется виртуальная память?
созданием файла подкачки в оперативной памяти
сохранением образа в оперативной памяти компьютера
созданием файла подкачки на жестком диске
104
7.Какие основные функции входят в состав ядра операционной
системы?
функции, решающие внутрисистемные задачи организации вычислительного процесса: переключение контекстов, загрузка/выгрузка
станиц, обработка прерываний
функции для поддержки приложений, создающие для них прикладную программную среду
функции, решающие внутрисистемные задачи организации вычислительного процесса, и функции для поддержки приложений
8. В каком виде оформляются модули, выполняющие вспомогательные функции операционной системы?
в виде библиотек
в виде библиотек или приложений
в виде приложений
9.Какие модули операционной системы являются транзитными?
модули операционной системы, которые находятся в оперативной памяти постоянно
модули операционной системы, которые загружаются в оперативную
память на время выполнения своих функций
системные модули
10.Какие аппаратные ресурсы компьютера подлежат распределению при работе приложений?
время работы процессора; адресное пространство основной памяти; оборудование ввода-вывода; файлы, хранящиеся во внешней
памяти
оборудование ввода-вывода; файлы, хранящиеся во внешней памяти
время работы процессора; файлы, хранящиеся во внешней памяти
11.В какой модели операционной системы реализован принцип
обеспечения каждого пользователя абсолютной копией реального
компьютера с подмножеством ресурсов?
в модели «многоуровневые системы»
в модели «ядро в привилегированном режиме»
в модели «экзоядро»
105
Содержание
Глава 1. Введение ................................................................................................................. 1
1.1. Вычислительные и операционные системы. Общие понятия ................................. 1
1.2. Виды интерфейсов. Технологии реализации интерфейсов ..................................... 6
1.3. История создания и развития операционных систем ............................................. 10
1.4. Классификация операционных систем .................................................................... 22
1.5. Требования, предъявляемые к современным операционным системам ............ 32
Вопросы ............................................................................................................................ 37
Тесты ................................................................................................................................. 38
Глава 2. Особенности архитектуры операционных систем .............................................. 40
2.1. Функции операционных систем ................................................................................ 40
2.2. Компонентный состав операционных систем. Системные вызовы ....................... 51
2.3. Архитектурные особенности и структура операционных систем.......................... 59
2.4. Общая структура операционной системы Windows 2000....................................... 74
2.5. Общая структура операционной системы Windows XP .......................................... 87
2.6. Архитектура операционной системы UNIХ .............................................................. 92
2.7. Аппаратная зависимость и переносимость операционных систем ...................... 96
Вопросы .......................................................................................................................... 101
Тесты ............................................................................................................................... 103
Download