Beruflich Dokumente
Kultur Dokumente
Autor:Alejandro Furfaro
Modos de Funcionamiento
SMI# Modo Real Reset, o RSM Reset, o PE=0 Reset PE=1 SMI# LME=1, y PG=1 Todo un tema RSM Modo IA-32e SMI# RSM Modo Mantenimiento del sistema
Modo Protegido
VM=0
VM=1
Autor:Alejandro Furfaro
Nuestra PC es un entorno sumamente amigable (por lo general :) ) Como usuarios finales resolvemos la mayor parte de los problemas...
Usando
Wizards Clickeando sin mas en un cono De vez en cuando pulsando el botn de reset... :(
grupo de programadores con profundo conocimiento del procesador y de los detalles de hardware del sistema, construyen una pieza de cdigo fundamental llamada Sistema Operativo. Sobre el sistema operativo se sostienen todos los recursos de software que hacen la vida mas fcil a los usuarios y a los programadores de aplicaciones.
Autor:Alejandro Furfaro 4
Autor:Alejandro Furfaro
Se acuerdan?
Autor:Alejandro Furfaro
The choice
O
nos quedamos con el wizard que nos resuelve la vida sin tener que pensar... O nos decidimos a enfrentar las cosas como son realmente, y entenderlas, aprendiendo a, si es necesario, hacer todo desde cero y a pulmn.
Autor:Alejandro Furfaro
Y.....Para empezar nos inscribimos en una carrera que entre otras cosas estudia las plataformas de hardware y sus posibilidades (todas sus posibilidades!!). Es decir... elegimos la pldora roja :) La construccin de un Sistema Operativo es a veces una tarea gigantesca, como Linux, pero en ocasiones puede requerir un nmero mucho menor de rutinas que, aunque de muy bajo nivel, provean un conjunto de recursos base suficientes para administrar un sistema de menor tamao, como un embeeded system.
Autor:Alejandro Furfaro 8
FAQ's
Por supuesto. CLinux y otras implementaciones son la implementacin de Linux para Micro Controllers. PC's embedded basadas en procesadores IA-32 pueden aceptar un Linux cualquiera.
FAQ#2: Para que necesitamos saber esto entonces? No est todo hecho?
Si Torvalds lo hubiese pensado de esta forma hoy solo existira Windows como alternativa para nuestra PC. Y si estas cosas no se estudian en esta carrera donde?
Autor:Alejandro Furfaro
Conclusin: Hay que dominar la arquitectura del procesador para la programacin de sistemas. 9
conjunto de recursos de hardware que se requieren para esta difcil tarea y sus reglas de funcionamiento. Su dominio permite entender como funcionan las cosas en el mundo real. Y ese es nuestro trabajo En definitiva... Es la pldora roja.
Autor:Alejandro Furfaro
10
diseo del sistema de Proteccin en cualquier procesador se basa en los requerimientos de los sistemas operativos modernos parten de considerar la existencia de diferentes tareas o procesos correspondientes a diferentes usuarios, todas coexistiendo en el mismo sistema de cmputo.
11
Estos
Autor:Alejandro Furfaro
rea de memoria exclusiva para cada tarea para almacenar su cdigo y sus datos. (rea Local) rea de memoria comn a todas las aplicaciones, para que stas puedan acceder a datos globales del sistema, o a cdigo propio del Sistema Operativo de modo de permitir la comunicacin entre las aplicaciones. (rea Global). Cada tarea podr acceder nicamente a su rea Local y al rea Global, pero nunca podr acceder al rea Local de otra tarea. De este modo el Sistema Operativo garantiza la integridad (PROTECCION ;) ) del cdigo y de 12 los datos propios de cada tarea Autor:Alejandro Furfaro
RAM Capacidad de Gestin de memoria de cada tarea por el mtodo de Memoria Virtual
Capacidad de implementar Multitarea de manera rpida y segura. En cada momento la CPU ejecuta una tarea de la lista que mantiene, poniendo a su disposicin todos los recursos de hardware de la mquina, incluyendo la cantidad de memoria requerida por la aplicacin.
Autor:Alejandro Furfaro 13
Dejando de pensar como un programador de aplicaciones, y comenzando a pensar como el programador de un sistema operativo.
Autor:Alejandro Furfaro
14
Visin de la arquitectura para el programador de Sistemas Operativos Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 3
47 BASE 47 BASE 15 0 16 15 0 LIMITE
GDTR
DR0 DR1 DR2 0
31
LDTR
SELECTOR 15 0 47
DIRECCION LINEAL PUNTO PARADA 1 DIRECCION LINEAL PUNTO PARADA 2 DIRECCION LINEAL PUNTO PARADA 3 DIRECCION LINEAL PUNTO PARADA 4 ESTADO DE LOS PUNTOS DE PARADA CONTROL DE LOS PUNTOS DE PARADA
REGISTROS DE DEBUGGING
TR
SELECTOR 31 CR0 CR1 CR2 CR3 CR4
PG
31 TR6 TR7
CONTROL DE PRUEBAS ESTADO DE LAS PRUEBAS
RESERVADO USOS FUTUROS REG.DIR.LINEAL FALLO DE PAGINA REG.BASE DIRECTORIO DE PAGINAS DIFERENTES BITS DE CONTROL
REGISTROS DE CONTROL
Autor:Alejandro Furfaro
15
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 3
Para poner al procesador en Modo Protegido todo lo que se requiere es setear el bit PE, (bit 0 del registro CR0).
31 30 29 18 16 5 4 3 2 1 0
PCN GDW
A W M P
N E T E MP E T SMP E
Es un lamentable error considerar que esto es todo lo que hay hacer. Setear PE es solo el principio. De hecho el siguiente programa funciona sin problemas. Veamos...
Autor:Alejandro Furfaro 16
Modo Protegido
Gestin de la memoria
SMI# Modo Real Reset, o RSM Reset, o PE=0 Reset PE=1 SMI# LME=1, y PG=1 Todo un tema RSM Modo IA-32e SMI# RSM Modo Mantenimiento del sistema
Modo Protegido
VM=0
VM=1
Autor:Alejandro Furfaro
18
Acceso a la memoria en MP
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 3
Para acceder a la memoria, los programas seguirn trabajando con segmentos, del mismo modo en que lo hacen en Modo Real. La diferencia est en la informacin que se necesita en un entorno protegido para definir un segmento:
Direccin a partir de la cual comienza el segmento. La llamamos Direccin Base. Base Tamao del segmento. Intel lo denomina Lmite. Lmite Permisos de acceso al segmento: Read Only, Cdigo/Datos, y dems caractersticas que ahora sern rigurosamente chequeadas. Los denominaremos Atributos.
Autor:Alejandro Furfaro
19
Acceso a la memoria en MP
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 3
segmento
01F20000
Autor:Alejandro Furfaro
Descriptores de Segmento
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 3
En Modo protegido, la informacin necesaria para definir (describir) un segmento se almacena fuera del procesador en la memoria RAM.
La estructura que define un segmento se denomina descriptor. Los descriptores se agrupan en tablas.
31 24 23 20 19 16 15
Lmite 19-16
Campos del Procesador 80286 Campos del Procesador 80386 y posteriores (IA-32)
Autor:Alejandro Furfaro
21
Selectores de Segmento
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 3
En modo real los registros de segmento contenan toda la informacin necesaria para definir el segmento. En Modo Protegido los registros de segmento siguen conteniendo informacin necesaria para acceder al segmento, pero esa informacin se utiliza ahora para ubicar en la memoria del sistema, al descriptor del segmento a acceder. Por tal motivo al contenido de un registro de segmento, en Modo Protegido se lo denomina Selector. Selector Esta denominacin se extiende al Modo Real ya que siempre un registro de segmento selecciona con su selecciona contenido a un segmento determinado en memoria.
15 14 13 12 11 10 9 8 7 6 5 4 3 INDEX Formato de un Selector
Autor:Alejandro Furfaro 22
2 TI
0 RPL
15 14 13 12 11 10 9 8 7 6 5 4 3 INDEX
TI=1 rea de memoria exclusiva de cada tarea para almacenar su cdigo y sus datos. (rea Local) Local Decriptor Table (LDT)
2 TI
0 RPL
56 48 40 32 24 16 8 0
Selector Nulo
56 48 40 32 24 16 8 0
rea de memoria comn a todas las tareas, para que stas puedan acceder a datos globales del sistema, o a cdigo propio del Sistema Operativo (Base de modo de permitir la comunicacin entre las aplicaciones. (rea Global).
23
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 3
INDEX
31 24 23
0 RPL
Base 31-24
8 * INDEX GDTR
Lmite Direccin Base
23-16
Lmite 0-15
Autor:Alejandro Furfaro
24
LIMITE + 1
Translacin de direccin lgica a lineal (Selector con Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 3 TI=1) Ref: Intel 64 and IA-32 Architectures
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
INDEX
GDT
0 RPL
OFFSET
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
INDEX
1 RPL
CS, SS, DS, ES, FS, o GS
0
8 * INDEX GDTR
Lmite Direccin Base
Base 0-15
Lmite 0-15
LDT
LIMITE + 1
31
8 * INDEX
24 23
20 19
16 15
87
Lmite 19-16
Base 0-15
Lmite 0-15
25
Autor:Alejandro Furfaro
LIMITE + 1
Registros hidden.
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 3
Para evitar un acceso a la GDT o LDT cada vez que necesita un descriptor de segmento, el procesador mantiene un registro cach invisible por cada registro cuyo contenido sea un selector. Esos registros no son accesibles ni siquiera al programador del S.O.
CS SS DS ES FS GS TR LDTR
Autor:Alejandro Furfaro
Base + Lmites + Atributos Base + Lmites + Atributos Base + Lmites + Atributos Base + Lmites + Atributos Base + Lmites + Atributos Base + Lmites + Atributos Base + Lmites + Atributos Base + Lmites + Atributos
26
Direccin lineal
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 3
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
31
INDEX
TI
RPL
OFFSET
Tabla de Descriptores
Descriptor de Segmento
31
Direccin Base
31
Direccin Lineal
La Direccin Lineal recibe ese nombre por ser la salida de la Unidad de Segmentacin un espacio contiguo y consecutivo de direcciones de memoria 27
Autor:Alejandro Furfaro
Descriptores de Segmento
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 3
0 1
ED W E C 7 P R 6 5 DPL 4 S 3 2 1 TIPO 0 A
D/B
AVL
31
Direccin n+4 Direccin n
24 23 20 19 16 15
Atributos Lmite 19-16
Base 31-24
Descriptor de Segmento
Autor:Alejandro Furfaro 28
Cuando el Bit S es 0, el descriptor se denomina descriptor de sistema. En ciertos casos, el descriptor corresponde a un segmento para uso del sistema operativo. En otras ocasiones es simplemente un mecanismo que utilizar el Sistema Operativo.
Autor:Alejandro Furfaro
29
Modelos de Memoria
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 3
No Presente
Datos y Pila
Tanto el Sistema Operativo como las aplicaciones 0 tienen acceso a un espacio de 4 Gbytes no segmentado. Se evitan las excepciones por exceso en el lmite de memoria ya que el lmite de todos los descriptores es FFFFFFFF. An si se accede a reas en las que no existe memoria fsica.
Autor:Alejandro Furfaro
30
Modelos de Memoria
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 3
No Presente
Datos y Pila 0
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 3
Modelos de Memoria.
CS SS DS ES FS GS
Atributos Lmite Direccin Base Atributos Lmite Direccin Base Atributos Lmite Direccin Base Atributos Lmite Direccin Base Atributos Lmite Direccin Base Atributos Lmite Direccin Base Atributos Lmite Direccin Base Atributos Lmite Direccin Base
Pila
Datos
Datos Datos
0
32
Autor:Alejandro Furfaro
Una GDT por cada procesador presente en el sistema Se almacenan en un array denominado cpu_gdt_table
Autor:Alejandro Furfaro
33
G 1 1 1 1
S 1 1 1 1
Type 10 2 10 2
DPL 3 3 0 0
D/B 1 1 1 1
P 1 1 1 1
Autor:Alejandro Furfaro
34
Segmentos para Advanced Power Management (APM ): El cdigo del BIOS usa estos segmentos, de modo que cuando el driver APM de Linux invoca funciones del BIOS para obtener el estado o configurar un dispositivo APM, usar estos segmentos de cdigo y datos. Segmentos para servicios Plug and Play (PnP ) del BIOS. Como en el caso previo, el cdigo del BIOS utiliza estos segmentos, de modo que cuando un driver PnP de Linux invoque funciones del BIOS para detectar recursos utilizados por dispositivos PnP, usar estos segmentos de cdigo y datos. 35
Autor:Alejandro Furfaro
Paginacin de Memoria
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 4
La segmentacin posee claras ventajas para proveer un entorno flexible en la programacin de aplicaciones. Para Administracin de la memoria por parte del sistema operativo, la variabilidad del tamao de los segmentos introduce complejidad en el diseo de un sistema de memoria virtual. Los sistemas operativos como UNIX desde su concepcin trabajaron la memoria en bloques de tamao uniforme. La Paginacin cumple con ese requisito.
Autor:Alejandro Furfaro 36
Estructura de la MMU
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 4
Direccin Lgica
Direccin Lineal
Direccin Fsica
T RPL I
Unidad de Segmentacin
Unidad de Paginacin
Memoria Fsica
La IA-32 introduce como una de las mejoras mas importantes a nivel de la arquitectura interna de los procesadores 80386 y subsiguientes, una Unidad de Gestin de Memoria que contiene una Unidad de Paginacin a continuacin de la Unidad de Segmentacin
Autor:Alejandro Furfaro
Paginacin de Memoria
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 4
En los primeros procesadores (hasta el Pentium Pro), el tamao de pgina es fijo: 4Kbytes. A partir del Pentium Pro cada tarea puede optar por tener pginas de 4 Kbytes, 2 Mbytes, o 4 Mbytes. Las pginas son contiguas y a diferencia de los segmentos no se solapan. El mximo tamao de un espacio lineal es 4 Gbytes
Autor:Alejandro Furfaro
38
El espacio Lineal se divide entones en 1.000.000 de pginas de 4 Kbytes c/u, o en 1000 pginas de 4 Mbytes, o en una combinacin de ambos tamaos. Se necesita un descriptor para cada pgina que especifique:
Direccin Base de la pgina: Se necesitan 20 bits (comienzan en mltiplos de 4K ya que no se solapa, de modo que los 12 bits menos significativos sern 0), o 10 bits en el caso de pginas de 4 Mbytes. Atributos. Del mismo modo que los segmentos No se requiere lmite ya que su tamao es fijo.
Tomando el caso de pginas de 4 Kbtes, a 4 bytes por cada descriptor y un milln de descriptores de pgina, se necesita una tabla de descriptores de pgina de 4 Mbytes. La primer PC 386 vena con 4 Mbytes de RAM. Evidentemente se necesita otro approach
Autor:Alejandro Furfaro 39
Directorio de Tablas de Pginas con 1.000 descriptores de tablas de pgina 1001 Tablas de 4 Kbytes c/u con 1.000 descriptores de pginas
Direccin Lineal
Memoria
Unidad de Segmentacin 10
CPU
CR0 CR1 CR2 CR3 CR4 31 0 31 0
Pgina de 4 Kbytes
31
Raz
Disponible
41
Descriptor de Pgina
31
12 11 10
6 0
5 A
G PS
4 P C D
3 P W T
2 U / S
1 R / W
0 P
Pgina Global (se ignora) Tamao de Pgina (0=4Kbytes) Reservado (poner en 0) Accedida Page Cache Desabled Page Write Through Usuario / Supervisor Read / Write Presente Descriptor de Tabla de Pgina de 4 Kbytes
Autor:Alejandro Furfaro 42
31
12 11 10
8 G
7 P A T
6 D
5 A
4 P C D
3 P W T
2 U / S
1 R / W
0 P
Pgina Global (se ignora) Page Table Attribute Index Dirty bit Accedida Page Cache Desabled Page Write Through Usuario / Supervisor Read / Write Presente Descriptor de Pgina de 4 Kbytes
Autor:Alejandro Furfaro 43
CR3
31 12 11 Base del Directorio de Tablas de Pgina 5 4 PCD 3 PWT 2 0
31 30 29 NW PG CD
18 AM
CR0
16 5 NE 4 ET 3 TS 2 EM 1 MP 0 PE
44
Autor:Alejandro Furfaro
WP
Desde el procesador Pentium Pro, se advirti que para los servidores de alta performance los 4 Gbytes de memoria fsica resultaran insuficientes. Se implementa PAE (Phisical Address Extension) Se habilita con el bit 5 del CR4. El procesador habilita 4 lneas de Address adicionales para direccionar 64 Gbytes de memoria fsica. El procesador soporta dos tamaos de pgina: 4 Kbytes y 2 Mbytes.
Autor:Alejandro Furfaro 45
CR4
31 15 14 13 12 11 10 VMXE SMXE 0 0 9 8 PCE 7 6 PGE MCE 5 PAE 4 PSE 3 DE 2 TSD 1 PVI 0 0 VME 0 0 0
46
Reservado (poner a 0)
OSXMMEXCPT OSFXSR
1
Para habilitar este modo 5 4 PCD 3 PWT
CR3
31 Base de la Tabla de Punteros a Directorios de Tablas de Pgina
Autor:Alejandro Furfaro
Direccin Lineal
Memoria
Unidad de Segmentacin
CPU
31
Pgina de 4 Kbytes
Raz
63 63 0 0 Tabla de Pginas
63
Directorio de Tablas de Pginas Page Directory Tabla de Punteros 4 Directory Entries (PDEs) a Directorio de Pointer Entries de Pginas (PDPTEs) Direccin Base de la Reservado Pgina Direccin Base de la Pgina Disponible
Autor:Alejandro Furfaro
31
Descriptor de Pgina
47
Direccin Lineal
Memoria
Unidad de Segmentacin
CPU
31
Pgina de 2 Mbytes
Raz
63 0
63
Directorio de Tablas de Pginas Page Directory Tabla de Punteros 4 Directory Entries (PDEs) a Directorio de Pointer Entries de Pginas (PDPTEs) Direccin Base de la Reservado Pgina Direccin Base de la Pgina Disponible
48
Autor:Alejandro Furfaro
31
Descriptor de Pgina
Autor:Alejandro Furfaro
49
Autor:Alejandro Furfaro
50
Permite manipular 64 Gbytes de memoria fsica. Si est disponible CPUID devuelve bit 17 de EDX seteado
Autor:Alejandro Furfaro
51
CR4
31 (63) 15 14 13 12 11 10 VMXE SMXE 0 0 9 8 PCE 7 6 PGE MCE 5 PAE 4 PSE 3 DE 2 TSD 1 PVI 0 VME 0
52
Reservado (poner a 0)
OSXMMEXCPT OSFXSR
0 1
CR3
31 (63) 12 11 5 4 PCD 3 PWT 2 Base del Directorio de Tablas de Pgina
Autor:Alejandro Furfaro
Direccin Lineal
Memoria
Unidad de Segmentacin 10
CPU
CR0 CR1 CR2 CR3 CR4 31 0 31 0
Pgina de 4 Mbytes
Raz
Disponible
53
Descriptor de Pgina
31
22
5 A
G PS D
4 P C D
3 P W T
2 U / S
1 R / W
0 P
Page Table Attribute Index Pgina Global (se ignora) Tamao de Pgina (1 = 4Mbytes) Dirty bit Accedida Page Cache Desabled Page Write Through Usuario / Supervisor Read / Write Presente Descriptor de Tabla de Pgina de 4 Mbytes
Autor:Alejandro Furfaro 54
PAGE = Es el rango de direcciones lineales mapeados dentro de esa pgina, junto con los datos contendidos por dichas direcciones (En la jerga, data chunk). Page Frame = Es el rea de memoria que contiene una pgina, por eso tambin se la puede encontrar bajo el nombre de physical page, o page container
Paging Unit. Convierte direcciones lineales en fsicas Extended Paging. A partir del pentium se tiene la posibilidad de definir pginas de 4Mbytes. Three-level paging para Procesadores de 64 bit.
Autor:Alejandro Furfaro 55
Paginacin
Paginacin Extendida
56
Paginacin en LINUX
Ref: Understanding the Linux Kernel 3erd. Ed. D. Bovet. Cap 2
Paginacin en LINUX
Ref: Understanding the Linux Kernel 3erd. Ed. D. Bovet. Cap 2
Autor:Alejandro Furfaro
58
Ref: Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 4
Direccin Lgica o puntero far Direccin Lineal 31 22 12 0 Directorio Tabla Offset Directorio de Tablas de Pginas PDE PTE Tabla de Pginas
Direccin Fsica
Direccin Lineal
Descriptor de Segmento
Pgina PAGINACION
59
Pentium Pro. Introduce el mecanismo conocido como Physical Address Extention (PAE).
Habilita la generacin de direcciones fsicas de 36 bits El procesador tiene los 4 pines adicionales Se administra mediante paginacin
Secuencia de habilitacin
4 Kbytes 2 Mbytes
60
Autor:Alejandro Furfaro
PTE pasa de 32 a 64 bits. Hay 512 PTEs, por tabla Page Directory Pointer Table
CR3 apunta a la Page Directory Pointer Table. Contiene los 27 bits mas significativos de la direccin forzando a esta tabla a comenzar alineada a 32 bytes
CR3
31 Base del Puntero a Directorios de Tablas de Pgina 5 4 PCD 3 PWT 2 0
Autor:Alejandro Furfaro
61
Modo Protegido
Gestin de interrupciones
SMI# Modo Real Reset, o RSM Reset, o PE=0 Reset PE=1 SMI# LME=1, y PG=1 Todo un tema RSM Modo IA-32e SMI# RSM Modo Mantenimiento del sistema
Modo Protegido
VM=0
VM=1
Autor:Alejandro Furfaro
62
En cualquiera de los modos de trabajo del procesador, las interrupciones se identifican mediante un nmero de un byte llamado tipo.
Acompaa al cdigo de operacin en la instruccin INT type, para el caso de las interrupciones por software, por ejemplo INT 80h Es provisto por el hardware en interrupciones que ingresan por el pin INTR del procesador. Est asociado al pin NMI (tipo 2) Est asociado a una instruccin (INTO, por ejemplo, genera una interrupcin de tipo 4).
Tiene 256 tipos diferentes de interrupcin. El sistema de interrupciones fundado por el 8086, es en este sentido idntico en sus sucesores, hasta los procesadores Core2Duo actuales.
Autor:Alejandro Furfaro 63
En modo protegido existe una tabla llamada IDT (Interrupt Descriptor Table), que a diferencia del Modo Real, no almacena vectores de interrupcin, sino que como su nombre lo indica almacena Descriptores. Esta tabla tiene nicamente 256 entradas, ya que esa es la cantidad de tipos de interrupciones diferentes que maneja el microprocesador.
Autor:Alejandro Furfaro
64
Registro IDTR
47 Direccin Base
17 16 Lmite
Las entradas de la IDT, corresponden a tres tipos de descriptores. En los tres caso se trata de descriptores de Sistema (Bit S=0 en el descriptor) No se puede definir en la IDT un descriptor de segmento de datos ni de cdigo. Los tipos de descriptor posibles en la IDT son: Interrupt Gate Trap Gate Task Gate
Autor:Alejandro Furfaro
65
16 15
8 7
0
Direccin n+4 Direccin n
P DPL 0 0 1 0 1 Descriprtor de Segmento de Puerta de Tarea 31 Offset 31-16 Selector de Segmento 16 15 8 7 Offset 15-0 0 P DPL 0 D 1 1 0 0 0 0
Descriprtor de Segmento de Puerta de Interrupcin 31 Offset 31-16 Selector de Segmento 16 15 8 7 Offset 15-0 0
Direccin n+4 Direccin n
P DPL 0 D 1 1 1 0 0 0
Descriprtor de Segmento de Puerta de Excepcin (o T rap) Campo Tipo. Predefinido para cada descriptor
Autor:Alejandro Furfaro
Procedimiento de Interrupcin
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 6
Puerta para Int n Puerta para Int 2 Puerta para Int 1 Puerta para Int 0 GDT o LDT
Offset 31-16
Selector de Segmento
P DPL 0 D 1 1 0 0 0 0
Offset 15-0
IDTR
Lmite Direccin Base
31
24 23
Base 31-24
20 19
16 15
87
Atributos
Base 23-16
Lmite 0-15
Autor:Alejandro Furfaro
67
Autor:Alejandro Furfaro
68
Fault: Excepcin que puede corregirse permitiendo al programa retomar la ejecucin de esa instruccin sin perder continuidad. El procesador guarda en la pila la direccin de la instruccin que produjo la falla. Traps: Excepcin producida inmediatamente a continuacin de una instruccin de trap. Algunas permiten al procesador retomar la ejecucin sin perder continuidad. Otras no. El procesador guarda en la pila la direccin de la instruccin a ejecutarse luego de la instruccin trapeada. Aborts: Excepcin que no siempre puede determinar la instruccin que la caus, ni permite recuperar la ejecucin de la tarea que la caus. Reporta errores severos de hardware o inconsistencias en tablas del sistema.
Autor:Alejandro Furfaro
69
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 6
31 Reservado
Autor:Alejandro Furfaro
EXT: External Event (bit 0): Se setea para indicar que la excepcin ha sido causada por un evento externo al procesador IDT: Descriptor Location (bit 1): ESP antes de transferir el control Cuando est seteado indica que el campo Segment Selector Index se al handler de refiere a un descriptor de puerta en Interrupcin la ID: Cuando est en cero indica que dicho campo se refiere a un descriptor en la GDT o en la LDT de la tarea actual. ESP despus de transferir el control TI: GDT/LDT (bit 2): Tiene significado cuando el bit anterior al handler de Interrupcin est en cero. Indica a que tabla de descriptores corresponde el selector del campo Indice. 0 GDT , 1 LDT (idntico significado que en el selector de segmento)
16 15
0 E X T
70
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 6
Autor:Alejandro Furfaro
71
Interrupciones en la PC
73
LOGICA DE CONTROL
BUS
DE
DATOS
INTERNO
RD IRQ0 WR A0 CS
IRQ1
INTERRUPT
PRIORITY RESOLVER
CAS0
CAS1 CAS2
INTERRUPT MASK
REGISTER (IMR)
SP/EN
74
8254 40h-43h
INTR INTA
Disponibles en los buses de expansin IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 IRQ0 IRQ1 INT IRQ2 IRQ3 INTA IRQ4 IRQ5 8259 Slave IRQ6 A0h-A1h IRQ7 SP/EN CAS0 CAS1 CAS2 Vcc Nombre de las lneas del Sub-sistema de Interrupciones de la PC IRQ8 IRQ9 IRQ10 IRQ11 IRQ12 IRQ13 IRQ14 IRQ15
Procesador 80x86
Data Bus
75
76
80x86
NMI
80x86
NMI
77
El 8259, presenta al procesador una interfaz de programacin a travs de dos direcciones de E/S.
La primer PC tena un solo PIC en las direcciones de port 20h y 21h. La PC AT 286, incluy un segundo PIC, ya que la PC original ya haba agotado la asignacin de IRQs, y seguan apareciendo nuevos dispositivos: Placas de red, placas de sonido, etc. Este PIC es accesible en las direcciones de port A0h y A1h.
Son una secuencia de entre dos y cuatro bytes que enva el procesador al 8259A antes de comenzar la operacin normal, a fin de configurarlo. A los efectos del PIC 8259, la secuencia de Inicializacin es una operacin atmica, es decir, que no puede dividirse El 8259 detecta la secuencia de inicializacin cuando recibe en la direccin de port par (A0 = 0), una palabra con el bit D4=1. Palabras de Comando de Operacin: Una vez inicializado el 8259A, estas palabras le definen diversas operaciones a realizar. Luego de la inicializacin, se pueden enviar en cualquier momento.
78
Modo Protegido
Sistema de Proteccin
SMI# Modo Real Reset, o RSM Reset, o PE=0 Reset PE=1 SMI# LME=1, y PG=1 Todo un tema RSM Modo IA-32e SMI# RSM Modo Mantenimiento del sistema
Modo Protegido
VM=0
VM=1
Autor:Alejandro Furfaro
80
Mecanismos de Proteccin
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 5
Cuando el procesador pasa a Modo Protegido se pone en funcionamiento la Unidad de Proteccin. Esta Unidad supervisa las operaciones internas del procesador para la decodificacin y ejecucin de las instrucciones, comprobando el cumplimiento de una serie de reglas que constituyen el entorno de proteccin necesario para implementar de manera eficiente la multitarea. Estas reglas cubren los siguientes aspectos:
Chequeo del Lmite de los segmentos. Chequeo del Tipo de los segmentos. Chequeo de los niveles de privilegio de segmentos y pginas. Restriccin del dominio de direccionamiento a las tareas. Restriccin de los puntos de entrada a los procedimientos. Restriccin en el uso del set de instrucciones.
81
Autor:Alejandro Furfaro
LIMITE DIRECCIO BASE (31-24) ATRIB (19-16) N BASE (15-0) n+4 DIRECCION n
ATRIBUTOS
LIMITE (15-0)
Descriptor De Segmento
En el
Bit D/B: Determina si el segmento es de 16 o 32 bits Bit ED: Expand Down. Indica el sentido de crecimiento del segmento. Importante en el
manejo de pilas
El valor del campo Lmite es el tamao del segmento menos 1, ya que su rango de valores posibles va desde 00000 a FFFFFh
Autor:Alejandro Furfaro 82
Segmentos con ED = 0.
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 5
00000000h
Una doubleword cuyo offset sea mayor que (Lmite efectivo 3) Una quadword cuyo offset sea mayor que (Lmite efectivo 7)
Lmite2 + 1
Lmite1 + 1
Un byte cuyo offset sea mayor que el valor del Lmite efectivo
Direccin Base
Sentido de incremento de los punteros de Direcciones Lmite1 Lmite2 Lmite2 > Lmite1
Cuando se est por alcanzar el lmite de un segmento se lo puede redimensionar aumentando el valor del Lmite (en la grfica, lmite1 a lmite2), sin necesidad de relocar segmentos. No se afecta al programa en ejecucin.
Autor:Alejandro Furfaro
FFFFFFFFh
83
Segmentos con ED = 1.
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 5
00000000h
Direccin Base Lmite2 +1 Lmite1 +1 Lmite2 < lmite1 Sentido de incremento del ESP
LIMITE DIRECCIO BASE (31-24) ATRIB (19-16) N BASE (15-0) n+4 DIRECCION n
ATRIBUTOS
LIMITE (15-0)
Descriptor De Segmento
Se toma en cuenta el bit S (System bit) de los atributos del descriptor, y en funcin de su valor, se comprueba el campo de cuatro bits subsiguiente
Autor:Alejandro Furfaro
85
No se permite cargar CS con selectores que en la GDT correspondan a descriptores de segmentos (S = 1) que no sean de cdigo No se permite cargar un selector de cdigo cuyo descriptor no tenga permiso de lectura en ningn otro registro de segmento (SS, DS, ES, FS, o GS) En SS solo se pueden cargar selectores que correspondan a segmentos con permiso de escritura. LDTR solo puede ser cargado con un selector de LDT (Bit S=0 y tipo = 0010b) TR solo puede ser cargado con selector de TSS (bit S=0 y tipos = 0001b, 0011b, 1001b, 1011b, para TSS de 16 bits, disponible y ocupado, y TSS de 32 bits disponible y ocupado respectivamente)
86
Autor:Alejandro Furfaro
Comprobaciones durante la ejecucin de instrucciones que acceden a segmentos cuyo selector ya est cargado.
No se puede escribir un segmento de cdigo No se puede escribir un segmento de datos con W=0 No se puede leer un segmento de cdigo si R=0
Autor:Alejandro Furfaro
87
Las instrucciones CALL far y JMP far solo pueden acceder a descriptores de segmentos de cdigo (conforming o no conforming), a puertas de llamada, puertas de tarea o Descriptores de TSS. LLDT debe tener como operando un descriptor de LDT LTR debe tener como operando un descriptor de TSS LAR debe tener como operando fuente un descriptor de segmento de cdigo, datos, TSS, LDT, puerta de tarea o puerta de llamada. LSL debe tener como operando fuente un descriptor de segmento de cdigo, datos, TSS, o LDT. Las entradas de la IDT deben ser puertas de interrupcin, de excepcin, o de tarea. De otro modo cualquier acceso a dicha tabla con, por ejemplo, la instruccin INT causar una excepcin de proteccin general.
Autor:Alejandro Furfaro 88
Cuando se ejecuta un CALL far o JMP far, se determina el tratamiento de la instruccin chequeando el campo tipo en el descriptor apuntado por el selector que est como operando
en la instruccin.
Si el tipo de descriptor corresponde a un segmento de cdigo, o una puerta de llamada, se ejecuta una llamada o un salto al segmento de cdigo indicado. Si el tipo del descriptor corresponde a un TSS o a una puerta de tarea, se ejecuta una conmutacin de tarea. El procesador automticamente controlar que el descriptor de segmento apuntado por la puerta de tarea corresponda a un descriptor de TSS
Autor:Alejandro Furfaro
89
Si en un call far el tipo de descriptor corresponde a una puerta de llamada o a una puerta de excepcin (trap) o de interrupcin que tengan como destino un handler de interrupcin o de excepcin, se controla que el descriptor de segmento definido en el descriptor de la puerta corresponda a un segmento de cdigo.
Cuando se retorna de una tarea anidada (mediante una instruccin IRET), el procesador controla que el campo
Cualquier intento de cargar un selector de segmento Nulo en los registros de segmento CS or SS genera una excepcin de proteccin general (#GP).
Se puede cargar un selector de segmento nulo en los registros DS, ES, FS, or GS. Sin embargo, al intentar acceder al segmento por medio del registro cargado con el selector de segmento nulo generar una excepcin #GP.
Cargar un registro de segmento de datos con un selector de segmento nulo puede resultar un mtodo til para detectar accesos a registros de segmento no utilizados o para prevenir accesos no deseados a segmentos de datos.
Autor:Alejandro Furfaro 91
Intel suele representar el modelo de proteccin en forma de anillos concntricos. Los mas internos tienen mayor nivel de privilegio Los segmentos se ubican en el anillo correspondiente de acuerdo con el valor del campo DPL de su descriptor. Uso propuesto por Intel: Intel Anillo 0: Kernel del S.O. 0 Anillos 1 y 2: Servicios del S.O. Anillo 3: Aplicaciones 3 Uso real en los Sistemas Operativos mas difundidos: difundidos Anillo 0: Kernel y servicios del 0 S.O. Anillos 1 y 2: No utilizados 2 Anillo 3: Aplicaciones 3
Autor:Alejandro Furfaro
o May
io ileg Priv
0 1 2 3
92
Niveles de Privilegio
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 5
Los accesos entre segmentos estn regidos por reglas que contemplan los niveles de privilegio.
Autor:Alejandro Furfaro
93
Niveles de Privilegio
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 5
Current Privilege Level (CPL): Nivel de privilegio que tiene el cdigo que est intentando acceder ya sea a un descriptor de segmento, una puerta de llamada o de tarea, etc. El procesador lo mantiene en el cache hidden del selector, ya que lo ley directo de la tabla de descriptores. Descriptor Privilege Level (DPL): Nivel de privilegio del segmento a ser accedido: Puerta de llamada, de tarea, TSS, o Descriptor de segmento de cdigo o datos. Requested Privilege Level (RPL): Es el valor que se escribe en los bits 0 y 1 de los selectores. Es derogable, ya que puede sobreescribirse por programa. El procesador lo compara con el CPL y si es numricamente menor, lo reemplaza por el CPL al momento de chequear el acceso. Si el RPL es mayor (numrico) que el CPL, el procesador usar el RPL. En suma, el procesador usa lo que se define
Autor:Alejandro Furfaro
94
Segmento de Datos / Puerta de Llamada / TSS: Indica el mximo valor numrico (mnimo nivel de privilegio) que debe tener el cdigo de una tarea para acceder a este segmento. Ej.: DPL=01 implica que se puede acceder solamente desde segmentos de cdigo con CPL=00 o CPL=01
Segmento de Cdigo No Conforming (sin utilizar puerta de llamada): Es el nivel de privilegio que debe tener el cdigo de una tarea para accederlo. Ej.: DPL=00 implica que solo los programas que ejecuten en segmentos con CPL=00.
Segmento de cdigo Conforming, o segmento de cdigo no Conforming accedido a travs de una puerta de llamada: Indica el mnimo valor numrico (mximo nivel de privilegio) que debe tener el cdigo que llam a la puerta de llamada para poder acceder al cdigo apuntado por sta. Ej.: DPL=10, indica que los programas de anillo 0 y 1 no pueden acceder a este segmento.
Autor:Alejandro Furfaro 95
Nivel 0
Segmento de Cdigo
Nivel 1
pop
push
Segmento de Datos
Nivel 3
Segmento De Pila
push pop
Segmento de Cdigo
Autor:Alejandro Furfaro
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 5
Nivel 0
Segmento de Cdigo
Nivel 1
Segmento de Cdigo
24 23
20 19 16 15
LIMITE
8 7
0 BASE (23-16)
BASE (31-24)
ATRIB (19-16) 1 00 1 1
111
BASE (15-0)
LIMITE (15-0)
Descriptor De Segmento
Nivel 2
call
Bit C = 1
Nivel 3
Segmento de Cdigo
Segmento de Cdigo
97
Puertas de Llamada.
conforming
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 5
Son un mecanismo especial para transferir el control desde un segmento de cdigo a otro de mayor nivel de privilegio, cuando se encuentra habilitado el Sistema de Proteccin del procesador.
Se basan en un descriptor de sistema (bit S=0), que debe residir en la GDT o en la LDT (nunca en la IDT)
Se acceden efectuando un CALL o un JMP a una direccin far (direccin lgica), en la que el selector corresponde a un descriptor de Puerta de Llamada, y el offset es ignorado por el procesador.
Autor:Alejandro Furfaro
98
Cantidad de parmetros a transferir por la pila (de tipo word por trabajar con segmentos de 16 bits)
0
Direccin n+4 Direccin n
2 Words
Llamada en un programa C
servicio (arg1,arg2)
Autor:Alejandro Furfaro
Puerta de Llamada:
db dd dw 9Ah ? PLL_Selector Selector
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 5
Cdigo para fabricar un acceso a Puerta de Llamada Requerido en la instruccin, aunque el procesador no lo usa
Offset Selector
Offset
Base Base
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 5
Stack del procedimiento llamado con la puerta ESP antes de invocar a la puerta de llamada
Parmetro 2 Parmetro 1
Autor:Alejandro Furfaro
101
Nivel 0
Selector De Puerta
Segmento de Cdigo No Conforming Puerta de Llamada Se Produce Cambio de stack Se Produce Cambio de stack Segmento de Cdigo
Selector De Puerta
Nivel 1
Selector De Puerta
Nivel 2
Nivel 3
Puerta de Llamada
Selector De Puerta
Selector De Puerta
Selector De Puerta
Puerta de Llamada
Segmento de Cdigo
102
Autor:Alejandro Furfaro
Nivel 0
Nivel 1
Segmento de Datos
Nivel 2
Nivel 3
Selector De Puerta
Puerta de Llamada
Segmento de Cdigo
103
Autor:Alejandro Furfaro
;Este programa ejecuta en un segmento de cdigo con DPL = 11 mov ax,219h ;ax=0000 0010 0001 1001 RPL
;el programador intenta acceder al segmento de Nivel de Privilegio 1 push ax db 9Ah ;Opcode Call Far dd ? ;offset se ignora dw PLL_Selector ;selector de PLL
Resolucin del punto de entrada a Nivel 0
Selector Offset Puntero far a Call Gate
Selector_a_romper
ESPnivel3
Offset Selector Offset
Base Base
Lmite
;Punto de entrada del programa de Nivel 0 (Offset ;que debe figurar en el descriptor de ;puerta de ;llamada) pushebp mov ebp,esp ;extrae selector de CS del requeriente. mov dx, word ptr [ebp+8] ;ajusta el nivel de privilegio del selector pasado ;como parmetro (con RPL=01), con el del CS de ;nivel 3, que es el privilegio del requeriente. arpl word ptr [ebp+10], dx ;lee selector ajustado (ahora RPL = 11) mov ds, word ptr [ebp+10] ;En cuanto realice el acceso al segmento, excepcin ;0Dh. El acceso no es posible. ;Solo debe manejarse el handler de la Interrupcin ;adecuadamente y regresar al programa origen en ;el nivel 3, con un cdigo de error.
Autor:Alejandro Furfaro
Se resuelve con al instruccin ARPL. Al ARPL igual que el bit conforming resuelve al acceso trabajando con el Nivel de Privilegio Efectivo
SSnivel3 ESPnivel3
Restriccin de Instrucciones
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 5
Existen instrucciones que, una vez en modo protegido, solo pueden ejecutarse en nivel de privilegio 0. Estas son:
LGDT - Cargar registro GDTR LLDT - Cargar registro LDTR LTR - Cargar registro TR LIDT - Cargar Registro IDTR MOV - si destino es un Registro de Control MOV - si destino es un Registro de Debug LMSW - Escribir en el Machine Status Word (parte baja de CR0) CLTS - Clear Flag Task-Switched en CR0 INVD - Invalidar Cach sin Write Back WBINVD - Invalidar Cach con Write Back INVLPG - Invalidar entrada de la TLB HLT - Parar el procesador..... =) RDMSR - Leer Model Specific Register WRMSR - Escribir Model Specific Register RDPMC - Leer Contador de Monitoreo de Performance RDTSC - Leer Time Stamp Counter
nivel de privilegio que debe tener la tarea en curso para acceder a la E/S. Por lo tanto, pueden ejecutarse IN, OUT, INS, y OUTS, desde esta tarea solo si CPL = IOPL
Autor:Alejandro Furfaro 106
Se combina con la Proteccin a nivel de segmentos, aportando granularidad al sistema de proteccin dentro de un mismo segmento. Al igual que en los segmentos los chequeos se realizan dentro de la ventana de decodificacin y ejecucin de la instruccin. De acuerdo al sistema de proteccin de pginas (reflejado en la estructura del descriptor de pgina) hay dos niveles: Usuario (bit U/S=0) y Supervisor (U/S=1), y el tipo de pgina puede ser de Lectura o Lectura/Escritura. Cualquier violacin al sistema de proteccin de pginas genera una Excepcin 0Eh definida por Intel como Page Fault (#PF), y rebautizada bajo el misterioso y tristemente familiar nombre de Error grave 0Eh en algunas implementaciones.... ;-)
107
Autor:Alejandro Furfaro
Los CPLs 0, 1, y 2 del sistema de proteccin de segmentos mapean en el nivel Supervisor del esquema de pginas. El CPL3, se corresponde con el nivel Usuario.
En el modo supervisor se accede por default a todas las pginas y en modo usuario solo a las que tienen en su descriptor el bit U/S = 1 A partir del 80486, el bit 16 del registro CR0, se utiliza bajo el nombre WP (Write Protect).
Cuando el procesador esta en Modo Supervisor, por default, accede a cualquier pgina con permiso de lectura escritura. (Se ignora la proteccin de escritura) Si es 1 impide al procesador escribir una pgina Read Only de nivel usuario desde cdigo que ejecuta en una pgina en Modo Supervisor .
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 5
Si genera una excepcin pro segmentacin no se genera la #PF. La proteccin a nivel de pgina no pisa a la proteccin a nivel de segmento. Paginar un segmento de cdigo fijando permisos de escritura en las pginas, no permitir escribir, ya que lo impedir el mecanismo de proteccin de segmentos.
En el caso de un segmento de datos con permiso de escritura, la paginacin permite definir diferentes permisos para cada pgina con lo cual podremos dividirlo en reas de lectura solamente y otras de lectura/ escritura.
Autor:Alejandro Furfaro 109
System Calls
API: Formato de una llamada para obtener un servicio del kernel System Call: requerimiento explcito cursado al kernel para resolver un servicio. La inversa no es necesariamente cierta. Algunas API resuelven directamente en Modo Usuario si pasar a Modo kernel para resolver el pedido (math.lib por ejemplo).
Modo Usuario
func () { int 80h }
Modo Kernel
system call: sys_func () ret_from_sys_call: iret handler de System Call del kernel sys_func () { }
func ()
Aplicacin Accede a una rutina Invoca Wrapper en la System Call librera standard libc
Autor:Alejandro Furfaro
nice( ) Cambia la prioridad esttica de un proceso convencional getpriority( ) Obtiene el mximo valor de prioridad esttica para un grupo o proceso convencional setpriority( ) Ajusta la prioridad esttica para un grupo o proceso convencional sched_getscheduler( ) Obtiene la poltica de scheduling de un proceso sched_setscheduler( ) Establece la poltica de scheduling y prioridad real time para un proceso sched_getparam( ) Obtiene la prioridad real time de un proceso sched_setparam( ) Establece la prioridad real time de un proceso sched_yield( ) Libera al procesador voluntariamente sin bloquearlo sched_get_ priority_min( ) Obtiene el mnimo valor de prioridad real-time para una poltica dada sched_get_ priority_max( ) Obtiene el mximo valor de prioridad real-time para una poltica dada sched_rr_get_interval( ) Obtiene el valor del time quantum para la poltica Round Robin sched_setaffinity( ) Establece la mscara de afinidad con CPU affinity de un proceso sched_getaffinity( ) Obtiene la mscara de afinidad con CPU affinity de un proceso Autor:Alejandro Furfaro 111
gettimeofday () Retorna un puntero a una estructura de tipo timeval, que contiene la cantidad de segundos transcurridos desde la medianoche de comienzo del 1ero. de Enero de 1970 (UTC), y el nmero de micro segundos transcurridos del ltimo segundo. ctime () Convierte el tiempo numrico de calendario obtenido por time () a una cadena de la forma ASCII "Wed Jun 30 21:49:08 1993\n alarm () Genera una seal SIGALARM transcurrido el tiempo en segundos que se le pasa como parmetro.
Autor:Alejandro Furfaro
112
Modo Protegido
Manejo de Tareas
SMI# Modo Real Reset, o RSM Reset, o PE=0 Reset PE=1 SMI# LME=1, y PG=1 Todo un tema RSM Modo IA-32e SMI# RSM Modo Mantenimiento del sistema
Modo Protegido
VM=0
VM=1
Autor:Alejandro Furfaro
113
t ie m p o TC TC TC TC TC TC
1 4 5 8
F r a m e d e e je c u c i n
M e m o r ia RAM
2 3 6
R e g is tro s ( C o n te x to )
C o n te x to T a re a 2
7
A d m in is t r a d o r d e Ta re a s d el S is t e m a O p e r a t iv o
C o n te x to T a re a 3
C o n te x to T a re a 4
Ta re a Ta re a Ta re a Ta re a ........ Ta re a
1 2 3 4 n
C o n te x to T a re a n
1. Expira el tiempo de ejecucin asignado por el procesador a la tarea 1 2. El procesador almacena en memoria el estado de mquina (contexto) de la tarea 1. 3. El procesador carga desde memoria el contexto de la tarea 2 tal como lo haba almacenado originalmente. 4. El procesador reasume la ejecucin de la tarea 2. 5. Expira el tiempo de ejecucin asignado por el procesador a la tarea 2 6. El procesador almacena en memoria el estado de mquina (contexto) de la tarea 2. 7. El procesador carga desde memoria el contexto de la tarea 3 tal como originalmente lo haba almacenado. 8. El procesador reasume la ejecucin de la tarea 3.
Autor:Alejandro Furfaro
114
Manejo de Tareas
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 7
Tarea: es una unidad de trabajo que un procesador puede despachar, ejecutar, y detener a voluntad, bajo la forma de:
La instancia de un programa (o, expresado en trminos del Sistema Operativo, proceso). Un handler de interrupcin. Un servicio del kernel (Ncleo del Sistema Operativo).
Espacio de ejecucin: Es el conjunto de segmentos de cdigo, datos, y pila que componen la tarea. En un sistema operativo que utilice los mecanismos de proteccin del procesador se requiere un segmento de pila por cada nivel de privilegio. Contexto de ejecucin: Es el conjunto de valores de los registros internos del procesador en cada momento. Para poder suspender la ejecucin de una tarea y poder reasumirla posteriormente, es necesario almacenar este contexto en el momento de la suspensin. Espacio de Contexto de ejecucin: Se compone de un segmento de memoria en el que el kernel del S.O. almacenar el contexto completo de ejecucin del procesador. Se lo denomina Task State Segment (TSS)
Autor:Alejandro Furfaro 115
El Sistema Operativo pondr a disposicin de cada tarea una Mquina Virtual. Se entiende por tal al subconjunto del universo de recursos del sistema que sern asignados a cada tarea:
CPU (% o rodaja de tiempo de ejecucin) Memoria (un conjunto de segmentos / pginas del total, de memoria instalada en el sistema) Acceso a dispositivos de E/S (a travs de mdulos de software escritos por el fabricante llamados device drivers)
No se incluyen en la mquina virtual los recursos hardware dependientes, ni algunas instrucciones que en un entorno de ejecucin Multitasking son para uso exclusivo del cdigo del Sistema Operativo. En cada momento la tarea activa posee entonces a su disposicin una Mquina Virtual, que salvo los recursos para los que la tarea no debe tener acceso, es una imagen de la Mquina Base.
Autor:Alejandro Furfaro 116
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 7
Segmento de estado de tarea (TSS). Descriptor de TSS Descriptor de Puerta de Tarea Registro de tarea Flag NT (bit 14 de EFLAGS)
Autor:Alejandro Furfaro
117
31 16 15 Es el lugar de memoria en el Base del Mapa de Bits de E/S que el S.O. Almacena el contexto de cada tarea. El tamao mnimo de este segmento es 67h. Se guardan los valores de SS y EDI ESI ESP para los stacks de nivel 2, EBP 1, y 0. El del nivel 3 ESP eventualmente estar en los EBX EDX registros SS:ESP. ECX EAX EL Flag T genera una excepcin EFLAGS de Debug cada vez que se EIP CR3 conmuta de tarea (Pentium Pro en adelante), si est en 1. ESP2 I/O Map Base Address: Offset ESP1 de 16 bits desde el inicio del ESP0 TSS hasta el inicio del Mapa de permisos de E/S
24 20 16 12 8 4 0
Autor:Alejandro Furfaro
118
24 23
64h
00h
Por default en Modo Protegido, una tarea que ejecuta con CPL=11 no puede ejecutar instrucciones de acceso a E/S (IN, OUT, INS, OUTS). El procesador utiliza el par de bits IOPL del registro EFLAGS, para modificar este comportamiento default, de manera selectiva para cada tarea. Para una determinada tarea con CPL=11, si desde el S.O. se pone el campo IOPL de Eflags en 11, se habilita el acceso a las direcciones de E/S cuyos bit correspondientes estn seteados en el Bit Map de permisos de E/S. As se habilita el acceso a determinados ports para determinadas tareas. En este caso el TSS mide mas de 104 bytes (su lmite ser mayor que 67h)
Autor:Alejandro Furfaro 119
24 23
Mapa de Bits de Redireccin de Interrupciones de Software (32 bytes) Base del Mapa de E/S
64h
00h
A partir del Pentium se incluye el Registro CR4, cuyo bit VME (Virtual 8086 Mode Extensions). Si VME = 0 en Modo Virtual 8086 el procesador responde a las interrupciones y excepciones como un 386 o un 486. Cuando VME = 1, salta el mecanismo y redirige las instrucciones a los handlers del entorno de ejecucin del programa 8086, de acuerdo con el valor de estos 120 bits. Autor:Alejandro Furfaro
Redireccin de Interrupciones
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 7
Autor:Alejandro Furfaro
121
Descriptor de TSS
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 7
24 23
2019
16
15 14 13 12 11
87
Base 31-24
Atributos
Base 23-16
Lmite 0-15
El Bit B (Busy) sirve para evitar recursividad en el anidamiento de tareas. Nos referiremos a l cuando analicemos el anidamiento de tareas. El Lmite debe ser mayor o igual a 67h (mnimo tamao del segmento es 68h, o 10310. De otro modo se genera una excepcin tipo 0Ah o TSS invlido
Autor:Alejandro Furfaro
122
TSS
Base del Mapa de Bits de E/S LDT Segment Selector GS FS DS SS CS ES EDI ESI EBP ESP EBX EDX ECX EAX EFLAGS EIP CR3 SS2 T
TR Selector
Lmite
GDT
Base
Base Base
Autor:Alejandro Furfaro
123
IDT
Base Base
Base Lmite
Descriptor de TSS
Puerta de Tarea
31
Si DPL=11 en un task gate, an desde una tarea con CPL 11, puede efectuarse una conmutacin de tareas. Este es otro mecanismo para acceder al kernel desde una aplicacin. Autor:Alejandro Furfaro
124
Despacho de Tareas
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 7
Por medio de una instruccin CALL Por medio de una instruccin JMP Mediante una llamada implcita del procesador al handler de una interrupcin manejado por una tarea. Mediante una llamada implcita del procesador al handler de una excepcin manejado por una tarea. Mediante la ejecucin de la instruccin IRET en una tarea cuando el flag NT (bit 14 del registro EFLAGS) es 1 para la tarea actual.
En cualquier caso se requiere poder identificar a la tarea. Se necesita un selector en la GDT que apunte a una puerta de tarea o a un Task State Segment (TSS). Este selector debe estar en la correspondiente posicin dentro de la instruccin CALL o JMP.
125
Autor:Alejandro Furfaro
Tareas Encadenadas
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 7
TR
Cuando se conmuta a una tarea mediante un CALL, una interrupcin, o una excepcin, el procesador copia el TR de la tarea actual en el campo Previous Task Link del TSS de la nueva tarea, y luego de completar el cambio de contexto, setea el bit NT del registro EFLAGS (bit 14). De este modo si la nueva tarea ejecuta en algn punto la instruccin IRET y el bit NT es 1, el procesador conmuta a la tarea anterior ya que tiene el selector de TSS de la tarea previa almacenado en el campo Previous Task Link del TSS de la tarea en ejecucin. En cambio si la conmutacin de tarea se efecte con un JMP no se afecta el flag NT ni se completa el campo Previous Task Link.
Autor:Alejandro Furfaro 126
El procesador utiliza el Bit Busy de un descriptor de TSS para prevenir la reentrancia en una tarea (esto ocasionara la prdida de los datos del contexto de ejecucin). Cuando se avanza en anidamiento de tareas mediante un CALL o una interrupcin, este bit debe permanecer seteado, en el descriptor de TSS de la tarea previa. El procesador generar una Excepcin de Proteccin General (0Dh) si se intenta despachar mediante un CALL o una Interrupcin una tarea en cuyo TSS est seteado el bit Busy. Esto no ocurre si la la tarea en cuestin se despacha con un IRET ya que es de esperar en esta condicin que el bit Busy est seteado. Cuando la tarea ejecuta IRET o bien mediante un JMP despacha una nueva tarea, el procesador asume que la tarea actual finalizar y se debe limpiar el bit Busy en su descriptor de TSS
Autor:Alejandro Furfaro 127
TSS de 16 bits
Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A: System Programming Guide, Part 1, Captulo 7
Por compatibilidad con el 80286 se manejan tareas de 16 bits. En eset caso el TSS tiene la siguiente estructura
Autor:Alejandro Furfaro
128
No hace Task Switch a travs del procesador. (lo realiza mediante cdigo) Porque mantiene entonces una TSS?
El procesador busca aqu, el stack de PL=00 cuando sube el privilegio de una tarea (ya sea por llamada al kernel, o por entrada de una interrupcin Si un programa que corre en Modo User, ejecuta IN o OUT, se consulta el par de flags IOPL en EFLAGS y el IO Map del TSS.
LDT Descriptor: uno genrico compartido por todos los procesos. No usa LDT.
Contiene un descriptor Null. Direccin base: Se almacena en la default_ldt. Lmite 7 Un proceso puede crear su propia LDT mediante la funcin del kernel modify_ldt( ).
129
Autor:Alejandro Furfaro
Descriptores de Sistema
Task
CPU#0_TSSD CPU#1_TSSD
CPU#n_TSSD
130
Autor:Alejandro Furfaro
Segmentos Thread-Local Storage (TLS) : Mecanismo que permite a las aplicaciones que hagan multithreading usar hasta tres segmentos conteniendo datos locales para cada thread. Las system calls set_thread_area( ) y
Modo Protegido
Diseo de un scheduler
Autor:Alejandro Furfaro
132
Construccin de un Scheduler
Base
Existen
Colocar Colocar
en la IDT una puerta de interrupcin para IRQ0 en la IDT una puerta de tarea para IRQ0
Autor:Alejandro Furfaro
Sched
IRQ0 IRQ0
Tarea 1
Tarea 2
Tarea n
Tarea 2
Tarea n
n Tareas n+1 Contextos (n tareas + scheduler) Conmutacin a tarea scheduler Event driven (IRQ0). La tarea queda interrumpida y su TSS con B=1 Conmutacin desde el scheduler a la tarea Autor:Alejandro Furfaro
Conmutacin desde la tarea r a la tarea r+1 desde el handler de la IRQ0, pero en el contexto de la tarea r.
134
Autor:Alejandro Furfaro
135
Autor:Alejandro Furfaro
136
Autor:Alejandro Furfaro
137
Autor:Alejandro Furfaro
138
Descriptor IRQ0
Autor:Alejandro Furfaro
139
Descriptor IRQ0
Autor:Alejandro Furfaro
140
Descriptor IRQ0
Selector de Segmento
Offset 31-16
Offset 15-0
Lmite 19-16
Atributos
Base 23-16
Base 0-15
Lmite 0-15
Offset 31-16
Offset 15-0
Lmite 19-16
Atributos
Base 23-16
Base 0-15
Lmite 0-15
Offset 31-16
Offset 15-0
Base 0-15
Offset 15-0
Offset 31-16
Autor:Alejandro Furfaro
145
Base 0-15
Offset 15-0
Offset 31-16
Autor:Alejandro Furfaro
146
Autor:Alejandro Furfaro
147
La variable next_task, se compone de Selector de TSS y un offset (el que finalmente ser descartado por el procesador)
Autor:Alejandro Furfaro
148
Selector de TSS
Offset 31-16
Offset 15-0
Autor:Alejandro Furfaro
149
Lmite 19-16
Base 0-15
Autor:Alejandro Furfaro
150
Lmite 19-16
10001001
Lmite 0-15
Base 0-15
Autor:Alejandro Furfaro
151
CS
EIP
Antes que nada debe guardar el contexto actual en el TSS referido por el selector que contiene TR. En este caso guarda el contexto en la TTS1
152
Autor:Alejandro Furfaro
CS
EIP
Se resuelve en la GDT
Autor:Alejandro Furfaro
153
IRQ0
Autor:Alejandro Furfaro
154
Descriptor IRQ0
Descriptor IRQ0
Selector de Segmento
Offset 31-16
Offset 15-0
157
Lmite 19-16
Atributos
Base 23-16
Base 0-15
Lmite 0-15
Offset 31-16
Offset 15-0
Base 31-24
Base 23-16
Base 0-15
Offset 15-0
Offset 31-16
Autor:Alejandro Furfaro
159
Base 31-24
Base 23-16
Base 0-15
Offset 15-0
Offset 31-16
Autor:Alejandro Furfaro
160
Se comienza a ejecutar el cdigo del scheduler. Contexto: Tarea 2 No hubo cambio de contexto
Autor:Alejandro Furfaro
161
Selector de TSS
Offset 31-16
Offset 15-0
Autor:Alejandro Furfaro
162
Lmite 19-16
Atributos
Base 23-16
Base 0-15
Lmite 0-15
Offset 31-16
Offset 15-0
Lmite 19-16
10001001
Lmite 0-15
Base 0-15
Autor:Alejandro Furfaro
164
CS
EIP
Antes que nada debe guardar el contexto actual en el TSS referido por el selector que contiene TR. En este caso guarda el contexto en la TSS2
Autor:Alejandro Furfaro
165
CS
EIP
Autor:Alejandro Furfaro
El EIP cuando se abandon la tarea 1 qued con el valor correspondiente a la siguiente instruccin del cambio de tarea, que se ejecut en el handler de IRQ0. Que instruccin sigue a la de cambio de tarea??
166
CS
EIP
Autor:Alejandro Furfaro
167
Autor:Alejandro Furfaro
168
Se ejecuta tarea 1
170
IRQ0
171
Descriptor IRQ0
Descriptor IRQ0
173
174
Selector de TSS
Lmite 19-16
Base 0-15
175
176
CS
177
La variable next_task, se compone de Selector de TSS y un offset (que finalmente ser descartado por el procesador)
Autor:Alejandro Furfaro
178
Selector de TSS
Offset 31-16
Offset 15-0
Autor:Alejandro Furfaro
179
Selector de TSS
Lmite 19-16
Base 0-15
Autor:Alejandro Furfaro
180
Selector de TSS
Lmite 19-16
10001001
Lmite 0-15
Base 0-15
Autor:Alejandro Furfaro
181
CS
Antes que nada debe guardar el contexto actual en el TSS referido por el selector que contiene TR. En este caso guarda el contexto en la TSSsched
182
Autor:Alejandro Furfaro
CS
Se resuelve en la GDT
Autor:Alejandro Furfaro
183
IRQ0
Autor:Alejandro Furfaro
184
Descriptor IRQ0
Autor:Alejandro Furfaro
185
Descriptor IRQ0
Autor:Alejandro Furfaro
186
Autor:Alejandro Furfaro
187
Selector de TSS
Lmite 19-16
Base 0-15
Autor:Alejandro Furfaro
188
Base 0-15
Autor:Alejandro Furfaro
189
CS
Autor:Alejandro Furfaro
El EIP cuando se abandon la tarea sched qued con el valor correspondiente a la siguiente instruccin del cambio de tarea, que se ejecut en el handler de IRQ0. Que instruccin sigue a la de cambio de tarea?? 190
CS
Autor:Alejandro Furfaro
191
CS
Autor:Alejandro Furfaro
Linux
Manejo de Tareas
Autor:Alejandro Furfaro
193
Process Preemption
Ref: Understanding the Linux Kernel 3erd. Ed. D. Bovet. Cap 7
Preemption.
Cuando un proceso entra en estado TASK_RUNNING, el kernel chequea su prioridad y la TASK_RUNNING compara con el corriente. Si su prioridad es mayor el proceso actual es interrumpido (preempted).
Cuando a causa de una interrupcin se debe despertar a un proceso (ponerlo TASK_RUNNING) TASK_RUNNING y su prioridad es mayor que la del proceso en curso, el kernel setea el bit current>need_resched y por lo tanto antes de salir de la interrupcin se llamar a la funcin schedule
194
Conmutacin de Procesos
Ref: Understanding the Linux Kernel 3erd. Ed. D. Bovet. Cap 3
Linux mantiene una nica TSS por cada CPU. A pesar del no uso de jmp far para conmutar no puede prescindir de al menos un TSS por cada CPU:
Al aumentar el nivel de privilegio de una tarea, el procesador busca en el TSS actual (cuyo selector contiene el registro TR), los valores de SS y ESP correspondientes al mayor nivel de privilegio.
Para acceder a E/S desde una tarea cuyo CPL no sea el adecuado debe consultarse el IO BitMap del TSS de la tarea.
Al usar un nico TSS por CPU, Linux debe actualizarle determinados campos en cada process switch.
Autor:Alejandro Furfaro
195
Conmutacin de Procesos
Ref: Understanding the Linux Kernel 3erd. Ed. D. Bovet. Cap 3
El contexto de hardware de cada tarea se almacena en una estructura del tipo thread en task_struct. task_struct
Esta estructura puede ser tomada por cualquier CPU presente en el sistema ya que contiene los datos que de guardarse en la TSS no podran ser tomados por otra CPU.
Observaciones:
Solo guarda los registros de propsito general estrictamente necesarios. El resto va al stack
Autor:Alejandro Furfaro
macro switch_to()
Ref: Understanding the Linux Kernel 3erd. Ed. D. Bovet. Cap 3
;la estructura thread ocupa el offset 484 dentro de task_struct %esp, 484(%eax) 484(%edx), %esp 480(%edx)
jmp__switch_to
Autor:Alejandro Furfaro 197
rutina __ switch_to
Ref: Understanding the Linux Kernel 3erd. Ed. D. Bovet. Cap 3
unlazy_fpu (prev_p) ;
Macro que devuelve el ndice a la CPU que est ejecutando el proceso (lo saca de thread_info->cpu).
smp_processor_id ( ) ;
Salva en la estructura thread los registros FS y GS (El kernel no los usa, pero las aplicaciones pueden usarlos.
movl %fs, 40 (%esi) ;esi apunta a prev_p -> thread movl %gs,44 (%esi)
rutina __ switch_to
Ref: Understanding the Linux Kernel 3erd. Ed. D. Bovet. Cap 3
Salva los valores de los debug registers, si el proceso al que se va a activar los haba utilizado.
if (next_p->thread.debugreg[7]){ loaddebug(&next_p->thread, 0); loaddebug(&next_p->thread, 1); loaddebug(&next_p->thread, 2); loaddebug(&next_p->thread, 3); /* no 4 and 5 */ loaddebug(&next_p->thread, 6); loaddebug(&next_p->thread, 7); }
Salva en el TSS de la CPU que corresponda los valores de IO BitMap, si prev_p o next_p tienen permisos customizados de E/S.
if (prev_p->thread.io_bitmap_ptr || next_p->thread.io_bitmap_ptr) handle_io_bitmap(&next_p->thread, &init_tss[cpu]);
Retorna
return prev_p; // El compilador genera este cdigo: // movl %edi,%eax // ret Autor:Alejandro Furfaro
199