|
|
|
|
Передача данных через общую область памяти
Следующим способом передачи данных является использование заранее подготовленной области памяти. Понятие "заранее подготовленная" используется в
том смысле, что и вызывающая и вызываемая программы "договорились" между собой о том, что их данные передаются в некоторую область основной памяти.
Программа А знает, что вывела квитанции об оплате за последний месяц в область памяти, помеченную как FOO, и программа В знает как выглядит эта
информация в области памяти FOO. Поэтому область памяти FOO называется общей областью памяти.
Передача данных через общую область памяти имеет, по крайней мере, один существенный момент. В пределах физических возможностей используемого
компьютера можно передать столько данных, сколько необходимо. Передача данных через общую область памяти позволяет передавать и принимать целую
гамму свободных регистров и допускает передачу данных любого размера от буфера в один байт до нескольких килобайт.
Кроме того, передача данных через общую область памяти делает доступными передаваемые данные любому модулю, которому они требуются. Это большое
преимущество, т.к. запрашиваемые данные передаются от модуля верхнего уровня через большое количество внутренних модулей к модулю нижнего уровня.
Поэтому, каждый модуль не должен обрабатывать те данные, которые он не использует.
Отрицательной стороной этого способа передачи данных является то, что зависимость от общей памяти может ограничить общность и повторность
использования модулей. Рассмотрим ряд модулей, предназначенных для чтения и записи файлов. Если модули кодируются для использования общего блока
памяти, то может возникнуть проблема одновременного открытия двух файлов. Если программа была спроектирована для выполнения сравнения, то она
должна скопировать один набор данных из буфера в область памяти для предотвращения возможной перезаписи буфера.
Последний недостаток способа передачи данных через общую область памяти вытекает из его особенности. В связи с тем, что область памяти доступна
любому модулю, это типичный случай "игры по правилам". Защита данных от случайного разрушения почти невозможна. Обычно это не является большим
риском (поскольку ошибки программы общие), но становится очень существенным фактором при рассмотрении повторно используемого программирования
(рассматриваемого в следующем разделе "Типы кодирования").
|
|