на шаге 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 книги).