Программирование на Ассемблере

Реентерабельное программирование


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

Когда это может произойти?

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

Третий случай использования отдельных областей данных  происходит  тогда,  когда программе необходимо вызвать саму себя. (рекурсия). 

Для написания повторно входимых (реентерабельных) программ  необходимо, чтобы все промежуточные данные записывались в локальные области памяти. Этому требованию должны удовлетворять все библиотеки, которые могут использоваться в многопоточном режиме.



Содержание раздела