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