Ошибка сегментации происходит из-за того, что аппаратное обеспечение (модуль управления памятью) определяет, что у вас нет доступа к региону, и выдает исключение. ОС получает это исключение и решает, что с ним делать; в этих случаях он понимает, что вы делаете незаконный доступ, и убивает ваше приложение из-за ошибки сегментации.
Тот же механизм, как реализован своп; ОС может восстановить, что у вас do есть доступ к памяти, но она сейчас на диске. Затем он загружает память с диска и позволяет продолжить выполнение вашей программы.
Однако вся эта схема защиты памяти имеет достаточное разрешение только для страниц памяти, например 4 Кб одновременно. Таким образом, MMU не может защитить вас от каждого небольшого перебора, который вы можете сделать. Существуют такие инструменты, как ElectricFences, которые заменяют malloc и free и используют преимущества MMU, но они предназначены только для «выборочных проверок» ... они хороши для отладки, но вы не захотите работать так всегда. 1007 *