Linux многостраничные границы и сегменты процессора - PullRequest
0 голосов
/ 10 сентября 2018

Я озадачен тем, как Linux может иметь так много сегментов, и у него все еще может быть проверка границ. Насколько мне известно, современные процессоры имеют несколько сегментов регистров данных (код, данные и т. Д.).

Но у Linux есть несколько собственных сегментов: стек, BSS, куча, код, глобальные переменные и многие другие (особенно, если куча большая и состоит из множества сегментов). Не у каждого процессора достаточно регистров для отслеживания всех этих сегментов.

Если я не ошибаюсь, Linux сохраняет каждый сегмент на отдельной странице, так как же он может предотвратить чтение или запись одной из этих страниц за пределами границ?

Мои единственные возможные объяснения: Linux:

  1. выполняет ручную проверку при каждой записи
  2. размещает все страницы близко друг к другу таким образом, чтобы их можно было отслеживать с помощью нескольких регистров

1 Ответ

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

С появлением 64-битной Intel концепция аппаратных сегментов умерла смертью, которая должна была произойти в 1970-х годах.

Но у Linux есть несколько собственных сегментов: стек, BSS, куча, код, глобальные переменные и многие другие (особенно, если куча большая и состоит из множества сегментов).

Это педагогические концепции, которые имеют мало отношения к реальности за пределами реализации компоновщиков, но которые продолжают использовать плохие книги по операционным системам.

Стек - это просто память. Куча это просто память. Операционная система не знает, используется ли память для стека, используется ли она для кучи. Операционная система просто выделяет память для процесса с различными атрибутами (например, чтение / запись, только чтение, чтение / выполнение). То, что процесс делает с этой памятью, является его собственным делом.

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