ОС_Методические указания
.pdfРАБОТА 2. ПРЕРЫВАНИЯ. ЗАХВАТЫ. ВЫЗОВ СУПЕРВИЗОРА
Целью данной работы является изучение механизмов взаимодействия программ, отличных от последовательного вызова процедур. Этими механизмами являются прерывания, захваты, обращения к супервизору.
Два фактора оправдывают введение новых механизмов для программирования операционных систем:
асинхронность, т.е. влияние внешних по отношению к текущему состоянию факторов на развитие состояния;
взаимная защита при переходе из одного активного состояния к другому, которое требует более глубокой модификации контекста, чем простой вызов процедуры.
Типичным случаем проблем синхронизации при выполнении программы является органи-
зация ввода и вывода одновременно с выполнением программы. При этом программа должна иметь возможность получать сведения об окончании передачи информации.
2.1. ПРЕРЫВАНИЯ
Определение 2.1
Прерывание представляет собой перестановку контекста процессора, вызванную внешней по отношению к выполняемой инструкции причиной.
Физически прерывание представляется сигналом о прерывании работы, посылаемым процессору. Этот сигнал вызывает изменение состояние указателя, проверяемого в ходе выполнения каждой инструкции. Сигнал может послать другой процессор, устройство ввода-вывода, внешнее устройство или любой внешний физический процесс. Прерывание вынуждает процессор приостановить в ближайшей точке наблюдения выполнение текущей программы и приступить к выполнению другой, специальной программы, называемой программой обработки прерываний или обработчиком прерываний. Обработчик прерываний работает в другом по отношению к прерываемой программе контексте.
Уровни прерывания
Работа процессора может быть прервана по разным причинам, которые приводят к выполнению разных программ прерывания. Поэтому механизм прерывания должен различать эти причины. Для этого используются две основные схемы:
Со всеми прерываниями связаны один указатель и одна программа обработки прерываний. Возможные причины прерываний различаются благодаря дополнительной информации (коду прерывания), содержащейся в слове состояния или в выделенном месте памяти. Задачей программы обработки прерываний является проверка кода прерывания и вызов соответствующей процедуры обработки.
С каждым прерыванием связан свой собственный указатель. В этом случае говорят, что каждой причине соответствует некоторый уровень прерывания. Каждому уровню выделяется своя программа обработки, включаемая автоматически механизмом перестановки контекста.
Приоритет и маскировка прерываний
Когда существует несколько уровней прерывания, может случиться, что два указателя, соответствующие двум разным причинам, будут изменены одновременно. Конфликт разрешается установлением порядка приоритетов между уровнями прерываний.
Иногда может оказаться полезным оградить ряд инструкций от прерываний (например, сами программы прерываний). Это приводит к отсрочке перестановки контекста в связи с приня-
- 11 -
тым сигналом определенного уровня: говорят, что уровень маскируется или подавляется. Демаскировка разрешает перестановку контекста. Маскировка прерываний может быть изменена в результате специального прерывания.
Оснащение прерываний
Для некоторых уровней можно не только отсрочить, но и исключить воздействие сигнала прерывания. Работа протекает в этом случае, как если бы сама причина прерывания была исключена: уровень прерывания называется при этом неоснащенным. Он может быть вновь оснащен, т.е. восстановлен.
2.2. ЗАХВАТЫ
Определение 2.2
Захват сигнализирует об аномалии при выполнении инструкции.
Причинами аномалий могут быть следующие:
неправильные данные, приводящие к нарушению правильного выполнения инструкции (арифметическое переполнение, деление на ноль и т.п.);
попытка выполнения операции, запрещенной защищающим устройством (нарушение защиты памяти, выполнение привилегированной инструкции в исполнительном режиме и т.д.);
невыполнимая инструкция (несуществующий код операции, адрес вне памяти, обращение к устройству, отсутствующему в используемой конфигурации и т.д.).
2.3. ВЫЗОВ СУПЕРВИЗОРА
Определение 2.3
Вызов супервизора представляет собой инструкцию, которая приводит к перестановке контекста процессора. Ее эффект аналогичен вызову процедуры, но модификация контекста при этом оказывается более глубокой.
Функция обращения к супервизору состоит в том, чтобы вызвать из программы пользователя процедуру операционной системы с расширенными правами.
2.4. ПРЕРЫВАНИЯ МИКРОПРОЦЕССОРОВ INTEL 80X86
Семейство микропроцессоров Intel 80x86 поддерживает 256 уровней приоритетных прерываний, вызываемых событиями трех типов:
внешние аппаратные прерывания (прерывания);
внутренние аппаратные прерывания (захваты);
программные прерывания (обращения к супервизору).
Все эти типы прерываний в дальнейшем будем называть просто прерываниями.
Каждому уровню прерывания соответствует своя процедура обработки прерывания, адрес точки входа в которую содержится в так называемой таблице векторов прерываний.
Таблица векторов прерываний
Нижние (с меньшими адресами) 1024 байт системной памяти носят название таблицы векторов прерываний. Каждый 4-байтовый элемент этой таблицы соответствует уровню прерывания (от 0 до FF16) и содержит сегмент и относительный адрес обработчика прерывания данного уровня. Уровни от 0 до 1F16 используются под обработчики захватов, уровни от 2016 до 3F16 - операционной системой MS DOS. Все остальные уровни могут использоваться внешней аппаратурой, системными драйверами и прикладными программами.
- 12 -
Когда контроллер прерывания (или другое устройство) посылает в процессор прерывание, он должен также поместить тип прерывания в виде 8-разрядного двоичного числа (от 0 до FF16) на системную магистраль для передачи в процессор. Процессор, умножив это число на 4, определяет адрес используемого вектора прерывания и вызывает соответствующий обработчик.
2.5. ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
1.Выполните программу, приведенную на следующем листинге. Что изменилось в работе вашего компьютера, почему?
Листинг 2.1
{$M $800,0,0 }
uses Crt,Dos;
var
KbdIntVec:Procedure; {--переменная для
сохранения адреса
старого обработчика
прерывания }
{$F+}
procedure Keyclick; interrupt; {--новый обработчик прерывания}
begin
{ проверяем скан-код клавиши,
поступивший через порт номер $60}
if Port[$60]<$80 then
begin {если скан-код соответствует
нажатию клавиши, то...}
Sound(5000);
Delay(1);
Nosound;
end;
inline ($9C); { PUSHF -- Push flags }
{ вызов стандартного обработчика }
KbdIntVec;
end;
{$F-}
begin
- 13 -
{Сохранить адрес стандартного обработчика } GetIntVec($9,@KbdIntVec);
{Установить новый обработчик }
SetIntVec($9,Addr(Keyclick));
Keep(0); { Завершить, сохранив резидентным }
end.
2.Основываясь на предыдущем задании и используя прерывание от таймера (уровень прерывания 8), создать резидентную программу, выводящую в левом верхнем углу экрана отсчет времени с момента запуска программы в формате чч:мм:сс. Прерывание вызывается таймером приблизительно восемнадцать раз в секунду. Вывод изображения символов на экран рекомендуется производить прямым обращением в видеобуфер по абсолютному адресу $B800:$0 с использованием, например, следующей процедуры:
Листинг 2.2
procedure PutSymbol( nLine {--номер строки},
nCol |
{--номер позиции} |
sym |
:integer; |
{--символ} |
|
const |
:char); |
|
|
bgColor=Blue; |
{--цвет фона} |
fgColor=Yellow; |
{--цвет символа} |
type {одному символу соответствуют в видеобуфере 2 байта}
TPixel=record |
|
symbol:char; |
{--код символа} |
color :byte; |
{--код цвета} |
end; |
|
TScreen=array [1..25,1..80] of TPixel;
{--весь экран}
var
Screen:TScreen absolute $B800:$0;
begin
with Screen[nLine,nCol] do begin {записываем в видеобуфер}
symbol:=sym; color:=$10*bgColor+fgColor;
end;
end;
3.Усовершенствуйте программу из предыдущего задания таким образом, чтобы при нажатии клавиши с символом «*» часы на время замирали и могли продолжить свою работу при последующем нажатии этой же клавиши. Для реализации этой программы необходимо выяснить скан-код клавиши «*», для чего можно воспользоваться программой из задания 1, слегка изменив ее.
-14 -
РАБОТА 3. ПРОГРАММИРОВАНИЕ ВВОДА-ВЫВОДА
Целью данной работы является изучение основных понятий и механизмов организации ввода-вывода данных на периферийные устройства.
Определение 3.1
Вводом-выводом назовем всякую передачу информации от или по направлению к совокупности процессор(ы)-адресуемая память.
Таким образом, операции ввода-вывода включают:
передачу информации между разными уровнями иерархии памяти;
передачу информации от внешнего мира или по направлению к нему (локальные или удаленные периферийные устройства, приемники или передатчики, другие компьютеры и т.д.).
3.1. ОБЩАЯ ОРГАНИЗАЦИЯ ВВОДА-ВЫВОДА
Периферийные устройства. Контроллеры. Каналы
Средство ввода-вывода представляет собой устройство, способное осуществлять передачу информации между процессором или памятью компьютера и внешним носителем информации. Эта передача управляется центральным процессором. В простейшем случае специальная инструкция процессора позволяет передавать информацию между внешним носителем и регистром процессора, который в таком случае оказывается занятым в течение всей передачи. Для более эффективного использования центрального процессора в современных вычислительных системах устройства ввода-вывода получили максимальную автономию, им стали передаваться все более сложные функции связи и управления, сохраняя за центральным процессором лишь инициативу запуска и контроля операций. Из соображений экономии периферийные органы были отделены от устройств управления, чтобы получить возможность разделить их работу.
- 15 -
Ц П |
|
Ш ина |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ц П |
|
Ш ина |
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
О П |
|
|
|
|
|
К н |
|
|
|
|
|
|
К н |
|
|
|
|
О П |
|
|
|
|
П Д П |
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
К н |
|
|
К н |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
П У |
|
|
|
|
|
|
П У |
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
а |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
б |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
П У |
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
П У |
|
|
|
|||||
|
|
|
|
|
|
|
|
Ц П |
|
|
|
|
Ц П |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ш ина |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
О П |
|
|
|
|
|
К |
|
|
|
|
|
К |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
К н |
|
|
|
|
|
К н |
|
|
|
|
|
|
|
К н |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
П У |
|
|
|
|
|
П У |
|
|
|
|
|
П У |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в
Рис. 3.1. Организация ввода-вывода.
На рис. 3.1 изображены наиболее распространенные схемы ввода-вывода: схемы а и б соответствуют конфигурациям микрокомпьютеров, а схема в относится к компьютерам большой мощности.
Рассмотрим подробнее функции изображенных на рис. 3.1 устройств.
К - канал или устройство обмена, специализированный процессор для операций вводавывода. Его запуск осуществляется центральным процессором, он не обладает аппаратом прерываний, однако сам может прерывать работу центрального процессора. Набор инструкций канала позволяет ему взаимодействовать со связанными с ним контроллерами и периферийными устройствами. Мини- и микрокомпьютеры содержат устройства прямого доступа к памяти (ПДП), которые представляют собой каналы в упрощенной форме.
Кн - контроллер, представляет собой устройство управления, приспособленное к заданному типу внешних устройств. Его автономия ограничивается элементарными операциями. Основное назначение контроллера заключается в том, чтобы унифицировать связь с различными типами периферийных устройств: один контроллер может связываться с периферийными устройствами только одного определенного типа. Разделение функций между контроллером и периферийным устройством зависит от типа периферийного устройства: контроллеру предоставляются логические функции (соединение и синхронизация операций, передача сигналов об окончании или об исключительных ситуациях), периферийному устройству - физические функции (передача).
ПУ - периферийное устройство, орган способный обмениваться информацией с внешним носителем. Совокупность контроллер - периферийное устройство определяется интерфейсом, который включает множество функций (ввод, вывод, сигналы управления и исключительных ситуаций) и путь связи для передачи информации.
- 16 -
Адресация периферийных устройств
Разные устройства на каждом уровне выделяются с помощью адресов, которые позволяют различать:
каналы, связанные с памятью;
контроллеры, соответствующие каждому каналу;
периферийные устройства, соединенные с каждым контроллером.
На каждом уровне такой адрес - просто порядковый номер. В результате периферийное устройство обозначается составным адресом
номер канала, номер контроллера, номер устройства
.
|
|
|
0 |
|
|
|
0 |
|
|
ПУ |
000 |
|
|
|
|
Кн |
|
|
|||||
|
|
|
|
|
|
|
|
|
|||
|
0 |
К |
1 |
|
1 |
|
|
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
0 |
|
|
|
001 |
|
|
|
|
|
Кн |
|
|
ПУ |
|||
|
|
|
|
|
|
|
010 |
||||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
||||
|
1 |
К |
0 |
|
|
|
|
|
|
|
100 |
|
|
|
|
|
|
|
|
110 |
|||
|
|
|
0 |
|
|
|
|||||
|
1 |
|
|
|
|
|
|
||||
|
|
|
|
Кн |
|
|
ПУ |
||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ПУ |
111 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 3.2. Адресация периферийных устройств.
Контроллер может быть связан с несколькими каналами, а периферийное устройство - с многими контроллерами, но одного типа. Таким образом, периферийное устройство может быть связано с памятью многими путями доступа и может быть обозначено с помощью многих адре-
сов (рис. 3.2).
3.2. УПРАВЛЕНИЕ ПЕРИФЕРИЙНЫМИ УСТРОЙСТВАМИ
Определение 3.2
Программа, которая управляет элементарным функционированием периферийного устройства, называется его драйвером.
Драйвер непосредственно управляет интерфейсом контроллера устройства, обрабатывает передаваемые им прерывания, обнаруживает и обрабатывает случаи ошибок. Для пользователя системы он является невидимым, потому что пользователь получает доступ к вводу-выводу с помощью услуг более высокого уровня, которые реализуются обращениями к супервизору.
Рассмотрим основные способы управления периферийными устройствами и элементарные примитивы (базовые операции) ввода-вывода.
Синхронный ввод-вывод
При синхронном вводе-выводе параллелизм между обработкой и передачей информации отсутствует. Процессор занят в течение всего времени передачи.
В качестве примера рассмотрим схему синхронного вывода информации на периферийное устройство.
- 17 -
Спецификации механизма
Пусть базовой операцией является передача одного байта информации из ячейки памяти к периферийному устройству. Состояние пары контроллер - устройство определяется словом состояния, содержащимся в контроллере. Оно включает совокупность указателей, среди которых имеются следующие (логические):
Указатель |
|
Значение |
ГОТОВ |
Устройство готово к работе; дополнительные |
|
|
условия зависят от устройства. |
|
КОНЕЦ |
Передача завершена; устройство готово пере- |
|
|
дать новый символ. |
|
ОШИБКА |
Во время передачи произошла ошибка, которая |
|
|
может быть уточнена кодом, составляющим |
|
|
часть слова состояния. |
|
Контроллер управляется центральным процессором с помощью трех инструкций ввода- |
||
вывода: |
|
|
Примитив |
Назначение |
|
ВВЕСТИ(А_П,А_У) |
Требует передачи байта из устройства |
|
|
|
с адресом А_У в ячейку памяти с адре- |
сом А_П.
ВЫВЕСТИ(А_П,А_У) Требует передачи байта из ячейки па-
|
мяти А_П на устройство А_У. |
ТЕСТ(А_У) |
Копирует слово состояния устройства |
|
А_У в регистр для проверки указате- |
|
лей. |
Драйвер
Допустим, требуется вывести последовательность n байтов, содержащихся в таблице T 0..n 1 . Байт T i для i 0 не может быть выведен до конца передачи байта T i 1 . Для проверки этого условия организуется повторяющийся тест (активное ожидание) для указателя ГОТОВ (листинг 3.1).
Листинг 3.1
КОНЕЦ:=false;
ТЕСТ(А_У); if not ГОТОВ
then <Обработка ошибки>; for i:=0 to n-1 do
begin
ВЫВЕСТИ(T[i],А_У); repeat
ТЕСТ(А_У); if ОШИБКА
then <Обработка ошибки>; until КОНЕЦ;
end
Асинхронный ввод-вывод с прерываниями
Спецификации механизма
- 18 -
Механизм, описанный в предыдущем разделе, дополняется следующим образом: переход к значению «истина» указателя КОНЕЦ вызывает прерывание на соответствующем уровне периферийного устройства.
Драйвер
Прерывание сигнализирует о конце передачи байта T i . Если этот байт не является последним (i n 1), можно пересылать следующий байт. Процесс приводится в действие передачей первого байта.
Листинг 3.2. Главная программа.
ЗАКОНЧЕН:=false; i:=0;
ВЫВЕСТИ(T[0],А_У);
...
<параллельная обработка>
...
if ЗАКОНЧЕН
then ...
Листинг 3.3. Обработчик прерывания.
<Сохранить контекст>; ТЕСТ(А_У);
if ОШИБКА
then <Обработка ошибки>
else
begin
if i<n-1 then begin
i:=i+1;
ВЫВЕСТИ(T[i],А_У);
end
else ЗАКОНЧЕН:=true
end;
<Восстановить контекст>
3.3. БУФЕРНЫЙ ВВОД-ВЫВОД
Так как скорости работы центрального процессора и периферийных органов сильно различаются, применяют «буферизацию» ввода-вывода, т.е. выделяют в памяти специальную зону - буфер для улучшения взаимодействия периферийных устройств с программами пользователей. Отделяя работу центрального процессора от работы периферии, надеются уменьшить время его пребывания в неактивном состоянии. Программы пользователей передают информацию в буфер или из него; параллельно буфер служит источником или приемником информации при обменах с периферийными устройствами. Чем больше размер буфера, тем эффективней отделение центрального процессора от периферии.
Для изучения буферного ввода-вывода рассмотрим упрощенную модель, описываемую следующими спецификациями:
при обмене с периферийными устройствами используются записи фиксированной длины;
размер буфера фиксирован и составляет N записей;
-19 -
для программы пользователя обмен с буфером должен имитировать обмен с периферийным устройством, следовательно, должен сохраняться порядок передачи информации между буфером и периферийным устройством и ни одна запись не должна быть потеряна;
бесполезное ожидание должно быть сведено к минимуму как для центрального процессора, так и для периферийного устройства;
возможности носителей не ограничены: при чтении постоянно обеспечивается данными устройство ввода, при записи - устройство вывода;
передача осуществляется без ошибок.
Очереди
В качестве структуры данных для буферизации используются очереди. Очередь представляет собой непрерывный участок памяти для временного хранения данных и передачи их по принципу FIFO (First In First Out - первым вошел, первым вышел). Аналогично стеку очередь имеет указатель вершины (УВ), указывающий на начало свободного участка в очереди, и указатель базы, указывающий на начало очереди (рис. 3.3).
Свободно Свободно
а) 
Занято
УБ УВ
б) |
|
|
|
Свободно |
|
|
|
|
|
|
|
||||
|
|
Занято |
УВ |
|
Занято |
|
|
|
|
|
|||||
|
|
|
|
УБ |
|||
Рис. 3.3. Схема работы очереди.
Каждая запись, помещаемая в очередь, записывается в память начиная от УВ, затем УВ перемещается вправо на размер записи. При изъятии записи из очереди считывается запись, на которую указывает УБ, после чего УБ перемещается вправо на размер записи. Таким образом, при помещении записи в очередь УВ «убегает», а при извлечении записи из очереди УБ «догоняет» УВ. При достижении указателем вершины конца участка памяти, отведенного под очередь, УВ перемещается на начало этого участка. В этом случае при извлечении записи УБ «убегает», а при помещении записи УВ «догоняет» УБ (рис. 3.3 б). Аналогично, когда УБ достигнет конца участка, он перемещается на начало, и происходит возврат к исходному состоянию (рис. 3.3 а). Когда УБ «догонит» УВ, очередь станет пустой, когда УВ «догонит» УБ, - переполненной.
Принципы алгоритмизации
Интерфейс для использования программы чтения и записи представляется процедурами ПРОЧИТАТЬ(ЗАПИСЬ) и ЗАПИСАТЬ(ЗАПИСЬ). Эти процедуры реализованы обращением к супервизору.
Процедура ПРОЧИТАТЬ(ЗАПИСЬ) выбирает из буфера ближайшую запись (рис. 3.4). Чтение возможно лишь в том случае, если буфер содержит по крайней мере одну неизъятую запись. В противном случае процедура переходит в состояние ожидания.
Процедура ЗАПИСАТЬ(ЗАПИСЬ) помещает в буфер очередную запись, если буфер не переполнен (рис. 3.5). В противном случае процедура переходит в состояние ожидания.
Конец передачи записи из буфера на периферийное устройство или с периферийного устройства в буфер вызывает прерывание. Для поддержки периферийного устройства в активном
- 20 -
