Lo que hace este código es acceder al bloque de memoria especificado por los parámetros ptr y size en un patrón inusual: lee el byte cero, luego el byte en un desplazamiento de 16 páginas, luego el byte uno, luego un byte en un desplazamiento de 16 páginas más uno, y así sucesivamente, alternando entre un byte y su contraparte 16 páginas adelante.
Este patrón de acceso específico en Windows 95 derrotó al algoritmo de detección de "exploración secuencial de memoria".
Recordemos que las computadoras en la era de Windows 95 tenían 4 MB de RAM. Suponga que estuvo trabajando en un documento durante mucho tiempo. Finalmente, ha terminado y cierra la ventana o la minimiza. Boom, ahora su escritorio está visible y el mapa de bits del fondo de pantalla debe ser paginado. Si su pantalla es 1024 × 768 a 16 bits por píxel, eso equivale a 1,5 MB de memoria. Paginar en 1.5 MB de memoria significa que el mapa de bits significa eliminar 1.5 MB de memoria que se usa para otras cosas, y eso es mucha memoria para una máquina que solo tiene 4 MB para trabajar (especialmente porque gran parte de esos 4 MB pertenecen a cosas que no es elegible para ser paginado). El fenómeno que vimos fue que volver a pintar su escritorio eliminaría la mayor parte de su memoria.
Y luego, lo siguiente que debe hacer es probablemente iniciar una nueva aplicación, que cubrirá el fondo de pantalla, por lo que la memoria del fondo de pantalla ya no será necesaria. Básicamente, purgamos toda la memoria en su sistema para manejar un gran bloque de memoria al que se accedió solo una vez.
El truco que usó Windows 95 fue observar su patrón de fallas de página, y si vio que estaba haciendo un acceso secuencial a la memoria, comenzó a marcar la memoria 16 páginas detrás del acceso actual como no accedido recientemente . En el caso de una exploración secuencial directa, esto significa que todo el búfer pasa por una ventana de memoria de 64 KB, independientemente del tamaño del búfer. Con este truco, un búfer de 4 MB termina consumiendo solo 64 KB de memoria, en lugar de usar toda la memoria de su sistema.
La Sys_PageIn
función específicamente elimina el detector de exploración secuencial al retroceder intencionalmente 16 páginas y acceder nuevamente a la página. Esto hace que se marque como utilizado recientemente , contrarrestando el no utilizado recientemente que había hecho el detector de exploración secuencial. Resultado: todas las páginas de memoria están marcadas como usadas recientemente y ya no son las principales candidatas para la paginación.