Beruflich Dokumente
Kultur Dokumente
Objetivos
1. 2.
Conocimiento de los mtodos de gestin interna de recursos en un sistema operativo. Usar herramientas de monitorizacin, gestin y ajuste de sistemas operativos.
ARCOS @ UC3M
Lecturas recomendadas
Base
1.
1.
Recomendada
1.
1.
Carretero 2007:
Cap.3
Tanenbaum 2006(en):
Cap.2
2.
1.
Stallings 2005:
Parte dos. Procesos.
3.
1.
Silberschatz 2006:
Cap.2
ARCOS @ UC3M
ATENCIN!
Estas transparencias son un guin para la clase. Los libros dados en la bibliografa junto con lo explicado en clase representa el material de estudio para el temario de la asignatura.
ARCOS @ UC3M
Contenidos
1.
1.
Introduccin
Concepto de proceso e hilo
2. 3.
1. 2. 3.
4.
Creacin y terminacin
ARCOS @ UC3M
Contenidos
1.
1.
Introduccin
Concepto de proceso e hilo
2. 3.
1. 2. 3.
4.
Creacin y terminacin
ARCOS @ UC3M
Introduccin
Proceso
Concepto de proceso
ARCOS @ UC3M
Concepto de proceso
CPU
2 1 App 1
Memoria
Disco
Proceso
Programa en ejecucin Unidad de procesamiento gestionada por el S.O.
ARCOS @ UC3M
Introduccin
Concepto de proceso Modelo ofrecido
Proceso
ARCOS @ UC3M
Modelo ofrecido
CPU
Memoria
Disco
10
ARCOS @ UC3M
App2
Modelo ofrecido
App 1 CPU App 2 App 3 Memoria
App1 App3
Multiprogramacin
Tener varias aplicaciones en memoria Si una aplicacin se bloquea por E/S, entonces se ejecuta mientras otra hasta que quede bloqueada
Cambio de contexto voluntario (C.C.V.)
ARCOS @ UC3M
Modelo ofrecido
App 1 CPU App 2 App 3 Memoria
Proteccin / Comparticin
El espacio de direcciones privado por aplicacin, pero Posibilidad de comunicar datos entre dos aplicaciones
Paso de mensajes Comparticin de memoria
12
ARCOS @ UC3M
Modelo ofrecido
App 1 CPU App 2 App 3 Memoria
App1
App0
App2 App3
Jerarqua de procesos
Creacin de proceso
Como copia de otro proceso existente A partir del programa en disco Como proceso en el arranque
13
ARCOS @ UC3M
Modelo ofrecido
App 1 CPU App 2 App 3 Memoria
App1
App2
App3
Multitarea
Cada proceso se ejecuta un quantum de tiempo (Ej.: 5 ms) y se rota el turno para ejecutar procesos no bloqueados
Cambio de contexto involuntario (C.C.I.)
14
ARCOS @ UC3M
Modelo ofrecido
App 1 CPU App 2 App 3 Memoria
App1
App2
App3
Multiproceso
Se dispone de varios procesadores (multicore/multiprocesador) Adems del reparto de cada CPU (multitarea) hay paralelismo real entre varias tareas (tantas como procesadores)
Se suele usar planificador y estructuras de datos separadas por procesador con algn mecanismo de equilibrio de carga
15 ARCOS @ UC3M
Introduccin
Concepto de proceso Modelo ofrecido Implicaciones en S.O.
Proceso
kernel
16 ARCOS @ UC3M
Planificador:
Estado de ejecucin Contexto
Informacin necesaria para guardar el estado del proceso y poder restaurar ms tarde para continuar la ejecucin. Principalmente: registros de la CPU
Ms:
Relacin de parentesco Conjuntos de procesos Procesos de una sesin Etc.
Zonas compartidas
Locks y conditions
17
ARCOS @ UC3M
18
ARCOS @ UC3M
Estrategias de implementacin
Thread de biblioteca
Implementado en una biblioteca de espacio de usuario para ofrecer la semntica a las aplicaciones
Usado cuando el sistema operativo no ofrece la abstraccin de hilo [I] Llamada bloqueante de un hilo bloquea todo el proceso [V] Gestin de hilo no implica al S.O.: ms ligeros, ms hilos, etc.
Thread de sistema
Disponible como abstraccin en el ncleo (espacio de kernel) y ofrecida la gestin a travs de un conjunto de llamadas al sistema
[I] Sobrecarga al sistema operativo la elevada creacin de hilos [V] Mayor paralelismo, si un hilo se bloquea otro puede continuar sin necesidad de un pesado cambio de contexto de proceso (cambio de contexto de un hilo es ms ligero)
19
ARCOS @ UC3M
Estrategias de implementacin:
resumen
(N-1)
(1-1)
(N-M)
20
ARCOS @ UC3M
Contenidos
1.
1.
Introduccin
Concepto de proceso e hilo
2. 3.
1. 2. 3.
4.
Creacin y terminacin
ARCOS @ UC3M
21
App 2 Tabla de procesos App 3 Tabla de memoria Tabla de E/S Tabla de ficheros Tablas del S.O. BCP (1) BCP (2) BCP (3)
Memoria fsica
22
ARCOS @ UC3M
Gestin de ficheros
Directorio raz Directorio de trabajo Descriptores de ficheros Identificador de usuario Identificador de grupo
Gestin de memoria
Puntero al segmento de cdigo Puntero al segmento de datos Puntero al segmento de pila
estado Id.
Contador de programa Registro de estado Puntero de pila Identificador del proceso Proceso padre Grupo de proceso Prioridad
BCP
gestin
Parmetros del planificador Seales Instante inicio de ejecucin Tiempo de uso de CPU Tiempo hasta siguiente alarma
23
ARCOS @ UC3M
Ejemplos:
Tabla de pginas Tabla de punteros de posicin de ficheros
24 ARCOS @ UC3M
fd
fd
fd
1 2 3 4
Describe la posicin de lectura/escritura de los ficheros abiertos La comparticin de estado del fichero entre procesos obliga a que sea externa al BCP El BCP contiene el ndice del elemento de la tabla que contiene la informacin del fichero abierto: el i-nodo y la posicin de lectura/escritura.
ARCOS @ UC3M
25
ARCOS @ UC3M
En los subsistemas
CSRSS (Win32): por thread de usuario
27
ARCOS @ UC3M
PEB
28
ARCOS @ UC3M
ETHREAD
TEB
29
ARCOS @ UC3M
id estado contextoRegs pila siguiente infoMemoria tablaDescFicheros prioridad despertarEnTicks rodaja TipoBCP
contexto_t
void * TipoBCP *
void * TipoTablaDescFicheros
30
ARCOS @ UC3M
Contenidos
1.
1.
Introduccin
Concepto de proceso e hilo
2. 3.
1. 2. 3.
4.
Creacin y terminacin
ARCOS @ UC3M
31
Planificacin de procesos
32
ARCOS @ UC3M
Gestin de ficheros
Directorio raz Directorio de trabajo Descriptores de ficheros Identificador de usuario Identificador de grupo
Gestin de memoria
Puntero al segmento de cdigo Puntero al segmento de datos Puntero al segmento de pila
estado Id.
Contador de programa Registro de estado Puntero de pila Identificador del proceso Proceso padre Grupo de proceso Prioridad
Estados de un proceso:
En ejecucin: con CPU asignada Listo para ejecutar: No procesador disponible para l Bloqueado: Esperando un evento Suspendido y listo: Expulsado pero listo para ejecutar Suspendido y bloqueado: Expulsado y esperando evento
gestin
33
Parmetros del planificador Seales Instante inicio de ejecucin Tiempo de uso de CPU Tiempo hasta siguiente alarma
ARCOS @ UC3M
Estados de un proceso
Linux
Signal
Stopped
Signal
Creation
Termination
Ready
Scheduling
Executing
Zombie
End of input/output
Input/output
Suspend
34
ARCOS @ UC3M
Estados de un proceso
Windows 2000
35
ARCOS @ UC3M
Estados de un proceso
Minikernel
Running
finalizacin
creacin
Ready
fin E/S
Blocked
36
ARCOS @ UC3M
Gestin de ficheros
Directorio raz Directorio de trabajo Descriptores de ficheros Identificador de usuario Identificador de grupo
Gestin de memoria
Puntero al segmento de cdigo Puntero al segmento de datos Puntero al segmento de pila
estado Id.
Contador de programa Registro de estado Puntero de pila Identificador del proceso Proceso padre Grupo de proceso Prioridad
Contexto de un proceso:
Registros generales: PC, RE, etc. Registros especficos: Registros de coma flotante, etc. Referencias a recursos: puntero a cdigo, datos, etc.
gestin
37
Parmetros del planificador Seales Instante inicio de ejecucin Tiempo de uso de CPU Tiempo hasta siguiente alarma
ARCOS @ UC3M
38
ARCOS @ UC3M
39
ARCOS @ UC3M
40
ARCOS @ UC3M
41
ARCOS @ UC3M
sistema operativo
proceso P1
listo
ejecutando
listo
42
ARCOS @ UC3M
sistema operativo
proceso P1
listo
ejecutando
listo
43
ARCOS @ UC3M
listo
44
ARCOS @ UC3M
listo
bloqueado
45
ARCOS @ UC3M
minikernel/modulosCargables/modulo_disco.c
/* cambiar el proceso en ejecucin */ proceso = procesoActual; proceso->estado = BLOQUEADO; procesoActual = planificador(); while (procesoActual == NULL) { esperaInterrupcion(); procesoActual=planificador(); } procesoActual->estado = EJECUCION; /* saltar al otro proceso */ cambio_contexto(&(proceso->contextoRegs), &(procesoActual->contextoRegs));
salvar estado en BCP0
46
ARCOS @ UC3M
Contenidos
1.
1.
Introduccin
Concepto de proceso e hilo
2. 3.
1. 2. 3.
4.
Creacin y terminacin
ARCOS @ UC3M
47
El kernel se encarga de migrar entre las diferentes colas cuando cambia el estado de un proceso por algn evento
48
ARCOS @ UC3M
El kernel se encarga de migrar entre las diferentes colas cuando cambia el estado de un proceso por algn evento
Un proceso solo puede estar en una cola (como mucho)
49
Alejandro Caldern Mateos
ARCOS @ UC3M
BCP1 registros
BCP5 registros
50
ARCOS @ UC3M
Proceso 0
Estado del proceso Registros
Proceso 1
Estado del proceso Registros Lmites de memoria Lista de ficheros abiertos ...
Proceso n
Estado del proceso Registros
Tabla de procesos
51
ARCOS @ UC3M
tablaProcesos[]
procesoActual
primero
listaListos
ultimo
listaBloqueadosPorX
primero
primero ultimo
listaDormidos
ultimo
52
ARCOS @ UC3M
Colas de procesos
minikernel
minikernel/include/nucleoBasico/ListaBCP_Planificador.h
id estado contextoRegs pila id estado contextoRegs pila siguiente infoMemoria tablaDescFicheros prioridad despertarEnTicks rodaja id estado contextoRegs pila
tablaProcesos[]
listaListos
ultimo
listaBloqueadosPorX
primero
primero ultimo
listaDormidos
ultimo
53
ARCOS @ UC3M
Colas de procesos
minikernel
minikernel/include/nucleoBasico/ListaBCP_Planificador.h
id estado contextoRegs pila id estado contextoRegs pila id estado contextoRegs pila
tablaProcesos[]
inicializarListaBCP(TipoListaBCP *) siguiente siguiente infoMemoria infoMemoria infoMemoria primeroListaBCP(TipoListaBCP *) tablaDescFicheros tablaDescFicheros tablaDescFicheros eliminarPrimeroListaBCP(TipoListaBCP *) prioridad prioridad prioridad despertarEnTicks despertarEnTicks despertarEnTicks insertarUltimoListaBCP(TipoListaBCP *, TipoBCP*) rodaja rodaja rodaja mostrarListaBCP(TipoListaBCP *, char *, int)
siguiente
procesoActual
primero
listaListos
ultimo
listaBloqueadosPorX
primero
primero ultimo
listaDormidos
ultimo
54
ARCOS @ UC3M
Colas de procesos
minikernel
minikernel/include/nucleoBasico/ListaBCP_Planificador.h
id estado contextoRegs pila id estado contextoRegs pila siguiente infoMemoria tablaDescFicheros id estado contextoRegs pila
tablaProcesos[]
TipoBCP *planificador() prioridad prioridad despertarEnTicks despertarEnTicks insertarListaListos(TipoBCP *) rodaja rodaja mostrarListaListos(char *, int)
procesoActual
primero
listaListos
ultimo
listaBloqueadosPorX
primero
primero ultimo
listaDormidos
ultimo
55
ARCOS @ UC3M
El kernel se encarga de migrar entre las diferentes colas cuando cambia el estado de un proceso por algn evento
Un proceso solo puede estar en una cola (como mucho)
56
Alejandro Caldern Mateos
ARCOS @ UC3M
int peticionCaracter_teclado(int descDispositivo, char *caracter, int operacion) { if (estaVacioBufferCaracteres(&(datosPropiosDispositivo->bufferCaracteres)) ) { /* si esta vaco bloquear el proceso y seleccionar otro */ proceso = procesoActual; insertarUltimoListaBCP (&(datosPropiosDispositivo->listaProcesosBloqueados),proceso); proceso->estado = BLOQUEADO; procesoActual = planificador(); while (procesoActual == NULL) { esperaInterrupcion(); procesoActual=planificador(); } /* saltar al otro proceso */ procesoActual->estado = EJECUCION; cambio_contexto(&(proceso->contextoRegs), &(procesoActual->contextoRegs)); }
57
ARCOS @ UC3M
minikernel/modulosCargables/modulo_teclado.c
void interrupcionSW_teclado(int descDispositivo) { TipoDatosPropiosDispositivo_teclado *datosPropiosDispositivo; TipoBCP *proceso; /* obtener datos propios del dispositivo */ datosPropiosDispositivo = (TipoDatosPropiosDispositivo_teclado *) tablaDispositivos[descDispositivo].datosPropiosDispositivo; /* recorrer la lista de procesos esperando y despertar al primero */ proceso = primeroListaBCP (&(datosPropiosDispositivo->listaProcesosBloqueados)); if (proceso != NULL) { eliminarPrimeroListaBCP (&(datosPropiosDispositivo->listaProcesosBloqueados)); proceso->estado = LISTO; insertarListaListos (proceso); } }
58
ARCOS @ UC3M
minikernel/modulosCargables/modulo_teclado.c
void interrupcionSW_teclado(int descDispositivo) { TipoDatosPropiosDispositivo_teclado *datosPropiosDispositivo; TipoBCP *proceso; /* obtener datos propios del dispositivo */ datosPropiosDispositivo = (TipoDatosPropiosDispositivo_teclado *) tablaDispositivos[descDispositivo].datosPropiosDispositivo; /* recorrer la lista de procesos esperando y despertar al primero */ proceso = primeroListaBCP (&(datosPropiosDispositivo->listaProcesosBloqueados)); if (proceso != NULL) { eliminarPrimeroListaBCP (&(datosPropiosDispositivo->listaProcesosBloqueados)); proceso->estado = LISTO; insertarListaListos (proceso); } }
Un proceso solo puede estar en una cola (como mucho): [ok] eliminar + insertar [ko] insertar + eliminar
Alejandro Caldern Mateos
59
ARCOS @ UC3M
Contenidos
1.
1.
Introduccin
Concepto de proceso e hilo
2. 3.
1. 2. 3.
4.
Creacin y terminacin
ARCOS @ UC3M
60
Running
finalizacin
creacin
Ready
fin E/S
Blocked
Blocked &
Suspend
61
ARCOS @ UC3M
Planificacin de procesos
niveles de planificacin
finalizacin Running
A largo plazo
aadir procesos a ejecutar Invocado con baja frecuencia
puede ser algo lento
creacin Ready
A medio plazo
aadir procesos a RAM
A corto plazo
Ready & Blocked &
Suspend
Suspend
62
ARCOS @ UC3M
Planificacin de procesos
objetivos de los algoritmos de planificacin (segn sistema) Todos los sistemas:
Equitativo ofrece a cada proceso una parte equitativa de la CPU Expeditivo cumplimiento de la poltica emprendida de reparto Balanceado mantener todas las partes del sistema ocupadas
Sistemas batch:
Productividad maximizar el nmero de trabajos por hora Tiempo de espera minimizar el tiempo entre emisin y terminacin del trabajo Uso de CPU mantener la CPU ocupada todo el tiempo
Sistemas Interactivos:
Tiempo de respuesta responder a las peticiones lo ms rpido posible Ajustado satisfacer las expectaciones de los usuarios
ARCOS @ UC3M
Planificacin de procesos
caractersticas de los algoritmos de planificacin (1/3)
Preemption:
Sin expulsin:
El proceso conserva la CPU mientras desee. Cambios de contexto voluntarios (C.C.V.) [v/i] Un proceso puede bloquear al resto pero solucin fcil a la comparticin de recursos Windows 3.1, Windows 95 (16 bits), NetWare, MacOS 9.x.
Con expulsin:
Exige un reloj que interrumpe peridicamente:
cuando pasa el quantum de un proceso se cambia a otro
(Se aade) Cambios de contexto involuntarios (C.C.I.) [v/i] Mejora la interactividad pero precisa de mecanismos para condiciones de carrera AmigaOS (1985),Windows NT-XP-Vista-7, Linux, BSD, MacOS X
64
ARCOS @ UC3M
Planificacin de procesos
caractersticas de los algoritmos de planificacin (2/3)
Por tipo
CPU-bound (ms rachas burst de tiempo usando CPU) IO-bound (ms rachas de tiempo esperando E/S)
65
ARCOS @ UC3M
Planificacin de procesos
caractersticas de los algoritmos de planificacin (3/3)
CPU-aware:
Afinidad:
Los procesos tienen afinidad (affinity) a una CPU: mejor volver a la misma CPU
Simetra:
Los procesos se ejecutan en la CPU que tienen unas capacidades especficas a dicha CPU
66
ARCOS @ UC3M
ARCOS @ UC3M
Caractersticas:
Uso de prioridades fijas: problema de inanicin No fijas: uso de algn algoritmo de envejecimiento
68
ARCOS @ UC3M
FIFO:
Ejecucin por el estricto orden de llegada. Caractersticas:
[v] Simple de implantar. [i] Penaliza los trabajos prioritarios.
Poltica vs mecanismo
Separacin de lo qu se puede hacer de cmo se puede hacer
Normalmente, un proceso conoce cul es el hilo ms prioritario, el que ms E/S necesitar, etc.
70
ARCOS @ UC3M
Planificacin FIFO
minikernel
minikernel/nucleoBasico/ListaBCP_Planificador.c
/* * Funcin de planificacin que implementa un algoritmo FIFO. */ TipoBCP * planificador() { TipoBCP * procesoAux; /*obtener el primero proceso listo */ procesoAux = primeroListaBCP(&listaListos) ; if (NULL != procesoAux) { eliminarPrimeroListaBCP(&listaListos) ; } return (procesoAux); }
71
ARCOS @ UC3M
Planificacin RR
minikernel (1/3)
minikernel/nucleoBasico/ListaBCP_Planificador.c
/* * Funcin de planificacin que implementa un algoritmo FIFO. */ TipoBCP * planificador () { TipoBCP * procesoAux; /*obtener el primero proceso listo */ procesoAux = primeroListaBCP(&listaListos) ; if (NULL != procesoAux) { eliminarPrimeroListaBCP(&listaListos) ; } return (procesoAux); }
72
ARCOS @ UC3M
Planificacin RR
minikernel (2/3)
minikernel/nucleoBasico/Interrupciones_Excepciones.c
/* * Manejador de interrupciones de reloj */ void interrupcionReloj () { /* actualizar los ticks de reloj */ ticks = ticks + 1; // parte a realizar en la prctica: comprobar dormidos insertarUltimaTareaPend(&listaTareasPend, planificarRodaja, NULL); /* activar las interrupciones software pendientes */ activar_int_SW(); }
73
ARCOS @ UC3M
Planificacin RR
minikernel (2/3)
minikernel/nucleoBasico/Interrupciones_Excepciones.c
/* * Manejador de interrupciones de reloj */ void interrupcionReloj () { /* actualizar los ticks de reloj */ ticks = ticks + 1; // parte a realizar en la prctica: comprobar dormidos insertarUltimaTareaPend(&listaTareasPend, planificarRodaja, NULL); /* activar las interrupciones software pendientes */ activar_int_SW(); }
74
ARCOS @ UC3M
Planificacin RR
minikernel (3/3)
minikernel/nucleoBasico/Interrupciones_Excepciones.c
/* * Interrupcin software generada por la Int. de reloj */ void planificarRodaja (void *datos) { <actualizar la rodaja de tiempo del proceso actual> if ( <fin rodaja del proceso actual> ) { <insertar el BCP del proceso actual en la lista de listos> <pedir al planificador un nuevo proceso actual> <realizar el cambio de contexto (activador)> } }
75
ARCOS @ UC3M
Planificacin multipoltica
Linux y Windows
Windows 2000
Linux
1-99
76
ARCOS @ UC3M
Ready summary
Un bit por nivel Si biti =1 un hilo en ese nivel Aumenta velocidad de bsqueda
Idle summary
Un bit por procesador Si bit =1 procesador libre
77
Inside Microsoft Windows 2000 (Microsoft Programming Series)
ARCOS @ UC3M
Al terminar pasa al final de la cola de listos + temporary priority boost. Rodaja de T: se mantiene
78
ARCOS @ UC3M
79
ARCOS @ UC3M
Rodaja de T: se reinicia
80
ARCOS @ UC3M
81
ARCOS @ UC3M
Kernel/sched.c
runqueue
140
active
Cada procesador tiene su propio runqueue Cada runqueue tiene dos vectores de prioridad:
Activo y Expirado
expired
CPU #0
140
82
ARCOS @ UC3M
Planificacin: gestin
Linux El planificador elige los procesos de la lista de activos de acuerdo a su prioridad
140
runqueue
active
expired
CPU #0
140
Cuando la lista de activos est vaca, el planificador intercambia las listas de activo y expirados Si un proceso es suficientemente interactivo permanecer en la lista de activos
CS 6560 Operating System Design (clase 4)
83
ARCOS @ UC3M
Contenidos
1.
1.
Introduccin
Concepto de proceso e hilo
2. 3.
1. 2. 3.
4.
Creacin y terminacin
ARCOS @ UC3M
84
Creacin y terminacin
85
ARCOS @ UC3M
Gestin de ficheros
Directorio raz Directorio de trabajo Descriptores de ficheros Identificador de usuario Identificador de grupo
Gestin de memoria
Puntero al segmento de cdigo Puntero al segmento de datos Puntero al segmento de pila
estado Id.
Contador de programa Registro de estado Puntero de pila Identificador del proceso Proceso padre Grupo de proceso Prioridad
gestin
Parmetros del planificador Seales Instante inicio de ejecucin Tiempo de uso de CPU Tiempo hasta siguiente alarma
86
ARCOS @ UC3M
Creacin de procesos
Un proceso se crea:
Durante el arranque del sistema
Hilos del kernel + primer proceso (Ej.: init, swapper, etc.)
Cuando un proceso existe hace una llamada al sistema para crear otro:
Cuando el sistema operativo comienza un nuevo trabajo Cuando un usuario arranca un nuevo programa Cuando durante la ejecucin de un programa se necesite
87
ARCOS @ UC3M
Finalizacin de procesos
Un proceso termina:
De forma voluntaria:
Finalizacin normal Finalizacin con error
De forma involuntaria:
Finalizado por el sistema (Ej.: excepcin, sin recursos necesarios) Finalizado por otro proceso (Ej.: a travs de llamada al sistema) Finalizado por el usuario (Ej.: control-c por teclado)
En Unix/Linux se usan seales como mecanismo Se pueden capturar y tratar (salvo SIGKILL) para evitar finalizar involuntariamente
88
ARCOS @ UC3M
Creacin de procesos
operaciones tpicas para modelo convencional Buscar entrada libre en tabla de procesos Leer fichero ejecutable Crear mapa de memoria a partir del ejecutable Crear pila inicial de usuario con el entorno del proceso Crear pila del ncleo
Con direccin del punto de arranque del programa Proceso comienza en rutina en modo ncleo haciendo RETI
ARCOS @ UC3M
Finalizacin de procesos
operaciones tpicas para modelo convencional
Finalizacin de hilos Limpieza de temporizadores y seales pendientes Cierre de todos los ficheros abiertos Liberacin de semforos y cerrojos activos Liberacin de memoria
Liberacin de zonas de memoria Liberacin de tablas de pginas
90
ARCOS @ UC3M
exec()
exit()
hijo
Windows
CreateProcess() GetExitCodeProcess() padre ExitProcess() hijo 91
Sistemas operativos: una visin aplicada
ARCOS @ UC3M
Creacin de procesos
Windows: CreateProcess
crea EPROCESS crea esp. M inicial proc. crea KPROCESS crea PEB
crea pila thread crea contexto thread crea thread y queda suspendido
92
http://flylib.com/books/en/4.491.1.52/1/
ARCOS @ UC3M
Creacin de procesos
Linux: fork + exec
fork:
Obtener entrada libre en Tabla de Procesos Copiar PCB del padre Clona al proceso padre y da una nueva identidad al hijo Duplicar mapa de M del padre (incluyendo pilas) Estado listo Otras actualizaciones: p.ej., limpiar seales, eventos y mensajes pendientes
Devuelve 0 al hijo
ARCOS @ UC3M
Creacin de procesos
Linux: fork + exec
exec:
Liberar imagen de M del proceso Leer ejecutable Cambia la imagen de memoria de un proceso usando como recipiente uno previo Crear nueva imagen M BCP Cargar secciones .texto y .datos Crear pila inicial U Crear pila S: dir. principio programa Inicio BCP: regs.; dir SO: RETI
94
PC
ARCOS @ UC3M
Terminacin de procesos
Linux: exit
exit:
Finaliza todos los hilos menos uno Limpia operaciones asncronas, temporizadores y seales pendientes Termina la ejecucin de un proceso y libera los recursos Cierra todos los descriptores de archivo Libera semforos y cerrojos activos Reasigna hurfanos a init Estado proceso <- zombie Trata de enviar seal SIGCLD al padre:
Creacin de procesos
minikernel
minikernel/nucleoBasico/LlamadasSistema.c
int crearTarea(char *programa) { void * imagen, *pc_inicial; int error=0; int numProceso; TipoBCP *proceso; numProceso = buscarBCPLibreTablaProcesos(); if (-1 == numProceso) /* no hay entrada libre */ return -1; proceso=&(tablaProcesos[numProceso]); /* crea la imagen de memoria leyendo ejecutable */ imagen = crear_imagen(programa, &pc_inicial); if (!imagen) /* fallo al crear imagen */ return -1; /* asignar imagen de memoria */ proceso->infoMemoria = imagen; proceso->pila = crear_pila(TAM_PILA);
96 ARCOS @ UC3M
Creacin de procesos
minikernel
minikernel/nucleoBasico/LlamadasSistema.c
/* crear estado inicial de los registros del procesador */ fijar_contexto_ini(proceso->infoMemoria, proceso->pila, TAM_PILA, pc_inicial, &(proceso->contextoRegs)); /* copiar tabla de descriptores de ficheros del padre */ inicializarTablaDescFicheros(proceso->tablaDescFicheros); if (NULL != procesoActual) memcpy(proceso->tablaDescFicheros, procesoActual->tablaDescFicheros, MAX_TABLA_DESCFICHEROS * sizeof(TipoDescFichero) ); /* asignar los valores iniciales */ proceso->id = numProceso; /* id. de proceso */ proceso->estado = LISTO; proceso->rodaja = TICKS_POR_RODAJA; /* lo inserta al final de cola de listos */ insertarListaListos(proceso); return 0; }
97 ARCOS @ UC3M
Terminacin de procesos
minikernel
minikernel/nucleoBasico/LlamadasSistema.c
void liberarProceso() { TipoBCP * procesoAnterior; /* Preparar un cambio de contexto */ procesoAnterior = procesoActual; procesoActual = planificador(); while (procesoActual == NULL) { esperaInterrupcion(); procesoActual = planificador(); } /* Liberar recursos */ liberar_imagen(procesoActual->infoMemoria); liberar_pila(procesoAnterior->pila); procesoActual->estado=TERMINADO; cambio_contexto(NULL, &(procesoActual->contextoRegs)); return; /* no debera llegar aqu */ }
98
ARCOS @ UC3M
Leccin 3
Procesos, hilos y planificacin
Grupo ARCOS Diseo de Sistemas Operativos Grado en Ingeniera Informtica Universidad Carlos III de Madrid