Составители:
сегмент размещается в памяти как до определенной степени самостоятельная единица.
Логически обращение к элементам программы в этом случае будет представляться как
указание имени сегмента и смещения относительно начала этого сегмента. Физически
имя (или порядковый номер) сегмента будет соответствовать некоторому адресу, с кото-
рого этот сегмент начинается при его размещении в памяти, и смещение должно при-
бавляться к этому базовому адресу.
Преобразование имени сегмента в его порядковый номер осуществляет система
программирования, а операционная система размещает сегменты в физической памя-
ти и для каждого сегмента получает информацию о его начале. Таким образом, вирту-
альный адрес для данного способа состоит из двух полей - номер сегмента и смеще-
ние относительно начала сегмента. Каждый сегмент, размещаемый в памяти, имеет
соответствующую информационную структуру, часто называемую дескриптором сег-
мента. Именно операционная система строит для каждого исполняемого процесса соот-
ветствующую таблицу дескрипторов сегментов и при размещении каждого из сегментов
в оперативной или внешней памяти в дескрипторе отмечает его текущее местоположе-
ние. Если сегмент задачи в данный момент находится в оперативной памяти, то об этом
делается пометка в дескрипторе. Как правило, для этого используется «бит присутст-
вия» (present bit). В этом случае в поле «адрес» диспетчер памяти записывает адрес
физической памяти, с которого сегмент начинается, а в поле «длина сегмента» (limit)
указывается количество адресуемых ячеек памяти. Это поле используется не только
для того, чтобы размещать сегменты без наложения один на другой, но и для того, чтобы
проконтролировать, не обращается ли код исполняющейся задачи за пределы текущего
сегмента. В случае превышения длины сегмента вследствие ошибок программирования
мы можем говорить о нарушении адресации и с помощью введения специальных аппа-
ратных средств генерировать сигналы прерывания, которые позволят обнаруживать по-
добные ошибки. Если бит присутствия в дескрипторе указывает, что сейчас этот сег-
мент находится не в оперативной, а во внешней памяти (например, на жестком диске), то
названные поля адреса и длины используются для указания адреса сегмента в координа-
тах внешней памяти.
Помимо информации о местоположении сегмента, в дескрипторе сегмента, как
правило, содержатся данные о его типе (сегмент кода или сегмент данных), правах дос-
тупа к этому сегменту (можно или нельзя его модифицировать, предоставлять другой
задаче), отметка об обращениях к данному сегменту (информация о том, как часто этот
сегмент используется), на основании которых можно принять решение о предоставлении
места, занимаемого текущим сегментом, другому сегменту.
При передаче управления следующей задаче ОС должна занести в соответствую-
щий регистр адрес таблицы дескрипторов сегментов для этой задачи. Сама таблица де-
скрипторов сегментов, в свою очередь, также представляет собой сегмент данных, ко-
торый обрабатывается диспетчером памяти операционной системы.
При таком подходе появляется возможность размещать в оперативной памяти не
все сегменты задачи, а только те, с которыми в настоящий момент происходит работа.
Если требуемого сегмента в оперативной памяти нет, то возникает прерывание и управ-
ление передается через диспетчер памяти программе загрузки сегмента. Пока происхо-
дит поиск сегмента во внешней памяти и загрузка его в оперативную, диспетчер памяти
определяет подходящее для сегмента место. Возможно, что свободного места нет, и то-
гда принимается решение о выгрузке какого-нибудь сегмента и его перемещение во
внешнюю память. Если при этом еще остается время, то процессор передается другой
готовой к выполнению задаче. После загрузки необходимого сегмента процессор вновь
передается задаче, вызвавшей прерывание из-за отсутствия сегмента. Всякий раз при
считывании сегмента в оперативную память в таблице дескрипторов сегментов необхо-
димо установить адрес начала сегмента и признак присутствия сегмента.
99
сегмент размещается в памяти как до определенной степени самостоятельная единица.
Логически обращение к элементам программы в этом случае будет представляться как
указание имени сегмента и смещения относительно начала этого сегмента. Физически
имя (или порядковый номер) сегмента будет соответствовать некоторому адресу, с кото-
рого этот сегмент начинается при его размещении в памяти, и смещение должно при-
бавляться к этому базовому адресу.
Преобразование имени сегмента в его порядковый номер осуществляет система
программирования, а операционная система размещает сегменты в физической памя-
ти и для каждого сегмента получает информацию о его начале. Таким образом, вирту-
альный адрес для данного способа состоит из двух полей - номер сегмента и смеще-
ние относительно начала сегмента. Каждый сегмент, размещаемый в памяти, имеет
соответствующую информационную структуру, часто называемую дескриптором сег-
мента. Именно операционная система строит для каждого исполняемого процесса соот-
ветствующую таблицу дескрипторов сегментов и при размещении каждого из сегментов
в оперативной или внешней памяти в дескрипторе отмечает его текущее местоположе-
ние. Если сегмент задачи в данный момент находится в оперативной памяти, то об этом
делается пометка в дескрипторе. Как правило, для этого используется «бит присутст-
вия» (present bit). В этом случае в поле «адрес» диспетчер памяти записывает адрес
физической памяти, с которого сегмент начинается, а в поле «длина сегмента» (limit)
указывается количество адресуемых ячеек памяти. Это поле используется не только
для того, чтобы размещать сегменты без наложения один на другой, но и для того, чтобы
проконтролировать, не обращается ли код исполняющейся задачи за пределы текущего
сегмента. В случае превышения длины сегмента вследствие ошибок программирования
мы можем говорить о нарушении адресации и с помощью введения специальных аппа-
ратных средств генерировать сигналы прерывания, которые позволят обнаруживать по-
добные ошибки. Если бит присутствия в дескрипторе указывает, что сейчас этот сег-
мент находится не в оперативной, а во внешней памяти (например, на жестком диске), то
названные поля адреса и длины используются для указания адреса сегмента в координа-
тах внешней памяти.
Помимо информации о местоположении сегмента, в дескрипторе сегмента, как
правило, содержатся данные о его типе (сегмент кода или сегмент данных), правах дос-
тупа к этому сегменту (можно или нельзя его модифицировать, предоставлять другой
задаче), отметка об обращениях к данному сегменту (информация о том, как часто этот
сегмент используется), на основании которых можно принять решение о предоставлении
места, занимаемого текущим сегментом, другому сегменту.
При передаче управления следующей задаче ОС должна занести в соответствую-
щий регистр адрес таблицы дескрипторов сегментов для этой задачи. Сама таблица де-
скрипторов сегментов, в свою очередь, также представляет собой сегмент данных, ко-
торый обрабатывается диспетчером памяти операционной системы.
При таком подходе появляется возможность размещать в оперативной памяти не
все сегменты задачи, а только те, с которыми в настоящий момент происходит работа.
Если требуемого сегмента в оперативной памяти нет, то возникает прерывание и управ-
ление передается через диспетчер памяти программе загрузки сегмента. Пока происхо-
дит поиск сегмента во внешней памяти и загрузка его в оперативную, диспетчер памяти
определяет подходящее для сегмента место. Возможно, что свободного места нет, и то-
гда принимается решение о выгрузке какого-нибудь сегмента и его перемещение во
внешнюю память. Если при этом еще остается время, то процессор передается другой
готовой к выполнению задаче. После загрузки необходимого сегмента процессор вновь
передается задаче, вызвавшей прерывание из-за отсутствия сегмента. Всякий раз при
считывании сегмента в оперативную память в таблице дескрипторов сегментов необхо-
димо установить адрес начала сегмента и признак присутствия сегмента.
99
Страницы
- « первая
- ‹ предыдущая
- …
- 95
- 96
- 97
- 98
- 99
- …
- следующая ›
- последняя »
