Publicado el 5 de Julio del 2017
719 visualizaciones desde el 5 de Julio del 2017
6,3 MB
163 paginas
Creado hace 18a (20/11/2006)
Sistemas operativos II
Procesos en UNIX
Introducción sistema operativo UNIX
Procesos en UNIX
Planificación
Creación y terminación de procesos
Señales
Comunicación entre procesos
Procesos en UNIX
Introducción sistema operativo UNIX
Procesos en UNIX
Planificación
Creación y terminación de procesos
Señales
Comunicación entre procesos
Procesos en UNIX
Introducción sistema operativo UNIX
Procesos en UNIX
Planificación
Creación y terminación de procesos
Señales
Comunicación entre procesos
Antecedentes
I UNiplexed Information Computing Service (versión
monousuario de MULTICS)
I Primera implementación sobre SEC PDP-7 (1969) por Ken
Thomson y Dennis Ritchie
I portada a PDP-11/20 con runoff. Adoptada por Laboratorios
BELL como procesador de textos en 1970
I 1972 2nd Edition
I 1973 Implementación en C (Thompson y Ritchie)
I 1974 4th Edition
I 1977 5th & 6th Edition
I 1979 7th Edition (ascendiente directo de las versiones
actuales)
System V
I Introducido por ATT en 1983. System V release 1.
Compromiso para mantener compatibilidad ascendente
I System V release 1: vi, biblioteca curses
I System V release 2 (1985): protección y bloqueo de archivos
I System V release 2.1: paginación bajo demanda
I System V release 3 (1987): redes
I System V release 4: unifica versiones de distintos fabricantes
BSD
I Universidad de Berkley entró en contacto un UNIX 4th edition
I Bill Joy en 1977 diseño un añadido para las 6th edition
llamado Berkeley Software Distribution (compilador pascal,
cshell, ex..)
I 1978 2BSD
I 1979 3BSD basada en 2BSD y 7th edition: memoria virtual
(DEV VAX-11/780)
I DARPA(Defence Advanced Research Project Agency)
consolida la 4BSD
I 1983 4.1 BSD
I 4.2BSD: nuevo sistema de archivos
I 1987 4.3BSD
I Sun Microsystems añadió NFS a 4.3 BSD
I Actualmente freeBSD, openBSD netBSD
POSIX
I Término acuñado por Richard Stallman
I Portable Operating System Interface for uniX
I Designada con IEEE 1003, ISO/IEC 9945
I Familia de estándares que definen una API para software
compatible con distintas variantes de UNIX
I Varias extensiones
I POSIX.1: Incorpora estándar ANSI C
I POSIX.1b: Tiempo real
I POSIX.1c: Threads
Relación entre las distintas variedades de UNIX
I El núcleo reside en un fichero (/unix, /vmunix /vmlinuz
/kernel.GENERIC..) que se carga al arrancar la máquina
(procedimiento bootstrap)
I El núcleo (kernel) inicializa el sistema y crea el entorno para
que se ejecuten los procesos y crea unos pocos procesos que a
su vez crearán el resto.
I INIT (proceso con pid 1) es el primer proceso de usuario y
antecesor del resto de procesos de usuario en el sistema
I El núcleo (kernel) de UNIX interactua con el hardware
I Los procesos interactuan con el núcleo a través de la interfaz
de llamadas al sistema
freebsd 4.9
SESS
USER PID PPID PGID
0
root
0 c0326e60
0
1
root
1 c08058c0
0
2
root
0 c0326e60
0
3
root
0 c0326e60
0
4
root
0 c0326e60
0
5
root
0 c0326e60
0
6
root
0 c0326e60
0
7
root
0 c0326e60
0
root 90
1
90 c08509c0
root 107
1 107 c085cd80
root 112
1 112 c0874500
root 115
1 115 c0874600
root 117 115 115 c0874600
JOBC STAT
0 DLs
0 ILs
0 DL
0 DL
0 DL
0 DL
0 DL
0 DL
0 Ss
0 Is
0 Is
0 Is
0 I
TT
??
??
??
??
??
??
??
??
??
??
??
??
??
COMMAND
(swapper)
/sbin/init --
(taskqueue)
(pagedaemon)
(vmdaemon)
(bufdaemon)
(syncer)
(vnlru)
/sbin/natd -n ed0
/usr/sbin/syslogd -s
mountd -r
nfsd: master (nfsd)
nfsd: server (nfsd)
linux 2.4
F S UID PID PPID C PRI
4 S
68
69
1 S
79
1 S
1 S
69
69
1 S
69
1 S
67
4 S
1 S
69
69
1 S
69
1 S
69
5 S
1 S
69
69
5 S
1
0
2
0
3
0
4
0
5
0
0
6
0 229
0 375
0 492
0 1571
0 1574
0 1592
0 1604
0 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
NI ADDR SZ WCHAN
TTY
0 -
0 -
19 -
0 -
0 -
0 -
-4 -
0 -
0 -
0 -
0 -
0 -
0 -
373 select ?
0 contex ?
0 ksofti ?
0 kswapd ?
0 bdflus ?
0 kupdat ?
369 select ?
0 down_i ?
?
0 ?
561 select ?
547 syslog ?
637 select ?
555 select ?
CMD
init
keventd
ksoftirqd_CPU0
kswapd
bdflush
kupdated
udevd
knodemgrd_0
khubd
syslogd
klogd
dirmngr
inetd
solaris 7 sparc
F S
19 T
8 S
19 S
19 S
8 S
8 S
8 S
8 S
8 S
8 S
8 S
8 S
8 S
8 S
8 S
8 S
8 S
UID
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
PID PPID C PRI NI
0
0 SY
0 41 20
0 SY
0
0 SY
0
40 20
279 0
1 0
41 20
41 20
1 0
45 20
1 0
57 20
1 0
1 0
41 20
40 20
1 0
41 20
1 0
1 0
41 20
41 20
1 0
51 20
1 0
41 20
1 0
279 0
46 20
0
1
2
3
282
123
262
47
49
183
174
197
182
215
198
179
283
SZ
0
98
0
0
2115
278
212
162
288
313
230
444
3071
387
227
224
627
TTY
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
CMD
sched
init
pageout
fsflush
Xsun
rpcbind
sac
devfseve
devfsadm
automoun
lockd
syslogd
in.named
lpsched
cron
inetd
dtlogin
estructura de un sistema UNIX
En UNIX son necesarios dos modos de ejecución
I modo usuario se ejecuta el código de usuario
I modo kernel se ejecutan las funciones del kernel
1. Llamadas al sistema: Los procesos de usuario solicitan
servicios explicitamente a través de la interfaz de llamadas al
sistema.
2. Excepciones: Situaciones excepcionales (división por 0,
errores de direccionamiento..) causan excepciones hardware
que requieren intervención del kernel.
3. Interrupciones: Los dispositivos periféricos interrumpen para
notificar al kernel de diversos sucesos (terminación de e/s,
cambio de estado..)
I Algunas instrucciones hardware solo pueden ser ejecutadas en
modo kernel.
En un sistema UNIX tradicional un proceso viene definido por
I espacio de direcciones: Conjunto de direcciones de memoria
que el proceso puede referenciar.
I punto de control del proceso que indica cual es la siguiente
instrucción a ejecutar utilizando un registro hardware que se
llama C.P.
En un sistema UNIX moderno puede haber varios puntos de
control (threads).
Los procesos manejan direcciones virtuales de memoria. Una parte
de este espacio corresponde al código y los datos del kernel. Se
llama system space o kernel space
El system space solo puede ser accedido en modo kernel
El kernel mantiene
I estructuras de datos globales
I estructuras de datos específicas de cada proceso
El espacio de direcciones del proceso actual es accesible
directamente pues los registros de la MMU tienen la información
necesaria.
Mapa de memoria en linux
0xc0000000 the invisible kernel
initial stack
room for stack grouth
shared libraries
unused
malloc memory
uninitialized data
initialized data
text
0x60000000
brk
end data
end code
0x00000000
Mapa de memoria en solaris
I kernel de unix reentrante
I varios procesos pueden estar ejecutando simultáneamente
distintas funciones del kernel
I varios procesos pueden estar ejecutando simultáneamente la
misma funcion del kernel
I código del kernel es de solo lectura
I datos (variables globales) del kernel protegidos de accesos
cocurrentes
I cada proceso tiene su propia pila del kernel
Procesos en UNIX
Introducción sistema operativo UNIX
Procesos en UNIX
Planificación
Creación y terminación de procesos
Señales
Comunicación entre procesos
I proceso: instancia de un programa en ejecución
I proceso: entidad que ejecuta un programa y proporciona un
entorno de ejecición para él; en concreto un espacio de
direcciones y uno (o varios) puntos de control
I un proceso tiene un tiempo de vida definido
I se crea mediante la llamada fork() (o vfork())
I termina mediante exit()
I puede ejecutar un programa mediante alguna de las llamadas
de la familia exec()
I todo proceso tiene un proceso padre
I un proceso puede tener varios procesos hijos
I estructura jerárquica en forma de arbol con el proceso init
como tronco
I si un proceso termina antes que sus procesos hijos estos pasan
a ser heredados por init
Ejemplo de arbol de procesos
Estados de un procesos en SystemV R2
I inicial (idle): El proceso está siendo creado pero todavía no
está listo para ejecición
I listo (runnable, ready to run)
I en espera (blocked, asleep). Tanto en este estado, como en
el anterior, el proceso puede estar en la memoria principal o
en el intercambio (swapped)
I ejecución modo usuario (user running)
I ejecución modo kernel (kernel running)
I zombie: El proceso ha terminado pero su proceso padre no
ha hecho wait(), con lo que no se ha vaciado su entrada en la
tabla de procesos y para el sistema el proceso sigue existiendo.
I A partir de 4.2BSD hay un nuevo estado: parado (stopped)
I Puede ser parado en espera o parado listo
I Se llega al estado de parado al recibir una de las siguientes
señales
I SIGSTOP
I SIGTSTP ctrl-Z
I SIGTTIN
I SIGTTOU
I Se sale de él mediante la señal SIGCONT
I La ejecución de un proceso comienza en modo kernel
I Las transiciones de ejecución a espera son desde ejecución en
modo kernel
I Las transiciones de ejecución a listo son desde ejecición en
modo kernel
I Un proceso termina desde ejecución en modo kernel
I Cuando un proceso termina queda en estado zombie hasta
que su padre hace una de las llamadas wait
Un proceso se ejecuta dentro de un determinado contexto que
contiene la información necesaria para ejecutar dicho proceso.
Dicho contexto está formado por:
I Espacio de direcciones de usuario. Usualmente formado
por texto (código), datos, pila, regiones de memoria
compartida . . .
I Información de control.
I estructura proc
I u area
I pila del kernel
I mapas de traslación de direcciones
I credenciales
I variables de entorno
I contexto hardware Los contenidos de los registros hardware
(PC, PSW, SP, registros de FPU y MMU . . . ). Cuando hay
un cambio de contexto se guardan en una parte de la u area
llamada PCB (Process Control Block)
estructura proc
I El kernel mantiene un array de estructuras proc llamado
proccess table
I Está en el espacio de datos del kernel
I La estructura proc de un proceso es siempre visible para el
kernel, incluso cuando el proceso no está en CPU
I Contiene la información del proceso que es necesaria en todo
momento
estructura proc
I identificación del proceso
I localización de la u area (mapa de direcciones)
I estado del
Comentarios de: Sistemas operativos II (0)
No hay comentarios