OS X, gcc, x86, сегментация, разбиение на страницы, ошибка сегмента, ошибка шины - PullRequest
0 голосов
/ 11 июля 2011

В случае с osx, gcc, современная x86:

Как используется сегментация x86 по ч / б и ч / б пейджинг?

1 Ответ

1 голос
/ 11 июля 2011

По большей части 1 , оборудование сегментации не используется. В большинстве современных операционных систем все CS, DS, SS и ES указывают на всю память (базовый адрес 0, ограничение 4Gig). Каждый из них настроен на полный доступ ко всей этой памяти (CS-> execute, DS, ES, SS-> read / write).

Это означает, что практически весь реальный контроль доступа осуществляется с помощью пейджингового блока. Основная идея заключается в том, что страницы, доступные конкретному процессу, сопоставляются с этим процессом. Страницы, которые находятся в виртуальной памяти, отображаются, но помечены как отсутствующие, поэтому попытка их чтения / записи вызовет исключение; ОС считывает данные из файла подкачки в ОЗУ, помечает данные как имеющиеся и перезапускает инструкцию.

Что касается маркировки страниц, большая часть исполняемого кода будет помечена только для чтения и будет использоваться всеми процессами. Большая часть данных и стека будут помечены для чтения / записи и не будут переданы. В зависимости от конкретной системы в пространстве стека обычно устанавливается бит NX, чтобы предотвратить его выполнение.

Есть несколько других кусочков, которые немного отличаются. Например, большинство операционных систем (включая OS / X, если память служит) устанавливают защитную страницу стека - страницу в верхней части стека, которая не имеет доступа. Когда / если вы пытаетесь получить к нему доступ, ОС ловит исключение, выделяет другую страницу стекового пространства и перезапускает инструкцию. Это означает, что вы можете выделить (скажем) 4 мегабайта адресного пространства для стека, но выделить оперативную память только для примерно используемого пространства (очевидно, с шагом в размер страницы).

Аппаратное обеспечение также поддерживает "большие" (4 мегабайта) страницы. Они используются главным образом для отображения больших кусков непрерывной памяти, таких как часть памяти на видеокарте, которая непосредственно видна для процессора.

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


1 Windows (в отличие от большинства других систем) использует сегментацию минимально - она ​​устанавливает FS в качестве указателя на блок информации о потоках (TIB), который дает доступ к некоторой базовой информации о текущая тема. Это полезно (и используется), особенно в Windows для структурированной обработки исключений (и Vectored Exception Handling).

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