ejemplos modo protegido.pdf

Vista previa de texto
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
+-------------+---+----+
- ÍNDICE: Indica qué entrada de la tabla se debe utilizar.
- TI (Table Indicator): Indica qué tabla se debe utilizar, la
GDT o la LDT.
- PL (Privilege Level): Indica qué nivel de privilegio tiene este
selector.
Los selectores pueden apuntar a una de dos tablas de descriptores, a
la GDT (Global Descriptor Table) o a la LDT (Local Descriptor Table).
Estas tablas, como el nombre indica, están formadas por descriptores.
Cada descriptor ocupa 8 bytes y consta de:
31
16 15
0
+----------+-+-+-+-+-----+-+-+-+-+----+-----------+
|
Base
| | | | |Limit|P|D P|#|Tipo|
Base
| 4
|
31:23 | | | | |19:16| | L |S|
|
22:16
|
+----------+-+-+-+-+-----+-+-+-+-+----+-----------+
+------------------------+------------------------+
|
Base 15:0
|
Limit 15:0
| 0
|
|
|
+------------------------+------------------------+
31
16 15
0
- Base 31:0: Base LINEAL del segmento, puede ser cualquier
posición de memoria LINEAL dentro de los 4Gb lineales
direccionables.
- D/B: Su función es variable. Si es un segmento de código indica
si el segmento es de 16 o 32 bits. Si es un segmento de datos de
pila, indica el tamaño de registros de pila, por ejemplo, si
está seteado, a pesar de que se pushee ax, decrementará el
puntero de la pila en 4 para mantenerla alineada en 4 bytes.
Si es un segmento de datos expand down, también indica si el
límite superior es 0FFFFh ó 0FFFFFFFFh.
- AVL: A disposición del programador del sistema.
- G: Granularidad. Como se puede ver, hay solamente 20 bits para
indicar el largo del segmento. Este bit cambia las unidades del
límite de bytes a 4096 bytes. Entonces, al estar G seteado y el
límite al máximo, se obtendrá un límite de 4Gb.
- Límite 19:0: Límite del segmento en cantidad de bytes o 4096
bytes (ver G).
- P: Bit de presencia. Indica si el segmento está presente en
memoria o si está en memoria virtual. La finalidad de este bit
es poder administrar la memoria virtual en segmentación. Hoy en
día se suele utilizar la paginación para la memoria virtual,
pero existe la posibilidad de utilizar la segmentación. Para
eso, al faltar memoria, se quita el segmento resetanado el bit
de presencia y se podrán utilizar todos los campos salvo el 5
byte para indicar en qué parte del disco se ha almacenado este
segmento. De esta forma se podrá usar la sección de memoria que
el segmento ocupaba. En el caso de que alguna aplicación o el
mismo sistema desee utilizar el segmento no presente, se
generará una excepción (ver ejercicio 4) que podrá cargar el
segmento donde sea correcto y continuar la ejecución normal del
programa.
- DPL: Nivel de privilegio del descriptor (Descriptor Privilege
Level).
- #S: Indica si se trata de un segmento de sistema o no (0
significa que es de sistema).
- TIPO: Si #S es 1, se trata de un segmento, entonces el campo
