ВУЗ:
Составители:
24
Структура descr (строка 8 листинга 1.1) предоставляет шаблон для
дескрипторов сегментов, облегчающий их формирование. Сравнивая
описание структуры descr в программе с рисунком 1.8, нетрудно заметить
их соответствие друг другу.
Рассмотрим вкратце содержимое дескриптора. Граница (limit) сег-
мента представляет собой номер последнего байта сегмента. Так, для
сегмента размером 375 байт граница равна 374. Поле границы состоит из
20 бит и разбито на две части. Как видно из рисунка 1.8, младшие 16 бит
границы занимают байты 0 и 1 дескриптора, а старшие 4 бита входят в
байт атрибутов 2, занимая в нем биты 0...3. Получается, что размер
сегмента ограничен величиной 1 Мбайт. На самом деле это не так. Граница
может указываться либо в байтах (и тогда, действительно, максимальный
размер сегмента равен 1 Мбайт), либо в блоках по 4 Кбайт (и тогда размер
сегмента может достигать 4 Гбайт). В каких единицах задается граница,
определяет старший бит байта атрибутов 2, называемый битом дробности.
Если он равен 0, граница указывается в байтах; если 1 – в блоках по 4
килобайта.
База сегмента (32 бита) определяет начальный линейный адрес
сегмента в адресном пространстве процессора. Линейным называется
адрес, выраженный не в виде комбинации сегмент-смещение, а просто
номером байта в адресном пространстве. Казалось бы, линейный адрес –
это просто другое название физического адреса. Для нашего примера это
так и есть, в нем линейные адреса совпадают с физическими. Однако если
в процессоре включен блок страничной организация памяти, то процедура
преобразования адресов усложняется. Отдельные блоки размером 4 Кбайт
(страницы) линейного адресного пространства могут произвольным
образом отображаться на физические адреса, в частности и так, что
большие линейные адреса отображаются на начало физической памяти, и
наоборот. Страничная адресация осуществляется аппаратно (хотя для ее
Структура descr (строка 8 листинга 1.1) предоставляет шаблон для
дескрипторов сегментов, облегчающий их формирование. Сравнивая
описание структуры descr в программе с рисунком 1.8, нетрудно заметить
их соответствие друг другу.
Рассмотрим вкратце содержимое дескриптора. Граница (limit) сег-
мента представляет собой номер последнего байта сегмента. Так, для
сегмента размером 375 байт граница равна 374. Поле границы состоит из
20 бит и разбито на две части. Как видно из рисунка 1.8, младшие 16 бит
границы занимают байты 0 и 1 дескриптора, а старшие 4 бита входят в
байт атрибутов 2, занимая в нем биты 0...3. Получается, что размер
сегмента ограничен величиной 1 Мбайт. На самом деле это не так. Граница
может указываться либо в байтах (и тогда, действительно, максимальный
размер сегмента равен 1 Мбайт), либо в блоках по 4 Кбайт (и тогда размер
сегмента может достигать 4 Гбайт). В каких единицах задается граница,
определяет старший бит байта атрибутов 2, называемый битом дробности.
Если он равен 0, граница указывается в байтах; если 1 – в блоках по 4
килобайта.
База сегмента (32 бита) определяет начальный линейный адрес
сегмента в адресном пространстве процессора. Линейным называется
адрес, выраженный не в виде комбинации сегмент-смещение, а просто
номером байта в адресном пространстве. Казалось бы, линейный адрес –
это просто другое название физического адреса. Для нашего примера это
так и есть, в нем линейные адреса совпадают с физическими. Однако если
в процессоре включен блок страничной организация памяти, то процедура
преобразования адресов усложняется. Отдельные блоки размером 4 Кбайт
(страницы) линейного адресного пространства могут произвольным
образом отображаться на физические адреса, в частности и так, что
большие линейные адреса отображаются на начало физической памяти, и
наоборот. Страничная адресация осуществляется аппаратно (хотя для ее
24
Страницы
- « первая
- ‹ предыдущая
- …
- 22
- 23
- 24
- 25
- 26
- …
- следующая ›
- последняя »
