procesos e hilost2´j

Upload: gustavo-torres-reyes

Post on 31-Oct-2015

26 views

Category:

Documents


0 download

TRANSCRIPT

Tema 2. Procesos e hilo2. Procesos e hilos SSOO IIII IIII S ndice nConcepto de proceso nInformacin del proceso nEstados del proceso nFormacin de un proceso nConcepto de hilo de ejecucin nProcesos en Minix nProcesos en Linux nProcesos en Windows NT/2000 nPlanificacin de procesos e hilos nServicios POSIX para gestin de procesos e hilos

Tema 2. Procesos e hilo2. Procesos e hilos SSOO IIII IIII S ndice nProcesos en Minix 3Estados de un proceso 3Implementacin del descriptor nProcesos en Linux 3Estados de un proceso 3Implementacin del descriptor 3Implementacin de la tabla de 3Implementacin de la lista de nProcesos en Windows NT/2000 3Objetos tipo proceso e hilo 3Estados de un hilo 3Implementacin del procesos e

de proceso de proceso procesos procesos preparados

hilos

Tema 2. Procesos e hilo2. Procesos e hilos SSOO IIII IIII ndice . Planificacin . Planificacin . Planificacin . Planificacin S de procesos e hilos en Minix en Linux en Windows NT/2000

Tema 2. Procesos e hilo2. Procesos e hilos SSOO IIII IIII Bibliografa . J. Carretero et al. Sistemas Operativos: Una Visin Aplicada. McGrawHill. 2001. Captulo 3 . W. Stallings. Sistemas Operativos. Prenctice-Hall. 2001. Captulos 3, 4, 9 y 10 . A.S. Tanenbaum, A.S. Woodnull. Operating Systems. Design and Implementation. Prentice-Hall International, 2a. edicin. 1996. . H. Custer. Inside Windows NT. Microsoft Press. 1993. S -

Tema 2. Procesos e hilo2. Procesos e hilos SSOO IIII IIII S ndice nConcepto de proceso nInformacin del proceso nEstados del proceso nFormacin de un proceso nConcepto de hilo de ejecucin nProcesos en Minix nProcesos en Linux nProcesos en Windows NT/2000 nPlanificacin de procesos e hilos nServicios POSIX para gestin de procesos e hilos *

Concepto de proceso SSOO IIII IIII S nQu es un proceso? uInstancia de un programa en ejecucin, requiriendo para ello unos recursos Programa: estructura pasiva Proceso: estructura activa Proceso PC Recursos: -Procesador -Zonas de memoria -Ficheros -Dispositivos, etc. Programa Pila Datos Cdigo Otros recursos: -Ficheros abierto -Dispositivos E/S, etc.

S SSOO IIII IIIIConcepto de proceso nJerarqua de procesos: uAlgunos SO, como Unix, mantienen una estructura jerrquica entre procesos uOtros, como Windows NT/2000 (en adelante WNT/2K), no la mantienen Proceso init: lPID = 1 lAncestro de todos los procesos init Inicio Inicio ShellShell Editor Dem. Impr. Dem. Com.. Proceso A Proceso B Proceso D Proceso C Proceso E Proceso F InicioInicio SSOO IIII IIIIConcepto de proceso nJerarqua de procesos: uAlgunos SO, como Unix, mantienen una estructura jerrquica entre procesos uOtros, como Windows NT/2000 (en adelante WNT/2K), no la mantienen Proceso init: lPID = 1 lAncestro de todos los procesos init Inicio Inicio ShellShell Editor Dem. Impr. Dem. Com.. Proceso A Proceso B Proceso D Proceso C Proceso E Proceso F InicioInicio

Concepto de proceso . El proceso nulo (o la tarea ociosa): . Qu ocurre cuando el procesador est ocioso? Se ejecuta el proceso nulo . Qu hace el proceso nulo? Ejecuta un bucle infinito que no realiza ninguna operacin til En sistemas Unix suele tener PID=0 . Objetivo: Entretener al procesador cuando no hay ninguna otra tarea S SSOO IIII IIII

Concepto de proceso . Entorno del proceso: . Tabla NOMBRE-VALOR que se pasa al proceso en su creacin . Se incluye en la pila . Se establece: Por defecto Mediante mandatos del shell (export) . Mediante API del SO (putenv, getenv ) . Ejemplo de entorno de un proceso en Unix: . $env LOGNAME=castano SHELL=/bin/bash TERM=vt100 HOME=/users/icc/castano PATH=/usr/local/bin:/bin:/usr/bin:/users/castano/bin S SSOO IIII IIII ...

Concepto de proceso . Grupos de procesos: . Los procesos forman grupos de procesos con alguna caracterstica comn Conjunto de procesos creados por el mismo padre Conjunto de procesos creados a partir de un shell Conjunto de procesos dependientes de un terminal . Se pueden realizar ciertas operaciones sobre un grupo de procesos Matar todos los procesos de un grupo de procesos Envo de seales a todos los procesos de un grupo de procesos S SSOO IIII IIII

Tema 2. Procesos e hilo2. Procesos e hilos SSOO IIII IIII S ndice nConcepto de proceso nInformacin del proceso nEstados del proceso nFormacin de un proceso nConcepto de hilo de ejecucin nProcesos en Minix nProcesos en Linux nProcesos en Windows NT/2000 nPlanificacin de procesos e hilos nServicios POSIX para gestin de procesos e hilos *

SSOO IIII IIIISSOO IIII IIII Informacin del proceso . Estado del procesador: . Contenido de los registros del modelo de programacin . Imagen de memoria: . Contenido de los segmentos de memoria en los que reside el cdigo y los datos del proceso . Bloque de control de proceso (BCP) S -

Informacin del procesdel proceso SSOO IIII IIII S Mapa de Memoria Mapa de memoria del Proceso A Tablas SO Mapa de memoria del Proceso B Mapa de memoria del Proceso C PC SP Estado Registros generales Registros especiales Tablas del sistema operativo Tabla de procesos -Tabla de memoria -Tabla de E/S -Tabla de ficheros BCP Proceso BBCP Proceso A BCP Proceso C -Identificacin -Control Estado (registros)-Identificacin -Control Estado (registros) -Identificacin -Control Estado (registros)

Estado del procesador . Formado por el contenido de todos los registros del procesador: . Registros generales . Contador de programa . Puntero de pila . Registro de estado . Registros especiales . Cuando un proceso est ejecutando su estado del procesador reside en los registros del computador . Cuando un proceso no se est ejecutando su estado del procesador reside en el BCP S SSOO IIII IIII

Preparacin del cdigo de un proceso SSOO IIII IIII S Mdulo fuente A Mdulo fuente B Compilador o ensamblador Mdulo objeto A Mdulo objeto B Otros objetos Montador Objeto ejecutable Cargador Editor Ejecutable en memoria Problema Bibliotecas del sistema

Imagen de memoria . Formada por los espacios de memoria que un proceso est autorizado a utilizar . La memoria del proceso la asigna el gestor de memoria del SO . Si un proceso genera una direccin que esta fuera del espacio de direcciones el HW genera una interrupcin HW interna . La imagen de memoria, dependiendo del computador, puede estar referida a memoria virtual o memoria fsica S SSOO IIII IIII

Imagen de memoria SSOO IIII IIII S nImagen de memoria de un proceso en un sistema con memoria virtual: Memoria virtual Cdigo Datos Pila Disco Memoria principal Tabla de pginas Una tabla de pginas por proceso RIED Tamao Registro identificador de estado de direccionamiento

Informacin del BCP SSOO IIII IIII S nInformacin de identificacin: uPID del proceso, PID del padre uID de usuario real (uid real) uID de grupo real (gid real) uID de usuario efectivo (uid efectivo) uID de grupo efectivo (gid efectivo) nEstado del procesador nInformacin de control del proceso: uInformacin de planificacin y estado uDescripcin de los segmentos de memoria del proceso uRecursos asignados (ficheros abiertos, ...) uComunicacin entre procesos (seales, ...) uPunteros para estructurar los procesos en listas o colas Tabla de ficheros abiertos por el proceso

Informacin del BCP SSOO IIII IIII . Qu informacin del proceso se saca fuera del BCP? . La que tiene tamao variable Ejemplo: Tabla de pginas Razones de eficiencia La tabla de procesos se construye como una estructura esttica, formada por un nmero de BCP del mismo tamao . La que se comparte: El BCP es de acceso restringido al proceso que lo ocupa Ejemplo: Punteros de posicin de ficheros abiertos por el proceso S -

Informacin del BCP SSOO IIII IIII . Tabla de pginas: . Describe la imagen de memoria del proceso . Tamao variable . El BCP contiene el puntero a la tabla de pginas . La comparticin de memoria requiere que sea externa al BCP . Punteros de posicin de los ficheros: . Si se asocian a la tabla de ficheros abiertos por los procesos (en el BCP) no se pueden compartir . Si se asocian al i-nod se comparten siempre . Se ponen en una estructura comn a los procesos y se asigna uno nuevo en cada servicio open S -

Compartir informacin SSOO IIII IIII S lEl proceso con BCP7 es hijo del proceso con BCP4 lLos procesos con BCP7 y BCP4 comparten punteros a los mismos ficheros lEl proceso con BCP23 abre uno de los ficheros compartido por los procesos con BCP7 y BCP4 Tabla de ficheros BCP 4 BCP 7 BCP 23 23 23 24456 IDFF PP 0 54 4563 4563 34512 2345 633 56 56 28 5566 5368 4 4 34512 10000 33 678 2 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 fd 0 fd fd Tabla de ficheros Tabla de ficheros Tabla de ficheros del sistema IDFF = Identificativo de fichero PP = Posicin puntero al fichero

Tablas del SO SSOO IIII IIII . Tabla . Tabla . Tabla E/S . Tabla S -

de procesos: Tabla con los BCP de los procesos del sistema de memoria: Informacin sobre el uso de la memoria de E/S: Informacin asociada a los perifricos y a las operaciones de de ficheros: Informacin sobre los ficheros abiertos en el sistema

Tablas del SO SSOO IIII IIII S nImplementacin de una cola de procesos listos: Proceso 7 Proceso 5 Proceso 3 Proceso 9 Inicio Tabla de procesosTabla de procesos Cola de procesosCola de procesos listoslistos Fin BCP 1 BCP 2 BCP 3 BCP 4

II SSOOIIIISSOOIIII Usuarios y grupos reales y efectivos II IIII . Usuarios reales y efectivos: . UID ( real user identifier ): Identificativo real del usuario Usuario responsable del proceso en ejecucin . EUID ( effective user id. ): Identificativo efectivo del usuario Se usa para: . Acceder a ficheros de otros usuarios . Enviar seales a procesos . Ejecutar programas setuid . Grupos reales y efectivos: . GID ( real group identifier ): . EGID ( effective group identifier ) S -

Usuarios y grupos reales y efectivos SSOO IIII IIII S nProgramas SETUID : uCuando un proceso ejecuta un programa setuid el ncleo asigna al EUID del proceso el identificativo del propietario de dicho programa y al EGID del proceso el identificativo del grupo del propietario de dicho programa uEjemplos de programas setuid : login, mount, passwd, mkdir, etc. uCambio del bit setuid para el usuario y del bit setgid para el grupo: -r-x- x- x -r-s--x- x -r--- x- x -r-S--x- x -r-x -x----r-x- s -chmod 4511 ( chmod u+s) chmod 4411 ( chmod u+s) chmod 2510 ( chmod g+s) Bit setuid Bit setgid

Tema 2. Procesos e hilo2. Procesos e hilos SSOO IIII IIII S ndice nConcepto de proceso nInformacin del proceso nEstados del proceso nFormacin de un proceso nConcepto de hilo de ejecucin nProcesos en Minix nProcesos en Linux nProcesos en Windows NT/2000 nPlanificacin de procesos e hilos nServicios POSIX para gestin de procesos e hilos *

SSOO IIII IIIISSOO IIII IIII Estados de un proceso . Cuando un proceso se ejecuta pasa por distintintos estados . Diagrama de transicin entre estados: Exit S Ejecucin Listo Bloqueado F i n E / S o l l e ga da ev e n t o EsperaA CPU por E/S o evento Expulsin CPU

Estados de un proceso SSOO IIII IIII S nEstados suspendidos: Ejecucin Listo y suspendido Listo Bloqueado y suspendido Bloqueado Planificado Tiempoconsumido Fin E/S o llegada evento Exit Fin E/S Expulsado al disco Expulsado al disco Recuperado del disco Entra al sistema Memoria Procesos por lotes en espera Espera porE/S o evento Zona de intercambio

Tema 2. Procesos e hilo2. Procesos e hilos SSOO IIII IIII S ndice nConcepto de proceso nInformacin del proceso nEstados del proceso nFormacin de un proceso nConcepto de hilo de ejecucin nProcesos en Minix nProcesos en Linux nProcesos en Windows NT/2000 nPlanificacin de procesos e hilos nServicios POSIX para gestin de procesos e hilos *

Formacin de un procesde un proceso SSOO IIII IIII S Mapa de memoria Imagen del proceso Tabla de procesos BCP Ca rg a d or Objeto ejecutable Biblioteca sistema

Tema 2. Procesos e hilo2. Procesos e hilos SSOO IIII IIII S ndice nConcepto de proceso nInformacin del proceso nEstados del proceso nFormacin de un proceso nConcepto de hilo de ejecucin nProcesos en Minix nProcesos en Linux nProcesos en Windows NT/2000 nPlanificacin de procesos e hilos nServicios POSIX para gestin de procesos e hilos *

Concepto de hilo de ejecucin . Caractersticas bsicas del modelo tradicional de proceso (pesado): . Ejecucin secuencial. . Ejecucin independiente. . Planteamiento: . Varios procesos pueden cooperar para resolver una misma tarea del SO . Ejecucin concurrente entre procesos . Comunicacin entre procesos, por ejemplo, a travs de memoria. . Un programa podra incluir varias actividades concurrentes Ejecucin concurrente dentro de un proceso. S SSOO IIII IIII

SSOO IIII IIIISSOO IIII IIII Concepto de hilo de ejecucin . Qu es un hilo de ejecucin? . Tambin llamado hebra, proceso ligero, flujo, subproceso o thread . . Programa en ejecucin que comparte la imagen de memoria y otros recursos del proceso con otros hilos. . Desde el punto de vista de programacin: Funcin cuya ejecucin se puede lanzar en paralelo con otras. . Un proceso puede contener uno o ms hilos. S -

Concepto de hilo de ejecucin SSOO IIII IIII S nQu es un hilo de ejecucin (cont.)? Hilo: unidad de planificacin Proceso: unidad de asignacin de recursos Proceso Hilo 2 PC2 PC1 Otros recursos: -Ficheros abierto -Dispositivos E/S, etc. Hilo 1 Pila 1 Pila2 Datos Cdigo

Concepto de hilo de ejecucin SSOO IIII IIII S nDescriptor de un proceso y de un hilo: . . . . . . Hilo 1 (principal) Hilos Zonas de memoria Gestin de E/S Otros datos Estado, tiempo de CPU, registros de CPU, pila, etc. Espacio de direcciones Ficheros abiertos, dispositivos abiertos, etc. Hilo 2 Hilo j . . .

Concepto de hilo de ejecucin . Descriptor de un proceso y de un hilo: . Todos los hilos de un proceso comparten el mismo entorno de ejecucin (variables globales, espacio de direcciones, ficheros abiertos, etc.). . Cada hilo tiene su propio juego de registros de CPU, pila, variables locales, etc. . No existe proteccin entre hilos: un error en un hilo puede estropear la pila de otro. . Para ordenar la forma en la que los hilos acceden a datos comunes hay que emplear mecanismos de sincronizacin. S SSOO IIII IIII

Estados de un hilo y de un procesde un hilo y de un proceso SSOO IIII IIII S nEstado de un proceso con hilos: uCombinacin de los estados de sus hilos: lSi hay un hilo en ejecucin Proceso en ejecucin lSi no hay hilos en ejecucin pero s preparados Proceso preparado lSi todos sus hilos bloqueados Proceso bloqueado Proceso Hilo Activo Bloqueado por acceso a disco Bloqueado por comunicacin

SSOO IIII IIII SSOO IIII IIII S Paralelizacin usando hilos nLos hilos permiten paralelizar la ejecucin de una aplicacin nMientras un hilo est bloqueado, otro podra ejecutarse uUso de llamadas al sistema bloqueantes por hilo Procedimiento 2 Procedimiento 1 Espera en E/S P F Procedimiento 1 Ejecucin paralela Ejecucin serie Espera en E/S P F Procedimiento 2 Espera en E/S P F Espera en E/S P F Procesamiento

Servidor con mltiples hilos SSOO IIII IIII S nHilos trabajadores: uPueden crearse a medida que se necesitan y destruirse al finalizar la tarea encomendada uPueden existir siempre y quedar libres al finalizar la tarea encomendada lMs eficiente (evita el trabajo de crear y destruir hilos) Hilo distribuidor Hilo trabajador Peticiones Proceso

S SSOO IIII IIII nEjemplo: Servidor secuencial de ficheros Algoritmo Mientras no haya que terminar { Esperar a que llegue una peticin Comprobar que la peticin es correcta Si (los datos no estn en la cach) { Realizar operacin de E/S bloqueante sobre disco } Enviar resultado } lSencillo lPrestaciones pobres: permanece bloqueado Servidor con mltiples hilos Cach para bloques accedidos recientemente SSOO IIII IIII nEjemplo: Servidor secuencial de ficheros Algoritmo Mientras no haya que terminar { Esperar a que llegue una peticin Comprobar que la peticin es correcta Si (los datos no estn en la cach) { Realizar operacin de E/S bloqueante sobre disco } Enviar resultado } lSencillo lPrestaciones pobres: permanece bloqueado Servidor con mltiples hilos Cach para bloques accedidos recientemente

Servidor con mltiples hilos SSOO IIII IIII S nEjemplo (cont.): Servidor de ficheros con mltiples hilos lMayor complejidad lBuenas prestaciones Algoritmo 1 Mientras no haya que terminar { Esperar a que llegue una peticin Esperar trabajador libre } Enviar resultado } Algoritmo 2 Mientras no haya que terminar { Esperar trabajo Comprobar que la peticin es correcta Si (los datos no estn en la cach) { Realizar operacin de E/S bloqueante sobre disco } Enviar resultado Avisar que est libre } Hilo distribuidor Hilo trabajador

Concepto de multihilmultihilo SSOO IIII IIII S nCapacidad de un SO para mantener varios hilos de ejecucin dentro de un mismo proceso. Mltiples procesos Mltiples hilos/proceso Ej: Windows 2000, Solaris, OS/2 TcnicaTcnica multihilomultihilo Un proceso Mltiples hilos/proceso Ej: Java Un proceso Un hilo/proceso Ej: MS-DOS Mltiples procesos Un hilo/proceso Ej: Algunos UNIX MonoMono ProceProce SadoSado resres TcnicaTcnica monohilomonohilo Proceso Hilo MultiMulti ProceProce sadosado resres

SSOO IIII IIIISSOO IIII IIII Implementacin de hilos . Dos categoras: . Hilos a nivel de usuario . Hilos a nivel de ncleo S -

Hilos a nivel de usuario SSOO IIII IIII S nGestin de hilos realizada por la aplicacin a nivel de usuario mediante una biblioteca de hilos. nEl ncleo no es consciente de la existencia de hilos. nEs posible programar cualquier aplicacin como multihilo. Biblioteca de hilos Modo supervisor Modo usuario P Hilo a nivel de usuario ProcesoP

Hilos a nivel de usuario SSOO IIII IIII . Ventajas frente a hilos a nivel de ncleo: . No necesario acceder al ncleo para intercambio de hilos. . Algoritmos de planificacin ad-hoc para cada aplicacin. . Pueden ejecutarse en cualquier SO. . Desventajas frente a hilos a nivel de ncleo: . Una llamada al sistema realizada por un hilo bloquea a todos los hilos del proceso. . Una aplicacin multihilo no puede aprovechar las ventajas del multiprocesamiento. . Ejemplo: . Pthreads de POSIX. S -

Hilos a nivel de ncleo SSOO IIII IIII S nGestin de hilos realizada por el ncleo. nEs posible programar cualquier aplicacin como multihilo. Modo supervisor Modo usuario Proceso Hilo a nivel de usuario P Hilo a nivel de ncleo P

Hilos a nivel de ncleo SSOO IIII IIII . Ventajas frente a hilos a nivel de usuario: . El bloqueo de un hilo no supone (necesariamente) bloquear todo el proceso. . Planificacin de mltiples hilos de un proceso en mltiples procesadores. . Las funciones del ncleo pueden ser multihilo. . Desventajas frente a hilos a nivel de usuario: . El intercambio de hilos se realiza accediendo al ncleo. . Ejemplos: . Linux, Windows 2000, OS/2. S -

SSOO IIII IIIISSOO IIII IIII Aproximaciones combinadas . Ejemplo: Solaris . Creacin, sincronizacin y planificacin de hilos de una aplicacin en modo usuario. . Planificacin de mltiples hilos de un proceso en mltiples procesadores. . El bloqueo de un hilo no supone (necesariamente) bloquear todo el proceso. S -

Aproximaciones combinadas SSOO IIII IIII S nEjemplo: Solaris (cont.) Modo usuario Biblioteca de hilos Modo supervisor Proceso Hilo a nivel de usuario P Hilo a nivel de ncleo P P

Modelos multihilmultihilo SSOO IIII IIII . Relacin de: . Muchos a uno. . Uno a uno. . Muchos a muchos. Hilo a nivel de usuario (HNU) Hilo a nivel de ncleo (HNN) S DescripcinHNU:HNN Ejemplos Pthreads POSIX Windows 2000, OS/2 Solaris M:1 1:1 M:N

Concepto de hilo de ejecucin . Ventajas de utilizar mltiples hilos: . La ejecucin concurrente de hilos de un mismo proceso puede mejorar la eficiencia del sistema. Paralelismo dentro del proceso (en multiprocesadores). Las operaciones bloqueantes no paralizan al proceso (completo). . Mayor eficiencia que con mltiples procesos en: Creacin/eliminacin de unidades de planificacin. Cambio de contexto. . Una buena solucin para sistemas cliente/servidor. . Facilidad de implementacin. S SSOO IIII IIII

Tema 2. Procesos e hilo2. Procesos e hilos SSOO IIII IIII ndice . Concepto de proceso . Informacin del proceso . Estados del proceso . Formacin de un proceso . Concepto de hilo de ejecucin * . Procesos en Minix . Estados de un proceso . Implementacin del descriptor de proceso S -

Procesos en MiniMinix SSOO IIII IIII S nDiagrama de transicin entre estados: uready: Pone el proceso en alguna de las colas de procesos listos del planificador Activa el proceso uunready: Elimina el proceso de las colas de procesos listos Suspende el proceso upick_proc: Selecciona el proceso listo a ser ejecutado por la CPU Planificador usched: Pone al final de la cola el proceso de usuario en ejecucin pues ste ha agotado su quantum de CPU ready sched En ejecucin unreadypick_proc BloqueadoListo

Procesos en MiniMinix SSOO IIII IIII . Descriptor de un proceso: EXTERN struct proc{ int p_reg[NR_REGS]; /* process registers * / int *p sp; /* stack pointer * / struct pc_psw p_pcpsw; /* pc and psw as pushed by interrupt* struct mem_map p_map[NR SEGS];/* memory map * / int *p splimit; /* lowest legal stack value * int p_pid; /* process id passed in from MM* int p_flags; /* P_SLOT_FREE, SENDING, RECEIVING, * /* or 0 if the process is runnable * real_time / real_time / real_time real_time real_time S user_time; /* user time in ticks * sys_time; /* sys time in ticks * child_utime; /* cumulative user time of children * child_stime; /* cumulative sys time of children * p alarm; /* time of next alarm in ticks, or 0 *

Procesos en MiniMinix SSOO IIII IIII . Descriptor de un proceso (cont.): struct proc *p_callerq; /* head of list of procs wishing to send * struct proc *p_sendlink; /* link to next proc wishing to send * message *p_messbuf; /* pointer to message buffer * int p_getfrom; /* from whom does process want to receive? * stuct proc *p_nextready; /* pointer to next ready process * int p_pending; /* bit map for pending signals * } proc[NR_TASKS+NR PROCS] ; S -

Tema 2. Procesos e hilo2. Procesos e hilos SSOO IIII IIII ndice . Concepto de proceso . Informacin del proceso . Estados del proceso . Formacin de un proceso . Concepto de hilo de ejecucin . Procesos en Minix * . Procesos en Linux . Estados de un proceso . Implementacin del descriptor de proceso . Implementacin de la tabla de procesos S 3Implementacin de la lista de procesos preparados

Procesos en LinuLinux SSOO IIII IIII . Diagrama de transicin entre estado tpico. . Bloqueo de un proceso: . Espera a que ocurra un cierto evento . Proceso bloqueado e interrumplible: Puede ser interrumpido por seales Puede desbloquearle: . Una interrupcin HW . Liberacin de un recurso por el que esperaba . Una seal . Proceso bloqueado e ininterrumplible: No acepta seales Puede desbloquearle: . Una interrupcin HW S Liberacin de un recurso por el que esperaba

Procesos en LinuLinux SSOO IIII IIII . Descriptor de un proceso: . Estructura task struct del fichero include/linux/sched.h . Estado del proceso: volatile long state; #define TASK_RUNNING 0 /* Proceso listo o en ejecucin * #define TASK_INTERRUPTIBLE 1 /* Proceso bloqueado interrumpible * #define TASK_UNINTERRUPTIBLE2 /* Proceso bloquea ininterrumpible * #define TASK_ZOMBIE 3 /* Proceso finalizado * / #define TASK_STOPPED 4 /* Proceso parado tras llegar una seal SIGSTOP* / unsigned long flags; /* Combinacin de las banderas de estado * #define PF_STARTING 0x00000002 /* Recin creado * #define PF_EXITING 0x00000004 /* Finalizando * S Variable current: Puntero a la estructura task_structdel proceso en ejecucin

Procesos en LinuLinux SSOO IIII IIII . Identificativos del proceso: pid_t pid; /* Identificativo del proceso * / pid_t pgrp; /* Identificativo del grupo del proceso* pid_t session; /* Nmero de sesin del proceso * / uid_t uid,euid; /* Identificativo real y efectivo del usuario * gid_t gid,egid; /* Identificativo real y efectivo del grupo * gid_t groups[NGROUPS]; /* Lista grupos a los que pertenece el proceso * S -

Procesos en LinuLinux SSOO IIII IIII . Planificacin del proceso: unsigned long policy; /* Tres posibles polticas de planificacin * #define SCHED_FIFO 1 #define SCHED_RR 2 #define SCHED_OTHER 0 long counter; /* Procesos SCHED_OTHER: Tiempo de CPU por consumir * / /* Procesos RR: Valor actual del quantum de CPU (prioridad dinmica) * / long priority; /* Procesos RR: Valor inicial del quantum de CPU (prioridad esttica) * / Los tiempos de CPU se miden en tics de reloj S -

Procesos en LinuLinux SSOO IIII IIII S nJerarqua del proceso: struct task_struct *p_opptr; /* Original parent */ struct task_struct *p_pptr; /* Parent */ struct task_struct *p_cptr; /* Youngest child */ struct task_struct *p_ysptr; /* Younger sibling */ struct task_struct *p_osptr; /* Older sibling */ hijo ms joven hijo hijo ms viejo padre p_pptr p_osptr p_ysptr p_osptr p_ysptr p_pptr p_pptr p_cptr

Procesos en LinuLinux SSOO IIII IIII . Seales del proceso: struct sigset_t signal; /* Mapa de bits de seales recibidas * struct sigset_t blocked; /* Mapa de bits de seales bloqueadas * struct sigset_t sigpending; /* Mapa de bits de seales no bloqueadas y pendientes * / struct signal struct *sig; /* Manejadores de seales * struct signal struct { atomic_t count; struct sigaction action[NSIG];/* Funcin que modifica el tratamiento por defecto de la seal * } ; int exit signal; /* Nmero de seal que mat al proceso * struct wait queue *wait chldexit;/* Lista de espera de finalizacin de hijos * / S -

Procesos en LinuLinux SSOO IIII IIII . Monitorizacin del proceso: long per cpu utime[NR_CPU]; /* Tiempo del proceso en modo usuario * long per cpu stime [NR_CPU]; /* Tiempo del proceso en modo supervisor * long start_time; /* Tiempo de creacin del proceso * /* Tiempos sobre temporizadores y alarmas * unsigned long it_real_value; /* Tiempo real * / unsigned long it prof value, /* Tiempo en ejecucin o estado listo * unsigned long it virt value; /* Tiempo en ejecucin sin contar la ejecucin de llamadas al sistema */ struct timer_list real_timer; /* Lista de alarmas */ Temporizador vs. Alarma? S -

Procesos en LinuLinux SSOO IIII IIII . Segmentos de memoria del proceso: struct mm_struct *mm; struct mm_struct { .. . struct vm_area_struct *mmap; struct vm_area_struct *mmap_avl; struct vm_area_struct *mmap_cache; unsigned long start code, end code; /* Direccin de inicio y fin del segmento de cdigo * unsigned long start_data, end_data; /* Direccin de inicio y fin del segmento de datos * unsigned long start stack; /* Direccin del tope del segmento de pila de usuario * .. . } ; S -

Procesos en LinuLinux SSOO IIII IIII . Sistema de ficheros del proceso: struct fs struct *fs; /* Informacin del sistema de ficheros * struct files_struct *files; /* Informacin de ficheros abiertos por el proceso * struct fs_struct { atomic t count; /* Nmero de procesos que comparten esta estructura * int umask; /* Mscara de creacin de ficheros * struct dentry * root; /* Directorio raz del proceso * / struct dentry * pwd; /* Directorio de trabajo * / } ; struct files_struct { tomic t count; /* Num. procs que comparten estos ficheros abiertos * fd set * close on exec;/* Ficheros a cerrar ante una llamada exec * fd set * open fds; /* Mscara bits de los descriptores de fichs usados * struct file * fd array[NR_OPEN_DEFAULT] ; /* Tabla de ficheros abiertos por el proceso* S };

Procesos en LinuLinux SSOO IIII IIII S nSistema de ficheros del proceso (cont.): Tabla de inodosTabla de ficheros del sistema Tabla de ficheros del proceso 0 1 2 3 4 5 6 1 READ . . . 1 WRITE 1 READ . . . . . . 1 /etc/passwd 2 /usr/castano . . .

SSOO IIII IIII SSOO IIII IIII S Procesos en Linux nLista de procesos preparados: uLista circular doblemente enlazada que comienza y finaliza con el proceso init_task (PID=0) struct task struct *next run; /* Siguiente proceso de esta lista */ struct task struct *prev run; /* Anterior proceso de esta lista */ extern struct task struct init task; /* Cabeza y cola de la lista */ int nr running; /* Num. total de procesos listos */ struct task_struct *current; /* Proceso en ejecucin */ procesoinit_task proceso A proceso B next_run prev_run Incluye el proceso en ejecucin

SSOO IIII IIII SSOO IIII IIII S Procesos en Linux nLista de procesos del sistema: uLista circular doblemente enlazada que comienza y finaliza con el proceso init_task struct task struct *next task; /* Siguiente proceso de esta lista */ struct task struct *prev task; /* Anterior proceso de esta lista */ extern struct task struct init task; /* Cabeza y cola de la lista */ procesoinit_task proceso A proceso B next_task prev_task

Procesos en LinuLinux SSOO IIII IIII . Tabla de procesos: Vector task del fichero kernel/sched.c struct task_struct * task[NR_TASKS] = {&init_task, } ; struct task_struct init_task; . Operaciones habituales sobre (todos los procesos de) la lista de procesos del sistema: Vector task del fichero kernel/sched.c #define for_each_task(p) \ for (p = &init_task ; (p = p->next_task) != &init task ;) S -

Tema 2. Procesos e hilo2. Procesos e hilos SSOO IIII IIII ndice . Concepto de proceso . Informacin del proceso . Estados del proceso . Formacin de un proceso . Concepto de hilo de ejecucin . Procesos en Minix . Procesos en Linux * . Procesos en Windows NT/2000 . Objetos tipo proceso e hilo . Estados de un hilo . Implementacin del procesos e hilos S -

SSOO IIII IIIISSOO IIII IIII Procesos en Windows NT/2000 . Caractersticas de un proceso de Windows NT/2000: . Los procesos NT se implementan como objetos y son accedidos mediante servicios de objetos . Un proceso NT tiene asociados varios hilos que se ejecutan en su espacio de direccionamiento . El gestor de procesos NT no mantiene ninguna relacin entre los procesos que crea S -

. Objeto tipo proceso: S SSOO IIII IIIIProcesos en Windows NT/2000 Identificativo de proceso Objeto de acceso Prioridad base Afinidad del procesador Tiempo de ejecucin Puertos de comunicacin Estado de finalizacin etc. PROCESO Tipo del objeto Atributos del objeto Servicios del objetoCrear proceso Abrir proceso Pedir informacin del proceso Aadir informacin del proceso Finalizar proceso Asignar/liberar memoria virtual Leer/escribir memoria virtual etc.

II SSOOIIIISSOOIIII Procesos en Windows NT/2000 II IIII . Objeto tipo proceso (cont.): Atributo Descripcin ID proceso Valor nico que identifica al proceso Acceso Objeto con informacin de seguridad sobre el usuario que gener el objeto Prioridad base Prioridad base de sus hilos Afinidad del procesador Procesadores en los que se pueden ejecutar sus hilos Lmites de cuotas Cantidad mxima de memoria paginada y no paginada, de tiempo de ejecucin, etc. Tiempo de ejecucin Tiempo total de ejecucin de todos sus hilos Puertos comunicacin Canal de comunicacin al que enviar un mensaje si un hilo genera una excepcin S Estado de finalizacin Motivo de la finalizacin del proceso

. Objeto tipo hilo: S SSOO IIII IIIIProcesos en Windows NT/2000 Identificativo de hilo Contexto Prioridad base Prioridad dinmica Afinidad del procesador Tiempo de ejecucin Puerto de terminacin Estado de finalizacin etc. HILO Tipo del objeto Atributos del objeto Servicios del objeto Crear hilo Abrir hilo Pedir informacin del hilo Aadir informacin del hilo Finalizar hilo Suspender/continuar hilo Guardar/cargar contexto etc.

SSOO IIII IIIISSOO IIII IIII Procesos en Windows NT/2000 . Objeto tipo hilo (cont.): Atributo Descripcin ID hilo Valor nico que identifica al hilo Contexto Valores de los registros y de otros datos que definen su estado de ejecucin Prioridad dinmica Prioridad de ejecucin en ese instante Prioridad base Lmite inferior de la prioridad dinmica S Estado de finalizacin Motivo de la finalizacin del subproceso Afinidad del procesador Procesadores en los que se puede ejecutar Tiempo de ejecucin Tiempo de ejecucin transcurrido en modo usuario y en modo supervisor Puerto de terminacin Canal de comunicacin al que enviar un mensaje cuando finaliza

Procesos en Windows NT/2000 SSOO IIII IIII S nDiagrama de transicin entre estados (de un hilo): Inicializado Finalizado Ejecucin Bloqueado Alerta ListoEvento Expulsar Reinicializar Finalizacin A CPU Esperar evento Expulsar Planificador

II SSOOIIIISSOOIIII Procesos en Windows NT/2000 II IIII . Algunos estados de un hilo: . Alerta: Seleccionado como el siguiente hilo a ser ejecutado en un procesador dado Operacin (planificacin) previa a la invocacin de un cambio de contexto . Bloqueado: Espera a que un objeto de sincronizacin pase a una situacin de marcado ("signaled") que indique la llegada del evento de espera S -

Procesos en Windows NT/2000 SSOO IIII IIII S nImplementacin de procesos e hilos en Windows NT/2000: Objeto proceso Objeto de aceeso Descripcin del espacio virtual de direccionamiento Subproceso x Fichero y Seccin z Tabla de objetos . . . . . .

Tema 2. Procesos e hilo2. Procesos e hilos SSOO IIII IIII S ndice nConcepto de proceso nInformacin del proceso nEstados del proceso nFormacin de un proceso nConcepto de hilo de ejecucin nProcesos en Minix nProcesos en Linux nProcesos en Windows NT/2000 nPlanificacin de procesos e hilos* 3Planificacin en Minix 3Planificacin en Linux 3Planificacin en Windows NT/2000

S SSOO IIII IIIIEl planificador de Minix nSistema de colas multinivel (sin realimentacin) con prioridades expulsivas nSe invoca al planificador (rutina pick_proc) cuando: uSe bloquea un proceso (en ejecucin) con SEND o RECEIVE uTras cada interrupcin uTras la finalizacin del cuantum de CPU de un proceso de usuario uAl finalizar un proceso FCFSTAREAS FCFSPROCESOS SERVIDOR RRPROCESOS USUARIO+ PRIORIDAD SSOO IIII IIIIEl planificador de Minix nSistema de colas multinivel (sin realimentacin) con prioridades expulsivas nSe invoca al planificador (rutina pick_proc) cuando: uSe bloquea un proceso (en ejecucin) con SEND o RECEIVE uTras cada interrupcin uTras la finalizacin del cuantum de CPU de un proceso de usuario uAl finalizar un proceso FCFSTAREAS FCFSPROCESOS SERVIDOR RRPROCESOS USUARIO+ PRIORIDAD

El planificador de MiniMinix SSOO IIII IIII S FCFSTAREAS FCFSPROCESOS SERVIDOR RRPROCESOS USUARIO+ PRIORIDAD rdy_head[TASK_Q] rdy_head[SERVER_Q] rdy_head[USER_Q] nImplementacin del planificador:

II SSOOIIIISSOOIIII El planificador de Minix II IIII . Implementacin del planificador (cont.): PUBLIC pick proc ( ) { register int q;/* Cola a usar: * /* -Cola de tareas: TASK_Q * /* -Cola de procesos servidor: SERVER Q * /* -Cola de procesos de usuario: USER_Q * if (rdy_head [TASK Q] != NIL_PROC) q = TASK_Q; else if (rdy_head [SERVER_Q] != NIL_PROC) q = SERVER_Q; else q = USER_Q; prev_proc = cur_proc; if (rdy_head [q] != NIL_PROC) { cur_proc = rdy_head [q]; /* Someone is runable * } else{ cur proc = IDLE; /* No one id runable * S } }

Planificacin en POSIX SSOO IIII IIII . Cada poltica de planificacin lleva asociado un rango con al menos 32 niveles de prioridad . El planificador elegir el proceso o hilo con la prioridad ms alta . Polticas de planificacin: . FIFO (FCFS) . Round Robin (RR) . Otra S -

El planificador de LinuLinux . Prioridad y algoritmo de planificacin de un proceso de Linux: . Todo proceso del sistema tiene asociadas una prioridad una poltica de planificacin, que puede ser: . FIFO (SCHED FIFO) . RR (SCHED RR) . Otra (SCHED_OTHER) . Se asigna poltica de planificacin FIFO y RR a los procesos en tiempo real (procesos que tienen que reaccionar muy rpidamente a sucesos externos) S SSOO IIII IIII

S SSOO IIII IIIIEl planificador de Linux nPrioridad y algoritmo de planificacin de un proceso de Linux (cont.): uPoltica SCHED_OTHER: lFavorece procesos interactivos lPrioridad dinmica = Prioridad_base + (Estimacin_CPU_restante / 2) lObjetivo prioridad base: Dividir los procesos en bandas fijas de prioridad SSOO IIII IIIIEl planificador de Linux nPrioridad y algoritmo de planificacin de un proceso de Linux (cont.): uPoltica SCHED_OTHER: lFavorece procesos interactivos lPrioridad dinmica = Prioridad_base + (Estimacin_CPU_restante / 2) lObjetivo prioridad base: Dividir los procesos en bandas fijas de prioridad

El planificador de LinuLinux . Algoritmo de planificacin: . Algoritmo expulsivo con prioridades (selecciona el proceso con mxima prioridad) . Los procesos con planificacin FIFO y RR tienen mayor prioridad . Un proceso FIFO abandona la CPU cuando: Aparece otro proceso listo con mayor prioridad El proceso finaliza . Un proceso RR abandona la CPU cuando: Aparece otro proceso listo con mayor prioridad El proceso finaliza Acaba su quantum de CPU y otro proceso tiene igual prioridad (y es la mxima) S SSOO IIII IIII

El planificador de LinuLinux SSOO IIII IIII S nFuncin de planificacin: void schedule(void) { int c; struct task_struct * p, * prev, * next; prev = current; cli(); /* move an exhausted RR process to be last */ if (!prev->counter && prev->policy == SCHED_RR) { prev->counter = prev->priority; move_last_runqueue(prev); } p = init_task.next run; sti(); Deshabilitar interrupciones Habilitar interrupciones

El planificador de LinuLinux SSOO IIII IIII S nFuncin de planificacin (cont.): /* this is the scheduler proper: */ c = -1000; next = idle_task; while (p != &init_task) { int weight = goodness(p, prev, this_cpu); if (weight > c) c = weight, next = p; p = p->next_run; } /* if all runnable processes have "counter == 0", re-calculate counters */ if (!c) { for each task(p) p->counter = (p->counter >> 1) + p->priority; } if (prev != next) { switch_to(prev,next); } return; } Cambio de proceso

El planificador de LinuLinux . Funcin de planificacin (cont.): /* This is the function that decides how desirable a process is * Return values: * -1000: never select this * 0: out of time, recalculate counters * +ve: "goodness" value (the larger, the better) * +1000: realtime process, select this. * / int goodness(struct task_struct * p, struct task_struct * prev) { int weight; .. . if (p->policy != SCHED_OTHER) return 1000 + p->rt_priority; S SSOO IIII IIII

II SSOOIIIISSOOIIII El planificador de Linux II IIII . Funcin de planificacin (cont.): /* Give the process a first-approximation goodness value * according to the number of clock-ticks it has left. * Don't do any other calculations if the time slice is over * weight = p->counter; if (weight) { /* Give a slight advantage to the current process * if (p == prev) weight += 1; } return weight; } S -

SSOO IIII IIIISSOO IIII IIII El planificador de Windows NT/2000 . Prioridad de un hilo: . Dentro del rango 0..31 . Depende del tipo de trabajo que est haciendo . Una cola de hilos listos por cada posible nivel de prioridad . Tipos de prioridad: . Prioridades en tiempo real . Prioridades variables S -

SSOO IIII IIIISSOO IIII IIII El planificador de Windows NT/2000 . Prioridades en tiempo real: . Prioridades ms altas (rango 31..16) . Asignadas cuando el tiempo de respuesta del subproceso es crtico (operaciones de comunicaciones, tareas de tiempo real, etc.) . La prioridad del hilo no cambia nunca . Poltica RR para los hilos de un nivel de prioridad dado S -

El planificador de Windows NT/2000 SSOO IIII IIII S nPrioridades variables: uPrioridades ms bajas (rango 15..0) uCola RR en cada nivel de prioridad uPrioridad inicial del hilo: lPrioridad del proceso + Prioridad base del hilo (-2..+2) uLa prioridad del hilo puede variar durante su vida lNo puede ser superior a 15 lNo puede ser inferior a la prioridad inicial lEl ncleo baja la prioridad (dinmica) de un hilo cada vez que finaliza su quantum de CPU asignado lLa prioridad (dinmica) de un hilo aumenta tras una operacin de E/S Los hilos interactivos tienden a prioridades ms altas dentro de la clase de prioridad variable

S SSOO IIII IIIIEl planificador de Windows NT/2000 nPrioridades variables: uEjemplo de relacin entre prioridades menor debajo normal normal encima normal mayor 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Prioridad base del proceso Prioridad inicial del hilo Prioridad dinmica del hilo +2 +1 -1 -2 0 SSOO IIII IIIIEl planificador de Windows NT/2000 nPrioridades variables: uEjemplo de relacin entre prioridades menor debajo normal normal encima normal mayor 0 1 2 3 4 5 6

7 8 9 10 11 12 13 14 15 Prioridad base del proceso Prioridad inicial del hilo Prioridad dinmica del hilo +2 +1 -1 -2 0

El planificador de Windows NT/2000 SSOO IIII IIII S nAlgoritmo de planificacin de hilos: uEsquema expulsivo con prioridades y colas multinivel realimentadas (selecciona el hilo con mxima prioridad de todas las colas) NIVEL DE PRIORIDAD 31 . . . . . . . . . 16 15 14 0 . . . . . . Prioridades en tiempo real Prioridades variables

Tema 2. Procesos e hilo2. Procesos e hilos SSOO IIII IIII S ndice nConcepto de proceso nInformacin del proceso nEstados del proceso nFormacin de un proceso nConcepto de hilo de ejecucin nProcesos en Minix nProcesos en Linux nProcesos en Windows NT/2000 nPlanificacin de procesos e hilos nServicios POSIX para gestin de procesos e hilos*

Servicios POSIX para gestin de hilos Pthreads int pthread_attr_init(pthread_attr_t *attr) ; int pthread_attr_destroy (pthread_attr_t *attr) ; int pthread_create (pthread_t *thread, const pthread_attr_t *attr, void *(*func)(void *) , void *arg) ; int pthread_exit(void *value) ; int pthread_join(pthread_t thid, void **value) ; pthread_t pthread_self(void) ; int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate) ; S SSOO IIII IIII

Servicios POSIX sobre atributos de hilos SSOO IIII IIII . Creacin de atributos: . Sintaxis: int pthread_attr_init(pthread_attr_t *attr) ; . Descripcin: Inicia un objeto atributo de tipo pthread attr_t con las propiedades que tendrn los hilos que se creen posteriormente Los atributos permiten especificar: tamao de pila, prioridad, poltica de planificacin, etc. Existen diversas llamadas para modificar los atributos S -

Servicios POSIX sobre atributos de hilos SSOO IIII IIII . Destruccin de atributos: . Sintaxis: int pthread_attr_destroy (pthread_attr_t *attr) ; . Descripcin: Destruye el objeto atributo de tipo pthread attr_t pasado como argumento a la misma S -

Servicios POSIX sobre atributos de hilos SSOO IIII IIII . Establecimiento del estado de terminacin: . Sintaxis: int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate) . Descripcin: Establece el estado de terminacin de un hilo: . Si "detachstate" = PTHREAD_CREATE_DETACHED . El hilo se considerar como independiente . El hilo liberar sus recursos cuando finalice su ejecucin . Si "detachstate" = PTHREAD_CREATE_JOINABLE . El hilo se considerar como no independiente . El hilo no liberar todos los recursos (descriptor y pila) cuando finalice su ejecucin, es necesario utilizar pthread join( ) S Habitualmente, valor por defecto

II SSOOIIIISSOOIIII Servicios POSIX sobre gestin de hilos II IIII . Creacin de hilos: . Sintaxis: int pthread_create (pthread_t *thread, const pthread_attr_t *attr, void *(*func)(void *) void *arg) ; . Descripcin: Crea un hilo con atributos attr que ejecuta func con argumentos arg . Finalizacin de hilos: . Sintaxis: int pthread_exit(void *value) ; . Descripcin: Finaliza la ejecucin de un hilo, indicando su estado de terminacin S -

Servicios POSIX sobre gestin de hilos . Suspensin de hilos: . Sintaxis: int pthread_join(pthread_t thid, void **value) ; . Descripcin: Suspende la ejecucin de un hilo hasta que termina el hilo con identificador thid (no necesariamente un hilo hijo) Deja el estado de terminacin del hilo en la posicin apuntada por value Slo se puede solicitar este servicio sobre hilos no independientes . Identificacin de hilos: . Sintaxis: pthread_t pthread_self(void) ; . Descripcin: S SSOO IIII IIII lDevuelve el identificador del hilo que ejecuta la llamada

Servicios POSIX sobre gestin de hilos SSOO IIII IIII S nJerarqua de hilos: Hilo 1 pthread_create Hilo 4 pthread_exit pthread_create Hilo 2 pthread_create Hilo 3 pthread_join pthread_exit No independiente Hilo principal (main)

Servicios POSIX para gestin de hilos SSOO IIII IIII S #include #include void *hilo(void *cadena) { int i; for (i=0; inext_task; if (p==&init_task) return (-1) ; if (p=p->cptr!=NULL) do printf ( %d \n ,p-> pid) ; n_hijos++1; while (p=p->p_osptr!=NULL) ; printf ( El proceso %d tiene %d hijos \n ,pidPadre,n_hijos) S return (0); }

II SSOOIIIISSOOIIII Ejercicios II IIII . Ejercicio 1 (solucin): Solucin II: void muetra hijos (int pidPadre) ; {struct task_struct *p; int n_hijos=0; p=&init_task->next task; while ((p->pid!=pidPadre) && (p!=&init_task) ) p=p->next_task; if (p==&init_task) return (-1) ; for each_task (p) if (p->p_pptr->pid==pidPadre) {printf ( %d \n ,p->p_pptr->pid) ; n_hijos++1; } printf ( El proceso %d tiene %d hijos\n ,pidPadre,n_hijos) S return (0); }

II SSOOIIIISSOOIIII Ejercicios II IIII . Ejercicio 2: Desarrollar un algoritmo o un programa que genere una salida similar a la del comando pstree en el sistema operativo Linux. void pstree2 () ; {struct task_struct *p; void pstree2 rec (struct task struct *h) ; { hh=h->p cptr; while (hh!=NULL) {printf ( Proc padre %d. Proc hijo %d\n ,h->pid,hh->pid) pstree2 rec (hh) ; hh=hh->p osptr; } return (0) ; } p=&init task; pstree2 rec (p) ; return (0) ; S }

SSOO IIII IIIISSOO IIII IIII Ejercicios . Ejercicio 3: Desarrollar un algoritmo o un programa que calcule de la forma ms eficiente posible el nmero de procesos hurfanos que hay en un sistema Linux en un instante dado. S -

SSOO IIII IIIISSOO IIII IIII Ejercicios . Ejercicio 4: Desarrollar un algoritmo o un programa en el que, dado el nmero de identificacin de un proceso Linux, se muestre el proceso hijo preparado para ejecucin (en estado listo) que lleva ms tiempo ejecutndose, ya sea en modo usuario o supervisor. S -

Ejercicios SSOO IIII IIII S nEjercicio 5: Supongamos que, en un instante dado, la lista de procesos preparados para ejecucin de un sistema operativo linux es la que aparece a continuacin y que el proceso en ejecucin es el proceso 3. Qu proceso pasara a ejecucin si se invoca al planificador de linux? Justificar la respuesta. . . . . . . Poltica planificacinPrioridad dinmica Prioridad esttica Proceso init . . . . . . Proceso 1 FIFO 20 20 . . . . . . Proceso 2 OTHER 50 75 . . . . . . Proceso 3 RR 0 25 . . . . . . Proceso 4 FIFO 25 25 . . . . . . Proceso 5 RR 20 25 . . . . . . Proceso 6 RR 25 25 . . . . . . Proceso 7 OTHER 20 20

. . . . . . Proceso 8 FIFO 25 25 counter priority counter rt_priority rt_priority

S SSOO IIII IIIIEjercicios nEjercicio 5 (solucin): 1. El proceso 3 se mueve al final de la lista 2. La funcin goodness proporciona las siguientes prioridades a los procesos de la lista de procesos listos: FIFO Other FIFO RR RR Other FIFO RR SSOO IIII IIIIEjercicios nEjercicio 5 (solucin): 1. El proceso 3 se mueve al final de la lista 2. La funcin goodness proporciona las siguientes prioridades a los procesos de la lista de procesos listos: FIFO Other FIFO RR RR Other FIFO RR Proceso P1 P2 P4 P5 P6 P7 P8 P3 Weight 1020 50 1025 1025 1025 20 1025 1025 3. Tras el bucle while c=1025 y next apunta al proceso P4

SSOO IIII IIIISSOO IIII IIII Ejercicios . Ejercicio 6: Qu proceso seleccionara el planificador de linux en un instante dado en el que hay dos procesos con la mxima prioridad y uno tiene asignada la poltica FIFO y otro RR? Solucin: El primero que se encuentre en la lista (ver ejemplo del ejercicio 5) S -

Ejercicios . Ejercicio 8: En qu variara la poltica de planificacin de procesos de linux si en la funcin schedule se sustituye la lnea if (weight > c) por lo siguiente: if (weight >= c)? Solucin: En este caso, ante varios procesos con mxima prioridad se seleccionara el ltimo de ellos que est en la lista de procesos listos del sistema. Consecuentemente, si estos procesos con la mxima prioridad tuviesen asignada una poltica de planificacin FIFO, dejara que cumplirse dicha poltica. Y lo mismo ocurrira con la poltica de planificacin RR. S SSOO IIII IIII

SSOO IIII IIIISSOO IIII IIII Ejercicios . Ejercicio 9: Explicar cmo se cumple la poltica FIFO en el planificador de procesos de linux cuando varios procesos con este tipo de poltica tienen la mxima prioridad. S -

II SSOOIIIISSOOIIII Ejercicios II IIII . Ejercicio 9 (solucin): Vemoslo con el siguiente ejemplo: PROCESO P1 P2 P3 P4 P5 P6 P7 P8 Poltica FIFO RR FIFO Other Other FIFO RR FIFO Prior. Esttica 50 40 50 80 60 30 25 50 Prior. Dinmica 50 30 50 75 60 30 20 50 Weight 1050 1040 1050 75 60 1030 1025 1050 Tras el bucle while c=1050 y next apunta al proceso P1. Si no apareciesen ms procesos listos, cuando acabe la ejecucin del proceso P1 el planificador seleccionar al siguiente proceso de la lista ms prioritario, esto es, P3, que entr despus de P1 en la lista. Si no hubiesen aparecido ms procesos listos, cuando P3 finalice el proceso ms prioritario sera P8, que haba entrado en la lista tras P1 y P3. Resumiendo, los tres procesos FIFO con la prioridad mxima S se ejecutan en el orden en que entraron en la lista.

S SSOO IIII IIII } SSOO IIII IIII } Ejercicios . Ejercicio 10: Explicar la validez del siguiente cdigo: #include #include #define MAX_THREADS 10 void *imprimir(int *n) { sleep (3) ; printf("Hilo (%d): %d \n",pthread_self(),*n) ; pthread_exit(0) ; } int main( ) { int num; pthread t hilo; pthread attr_t attr; pthread_attr_init (&attr) ; pthread_attr_setdetachstate (&attr, PTHREAD_CREATE DETACHED) while (1) { scanf ( %d , &num) ; pthread_create(&hilo, &attr, imprimir, &num) ; exit(0) ;