Story Transcript
Procesamiento con Multitarea
Técnicas Digitales III Ing. Gustavo Nudelman 2013
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Introducción •
Podemos definir como tarea, a código en ejecución al cual el sistema le asigna recursos especiales que hacen de que dicho código pueda definirse como una entidad.
•
Dichos recursos son: • Espacio de contexto de ejecución Segmento TSS
•
•
Un segmento TSS posee un descriptor de sistema asociado
•
Espacio de ejecución Paginas y/o segmentos asignados para código , datos y pila
•
Un mapa de I/O asociado que la tarea puede utilizar
Con estos recursos, el procesador puede ejecutar, detener y despachar esta instancia de código de manera controlada.
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Introducción a la conmutación de tarea
t1
t2
tn
t3
t1
Frame de Ejecución
TSSn
TSS2
TSS1 CPU Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Concepto de Maquina Virtual •
•
El programador de sistemas, pone a disposición de cada tarea: •
Un set de recursos de ejecución de la CPU
•
Una rodaja (Slot) de tiempo de CPU en el cual el set de ejecución es de uso exclusivo de la tarea.
•
Un conjunto de segmentos o páginas para uso de la tarea
•
Acceso a I/O controlado
Se conoce a este set de recursos, como una máquina virtual, que la tarea puede utilizar de manera discontinua en el tiempo.
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Estructuras y recursos asociados •
Segmento de estado de tarea (TSS) Se trata de un segmento especial de memoria donde se almacena el contexto de ejecución en el que quedo suspendida una tarea
•
Descriptor de TSS Es un descriptor de la GDT (del tipo sistema) Que “describe” al segmento TSS
•
Descriptor de puerta de Tarea Descriptor de la IDT que produce una conmutación de tarea cuando se invoca a la interrupción asociada
•
Registro de Tarea (TR) Es un registro de la CPU que apunta al descriptor de TSS de la tarea que se encuentra en ejecución.
•
Flag NT (bit 14 del EFLAGS) Indica anidamiento de tareas
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Estructura de la TSS en IA32 Su tamaño mínimo es de 104 bytes (67h) I/O Map Base Address: es el offset desde el inicio de la TSS hasta el inicio del mapa de I/O Cada bit del I/O MAP corresponde a un byte del sistema de I/O, y se habilita con un 0. El mapa no debe contener a todos los ports, ya que lo podemos limitar por el campo “límite” del descriptor El flag T sirve para generar una excepción de debug si está en 1. (Pentium en adelante)
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Mapa de permisos de I/O en la TSS
•
Existe un campo del registro EFLAGS llamado IOPL que determina el nivel necesario que debe tener un código (CPL) para poder acceder a instrucciones de I/O, y este campo solo puede ser alterado por el nivel 0.
•
Cuando una tarea no posee el nivel establecido en el campo IOPL del registro EFLAG, el sistema chequea el mapa de bit de la TSS.
•
Cada bit de este mapa representa al puerto en cuestión, y se establece el permiso con 0. Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Selección de una tarea por parte de la CPU
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Descriptor de TSS
•
El campo “Granularity” debe valer 0
•
Si la TSS no está correctamente definida, se obtendrá una excepción del tipo 0Ah (TSS Invalido) Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Despacho de tareas IA32 •
La maneras con la que el procesador puede realizar una conmutación de tareas son: •
Mediante la instrucción JMP
(Se ignora el offset)
•
Mediante la instrucción CALL
(Se ignota el offset)
•
Mediante un evento de interrupción/excepción para el cual se dispone de una puerta de tarea en la IDT Mediante la instrucción IRET estando el bit NT del registro EFLAGS en 1
•
•
Cualquiera de estos métodos cargara el selector TR con el nuevo descriptor de TSS, y esto producirá tanto la descarga del contexto de la tarea a abandonar, como la carga del mismo en la tarea a conmutar.
•
Luego de la conmutación de tarea, queda seteado el bit TS del registro CR0 (utilidad para punto flotante) Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Anidamiento de tareas (IA32)
•
Cuando se conmuta de tarea mediante un CALL, o mediante una puerta de tarea, el procesador copia el TR de la tarea actual en el campo “Previous Task Link” de la nueva tarea.
•
El bit Busy queda en 1 en ambas tareas anidadas
•
De esta forma, si la nueva tarea ejecuta en algún punto la instrucción IRET y el campo NT de EFLAGS está en 1, el procesador puede retomar la tarea previa gracias a que puede recuperar el selector de TSS del campo “Prevous Task Link”
•
La conmutación con JMP no produce ningún tipo de anidamiento Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Prevención de recursividad – Bit Busy •
Toda tarea en ejecución, o que haya quedado anidada, permanece con el bit “Busy” en 1.
•
Esto impide que se intente re-entrar en una tarea ocupada
•
El procesador genera una excepción de protección general si se intenta acceder a una tarea cuyo bit Busy se encuentra en 1.
•
La única excepción es acceder con IRET ya que esta es una condición esperada por el anidamiento.
•
Cuando se despacha una tarea con JMP, la CPU “Limpia” automáticamente el bit busy, ya que se asume el deseo intencional de abandonar la tarea.
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Protección en conmutación de tareas •
La CPU siempre chequea que el tanto el CPL de la tarea que va a ser abandonada como el RPL del selector de segmento de la nueva tarea, deben ser menor o igual al DPL del descriptor de TSS de la tarea que se va a conmutar.
•
Si se realiza conmutación mediante la instrucción IRET, no se controla el nivel de privilegio.
•
La CPU controla que la tarea a abordar, este disponible (bit busy) a excepción de cuando se conmuta con IRET
•
Se controla que la TSS tenga una tamaño mayor o igual a 104 bytes, y que esté dentro de una misma página (si se esta trabajando con paginación)
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Recursos no incluidos en la definición de contexto Intel •
Durante la evolución de la arquitectura IA32 se han incorporado recursos, que por razones de compatibilidad no se incluyeron en la TSS
•
El bit 3 de CR0 (Task Swiched) nos permite salvaguardar el contexto de x87 FPU/MMX/SSE/SSE2/SSE3/SSSE3/SSE4
•
Este bit es puesto a “1” cada vez que se realiza un cambio de tarea.
•
Permaneciendo en “1” ya comenzada la ejecución de la nueva tarea permite generar una excepción del tipo 7 (device-notavailable”), cuando se intenta ejecutar cualquier instrucción que involucre a estos recursos
•
El handler de esta excepción será entonces la oportunidad para resguardar y recuperar dicho contexto en una estructura propia del programador de sistemas, y luego “limpiar” el bit TS (instr. CLTS) Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Ejercicio teórico
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Planificación – El scheduler
Subtitulo o nombre del capitulo Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Universidad Tecnológica Nacional
Diseño de un scheduler •
Se denomina “Scheduler” a la parte del código que se utiliza para: Gestionar el tiempo de CPU entre todas las tareas que deban ser ejecutadas en base a métricas y prioridades.
•
Se trata que código que siempre se ejecuta a nivel Kernel.
•
Utiliza una base de tiempo (Generalmente el Timer tick)
•
Utiliza una base de datos o lista conteniendo las tareas que deben ser ejecutadas
•
Basado en las métricas e impulsado por la base de tiempo, es quien decide realizar la conmutación de tarea
•
Debe optimizar el uso del sistema de acuerdo a la política de diseño del sistema
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Métricas y políticas de scheduling T
t1
T
t2
Frame de Ejecución
tr
t1
t2
tr
Frame de Ejecución
• El scheduler reparte los tiempos de CPU dentro de un frame de ejecución • Las tareas pueden tener diferente asignación de tiempo dentro de un frame
• Las tareas “real time” deben tener un tiempo periódico asegurado dentro de cada frame
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Scheduler – Contexto •
Sea un scheduler que se ejecuta en el handler de la IRQ0 para gestionar un sistema de n tareas
•
A que tarea pertenece el scheduler ?
El scheduler es simplemente código del sistema que se ejecuta en el contexto de la tarea interrumpida Para pasar desde la tarea n a la tarea n+1, el scheduler se ejecuta en la tarea n
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Análisis para 2 tareas TR
TSS1 TSS2 CPU CPU
Se comienza a ejecutar el código del scheduler (contexto de la tarea 1)
Ejecutando tarea 1
------------------------------------------------------Jmp selTSS2:0 IRET
IRQ0
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Scheduler - Conclusiones •
El procesador nos provee los recursos para realizar el cambio de contexto.
•
Sin embargo las políticas y manejo de las métricas deben ser implementadas por el programador
•
Es por eso que además de la TSS se acostumbra a almacenar mas información para cada tarea.
•
Se aconseja que el scheduler disponga de un área de datos donde pueda almacenar estructuras ordenadas para la información de las tareas (Ej. Listas simplemente enlazadas)
•
No todas las tareas de un sistema pueden ser ejecutadas por el scheduller
•
El scheduler no es quien debe encargarse de activar la posibilidad de ejecución de una tarea Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Gestión del espacio de direccionamiento en multitarea •
Se trata de como poner páginas o segmentos a disposición de cada tarea.
•
Esto incluye áreas de código, datos, pila, y áreas compartidas
•
Si trabajamos con paginación activada, el hecho de cambiar el valor de CR3 al conmutar de tarea nos permite cambiar el esquema de paginación permitiendo: •
Tener diferentes tareas que utilicen diferentes páginas aunque se refieran al mismo espacio lineal
•
Tener páginas compartidas referenciando las mismas direcciones físicas en los diferentes esquemas de paginación
•
Tener protección entre tareas
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Ejemplo de diseño para 2 tareas (IA32-PAE) PTE(F) PTE (10h)
VIDEO
0xB8000
Cod Datos 2
0x10000
Cod/Datos 1
0xF000
PT2 PD2 PDPT2 PT1 PD1 PDPT1 Cod/Datos
0xE000
PTE (9) PTE (8) PTE (7) PTE (6) PTE (5) PTE (4) PTE (3) PTE (2) PTE (1)
PTE (0) PDE0 PDPTE0 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
0xD000 0xC000 0xB000 0xA000 0x9000 0x8000
Ejemplo de diseño s/protección (IA32-PAE) 0xB8000
PTE (D) PTE (C) PTE (B)
VIDEO
PTE (A) PTE (9) PTE (8) PTE (7) PTE (6) PTE (5) PTE (4) PTE (3)
Cod Datos 2
0xD000
PTE (2)
Cod/Datos 1
0xC000
PTE (1)
PT1 PD1 PDPT1 Cod/Datos
0xB000
PTE (0) PDE0 PDPTE0 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
0xA000 0x9000 0x8000
Lab: Tareas en IA32 • Presentación y análisis task32.asm
Subtitulo o nombre del capitulo Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Universidad Tecnológica Nacional
Tareas en IA32e
Subtitulo o nombre del capitulo Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Universidad Tecnológica Nacional
Introducción La evolución de los procesadores introdujo gradualmente nuevos recursos (registros de punto flotante, registros para operaciones empaquetadas, etc) Estos recursos no formaron parte del contexto (TSS) por razones de compatibilidad hacia atrás en IA32 La manipulación de estos recursos durante la conmutación de tarea debió realizarse por software ya que el procesador no brindó ningún mecanismo automático Debido a esta situación, los sistemas operativos decidieron definir su propia estructura de contexto, y solo utilizar la TSS para recuperar las pilas durante el cambio de nivel de privilegio.
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Cambios en 64 bits Se mantienen solo los conceptos de tareas y contexto Dicho contexto lo diseña el programador de sistemas – El procesador no ofrece una estructura de contexto manejable El diseño, construcción y manipulación de las estructuras de contexto son responsabilidad del programador de sistemas Entonces. . . . Existe laTSS ? La TSS cumple solamente la función de almacenar los punteros a pila para los cambios de nivel de privilegio. No se puede realizar un JMP a un selector de TSS. Esto provocaría una excepción 0dh
Tampoco se soporta la puerta de tarea en la IDT.
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Estructuras en IA32e En Modo 64 bits el procesador mantiene el TSS, pero su función ya no es la de almacenar el contexto de la tarea sino mantener: 1 Los valores de RSP para los Niveles de Privilegio 2, 1, y 0, en formato canónico. 2 La Tabla de Punteros a Stacks de Interrupciones (IST), punteros expresados también en su formato canónico. 3 El Offset al BitMap de E/S.
El sistema operativo de 64 bits debe crear al menos un TSS e inicializar el TR con el selector correspondiente a este segmento. Este segmento se utilizará tanto para tareas que ejecuten en el sub-modo 64 bits como en el sub-modo compatibilidad.
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
TSS para 64 bits
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Descriptor de TSS para 64 bits
Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Lab: Tareas IA32e • Análisis en conjunto de como implementar un cambio de contexto
• Presentación y análisis task64.asm
Subtitulo o nombre del capitulo Universidad Tecnológica Nacional - Facultad Regional Buenos Aires
Universidad Tecnológica Nacional