- •Архитектура операционной системы
- •1. Монолитные системы
- •2. Многоуровневые системы
- •3. Виртуальные машины
- •Архитектура, основанная на ядре
- •Режим ядра и пользовательский режим
- •Типовые средства аппаратной поддержки ос
- •Машинно-зависимые компоненты ос
- •Микроядерная архитектура
- •Процессы и потоки
- •Реализация процессов
- •Назначение потоков
- •Реализация потоков
- •Планирование Процессов
- •Пример 1. Планирование в Windows 2000
- •Пример 2. Планирование в unix
- •Цели планирования
- •Схемы планирования
- •Взаимодействие процессов и потоков
- •Состояние состязания
- •Критические области
- •Взаимоисключение с активным ожиданием
- •Семафоры
- •Мьютексы
- •Мониторы
- •Взаимные блокировки
- •Основные направления решения проблемы тупиков
- •Предотвращение тупиков
- •Обнаружение тупика
- •Восстановление после тупика
- •Организация мультизадачности ос
- •Опрос (проверка флагов)
- •Исключения
- •Прерывания
- •Классификация прерываний
- •3 Класса прерываний:
- •Механизм прерываний
- •Приоритеты прерываний
- •Организация памяти
- •Функции ос по управлению памятью
- •Стратегии управления памятью
- •Фрагментация памяти
- •Способы борьбы с фрагментацией:
- •Типы адресов памяти
- •Учет свободных и занятых областей памяти
- •Учет памяти с помощью битовых карт
- •Учет памяти с помощью связных списков
- •Виртуальная память
- •Файлы подкачки
- •Вопросы по модулю №1
Машинно-зависимые компоненты ос
А теперь поговорим о средствах поддержки аппаратуры со стороны ОС.
Одна и та же ОС не может без каких-либо изменений работать на компьютерах, которые отличаются типом процессора или способом организации всей аппаратуры.
«Аппаратные средства поддержки ОС» – среда для установки и работы ОС. С другой стороны в каждой ОС присутствуют «Средства аппаратной поддержки ОС» или «Машинно-зависимые компоненты». Перечислим основные элементы.
Особенности аппаратной платформы, учитываемые ОС:
система команд процессоров;
состав регистров процессоров;
количество типов прерываний и их состав;
формат вектора прерываний (таблицы ссылок на процедуры обработки прерываний);
особенности подключения внешних устройств;
Часть модулей ОС обязательно будут машинно-зависимыми. При разработке ОС эту часть модулей стараются сделать абсолютно отдельными и компактными, чтобы все остальное не зависело от аппаратной платформы. Как правило, эти модули (или их большая часть) пишутся на ассемблере, тогда как остальная часть ОС пишется, как правило, на различных вариантах СИ.
Объем машинно-зависимых компонентов ОС зависит от того, насколько велики различия в аппаратных платформах, для которых разрабатывается ОС. Например, ОС, построенная на 32-битовых адресах, для переноса на машину с 16-битовыми адресами должна быть переписана практически заново. А вот несовпадение системы команд процессоров преодолевается сравнительно просто. Основная часть ОС пишется на языке высокого уровня, а затем соответствующим компилятором генерируется код для конкретного процессора. Другие отличия лежат гораздо глубже, и преодолеть их бывает очень сложно. Например, отсутствие аппаратной поддержки виртуальной памяти приводит к принципиальным различиям в реализации системы управления памятью. В таких случаях появляется версия ОС, учитывающая специфику данной конкретной аппаратной платформы.
Для того чтобы количество машинно-зависимых модулей было меньше, разработчики ОС, как правило, ограничивают универсальность остальных модулей. Это означает, что их универсальность носит условный характер и распространяется только на несколько типов процессоров, на которые и рассчитана ОС. Например, ОС Windows NT рассчитана на 4 типа процессора (варианты Intel x86 и Pentium), и в зависимости от количества процессоров в компьютере поставляются различные варианты кодов ядра.
Чтобы ОС была легко переносимой, она должна отвечать следующим требованиям:
бо’льшая часть кода должна быть написана на стандартном языке высокого уровня;
объем машинно-зависимых частей кода должен быть по возможности минимальным. Например, следует всячески избегать прямого управления регистрами и другими аппаратными средствами, не использовать задаваемых по умолчанию конфигураций аппаратуры;
аппаратно-зависимый код должен быть в нескольких модулях, а не разбросан по всей ОС.
В идеале слой машинно-зависимых модулей ОС полностью скрывает от остальной части ОС конкретные детали аппаратной платформы.