¿Cómo sabe un sistema operativo (preferiblemente Linux) que ha accedido a una ubicación de memoria que no tiene permitido?
¡Esta pregunta fue inspirada por esos malditos punteros! La forma en que lo veo es: todo en las computadoras se trata de un compromiso entre la velocidad, la seguridad, la integridad y esas cosas.
Soy muy consciente de los mapas de memoria en Linux, pero me parece un poco ridículo que el núcleo verifique si la ubicación a la que está intentando acceder reside en un rango válido CADA VEZ que realice un acceso. Parece que desperdiciaría tanto tiempo, que podría gastarse haciendo algo más productivo (¡pero posiblemente menos seguro sin verificar!). ¿O tal vez recuerda todos los accesos recientes y los verifica en cada tic del temporizador de hardware? (Pero eso suena inseguro y, una vez más, lento).
Me sorprendió que esta pregunta parece no tener respuesta en ningún lado. Es algo que siempre me he preguntado. Me hace pensar que hay una sección de hardware que hará esto en nombre del sistema operativo, en un nivel agradable y conveniente de abstracción. Pero aún así, posiblemente requeriría cargar los siguientes mapas de memoria de procesos en cada cambio de contexto, lo que nuevamente suena lento.
Entonces sí, de todos modos, voy a hablar un poco: ¿cómo detecta un sistema operativo una violación de memoria?
Gracias