На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 2 / Отдельные области данных Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Отдельные области данных

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


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


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


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


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz