(La siguiente respuesta supone un escritorio "moderno", un servidor o una plataforma integrada de gama alta (como teléfonos inteligentes y también sistemas cada vez más pequeños). Para los sistemas x86, moderno significa 386 y más. La siguiente respuesta también supone un SO "moderno", como casi cualquier Unix, o Windows desde 95.)
Esto no está sucediendo en el sistema operativo, está sucediendo en el procesador, específicamente en la MMU ( unidad de administración de memoria ) . La MMU admite el direccionamiento virtual, por lo que los bits que forman un puntero no indican directamente la ubicación física de los bits en la memoria.
En una MMU típica, cuando se desreferencia un puntero, la MMU divide los bits en dos grupos: los bits de orden superior constituyen el número de página y los bits de orden inferior constituyen la dirección dentro de la página. La mayoría de las máquinas de escritorio y servidor usan páginas de 4kB. La MMU busca el número de página virtual en una tabla llamada TLB (eso es lo que llamó los "mapas de memoria de proceso"). El TLB indica el número de la página física que corresponde a esta página virtual. La MMU luego obtiene los datos de la página física en la memoria.
Si el TLB no contiene una entrada para este número de página virtual en particular, la MMU notifica al procesador que se produjo un acceso no válido; Esto normalmente se llama una excepción.
Tenga en cuenta que no he mencionado el sistema operativo hasta ahora. Eso es porque toda esta operación es independiente del sistema operativo. El sistema operativo entra en juego porque configura las cosas de dos maneras:
El sistema operativo es responsable de cambiar las tareas. Cuando lo hace, como sospechaba, guarda el TLB actual y lo reemplaza por el TLB guardado para la siguiente tarea programada. De esa manera, cada proceso tiene un TLB, por lo que la dirección 0x123456
en el proceso X podría no apuntar al mismo lugar real en la RAM que esa misma dirección en el proceso Y, o simplemente podría no ser válida. Si un proceso intenta desreferenciar un puntero fuera de su espacio de direcciones, no alcanza el espacio de otro proceso, sino que no llega a ninguna parte .
El sistema operativo decide qué sucede cuando se genera una excepción. Puede terminar el proceso para hacer un acceso no válido a la memoria (falla de segmentación, falla de protección general, ...). Esta es también la forma en que se implementa el intercambio: el controlador de excepciones puede decidir obtener algunos datos del espacio de intercambio, actualizar el TLB en consecuencia y realizar el acceso nuevamente.
Tenga en cuenta que la MMU proporciona seguridad porque el proceso no puede cambiar su propio TLB. Solo el núcleo del sistema operativo puede cambiar los TLB. Cómo funcionan los permisos de cambio de TLB está más allá del alcance de esta respuesta.
Gilles 'SO- deja de ser malvado'
fuente