Информатика и технология программирования


Реентерабельность и проблемы резидентных программ в DOS


С понятием прерывания тесно связано такое свойство программ (модулей, функций) как РЕЕНТЕРАБЕЛЬНОСТЬ (буквально, " повторновходимость" ). Предположим, что имеется функция, которая вызывается как из функции обработки прерываний, так и из основного (прерываемого) процесса.


void fun() {}
void interrupt intr(...) { ... fun(); ...}
void main() { ... fun(); ...}

Тогда вполне вероятна ситуация, что во время вызова функции fun из основной программы может произойти прерывание, и функция fun будет вызвана еще раз уже из обработчика прерываний, то есть вызов ее произойдет " как бы" рекурсивно. Для обозначения работоспособности программы в такой ситуации предусмотрен специальный термин - реентерабельность.

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

Операционная система DOS -- нереентерабельная программа, поэтому для вызова его функций из резидентных программ необходимо использование специальных средств синхронизации (проверки " занятости" DOS).

Заметим, что DOS была спроектирована исключительно как однозадачная операционная система, вернее, понятие задачи или процесса в ней вообще не предусмотрено. Это значит, что при выполнении конкретной программы в DOS ее текущее состояние и характеристики занимаемых ресурсов " размазаны" по различным переменным.


Начало  Назад  Вперед



Книжный магазин