Статус
нашего
сайта:
ICQ Secrets Center is Online  ICQ Information Center


ICQ SHOP
     5-значные
     6-значные
     7-значные
     8-значные
     9-значные
     Rippers List
ОПЛАТА
СТАТЬИ
СЕКРЕТЫ
HELP CENTER
OWNED LIST
РОЗЫСК!New!
ICQ РЕЛИЗЫ
Протоколы ICQ
LOL ;-)
Настройка компьютера
Аватарки
Смайлики
СОФТ
     Mail Checkers
     Bruteforces
     ICQTeam Soft
     8thWonder Soft
     Other Progs
     ICQ Patches
     Miranda ICQ
ФорумАрхив!
ВАШ АККАУНТ
ICQ LiveJournal

Реклама

Наш канал:

irc.icqinfo.ru

Таненбаум Э.- Архитектура компьютера. стр.315


Таненбаум Э.- Архитектура компьютера. стр.315

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

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

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

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

Прерывания

Прерывания — это изменения в потоке управления, вызванные не самой программой, а чем-либо другим. Обычно прерывания связаны с процессом ввода-вывода. Например, программа может дать команду диску начать передачу информации и инициировать прерывание, как только передача данных завершится. Как и в случае исключений, при прерываниях работа программы останавливается, и управление передается программе обработки прерываний (Interrupt Service Routine, ISR), или обработчику прерываний, который выполняет определенные действия. После завершения этих действий обработчик прерываний передает управление прерванной программе. Она должна заново начать прерванный процесс в том же самом состоянии, в котором находилась в момент прерывания. Это значит, что прежнее состояние всех внутренних регистров (то есть состояние, которое было до прерывания) должно быть восстановлено.

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


⇐ Предыдущая страница| |Следующая страница ⇒

.