ФЭНДОМ


Сегмент в процессорах архитектуры IA-32 с технической точки зрения является непрерывным участком памяти, доступ к которому осуществляется без изменения значения, загруженного в какой-либо сегментный регистр. В зависимости от того, какого рода информация содержится в сегменте и через какой сегментный регистр к ней осуществляется доступ, различают сегменты кода, стека и данных. Сегменты имеют переменную длину от 1 байта до 64 Кбайт (в реальном или 16-разрядном защищённом режимах) либо от 1 байта до 4 Гбайт (в 32-разрядном защищённом режиме).

Реальное употребление термина "сегмент", однако, по историческим причинам является более широким. Дело в том, что во многих трансляторах языка ассемблера имеются средства разделения кода исходной программы на логически независимые блоки, которые могут размещаться в памяти независимо друг от друга. В ассемблерах большинства вычислительных машин такие блоки называются программными секциями или просто секциями. Их взаимное положение в памяти устанавливается на этапе компоновки (сборки выполняемого модуля из объектных модулей) или даже во время загрузки выполняемого модуля в память. Однако макроассемблер фирмы Microsoft (MASM), а вслед за ним и ряд других трансляторов для ПК вместо традиционного термина "программная секция" использовал термин "сегмент", что и послужило причиной возникновения определённой путаницы: приходится различать "физические сегменты" -- как раз те самые области памяти, доступ к которым осуществляется при неизменном значении сегментного регистра и с которыми имеет дело процессор, и "логические сегменты", используемые программистом для деления программы на логические блоки и эквивалентные по смыслу программным секциям.

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

В реальном и защищённом режимах процессоров архитектуры IA-32 использование сегментов является обязательным, поскольку вычисление линейного адреса опирается на механизм сегментации. В зависимости от того, каким образом логические сегменты объединяются в физические, можно выделить несколько различных моделей памяти, наиболее удобной из которых является плоская модель памяти, при которой все логические сегменты объединены в один физический, а все сегментные регистры предоставляют доступ к этому единому сегменту.

В 64-разрядном режиме сегментация не используется, поэтому там может использоваться только плоская модель памяти. Однако в режиме совместимости сегментация по-прежнему применяется, поскольку он предназначен для исполнения программ, написанных для защищённого режима.

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

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