Cuando sucede un fallo de página, la rutina shtl_trap_handler
lo recibe justo después de su ocurrencia. Ésta se limita a redirigir
el trap hacia el portal especificado por la aplicación para su
tratamiento. En este caso, el DMM habrá instalado un manejador para
el suceso de fallo de página de tal modo que la rutina
dmm_pg_fault recibirá el de fallo de página siempre que este
ocurra.
Esta rutina extrae la información útil suministrada por el hardware (dirección virtual del fallo y causa del mismo) y ejecuta un algoritmo como el que se puede ver en la figura 3.30.
Como puede verse, en cualquiera de los casos que requieren tratamiento (entradas remotas no referenciadas, entradas inválidas y violación de protecciones) se eleva un upcall al usuario. Es éste el que toma el control. Nótese que el upcall se envía a un portal que podría estar servido por cualquier aplicación.
Puesto que el DMM no se encarga en modo alguno ni del control de concurrencia ni del suministro de protocolos de coherencia de memoria, es obvio que es la aplicación la que debe contemplar estos aspectos. Habitualmente, el usuario utilizará abstracciones de más alto nivel que deberán solventar estos problemas del modo más adecuado para la aplicación.
Como ejemplo de lo que acabamos de decir, un servicio de memoria distribuida compartida (implementado a nivel de aplicación) que suministrase una semántica de compartición estricta podría retener los restringir las protecciones de las traducciones instaladas (en las DTLBs involucradas) para suministrar una semántica de un-escritor/múltiples lectores (bastaría con asegurar que o bien todas las traducciones son de sólo de lectura o bien existe una traducción de lectura/escritura y el resto están invalidadas).
Otro ejemplo sería el de aplicaciones que trabajasen cooperativamente (confiasen las unas en las otras) de tal modo que cada una avisase al gestor de memoria distribuida compartida antes de leer o escribir en una zona de memoria determinada. En éste caso no sería necesario alterar las traducciones y bastaría con copiar en demanda aquellas zonas de memoria que son escritas, de suerte que el resto de las aplicaciones puedan leer los datos escritos tras avisar al gestor de memoria de la lectura que van a efectuar.