Está en la página 1de 52

15/12/2009

Tema 4: Gestin de procesos

Captulo 4: Gestin de procesos

Procesos
Procesos ligeros ((threads
threads))
Polticas y algoritmos de planificacin
Seales y excepciones
Temporizadores
Servidores y demonios
Servicios POSIX

15/12/2009

Procesos
Concepto
p de Proceso
Multitarea
Informacin del proceso (BCP)
Creacin de procesos
Terminacin de procesos
Estados de los procesos
Cambio de contexto
Planificacin

Concepto de proceso I
PROGRAMA: Archivo ejecutable en un dispositivo de
almacenamiento permanente (ej. disco)
PROCESO: Un programa en ejecucin, reside en MP y
segn se ejecuta modifica su contexto
Desde el punto de vista del usuario:
cdigo + estructuras de datos
El sistema operativo le asigna recursos y controla su ejecucin
Desde el punto de vista del sistema operativo:
Tcnicas de multiplexado (planificacin)
Caracterizacin de un proceso: tabla o bloque de control de
procesos (BCP). En Linux: task_struct
Cada proceso posee un espacio de direccionamiento virtual
Independiente

15/12/2009

Jerarqua de procesos
Jerarqua de procesos
Proceso hijo
Proceso padre
Proceso hermano
Proceso abuelo
Vida de un proceso
Crea
Ejecuta
Muere o termina
Ejecucin del proceso
Batch
Interactivo
Grupo de procesos

rbol tpico de procesos en Solaris

Entorno del proceso


Tabla NOMBRENOMBRE-VALOR que se pasa al proceso en su creacin
Se incluye en la pila
Se establece:
Por defecto (se copia la del padre)
Mediante mandatos del shell (export
export))
Mediante API del SO ((putenv
putenv,, getenv)
getenv)
Ejemplo:
PATH=/usr//bin
PATH=/usr
bin:/home/pepe/
:/home/pepe/bin
bin
TERM=vt100
HOME=/home/pepe
PWD=/home/pepe/libros/primero
TIMEZONE=MET

15/12/2009

Conceptos
Usuario: Persona autorizada a utilizar un sistema
Se identifica en la autenticacin mediante:
Cdigo de cuenta
Cl
Clave
((password
password)
d)
Internamente el SO le asigna el uid
uid
(user
(user identification
identification))
Super-usuario
SuperTiene todos los derechos
Administra el sistema
Grupo de usuarios
Los usuarios se organizan en grupos
Alumnos
Profesores
Todo usuario ha de pertenecer a un grupo

Bases de la Multiprogramacin
Paralelismo real entre E/S y UCP (DMA)
Alternancia en los procesos de fases de E/S y de procesamiento
La memoria almacena varios procesos

Procesamiento
Entrada/salida
Tiempo

15/12/2009

Ejemplo de ejecucin en un sistema


multitarea. Proceso nulo
Proceso A
Proceso B

Procesamiento
Entrada/salida
Listo
SO
Proceso nulo

Proceso C
Procesador

Tiempo

Estados de los procesos: ejecucin, bloqueado, listo

Conceptos
Multitarea: varios procesos activos a la vez
p
varios usuarios en varias terminales
Multiusuario: soporta
Tiempo compartido: reparto equitativo del tiempo de
CPU entre varios usuarios
Planificador (sheduler): seleciona el siguiente proceso a
ejecutar
Activador (dispacher): Prepara la ejecucin del proceso
planificado -> cambio de contexto
Grado de multiprogramacin: n de procesos activos
Con BCP vigente
Necesidades de memoria principal: Memoria virtual

15/12/2009

Ventajas de la multitarea
Facilita la programacin, dividiendo los programas en
procesos (modularidad)
Permite el servicio interactivo simultneo de varios usuarios
de forma eficiente
Aprovecha los tiempos que los procesos pasan esperando
a que se completen sus operaciones de E/S
Aumenta el uso de la CPU

Concepto de proceso II
INFORMACIN DEL PROCESO (BCP):
Imagen de memoria (core
(core image)
image)
Estado del procesador
(registros del modelo de programacin)
Bloque de control del proceso BCP
Estado actual del proceso
Identificacin pid
pid,
, ppid
Uid
Uid,, gid
gid.. euid,egid
Prioridad del proceso
Registros de procesador cuando el proceso no est en ejecucin
Puntero a la zona de memoria: Segmentos de memoria
Recursos asignados: Ficheros abiertos, Temporizadores, Seales,
Semforos, Puertos
Un puntero al siguiente BCP

15/12/2009

Memoria de un proceso
Contexto
del nucleo

Contexto
de usuario

Registros
especiales

FFFF

Pila
Registros
generales

Heap
PC

Datos
Texto

SP
0000

Estado

Process Control Block (PCB)


Planificacin y estado
Id de p
proceso y p
padre
uid,guid,, euid
uid,guid
euid,, egid
puntero de pila
registros CPU
descripcin de la memoria
recursos asignados
punteros para formar listas

seales, mensajes,

15/12/2009

El SO mantiene estructuras de
datos asociadas a los procesos
Mapa de memoria
del Proceso A
Mapa de memoria
del Proceso B

Tablas del sistema operativo


Mapa de memoria
del Proceso C

Tabla de procesos

Tablas SO

BCP Proceso A
BCP Proceso B
BCP Proceso C
- Estado (registros) - Estado (registros) - Estado (registros)
- Identificacin
- Identificacin
- Identificacin
- Control
- Control
- Control

Mapa de
Memoria

- Tabla de memoria
- Tabla de E/S: drivers de bloques, de caracteres
- Tabla de ficheros, de montajes

Tablas del sistema operativo


Tabla de procesos (tabla de BCP)
Tabla de memoria: informacin sobre el uso de la memoria.
Tabla de E/S: guarda informacin asociada a los perifricos y a las
operaciones de E/S
Tabla de fichero: informacin sobre los ficheros abiertos.
Criterios
C
i i para iincluir
l i o no una iinformacin
f
i en ell BCP
BCP:
Eficiencia
Comparticin

15/12/2009

Informacin fuera del BCP


Se considera del BCP
p g
Por eficiencia:
eficiencia Tabla de pginas
Describe la imagen de memoria del proceso en sistemas con MV
Tamao variable -> El BCP contiene el puntero a la tabla de pginas
(La comparticin de memoria requiere que sea externa al BCP)
Por comparticin: Punteros de posicin de los ficheros
En la tabla de ficheros abiertos del BCP no se pueden compartir
Si se asocian al nodo-i se comparte siempre
Se ponen en una estructura comn a los procesos y se asigna uno
nuevo en cada servicio OPEN

Memoria Virtual de un proceso


RIED

Memoria
virtual
i t l

Memoria
principal

Cdigo

Datos

Pila

Tamao

Disco

Tabla de
pginas
Una tabla de
pginas
i
por proceso

Preasignacin de zona de intercambio: Todas las pginas estn en


disco, algunas estn copiadas en marcos de pgina.
La informacin de traduccin est en la tabla de pginas

15/12/2009

Creacin de procesos I

Objeto
ejecutable
Bibliotec a
sistema

Cargador

Mapa de
memoria

Imagen
del proceso

Tabla de procesos

BCP

Creacin de procesos II
El proceso padre crea un proceso, que a su vez, crea
otros procesos, formando un rbol de procesos
Esquemas de comparticin de recursos
recursos::
A. El padre y el hijo comparten todos los recursos
B. El hijo comparte unsubconjunto de los recursos
del padre
C. El padre y el hijo no comparten recursos
Ejecucin
j
El hijo comparte un subconjunto de los recursos
del padre
El padre espera hasta que el hijo termine

10

15/12/2009

Creacin de procesos III


Espacio de direcciones
El hijo hace una rplica del padre
El hijo carga un programa en su espacio de
direcciones
Ejempos UNIX
La lamada al sistema fork crea un proceso nuevo
La lamada al sistema exec,
exec, despus de fork
fork,,
reemplaza el espacio de direcciones del proceso
con un nuevo cdigo de programa

Terminacin de procesos
El proceso ejecuta la ltima sentencia y pide al SO
Su eliminacin (exit
(exit):
):
Devuelve la salida desde el hijo al padre (via wait
wait))
Libera los recursos asignados
El padre puede abortar la ejecucin del hijo
hijo::
El hijo excede sus recursos
La tarea asignada al hijo ya no se necesita
Cuando el padre termina
Algunos SSOO no permiten continuar al hijo
cuando el padre ha terminado
Todos los hijos terminan en cascada

11

15/12/2009

Realcin padre
padre--hijo en procesos
padre

Wait()

Fork()

hijo

Exec()

reanuda

Exit()

Estados de los procesos I


Cuando un proceso se ejecuta, cambia su estado:

Ejecucin
Ejecucin:: Se ejecutan las instruciones del cdigo del proceso
Bloqueado
Bloqueado:: El proceso espera la ocurrencia de un evento
Listo
Listo:: El proceso espera que se le asigne tiempo de CPU para
ejecutarse
Zombie: El proceso ha terminado su ejecucin pero an tiene
una entrada en la tabla de procesos (UNIX)

12

15/12/2009

Estados de los procesos II


Diagrama de estados de los procesos:

termina
Zombie

se interrumpe

Ejecucin

Listo
Termina la E/S
o elevento

se planifica

Espera E/S
o un evento

Bloqueado

Cambio de contexto I

13

15/12/2009

Cambio de contexto II
Se produce por una interrupcin.
Cambio de contexto es el conjunto de dos operaciones:
Se p
pasa a ejecutar
j
la rutina de tratamiento de interrupcin
p
Se salva el estado del procesador en el correspondiente BCP
Planificador: decide el siguiente proceso a ejecutar.
Activador: pone a ejecutar un proceso.
Copia el estado del BCP a los registros
Termina con una instruccin RETI (retorno de interrupcin)
Restituye
R tit
ell registro
i t de
d estado
t d (bit d
de nivel
i ld
de ejecucin)
j
i )
Restituye el contador de programa (para el nuevo proceso).
El tiempo de cambio de contexto supone una sobrecarga;
sobrecarga; el sistema no
realiza trabajo til durante este tiempo
El tiempo de cambio de contexto depende del soporte hardware

Cambio de contexto III

Estado

Registros
especiales

Registros
generales

PC
SP

Tabla de procesos
BCP Proceso A
Estado
(registros)

BCP Proceso B
Estado
(registros)

BCP Proceso N
Estado
(registros)

Informacin de
identificacin

Informacin de
identificacin

Informacin de
identificacin

Informacin de
Control

Informacin de
Control

Informacin de
Control

Estado

14

15/12/2009

Planificacin de procesos I
Los procesos migran entre varias colas:
Cola
C l trabajos
t b j (job):
(j b) soporta
t todos
t d los
l procesos del
d l
sistema
Cola Listos (ready)
ready):: soporta todos los procesos que
residen en memoria
memoria,, preparados para ser ejecutados
Colas Bloqueados
Bloqueados:: soportan los procesos que esperan
por un dispositivo
p
p
de E/S

Planificacin de procesos II:


Colas de listos y bloqueados

15

15/12/2009

Planificacin de procesos III

Llamadas al sistema I
pid = fork
fork()
()
Crea un proceso idntico al padre
int execl(const char *path, const char *arg, ...)
int execlp(const char *file,
*file const char *arg,
*arg ...))
int execvp(const char *file, char *const argv[])
Reemplaza la imagen del proceso ((cdigo+entorno
cdigo+entorno))
exit(status)
exit
(status)
Termina la ejecucin del proceso y devuelve el estado
pid = waitpid
waitpid((pid,
pid, &
&statloc
statloc,, options)
options)
E
Espera
la
l terminacin
t
i
i de
d un hijo
hij
pid_t getpid(
getpid(void)
void)
Devuelve el identificador del proceso.
pid_t getppid(
getppid(void)
void)
Devuelve el identificador del proceso padre.

16

15/12/2009

Llamadas al sistema. Fork


#include <sys
sys//types.h>
types.h>
pid = fork
fork((void
void))
Crea un proceso idntico al padre
Devuelve:
El identificador de proceso hijo al proceso padre y 0 al hijo
-1 el caso de error
Descripcin
:
Crea un proceso hijo que ejecuta el mismo programa que el padre
Hereda los ficheros abiertos (se copian los descriptores).
Las alarmas pendientes se desactivan.

Llamadas al sistema. Fork


Mapa de
memoria
Imagen del
proceso A

Tabla de procesos
BCP
A
El proceso A hace un fork y crea
el proceso hijo B

Mapa de
memoria
Imagen del
proceso A
Imagen del
proceso B

Tabla de procesos
BCP
A

BCP
B

Nuevo PID
Nueva descripcin de memoria
Distinto valor de retorno (0 en el hijo)

17

15/12/2009

Llamadas al sistema.Exec
int execl(const char *path, const char *arg, ...)
int execlp(const char *file, const char *arg, ...)
int execvp(const char *file, char *const argv[])
Reemplaza la imagen del proceso (cdigo+entorno
((cdigo
cdigo+entorno)
cdigo entorno)
entorno)
Argumentos:
path, file: nombre del archivo ejecutable
arg: argumentos
Descripcin:
Devuelve -1 en caso de error, en caso contrario no retorna.
Cambia la imagen de memoria del proceso.
El mismo proceso ejecuta otro programa.
Los ficheros abiertos permanecen abiertos
Las seales con la accin por defecto seguirn por defecto,
las seales con manejador tomarn la accin por defecto.

Llamadas al sistema.Exec
Mapa de
memoria

I
Imagen
del proceso

Tabla de procesos

El proc eso h
hac e un exec

BCP

Mapa de
memoria

Tabla de procesos
BCP

Se borra la imagen de memoria


Se borra la desc ripcin de la memoria y registros
Se c onserva el PID

Objeto
ejecutable
Biblioteca
sistema

Cargador

Mapa de
memoria

Imagen
del proceso

Tabla de procesos
BCP

Se c arga la nueva imagen


Se pone PC en direcc in de arranque
Se c onservan los fd

18

15/12/2009

Llamadas al sistema. Exit y Wait


int exit(
exit(int status)
Argumentos:
Cdigo de retorno al proceso padre
Descripcin:
Finaliza la ejecucin del proceso.
Se cierran todos los descriptores de ficheros abiertos.
Se liberan todos los recursos del proceso
pid = waitpid
waitpid((pid,
pid, &
&statloc
statloc,, options)
options)
Espera la terminacin de un hijo
Argumentos:
g
Devuelve el cdigo de terminacin del proceso hijo.
Descripcin:
Devuelve el identificador del proceso hijo o -1 en caso de error.
Permite a un proceso padre esperar hasta que termine un proceso hijo.
Devuelve el identificador del proceso hijo y el estado de terminacin del
mismo.

Llamadas al sistema. Exit y Wait I


El padre muere: INIT acepta los hijos

Init

Init

Init

Proceso A
fork()

Proceso A

Proceso A
exit()

Proceso B

Proceso B

Init
wait()

Init
wait()

Proceso B

Proceso B
exit()

19

15/12/2009

Llamadas al sistema. Exit y Wait II


Zombie: el hijo muere y el padre no hace wait

Init

Init

Init

Init

Init

Proceso A
fork()

Proceso A

Proceso A

Proceso A

Proceso A
wait()

Proceso B

Proceso B
exit()

Proceso B
zombie

Proceso B
zombie

Llamadas al sistema.Ejemplo
Cdigo C para crear un proceso
int main()
{
pid t pid;
pid_t
pid = fork();
if (pid < 0) {
fprintf(stderr, "Fork ha fallado");
exit(-1);
}
else if (pid != 0) {
.
wait(NULL);
exit(0);
}
else {
execlp ("/bin/ls", "ls", NULL);
}
}

/* crea un proceso
/* error

/* Es el padre
/* Cdigo del padre
/* Espera el fin del hijo
/* El padre termina
/* Es el hijo
/* Ejecutar cdigo

20

15/12/2009

Threads

Concepto de thread
Modelos multithread
Diseo con threads
Threads en Linux
Threads en Java
Pthreads (POSIX threads)

Concepto de thread I
Proceso sencillo y multithread:

cdigo
registros

datos

ficheros

ficheros

cdigo

datos

pila

registros
registros

registros

registros
registros

pila

pila

pila

thread

thread

Proceso con un nico thread

Proceso con varios threads

21

15/12/2009

Estados de los threads


Por thread
Contador de programa, Registros
Pila
Procesos ligeros hijos
Estado (ejecutando, listo o bloqueado)
Por proceso
Espacio de memoria
Variables globales
Ficheros abiertos
Procesos hijos
Temporizadores
Seales y semforos
Contabilidad

Proceso

Bloqueado por comunicacin


Bloqueado por acceso a disco
Activo

Procesos ligeros

Tipos de Threads
Threads-kernel (ULT):
Gestin the thread en el kernel
Conocidos y g
gestionados p
por el ncleo del sistema operativo.
p
Ej, libpthread en Linux o threads en WindowsNT
Threads de usuario (KLT):
Gestin the threads a nivel biblioteca de usuario
Conocidos y gestionados por el lenguaje (ej, Java) o una biblioteca de
funciones de usuario sin que el ncleo del sistema operativo los
conozca
Ej Mach c-threads,
Ej,
c threads fibras de WindowsNT
Threads mixtos
Conocidos y gestionados por una biblioteca de funciones de usuario
que recurre al ncleo del sistema operativo para implementarlos
vinculacin o binding segn distintas relaciones: 1 a 1, o varios a 1.

22

15/12/2009

Modelos de vinculacin de Threads I


Many
Many--to
to--One: varios threads de usuario soportados en un
thread del kernel
Solaris Green Threads
GNU Portable Threads
Threads de usuario

Thread del kernel

One
One--to
to--One: cada thread de usuario est soportado en un
thread
th
d del
d l kernel
k
l
Windows NT/XP/2000
Linux
Threads de usuario
Solaris posteriores a v9
K

Threads del kernel

Modelos de vinculacin de Threads II


Many
Many--to
to--Many: varios threads de usuario soportados en varios
thread del kernel
Solaris v9
Threads de usuario
Windows NT

Thread del kernel

Dos niveles
niveles:: similar a M:M pero cada thread de usuario se
puede enlazar con un thread del kernel
Solaris v8
Threads de usuario

Thread del kernel

23

15/12/2009

Paralelizacin utilizando threads


Procedimiento 1
P

Procedimiento 2
F P

Espera
en E/S

jecuc
F Ejecucin

Espera
en E/S

serie

Procedimiento 1
P

Espera
en E/S

Ejecucin
paralela
p

P
Procedimiento
di i t 2
P

Espera
en E/S

Procesamiento

Threads en el diseo de servidores

Ncleo

P t
Puerto

Ncleo

P t
Puerto

S o lic itu d e s

P t
Puerto

S o lic itu d e s

Ncleo

S o lic itu d e s

Trabajador
abajado

Distribuidor

24

15/12/2009

Diseo con threads


Proceso con un solo thread
No hay paralelismo
Llamadas al sistema
bloqueantes
Paralelismo gestionado por
el programador
Llamadas al sistema no
bloqueantes
Mltiples
p
p
procesos cooperando
p
Permite paralelismo
gestionado por el SO
No comparten variables
Mayor sobrecarga de
ejecucin

Linux Threads

Proceso varios threads


Paralelismo y variables
compartidas
Llamadas al sistema
bloqueantes por thread
Permite divisin de tareas
Aumenta la velocidad de
ejecucin del trabajo
Programacin concurrente
Simplicidad vs exclusin
Imaginar otra llamada al
mismo cdigo
Mutex
Variables globales

Linux Threads

Linux se refiere a los threads como tareas


tareas
((tasks
tasks))
La creacin de threads se realiza mediante la llamada al sistema
clone()
clone() permite a la tarea hija compartir el espacio de direcciones
de la tarea padre ((proceso
proceso))

Java Threads
Java threads se pueden crear:
crear:
Extendiendo la claseThread
Implementando el interfaz Runnable
Los threads en Java los gestiona
gestiona::
La JVM: green threads
El SO: correspondencia 1 a 1.

25

15/12/2009

PThreads

El API del standard POSIX (IEEE 1003.1c)


1003 1c) para
creacin y sincronizacin de threads
Este API especifca el comportamiento de la
biblioteca de thread, la implementacin ser el
desarrollo de las especificaciones de esta biblioteca
Es muy
y normal en SSOO tipo
p UNIX ((Solaris,, Linux,,
Mac OS X)

Servicios POSIX para threads


int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*func)(void *), void *arg)
Crea un thread que ejecuta "func" con argumento "arg" y atributos "attr".
Los atributos permiten especificar: tamao de la pila,
pila prioridad,
prioridad poltica de
planificacin, etc. Existen diversas llamadas para modificar los atributos.

int pthread_join(pthread_t thid, void **value)


Suspende la ejecucin de un thread hasta que termina el thread con
identificador "thid". Devuelve el estado de terminacin del thread.

int pthread_exit(void *value)


Permite a un thread finalizar su ejecucin, indica el estado de terminacin.

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

int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)


Establece el estado de terminacin de un thread.
Si "detachstate" = PTHREAD_CREATE_DETACHED el thread liberara sus
recursos cuando finalice su ejecucin.
Si "detachstate" = PTHREAD_CREATE_JOINABLE no se liberarn
los recursos, es necesario utilizar pthread_join().

26

15/12/2009

Jerarqua de threads threads


Proceso
ligero A

p_create
p_create

p_create
No independ.

Proceso
ligero D
Proceso
ligero B

Proceso
ligero C

p_exit
p_join
p_exit

Programa de ejemplo I
#include <stdio.h>
#include <pthread.h>
#define MAX_THREADS 10
void func(void) {
printf("Thread %d \n", pthread_self());
pthread_exit(0);
}
main()
{
int j;
pthread_attr_t attr;
pthread_t thid[MAX_THREADS];
pthread attr init(&attr);
pthread_attr_init(&attr);
for(j = 0; j < MAX_THREADS; j ++)
pthread_create(&thid[j], &attr, func, NULL);
for(j = 0; j < MAX_THREADS; j ++)
pthread_join(thid[j], NULL);
}

27

15/12/2009

Programa de ejemplo II
#include <stdio.h>
#include <pthread.h>
#define MAX_THREADS 10
void func(void) {
printf("Thread %d \n", pthread_self());
pthread_exit(0);
}
main() {
int j;
pthread_attr_t attr;
pthread_t thid[MAX_THREADS];
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
for(j = 0; j < MAX_THREADS; j ++)
pthread_create(&thid[j], &attr, func, NULL);
sleep(5);
}

Planificacin
Planificacin a medio y largo plazo
Planificacin a corto plazo
FIFO FCFS
SJF, SRTF
Prioridades
Round
Round--robin
Tiempo real
Planificacin de Pthreads
Planificacin en POXIS
Planificacin en Linux
Planificacin en Windows
Windows--NT
Servicios POXIS para planificacin

28

15/12/2009

Planificacin de la CPU
Planificacin
A largo plazo (aadir procesos a ejecutar)
A medio plazo (aadir procesos a RAM desde disco)
A corto
t plazo
l
((qu
proceso titiene lla UCP)
Planificacin de E/S
Tipos de planificacin
Sin expulsin: el proceso conserva la UCP mientras desee.
Con expulsin: el SO quita la UCP al proceso
Exige un reloj que interrumpe peridicamente
Colas de procesos
Por prioridad
Por tipo

Planificacin a medio y largo plazo


Nuevos de estados de los procesos:
En espera (Bach): Espera entrar en el sistema
Suspendido
Suspendido:: En espera de asignacin de memoria
Suspendido y bloqueado
Suspendido y lista

29

15/12/2009

Estados de los procesos II


Diagrama de estados de los procesos:
En espera

Suspendido
y listo

se expulsa
a disco

se interrumpe

Suspendido
y
bloqueado

Zombie

Ejecucin

Listo

se recupera
de disco
Termina la
E/S o el
evento

termina

se admite

se planifica

Espera E/S
o un evento

Termina la
E/S o el
evento
se expulsa
a disco

Bloqueado

Planificacin a corto plazo


Planificacin a corto plazo: cuando un proceso:
1. Se bloquea
2 Pasa
2.
P
d
de ejecutando
j
t d a lilisto
t
3. Pasa de bloqueado a listo
4. Termina
La planificacin en los casos 1 y 4 es no expulsora (nonpreemptive)
En el resto de casos es expulsora (preemptive)

30

15/12/2009

Criterios de planificacin

MXIMIZAR
Utilizacin de la CPU que sea mxima
Productividad bach (throughput) # de procesos que se procesan por
unidad de tiempo
p

MNIMIZAR
Tiempo de respuesta (Turnaround) tiempo en ejecutar un trabajo en
particular
Tiempo de espera tiempo que un proceso pasa en la cola de listos
Tiempo de respuesta interactivo tiempo que pasa desde que se enva
el trabajo hasta que se obtiene una respuesta

CONSEGUIR
Reparto equitativo del procesador
Cumplimiento de plazos (tiempo real)
Calidad de servicio (sistemas multimedia)

Algoritmos de planificacin I

FIFO FCFS
Organizacin en una lista ordenada por tiempo de llegada
SJF, SRTF
Organizacin en lista ordenada por tiempo previsto de ejecucin
Bach: tiempo previsto para la ejecucin de un proceso
Interactivo: tiempo previsto para la prxima rfaga de CPU

Prioridades
Fjas o dinmicas
Organizacin en una lista ordenada por prioridades calculadas
Round--Robin
Round
Organizacin en una lista circular con quantos de tiempo
Expropiacin por agotamiento del quanto y replanificacin
Lotera
Se asigna a cada proceso un rango de valores y se genera un nmero
a leatorio
Tiempo real
A plazo fijo: EDF (prioridades dinmicas)
Peridicos: RMS (prioridades estticas)

31

15/12/2009

FIFO First
First--Come, First
First--Served (FCFS) I
Procesos T. cmputo
P1
24
3
P2
P3
3
Suponiendo que los procesos llegan en el siguiente orden
P1 , P2 , P3
El diagrama de Gantt es:
P1

P2

24

P3
27

30

Tiempo de espera para: P1 = 0; P2 = 24; P3 = 27


Tiempo medio de espera: (0 + 24 + 27)/3 = 17

FIFO First
First--Come, First
First--Served (FCFS) II
Suponiendo que los procesos llegan en el siguiente orden
P2 , P3 , P1
El diagrama de Gantt es:
P2
0

P3
3

P1
6

30

Tiempo de espera para: P1 = 6; P2 = 0; P3 = 3


Tiempo medio de espera: (6 + 0 + 3)/3 = 3
Mucho mejor que el caso anterior
Efecto Convoy: los procesos cortos detrs de los largos

32

15/12/2009

Shortest--Job
Shortest
Job--First (SJF) Scheduling I
Asocia a cada proceso el tiempo previsto de ejecucin. Selecciona
para ejecutar el proceso con menor tiempo.
Dos esquemas:
No expulsor (nonpreemptive) una vez planificado sigue en la
CPU hasta que completa su rfaga de CPU.
Expulso
Expulsor (preemptive) si llega un nuevo proceso con un
tiempo menor que el que se est ejecutanto, este ltimo se
expulda. Tambin se llama
Shortest-Remaining-Time-First (SRTF)
SJF es ptimo da el menor tirmpo de espera medio para un
conjunto de procesos.
Problema
Problema:: se debe suministrar el siguiente tiempo de rfaga
-> estimacin teniendo en cuenta las anteriores

Ejemplo de SJF no expulsivo


Procesos
P1
P2
P3
P4
SJF (no-expulsivo)

T. llegada

T. cmputo

0.0
20
2.0
4.0
5.0

7
4
1
4

P1
0

P3
7

P2
8

P4
12

16

Tiempo medio de espera = (0 + 6 + 3 + 7)/4 = 4

33

15/12/2009

Ejemplo de SJF expulsivo


Procesos

T. llegada

T. cmputo

0.0
2.0
4.0
5.0

7
4
1
4

P1
P2
P3
P4
SJF (expulsivo)
P1
0

P2
2

P3
4

P2
5

P4
7

P1
11

16

Tiempo medio de espera = (9 + 1 + 0 +2)/4 = 3

Planificacin basada en prioridades I


Se asocia un nmero de prioridad (entero) a cada proceso
La CPU ejecuta el proceso de mayor prioridad
(menor entero mayor priodad)
Expulsivo
No expulsivo
SJF es un planificador de prioridad, en el que la prioridad es el
tiempo de cmputo de cada rfaga de CPU (a menor rfaga mayor
prioridad).
i id d)
Problema Inanicin (starvation) el proceso de menor prioridad
puede no ejecutarse nunca
Solucin Envejecimiento (aging) a medida que pasa el tiempo,
el proceso aumenta su prioridad

34

15/12/2009

Planificacin basada en prioridades II


Establecimiento de prioridades:
Interno
Interno:: uso de la memoria, bloqueos de E/S, duracin
estimada de la siguiente rfaga de CPU
Procesos

T. llegada

T. Rfaga estimado

Prioridad

P1
P2
P3
P4

0.0
2.0
4.0
5.0

7
4
1
4

3
2
1
2

Externo: coste, frecuencia, importancia,..


Procesos
P1
P2
P3
P4

T. llegada
0.0
2.0
4.0
5.0

Frecuencia
1
3
6
2

Prioridad
4
2
1
3

Round Robin (RR)


Cada proceso tiene una unidad de tiempo de CPU (quantum),
normalmente 10-100 milliseg. Cuando pasa el proceso es expulsado y
puesto en la cola de Listos
p
Si hay n procesos en la cola de Listos, y el quantum es q, a cada
proceso le toca 1/n del tiempo CPU en trozos de al menos q unidades
de tiempo cada uno.

Ningn proceso espera ms de (n-1)q unidades de tiempo.

Performance
q grande FIFO
q pequeo q debe ser grande respecto al tiempo de cambio de
contexto (latencia) para que el overhead no sea demasiado grande

35

15/12/2009

Ejemplo de RR con Quantum = 20

Process
P1
P2
P3
P4
El diagrama de es:
P1
0

P2
20

37

P3

Burst Time
53
17
68
24

P4
57

P1
77

P3
97 117

P4

P1

P3

P3

121 134 154 162

Normalemente , la media de turnaround es mayor que en


SJF, pero mejor tiempo de respuesta

El quantum y la latencia de cambio de contexto

36

15/12/2009

El tiempo de Turnaround vara con el Quantum

Colas multilevel I
La cola de Listos se particiona en colas separadas :
foreground (interactivo)
background (batch)
Cada cola tiene su propio algoritmo de planificacin
foreground RR
background FCFS
La planificacin se aplica entre las colas:
Planificacin de prioridad fija; (se sirven todos de foreground y
despus de background)
background). Se puede producir inanicin
inanicin.
Rodaja de tiempo cada cola tiene una cierta cantidad de
tiempo de CPU time que se reparte entres sus procesos;
ej.., 80% to foreground in RR y 20% to background in FCFS

37

15/12/2009

Colas multilevel II

Colas multilevel con realimentacin


Tres colas:
Q0 RR con quantum de 8 milisegundos y FIFO
Q1 RR con quantum de 16 milisegundos y FIFO
Q2 FIFO

Planificacin
Un nuevo trabajo llega a la Q0 con planificacin FIFO. Cuando
gana la CPU, se ejecuta 8. Si no termina se mueve a Q1.
En Q1 se sirve con FIFO y se le dan 16 m. Si no termina se
mueve a Q1.

38

15/12/2009

Planificacin en Tiempo real


Tiempo real duro o crtico (Hard real-time) las tareas se debe
complentar dentro de un plazo preestablecido (con unas garantas
de tiempo)
RMA: Asignas las prioridades segn la frecuencia (tareas
peridicas e independientes). Garantiza que cumplen el plazo
para una utilizacin del procesador < 70%
EDF: Primero la tarea que antes cumpla en plazo (prioridades
dinmica). Ms dificil de implementar que el anterior. La
utilizacin del procesador puede ser del 100%
Tiempo real blando o no crtico (Soft real-time) las tareas
crticas deben teber prioridades ms altas que las que no lson de
tiempo real.

Planificacin en Tiempo real. RMS I


Tarea

1
2
3

Cmputo
4

Plazo= T

Prioridad

10

15

10

35

1
2
3
tiempo

Tiempo de cmputo (C)

Fin de periodo (T = Periodo )

39

15/12/2009

Planificacin en Tiempo real. RMS II


Ci

Utilizacin del procesador pora una tarea i

Utilization del procesador para n tareas

Ui =

Ti
1

U(n) = n(2n - 1)

Resultados:
Si Ui U(n) el conjunto de tareas es planificable.
planificable
If Ui > 1 el conjunto de tareas es no planificable.
Si U(n) < Ui el conjunto de tareas es inconcluso
*si todas las tareas cumplen su plazo en el primer hiperperiodo el
conjunto de tareas es planificable.

Planificacin en Tiempo real. RMS III


Tarea

Cmputo

1
2
3

Plazo= T

Prioridad

10

15

10

35

U(3) = 3(21/3 1) = 0.779

U1 = 4 / 10 = 0.4
U2 = 4 / 15 = 0.267
0 267
U3 = 10 / 35 = 0.286
Utotal = 0.953

Resultados:
U1+2 = 0.667, planificanle.
Sin embargo, 0.779 < 0.953 < 1
Por lo que es inconcluso para 3.
Si las tareas cumplen el plazo en el primer
HIPERPERIODO (35 en este caso)
son planificables

40

15/12/2009

Planificacin en Tiempo real. EDF


Las prioridades se asignan de acuerdo a sus plazos:
El plazo ms corto, la prioridad mayor;
El plazo ms largo, la prioridad menor.

Planificacin en POSIX I
Cada poltica de planificacin lleva asociado un rango con al
menos 32 niveles de prioridad.
El planificador elegir el proceso o thread con la prioridad ms alta
Polticas de planificacin
Para comparticin de tiempo prioridad variable
Otra (SCHED_OTHER)
Para tiempo real prioridad fija, superior a SCHED_OTHER
FIFO (SCHED_FIFO)
Cclica (SCHED_RR)

41

15/12/2009

Planificacin SCHED_OTHER en LINUX


Funcionamiento general
LINUX divide el tiempo de CPU en pocas (epoch)
En cada poca cada proceso tiene un quantum de tiempo que se le
asigna al comenzar la poca
Cuando un proceso agota su quantum se le expulsa y se selecciona
otro proceso ejecutable
Un proceso puede ser seleccionado mltiples veces mientras le
quede quantum
Por ejemplo, puede haber sido expulsado tras una E/S, propia o
ajena, y luego vuelto a asignar la CPU
La poca termina cuando todos los procesos ejecutables han
agotado su quantum
En
E ese momento,
t se reasigna
i
los
l quantum
t
para la
l
poca
siguiente LINUX favorece los procesos que no han agotado su
quantum en la poca anterior
La prioridad est relacionada con el quantum restante (a mayor
quantum, mayor prioridad)

Planificacin Pthread
Polticas de planificacin a definir como en procesos.
Ambitos de planificacin:
p
PTHREAD_SCOPE_PROCESS: Planificacin local
La librera de threads decide que thread se ejecuta.
PTHREAD_SCOPE_SYSTEM: Planificacin global
El kernel decide qu thread se ejecuta.
Los atributos de planificacin se pueden aadir mediante servicios a
los atributos de creacin de un thread:
#include <pthread.h>

int pthread_attr_setscope(pthread_attr_t *attr, int scope);


int pthread_attr_getscope(const pthread_attr_t *attr, int *scope);
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);

42

15/12/2009

Planificacin en Windows NT I

Reiniciado

Iniciado

Sit
Situar
en lla cola
l
de listos

Finalizado
Fin de bloqueo

Bloqueado

Ejecucin
finalizada

Espera
terminada

Bloqueado

Pila del kernel


en swap
Pila del
kernel en memoria

Transicin

Listo

Seleccionado Expulsado
para
ejecucin

Expulsado

Ejecucin

Cambio de contexto. Comienzo de ejecucin

Reserva

Planificacin en Windows NT II
Pt: Prioridades
relativas de
threads

Promocin dinmica:
+n si se desbloquea (hasta 15)
Decaimiento dinmico:
-1 si agota el quantum (hasta Pt)
Anti-inanicin:
Si no se ha ejecutado en los
ltimos 3 segundos, adopta
prioridad 15 para ejecutar
2*quantum

43

15/12/2009

Servicios POSIX para planificacin I


#include <sched.h>

Modificar la prioridad de un proceso


int sched_setparam(pid_t pid, const struct_param
*param);

Modificar la prioridad y la poltica


int sched_setscheduler(pid_t pid, const sched_param
*param);

Obtener los parmetros de planificacin de un proceso


int sched_getparam(pid_t pid, const struct_param
*param);

Obtener la prioridad de un proceso


int sched_getscheduler(pid_t pid);

Captulo 4: Gestin de procesos

Seales y excepciones
Temporizadores
Servidores y demonios

44

15/12/2009

Seales I
Seal: Mecanismo por el que un proceso puede ser
notificado de, o afectado por, un evento que se produce
en el sistema:
- excepciones detectadas por hardware
- expiracin de una alarma o temporizador
- finalizacin de una operacin de I/O asncrona
- llegada de un mensaje
- invocacin de la funcin kill() y similares
-actividad del terminal, etc.
Nmero de seal:
Entero positivo que identifica una seal.
Existen tambin constantes predefinidas para dar nombre
a las seales

Seales II
Las seales son interrupciones al proceso
Envo o generacin
Proceso
Proceso- Proceso (dentro del grupo) con el kill
SO - Proceso

Seal

Proceso
Cdigo

Funcin
tratamiento

45

15/12/2009

Seales III
Una seal se puede generar para un proceso o para
un thread.
Cada thread tiene una mscara de seales,
seales, que define
las seales bloqueadas
bloqueadas..
La mscara se hereda del padre
Seal no bloqueada:
bloqueada: se entrega
Ignorar
Terminar el proceso
Ejecutar manejador
Seal bloqueada:
bloqueada: queda pendiiente hasta que se
acepta con sigwait()
sigwait()

Tratamiento de seales I
Opciones para tratar una seal
seal::
Enviar la seal al thread al q
que la seal se refiere
Enviar la seal a todos los threads del proceso
Asignar un thread especfico para recibir todas las
seales del proceso
Cada seal se trata mediante un manejador
manejador
1. La seal se genera por un evento particular
2. La seal se enva al proceso
3. La seal se trata

46

15/12/2009

Tratamiento de seales II
Hay muchos tipos de seales, segn su origen
SIGILL instruccin ilegal
SIGALRM vence el temporizador
SIGKILL mata al proceso
El SO las transmite al proceso
El proceso debe estar preparado para recibirla
Especificando un procedimiento de seal con sigaction()
Enmascarando la seal con sigprogmask()
Si no est preparado accin por defecto
El proceso, en general, muere
Hay algunas seales que se ignoran o tienen otro efecto
El servicio pause() para el proceso hasta que recibe una seal

Seales. Ejemplo Unix


/* Programa A. Fichero
Fichero padre.c
* Manda ejecutar el programa B
* Lee caracteres del terminal y cada vez que detecta salto de linea
* envia una seal al proceso B
*/
#include <stdio.h>
#include <signal.h>
<signal h>
#include <unistd.h>
#include <stdlib.h>
pid_t resp;
char buf[1];
main() {
resp = fork();
if (resp == 0)
if (execlp("./hijo","hijo", NULL) == -1) {
perror("exec"), exit(1);
}
while (read(0, buf, 1) == 1) {
if (buf[0] == '\n') {
kill(resp, SIGUSR2);
}
}
}

47

15/12/2009

Seales. Ejemplo Unix


/* Programa B.
Fichero hijo.c
* Crea un fichero y escribe en l
* una lnea por cada seal que recibe, hasta un mximo de 5
*/
#include <fcntl.h>
#include <signal.h>
#include <stdlib.h>
<stdlib h>
int fd, n=5;
void proc(int arg) {
n--;
return;
}
int main() {
signal(SIGUSR2, proc);
if ((fd = open("fichero", O_CREAT|O_TRUNC|O_WRONLY)) == -1) {
perror("open"); exit(1);
}
while (n!= 0) {
pause();
write(fd, "Linea\n", 7);
}
return 0;
}

Excepciones
Evento que ocurre durante la ejecucin de un programa y que
requiere la ejecucin de un fragmento de cdigo fuera del flujo
normal de ejecucin.
Manejo de excepcion en Java
try {
Bloque donde puede producirse una excepcin
}
catch {
Bloque que se ejecutar si se produce una
excepcin
en el bloque anterior
}

48

15/12/2009

Temporizadores
El SO mantiene un temporizador por proceso
El proceso activa el temporizador con alarm()
El SO enva una seal SIGALRM al proceso cuando vence su
temporizador

Proceso servidor
Es un proceso que:
Est pendiente de recibir rdenes de un proceso cliente
Estructura de bucle infinito
Uso de puertos de comunicacin PROCESOS
CLIENTES

PROCESO
SERVIDOR

RECURSO

Servidor secuencial:
El servidor mismo ejecuta las rdenes

Servidor paralelo:
Delega ejecucin las rdenes a threads o procesos hijos

49

15/12/2009

Proceso servidor. Funcionamiento

a)

b)

c)

Servidor
Padre

Servidor
Padre

Servidor
Padre

Servidor
Hijo

Puerto A

Puerto A

Puerto A

Puerto B

Cliente A

Cliente A

Proceso servidor. Mquinas distribuidas


Procesos cliente y servidor en mquinas distintas

Puerto

Cliente

Servidor
ficheros

Servidor
impresin

Servidor
e_mail

SO

SO

SO

SO

RED

50

15/12/2009

Procesos demonios
Es un proceso que ejecuta:

En background (su padre no le espera)


No asociado a un terminal o proceso login
Que espera que ocurra un evento
Funciona como servior
O que debe realizar una tarea de forma peridicas

Caractersticas

Se arrancan al iniciar el sistema


No mueren
Estn normalmente en espera de evento
No hacen el trabajo, lanzan otros procesos o procesos ligeros

Ejemplos:Telnetd, httpd, lpd

Servicios POSIX para seales I


include <sys/types.h>
#include <signal.h>
g
Manipular conjuntos de seales:
int sigemptyset (sigset_t *set);
int sigfillset (sigset_t *set);
int sigaddset (sigset_t *set, int signo);
int sigdelset (sigset_t *set, int signo);
int sigismember (const sigset_t *set, int signo);
Estas funciones no afectan de forma directa al comportamiento
del sistema

51

15/12/2009

Servicios POSIX para seales II


Examinar y cambiar la accin asociada a una seal (armado):
int sigaction (int sig, const struct sigaction *act, struct sigaction *oact);
si act es NULL, la accin actual no se cambia
si oact no es NULL, la accin actual se devuelve en *oact
Enviar una seal a un proceso:
int kill (pid_t pid, int sig);
Enviar una seal a un thread:
pthread kill(pthread t thread,
pthread_kill(pthread_t
thread int sig);
sig)
Aceptar una seal bloqueada:
int sigwait (const sigset_t *set, int *sig);

Servicios POSIX para seales III


Mscara de seales:
int sigprocmask (int how, sigset_t *set, sigset_t *oset);
Permite modificar o examinar la mscara de seales de un proceso.
int sigpending (sigset_t *set);
Devuelve el conjunto de seales bloqueadas pendientes del proceso.
Espera de seales:
int pause(void);
Bloquea al proceso hasta que llegue una seal.
Servicios de temporizacin:
unsigned int alarm(unsigned int seconds);
Activa un temporizador
unsigned int sleep(unsigned int seconds);
El proceso se suspende en num de segundos.

52

También podría gustarte