Я озадачен тем, как Linux может иметь так много сегментов, и у него все еще может быть проверка границ. Насколько мне известно, современные процессоры имеют несколько сегментов регистров данных (код, данные и т. Д.).
Но у Linux есть несколько собственных сегментов: стек, BSS, куча, код, глобальные переменные и многие другие (особенно, если куча большая и состоит из множества сегментов). Не у каждого процессора достаточно регистров для отслеживания всех этих сегментов.
Если я не ошибаюсь, Linux сохраняет каждый сегмент на отдельной странице, так как же он может предотвратить чтение или запись одной из этих страниц за пределами границ?
Мои единственные возможные объяснения: Linux:
- выполняет ручную проверку при каждой записи
- размещает все страницы близко друг к другу таким образом, чтобы их можно было отслеживать с помощью нескольких регистров