Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en...

79
Procesos e hilos Pablo San Segundo (C-206) [email protected]

Transcript of Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en...

Page 1: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Procesos e hilosPablo San Segundo (C-206)

[email protected]

Page 2: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

KERNEL DEL SISTEMA OPERATIVO

Al arrancar el PC siempre se carga en memoria una copia del Kernel desde disco

El Kernel del sistema operativo es un programa,

típicamente programado en C

Page 3: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

¿Qué es un Proceso?

Un programa en ejecuciónLa unidad de procesamiento gestionada por el S.O.

Page 4: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Presencia en memoria y tabla BCP

Registros de la CPUContexto

EntornoIdentificadores de usuario y grupoIdentificador de procesoVariables de entorno

UsuarioSistema

Control (tablas)Estado: Bloqueado, ejecución, listoPrioridad: cola de prioridadesE/S: Desc. recursos, ,mensajería etc.Presencia en memoria

typedef struct bcp {

struct bcp *siguiente; struct bcp *anterior; struct bcp *hebraint retardo; palabra marco; palabra pila; palabra marcador; int pri; int estado; struct bcp *todosenl; int mascara; k_ptrmens retenmensprocnombre nombre;

} bcp;

Bloque de Control de Proceso

Page 5: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

ESTADOS BÁSICOS DE UN PROCESO

EN EJECUCIÓNUn proceso por procesador

BLOQUEADOEn espera de completar E/S

LISTOPreparado para pasar al estado de ejecución

Page 6: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

ENTORNO DEL PROCESO

DefiniciónTabla NOMBRE-VALOR que se pasa al proceso en su creación

UbicaciónImagen en Memoria: típicamente en la pila

ValorPor defectoMandatos Shell (API S.O.)

PATH=/usr/bin:/home/pss/bin

TERM=tty100

HOME=/home/pss

PDW=/home/pss/ingsw

SHELL

echo $PATHecho $HOME

SHELL

PATH=$PATH:XXX

Page 7: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

CARACTERÍSTICAS DE PROCESOS

Jerarquías (familias)Procesos hijo, padre, hermano, abuelo etc..

VidaCreaciónEjecuciónMuerte

Tipo de ejecuciónBatch (lotes)Interactivo

INI

INI SES INI SES

SHELL SHELL

PROC 1 PROC 2

Page 8: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

USUARIO

DefiniciónPersona autorizada a utilizar el sistema

AutenticaciónUser login (internamente es un número para el S.O.: i.e uid)Contraseña (password)

Super-usuario (sudo, su)

Derechos de administrador

Grupo de usuariosColectivo de usuarios con los mismos permisosTodo usuario ha de pertenecer a un grupo

Page 9: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

FIN DE INTRODUCCIÓN

Page 10: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Clasificación de los Sistemas Operativos

Page 11: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Fundamento del multiproceso

DefiniciónEjecución concurrente real de varios procesos con un solo procesador

BasesAlternancia de los procesos en la CPU durante la fase de E/SAlmacenamiento en memoria de varios procesos simultáneamente

Page 12: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Ejemplo

Ejecución de proceso nulo

Page 13: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

VENTAJAS DE LA MULTITAREA

Funcionamiento del SO en modo ‘interactivo’ de forma eficiente

Aprovecha tiempos de espera de procesos durante E/SAumenta el uso de la CPU

Nuevo paradigma de programaciónPrincipio de ‘modularidad’: Un programa-varios

‘procesos’

Page 14: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

GRADO DE MULTIPROGRAMACIÓN

DefiniciónNúmero de procesos activos en un instante de tiempo

RecursoMemoria principal

Sistema SIN memoria virtual

Page 15: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

GRADO DE MULTIPROGRAMACIÓN

Sistema CON memoria virtual

Page 16: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

GRADO DE MULTIPROGRAMACIÓN

Sistema CON memoria virtual

RENDIMIENTO DEL PROCESADOR

HIPER-PAGINACIÓN

Page 17: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

FIN DE S.O. MULTITAREA

Page 18: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

INFORMACIÓN DEL PROCESO EN S.O.i.e. RIED

Se gestionan fuera del BCP. ¿Por qué?

CODIGO

PILA

DATOS

Page 19: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

ESTADO DEL PROCESO : CONTEXTORegistros generales

Motorola 68000: A0-A7, D0-D7Contador de programa (PC)

Siguiente instrucción a ejecutarPuntero de Pila (“Call Stack pointer”)

Referencia la pila en memoria asociado a todo procesoMotorola 68000 (USP y SSP)

Puntero de marco (“Frame pointer”)Registro de Estado

Modo de ejecución, máscaras de interrupciones, información acerca de la última operación realizada en la ALU, etc…Motorola 68000 (SR)

Registros especialesEjemplo: RIED: Registro que Identifica el Espacio de Direcciones que ocupa en memoria el proceso en ejecución

Page 20: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

PROCESO EN MEMORIA

Pertenece al BCP

Preasignación inicial de zona de swapping

Segmentación fija Hoy en día la segmentación es variable

Page 21: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

TABLAS DEL SISTEMA OPERATIVO

Tabla de procesos (BCP)Información exclusiva de cada proceso que no se puede COMPARTIR y cuyo tamaño no varía durante la ejecución de cada proceso (IMPLEMENTACIÓN)

Tabla de Memoria (alias paginado)Información para la gestión de memoria

Tabla de Entrada / SalidaInformación relativa a periféricos y a las operaciones E/S

Tabla de FicherosInformación sobre los ficheros utilizados por los procesos

Page 22: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Ejemplo Tabla de Ficheros

COMPARTEN LECTURA Y ESCRITURA EN FICHERO

Puntero de posición

TABLA DE FICHEROS

Doble direccionamiento

Page 23: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

EJEMPLO: INFORMACIÓN EN EL BCP

TREEPS (LINUX)

Page 24: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

FIN DE PRESENCIA EN MEMORIA DE

UN PROCESO

Page 25: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

NACIMIENTO DE UN PROCESO

Linker

A imagen en memoria

Transmisión de ficheros al Motorola 68000

e.g. kernel.lib/dll

Page 26: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

FORMACIÓN DE UN PROCESO

EL EJECUTABLE NO CONTIENE A LAS BIBLIOTECAS DEL SISTEMA

COPIA DE LAS BIBLIOTECAS DEL SISTEMA EN LA IMAGEN DE MEMORIA

(kernel.lib)

Tablas S.O.

SE ACTUALIZA LA PRIMERA VEZ Y EN CADA CAMBIO DE CONTEXTO

Page 27: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

FIN DE FORMACIÓN DE UN PROCESO

Page 28: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

SERVICIOS DE GESTIÓN DE PROCESOS

Identificación de procesosEntorno de un procesoCreación de procesosCambio de imagen de un procesoEspera a la terminación de un procesoFinalización de la ejecución de un procesoInformación adicional

Page 29: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

SERVICIO POSIX: fork

Definiciónpid_t fork (void) : Crea un proceso hijo clonando al padre.

Copia no exacta (i.e. señales)

Page 30: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Librerías#include <sys/types.h>

RetornoIdentificador de proceso padre0 hijo-1 si error

DescripciónCrea un proceso hijo que ejecuta el mismo programa que el padreSe heredan los descriptores (i.e. archivos)Se desactivan las alarmas pendientes

SERVICIO POSIX: fork

Depende de la distribución

Page 31: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

SERVICIO POSIX: exec

DefiniciónCambia el programa del proceso

Los descriptores abiertos se mantienen

Page 32: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

EJEMPLO: Servicio fork

int main() { pid_t pid;pid=fork();if (pid= = -1)

cout<<“Error”<<endl;else if (pid == 0) {

cout<<“Proceso hijo”<<endl;} else{

cout<<“Proceso padre”<<endl;}

return 0;}

#include <sys/types.h>#include <iostream>

Page 33: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

SERVICIO POSIX: exec

Declaracionesint execl (const char* path, const char* arg,…)int execlp(const char* file, const char* arg,…)int execvp(const char* file, const char* arg[])

Retorno-1 si error o NO RETORNA

DescripciónEl mismo proceso ejecuta otro programaLos descriptores abiertos permanecen abiertosLas señales toman la acción por defecto

Ultimo parámetro NULL

#include <unistd.h>

Page 34: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

EJEMPLO: Servicio execl

int main() { pid_t pid;if ((pid = fork()) = = -1)

cout<<“Error”<<endl;else if (pid == 0) {

if(execl ("/bin/ls, “ls", “-l”, NULL)){ cout<<“Error al lanzar la tarea”<<endl;

}}int status;wait(&satus);

return 0;}

#include <sys/types.h>#include <unistd.h>#include <iostream>

Page 35: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

EJEMPLO: Servicio execv

int main() { pid_t pid;char * arg[3];arg[0]=“gedit”; arg[1]=“test.cpp”;arg[2]=NULL;if ((pid = fork()) = = -1)

cout<<“Error”<<endl;else if (pid == 0) {

if(execvp (arg[0], arg)){ cout<<“Error al lanzar la tarea”<<endl;

}}int status;wait(&satus);

return 0;}

#include <sys/types.h>#include <unistd.h>#include <iostream>

Page 36: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

SERVICIO POSIX: int exit (int status)Definición

Termina un proceso, devolviendo el parámetro status al proceso padre

Declaraciónvoid exit (int status)

EXIT_SUCCESS, EXIT_FAILUREArgumento

Código de retorno al proceso padreDescripción

Finaliza la ejecución del procesoCierra todos los descriptoresSe liberan todos los recursos

#include <stdlib.h>

Page 37: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

SERVICIO POSIX: waitDefinición

Espera la terminación de un proceso hijo CUALQUIERADeclaración

pid_t wait (int* status)pid_t waitpid (int pid, int* status, int options)

RetornoIdentificador del proceso hijo, -1 si error

DescripciónPermite a un proceso padre esperar hasta que termine un proceso hijoDevuelve el estado del proceso hijo al terminar

Macros para analizar el estado: WIFEXITED, WEXITSTATUSWIFSIGNALED, WTERMSIG, etc…

WUNTRACEDWNOHANG

#include <sys/wait.h>

Page 38: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

EJEMPLO : Servicio wait con MACROSint main(){

int status;pid_t pid;pid= fork();if(pid==0){

execlp(“gedit”, “main.cpp”, NULL);exit(EXIT_SUCCESS);

}wait(&status) ;if(WIFEXITED(status)){

if(WEXITSATUS(status)==EXIT_SUCCESS){cout<<“OK”<<endl;

}else if(WEXITSATUS(status)==EXIT_FAILURE)){cout<<“ERROR”<<endl;

}}cout<<"Proceso padre terminado"<<endl;

exit(EXIT_SUCCESS);}

Capturar el error

Page 39: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

EJEMPLO : Servicio wait multiproceso

int main(){

int status;pid_t pid;for(int i=0; i<10; i++){

pid= fork();if(pid==0){

cout<<"hilo: "<<i<<endl;exit(EXIT_SUCCESS);

}}

//Espera a todos los hijoswhile ( wait(&status) !=-1 ){;}cout<<"Proceso padre terminado"<<endl;

exit(EXIT_SUCCESS);}

Page 40: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

EJEMPLO: waitpidint main(void){

int status;pid_t pid;pid= fork();if(pid==0){

sleep(5);cout<<"proceso hijo terminado"<<endl;exit (EXIT_SUCCESS);

}

pid_t endid= waitpid(pid,&status, WNOHANG); //no bloqueanteif(endid==pid){

cout<<"status del hijo diposnible"<<endl;} else{

cout<<"padre termina sin conocer el status del hjo"<<endl;}

exit (EXIT_SUCCESS);}

Page 41: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Caso de uso típico de exec /fork /wait

Padre e hijo comparten recursos

Page 42: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

EVOLUCIÓN DE PROCESOS: ZOMBIES

El hijo muere antes de la ejecución de un servicio wait(…) del padre

Hijo: Proceso ZOMBIE

BCP de B sigue existiendo

Page 43: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

EJEMPLO: Zombies

int main(void){

pid_t pid;pid= fork();switch(pid){

case -1:cout<<"Error al creado proceso duplicado"<<endl;exit(EXIT_FAILURE);

break;case 0:sleep(1);cout<<"proceso hijo terminado"<<endl;exit(EXIT_SUCCESS);

break;}

cout<<“hijo terminará sin wait del padre: ¡ZOMBIE!"<<endl;sleep(30);int status;wait(&status);

exit(EXIT_SUCESS);}

Page 44: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

EJEMPLO: JERARQUÍAS DE PROCESOS

int main (int argc, char** argv ){

int i, valor;pid_t pid_1, pid_2;

i=atoi(argv[1]);pid_1=fork();

while(i>0){pid_2=fork();if(pid_2!=0) {

wait(&valor)break;

}i=i-1;

}return 0;}

#include <sys/types.h>

<Nombre Ejecutable> 3

Ejecución desde Terminal

¿JERARQUÍA DE PROCESOS ?

A) Figura

B) Sin Bloque

#include <sys/wait.h>

Page 45: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Ejercicio: Procesos distribuidos (I)

Impleméntese un proceso que lance latarea de leer un grafo en formato DIMACSde un fichero de texto y devuelva su gradoen pantalla.

El proceso principal debe esperar a laterminación de dicha tarea e indicar si seha resuelto correctamente.

Page 46: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

FIN DE SERVICIOS POSIX PARA PROCESOS

Page 47: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

ESTADOS DE UN PROCESO

SWAPPING

PlanificadorCorto Plazo

Page 48: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

PLANIFICACIÓN DE PROCESOS

Planificador (Planner): Programa del S.O. que determina que proceso tiene que ejecutarse.Activador (Dispatcher) : Programa del SO que carga el programa seleccionado por el planificador en memoria

Formas de planificar del S.O:Largo plazo: Decidir que procesos batch entran a ejecutarseMedio plazo: Añadir procesos a RAM

Finalización del estado de suspendido.Sistemas con swapping.

CORTO PLAZO: DECIDIR QUÉ PROCESO TOMA EL CONTROL DE LA CPU

Page 49: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

NOCIONES BÁSICAS DEL CORTO PLAZO

Tipos de planificaciónSin expulsión: El proceso conserva la CPU mientras lo deseeCon expulsión: El S.O. quita la CPU al proceso cada cierto tiempo.

Colas de procesosPor prioridad (niveles)Por tipo

LotesInteractivo

Page 50: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Reparto de la CPU equitativoEficiencia (optimizar uso CPU)Mejorar el tiempo de respuesta

Modo interactivoModo lotes

Cumplir plazos de ejecución en sistemas de tiempo real

OBJETIVOS DE LA PLANIFICACIÓN

INCOMPATIBILIDAD DE OBJETIVOS!

Windows NT Server ≠ Windows 7 Home Edition

Page 51: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

COLAS DE PROCESOS

EJEMPLO

BATCH

Page 52: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Implementación de colas de procesos

Implementación con punteros a otros BCPAcceso eficiente

COLAS DE PRIORIDAD

Page 53: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

ALGORITMOS DE PLANIFICACIÓNCÍCLICA (Round Robin)

Asignación de CPU rotatoriaSe asigna un tiempo máximo a todos los procesos (time slot )Los procesos se organizan en una cola circular

Un proceso que excede su slot se expulsa y se coloca al final de la cola

SISTEMAS DE TIEMPO COMPARTIDOREPARTO por UID en vez

de por TIEMPO de PROCESAMIENTO

Page 54: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

ALGORITMOS DE PLANIFICACIÓN (II)

FIFO (‘first in-first out’)Los procesos se organizan según una cola ‘clásica’. Entran por el final y esperan su turno.Política de planificación SIN EXPULSIÓNEl proceso en ejecución sólo será expulsado cuando él mismo realiza una llamada bloqueante al sistema (i.e. E/S)Problema: INANICIÓN

Se suele combinar con política de prioridades (i.e. POSIX)

PROCESAMIENTO POR LOTES

Page 55: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

ALGORITMOS DE PLANIFICACIÓN (III)

PrioridadesFijas: Problema de inanición (p. ej. RTOS)Variables (aumentan con envejecimiento)

El trabajo más corto primeroAplicación en sistemas BatchMenor tiempo de respuestaPenaliza las tareas largasDificultad en conocer ‘a priori’ las tareas de mayor duración.

Aleatorio

Page 56: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

ALGORITMOS DE PLANIFICACIÓN RT (IV)

Definición Sistemas de Tiempo Real (RTOS)Sistemas donde los procesos deben ejecutarse en instantes predeterminados

Tipos de RTSRequisitos blandos / durosEjecución a plazo fijo / periódico

2h:30m:10s

2h:30m:10s 2h:30m:20s

PrioridadReloj de tiempo

9-2-2006 / 2h:30m:15s

La CAPACIDAD DE PROCESAMIENTO NO es especialmente altaPREPROCESAMIENTO PREDECIBLE: Sin caches, sin

paginación, sin predicción de saltos

REQUISITOS DUROS: En ningún caso de puede rebasar el tiempo de reloj asociado al proceso

EJEMPLOS

QNX

RTLinux

VxWorks

Windows CE

Page 57: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

PLANIFICACIÓN EN POSIX

PrioridadAbsoluta (RT)

(0)-normal | (>0)-RTDinámica

POSIX 19 a -20 (mayor número menor prioridad)

El planificador siempre elige aquellos procesos con mayor prioridad

Políticas de planificaciónFIFO (procesamiento por lotes)Cíclica (modo interactivo)Otra

Page 58: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Ejercicio: Procesos distribuidos (I)Algunos servicios POSIX para prioridad dinámica

int setpriotiy (PRIO_PROCESS, int pid, int niceval) RETURN VALUE: -1 ERROR, 0 OK

int getpriority (PRIO_PROCESS, int pid)

Escriba un programa en C para POSIXque lance dos tareas P1 y P2 quecompartan escritura en un fichero de texto“log.txt”.

Modifique la prioridad de P1 y P2 ycompruebe como afecta a la salida.

#include <sys/wait.h>

Page 59: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Soluciónint main(void){

pid_t pid, pid2;ofstream f("log.txt", ios::app); //fichero compartidopid=fork();if(pid==0){

sleep(1);cout<<"Proc 1: "<<getpriority(PRIO_PROCESS,pid)<<endl;//…escribir en ficheroexit(EXIT_SUCCESS);

}pid2=fork();if(pid2==0){

sleep(1);cout<<"Proc 2: "<<getpriority(PRIO_PROCESS,pid)<<endl; //…escribir en ficheroexit(EXIT_SUCCESS);

}setpriority(PRIO_PROCESS,pid,19);setpriority(PRIO_PROCESS,pid2,0);int status;while(wait(&status)!=-1) continue;f.close();

execlp("gedit", "gedit", "log.txt", NULL); //opcionalexit (EXIT_SUCCESS);}

Page 60: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

PLANIFICACIÓN WINDOWS NT

Page 61: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

FIN DE POLÍTICAS DE PLANIFICACIÓN

Page 62: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

THREAD (Proceso ligero)

DefiniciónUn thread es un proceso que comparte un espacio en memoria con otros threads.

Estructura de un proceso en WIN NT

COMPARTEN MEMORIA

¡Si termina el hilo principal mueren el resto de hilos!

Page 63: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Paralelización con procesos ligeros

Page 64: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

PROGRAMACIÓN CON THREADSUn thread es equiparable a una función que se ejecuta en PARALELO con otras funciones (threads)

Programación con hilosElevada dificultadAl escribir código es fundamental tener en cuenta un PARALELISMO REAL (aun cuando se tenga un solo procesador)Imaginar LLAMADAS DISTINTAS AL MISMO CÓDIGO

Comunicación entre hilos Variables compartidas en memoriaDescriptores de recursos compartidos,Elementos de sincronización compartidos etc.

Aumenta la velocidad de ejecución de tareas con E/S

Page 65: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

APLICACIÓN: DISEÑO DE SERVIDORES

Tres arquitecturas de servidor

Page 66: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

GESTIÓN DE PROCESOS LIGEROS

JOINING es uno de los mecanismos de sincronización de hilos

Page 67: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

SERVICIOS POSIX PARA PROCESOS LIGEROS (I)

int pthread_create (pthread_t* , const pthread_attr_t*, void* (*func)(void*), void* arg )

Crea un proceso ligero que ejecuta func con argumentos arg y atributos attrAtributos (modificables mediante servicios)

Tamaño de la pilaPrioridad, Política de planificación etc.

RETURN VALUE: 0-OK o ERRNUM

void pthread_exit (void* value)Finaliza la ejecución e indica el estado de terminación

pthread_t pthread_self (void)Devuelve el identificador del thread que realiza la llamada

¿COMPARATIVA CON EXIT PARA PROCESOS?

Page 68: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

SERVICIOS POSIX PARA PROCESOS LIGEROS (II)

int pthread_join (pthread_t tid, void ** value_ptr)Suspende la ejecución de un thread JOINABLE hasta que termina el thread (a no ser que haya terminado)Devuelve el estado de terminación del thread en value_ptrsegún devuelto por pthread_exit o PTHREAD_CANCELED .RETURN VALUE: 0-OK

int pthread_detach (pthread_t pid)Convierte un hilo en DETACHED en tiempo de ejecuciónRETURN VALUE: 0-OK

#include <pthread.h> Linkar con pthread

Page 69: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Ejemplos: Hilos-Creación

int main(void){

pthread_t thid;pthread_create(&thid, NULL, sumar_thread, NULL);

if(pthread_join(thid,NULL)){ //0-OKcout<<“Hilo joinable no terminado adecuadamente”<<endl;

}exit(EXIT_SUCCESS);}

void* sumar_thread (void*){

int a=5;int b=8;cout<<“la suma del hilo es:”<<a+b<<endl;

phtread_exit(NULL);}

Page 70: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Ejemplos: Hilos-Paso de parámetros

struct sSUMANDOS {int a; int b;} ;int main(void){

sSUMANDOS sum; sum.a=10; sum.b=20;pthread_t thid;pthread_create(&thid, NULL, sumar_thread, &sum);

pthread_join(thid,NULL);exit(EXIT_SUCCESS);}

void* sumar_thread (void*param){

sSUMANDOS* p=(sSUMANDOS*) param;cout<<“la suma del hilo es:”<<p a +p b<<endl;

phtread_exit(NULL);}

Page 71: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Ejemplos: Hilos-Comunicación (I)

struct sSUMANDOS {int a; int b;} ;int main(void){

sSUMANDOS sum; sum.a=10; sum.b=20;pthread_t thid;pthread_create(&thid, NULL, sumar_thread, &sum);

pthread_join(thid,NULL);cout<<“Los valores nuevo son:”<<sum.a<“:”<<sum.b<<endl;

exit(EXIT_SUCCESS);}

void* sumar_thread (void*param){

sSUMANDOS* p=(sSUMANDOS*) param;p a=8; p b=10; //…modifica variable en bloque invocante

phtread_exit(NULL);}

Page 72: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Ejemplos: Hilos-Comunicación (II)

struct sSUMANDOS {int a; int b;} ;int main(void){

sSUMANDOS sum; sum.a=10; sum.b=20;pthread_t thid;pthread_create(&thid, NULL, sumar_thread, &sum);

void* ret_thread;pthread_join (thid, &ret_thread);sSUMANDOS ret;ret.a=((sSUMANDOS*) ret_thread) a;ret.b=((sSUMANDOS*) ret_thread) b;cout<<“Los valores devueltos son:”<<ret.a<“:”<<ret.b<<endl;

exit(EXIT_SUCCESS);}

void* sumar_thread (void*param){

sSUMANDOS* p=(sSUMANDOS*) param;sSUMANDOS* pret=new sSUMANDOS;pret->a=p a*2; pret->b=p b*2; //mod. de valores

phtread_exit(pret);}

Page 73: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Ejemplos: Hilos-Comunicación (III)

struct sSUMANDOS {int a; int b;} ;int suma=0; //variable compartida en memoriaint main(void){

sSUMANDOS sum; sum.a=10; sum.b=20;pthread_t thid;pthread_create(&thid, NULL, sumar_thread, &sum);

pthread_join(NULL);cout<<“La suma es:”<<suma<<endl;

exit(EXIT_SUCCESS);}

void* sumar_thread (void*param){

sSUMANDOS* p=(sSUMANDOS*) param;suma=p a + p b;

phtread_exit(NULL);}

Page 74: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

Ejemplos: Hilos-DETACHED

int main(void){

pthread_t thid;pthread_create(&thid, NULL, sumar_thread, NULL);

pthread_detach (thid);pthread_join(NULL);cout<<“hilo principal terminado”<<endl;

exit(EXIT_SUCCESS);}

void* sumar_thread (void*param){

sleep(10);cout<<“hilo terminado”<<endl;

phtread_exit(NULL);}

Page 75: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

SERVICIOS POSIX PARA PROCESOS LIGEROS (III)

int pthread_attr_init (pthread_attr_t* attr)Inicializa la estructura de atributos de un thread a sus valorespor defecto previstos por el S.O.RETURN VALUE: 0-OK

int pthread_attr_setdetachstate (pthread_attr_t* attr, intdetachstate)

Establece la forma de terminar de un proceso ligeroSi detachstate = PTHREAD_CREATE_DETACHED el proceso ligero libera sus recursos cuando finalice su ejecuciónSi detachstate = PTHREAD_CREATE_JOINABLE no se liberan los recursos. Hay que utilizar pthread_join(…)En el caso general los hilos deberían ser generados como joinable (recomendado en el standard de POSIX)RETURN VALUE: 0-OK

Por defecto

Page 76: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

SERVICIOS POSIX PARA PROCESOS LIGEROS (IV)

int pthread_attr_setschedpolicy(pthread_attr_t* attr, intschedpol)

Establece la política de planificación de un proceso ligeroTiene que tener la proiedad de PTHREAD_EXPLICIT_SCHEDSi schedpol = SCHED_FIFO: política FIFOSi schedpol = SCHED_RR : política ROUND ROBIN

int pthread_attr_setinheritsched (pthread_attr_t* attr, intinheritsched)

Establece la política de planificación en relación con el padreSi inheritsched = PTHREAD_EXPLICIT_SCHED se permite que tenga una política de planificación diferente a la del padreSi inheritsched = PTHREAD_INHERIT_SCHED se hereda la política de planificación del padre

Por defecto

Por defecto

Page 77: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

EJEMPLO JERARQUÍA DE THREADS (I)

LIBRERÍA

THREAD

ATRIBUTOS

Page 78: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

EJEMPLO THREADS (II)

ATRIBUTO DETACHED

ESPERA A TERMINACIÓN DE HIJOS

¿PASO DE PARÁMETROS?

Page 79: Procesos e hilos - elai.upm.es · La unidad de procesamiento gestionada por el S.O. Presencia en memoria y tabla BCP ` Registros de la CPU ` Contexto ` Entorno ` Identificadores de

FIN DE SERVICIOS POSIX PARA HILOS