Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга 1 ОС.doc
Скачиваний:
96
Добавлен:
11.11.2018
Размер:
2.44 Mб
Скачать

2.2.4. Концепция виртуальных машин

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

Впервые концепция виртуальных машин была реализована в 70-те года в операционной системе VМ фирмы ІВМ. В СССР вариант этой системы (VМ/370) был широко распространен в 80-те года и имел название Система виртуальных машин ЕС ЭВМ (СВМ ЕС). Рассмотрим архитектуру этой ОС, которая показана на рис. 2.2.

Ядро системы, которое называлось монитором виртуальных машин (VМ Мопіtог, МВМ), выполнялось на физической машине, непосредственно взаимодействуя с ее аппаратным обеспечением. Монитор реализовывал набор виртуальных машин (ВМ). Каждая ВМ была точной копией аппаратного обеспечения, на ней могла быть запущенная любая ОС, разработанная для этой архитектуры. Чаще всего на ВМ устанавливали специальную однопользовательскую ОС СМS (подсистема диалоговой обработки, ПДО). На разных ВМ могли одновременно функционировать разные ОС.

Когда программа, написанная для ПДО, выполняла системный вызов, его перехватывала копия ПДО, запущенная на соответствующей виртуальной машине. Потом ПДО выполняла соответствующие аппаратные инструкции, например инструкции ввода-вывода для чтения диска. Эти инструкции перехватывал МВМ и превращал их в аппаратные инструкции физической машины.

Виртуальные машины совместно использовали ресурсы реального компьютера; например, дисковое пространство распределялось между ними в виде виртуальных дисков, названных минидисками. ОС, запущенная во ВМ, использовала минидиски так же, как физические диски.

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

2.3. Операционная система и ее окружение

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

2.3.1. Взаимодействие ос и аппаратного обеспечения

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

Интерфейс аппаратного обеспечения должны быть полностью скрыт от прикладных программ и пользователей, всю работу с ним выполняет ОС. Рассмотрим особенности аппаратной поддержки этого интерфейса и его использование в современных ОС.

Средства аппаратной поддержки операционных систем

Современные аппаратные архитектуры компьютеров реализуют базовые средства поддержки операционных систем. К ним принадлежат:

-система прерываний,

-привилегированный режим процессора,

-средства переключения задач,

-поддержка управления памятью (механизмы трансляции адресов, защита памяти),

-системный таймер,

-защита устройств ввода-вывода,

-базовая система ввода-вывода (BIOS).

Рассмотрим эти средства подробнее.

Система прерываний является основным механизмом, который обеспечивает функционирование ОС. С помощью прерываний процессор получает информацию о событиях, не связанных с основным циклом его работы (получением инструкций по памяти и их выполнением). Прерывания бывают двух типов: аппаратные и программные.

Аппаратное прерывание - это специальный сигнал (запрос прерывания, IRQ), который передается процессору от аппаратного устройства.

К аппаратным прерываниям принадлежат:

-прерывание введения-вывода, которые поступают от контролера периферийного устройства; например, такое прерывание генерирует контролер клавиатуры при нажатии на клавишу;

-прерывание, связанные с аппаратными или программными ошибками (такие прерывания возникают, например, в случае сбоя контролера диска, доступа к запрещенной области памяти или деление на нуль).

Программные прерывания генерирует прикладная программа, выполняя специальную инструкцию прерывания. Такая инструкция есть в системе команд большинства процессоров. Обработка программных прерываний процессором не отличается от обработки аппаратных прерываний.

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

-для отказов повторяется инструкция, которая вызвала прерывание,

-для ловушек - выполняется следующая инструкция.

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

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

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

Средства переключения задач дают возможность сохранять содержимое регистров процессора (контекст задачи) в случае прекращения задачи и восстанавливать данные перед ее дальнейшим выполнением.

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

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

Системный таймер является аппаратным устройством, которое генерирует прерывание таймера через определенные промежутки времени. Такие прерывания обрабатывает ОС; информацию от таймера чаще всего используют для определения времени переключения задач.

Защита устройств ввода-выводы основывается на том, что все инструкции ввода-вывода определены как привилегированные. Прикладные программы осуществляют ввод-вывод не прямо, а при посредничестве ОС.

Базовая система ввода-вывода (BIOS) - служебный программный код, который сохраняется в постоянном запоминающем устройстве и предназначен для изоляции ОС от конкретного аппаратного обеспечения. Укажем, что средства BIOS не всегда дают возможность использовать все возможности архитектуры: например, процедуры BIOS для архитектуры IА-32 не работают в защищенном режиме. Поэтому современные ОС используют их только для начальной загрузки системы.

Аппаратная независимость и способность к перенесению ОС

Компоненты ядра, которые отвечают за непосредственный доступ к аппаратному обеспечению, выделены в отдельный уровень абстрагирования от оборудования, которое взаимодействует с другой частью системы через стандартные интерфейсы. Тем самым упрощается достижение аппаратной независимости ОС.

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

От аппаратного обеспечения зависят драйверы внешних устройств. Такие драйверы проектируют заранее как аппаратно-зависимые, их можно прибавлять и изымать по необходимости; для доступа к ним обычно используют универсальный интерфейс.

Способность к перенесению ОС определяется объемом работ, необходимых для того, чтобы система могла работать на новой аппаратной платформе. ОС с такими свойствами должны отвечать определенным требованиям.

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

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