Реклама:

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

Другой метод реализации состоит в том, чтобы сделать одну из программ подпрограммой для другой. Например, можно сделать Р1 подпрограммой программы Р2. Тогда, если для программы Р2 потребуется запись из ПФ, то Р2 обратится к подпрограмме Р, которая сгенерирует запись для ПФ, передаст ее в Р2, а затем вернет управление в Р2, после чего будет ожидать следующего обращения. К сожалению, все еще немногие операционные системы позволяют просто реализовать такое совместное существование программ.

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

Например, предположим, что в ситуации, описанной на рис. 7.9, мы хотим сделать программу Р1 подпрограммой программы Р2. Р2 начинала бы обработку и затем, когда ей понадобится читать записи из ПФ, она обратилась бы к подпрограмме Pis. После этого Pis начала бы читать входной файл и, построив первую запись для ПФ, передала бы эту запись непосредственно программе Р2 в некую область, общую для обеих программ. Затем управление вернулось бы к программе Р2 до тех пор, пока ей не потребуется следующая «запись» из ПФ. Тогда повторился бы процесс обращения к Pis. Эта ситуация проиллюстрирована на рис. 7.19.

Читатель видит, что промежуточный файл ПФ исчез!

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

Что произошло с файлом ПФ? Промежуточный файл на самом деле перестает существовать, но составляющие его записи все же остаются. Теперь они передаются по одной от программы Pis к Р2. Как же изменяются программы Р1 и Р2 для реализации этого нового типа кооперации?

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


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