Как операционная система (предпочтительно Linux) узнает, что вы получили доступ к области памяти, к которой у вас нет прав?
Этот вопрос был вдохновлен этими чертовыми указателями! Я вижу это так: все в компьютерах - это компромисс между скоростью, безопасностью, целостностью и тому подобным.
Я хорошо осведомлен о картах памяти в Linux, но мне кажется немного смешным, что ядро проверяет, находится ли местоположение, к которому вы пытаетесь получить доступ, в допустимом диапазоне КАЖДЫЙ РАЗ, когда вы делаете доступ. Похоже, это потратило бы так много времени, которое можно было бы потратить на то, чтобы сделать что-то более продуктивное (но, возможно, менее безопасное без проверки!). Или, может быть, он запоминает все недавние обращения и проверяет их при каждом тике аппаратного таймера? (Но это звучит небезопасно и, опять же, медленно.)
Я был удивлен, что этот вопрос, кажется, остается без ответа в любом месте. Это то, что я всегда задавался вопросом. Это заставляет меня думать, что есть раздел аппаратного обеспечения, который будет делать это от имени ОС, на хорошем, удобном уровне абстракции. Но все же, возможно, потребуется загрузка карт памяти следующих процессов при каждом переключении контекста, что опять-таки звучит медленно.
Так что да, во всяком случае, я продолжаю: как ОС обнаруживает нарушение памяти?
Спасибо