В режиме совместимости 32 бит у современных ОС игнорируется сегментная адресация?

Привет, Тостер. Прочитал в инете, что современные ОС игнорируют сегментную трансляцию.
1. Насколько это верно для Linux и Win NT 10?
2. Пишут, что секции в PE заменяют сегменты при отображении образа. Получается вирт адреса секций ни в какие регистры не записываются при загрузке в память?
3. А если я пишу программу на ассемблере, используя регистры для этой селекторной трансляции, то мое приложение не будет корректно выполнено в такой системе или как это разрешается?
  • Вопрос задан
  • 664 просмотра
Пригласить эксперта
Ответы на вопрос 1
Aquarius-Michael
@Aquarius-Michael
Программист и железячник
1. Да, современные операционные системы игнорируют сегментную организацию в пользу плоской модели памяти, разбитой на страницы. Но оставили пару сегментов для виртуальных машин. Этим дело и ограничивается. Сегментная организация памяти была хороша в те времена, когда нужно адресовать память больше, чем позволяет 16-разрядный процессор. К тому же плоская модель память удобней и проще для переносимости приложений в различные архитектуры.
2. PE -- это, по сути, структура самой программы при загрузке, указывает операционной системе, что и куда размещать в памяти и что подгрузить. Что-то вроде таблицы трансляций.ae48911f15de4bf69ff19d90dd786df2.jpg
В Linux используется ELF-формат, если не ошибаюсь.
3. Для гарантированной работы приложения в системе обычно используют соглашения и рекомендации. В 32-разрядной системе ещё можно получить к ним доступ. Но лучше их не трогать. Так как никто не знает последствия. Но на уровне системного программирования знание может быть очень полезным, особенно в сфере безопасности. А вот в 64-разрядной системе они выключены кроме пары сегментных регистров для контекста.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы