Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 165

Unknown Author

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

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

13.2. Прерывания. Функции DOS

132.1 Прерывания

Одна из основных задач ОС - управление работой всех устройств, входящих в состав ЭВМ. Для выполнения этой задачи ОС обязана, в частности, оперативно следить за событиями, происходящими в устройствах.

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

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