ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat...

46
Procesos ARISO 2 Escola Tècnica Superior d’Enginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Transcript of ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat...

Page 1: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

ProcesosARISO 2

Escola Tècnica Superior d’Enginyeria de Telecomunicació de Barcelona(Universitat Politècnica de Catalunya)

Page 2: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Esta obra está bajo una licencia Reconocimiento-No comercial-Compartir bajo la misma licencia 2.5 España de Creative Commons. Para ver una copia de esta licencia, visite:

http://creativecommons.org/licenses/by-nc-sa/2.5/es/

o envíe una carta a:Creative Commons, 559 Nathan Abbott Way, Stanford,California 94305, USA.

Licencia Creative Commons

Page 3: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Eres libre de: copiar, distribuir y comunicar públicamente la obra hacer obras derivadas

Bajo las condiciones siguientes: Atribución. Debes reconocer la autoría de la obra en los términos especificados por el

propio autor o licenciante. No comercial. No puedes utilizar esta obra para fines comerciales. Licenciamiento Recíproco. Si alteras, transformas o creas una obra a partir de esta obra,

solo podrás distribuir la obra resultante bajo una licencia igual a ésta. Al reutilizar o distribuir la obra, tienes que dejar bien claro los términos de la licencia de

esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de

los derechos de autor

Advertencia: Los derechos derivados de usos legítimos u otras limitaciones reconocidas por ley no se

ven afectados por lo anterior. Esto es un resumen legible por humanos del texto legal (la licencia completa)

Licencia Creative Commons

Page 4: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

ProcesosIntroducción

Page 5: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Que es un programa? Estático Fichero ejecutable:

◦ Colección de instrucciones guardadas en disco Cargar en memoria y ejecutar

Programa

Proceso

Page 6: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Que es un proceso? Unidad de asignación de recursos que

proporciona el SO (memoria, flujos, canales)

La cantidad de recursos de un proceso es dinámica (se asignan/se liberan)

Los procesos se gestionan mediante llamadas a sistema◦ Crear/destruir/modificar/consultar

Page 7: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Características Process Identifier (PID) User I/O Channels Signals / Exceptions Priority and Scheduling Process Control Block (PCB)

Page 8: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Características Se identifican mediante un PID (Process

IDentifier)◦ Único en el sistema◦ Constante durante toda la vida del proceso

Están asociados a un usuario◦ Tendrá acceso a los recursos en función del usuario◦ Se puede cambiar de usuario

Dispone de canales para realizar la E/S Gestión de excepciones y eventos Tienen prioridades, usadas para planificar Esta información se almacena en el PCB (Process

Control Block)

Page 9: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Imagen de un proceso

Código

Datos

Pila

Memoria

Imagen en memoria del proceso Código Datos Pila

Page 10: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

ProcesosModelo de procesos

Page 11: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Concurrencia de procesos ¿Por que ejecutar simultáneamente varios

procesos?◦ Aprovechar el tiempo de E/S◦ Varios procesadores: paralelismo◦ Compartir recursos entre usuarios

Page 12: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Concurrencia y paralelismo Paralelismo

Concurrencia

Combinados

Proc1

Proc2

Proc3

CPU1

CPU2

CPU3

Proc1 Proc2 Proc3CPU

Proc1 Proc2CPU1

Proc3 Proc4CPU2

Proc5 Proc6CPU3

t

t

t

Page 13: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Estados de un proceso Creación de un proceso

◦ Inicialización del sistema◦ Llamada a sistema: creación de proceso◦ “Mutación” de un proceso

Finalización de un proceso◦ Voluntario

Normal exit Error exit

◦ Involuntario Fatal error Killed

Page 14: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Estados de un proceso

Running

Blocked Ready0

2

1

4

3

5

0 Creación del proceso

1 Planificador escoge este

2 Planificador coge otro

3 Proceso bloqueado E/S

4 E/S disponible

5 Fin del proceso

Page 15: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Process Control Block 1 Process Table n PCBs

Process Management•Registers•Program Counter•Program Status Word•Stack pointer•Process state•Priority•Scheduling parameters•Process ID•Parent Process•Signals•Init Time•CPU Time Used

Memory Management

•Pointer to code segment•Pointer to data segment•Pointer to stack segment

File Management

•Root directory•Working directory•File descriptors•User ID•Group ID

Page 16: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

ProcesosScheduling

Page 17: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Planificación El planificador (scheduler)

◦ Decide cuando cambiar de proceso◦ Decide que proceso ejecutar

Algoritmos de planificación◦ Dependen del entorno del sistema

Proc1 Proc2 Proc3CPU

t

Page 18: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Planificación

Entorno (environment)

•Troughput: Max. trabajos/hora•Turnaround time: Min. tiempo inicio/fin•Utilización CPU: Max. el uso de la CPUBatch•Tiempo de respuesta: responder rápido•Proporcionalidad: Expectativas de usuario

Interactivos

•Deadlines: responder a tiempo•Predictibilidad: funcionamiento continuo

Tiempo Real

Page 19: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Planificación Batch Planificacor no apropiativo (nonpreemptive)

◦ El SO no expulsa nunca al proceso de la CPU◦ El proceso abandona voluntariamente la CPU

Planificador apropiativo (preemptive)◦ El SO puede decidir expulsar a un proceso de la

CPU

Page 20: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Planificación Batch First Come First Served (FIFO)

◦ No Apropiativo

Prioridades Shortest Job First

◦ No Apropiativo

Shortest Remaining Time Next◦ Apropiativo

Page 21: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Planificación Interactivos Round-Robin Scheduling (quantum) Priority Scheduling (estática vs dinámica) Multilevel Queues

Lottery Scheduling

Prioridad 4

Prioridad 3

Prioridad 2

Prioridad 1

P1 P2 P3

P4 P5 P6

P8

P7

Page 22: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

ProcesosLinux / UNIX

Page 23: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Creación de procesos fork()

◦ Crea un nuevo proceso idéntico Copia código Copia datos Copia pila

◦ PCB nuevo en la Process Table Nuevo PID Nuevo Parent Process

Código

Datos

Pila

Código

Datos

Pila

Código

Datos

Pila

Page 24: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Creación de procesosTabla de canales

Tabla de ficheros abiertos

1

1

Inodos

1

1

Proceso1

Page 25: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Creación de procesos

Proceso1

Tabla de canales

Tabla de ficheros abiertos

2

2

Inodos

1

1

Proceso2

Tabla de canales

Page 26: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Creación de procesos int fork()

◦ Valor de retorno: 0 si eres el hijo PID del hijo si eres el padre -1 error

Page 27: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Finalización de procesos exit(int status)

◦ Finaliza un proceso◦ Devuelve status al proceso padre

Que hace el SO:◦ Liberar memoria (código, pila, datos)◦ Cerrar y destruir la tabla de canales◦ Decrementar # links de la TFA

Page 28: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Sincronización de procesos int wait(int *status)

◦ Espera a la finalización de un HIJO cualquiera◦ Devuelve:

PID del hijo que finaliza -1 en caso de error

◦ Status contendrá el valor del exit del hijo

Page 29: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Estados de un proceso 2

Running

Blocked Ready

Zombie

Page 30: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Sincronización de procesos int wait(int *status)

◦ ∃ hijo zombie Devuelve PID, status Finaliza el proceso hijo

◦ ∄ hijo zombie ∃ hijo(s) vivo(s)

Bloqueo hasta que un hijo acabe ∄ hijo(s) vivo(s)

Retorna -1

Page 31: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Sincronización de procesos int waitpid (int pid, int *stat, int flags)

◦ Espera a la finalización de un HIJO en concreto◦ Devuelve:

PID del hijo que finaliza -1 en caso de error

◦ Status contendrá el valor del exit del hijo◦ Flags modifican el comportamiento de la función

Page 32: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Mutación de procesos int execl(char *path, char *arg0,…, null ) int execv(char *path, char *arg[] )

◦ Ejecuta un programa nuevo◦ Sustituye:

Código, Datos y Pila

◦ Path ruta al fichero a ejecutar (“/bin/ls”)◦ Arg lista de argumentos, comienzan por el

ejecutableexecl (“/bin/ls”, “ls”, “-la”,null)

Page 33: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Datos de proceso int getpid( )

◦ Devuelve el PID del proceso actual

int getppid()◦ Devuelve el PID del proceso padre

Page 34: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

ProcesosEjercicios

Page 35: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Ejercicio: Factorialint factorial(int num){int tmp=1;while (num>1)

{tmp = tmp * num;num--;}

return(tmp);}

void hijo(int inicio){for (; inicio < 13; inicio +=2)

printf("Factorial de %d es %d\n", inicio, factorial(inicio));

}

Page 36: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Ejercicio: Factorial Solucion 1int main( void ){ int pid1,pid2;pid1=fork();if (pid1==0) // Estoy en el hijo1

{ hijo(0); exit(0); }

else { // Estoy en el padre pid2=fork();

if (pid2==0) // Estoy en el hijo2{hijo(1); exit(1); }else { wait(NULL); wait(NULL); }

}

}

Page 37: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Ejercicio: Factorial Solucion 2int main( void ){ switch(fork()){

case -1: { printf("Error al crear hijo"); exit(0); break;}case 0: { hijo(0); exit(0); break;}

}switch(fork()){

case -1: { printf("Error al crear hijo"); exit(0); break;}case 0: { hijo(1); exit(1); break;}

}

wait(NULL); wait(NULL);

}

Page 38: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Ejercicio: Factorial Solucion 3int main( void ){ int pid1,pid2;pid1=fork();if (pid1==0) // Estoy en el hijo1

{ hijo(0); /*exit(0);*/ }

else { // Estoy en el padre pid2=fork();

if (pid2==0) // Estoy en el hijo2{hijo(1); /*exit(0);*/ }

else { wait(NULL); wait(NULL); }

}

}

Page 39: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Ejercicio: Factorial Solucion 4int main( void ){ int pid1,pid2;int val1,val2;pid1=fork();if (pid1==0) // Estoy en el hijo1

{ hijo(0); exit(1); }else { // Estoy en el padre

pid2=fork();if (pid2==0) // Estoy en el hijo2{hijo(1); exit(2); }

}waitpid(pid1,&val1,0);waitpid(pid2,&val2,0);printf("Pid:%d Val:%d\nPid:%d Val:%d\n", pid1,val1>>8,pid2,val2>>8);

}

Page 40: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Ejercicio: Factorial Solucion 5int main( void ){ int pid1,val1; pid1=fork();if (pid1==0)

{pid1=fork();

if (pid1==0) {hijo(1); exit(2); } hijo(0);

waitpid(pid1,&val1,0); }else

{waitpid(pid1,&val1,0);}}

Page 41: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Ejercicio: Factorial Solucion 6int main( void ){ int pid1,val1; pid1=fork();if (pid1==0)

{pid1=fork();

if (pid1==0) {hijo(1); exit(2); }

waitpid(pid1,&val1,0); hijo(0);

}else

{waitpid(pid1,&val1,0);}}

Page 42: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Ejercicio: MaxProcs1int main( void ){ int pid1,v1,fin=0,cuantos=0;

while(fin==0) { pid1=fork(); switch(pid1) { case -1: fin=1; break; case 0: for(cuantos=0;cuantos<1000;cuantos++)

{fin=cuantos*(cuantos+cuantos)*(cuantos*cuantos);} printf("H Fin: %d\n",getpid()); exit(1); break; default: printf("P New: %d\n",pid1); cuantos++; break; } }

for(fin=0;fin<cuantos;fin++) { printf("P Fin PID=%d\n",wait(NULL)); }

}

Page 43: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Ejercicio: MaxProcs2main( void ){ int i,j,vpid;

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

for(i=1;i<20;i++) { for(j=0;j<35000;j++) {vpid=(j*vpid)/i;} printf("Padre:%d\n",getppid()); } } else { for(i=1;i<5;i++) { for(j=0;j<35000;j++) {vpid=(j*vpid)/i;} } printf("Fin padre\n"); }}

Page 44: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Ejercicio: Exec 1int main( void ){ int pid1,pid2,v1,v2; pid1=fork(); if (pid1==0)

{ execl("/bin/ls","ls","-la",NULL); } else

{pid2=fork();

if (pid2==0) { execl("/bin/cat","cat","/etc/passwd",NULL);

} else {wait(NULL); wait(NULL); } } }

Page 45: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Ejercicio: Exec 2int main( int argc, char **argv ){ int pid1,pid2,v1,v2; if (argc != 3) {printf("Error de parametros\n"); exit(1);} pid1=fork(); if (pid1==0) { execl("/bin/grep","grep",argv[1] ,"/etc/passwd",NULL); }

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

execl("/bin/grep","grep",argv[2],"/etc/passwd",NULL); }

else { waitpid(pid1,&v1,0); waitpid(pid2,&v2,0); printf("Hijo 1: %d\n",v1>>8); printf("hijo 2: %d\

n",v2>>8); } } }

Page 46: ARISO 2 Escola Tècnica Superior dEnginyeria de Telecomunicació de Barcelona (Universitat Politècnica de Catalunya)

Ejercicio: Exec 3int main( void ){ int pid1,pid2,v1,v2; pid1=fork(); if (pid1==0)

{ execl("/bin/ls","ls","-la",NULL); } else

{wait(NULL);pid2=fork();

if (pid2==0) { execl("/bin/cat","cat","/etc/passwd",NULL);

} else {wait(NULL); printf("Padre acaba\n");} }}