Какой метод трансляции виртуальной памяти (рассмотрите x86) используется обычно?

Известно, что существуют различные виды трансляции виртуальных адресов (x86) с помощью MMU, такие как сегментация, пейджинг, комбинированная сегментация-пейджинг (Paged segmentation, Segmented Paging) и т. д. Каждый из них имеет свои преимущества и недостатки.

Мои вопросы: 1) Используют ли общие операционные системы, такие как Linux/Windows, только один конкретный метод (например, пейджинг)? 2) Если для данной ОС доступны 2 или более методов, когда и где будет использоваться каждый из них? Можем ли мы настроить в соответствии с нашими потребностями? 3) Если используется только «пейджинг», то каким образом используются сегментные регистры x86?


person Umashankar    schedule 18.02.2014    source источник
comment
Какой у вас вопрос по программированию? Вы пытаетесь решить, какую модель использовать для операционной системы, которую вы пишете?   -  person Raymond Chen    schedule 18.02.2014
comment
Не определиться с моделью. Мой вопрос в том, как каждая модель используется в данной ОС?   -  person Umashankar    schedule 19.02.2014
comment
Это не вопрос программирования. Попробуйте cs.stackexchange.com.   -  person Raymond Chen    schedule 19.02.2014


Ответы (1)


В общем, современные операционные системы на x86 используют пейджинг, а не сегментацию. Это означает, что базовый адрес сегментных регистров установлен на ноль, а предел сегмента установлен на максимум. Пейджинг используется для сопоставления виртуальных адресов с физическими адресами, что дает ОС точное управление адресным пространством процесса, защиту между процессами и защиту между привилегированным (ядром) и пользовательским адресным пространством. Сегменты по-прежнему используются в x86 для специальных целей:

  • для запуска устаревших операционных систем и приложений в виртуальной среде
  • для эффективного доступа к локальному хранилищу потока для каждого потока в многопоточном приложении (спасибо @ PaulA.Clayton за указание на это).

Microsoft Windows перешла от сегментации к модели памяти flat, linear в Windows 95.

http://technet.microsoft.com/en-us/library/cc751120.aspx

Windows 95 решает эту проблему, используя 32-разрядные возможности процессорной архитектуры 80386 (и выше) для поддержки плоской линейной модели памяти для функций 32-разрядной операционной системы и приложений на основе Win32. Модель линейной адресации упрощает процесс разработки для поставщиков приложений и устраняет потери производительности, связанные с архитектурой сегментированной памяти.

Для запуска старых приложений Win16 (Windows 3.1) в Windows 95 была запущена 16-разрядная виртуальная машина, на которой работали все приложения Win16. Более новые 32-разрядные приложения выполнялись в отдельных адресных пространствах с использованием механизма подкачки MMU.

Вот соответствующее описание по ссылке выше

введите здесь описание изображения

person amdn    schedule 19.02.2014
comment
FS и GS могут использоваться для предоставления базовых указателей (например, для локального хранилища потока или хранилища для конкретного процессора [на уровне ОС]). Они могут иметь ненулевое основание в x86-64, в то время как другие сегменты должны иметь нулевое основание. - person Paul A. Clayton; 20.02.2014
comment
@PaulA.Clayton - Очень хорошее замечание ... Я позволю себе обновить свой ответ вашей информацией, спасибо. - person amdn; 20.02.2014