- •Тула 2010
- •1.1 Принципы построения и основные требования. Особенности.
- •1.2 Ос рв qnx. Поддержка срв ос Linux.
- •1. 3 Функциональные требования к осрв
- •2. "Жесткие" и "мягкие" системы реального времени
- •3. Нити и приоритеты
- •4. Предсказуемость системных вызовов Win32 api
- •5. Управление прерываниями в nt
- •6. Управление памятью в nt
- •7. Может ли Windows nt использоваться в качестве ос рв?
- •Лекция №2.
- •Коммерческие решения, расширяющие nt возможностями обработки в реальном времени
- •Использование nt
- •3. Реализация Win32 api над другой ос рв
- •4. Совместная работа на одном процессоре nt и ос рв
- •5. Использование многопроцессорной архитектуры
- •6. Необходимые требования к ос для обеспечения предсказуемости
- •Лекция №3.
- •Лекция №4.
- •1. Разработка приложений жесткого реального времени
- •2. Модификация ядра
- •3. Модификация уровня аппаратных абстракций Windows nt (hal)
- •4. Применение ос рв
- •Лекция №5. Операционная система qnx. Системная архитектура.
- •Лекция № 6.
- •Лекция №7. Связь между процессами по сети посредством виртуальных каналов.
- •Лекция №8. Построение очереди процессов
- •Лекция №9. О работе в реальном времени
- •Лекция №10. Сопоставление и передача путей между процессами.
- •2. Префиксы управления вводом – выводом
- •5. Передача путей между процессами
- •2. Префиксы управления вводом – выводом
- •5. Передача путей между процессами
- •2. Относительные пути
- •3. Текущий рабочий каталог
- •Примечание относительно cd
- •4. Описатели файлов пространства
- •Лекция №12 Аппаратное и программное обеспечение промышленных систем реального времени (псрв)
- •Введение
- •1. Организация промышленных систем
- •2. Аппаратная архитектура
- •3. Стандарты шин
- •4. Технологии vme и pci
- •5. Мезонинные технологии
- •6. Полевые системы
- •7. Программное обеспечение промышленных систем
- •8. Управление производством
- •Лекция №13 Использование средства nt в качестве Web-сервера для iis (Internet Information Server)
- •Введение
- •Общие черты intranet-систем
- •3. Система управления доступом
- •4. Прикладное программирование в intranet
- •Лекция 14 Операционная система ос рв см эвм (rsx-11)
- •Введение
- •Основные компоненты системы ос рв
- •2. Диспетчер памяти
- •3. Многопользовательская защита
- •4. Выполнение задач под управлением ос рв
- •5. Внешние устройства и файловая система на дисках
- •Лекция 15 Управление прерываниями.
- •Вектора прерываний
- •Программирование контроллера прерываний 8259.
- •Запрет/разрешение отдельных аппаратных прерываний
- •Лекция 16 Управление Тема: прерываниями (продолжение).
- •Написание собственного прерывания
- •Дополнение к существующему прерыванию
- •Лекция 17 Синхронные методы проектирования срв
- •Система упорядоченного опроса
- •Основной цикл с прерываниями
- •Лекция 18 Синхронные методы проектирования срв (продолжение)
- •1 . Циклические планировщики
- •2. Выбор метода построения системы
- •3. Измерение быстродействия компьютера
- •4. Мультизадачный режим в операционной системе ms-dos
- •5. Условия существования мультизадачного режима в персональном компьютере ibm pc/at
- •X. Библиографический список рекомендуемой литературы
- •13.1 Ос рв usix: основные принципы построения и структура.
- •13.2 Поддержка рв в usix
- •13.3 Управление виртуальной памятью в usix
- •14.1 Процессы, связанные с выполнением программ
- •14.2 Функции ос рв usix, не связанные с управлением процессами
- •15.1 Программирование коммуникационных устройств.
- •15.2 Драйверы коммуникационных устройств
- •16.1 Файловая система
- •16.2 Средства защиты от несанкционированного доступа
- •16.3 Поддержка протоколов и окружений usix
Лекция 16 Управление Тема: прерываниями (продолжение).
План лекции:
Написание собственного прерывания
Дополнение к существующему прерыванию
Написание собственного прерывания
Существует несколько причин для написания собственного прерывания. Во-первых, большинство из готовых прерываний, обеспечиваемых операционной системой, не что иное, как обычные процедуры, доступные для всех программ, и вы можете пожелать добавить свое в эту библиотеку. Например, многие ваши программы могут использовать процедуру, выводящую строки на экран вертикально. Вместо того, чтобы включать ее в каждую программу в качестве процедуры, вы можете установить ее как прерывание, написав программу, которая останется резидентной в памяти после завершения. Тогда вы можете использовать INT 80H вместо WRITE_VERT (вызов прерывания несколько медленнее, чем процедуры).
Во-вторых, причиной написания прерывания может быть использование какого-либо отдельного аппаратного прерывания. Это прерывание автоматически вызывается при возникновении определенных условий. В некоторых случаях BIOS инициализирует вектор этого прерывания так, что он указывает на процедуру, которая вообще ничего не делает (она содержит один оператор IRET). Вы можете написать свою процедуру и изменить вектор прерываний, чтобы он указывал на нее. Тогда при возникновении аппаратного прерывания будет выполняться ваша процедура. Одна из таких процедур - это прерывание времени суток, которое автоматически вызывается 18,2 раза в секунду. Обычно это прерывание только обновляет показание часов, но вы можете добавить к нему любой код. Если ваш код проверяет показания часов и вступает в игру в определенные моменты времени, то возможны операции в реальном времени. Другие возможности - написание процедур обработки "Ctrl-Break", "PrtScr" и возникновения ошибочных ситуаций. Прерывания принтера и коммуникационные позволяют компьютеру быстро переключаться между операциями ввода/вывода и другой обработкой.
Наконец, вам просто захотелось написать прерывание, которое полностью заменит одну из процедур операционной системы, приспособленное к вашим нуждам.
Функция 25Н прерывания 21Н устанавливает вектор прерывания на указанный адрес. Адреса имеют размер в два слова. Старшее слово содержит значение сегмента (CS), младшее содержит смещение (IP). Чтобы установить вектор, указывающий на одну из ваших процедур, нужно поместить сегмент процедуры в DS, а смещение в DX. Затем поместить номер прерывания в AL и вызвать функцию. Любая процедура прерывания должна заканчиваться не обычной инструкцией RET, a IRET (выталкивает из стека три слова, включая регистр флагов, в то время как RET помещает в стек только два). Функция 25Н автоматически запрещает аппаратные прерывания в процессе изменения вектора, поэтому не существует опасности, что посреди дороги произойдет аппаратное прерывание, использующее данный вектор.
; установка прерывание
PUSH DS ;сохраняем DS
MOV DX,OFFSET ROUT ;смещение для процедуры в DX
MOV AX,SEG ROUT ;сегмент процедуры
MOV DS,AX ;помещаем в DS
MOV AH,25H ;функция установки вектора
MOV AL,60H ;номер вектора
INT 21H ;меняем прерывание
POP DS восстанавливаем DS
; процедура прерывания
ROUTINE PROC FAR
PUSH AX ;сохраняем все изменяемые регистры
•
•
•
POP AX восстанавливаем регистры
MOV AL,20H ;эти две строки используются
OUT 20H,AL ;только для аппаратных прерываний IRET ROUTINE ENDP
В конце кода каждого из аппаратных прерываний необходимо включать следующие строчки:
MOV AL,20H
OUT 20H,AL
Если аппаратное прерывание не оканчивается этими строками, то микросхема 8259 не очистит информацию регистра обслуживания, с тем чтобы была разрешена обработка прерываний с более низкими уровнями, чем только что обработанное. Отсутствие этих строк легко может привести к сбою программы, так как прерывания от клавиатуры, скорее всего, будут замороженными и даже Ctrl-Alt-Del окажется бесполезным. Отметим, что эта добавка не нужна для векторов прерываний, являющихся расширениями существующих прерываний, таких, как прерывание 1СН, которое добавляет код к прерыванию времени суток.
Когда программа завершается, должны быть восстановлены оригинальные векторы прерываний. В противном случае последующая программа может вызвать данное прерывание и передать управление на то место в памяти, в котором вашей процедуры уже нет. Функция 35 прерывания 21Н возвращает текущее значение вектора прерывания, перемещая значение сегмента в ES, а смещение в ВХ. Перед установкой своего прерывания получите текущее значение вектора, используя эту функцию, сохраните эти значения и затем восстановите их с помощью функции 25Н (как выше) перед завершением своей программы. Например:
; в сегменте данных
KEEP__CS DW 0 ; хранит сегмент заменяемого
;прерывания KEEP_JP DW О ; хранит смещение прерывания
; в начале программы
MOV АН,25Н функция получения вектора
MOV AL,1CH номер вектора
INT 21H теперь сегмент в ES, смещение
в ВХ
MOV КЕЕР__1Р,ВХ запоминаем смещение
MOV KEEP__CS,ES запоминаем сегмент
; в конце программы
CLI
PUSH DS ;DS будет разрушен
MOV DX,KEEP_IP ;подготовка к восстановлению
MOV AX,KEEP_CS ;
MOV DS,AX ;подготовка к восстановлению
MOV AH,25H ;функция установки вектора
MOV AL,1CH ;номер вектора
INT 21H ;восстанавливаем вектор
POP DS восстанавливаем DS
STI
Существуют "ловушки", которых необходимо избегать при написании прерывания. Если новая процедура прерывания должна иметь доступ к данным, то необходимо позаботиться, чтобы DS был правильно установлен. Другая неприятность может состоять в том, что при завершении программы по "Ctrl-Break" вектор прерывания не будет восстановлен (т.е. необходимо предусмотреть, чтобы при нажатии "Ctrl-Break" программа выполняла эту процедуру).
Рассмотренные выше функции MS DOS просто получают или изменяют пару слов в младших ячейках памяти. Смешение вектора может быть вычислено простым умножением номера вектора на 4. Например, чтобы получить адрес прерывания 16Н в ES:BX, нужно:
; получение адреса прерывания 16Н
SUB AX,AX устанавливаем ES на начало памяти
MOV ES,AX
MOV DI,16H ;номер прерывания в DI
SHL 01,1 ;умножаем на 2
SHL DI,1 ;
MOV BX,ES:[DI] ;берем младший байт в ВХ
MOV AX,ES:[DI]+2 ;берем старший байт в ES
MOV ES,AX
Не рекомендуется прямо устанавливать вектор прерываний, обходя функцию DOS. В частности в многозадачной среде операционная система может поддерживать несколько таблиц векторов прерываний, и реальный физический адрес таблицы может быть известен только DOS.