Índice
Concepto de proceso y multiprogramación
Implementación de procesos
Operaciones sobre procesos
Threads
Planificación de procesos
Concepto de proceso y multiprogramación
Concepto "clásico": Programa secuencial en ejecución
Multiprogramación: Múltiples programas en ejecución
S.O. reparte recursos entre procesos salvando/restaurando su contexto:
Programa cree que tiene una máquina dedicada
Proceso: Abstracción de un "procesador virtual"
Beneficios de la multiprogramación:
Uso eficiente del procesador
Soporte de múltiples usuarios
Expresión del paralelismo de las aplicaciones
Programa versus Proceso
Programa (pasivo) != Proceso (activo)
Múltiples procesos ejecutando el mismo programa (p.e. shell)
En UNIX se aprecia claramente la diferencia:
FORK: Nuevo Proceso – Mismo Programa
EXEC: Mismo Proceso – Nuevo Programa
Un proceso puede ejecutar varios programas durante su vida
En otros sistemas proceso asociado a programa "de por vida"
En Win32:
CreateProcess: Nuevo Proceso – Nuevo Programa
En UNIX sería necesario: FORK + EXEC en hijo
Implementación de procesos
Explicación basada en modelo proceso/núcleo
S.O. no es un proceso: crea la abstracción de proceso
S.O. pasivo:
Sólo activo en inicio hasta que crea 1º proc. y le cede control
1º proc. (init en UNIX) crea otros y éstos a su vez otros …
Proceso única entidad activa
Siempre hay un proceso ejecutando (aunque sea el nulo)
Código del S.O. lo ejecutan los procesos
Cuando se produce interrup., excepción o llamada al sistema
Modos de ejecución de un proceso
Proceso con dos modos de ejecución: usuario y núcleo
Fase de usuario:
Ejecutando el programa correspondiente
Procesador en el nivel de usuario: privilegio restringido
Fase de núcleo:
Ejecutando el S.O. (rutina de interrup., de excepción o llamada)
Procesador en el nivel de núcleo: privilegio total
Proceso tiene asociadas dos pilas:
Pila de usuario: usada en fase de usuario
Pila del núcleo: usada en fase de núcleo
excep., inter. y llamadas mientras proceso ejecuta usan esta pila
Ejecución en modo núcleo
2 tipos de actividades: síncronas y asíncronas
Actividades síncronas:
Asociadas a llamada al sistema o excepción
Ejecución en el contexto del proceso "solicitante"
Actividades asíncronas:
Asociadas a interrupciones
Ejecución en contexto de proceso no relacionado con la interrup.
Rutina de tratamiento no debe acceder a mapa de memoria de proceso actual ya que no está vinculado con interrup.
S.O. puede considerarse dividido en 2 partes:
Capa superior que trata eventos síncronos
Capa inferior que trata eventos asíncronos
Tipos de procesos
Proceso de usuario
Ejecuta un programa, en modo usuario excepto cuando:
Se inicia el proceso (véase "creación de un proceso")
Realiza una llamada al sistema
Genera una excepción
Se produce una interrupción mientras ejecuta
Proceso de núcleo
Ejecuta sólo código del S.O., siempre en modo núcleo
Realiza labores del sistema que se hacen mejor en el contexto de un proceso independiente (operaciones de gestión de memoria)
En Linux: bdflush, kupdate, etc.
Normalmente, alta prioridad, pero no siempre (p.e. proceso nulo)
No confundir con "procesos del sistema"
Procesos del sistema
Procesos de usuario creados por el superusuario
Ejecutan en modo usuario
"Pero sus llamadas al sistema son siempre atendidas"
En sistemas monolíticos realizan labores del sistema como spooling o servicios de red (demonios de UNIX)
En sistemas microkernel realizan funcionalidades "clásicas" del S.O. como p.e. la gestión de ficheros
Vectores de interrupción
Tabla de vectores de interrupción:
Contiene direcciones de rutinas del S.O.
Únicos puntos de entrada del S.O.
S.O. inicia contenido de la tabla en su arranque
Interrupciones externas (de dispositivos):
Dispositivo proporciona vector (puede configurarse)
P.e. En Linux usan vectores de 32-47
Excepciones (dividir por cero, instrucción privilegiada, …)
Vector predefinido por cada excepción
Ej. En Intel vector 0 corresponde con excep. por división por cero
Llamadas al sistema:
Instrucción especial (en Intel INT): vector como operando
P.e. En LINUX sobre Intel se usa el vector 0x80
Niveles de interrupción
Mayoría de procesadores proporciona niveles de interrupción
En cada momento UCP ejecuta en un nivel (Nivel UCP)
Sólo admite int. de nivel > Nivel UCP
Cuando acepta int. de nivel N, automáticamente Nivel UCP=N
Existen instrucciones para cambiar nivel de UCP
Prohíben ints. del mismo nivel o inferiores
Algunos procesadores proporcionan instrucciones que causan interrupciones software
Interrupciones de mínima prioridad
Tratamiento HW de int., exc. y llamadas
Operaciones realizadas por HW cuando se activa inter., exc. o llamada
Si viene de modo usuario ? activa pila de núcleo del proceso
Salva algunos registros (típicamente PC y R.estado) en pila
Fija un nivel de ejecución de núcleo
Si se trata de interrupción ? Nivel UCP = Nivel interrup.
Salta a rutina almacenada en vector ? Entra el S.O. (SW)
Fin del manejo de interr., exc. o llamada:
S.O. ejecuta instrucción de retorno correspondiente (p.e. RETI)
Restaura registros salvados en pila recuperando nivel de ejecución y estado de interrupciones previo
Tratamiento de interrupciones
Rutina en ensamblador: vector contiene dirección de comienzo
Estructura típica:
Salvar registros en pila de núcleo
Invocar función donde se realiza tratamiento específico
Normalmente está escrita en lenguaje de alto nivel
Restaurar registros de la pila del núcleo del proceso
RETI
En sistemas con N niveles pueden anidarse N rutinas de interrup.
En total hasta N+1 actividades del S.O. anidadas:
1 llamada al sistema + N rutinas de interrupción
Página siguiente |