Каков максимальный размер сегмента в 16-битной системе для максимум 8 сегментов на процесс? - PullRequest
0 голосов
/ 06 сентября 2018

Меня смущает вопрос, приведенный ниже, поскольку в соответствии с вопросом, сегмент может иметь данные размером 8 КБ в сегменте, но в вопросе в сегментах процессора7 более 8 КБ, например, 97 КБ в сегменте 0 дается? ? PLZ Ckear путаница из ??

Вопрос:

Предположим, что 16-битная система использует сегментацию, и в настоящее время 6 дыр в памяти: а. 174 КБ, отверстие в ячейке памяти 180, б. 306 KB Отверстие в ячейке памяти 810 c. 245 Кб дырка в памяти местоположение 1287 d. 456 KB Отверстие в ячейке памяти 1912 e. 596 КБ Отверстие в ячейка памяти 2800 ф. 144 КБ дыры в ячейке памяти 4256 Система позволяет максимум 8 сегментов на процесс. Теперь приходит процесс P7, который имеет 5 сегментов размером 97 КБ (сегмент 0), 256 КБ, 384 КБ, 217 КБ и 186 КБ (сегмент 4). Учитывая этот сценарий, сколько битов в логический адрес, сгенерированный из процессора? Сколько бит требуется для сегментной индексации? Сколько битов требуется для доступа к слову в сегмент? Каков максимальный размер сегмента?

1 Ответ

0 голосов
/ 06 сентября 2018

Недостаточно информации, чтобы ответить на вопрос.

Например:

а) если это "16-битная система", что это значит? Означает ли это, что все смещения сегментов являются 16-битными, или это означает, что целочисленные операции (сложение, вычитание, ...) являются 16-битными, но смещения адресации / сегмента используют совершенно другой размер?

b) Если смещения сегментов 16-битные, какова минимальная гранулярность? Например. если его адресуемый байт, то максимальный полезный размер сегмента не может быть намного больше 64 КБ (например, при доступе к 16-битному значению со смещением 0xFFFF вы сможете получить доступ к «64 КБ + один дополнительный байт»). Однако, если это «адресуемое слово», то, возможно, это больше похоже на «address = сегмент.base + смещение * word_size» и (с 16-битным размером слова) вы можете иметь «128 КиБ + один дополнительный байт».

в) Есть ли разница между «максимальным размером сегмента, который полезен» и «максимальным размером сегмента, который поддерживается»? Например, «64 КиБ + один дополнительный байт» может быть полезен в теории, но на практике вы ожидаете, что (для удобства / более быстрых проверок ограничения сегментов) ЦП вместо этого ограничит максимальный размер сегментов до 64 КиБ; но нечего сказать, что ЦП не использует абсолютно произвольный максимальный размер сегмента (16 КиБ, 32 КиБ, 12345 байт, 26 ГиБ, ....), который не имеет ничего общего с размером смещения сегмента.

d) Если расчет логического адреса равен «(сегмент.base + смещение * масштаб) & ((1 << max_bits) - 1)», где размер сегмента.базы неизвестен и может быть любым, размер смещение неизвестно и может быть чем угодно, масштаб неизвестен и может быть чем угодно, а max_bits неизвестно и может быть чем угодно; тогда невозможно определить размер логического адреса. Однако мы даже не знаем, что такое вычисление логического адреса (я просто выбрал «вероятную универсальную форму», где некоторые части могут быть отключены - например, как «scale = 1», если его байты адресуемы). </p>

e) Количество битов, необходимых для доступа к слову в сегменте, зависит от того, как вы их подсчитываете и что поддерживает ЦП. Например, может быть, есть специальная инструкция «извлечь 16 бит в начале подразумеваемого / сегмента данных по умолчанию», где вы можете получить доступ к слову (первому слову) сегмента без битов вообще. В другом примере, возможно, единственный режим адресации, поддерживаемый ЦП, включает использование двух 16-битных регистров (например, «address = сегмент.base + ((reg1 << 16) | reg2)», где вам нужно использовать 32 бита для доступа к слову . </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...