Реклама:

Теперь при вызове инвертированной программы вызывающая программа для указания того, какая версия требуется, будет «читать», «брать» или получать каким-то другим способом соответствующий вектор состояний. При этом вектор состояний станет служить для вхождения или повторного вхождения в инвертированную программу в нужном месте и будет устанавливать для всех переменных значения, которые имели место перед последним выходом из этой версии программы. Если данная версия инвертированной программы вызывается в первый раз, то вектор состояний будет содержать начальные значения переменных.

Итак, можно рассматривать вектор состояний как запись, «принадлежащую» конкретной версии инвертированной программы, причем место ее хранения или расположения в значительной степени определяется соображениями удобства.

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

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

Остается только одна небольшая проблема доступа к векторам состояний. Если они запомнены в вызывающей программе, то трудностей не возникает. Надлежащая информация из вектора состояний должна передаваться инвертированной программе при ее вызове. Впоследствии обновленный вектор состояний возвращается в вызывающую программу при выполнении очередного оператора RETURN или ВЕРНУТЬСЯ.

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

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


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