ejemplos modo protegido.pdf

Vista previa de texto
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
En el 80286 el TSS es de 16 bits y por compatibilidad se puede
utilizar en todos los procesadores actuales. El TSS de 16 bits se
puede encontrar en los manuales de Intel, pero no es recomendable
usarlo, ya que muy comúnmente se usa la parte alta de los registros y
éstos no son almacenados en el TSS de 16 bits.
El Task State Segment es toda la información que almacena el
procesador de cada tarea. Es probable que en el caso de tratarse de un
sistema operativo, el mismo desee almacenar algunos datos extras
además de esta información. Por ejemplo, los sistemas operativos
almacenan el PID (Process ID), el PPID (Paretn Process ID) y muchos
otros datos de importancia, según la estructura que tenga el sistema
operativo y cómo esté diseñado.
Los campos mínimos que utiliza el TSS (que son necesarios por el
procesador) son los siguientes:
- Previous Task Link: contiene el selector de la tarea por la que
fue llamada, en caso de haber saltado a ésta con call, mediante
una interrupción o excepción.
- SS0:ESP0,SS1:ESP1,SS2:ESP2: almacena las pilas de los
distintos niveles de privilegios (0, 1 y 2). Todavía no se han
estudiado niveles de privilegio, sin embargo se puede adelantar
que los niveles son 4 y que la idea es separar las aplicaciones
del kernel, de modo que, si una aplicación falla el sistema
operativo podrá seguir funcionando correctamente. Basta con
reiniciar la tarea que falló. Siendo la pila el espacio donde se
almacenan datos importantes, como las variables locales, es
importante separar la pila de cada nivel de privilegio, evitando
que una aplicación, por error o por mala intención, tenga acceso
a la pila de otro nivel.
- CR3: tabla de entradas de la paginación. Indica la posición
física de la PDE (Page Directory Entry).
- EIP: desplazamiento de la próxima instrucción a ser ejecutada
por el procesador en esta tarea.
- EFLAGS: EFLAGS.
- EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI: almacena los 8 registros de
propósitos generales.
- ES,CS,SS,DS,FS,GS: almacena los 6 selectores.
- LDT Segment Selector: almacena el selector de la LDT.
- T: Trap Bit, genera una excepción de debug al saltar a una tarea
con este bit seteado.
- I/O Map Base Address: Indica a partir de qué offset se encuentra
el mapa de bits de entrada/salida. Sirve para dar a una tarea
acceso únicamente a ciertos puertos. El IO Map debe finalizar
con un byte en 0ffh que debe estar fuera del límite del TSS.
Como se deduce de su nombre, el TSS es un segmento donde se almacena
el estado de una determinada tarea. Los TSS se direccionan a través de
un descriptor de tipo TSS-32bits.
Repasando el ejemplo 2 se puede ver que existen dos tipos de
descriptores de TSS de 32 bits:
1
1
0
0
0
1
1
1
32-Bit TSS (no ocupada)
32-Bit TSS (ocupada)
La diferencia es que uno está ocupado y el otro no. El que esté
ocupado implica que la tarea a la cual hace referencia está en
ejecución. Dado que las tareas NO SON REENTRANTES, si se trata de
