ejemplos modo protegido.pdf

Vista previa de texto
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
ej08.asm - paginación
Protected Mode by Examples – 1era Edición - Octubre 2004
Autor:
Mariano Cerdeiro
<m.cerdeiro@soix.com.ar>
http://www.soix.com.ar/links/mpbyexamples.html
compilar: nasm ej08.asm -o ej08.com
En este ejercicio se ejemplifica el funcionamiento del procesador con
la paginación habilitada. El programa funciona de modo similar a un
inicializador de un sistema operativo. Se comienza a ejecutar en modo
real, copia su código de 32 bits por arriba del mega + 64 Kbytes de
memoria, donde carga en el siguiente orden:
- GDT
- Código del programa
- PDE
- PTE
Donde PDE y PTE son tablas de paginación que se explican en los
párrafos siguientes. El ejercicio mediante la paginación deja un mapa
de memoria lineal de la siguiente forma:
Memoria
Base
00000000h
00001000h
00010000h
00011000h
00012000h
00013000h
00014000h
Lineal
Límite
00000FFFh
0000FFFFh
00010FFFh
00011FFFh
00012FFFh
00013FFFh
00412FFFh
Memoria Física
Base
Límite
00110000h 00110FFFh
--------- ----------------- --------00111000h 00111FFFh
00112000h 00112FFFh
00113000h 00123FFFh
--------- ---------
Descripción
GDT inicializada
GDT no inicializada
IDT no inicializada
Código de 32 bits
PDE
PTE
PTE’s no inicializadas
NOTA: Los límites en esta tabla hacen referencia a la máxima dirección
lineal, NO al largo del segmento.
Como se puede observar, se reservan 4 Mbytes de memoria lineales para
las futuras tablas PTE’s, pero esto no ocupa memoria física, ya que no
se puede direccionar ese espacio de memoria hasta no inicializarlo, al
igual que el espacio reservado linealmente para la GDT no inicializada
y la IDT no inicializada.
Una vez en esta situación, el programa inicializa memoria para la
pila. Como la pila es decreciente, apunta al final del área del
sistema operativo, lo más normal es a 1 Gb, 2 Gb, 3 Gb ó 4 Gb, en este
ejemplo el esp apunta a 3ffffffc, o sea, 4 Kbytes por debajo del Gb de
memoria.
Hay un punto que no se mencionó, pero que se deduce del párrafo
anterior: para este ejercicio se utilizan 2 segmentos, uno de código
de 32 bits y otro de datos flat, por lo que la base es 0 y el límite 4
Gbytes.
Paginación
La unidad de paginación se habilita seteando el bit PE (bit 31) del
cr0. Al habilitar la paginación, todas las direcciones, una vez
