На практике современное оборудование (например, ПК x86-64, планшеты ARM, ...) больше не использует базовый и лимитный регистры (а i286 сделал), но имеет MMU .
Подробнее о MMU , подкачки , ошибка сегментации , виртуальная память , виртуальное адресное пространство и Операционная система: три простых компонента (свободно загружается)
Но каковы некоторые примеры того, когда запрошенный адрес будет фактически находиться за пределами назначенного пространства памяти программы?
Любой вид ошибки сегментации в пользовательском пространстве , в частности разыменование указателя NULL
(или некоторой «неинициализированной» переменной указателя, которая содержит случайную комбинацию битов вне адреса пространство). Такие ошибки распространены в программах на C (в пространстве пользователя). Для упрощенного примера:
int *ptr = NULL;
/// some long code or execution which does not change the `ptr` value
*ptr = 34; // SEGMENTATION FAULT
Коду ядра следует доверять, и он не получает ошибки сегментации (по гипотезе). Неправильное поведение кода ядра и разыменование неверного адреса может привести к сбою компьютера.
(на практике большие ядра, такие как Linux, имеют некоторый код, который может «частично» обрабатывать ошибки сегментации в некоторых частях ядра, например, в некоторых драйверах; но общая идея заключается в том, что коду ядра следует доверять и без ошибок).
Кстати, в вашем вопросе нет упоминания DMA (но ваши комментарии есть). На практике DMA управляется только ядром (например, для ввода-вывода физического диска), который перед настройкой и запуском гарантирует, что все адреса блоков действительны (и разбиты на страницы). в). Поэтому на практике неправильных адресов в DMA никогда не бывает (в зависимости от аппаратного обеспечения DMA может использовать физические или виртуальные адреса). В более общем смысле ожидается, что ядро 1048 * позволит избежать ошибок, таких как ошибка сегментации или другие виды неправильных адресов: пространство пользователя может иметь неправильные адреса (ядро создает ошибки сегментации, когда это происходит, и при Unix дает некоторый SIGSEGV
сигнал приложению), но пространство ядра должно быть доверенным кодом, использующим только хорошие адреса.