Chapter_08 (1110560), страница 4
Текст из файла (страница 4)
Исходя из этого на место нашей макрокоманды вывода строки текстаoutstrможно подставить команды языка машиныmov ah,9int 21hВ качестве примера опишем на Ассемблере процедуру без параметров со стандартными соглашениями о связях, использующую системный вызов. Эта процедура при её выполнении выдаёт короткий звуковой сигнал на встроенный в компьютер динамик:Beep procpushpushmovmovintpoppopretBeep endpaxdxal,7; символ - звуковой сигналah,02h; номер функции вывода символа21h; системный вызовdxaxМожно заметить, что процедура Beep при своём вызове выполняет те же действия, что и нашамакрокоманда вывода символа с номером 7 outch 7 .В дальнейшем мы познакомимся ещё с одним важным назначением системных вызовов при изучении мультипрограммного режима работы ЭВМ.Процедуры обработки прерываний реализуют особый стиль программирования, их иногда называют процедурами обратного вызова (call back procedure) или процедурами-демонами.2 Такая процедура при своей инициализации (размещении в памяти) оставляет в определённом месте адрес своегоначала.
Далее вызов этой процедуры-демона производится из процедур-обработчиков прерыванийпри возникновении соответствующих условий путём (дальнего) косвенного перехода на эту процедуру.В качестве примера рассмотрим расчёт платы за междугородний телефонный разговор, при котором за каждую новую минуту разговора к общей сумме прибавляется некоторая величина – тарифза минуту разговора с данным городом. При наступлении льготного периода времени (обычно ночьюи в выходные дни) срабатывает будильник (специальная системная программа-обработчик прерываний от встроенного в ЭВМ таймера), который вызывает процедуру-демона пересчёта тарифа.Процедуры-демоны широко используются в современных вычислительных системах, например,при приходе электронного письма вызывается системная процедура – почтовый демон и т.д.
Заметим, что в некоторые языки высокого уровня включены аналогичные возможности, например, в языке С можно писать так называемые функции-реакции на сигналы со стороны других вычислитель-1Первые BIOS появились, когда ещё не существовало многоязыковых систем программирования, и небыло необходимости в стандартных соглашениях о связях. Заметим также, что вызов с нестандартными соглашениями о связях производится быстрее.
При этом, однако, многие вещи являются невозможными, например,рекурсивный вызов таких процедур.2Такое экзотическое название появилось, наверное, потому, что они вызываются не командой call, каквсе "нормальные" процедуры, а начинают выполняться как бы "сами по себе", по некоторым событиям, обычноне имеющим отношения к считающейся в данный момент программе.10ных процессов. Заметим также, что очень похожий стиль "событийного" программирования используется и в операционной системе Windows.В заключение нашего по необходимости краткого рассмотрения прерываний заметим, что появление в компьютерах системы прерываний было, несомненно, одним из важнейших событий в развитии архитектуры вычислительных машин.
Вспомним, что ничего подобного в нашей учебной машине не было. Там при возникновении аварийных ситуаций в центральной части машины (делениена ноль, команда с несуществующим кодом операции и т.д.) просто происходил останов машины, а вустройствах ввода/вывода не происходило ничего такого, что могло бы "заинтересовать" центральный процессор. Точнее, если в устройствах ввода/вывода ЭВМ такой архитектуры происходила аварийная ситуация, например, сбой в работе, то устройство управления просто останавливало машину,и для возобновления работы требовалось вмешательство человека-оператора.Как мы вскоре узнаем, появление системы прерываний было одним из необходимых условий,обеспечивающим работу ЭВМ в так называемом мультипрограммном режиме. Недаром появившиеся компьютеры с системой прерываний (и некоторыми другими важными аппаратными особенностями, о которых мы будем говорить далее) стали относить к следующему, третьему поколениюЭВМ.
Подробнее об этом можно прочитать в книгах [1,3].Вопросы и упражнения1.2.3.4.5.6.7.8.9.10.11.12.13.14.Какие устройства относятся к центральной части компьютера, а какие – к периферийной?Почему при возникновении события чаще всего необходимо прервать выполнение текущейпрограммы?Какие сигналы прерывания называются внутренними, а какие – внешними?Почему реакцию на некоторые сигналы прерывания надо уметь временно запрещать?Что такое аппаратная реакция на сигнал прерывания?Что такое вектор прерываний?Кто производит программную реакцию на сигнал прерывания?Для чего программная реакция начинается в режиме с закрытыми прерываниями от внешнихустройств?Что такое минимальная программная реакция на прерывание?Для чего служит поле сохранения (контекст) программы?Может ли выполняемая программа пользователя заметить, что её выполнение прерывалосьсигналами прерываний?Что такое критическая секция программы?Каково назначение системных вызовов?Что такое процедура-демон?.