Программное прерывание: Обработка прерываний, векторы прерываний, программные прерывания, IRQ.

Программные прерывания и системные вызовы


⇐ ПредыдущаяСтр 3 из 6Следующая ⇒

Операционная система MS-DOS предоставляет программисту, работающему на языке ассемблера, большой набор подпрограмм, выполняющих различные полезные действия. Все эти подпро­граммы оформлены как подпрограммы обработки прерываний, и для каждой подпрограммы в руководстве по MS-DOS указан но­мер соответствующего ей прерывания. Для вызова системной под­программы следует использовать команду программного прерыва­ния int. Сокращенно принято сами системные подпрограммы на­зывать «прерываниями», хотя это не очень правильно. Некоторые прерывания относятся к ROM BIOS (подсистеме управления вво­дом/выводом, находящейся в ПЗУ), другие прерывания обслужи­ваются подпрограммами MS-DOS, загружаемыми в ОЗУ. Особую роль играет прерывание с номером 21h. В зависимости от значе­ния, содержащегося при вызове прерывания в регистре AH, MS-DOS выполняет при этом одну из нескольких десятков подпро­грамм, которые принято называть функциями DOS.

Для каждого прерывания и каждой функции DOS в руково­дстве описан набор входных и выходных параметров, передавае­мых через регистры, а также перечень возможных ошибок.

В данной работе будут описаны прерывания и функции DOS, относящиеся к работе с клавиатурой и экраном ПЭВМ.

Функции DOS для ввода с клавиатуры

Функция 01h (т.е. прерывание 21h при значении AH=01h) вы­полняет ввод с клавиатуры одного символа. Если в момент вызова функции в буфере клавиатуры были символы (т.е. были нажатия клавиш до этого), то берется символ из буфера, в противном слу­чае система ждет, пока не будет нажата клавиша. Код введенного символа помещается в регистр AL. Введенный символ отобража­ется на экране (как говорят, выполняется эхо-отображение).

Например, пусть на клавиатуре была нажата клавиша «F». Тогда после вызова:

mov ah,01h
int 21h

в регистре AL будет содержаться число 46h, которое является кодом буквы F в коде ASCII.

Функция 01h проверяет также, не нажимал ли пользователь в ходе работы программы комбинацию клавиш Ctrl+C (или Ctrl+Break).

В этом случае управление передается на подпрограмму обра­ботки Ctrl+C, которая обычно прекращает выполнение программы пользователя.

Если на клавиатуре была нажата одна из клавиш, которым не соответствует никакой код ASCII (будем называть такие клавиши несимвольными; к ним относятся, например, Home, Ins, Page Up, F1, F10, стрелка) или комбинация из клавиши Alt, Ctrl, Shift с дру­гой клавишей, то функция 01h возвращает в регистре AL значение 0. В этих случаях следует еще раз вызвать ту же функцию, тогда будет выдан так называемый расширенный код данной клавиши или комбинации, согласно специальной таблице расширенных кодов.

Функция 08h работает аналогично 01h, за исключением того, что не выполняется эхо-отображение введенного символа.

Функция 07h работает аналогично 01h, за исключением того, что не выполняется эхо-отображение и не проверяется нажатие Ctrl+C.

Функция 06h может выполнять как ввод с клавиатуры, так и вывод на экран. Если в момент вызова регистр DL содержит зна­чение 0FFh, то данная функция выполняет ввод без ожидания. Это означает следующее. Если буфер клавиатуры содержит какие-либо символы (т.е. клавиши ранее нажимались), то флаг нуля ZF сбра­сывается в 0, а символ из буфера заносится в AL. Если же буфер пуст (нажатий не было), то устанавливается ZF=1, при этом значе­ние в AL не играет роли. Таким образом, эта функция не ждет, пока будет нажата клавиша, а сразу выдает какой-то результат.

Функция 06h не выполняет эхо-отображения и не проверяет нажатие Ctrl+C.

Функция 0Bh не выполняет ввод символа, а только проверяет, есть ли символы в буфере. Если есть, то устанавливается AL=0ffh, если нет, то – AL=00h. Выполняется также проверка на Ctrl+C.

Функция 0Ah выполняет буферизованный ввод строки с кла­виатуры. При этом символы вводятся один за другим, как при многократном применении функции 01h до тех пор, пока не будет введен код 0Dh (код клавиши Enter), завершающий строку. В ходе ввода строки пользователь может редактировать строку и, в част­ности, использовать забой. При вводе выполняется также про­верка на Ctrl+C.

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

Например. Пусть требуется ввести строку длиной не более 10 символов. При этом в сегменте данных можно описать буфер, например таким образом:

BUFFER db 11 ;Первый байт буфера
ENTERED db (?) ;Число введенных символов
STRING db 11 dup (?) ;Введенные символы

Сам же ввод выполняется командами:

lea DX,BUFFER ;Адрес буфера — в DX
mov AH,0Ah ;Номер функции — в AH
int 21h ;Вызов функции

Пусть при этом пользователь набрал 6 символов: «Hallo!» и нажал клавишу Enter. После вызова функции в байте entered будет число 6, в первых 6 байтах массива STRING будут коды введенных символов, в седьмом байте – код 0Dh, а оставшиеся 4 байта будут иметь неопределенные значения.

Функция 0Ch вначале очищает буфер клавиатуры (т.е. «забывает» предыдущие нажатия клавиш), а потом выполняет любую из функций 01h, 06h, 07h, 08h или 0Ah. Номер этой функ­ции задается в регистре AL. Если задано иное число, то выполня­ется только очистка буфера. Кроме того, всегда выполняется проверка на Ctrl+C.

Функции DOS для вывода на экран

Имеются две функции для вывода на экран: одна функция для вывода одного символа, а другая – для вывода строки символов.

Функция 02h выдает в текущую позицию экрана символ, код которого содержится в регистре DL. Известно, что для машин типа IBM PC почти каждому из 256 возможных кодов соответствует какое-то графическое изображение, однако при выводе по функ­ции 02h некоторые коды не выдаются на экран, а служат управ­ляющими. В частности:

· 0Dh (CR) – перевод курсора в начало текущей строки;

· 0Ah (LF) – перевод курсора вниз на 1 строку;

· 08h (BS) – перевод курсора влево на 1 позицию;

· 07h (BEL) – звонок.

Функция 09h выдает, начиная с текущей позиции экрана, строку символов, адрес начала которой (в сегменте данных) содержится в регистре DX. Строка может содержать управляющие символы (CR, LF и т.п.) и, таким образом, на экране занимать несколько строк.

Концом выдаваемой строки служит символ «$» (код 24h).

Например. Чтобы вывести на экран с новой строки текст: «Привет! Вот как надо выдавать текст на экран!» – и затем пере­вести курсор в следующую строку, следует в сегменте данных описать строку:

PRIVET db 0Dh,0Ah
db «Привет! Вот как надо выдавать текст на экран!»
db 0Dh,0Ah,»$»

а в сегменте команд записать команды:

lea DX,PRIVET ; Адрес строки — в DX
mov AH,09h ; Номер функции — в AH
int 21h ; Вызов функции

ПРИМЕР ВЫПОЛНЕНИЯ РАБОТЫ

Ввести строку с клавиатуры, посчитать количества всех деся­тичных цифр во введенной строке, посчитанные значения вывести на терминал.

Текст программы:

 

model SMALL

stack 100h

 

dataseg

AskCont db 0Ah,0Dh

db ‘Завершить работу — Esc, продолжить — ЛЮБАЯ ÊËÀÂÈØÀ’

db ‘$’

Ask db 0Ah,0Dh,’Введите строку:’,’$’

COUNT db 10 dup( ? ) ; счетчики количества цифр

CIFR db ‘0123456789ABCDEF’ ; таблица преобразования

; шестн.цифр для вывода

INPSTR db 80, ?, 82 dup( ? ) ; буфер ввода

OUTSTR db 0Dh,0Ah, ?, ‘ ‘, ?, ?, ‘$’ ; буфер вывода

 

codeseg

startupcode

 

BEGIN:

;Ввод строки

lea DX, Ask

mov AH, 09h

int 21h

lea DX, INPSTR

mov AH, 0Ah

int 21h

 

;Обработка

xor AX, AX

lea BX, INPSTR+2 ;адрес начала введенной строки

xor CX, CX

mov CL, INPSTR+1 ;кол-во введенных символов строки

BB:

mov AL, [BX] ;очередной символ строки

cmp AL, ‘0’ ;код символа меньше, чем код нуля ?

jb NC ;да, т. е. не цифра

cmp AL, ‘9’ ;код символа больше, чем код девятки ?

ja NC ;да, т.е. не цифра

;символ — десятичная цифра

sub AL, ‘0’ ;получаем дв. значение цифры, т.е.

mov SI, AX ; индекс в массиве счетчиков COUNT

inc COUNT[SI] ;увеличиваем соответств. счетчик

NC: inc BX ;получить очередной символ строки

loop BB

 

;Вывод результатов

lea DX, OUTSTR

xor SI, SI ;Счетчик цифр

OO: xor AX, AX

mov AL, ‘0’

add AX, SI ;ASCII-код очередной цифры в SI

mov OUTSTR+2, AL ; в буфер вывода

mov AL, COUNT[SI] ;AL<-значение счетчика

; очередной цифры

mov CL, 4 ;получаем

shr AL, CL ; в DI

mov DI, AX ; значение старшей шестн. цифры

mov AL, CIFR[DI] ; счетчика преобразуем в ASCII-код

mov OUTSTR+4, AL ;пересылаем в буфер вывода

mov AL, COUNT[SI] ;AL<-знач. счетчика очередн. цифры

and AL, 0Fh ;Получаем в DI значение

mov DI, AX ; младшей шестн. цифры счетчика

mov AL, CIFR[DI] ; преобразуем ASCII-код

mov OUTSTR+5, AL ; пересылаем в буфер вывода

mov AH, 09h ;Вывод сформированной в буфере

int 21h ; строки

inc SI ;Счетчик очередной цифры

cmp SI, 10

jl OO

 

;Запрос на продолжение работы

lea DX, AskCont

mov AH, 09h

int 21h

mov AH, 08h

int 21h

cmp AL, 27

je QUIT

jmp BEGIN

 

;Конец работы

QUIT: exitcode 0

end

ВАРИАНТЫ ЗАДАНИЙ

1. Ввести с клавиатуры строку. Сжать строку, т.е. удалить про­белы и табуляции. Вывести результаты на экран.

2. Ввести с клавиатуры строку. Преобразовать все малые буквы в большие. Вывести результаты на экран.

3. Ввести с клавиатуры строку. Посчитать количество слов в строке. Подумать, что является разделителем слов. Вывести ре­зультаты на экран.

4. Ввести с клавиатуры строку. Ввести с клавиатуры коротенькую строку – шаблон. Найти шаблон во введенной строке. Вывести на экран «ДА», если шаблон есть, и «НЕТ», если его нет.

5. Ввести с клавиатуры две строки. Сравнить их. Вывести на эк­ран номер позиции, в которой строки различаются.

6. Ввести с клавиатуры строку. Если она длиннее некоторой величины, то обрезать, если короче – растянуть, вставив нужное число пробелов между словами. Вывести результаты на экран.

7. Ввести с клавиатуры строку, состоящую из нескольких слов. Вывести каждое слово на экран в отдельной строке, т.е. выдать слова в столбик.

8. Ввести с клавиатуры строку. Переставить в ней символы, поменяв местами первый с последним, второй с предпоследним и т.д. Вывести результаты на экран.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Что такое программное прерывание?

2. Какие возможности работы с клавиатурой имеются у программиста?

3. Чем отличаются друг от друга различные функции DOS, выполняющие ввод с клавиатуры?

4. Что такое расширенный код клавиатуры?

5. Можно ли выдать на экран текст «$1.00 = 25.00 rub.», используя функцию DOS 09h?

6. Какие режимы адресации удобно использовать при работе с одномерными массивами ?

7. Что означают выражения в поле операндов в строках примера:
lea BX, INSTR+2
mov OUTSTR+3, AL ?

8. Как выделить младшую тетраду байта ?

9. Как выделить старшую тетраду байта ?

10. В чем отличие команд
lea BX, STR
mov BX, offset STR ?


Лабораторная работа

 

 

ÄÅÑßÒÈ×ÍÀß ÀÐÈÔÌÅÒÈÊÀ

ЦЕЛЬ РАБОТЫ

Цель настоящей работы – знакомство с форматами представле­ния десятичных чисел, упакованным и неупакованным BCD-фор­матами, освоение команд десятичной коррекции.

ОСНОВНЫЕ СВЕДЕНИЯ


Рекомендуемые страницы:

Прерывание — Настройка BIOS

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

 

Прерывание (interrupt, INT) – это приостановка центральным процессором выполнения приоритетной программы для обработки события, которое поступило от одного из устройств.

 

Механизм прерываний реализован следующим образом:

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

 

Контроллер прерываний (Programmable Interrupt Controller, PIC) – это микросхема (или встроенный в процессор модуль), которая выполняет обработку запросов на прерывание от различных устройств.

 

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

 

Классификация прерываний.

 

1. Немаскируемые прерывания (Non-Maskable Interrupt, NMI). Прерывания с высшим приоритетом. Прерывания данного типа обрабатываются в случаях возникновения аварийных ситуаций, вызванных ошибками в работе памяти или других устройств.

 

2. Маскируемые (аппаратные) прерывания. В эту группу относят прерывания от периферийных устройств. Обрабатываются контроллером прерываний. Стандартный контроллер прерываний позволяет обращаться к 16 прерываниям от различных устройств. Сегодня имеется возможность использовать расширенный контроллер прерываний APIC.

 

APIC (Advanced Programmable Interrupt Controller) – расширенный программируемый контроллер прерываний, позволяющий использовать 24 аппаратных прерываний вместо 16.

 

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

 

Аппаратные прерывания и зарезервированные за ними устройства

 

Номер

Прерывания

Устройство

0

Системный таймер

1

Клавиатура

2

Контроллер прерываний

3

Порт СОМ1

4

Порт СОМ2

5

Нет

6

Контроллер дисковода для дискет

7

Порт LPT

8

Часы реального времени RTC

9

Нет

10

Нет

11

Нет

12

Мышь PS/2

13

Математический сопроцессор

14

Первичный канал контроллера IDE

15

Вторичный канал контроллера IDE

 

3. Программные прерывания. Это прерывание, которое может осуществить программа с помощью специальной инструкции. Для обработки программных прерываний не используется контроллер прерываний (они реализуются программным способом).

Опции BIOS Setup для настройки прериваний находятся здесь.


Еще по настройке БИОС (БИОЗ) плат:

  • PCI Express, (или PCIe, или PCI-E) – это компьютерная шина расшир…

  • PCI (Peripheral Component Interconnect) – это компьютерная шина в…

  • FSB (Front Side Bus, системная шина) – это шина (набор сигнальных…

  • Чипсет (chipset) – это набор микросхем (размещенных на системной …

  • Центральный процессор (ЦП, CPU) – это микросхема, которая явля…

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

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

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

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

Каждому компоненту компьютера, которому может потребоваться запросить внимание процессора, выделяется особый номер прерывания. Например, клавиатура имеет свой номер прерывания, поэтому при нажатии клавиши процессор «узнает» об этом. Номера прерываний имеют также дисковые накопители и принтеры. Накопители на дисках с помощью прерываний сообщают об окончании запрошенной программной операции, а принтеры сигнализируют об отсутствии бумаги или о готовности печатать следующий символ.

В IBM PC-совместимых компьютерах имеется два вида прерываний: аппаратные (Hardware interrupts) и программные (Software interrupts). К аппаратным относятся, в первую очередь, прерывания, встроенные в процессор — прерывания при делении на ноль, прерывания при аварии питания и т. п. К аппаратным также относятся прерывания, с помощью которых процессору сообщается об аппаратных событиях, например, уже упомянутых отсутствии бумаги в принтере или окончании дисковой операции.

С помощью прерываний прикладные программы могут выполнять операции, запрограммированные в операционной системе, ROM BIOS или в других сервисных программах. Отметим, что аппаратное прерывание может получить управление и при выполнении программного прерывания. Программные прерывания действуют практически так же, как и аппаратные, и отличаются только источником прерывания.

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

Для простой и эффективной локализации процедуры обслуживания прерываний служит таблица векторов прерываний, содержащаяся в первых ячейках памяти компьютера. Вектор — это полный адрес памяти (4 байта) той процедуры, которая вызывается при появлении запроса на прерывание. Таким образом, в таблице векторов прерываний в ячейках памяти с 0 по 3 находится адрес программы обработки прерывания с номером 0, в ячейках памяти с 4 по 7 — адрес программы обработки с номером I и т. д.

В IBM PC-совместимых компьютерах управление аппаратными прерываниями осуществляется специальными микросхемами- контроллерами прерываний. Как уже отмечалось, на современных материнских платах контроллеры прерываний интегрированы в микросхему контроллера периферии Chipset.

В PC XT с восьмиразрядной шиной ISA имелось только 8 внешних аппаратных прерываний. В PC АТ с процессором 80286 количество линий прерываний было увеличено вдвое благодаря использованию уже двух контроллеров прерываний.

Каждый из контроллеров имеет по 8 входных линий для приема запросов на прерывание. Линии запроса на прерывание называются IRQ (Interrupt-Requests). Прерывания, используемые вторым контроллером, подаются на неиспользованный вход IRQ 2 первого (рис. 5.15).

Рис. 5.15. Назначение аппаратных прерываний Каждая линия имеет свой приоритет. Наивысший приоритет соответствует линии IRQ 0. Отметим, что контроллеры прерываний включены таким образом, что линии IRQ 8-IRQ 15 имеют приоритет ниже приоритета линии IRQ 2, но выше IRQ 3. Каждой линии IRQ соответствует вектор прерываний, указывающий местонахождение процедуры обслуживания запроса на прерывание в ROM BIOS. Линиям IRQ 1-IRQ 7 соответствуют векторы прерываний от 8Н до 0FH, а линиям IRQ 8-IRQ 15 — векторы от 70Н до 77Н.

Часть линий прерываний резервируется системой, а часть может быть предоставлена для использования дополнительным оборудованием, необходимым пользователю. Так, например, IRQ 13 отводится для математического сопроцессора и оно не может быть использовано другим устройством, даже если математический сопроцессор не установлен. Обычно для IBM РС-со-вместимых компьютеров свободны IRQ 3, IRQ 5, IRQ 7, IRQ 10, IRQ 11 и IRQ 12. Стандартное распределение аппаратных прерываний приведено в табл. 5.8.

Таблица 5.8. Стандартное распределение аппаратных прерываний

IRQ

Назначение

Тип адаптера

00

Прерывание от таймера

01

Прерывание от клавиатуры

02

Связь со вторым контроллером прерывания (каскадное прерывание)

03

COM2, COM4

8- или 16-разрядный

04

СОМ1, COM3

8- или 16-разрядный

05

LPT2 или звуковая карта

8- или 16-разрядный

06

Контроллер дисковода

8- или 16-разрядный

07

LPT1

8- или 16-разрядный

08

Текущее время

09

Свободен или сетевая карта

8- или 16-разрядный

10

Свободен

16-разрядный

11

Свободен, SCSI адаптер или поддержка IRQ для управления PCI

16-разрядный

Таблица 5. 8 (окончание)

IRQ

Назначение

Тип адаптера

12

Свободен и порт мыши Bus Mouse

16-разрядный

13

Сопроцессор

14

Первичный IDE (контроллер винчестера)

16-разрядный

15

Вторичный IDE (контроллер винчестера)

16-разрядный

⇐Системные ресурсы | Аппаратные средства PC | Прямой доступ к памяти⇒

Мультипрограммирование на основе прерываний. — КиберПедия

 

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

 

В зависимости от источника прерывания делятся на три больших класса:

— внешние;

— внутренние;

— программные.

 

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



 

Прерываниям приписывается приоритет, с помощью которого они ранжируются по степени важности и срочности. О прерываниях, имеющих одинаковое значение приоритета, говорят, что они относятся к одному уровню приоритета прерываний.

 

Прерывания обычно обрабатываются модулями операционной системы, так как действия, выполняемые по прерыванию, относятся к управлению разделяемыми ресурсами вычислительной системы — принтером, диском, таймером, процессором и т. п. Процедуры, вызываемые по прерываниям, обычно называют обработчиками прерываний, или процедурами обслуживания прерываний. Аппаратные прерывания обрабатываются драйверами соответствующих внешних устройств, исключения — специальными модулями ядра, а программные прерывания — процедурами ОС, обслуживающими системные вызовы. Кроме этих модулей в операционной системе может находиться так называемый диспетчер прерываний, который координирует работу отдельных обработчиков прерываний.

 

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



 

Устройствам, которые используют векторные прерывания, назначается вектор прерываний. Он представляет собой электрический сигнал, выставляемый на соответствующие шины процессора и несущий в себе информацию об определенном, закрепленном за данным устройством номере, который идентифицирует соответствующий обработчик прерываний. Этот вектор может быть фиксированным, конфигурируемым или программируемым. ОС может предусматривать процедуру регистрации вектора обработки прерываний для определенного устройства, которая связывает некоторую подпрограмму обработки прерываний с определенным вектором. При получении сигнала запроса прерывания процессор выполняет специальный цикл подтверждения прерывания, в котором устройство должно идентифицировать себя. В течение этого цикла устройство отвечает, выставляя на шину вектор прерываний. Затем процессор использует этот вектор для нахождения обработчика данного прерывания. При использовании опрашиваемых прерываний процессор получает от запросившего прерывание устройства только информацию об уровне приоритета прерывания. С каждым уровнем прерываний может быть связано несколько устройств и соответственно несколько программ — обработчиков прерываний. При возникновении прерывания процессор должен определить, какое устройство из тех, которые связаны с данным уровнем прерываний, действительно запросило прерывание. Это достигается вызовом всех обработчиков прерываний для данного уровня приоритета, пока один из обработчиков не подтвердит, что прерывание пришло от обслуживаемого им устройства. Если же с каждым уровнем прерываний связано только одно устройство, то определение нужной программы обработки прерывания происходит немедленно, как и при векторном прерывании. Механизм прерываний некоторой аппаратной платформы может сочетать векторный и опрашиваемый типы прерываний.

 

Механизм прерываний чаще всего поддерживает приоритезацию и маскирование прерываний. Приоритезация означает, что все источники прерываний делятся на классы и каждому классу назначается свой уровень приоритета запроса на прерывание. Приоритеты могут обслуживаться как относительные и абсолютные. Обслуживание запросов прерываний по схеме с относительными приоритетами заключается в том, что при одновременном поступлении запросов прерываний из разных классов выбирается запрос, имеющий высший приоритет. Однако в дальнейшем при обслуживании этого запроса процедура обработки прерывания уже не откладывается даже в том случае, когда появляются более приоритетные запросы — решение о выборе нового запроса принимается только в момент завершения обслуживания очередного прерывания. Если же более приоритетным прерываниям разрешается приостанавливать работу процедур обслуживания менее приоритетных прерываний, то это означает, что работает схема приоритезации с абсолютными приоритетами.

 

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

 

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

 

Обобщенно последовательность действий аппаратных и программных средств по обработке прерывания можно описать следующим образом:

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

2. Автоматически сохраняется некоторая часть контекста прерванного потока, которая позволит ядру возобновить исполнение потока процесса после обработки прерывания. В это подмножество обычно включаются значения счетчика команд, слова состояния машины, хранящего признаки основных режимов работы процессора (пример такого слова — регистр EFLA6S в Intel Pentium), а также нескольких регистров общего назначения, которые требуются программе обработки прерывания. Может быть сохранен и полный контекст процесса, если ОС обслуживает данное прерывание со сменой процесса. Однако в общем случае это не обязательно, часто обработка прерываний выполняется без вытеснения текущего процесса.

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

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

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

 

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

 

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

 

 

17 Синхронизация процессов и потоков. Цели и средства синхронизации. Гонки, примеры. Критическая секция. Семафоры. Реализации семафоров.

 

Существует достаточно обширный класс средств операционной системы, с помощью которых обеспечивается взаимная синхронизация процессов и потоков. Потребность в синхронизации потоков возникает только в мультипрограммной операционной системе и связана с совместным использованием аппаратных и информационных ресурсов вычислительной системы. Синхронизация необходима для исключения гонок и тупиков при обмене данными между потоками, разделении данных, при доступе к процессору и устройствам ввода-вывода. Во многих ОС эти средства называются средствами межпроцессного взаимодействия — Inter Process Communications (IPC), что отражает историческую первичность понятия «процесс» по отношению к понятию «поток». Обычно к средствам IPC относят не только средства межпроцессной синхронизации, но и средства межпроцессного обмена данными.

 

Выполнение потока в мультипрограммной среде всегда имеет асинхронный характер. Очень сложно с полной определенностью сказать, на каком этапе выполнения будет находиться процесс в определенный момент времени. Даже в однопрограммном режиме не всегда можно точно оценить время выполнения задачи. Это время во многих случаях существенно зависит от значения исходных данных, которые влияют на количество циклов, направления разветвления программы, время выполнения операций ввода-вывода и т. п. Так как исходные данные в разные моменты запуска задачи могут быть разными, то и время выполнения отдельных этапов и задачи в целом является весьма неопределенной величиной. Еще более неопределенным является время выполнения программы в мультипрограммной системе. Моменты прерывания потоков, время нахождения их в очередях к разделяемым ресурсам, порядок выбора потоков для выполнения — все эти события являются результатом стечения многих обстоятельств и могут быть интерпретированы как случайные. В лучшем случае можно оценить вероятностные характеристики вычислительного процесса, например вероятность его завершения за данный период времени.

 

Любое взаимодействие процессов или потоков связано с их синхронизацией, которая заключается в согласовании их скоростей путем приостановки потока до наступления некоторого события и последующей его активизации при наступлении этого события. Синхронизация лежит в основе любого взаимодействия потоков, связано ли это взаимодействие с разделением ресурсов или с обменом данными. Например, поток-получатель должен обращаться за данными только после того, как они помещены в буфер потоком-отправителем. Если же поток-получатель обратился к данным до момента их поступления в буфер, то он должен быть приостановлен. При совместном использовании аппаратных ресурсов синхронизация также совершенно необходима. Когда, например, активному потоку требуется доступ к последовательному порту, а с этим портом в монопольном режиме работает другой поток, находящийся в данный момент в состоянии ожидания, то ОС приостанавливает активный поток и не активизирует его до тех пор, пока нужный ему порт не освободится.

 

Ежесекундно в системе происходят сотни событий, связанных с распределением и освобождением ресурсов, и ОС должна иметь надежные и производительные средства, которые бы позволяли ей синхронизировать потоки с происходящими в системе событиями.

 

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

 

Пренебрежение вопросами синхронизации в многопоточной системе может привести к неправильному решению задачи или даже к краху системы. Пример: два процесса работают с одним и тем же файлом. Первый процесс считывает из него данные и модифицирует их согласно своим функциям, но возникает прерывание, и начинает работать второй процесс, который также считывает те же самые немодифицированные данные из файла и изменяет из соответственно своим функциям. После дело снова берёт первый процесс, который записывает сохранённые в буфере изменённые данные в файл и завершается. А дальше продолжает работать уже второй процесс, который записывает уже свои данные, созданные на основе старых, в этот же файл, перезаписывая данные, записанные первым процессом. Следовательно, работа первого процесса теряется.

 

Важным понятием синхронизации потоков является понятие «критической секции» программы. Критическая секция — это часть программы, результат выполнения которой может непредсказуемо меняться, если переменные, относящиеся к этой части программы, изменяются другими потоками в то время, когда выполнение этой части еще не завершено. Критическая секция всегда определяется по отношению к определенным критическим данным, при несогласованном изменении которых могут возникнуть нежелательные эффекты.

 

Важным понятием синхронизации потоков является понятие «критической секции» программы. Критическая секция — это часть программы, результат выполнения которой может непредсказуемо меняться, если переменные, относящиеся к этой части программы, изменяются другими потоками в то время, когда выполнение этой части еще не завершено. Критическая секция всегда определяется по отношению к определенным критическим данным, при несогласованном изменении которых могут возникнуть нежелательные эффекты.

 

Чтобы исключить эффект гонок по отношению к критическим данным, необходимо обеспечить, чтобы в каждый момент времени в критической секции, связанной с этими данными, находился только один поток. При этом неважно, находится этот поток в активном или в приостановленном состоянии. Этот прием называют взаимным исключением. Операционная система использует разные способы реализации взаимного исключения. Некоторые способы пригодны для взаимного исключения при вхождении в критическую секцию только потоков одного процесса, в то время как другие могут обеспечить взаимное исключение и для потоков разных процессов. Самый простой и в то же время самый неэффективный способ обеспечить взаимное исключение: операционная система позволяет потоку запрещать любые прерывания на время его нахождения в критической секции. Однако этот способ практически не применяется, так как опасно доверять управление системой пользовательскому потоку — он может надолго занять процессор, а при крахе потока в критической секции крах потерпит вся система, потому что прерывания никогда не будут разрешены.

 

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

 

Пусть переменная S представляет собой семафор. Тогда действия V(S) и P(S) определяются следующим образом:

— V(S): переменная S увеличивается на 1 единым действием. Выборка, наращивание и запоминание не могут быть прерваны. К переменной S нет доступа другим потокам во время выполнения этой операции.

— PCS): уменьшение S на 1, если это возможно. Если 5*0 и невозможно уменьшить S, оставаясь в области целых неотрицательных значений, то в этом случае поток, вызывающий операцию Р, ждет, пока это уменьшение станет возможным. Успешная проверка и уменьшение также являются неделимой операцией.

Никакие прерывания во время выполнения примитивов V и Р недопустимы.

 

В частном случае, когда семафор S может принимать только значения 0 и 1, он превращается в блокирующую переменную (двоичный семафор). Операция Р заключает в себе потенциальную возможность перехода потока, который ее выполняет, в состояние ожидания, в то время как операция V может при некоторых обстоятельствах активизировать другой поток, приостановленный операцией Р.

 

Пусть буферный пул состоит из N буферов, каждый из которых может содержать одну запись. В общем случае поток-писатель и поток-читатель могут иметь различные скорости и обращаться к буферному пулу с переменой интенсивностью. Для правильной совместной работы поток-писатель должен приостанавливаться, когда все буферы оказываются занятыми, и активизироваться при освобождении хотя бы одного буфера, а поток-читатель должен приостанавливаться, когда все буферы пусты, и активизироваться при появлении хотя бы одной записи. Введем два семафора: е — число пустых буферов, и f — число заполненных буферов, причем в исходном состоянии е =N, a f =0.


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

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

18 Тупики, примеры. Условия возникновения тупика. Способы решения проблемы тупиков.

 

Пример с семафорами позволяет также проиллюстрировать еще одну проблему синхронизации — взаимные блокировки, называемые также дедлоками (deadlocks), клинчами (clinch), или тупиками. Покажем, что если переставить местами операции Р(е) и Р(b) в потоке-писателе, при некотором стечении обстоятельств эти два потока могут взаимно блокировать друг друга, Итак, пусть поток-писатель начинает свою работу с проверки доступности критической секции — операции Р(b), и пусть он первым войдет в критическую секцию. Выполняя операцию Р(е), он может обнаружить отсутствие свободных буферов и перейти в состояние ожидания. Как уже было показано, из этого состояния его может вывести только поток-читатель, который возьмет очередную запись из буфера. Но поток-читатель не сможет этого сделать, так как для этого ему потребуется войти в критическую секцию, вход в которую заблокирован потоком-писателем. Таким образом, ни один из этих потоков не может завершить начатую работу и возникнет тупиковая ситуация, которая не может разрешиться без внешнего воздействия.

 

Еще один пример тупика. Пусть двум потокам, принадлежащим разным процессам и выполняющимся в режиме мультипрограммирования, для выполнения их работы нужно два ресурса, например принтер и последовательный порт. Такая ситуация может возникнуть, например, во время работы приложения, задачей которого является распечатка информации, поступающей по модемной связи. Поток А запрашивает сначала принтер; а затем порт, а поток В запрашивает устройства в обратном порядке. Предположим, что после того, как ОС назначила принтер потоку А и установила связанную с этим ресурсом блокирующую переменную, поток А был прерван. Управление получил поток В, который сначала выполнил запрос на получение СОМ- порта, затем при выполнении следующей команды был заблокирован, так как принтер оказался уже занятым потоком А. Управление снова получил поток А, который в соответствии со своей программой сделал попытку занять порт и был заблокирован, поскольку порт уже выделен потоку В. В таком положении потоки А и В могут находиться сколь угодно долго. В рассмотренных примерах тупик был образован двумя потоками, но взаимно блокировать друг друга может и большее число потоков.

 

Тупики могут быть предотвращены на стадии написания программ, то есть программы должны быть написаны таким образом, чтобы тупик не мог возникнуть при любом соотношении взаимных скоростей потоков. Другой, более гибкий подход к предотвращению тупиков заключается в том, что ОС каждый раз при запуске задач анализирует их потребности в ресурсах и определяет, может ли в данной мультипрограммной смеси возникнуть тупик. Если да, то запуск новой задачи временно откладывается. ОС может также использовать определенные правила при назначении ресурсов потокам. В тех же случаях, когда тупиковую ситуацию не удалось предотвратить, важно быстро и точно ее распознать, поскольку блокированные потоки не выполняют никакой полезной работы. Если тупиковая ситуация образована множеством потоков, занимающих массу ресурсов, распознавание тупика является нетривиальной задачей. Существуют формальные, программно реализованные методы распознавания тупиков, основанные на ведении таблиц распределения ресурсов и таблиц запросов к занятым ресурсам. Анализ этих таблиц позволяет обнаружить взаимные блокировки. Если же тупиковая ситуация возникла, то можно снимать с выполнения не все заблокированные потоки, а только часть из них, освободив ресурсы, можно вернуть некоторые потоки в область подкачки, можно совершить «откат» некоторых потоков до так называемой контрольной точки, в которой запоминается вся информация, необходимая для восстановления выполнения программы с данного места. Контрольные точки расставляются в программе в тех местах, после которых возможно возникновение тупика.

19 (Столлингс) Типы планирования. Критерии эффективности краткосрочного планирования.

 

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

 

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

 

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

 

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

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

— прерывание таймера;

— прерывания ввода-вывода;

— вызовы ОС;

— сигналы.

 

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

 

Пользовательские, связанные с производительностью:

— Время оборота. Интервал времени между подачей процесса и его завершением. Включает время выполнения, а также время, затраченное на ожидание ресурсов, в том числе и процессора. Критерий вполне применим для пакетных заданий.

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

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

Пользовательские, иные:

— Предсказуемость. Данное задание должно выполняться примерно за одно и то же количество времени и с одной и той же стоимостью, независимо от загрузки системы. Большие вариации времени исполнения или времени отклика дезориентируют пользователей. Это явление может сигнализировать о больших колебаниях загрузки или о необходимости дополнительной настройки системы для устранения нестабильности ее работы.

Системные, связанные с производительностью:

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

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

Системные, иные:

— Беспристрастность. При отсутствии дополнительных указаний от пользователя или системы все процессы должны рассматриваться как равнозначные и ни один процесс не должен подвергнуться голоданию.

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

— Баланс ресурсов. Стратегия планирования должна поддерживать занятость системных ресурсов. Предпочтение должно быть отдано процессу, который недостаточно использует важные ресурсы. Этот критерий включает использование долгосрочного и среднесрочного планирования.

 

20 (Столлингс) Параметры, учитываемые при краткосрочном планировании в однопроцессорных системах, обозначения. FCFS, RR, SPN, SRT, HRRN.

 

FCFS (first-come-first-served) — «первым пришёл — первым вышел», схема строгой очерёдности. Как только процесс становится готовым к выполнению, он присоединяется к очереди готовых процессов. При прекращении выполнения текущего процесса для выполнения выбирается процесс, который находился в очереди дольше других.

 

RR (round robin) — стратегия кругового (карусельного) планирования, квантование времени. Таймер генерирует прерывания через определённые интервалы времени. При каждом прерывании исполняющийся в настоящий момент процесс помещается в очередь готовых процессов, и начинает выполняться очередной процесс, выбираемый в соответствии со стратегией FCFS.

 

SPN (shortest process next) — стратегия выбора самого короткого процесса. Это невытесняющая стратегия, при которой для выполнения выбирается процесс с наименьшим ожидаемым временем исполнения.

 

SRT (shortest remaining time) — стратегия наименьшего остающегося времени. Вытесняющая версия стратегии SPN. В этом случае планировщик выбирает процесс с наименьшим ожидаемым временем до окончания процесса. При присоединении нового процесса к очереди готовых к исполнению процессов может оказаться, что его оставшееся время в действительности меньше, чем оставшееся время выполняемого в настоящий момент процесса. Планировщик, соответственно, может применить вытеснение при готовности нового процесса. Как и при использовании SPN, планировщик для корректной работы функции выбора должен оценивать время выполнения процесса; в этом случае также имеется риск голодания длинных процессов.

 

HRRN (highest response ratio next) — стратегия планирования наивысшего отношения отклика. При завершении или блокировании текущего процесса для выполнения из очереди готовых процессов выбирается тот, который имеет наибольшее значение отношения отклика. Такой подход учитывает возраст процесса. Требуется оценка времени для определения максимального значения отношения отклика.

Столлингс) Планирование в многопроцессорных системах.

 

 

IRQ и обслуживающий их контроллер прерываний

Думаю, многие любознательные пользователи, наверняка не раз встречали такое сокращение, как IRQ. Его можно встретить, например, если вы любите заглядывать в программу «Менеджер устройств» в Windows. Если вы выберете любое устройство, к примеру, клавиатуру, выберете при помощи правой кнопки мыши пункт меню «Свойства», и в появившемся окне сделаете активной закладку «Ресурсы», то в списке ресурсов вы увидите надпись IRQ 01.

Содержание статьи

Для чего нужны IRQ

Что же такое IRQ и для чего оно нужно?

Аббревиатура IRQ расшифровывается как Interrupt ReQuest (запрос на прерывание). Для того, чтобы понять, для чего оно нужно, следует вспомнить подробности организации работы персонального компьютера.

Кровеносной системой компьютера, по которой обмениваются информацией процессор и прочие устройства, является системная шина. Но как вообще процессор способен отличить запросы на обработку информации, поступающие по шине от различных устройств?

Для этого и существует система аппаратных прерываний (IRQ). Каждое прерывание имеет определенный номер (нумерация начинается с 0) и закреплено за определенным устройством. Так, за клавиатурой закреплено прерывание под номером 1, отсюда и обозначение IRQ 01.

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

Обслуживает обработку IRQ специальный чип, который носит название контроллера прерываний. Как правило, эта микросхема является частью центрального процессора, а иногда выделяется в отдельный чип на материнской плате. Для обработки каждого прерывания в BIOS существует специальная микропрограмма, называемая обработчиком прерывания. Адреса всех обработчиков хранятся в так называемой таблице векторов прерываний.

Раньше, в первых компьютерах семейства XT была распространена 8-разрядная шина ISA, поэтому всего устройствам было доступно 8 прерываний. С появлением 16-разрядной шины ISA их количество увеличилось до 16.

Настройка  Interrupt ReQuest

Надо сказать, что прерывания, закрепленные за некоторыми устройствами, не является фиксированными и их можно изменить программно. Например, IRQ стандартно использующееся последовательным портом Com 2, может использовать и устанавливаемый в слот расширения модем. В современных компьютерах и операционных системах, поддерживающих стандарт PnP и работающих под управлением ОС Windows, значения IRQ для устройств, подключаемых в слоты шины, подбираются автоматически.

Но не все было так просто в прежние времена, когда пользователь должен был вручную устанавливать значение IRQ во многих программах, работавших под операционной системой DOS. Например, при установке в систему звуковой карты, пользователю требовалось выбрать свободное прерывание из очень небольшого числа доступных (как правило, это было IRQ 5) и указать это значение  в запускаемой программе, например, в какой-нибудь игре.

Во многих BIOS имеется возможность поменять стандартные значения IRQ в программе Setup. Обычно эта опция располагается в разделах IRQ Resources или PCI/PNP Configuration.

Установка для устройства значения IRQ, равного значению IRQ, уже занятого каким-либо устройством в большинстве случаев приводит к неработоспособности одного из этих устройств или сразу обоих, а иногда чревато и зависанием компьютера.

В более современной шине PCI система управления прерываниями была кардинально изменена, а возможности управления прерываниями были расширены. Благодаря технологии IRQ Sharing, а также технологии ACPI стало возможным размещение нескольких устройств на одном канале прерывания, а у внешних устройств, подключаемых в слоты PCI, появилась возможность автоматического распределения ресурсов между собой.

Кроме того, в современных компьютерах обычно используется расширенный программируемый контроллер прерываний (APIC, Advanced Programmable Interrupt Controller), поддерживающий 24 канала Interrupt ReQuest. Расширенный контроллер прерываний выполнен в виде двух микросхем, одна из которых расположена в самом процессоре, а другая на материнской плате. Этот контроллер прерываний впервые появился в системах на основе процессоров Pentium. Однако при этом была оставлена поддержка старой системы прерываний в целях совместимости. Очередным шагом в развитии принципов обработки прерываний является технология Message Signaled Interrupts, поддержка которой появилась в линейке ОС Windows, начиная с Windows Vista.

Не следует путать аппаратные прерывания IRQ c программными прерываниями BIOS, о которых речь пойдет в отдельной статье. Программные прерывания BIOS, как правило, используются для организации работы программного обеспечения с устройствами ввода-вывода и обозначаются при помощи сокращения INT. Многие из них аналогичны по своим функциям аппаратным IRQ, но имеют при этом другие номера.

Список номеров Interrupt ReQuest в стандартной схеме для 16-битной шины ISA:

  1. Системный таймер
  2. Клавиатура
  3. Дополнительный контроллер прерываний (для совместимости с 8-битной шиной)
  4. Порты Com 1 и 3
  5. Порты Com 2 и 4
  6. Свободно (в 8-битной шине — контроллер жесткого диска)
  7. Контроллер гибких дисков (FDD)
  8. Параллельный порт LPT
  9. Часы реального времени CMOS
  10. Совмещено с IRQ 2
  11. Свободно
  12. Свободно
  13. Порт мыши PS/2
  14. Сопроцессор (в настоящее время практически не используется)
  15. Первый контроллер IDE
  16. Второй контроллер IDE

Список дополнительных номеров IRQ, которые использует расширенный контроллер прерываний APIC:

  1. Контроллер USB
  2. Интегрированная звуковая подсистема (AC’97 или HDA)
  3. Контроллер USB
  4. Контроллер USB
  5. Встроенная сетевая карта
  6. Свободно
  7. Свободно
  8. Контроллер USB 2. 0

Соответствие номеров IRQ и прерываний BIOS:

Таблица соотношения аппаратных IRQ и программных INT BIOS

Заключение

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

Порекомендуйте Друзьям статью:

Определение программного прерывания Linux Information Project (LINFO)

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

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

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

Пользовательский режим — это один из двух различных режимов выполнения для ЦП в Linux. Это непривилегированный режим , в котором начинается каждый процесс. Непривилегированный означает, что процессам в этом режиме запрещен доступ к тем частям памяти, которые были выделены другим программам или ядру.

Еще одно отличие программных прерываний от аппаратных состоит в том, что они запускаются не сразу, а, скорее, только в определенное время; то есть они начинаются только после аппаратного прерывания или системного вызова .Как и в случае с аппаратными прерываниями, количество типов программных прерываний ограничено.

Системный вызов — это запрос в Unix-подобной операционной системе, сделанный через программное прерывание активным процессом для службы, выполняемой ядром, такой как ввод / вывод (т. Е. Любое перемещение информации в или из комбинации ЦП и основную память) или создание процесса (т. е. создание нового процесса). Активный процесс — это процесс, который в данный момент выполняется в ЦП, в отличие от процессов, ожидающих своих следующих очередей в ЦП.

Создано 25 апреля 2006 г.
Copyright © 2006 The Linux Information Project. Все права защищены.

Разница между аппаратным прерыванием и программным прерыванием

Разница между аппаратным прерыванием и программным прерыванием

Необходимое условие — прерывания в микропроцессоре 8085
1. Аппаратное прерывание:
Аппаратное прерывание вызвано каким-либо аппаратным устройством, таким как запрос на запуск ввода-вывода, аппаратный сбой или что-то подобное.Аппаратные прерывания были введены как способ избежать траты драгоценного времени процессора на циклы опроса в ожидании внешних событий.

Например, когда операция ввода-вывода завершена, например, чтение некоторых данных в компьютер с ленточного накопителя.

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

Например, вывод на экран, выполнение файла и т. Д.


Разница между аппаратным и программным прерыванием:



SR.NO. Аппаратное прерывание Программное прерывание
1 Аппаратное прерывание — это прерывание, генерируемое внешним устройством или оборудованием. Программное прерывание — это прерывание, которое генерируется любой внутренней системой компьютера.
2 Не увеличивает счетчик программы. Увеличивает счетчик программы.
3 Аппаратное прерывание может быть вызвано каким-либо внешним устройством, например запросом на запуск ввода-вывода или возникновением аппаратного сбоя. Программное прерывание может быть вызвано с помощью инструкции INT.
4 Имеет самый низкий приоритет, чем программные прерывания Имеет наивысший приоритет среди всех прерываний.
5 Аппаратное прерывание запускается внешним оборудованием и считается одним из способов связи с внешними периферийными устройствами, оборудованием. Программное прерывание запускается программным обеспечением и считается одним из способов взаимодействия с ядром или запуска системных вызовов, особенно во время обработки ошибок или исключений.
6 Это асинхронное событие. Это синхронное событие.
7 Аппаратные прерывания можно разделить на два типа: 1.Маскируемое прерывание. 2. Немаскируемое прерывание. Программные прерывания можно разделить на два типа: 1. Нормальные прерывания. 2. Исключение
8 Нажатие клавиш и движения мыши являются примерами аппаратного прерывания. Все системные вызовы являются примерами программных прерываний

Вниманию читателя! Не прекращайте учиться сейчас. Получите все важные концепции теории CS для собеседований SDE с курсом CS Theory Course по приемлемой для студентов цене и будьте готовы к работе в отрасли.

software interrupt — перевод на немецкий — примеры английский

Эти примеры могут содержать грубые слова на основании вашего поиска.

Эти примеры могут содержать разговорные слова, основанные на вашем поиске.

Эти функции копируют значения регистров из регистров inregs в регистры перед выполнением программного прерывания .

Diese Funktionen kopieren Registerwerte von den inregs in die Register bevor Durchführung der Software-Unterbrechung .

Способ по п. 1, в котором одно указанное заранее определенное условие указывает, что указанное программное прерывание (toDSP SWI, fromDSP SWI) доступно для разрешения.

Verfahren nach Anspruch 1, bei dem eine der vorgegebenen Bedingungen angibt, dass die Software-Unterbrechung (toDSP SWI, fromDSP SWI) verfügbar ist, um freigegeben zu werden.

Микропроцессорная система по п. 1, в которой средство управления (206) выполнено с возможностью переключения контекста посредством программного прерывания , или программного прерывания.

Mikroprozessorsystem nach Anspruch 1, wobei das Steuermittel (206) Betriebsfähig ist, eine Kontextumschaltung durch einen Software-Interrupt or eine Software-Falle (программная ловушка) для поддержки.

Функции EMS доступны через программное прерывание 67h.

Первичным интерфейсом к BIOS было программное прерывание 13H, обычно известное как INT 13H, где INT означает прерывание, а 13H — это число 19 в шестнадцатеричной системе счисления.

Die Primärschnittstelle zum BIOS ist die Software-Unterbrechung 13H gewesen, die im Allgemeinen als INTERNES 13H bekannt, in dem INTERNE Standplätze für Unterbrechung und 13H die Nr. 19 in der hexadezimalen Darstellung ist.

Функции копируют текущие значения регистров в outregs, состояние флага переноса в поле x.cflag в outregs и значение регистра флагов 8086 в x.Поле flags в outregs, после программного прерывания возвращается .

Die Funktionen kopieren die gegenwärtigen Registerwerte zu den outregs, fangen Status der tragenmarkierungsfahne zum x.cflag in den outregs auf und der Wert der 8086 Markierungsfahnen registrieren zum x. flags auffangen in den164163 программного обеспечения.

В обеих функциях inregs и outregs могут указывать на одну и ту же структуру, и обе функции возвращают значение AX после завершения программного прерывания .

in den Funktionen können inregs und in den outregs auf die gleiche Struktur zeigen und beide Funktionen giveen den Wert der AXT nach Vollendung der Software-Unterbrechung zurück.

Когда прикладной программе требуются службы NetBIOS, запустите специальное программное прерывание .

Wenn ein Anwendungsprogramm NetBIOS-Dienste benötigt, Suite I einem bestimmten Software-Interrupt laufen.

2. Способ по п.1, в котором устройство контроля времени выполнения имеет первый таймер, который запускается программным прерыванием в первый момент и завершается дополнительным программным прерыванием во второй момент.

Verfahren nach Anspruch 1, wobei die Einrichtung zur Laufzeitüberwachung einen ersten Timer aufweist, der durch einen Software-Interrupt zu dem ersten Zeitpunkt gestartet wird, und durch einen weiteren zur Software-Interrupt Software-Interrupt.

Пункт «chainvec» также определяет доступное программное прерывание .

Этот параметр определяет программное прерывание (вектор), используемое драйвером.

Dieser Parameter Definiert den Softwareinterrupt (Vektor), der von dem Treiber verwende wird.

Первая опция («0x60») устанавливает программное прерывание , (вектор), используемое драйвером.

Die erste Option («0x60»), установленный в Treiber verwendeten Softwareinterrupt (Vektor).

На панели «Прерывания» отображается информация о каждом программном прерывании , в каждом из трех «звонков», а также о том, кто перехватил каждое прерывание.

Im Bedienfeld «Interrupts» нашел Sie Informationen über jeden einzelnen Software- Interrupt auf jedem der drei «Ringe» und darüber, von Welcher Komponente der Interrupt beansprucht wird.

Функция int86x также копирует значения segregs-> ds и segregs-> es в соответствующие регистры перед выполнением программного прерывания .

Die Funktion int86x kopiert auch die segregs-> ds und segregs-> es Werte in die entsprechenden Register, vor der Durchführung der Software, unterbrechen .

Периферийная система управления по п. 3 или 4, отличающаяся тем, что обработка программного прерывания (DlL) промежуточным программным уровнем (L1) включает проверку доступности функции, вызываемой для вызывающего процесса прикладного программного обеспечения. слой.

Verwaltungssystem für Peripheriegeräte nach den Ansprüchen 3 oder 4, dadurch gekennzeichnet, daß die Bearbeitung der logischen Unterbrechung (DIL) durch die logische Zwischenschicht die Verifikation derßufirufirufenfürbarkeit der.

Система периферийного управления по п.2, отличающаяся тем, что этот вызов функции (F (PM1)) выполняется путем отправки уровнем прикладного программного обеспечения (APPL1) программного прерывания (D1L).

Verwaltungssystem für Peripheriegeräte nach Anspruch 2, dadurch gekennzeichnet, daß der Aufruf der Funktion (F (PM 1)) von der logischen Anwendungsschicht (APPLI) mittels Senden einer logischen Unterbrechung. logischen Unterbrechung.

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

Vorrichtung nach Anspruch 23, wobei unterschiedliche в . Программное обеспечение внедрило Interrupt-Vektoren für die Modusumschaltung dem в . .

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

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

Если инструкция по указанному адресу не является циклом, повторяющейся строковой инструкцией, программным прерыванием или подпрограммой, подкоманда p работает так же, как подкоманда t (трассировка).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *