Операционная система Systen состоит из трех простых частей - перевод адреса стековой памяти - PullRequest
1 голос
/ 16 июня 2019

Я читаю главу 16 из OSTEP по сегментации памяти.

В примере раздела он переводит виртуальный адрес 15 КБ в физический адрес:

| Segment        | Base      | Size   | Grow Positive   |    
| Code           | 32KB      | 2K     | 1               |  
| Heap           | 34KB      |   2K   | 1               |  
| Stack          | 28KB      |   2K   | 0(negative)     |  

для преобразования виртуального адреса 15 КБ в физический (в учебнике):

  1. 15KB преобразовать в бит => 11 1100 0000 00000

  2. старший 2 бит (11) определил сегмент, который является стеком.

  3. осталось 3 КБ, чтобы получить правильное смещение:
    3 КБ - максимальный размер сегмента = 3 КБ - 4 КБ = -1 КБ

  4. физический адрес = 28 КБ -1 КБ =27 КБ

На шаге 4 мой вопрос: почему максимальный сегмент 4 КБ, а не 2 КБ?

1 Ответ

1 голос
/ 16 июня 2019

на шаге 4, почему максимальный сегмент 4 КБ - не так ли 2 КБ?

Для этой части этой книги;они предполагают, что аппаратное обеспечение использует старшие 2 бита (14-битного) виртуального адреса, чтобы определить, какой сегмент используется.Это оставляет вам «14-2 = 12 бит» для смещения внутри сегмента, поэтому аппаратное обеспечение не может поддерживать сегменты размером более 4 КиБ (поскольку смещение составляет 12 бит, а 2 ** 12 равно 4 КиБ).

Конечно, только потому, что максимально возможный размер сегмента составляет 4 КиБ, не означает, что вы не можете иметь меньший сегмент (например, сегмент 2 КиБ).Для сегментов с расширением вниз я бы предположил, что оборудование, описываемое в книге, выполняет что-то вроде «if(max_segment_size - offset >= segment_limit) { segmentation_fault(); }», поэтому, если предел сегмента составляет 2 КиБ, а «max_segment_size - offset = 4 КиБ - 3 КиБ = 1 КиБ« it »все будет в порядке (нет ошибки сегментации), потому что на 1 КиБ меньше предела сегмента (2 КиБ).

Примечание. Поскольку ни один современный ЦП и современная операционная система не используют сегментацию (и потому что сегментация работает по-разному вдругие процессоры - например, с сегментными регистрами, а не с «старшими N битами выбора сегмента»);Я бы соблазнился быстро просмотреть главу 16, не обращая особого внимания.Важной частью является «пейджинг» (начиная с главы 18 книги).

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