- •Общие сведения об операционных системах.
- •1.2. Становление операционных систем
- •1.2.1. Режим пакетной обработки
- •1.2.2. Режим разделения времени
- •1.2.3. Режим реального времени
- •1.3. Классификация ос
- •1.3.1. Дос (Дисковые Операционные Системы)
- •1.3.3. Системы виртуальных машин
- •1.3.4. Системы реального времени
- •1.3.5. Кросс-загрузчики
- •1.3.6. Системы промежуточных типов
- •Сравнение операционной среды
- •2. Краткий обзор операционных систем.
- •2.2.Архитектура unix.
- •2.3.Архитектура ос unix
- •2.6. Основные утилиты ос unix
- •3.Инструментальные средства программирования
- •3.1. Компилятор
- •3.1.1. Стадии компиляции:
- •Ос рв (Операционные системы реального времени).
- •4.1. Достоинства:
- •4.2. Преимущества:
- •Векторные платы
- •5.2.Ядро ос Helios:
- •7.2.Структура Win 95
- •7.3. Сpавhительhая хаpаkтеpистиkа
- •7.3.1. Тpетье кольцо.
- •7.3.2. Hулевое кольцо.
- •7.6. Системные операции unix
- •7.6.1. Основные особенности:
- •8. Однопользовательские операционные системы.
- •8.1. Среда выполнения.
- •9. Многозадачные и многопользовательские опрерационные системы
- •9.1. Системы коллективного пользования машин.
- •Синхронизация и другие методы взаимодействия задач. 7.3.1. Синхронный ввод/вывод в однозадачных системах
- •7.3.2. Синхронный ввод/вывод в многозадачных системах
- •Архитектура Фон-Неймана
- •Механизмы переключения контекстов.
- •1 Прогр.
- •При этом пользовательские задачи должны иметь возможность обмениваться данными с модулями ос и друг с другом459.4.1. Кольца защиты
- •Функции Setjmp() и Longjmp(). Нелокальные переходы Setjmp.
- •Супервизор.
- •Асинхронные методы замены контекста.
- •Запрет прерывания и маскирование прерывания.
- •Повторная входимость.
- •4.1. Выгоды многозадачности и многопроцессности
- •Состояния процессов.
- •Структурная схема ядра.
- •Стратегия планирования.
- •Обмен сообщениями между процессами.
- •1 Ресурс
- •1 Ресурс
- •2 Проц.
- •2 Ресурс
- •Алгоритм обнаружения и устранения дедлоков (deadlocks).
- •Управление памятью. Общие вопросы.
- •Основные элементы программирования
Состояния процессов.
В любой ОС процессы могут быть:
активными;
пассивными (куда входят готовые к выполнению и ожидающие).
пассивные
готовые
активные
ожидающие
Структурная схема ядра.
Очередь
блокирования
планировщик
Очередь
готовых
диспетчер процессор
Если разным процессам необходим один и тот же ресурс, то этот ресурс называется критическим. Код программы, на котором осуществляется вход в критический ресурс, называется критическим участком.
Реентерабельность – повторная входимость.
Если критический ресурс – программный код (подпрограмма), то все просто (создаются ее копии).
А если критический ресурс – физическое устройство, то здесь могут возникнуть проблемы.
Также реентерабельными могут быть и прерывания (как DOS, так и BIOS). Здесь тоже могут возникнуть серьезные трудности.
Метод взаимного исключения – если программа работает с критическим участком, то она работает с ним до самого конца, и никакая другая программа ей не может помешать. Следовательно, этот метод работает против систем разделения времени.
Диспетчер решает вопрос об очередности активности процессов. Иными словами, занимается переключением задач по времени.
В курсовой работе вдобавок к диспетчеру будет еще необходим и планировщик, который будет рассматривать, какие процессы можно допустить к борьбе за процессор.
На уровне пользователя решается вопрос о том, какие процессы необходимо запускать.
Стратегия планирования.
без переключения контекста или выполнения до конца;
с переключением (близко к разделению времени);
а) с постоянным шагом (размер тика не меняется);
б) с переменным шагом (размер тика меняется, соответственно).
Смена размера тика необходима, в частности, при использовании приоритетов.
с приоритетом;
а) постоянный;
б) динамический.
Значения очередей следующее:
позволяет упорядочить доступ к ресурсам в режиме FIFO (с учетом приоритетов);
позволяет обращаться к процессам на абстрактном уровне.
Содержание дескриптора процессов:
имя процесса;
состояние ЭВМ (все регистры, состояния памяти процесса);
данные о состоянии процесса (т.е. он готовый, активный или блокированный);
данные для планирования (указ_очередь, в которой находится процесс, указ_на_сам_проц, указ_след_проц, указ_пред_проц);
сведения о потомках и родителях (сведения о том, из какого процесса был запущен данный процесс и для какого из процессов он является родителем).
Ядро управляется 2-умя способами:
прерываниями (с физического низкого уровня);
примитивами (с высокого уровня).
Примитивы ядра.
Примитивы могут быть 3-ех уровней:
управление процессами;
примитивы синхронизации;
а) простейшая синхронизация;
б) временная (задержка для многозадачного режима);
в) событийная (по событию).
примитивы обмена сообщений;
а) примитивы для синхронизации быстрых и медленных устройств;
б) процесс обмена информации между собой (почтовый ящик).
Все примитивы пишутся по одной и той же схеме:
Начало
пролог; сохранение контекста активного и вхождение в критический участок
контроль; проверка прав и параметров
<тело примитива>
выделение процесса; переключение контекста
Примитивы управления процессами:
создать процесс;
уничтожить процесс.
Создать процесс:
пролог;
контроль;
создать дескриптор;
включить в очередь;
переназначить.
Уничтожить процесс:
пролог;
контроль;
извлечь из очереди;
разрушить дескриптор;
переназначить.
Эта схема не годится в случае удаления активного процесса, т.к. это опасно. Поэтому рассмотрим другой вариант:
Уничтожить процесс:
пролог;
контроль;
извлечь из очереди;
включить в очередь удаления;
переназначить.
а) специальный процесс (демон);
б) в обработчике прерываний.
Обработчик прерываний:
Начало
Очистить очередь удаления
Переключение контекста
Конец
Простейшая синхронизация;
А
отладка
Б) возобновить выполнение
Отсрочить выполнение:
пролог;
контроль;
извлечь из очереди;
включить в очередь приостановленных;
переназначить;
Возобновить выполнение:
пролог;
контроль;
извлечь из очереди приостановленных;
включить в очередь готовых;
переназначить.
Временная синхронизация;
DELAY() P1
Участок
активного ожидания Недостатки: простаивание
процессора; коллизии
с обработчиком прерываний по таймеру.
К этому надо бы добавить:
+ реализация режима пассивных ожиданий;
+ избавление от иллюзии, связанной с обработчиком прерываний.
Постановка
указ дескриптор |
|
|
|
|
|
|
|
T=Tn+t |
|
|
|
|
|
|
|
Функцию возвращения из очереди удаляемых берет на себя обработчик прерываний.
Событийная синхронизация;
1) Латентность – скрытность (например, заболевания).
P1 P2
CLI CLI
Критический
участок За это время
система должна быть латентной
STI STI
t << тик
2)Маскирование (запрет отдельных прерываний).
Маскирование используется для того, чтобы выделить в анализируемом значении указанные биты и сделать навидимыми остальные.
Микросхема PIC 20h, 21h, 22h (через порт 21h фактически и происходит маскирование)
Например, хотим запретить прерывание клавиатуры:
mov al, 00000010b
out 21h, al
Режим взаимного исключения;
Монитор – объект, содержащий:
множество переменных (отражающих состояния системы);
множество функций (функции изменения переменных).
Когда процесс получает доступ к ресурсу, то это влияет (приводит к) на изменение состояний системы.
Когда процесс запрашивает ресурс через монитор.
Монитор “знает” состояния системы и владеет функциями, способными их изменить, может предоставить этот ресурс либо отказать процессу.
Монитор работает в режиме взаимного исключения (ВИ).
0, критический участок свободен
FLAG =
1, критический участок занят
M: если FLAG = 1, то идти к М
Критический
участок
FLAG = 0
Недостатки:
такая схема (3) приводит к режиму активного ожидания, т.е. режиму, при котором ожидаются ресурсы процессора;
нарушение принципа FIFO;
FLAG – тоже общий ресурс к нему тоже можно осуществить доступ.
Отсюда видно, что эта схема практически неприемлема, а если и приемлема, то безграмотна.
Попробуем ее немного улучшить (попробуем устранить последний недостаток):
M: mov ax, 1
Режим блокировки
шины
lock xchg ax, FLAG
Cmp ax, 1
Jz M
Критический
участок
FLAG = 0
Семафор Дейкстры (устраняет все 3 недостатка):
Семафор – объект, который состоит из:
счетчика семафора;
очереди семафора;
2-ух функций семафора (захват семафора, стоящий перед критическим участком и освобождение семафора, стоящий после критического участка).
Захват_семафор()
CLI
DEC счетчик семафора (если счетчик семафора < 0, то дескр_проц отправляется в очередь семафора)
STI
Освоб_семафор()
CLI
INC счетчик семафора (если счетчик семафора <= 0, то дескр_проц, стоящий в очереди семафора 1-ым, отправляется в критический участок)
STI
Пример:
С
1)-3)
P
P3
з
P2
Критический
участок
о
4)
1) P1: сч_сем = 0; P1 – в критический участок
2
P3
3) P3 сч_сем = -2; P3 – в очередь семафора
P1 – закончился; сч_сем = -1; P2 – из очереди семафора в критический участок
P2 – закончился; сч_сем = 0; P3 – из очереди семафора в критический участок
P3 – финишировал; сч_сем = 1; код программы закончил свою работу
Примечание: в этой конструкции значение сч_сем = 1 – эквивалентно тому, что очередь семафора пуста, а критический участок – свободен.
Примитивы сообщения;
Самый медленный способ.
Придерживается следующих функций:
а) синхронизация медленных и быстрых устройств;
б) обмен сообщениями между процессами (подпрограммами).
С точки зрения ОС последовательные файлы – это ничто иное, как буферы к устройствам ввода/вывода.
Именно буфер выступает в качестве синхронизации между устройствами и вычислительной системой.
Буфер кольцевая очередь (см. курс СиАОЭДЭВМ).
Достоинства:
+ операции чтения и записи можно разделить по времени (что приводит к синхронизации).
Недостаток:
любой буфер является фиксированным.
Устранение недостатка:
а) содержать в буфере дескриптор очереди, а не сами данные, что уменьшает информативность;
б) дополнить соответствующими динамическими очередями (правда это снизит скорость обработки).