Libro Sistemas Operativos Una Visión Aplicada 2 Edición
Libro Sistemas Operativos Una Visión Aplicada 2 Edición
Libro Sistemas Operativos Una Visión Aplicada 2 Edición
CONCEPTOS ARQUITECTNICOS
DEL COMPUTADOR
En este captulo se presentan los conceptos de arquitectura de computadores ms relevantes desde el punto
de vista de los sistemas oprativos. El captulo no pretende convertirse en un tratado de arquitectura, puesto
que su objetivo es el de recordar y destacar los aspectos arquitectnicos que afectan de form a directa al sis
tema operativo.
Para alcanzar este objetivo el captulo se estructura en los siguientes grandes temas:
Funcionamiento bsico de los computadores y estructura de los mismos.
Modelo de programacin con nfasis en su secuencia de ejecucin.
Concepto de interrupcin y sus tipos.
Diversas acepciones de reloj.
Aspectos ms relevantes de la jerarqua de memoria y, en especial, de la memoria virtual.
Concurrencia de la E/S con el procesador.
Mecanismos de proteccin.
Multiprocesador y multicomputador.
Prestaciones del sistema.
1.1.
El computador es una mquina destinada a procesar datos. En una visin esquemtica, como la que muestra
la figura 1.1, este procesamiento involucra dos flujos de informacin: el de datos y el de instrucciones. Se
parte del flujo de datos que han de ser procesados. Este flujo de datos es tratado mediante un flujo de instruc
ciones mquina, generado por la ejecucin de un programa, produciendo el flujo de datos resultado.
Para llevar a cabo la funcin de procesamiento, un computador con arquitectura von Neumann est
compuesto por los cuatro componentes bsicos representados en la figura 1.2 .
La memoria principal se construye con memoria RAM (.Random Access Memory) y memoria ROM
(Read Only Memory). En ella han de residir los datos a procesar, el programa mquina a ejecutar y los resul
tados (aclaracin 1.1). La memoria est formada por un conjunto de celdas idnticas. Mediante la informa
cin de direccin se selecciona de forma nica la celda sobre la que se quiere realizar el acceso, pudiendo ser
ste de lectura o de escritura. En los computadores actuales es muy frecuente que el direccionamiento se re
alice a nivel de byte, es decir, que las direcciones 0, 1, 2,... identifiquen los bytes 0 , 1, 2,... de memoria. Sin
embargo, el acceso se realiza generalmente sobre una palabra de varios bytes (tpicamente de 4 o de 8 bytes)
cuyo primer byte se sita en la direccin utilizada.
Aclaracin 1.1. Se denomina programa mquina (o cdigo) al conjunto de instrucciones mquina que tiene
por objeto que el computador realice una determinada funcin. Los programas escritos en cualquiera de los
lenguajes de programacin han de convertirse en programas mquina para poder ser ejecutados por el com
putador^
La unidad aritmtica permite realizar una serie de operaciones aritmticas y lgicas sobre uno o dos
operandos. Los datos sobre los que opera esta unidad estn almacenados en un conjunto de registros o bien
provienen directamente de la memoria principal. Por su lado, los resultados tambin se almacenan en regis
tros o en la memoria principal.
La unidad de control es la que se encarga de hacer funcionar al conjunto, para lo cual realiza cclicaComputador
Datos
Resultados
Jt :
Instrucciones
de mquina
Registros
generales
M E M O R IA
P R IN C IP A L
PE R IF R IC O S
Cdigo
,
U N ID A D
A R IT M T IC A
U N ID A D DE C O N T R O L
Estado
I Contador de programa"!
I Registro de instruccin I
1
Hunlero de pila
Figura 1.2 Componentes bsicos del computador con arquitectura von Neumann.
La unidad de control tiene asociados una serie de registros, entre los que cabe destacar: el contador de
programa (PC, Program Counter), que indica la direccin de la siguiente instruccin mquina a ejecutar; el
puntero de pila (SP, Stack Pointer), que sirve para manejar cmodamente una pila en memoria principal; el
registro de instruccin (RI), que permite almacenar una vez leda de la memoria principal la instruc
cin mquina a ejecutar, y el registro de estado (RE), que almacena diversa informacin producida por la
ejecucin de alguna de las ltimas instrucciones del programa (bits de estado aritmticos) e informacin so
bre la forma en que ha de comportarse el computador (bits de interrupcin, modo de ejecucin, etc.).
. Finalmente, la unidad de entrada/salida (E/S) se encarga de hacer la transferencia de informacin en
tre la memoria principal (o los registros generales) y los perifricos. La entrada/salida se puede hacer bajo el
gobierno de la unidad de control (E/S programada) o de forma independiente (acceso directo a memoria o
DMA), como se ver en la seccin 1.6 Entrada/Salida.
Se denomina procesador o unidad central de proceso (UCP) al conjunto de la unidad aritmtica y de la
unidad de control. Actualmente, el procesador suele construirse en un nico circuito integrado, que tambin
incluye la unidad de gestin de memoria que se describe en la seccin 1.5.7 Concepto de memoria virtual.
Desde el punto de vista de los sistemas operativos, nos interesa ms profundizar en el funcionamiento
interno del computador que en los componentes fsicos que lo constituyen.
1.2.
El modelo de programacin a bajo nivel de un computador define los recursos y caractersticas que ofrece
ste al programador de bajo nivel. Este modelo se caracteriza por los siguientes aspectos, que se muestran
grficamente en la figura 1.3.
Elementos de almacenamiento. Son los elementos de almacenamiento del computador que son vi
sibles a las instrucciones mquina. En esta categora estn incluidos los registros generales, el conta-
Registro de estado
\ Registros de datos
Modo Traza I
Sistema/Usuario f!
Mscara
de
Interrupciones
Registros de direocin
E xtensin
Mapa de
memoria
2 -ll
Mapa de
E/S
15
14
13 l
12 \(
11 /
15 10
11
BJ 8
7 >
6
9J
5\
/ Usuario
X 4
Negativo fj 3
Cero
Desbordamiento
1
Acarreo c 0
Juego de instrucciones
dor de programa, el o los punteros de pila, el registro de estado, la memoria principal y los registros
de los controladores de E/S. La memoria principal se ubica en el mapa de memoria, mientras que los
registros de E/S se ubican en el mapa de E/S.
Juego de instrucciones, con sus correspondientes modos de direccionamiento. El juego de instruc
ciones mquina define las operaciones que es capaz de hacer el computador. Los modos de direccio
namiento determinan la forma en que se especifica la localizacin de los operandos, es decir, los
elementos de almacenamiento que intervienen en las instrucciones mquina.
Secuencia de funcionamiento. Define el orden en que se van ejecutando las instrucciones mquina.
Modos de ejecucin. Un aspecto crucial de los computadores, que est presente en todos ellos me
nos en los modelos ms simples, es que disponen de ms de un modo de ejecucin, concepto que se
analiza en la seccin siguiente y que es fundamental para el diseo de los sistemas operativos.
Aclaracin 1.2. Por mapa se entiende todo el conjunto de posibles direcciones y, por tanto, de posibles pala
bras de memoria o de posibles registros de E/S que se pueden incluir en el computador. Es muy frecuente que
los computadores incluyan el mapa de E/S dentro del mapa de memoria, en vez de incluir un mapa especfico
de E/S, reservando para ello un rango de direcciones del mapa de memoria (vase la seccin 1.6.3 Buses y
direccionamiento). En este caso, se utilizan las mismas instrucciones mquina para acceder a la memoria
principal y a los registros de E/S.
c) Ejecucin de la instruccin
similar a la interrupcin, haciendo que se salte a otro programa (que deber ser el sistema operativo).
Si desde el punto de vista de la programacin el inters se centra en las instrucciones de salto, y, en es
pecial en las de salto a procedimiento y retomo de procedimiento, desde el punto de vista de los sistemas
operativos son mucho ms importantes las interrupciones y las instrucciones mquina de llamada al sistema.
Por tanto, centraremos nuestro inters en resaltar los aspectos fundamentales de estas dos ltimas.
Registros de gestin de memoria, como pueden ser los registros de proteccin de memoria o el regis
tro identificador del espacio de direccionamiento (vase la seccin 1.7.2 Mecanismos de proteccin
de memoria).
Algunos de estos registros son visibles en el modo de ejecucin de usuario, como el PC, el SP y parte
del estado, pero otros no lo son, como los de gestin de memoria.
Al contenido de todos los registros del procesador en un instante determinado le denominamos estado
del procesador, trmino que utilizaremos profusamente a lo largo del libro. Un subconjunto del estado del
procesador lo constituye el estado visible del procesador, formado por el conjunto de los registros visibles en
modo usuario.
1.3.
INTERRUPCIONES
Una interrupcin se solicita activando una seal que llega a la unidad de control. El agente generador o soli
citante de la interrupcin ha de activar la mencionada seal cuando necesite que se le atienda, es decir, que se
ejecute un programa que le atienda.
Ante la solicitud de una interrupcin, siempre y cuando est habilitada ese tipo de interrupcin, la uni
dad de control realiza un ciclo de aceptacin de interrupcin. Este ciclo se lleva a cabo en cuanto termina la
ejecucin de la instruccin mquina que se est ejecutando, y los pasos que realiza la unidad de control son
los siguientes:
Salva algunos registros del procesador, como son el de estado y el contador de programa. Normal
mente utiliza para ello la pila de sistema, gestionada por el puntero de pila SP'.
Eleva el modo de ejecucin del procesador, pasndolo a ncleo.
Carga un nuevo valor en el contador de programa, por lo que se pasa a ejecutar otro programa,
que, generalmente, ser el sistema operativo.
En muchos procesadores inhibe las interrupciones (vase ms adelante Niveles de Interrupcin).
La figura 1.6 muestra la interrupcin vectorizada, solucin usualmente utilizada para determinar la di
reccin de salto. Se puede observar que el agente que interrumpe suministra el llamado vector de interrup
cin que determina la direccin de comienzo del programa que desea que le atienda (programa que se suele
denominar rutina de tratamiento de interrupcin). La unidad de control, utilizando un direccionamiento indi
recto, toma la mencionada direccin de una tabla de interrupciones IDT {Interrupt Descriptor Table) y la
carga en el contador de programa. El resultado de esta carga es que la siguiente instruccin mquina ejecuta
da es la primera del mencionado programa de tratamiento de interrupcin.
Observe que se han incluido como parte del sistema operativo tanto la tabla IDT como la rutina de tra
tamiento de la interrupcin. Esto debe ser as por seguridad, ya que la rutina de tratamiento de interrupcin
ejecuta en modo privilegiado. En caso contrario, un programa de usuario ejecutara sin limitacin ninguna,
por lo que podra acceder a los datos y programas de otros usuarios. Como se ver en el captulo 11 Seguri
dad y proteccin, la seguridad es una de las funciones primordiales del sistema operativo.
Se dice que la interrupcin es sncrona cuando es consecuencia directa de las instrucciones mquina
que se estn ejecutando. En el resto de ios casos se dice que es asincrona. Las interrupciones se pueden ge
nerar por diversas causas, que clasificaremos de la siguiente forma:
Excepciones hardware sncronas. Hay determinadas causas que hacen que un programa presente
una incidencia en sii ejecucin, por lo que se generar una interrupcin, para que el sistema operativo
entre a ejecutar y decida lo que debe hacerse. Dichas causas se pueden estructurar en las tres clases
siguientes:
Problemas de ejecucin:
Operacin invlida en la unidad aritmtica.
Divisin por cero.
Operando no normalizado.
Desbordamiento en el resultado, siendo demasiado grande o demasiado pequeo.
Resultado inexacto en la unidad aritmtica.
Dispositivo no existente (p. ej.: no existe coprocesador).
Regin de memoria invlida.
Desbordamiento de la pila.
Violacin de los lmites de memoria asignada.
Error de alineacin en acceso a memoria.
Cdigo de operacin mquina invlido.
Depuracin:
Punto de ruptura.
Fallo de pgina.
Todas ellas son producidas directa o indirectamente por el programa en ejecucin, por lo que deci
mos que se trata de interrupciones sncronas (advertencia 1.2 ).
Excepciones hardware asincronas. Se trata de interrupciones asincronas producidas por un error
en el hardware. En muchos textos se denominan simplemente excepciones hardware. Ejemplos son
los siguientes:
Fallo de alimentacin.
Lmite de temperatura excedido.
En las excepciones hardware, tanto sncronas como asincronas, ser el mdulo del computador que
produce la excepcin el que genere el vector de interrupcin. Adems, dicho mdulo suele cargar en
un registro o en la pila un cdigo que especifica el tipo de problema encontrado.
Interrupciones externas. Se trata de interrupciones asincronas producidas por elementos externos
al procesador como son: a) el reloj, que se analizar en detalle en la seccin siguiente, b) los contro
ladores de los dispositivos de E/S, que necesitan interrumpir para indicar que han terminado una ope
racin o conjunto de ellas, o que necesitan atencin, y c) otros procesadores.
Instrucciones mquina de llamada al sistema (p. ej.: TRAP, INT o SC). Estas instrucciones permi
ten que un programa genere una interrupcin de tipo sncrono. Como veremos ms adelante, estas
instrucciones se incluyen para que los programas de usuario puedan solicitar los servicios del sistema
operativo.
Advertencia 1.2: Las excepciones hardware sncronas se denominan muy frecuentemente excepciones
software, pero en este texto reservamos dicho nombre para el concepto de excepcin soportado por el sistema
operativo (vase seccin 3.6.2 Excepciones, pgina 94 ).
Como complemento al mecanismo de aceptacin de interrupcin, los procesadores incluyen una ins
truccin mquina para retomar desde la rutina de tratamiento de interrupcin (p. ej.: RETI). El efecto de esta
instruccin es restituir los registros de estado y PC, desde el lugar en que fueron salvados al aceptarse la inte
rrupcin (p. ej.: desde la pila del sistema).
Niveles de interrupcin
Como muestra la figura 1.7, los procesadores suelen incluir varias lneas de solicitud de interrupcin, cada
una de las cuales puede tener asignada una determinada prioridad. En caso de activarse al tiempo varias de
estas lneas, se tratar la de mayor prioridad, quedando las dems a la espera de ser atendidas. Las ms priori
tarias suelen ser las excepciones hardware asincronas, seguidas por las excepciones hardware sncronas (o
de programa), las interrupciones extemas y las de llamada al sistema o TRAP.
Adems, el procesador suele incluir un mecanismo de inhibicin selectiva que permite detener todas o
determinadas lineas de interrupcin. Este mecanismo, que es muy especfico de cada mquina, puede estar
basado en los dos registros de mscara y de nivel, y en el biestable general de inhibicin de interrupcin
(BGII). El comportamiento de estos mecanismos es el siguiente. Mientras est activo BGII no se admitir
ninguna interrupcin. El registro de nivel inhibe todas las interrupciones con prioridad menor o igual que el
valor que contenga. Finalmente, el registro de mscara tiene un bit por lnea de interrupcin, por lo que per
mite inhibir de forma selectiva cualesquiera de las lneas de interrupcin.
Las interrupciones de las lneas inhibidas no son atendidas hasta que, al modificarse los valores de
mscara, nivel o BGII, dejen de estar inhibidas. Dependiendo del mdulo que las genera y del hardware de
interrupcin, se pueden encolar o se pueden llegar a perder algunas de las interrupciones inhibidas. Estos
valores de mscara, nivel y BGII deben incluirse en la parte del registro de estado que solamente es modificable en modo privilegiado, por lo que su modificacin queda restringida al sistema operativo. La unidad de
control, al aceptar una interrupcin, suele modificar determinados valores de los registros de inhibicin para
facilitar el tratamiento de las mismas. Las alternativas ms empleadas son dos: inhibir todas las interrupcio
nes o inhibir las interrupciones que tengan prioridad igual o menor que la aceptada.
INT1
INT2
INT3
INT4
INTn
.-------
Prioridad/Inhibicin
de interrupciones
I
M scara
Nivel
Prioridad .
INT
llB G Ill
Unidad de control
del procesador
Tratamiento de interrupciones
En el ciclo de aceptacin de una interrupcin se salvan algunos registros, pero un correcto tratamiento de las
interrupciones exige preservar los valores del resto de los registros del programa interrumpido. De esta for
ma, se podrn restituir posteriormente dichos valores, para continuar con la ejecucin del programa como si
no hubiera pasado nada. Tngase en cuenta que el nuevo programa, que pone en ejecucin la interrupcin,
cargar nuevos valores en los registros del procesador. Tambin es necesario mantener la informacin que
tenga el programa en memoria, para lo cual basta con no modificar la zona de memoria asignada al mismo.
Adems, la rutina de tratamiento de interrupciones deber, en cuanto ello sea posible, restituir los valo
res de los registros de inhibicin de interrupciones para admitir el mayor nmero posible de interrupciones.
La instruccin mquina de retomo de interrupcin RETI realiza una funcin inversa a la del ciclo de
aceptacin de la interrupcin. Tpicamente, restituye el valor del registro de estado E y el del contador de
programa PC. En muchos casos, la instruccin RETI producir, de forma indirecta, el paso del procesador a
modo usuario. En efecto, supngase que est ejecutando el programa A en modo usuario y que llega una inte
rrupcin. El ciclo de aceptacin salva el registro de estado (que tendr un valor Ea) y el contador de progra
ma (que tendr un valor PCa). Como el bit que especifica el modo de funcionamiento del procesador se
encuentra en el registro de estado, Ea tiene activo el modo usuario. Seguidamente, el ciclo de aceptacin
cambia el registro de estado activando el modo privilegiado. Cuando ms tarde se restituya al registro de es
tado el valor salvado Ea, que tiene activo el modo usuario, se pone el procesador en este modo. Por otro lado,
al restituir el valor de contador de programa, se consigue que el procesador siga ejecutando a continuacin
del punto en el que el programa A fe interrumpido.
En las seccin 3.11 Tratamiento de interrupciones se detalla el tratamiento de las interrupciones rea
lizado por el sistema operativo, dando soluciones al anidamiento de las mismas, fenmeno que se produce
cuando se acepta una interrupcin sin haberse completado el tratamiento de la anterior.
1.4.
EL RELOJ
El trmino reloj se aplica a los computadores con tres acepciones diferentes, si bien relacionadas, como se
muestra en la figura 1.8. Estas tres acepciones son las siguientes:
Seal que gobierna el ritmo de ejecucin de las instrucciones mquina (CLK).
Generador de interrupciones peridicas o temporizador.
Contador de fecha y hora, o reloj de tiempo real RTC (Real Time Clock).
El oscilador que gobierna las fases de ejecucin de las instrucciones mquina se denomina reloj. Cuan
do se dice que un microprocesador es de 5 GHz, se est especificando que el oscilador que gobierna su ritmo
de funcionamiento interno produce una onda cuadrada con una frecuencia de 5 GHz.
La seal producida por el oscilador anterior, o por otro oscilador, se divide mediante un divisor de fre
cuencia para generar una interrupcin extema cada cierto intervalo de tiempo. Estas interrupciones, que se
estn produciendo constantemente, se denominan interrupciones de reloj o tics, dando lugar al segundo
concepto de reloj. El objetivo de estas interrupciones es, como veremos ms adelante, hacer qu el sistema
operativo entre a ejecutar de forma peridica. De esta manera, podr evitar que un programa monopolice el
uso del computador y podr hacer que entren a ejecutarse programas en determinados instantes de tiempo.
Estas interrupciones se producen cada varios ms; por ejemplo, en la arquitectura PC clsica para MS-DOS el
temporizador 8254 produce un tic cada 54,926138 ms.
23
sectores consecutivos. Existen otros dispositivos de bloques como las cintas magnticas, los DVD y los CD.
Todos ellos se caracterizan por tener un tiempo de acceso importante comparado con el tiempo de transferen
cia de una palabra, por lo que interesa amortizar este tiempo de acceso transfiriendo bastantes palabras.
Otros dispositivos como el teclado se denominan de caracteres. Son una fuente o sumidero de bytes no
direccionables. Muchos de estos dispositivos se caracterizan por ser lentos, aunque algunos como los contro
ladores de red pueden ser muy rpidos.
24
;sector ledo
SUB .RI,.RI
IN
R2,/P_ESTADO
AND .R 2 ,#MASCARA
BZ
/BUCLE
IN
,R2,/P_DATO
ST
R2,/BUFFER[.1]
ADD RI,#4
CMP .R I ,#SECTOR
BLT /BUCLE
Observe que, hasta que no se disponga del primer dato, el bucle puede ejecutarse millones de veces, y
que, entre dato y dato, se repetir varias decenas de veces. Al llegar a completar el nmero m de datos a leer,
se termina la operacin de E/S.
Se denomina espera activa cuando un programa queda en un bucle hasta que ocurra un evento. La es
pera activa consume tiempo del procesador, por lo que es muy poco recomendable cuando el tiempo de espe
ra es grande en comparacin con el tiempo de ejecucin de una instruccin.
En caso de utilizar E/S con interrupciones, el procesador, tras enviar la orden al controlador del perif
rico, puede dedicarse a ejecutar otro programa. Cuando el controlador disponga de un dato generar una inte
rrupcin extema. La rutina de interrupcin deber hacer la lectura del dato y su almacenamiento en memoria
principal, lo cual conlleva un cierto tiempo del procesador. En este caso se dice que se hace espera pasiva,
puesto que el programa que espera el evento no est ejecutndose. La interrupcin extema se encarga de
despertar al programa cuando ocurre el evento.
Finalmente, en caso de utilizar E/S por DMA, el controlador del dispositivo se encarga directamente de
ir transfiriendo los datos entre el perifrico y la memoria, sin interrumpir al procesador. Una vez terminada la
transferencia de todos los datos, el controlador genera una interrupcin extema de forma que se sepa que ha
terminado. Un controlador que trabaje por DMA dialoga directamente con la memoria principal del compu
tador. La fase de envo de una orden a este tipo de controlador exige incluir la direccin de memoria donde
est el buffer de la transferencia, el nmero de palabras a transmitir y la direccin de la zona del perifrico
afectada.
Existe un tipo evolucionado de DMA llamado canal, que es capaz de leer las rdenes directamente de
una cola de trabajos, construida en memoria principal, y de almacenar los resultados de las rdenes en una
cola de resultados, construida tambin en memoria principal, y todo ello sin la intervencin del procesador.
El canal solamente interrumpe al procesador cuando terminado un trabajo encuentra vaca la cola de trabajos.
Tabla 1.2 Ocupacin del procesador en operaciones de entrada/salida.
E/S
E/S
E/S
E/S
programada
por interrupciones
por DMA
por canal
Enviar orden
Procesador
Procesador
Procesador
Controlador
Esperar dato
Procesador
Controlador
Controlador
Controlador
Transferir dato
Procesador
Procesador
Controlador
Controlador
Fin operacin
Procesador
Procesador
Procesador
Controlador
La tabla 1.2 presenta la ocupacin del procesador en la realizacin de las distintas actividades de una
operacin de E/S segn el modelo de E/S utilizado.
Puede observarse que la solucin que presenta la mxima concurrencia, y que descarga al mximo al proce
sador, es la de E/S por canal. Por otro lado, es la que exige una mayor inteligencia por parte del controlador.
Un aspecto fundamental de esta concurrencia es su explotacin. En efecto, de nada sirve descargar al
procesador del trabajo de E/S si durante ese tiempo no tiene nada til que hacer. Ser una funcin importante
25
del sistema operativo explotar esta concurrencia entre la E/S y el procesador, haciendo que este ltimo realice
trabajo til el mayor tiempo posible.
1.7.
PROTECCIN
Como veremos ms adelante, una de las funciones del sistema operativo es la proteccin de unos usuarios
contra otros: ni por malicia ni por descuido un usuario deber acceder a la informacin de otro, a menos que
el propietario de la misma lo permita. Para ello es necesario imponer ciertas restricciones a los programas en
ejecucin y es necesario comprobar que se cumplen. Dado que, mientras se est ejecutando un programa de
usuario, no se est ejecutando el sistema operativo, la vigilancia de los programas se ha de basar en meca
nismos hardware (aclaracin 1.4). En esta seccin se analizarn estos mecanismos, para estudiar en captulos
posteriores cmo resuelve el sistema operativo los conflictos detectados. Se analizar en primer lugar el me
canismo de proteccin que ofrece el procesador, para pasar seguidamente a los mecanismos de proteccin de
memoria y a la proteccin de E/S.
Tamao
(64 MB)
(64 MB)
(64 MB)
(64 MB)
(64 MB)
(64 MB)
(64 MB)
(256 MB)
(256 MB)
(384 MB)
Uso inicial
SDRAM banco 3
SDRAM banco 2
SDRAM banco 1
SDRAM banco 0
Registros del controlador SDRAM
Registros del controlador LCD
Registros de los controladores de ios perifricos internos
PCMCIA/CF - bus 1
PCMCIA/CF - bus 0
Perifricos extemos del 0 al 5, dedicando 64 MB a cada uno
'
34
El trmino de mquina desnuda se aplica a un computador carente de sistema operativo. El trmino es intere
sante porque resalta el hecho de que un computador en s mismo no hace nada. Como se vio en el captulo
anterior, un computador solamente es capaz de repetir a alta velocidad la secuencia de: lectura de instruccin
mquina, incremento del contador de programa o PC y ejecucin de la instruccin leda. Para que realice una
funcin determinada ha de tener en memoria principal un programa mquina especfico para realizar dicha
funcin y ha de conseguirse que el registro PC contenga la direccin de comienzo del programa.
La misin del sistema operativo, como se ver en la siguiente seccin, es completar ('vestir') la mquina
mediante una serie de programas que permitan su cmodo manejo y utilizacin]
Programa ejecutable
Un programa ejecutable, tambin llamado simplemente ejecutable, es un programa en lenguaje mquina que
puede ser cargado en memoria para su ejecucin. Cada ejecutable est normalmente almacenado en un fiche
ro que contiene la informacin necesaria para ponerlo en ejecucin. La estructura tnica de un ejecutable es la
siguiente:
"
---------- Cabecera que contiene, entre otras informaciones, las siguientes:
35
Los primeros pasos se refieren a la fase de programacin de la aplicacin, que desembocan en un objeto
ejecutable que queda almacenado en un fichero ejecutable. En muchos casos este objeto ejecutable no es el
programa mquina completo, puesto que no incluye las bibliotecas dinmicas, que estn almacenadas en sus
propios ficheros. Esta solucin tiene la ventaja de no repetir en cada fichero ejecutable estas bibliotecas, con
el consiguiente ahorro de espacio de disco.
Usuario
En primera instancia podemos decir que un usuario es una persona autorizada a utilizar un sistema inform
tico.
Usuarios
Procesos de usuario
| Shell
Sistema
operativo
Servicios
Ncleo
Hardware
36
37
Ejecucin de programas
E f sistema operativo incluye servicios para lanzar la ejecucin de un programa, creando un proceso, as como
para parar o abortar la ejecucin de un proceso. Tambin existen servicios para conocer y modificar las con
diciones de ejecucin de los procesos y para comunicar y sincronizar unos procesos con otros.
Bajo la peticin de un usuario, el sistema operativo leer un ejecutable, para lo cual deber conocer su
estructura, lo cargar en memoria y lo pondr en ejecucin. Observe que varios procesos pueden estar ejecu
tando el mismo programa, por ejemplo, varios usuarios pueden haber pedido al sistema operativo la ejecu
cin del mismo programa editor.
rdenes de E/S
Los servicios de E/S ofrecen una gran comodidad y proteccin al proveer a los programas de operaciones de
lectura, escritura y modificacin del estado de los perifricos, puesto que la programacin de las operaciones
de E/S es muy compleja y dependiente del hardware especfico de cada perifrico. Los servicios del sistema
operativo ofrecen un alto nivel de abstraccin, de forma que el programador de aplicaciones no tenga que
preocuparse de esos detalles.
Operaciones sobre ficheros
LosTcEr ofrecen un nivel de abstraccin mayor que el de las rdenes de E/S, permitiendo operaciones
tales como creacin, borrado, renombrado, apertura, escritura y lectura de ficheros. Observe que muchos de
los servicios son parecidos a las operaciones de E/S y terminan concretndose en este tipo de operacin.
Deteccin y tratamiento de errores
Xdems de analizar detalladamente todas las rdenes que recibe, para comprobar que se pueden realizar, el
sistema operativo se encarga de tratar todas las condiciones de error que detecte el hardware. Como ms re
levantes, destacaremos las siguientes: errores en las operaciones de E/S, errores de paridad en los accesos a
memoria o en los buses y errores de ejecucin en los programas, tales como los desbordamientos, las viola
ciones de memoria, los cdigos de instruccin prohibidos, etc.
El sistema operativo como interfaz de usuario
ETniduio del sistema operativo que permite que los usuarios dialoguen de forma interactiva con l es el
intrprete de mandatos o shell. El shell se comporta como un bucle infinito que est repitiendo constantemen
te la siguiente secuencia:
Espera una orden del usuario. En el caso de interfaz textual, el shell est pendiente de lo que escribe
el usuario en la lnea de mandatos. En las interfaces grficas est pendiente de los eventos del apun
tador (ratn) que manipula el usuario, adems, de los del teclado.
Analiza la orden y, en caso de ser correcta, la ejecuta, para lo cual emplea los servicios del sistema
operativo.
Concluida la orden muestra un aviso o prom pt y vuelve a la espera.
El dilogo mediante interfaz textual exige que el usuario memorice la sintaxis de los mandatos, con el
agravante de que son distintos para cada sistema operativo (p. ej.: para mostrar el contenido de un fichero en
Windows se emplea el mandato t y p e , pero en UD se usa el mandato c a t ) . Por esta razn, cada vez son
ms populares los intrpretes de mandatos con interfaz grfica, como el que se encuentra en las distintas ver
siones de Windows o el KDE o Gnome de Linux/
Sin embargo, la interfaz textual es ms potente que la grfica y permite automatizar operaciones (vase
ficheros de mandatos a continuacin), lo cual es muy interesante para administrar los sistemas.
Ficheros de mandatos
Casi todos los intrpretes de mandatos pueden ejecutar ficheros de mandatos, llamados shell scripts. Estos
ficheros incluyen varios mandatos totalmente equivalentes a los mandatos que se introducen en el terminal.
38
Adems, para realizar funciones complejas, pueden incluir mandatos especiales de control del flujo de ejecu
cin como pueden ser los bucles, las secuencias condicionales o las llamadas a funcin, as como etiquetas
para identificar lneas de mandatos.
Para ejecutar un fichero de mandatos basta con invocarlo de igual forma que un mandato estndar del
intrprete de mandatos.
41
42
P roceso A = = |
Sistem a |
El SO realiza la fu n d n pedida
ope rativo ======
Planificador del SO
. Activador del SO
Proceso B
....
2 .4 .
45
Existe una gran diversidad de sistemas operativos diseados para cubrir las necesidades de los distintos dis
positivos y de los distintos usos. Dependiendo de sus caractersticas, un sistema operativo puede ser:
Segn el nmero de procesos simultneos que permita ejecutar: monotarea o monoproceso y multitarea o multiproceso.
Segn la forma de interaccin con el usuario: interactivo o por lotes.
Segn el nmero de usuarios simultneos: monousuario o personal y multiusuario o de tiempo com
partido.
Segn el nmero de procesadores que pueda atender: monoprocesador y multiprocesador.
Segn el nmero de threads que soporte por proceso: monothread y multithread, (vase seccin 3.9
Threads)
Segn el uso: cliente, servidor, empotrado, de comunicaciones o de tiempo real.
Segn la movilidad: fijos y mviles.
Estas clasificaciones no son excluyentes, as un sistema operativo servidor ser generalmente tambin
multiprocesador, multithread y multiusuario.
Un sistema operativo monotarea, tambin llamado monoproceso, solamente permite que exista un pro
ceso en cada instante. Si se quieren ejecutar varias procesos, o tareas, hay que lanzar la ejecucin de la prime
ra y esperar a que termine antes de poder lanzar la siguiente. El ejemplo tpico de sistema operativo
monoproceso es el MS-DOS, utilizado en los primeros computadores PC. La ventaja de estos sistemas opera
tivos es que son muy sencillos.
Por el contrario, un sistema operativo multitarea, o multiproceso (recordatorio 2.1), permite que co
existan varios procesos activos a la vez. El sistema operativo se encarga de ir repartiendo el tiempo del pro
cesador entre estos procesos, para que todos ellos vayan avanzando en su ejecucin.
Recordatorio 2.1. No confundir el trmino multiproceso con multiprocesador. El trmino multiproceso se
refiere a los sistemas que permiten que existan varios procesos activos al mismo tiempo, mientras que el
trmino multiprocesador se refiere a un computador con varios procesadores. El multiprocesador exige un
sistema operativo capaz de gestionar simultneamente todos sus procesadores, cada uno de los cuales estar
ejecutando su propio proceso.
. ,
^
1
. . Y .Y ; y . :
Un sistema interactivo permite que el usuario dialogue con los procesos a travs, por ejemplo, de un
terminal. Por el contrario, en un sistema por lotes o batch se parte de una cola de trabajos que el sistema va
ejecutando cuando tiene tiempo y sin ningn dilogo con el usuario.
Un sistema monousuario, o personal, est previsto para soportar a un solo usuario interactivo. Estos
sistemas pueden ser monoproceso o multiproceso. En este ltimo caso el usuario puede solicitar varias tareas
al mismo tiempo, por ejemplo, puede estar editando un fichero y, simultneamente, puede estar accediendo a
una pgina Web.
El sistema operativo multiusuario es un sistema interactivo que da soporte a varios usuarios, que traba
jan simultneamente desde varios terminales locales o remotos. A su vez, cada usuario puede tener activos
ms de un proceso, por lo que el sistema, obligatoriamente, ha de ser multitarea. Los sistemas multiusuario
reciben tambin el nombre de tiempo compartido, puesto que el sistema operativo ha de repartir el tiempo
del procesador entre los usuarios, para que las tareas de todos ellos avancen de forma razonable.
La figura 2.9 recoge estas alternativas.
Un sistema operativo servidor est optimizado para que sus usuarios sean sistemas remotos. Por el con
trario, un sistema operativo cliente es un sistema operativo personal diseado para poder conectarse a servi
dores. Los sistemas operativos personales interactivos incluyen soporte grfico, para construir interfaces
grficas (GUI Graphical User Interface), con el objetivo de facilitar la interaccin con el usuario, as como
herramientas que permitan gestionar con facilidad el sistema. Existen versiones de Windows y de Linux con
perfil servidor y con perfil personal.
46
N usuarios )
simultneos 'S
/ ms de 1
Monoproceso
Monousuario
Multiproceso
Monousuario
--------
Multiproceso
Multiusuario
Figura 2.9 Tipos de sistemas operativos en funcin del nmero de procesos y usuarios.
Los sistemas operativos empotrados interaccionan con un sistema fsico y no con un usuario. Suelen
ejecutar en plataformas con poca memoria, poca potencia de proceso y sin disco duro, por lo que suelen ser
sencillos, limitndose a las fimciones imprescindibles para la aplicacin. Se almacenan en memoria ROM y
en muchos casos no cuentan con servidor de ficheros ni interfaz de usuario.
Los sistemas operativos de tiempo real permiten garantizar que los procesos ejecuten en un tiempo
predeterminado, para reaccionar adecuadamente a las necesidades del sistema, como puede ser el guiado de
un misil o el control de una central elctrica. Con gran frecuencia entran tambin en la categora de sistemas
operativos empotrados. Como ejemplos se puede citar el VxWorks de Wind River o el RTEMS de OAR.
Para atender las peculiaridades de los dispositivos mviles (PDA, telfono inteligente, pocket PC, etc.)
existen una serie de sistemas operativos mviles. Tienen un corte parecido a los destinados a los computado
res personales, pero simplificados, para adecuarse a estos entornos. Adems, estn previstos para que el dis
positivo se encienda y apague con frecuenta y para reducir al mximo el consumo de las bateras. Ejemplos
son las familias PALM OS, Windows CE, Windows Mobile y Symbian OS, este ltimo muy utilizado en los
telfonos mviles.
Para las tarjetas inteligentes se construyen sistemas operativos empotrados muy simples pero con fun
cionalidades criptogrficas. Ejemplos son MULTOS, SOLO (de Schlumberger) y Sun's JavaCard.
2.5.
El sistema operativo est formado por una serie de componentes especializados en determinadas funciones.
Cada sistema operativo estructura estos componentes de forma distinta. En una visin muy general, como se
muestra en la figura 2 . 10 , se suele considerar que un sistema operativo est formado por tres capas: el ncleo,
los servicios y el intrprete de mandatos o shell.
Elncleo es la parte del sistema operativo que interacciona directamente con el hardware de la mqui
na. Las funciones del ncleo se centran en la gestin de recursos, como es el procesador, tratamiento de inte
rrupciones y las funciones bsicas de manipulacin de memoria.
Los servicios se suelen agrupar segn su funcionalidad en varios componentes, como los siguientes:
Gestor de procegos. Encargado de la creacin, planificacin y destruccin de procesos.
Gestor de memoria. Componente encargado de saber qu partes de la memoria estn libres y cules
Usuarios
Shell 1
Programas de usuario
Windows
Shell 2
UNIX
47
J t c w * 1 *t J
fdatosv
Mapa
de
E/S
BC Pr : '" M
Registros generales
PC
SP
Estado
48
esta informacin est en el bloque de control del proceso (BCP), que se estudiar con detalle en la seccin
3.3.3 Informacin del bloque de control de proceso (BCP). El sistema operativo debe encargarse tambin
de ofrecer una serie de servicios para la gestin de procesos y para su planificacin, as como para gestionar
los posibles interbloqueos que surgen cuando los procesos acceden a los mismos recursos.
Una buena parte de la informacin del proceso se obtiene del ejecutable, pero otra la produce el sistema
operativo. A diferencia del ejecutable, que es permanente, la informacin del proceso es temporal y desapa
rece con el mismo. Decimos que el proceso es voltil mientras que el ejecutable perdura hasta que se borre el
fichero.
En el captulo 3 Procesosse estudiarn en detalle los procesos, en el captulo 4 Planificacin de pro
cesos se tratarn las tcnicas de planificacin de procesos y en el captulo 6 Comunicacin y sincronizacin
de procesos se estudiarn los interbloqueos y los mecanismos para manejarlos.
Servicios de procesos
El sistema operativo ofrece una serie de servicios que permiten definir la vida de un proceso, vida que consta
de las siguientes fases: creacin, ejecucin y muerte del proceso, que se analizan seguidamente:
O p a r nn proceso El proceso es creado por el sistema operativo cuando as lo solicita otro proceso,
que se convierte en el padre del nuevo. Existen dos modalidades bsicas para crear un proceso en los
sistemas operativos:
Creacin a partir de la imagen del proceso padre. En este caso, el proceso hijo es una copia
exacta o clon del proceso padre. Esta variante es la que utiliza el servicio f o rk de UNIX.
Creacin a partir de un fichero ejecutable. Esta modalidad es la que se utiliza en el servicio
C r e a teProcess de Windows.
E jecutar un proceso. Los procesos se pueden ejecutar de tres formas: batch, interactivaj/ segundo
plano.
Un proceso que ejecuta en modo de lotes o batch, no est asociado a ningn terminal. Deber
tomar sus datos de entrada de ficheros y deber depositar sus resultados en ficheros. Un ejem
plo tpico de un proceso batch es un proceso de nminas, que parte del fichero de empleados y
del fichero de los partes de trabajo para generar un fichero de rdenes bancadas de pago de
nminas.
Por el contrario, un proceso que ejecuta en modo interactivo est asociado a un terminal, por
el que recibe la informacin del usuario y por el que contesta con los resultados. Un ejemplo
tpico de un proceso interactivo es un proceso de edicin.
Los sistemas interactivos permiten lanzar procesos en segundo plano o background. Se trata
de procesos similares a los de lotes, que no estn asociado a ningn terminal.
Terminar la ejecucin de unjumceso. Un proceso puede finalizar su ejecucin por varias causas,
entre las que se encuentranTssiguientes:
Cambiar eLojecutahle de un procego. Algunos sistemas operativos incluyen un servicio que cam
bia, por otro, el ejecutable que est ejecutando un proceso. Observe que esta operacin no consiste
en crear un nuevo proceso que ejecuta ese nuevo ejecutable, se trata de sustituir el ejecutable que
est ejecutando el proceso por un nuevo ejecutable que se trae del disco, manteniendo el mismo pro
ceso. El servicio e x e c de UNIX realiza esta funcin.
49
7<}h u ( / c,
Adems de las funciones vistas anteriormente, el gestor de memoria ofrece los siguientes servicios:
Solicitar memoria. Este servicio aumenta el espacio de la imagen de memoria del proceso. El sis
tema operativo satisfar la peticin siempre y cuando cuente con los recursos necesarios para ello y
no se exceda la cuota en caso de estar establecida. En general, el sistema operativo devuelve un
apuntador con la direccin de la nueva memoria. El programa utilizar este nuevo espacio a travs
del mencionado apuntador, mediante direccionamientos relativos al mismo.
Liberar memoria. Este servicio sirve para devolver trozos de la memoria del proceso. El sistema
operativo recupera el recurso liberado y lo aade a sus listas de recursos libres, para su posterior re
utilizacin. Este servicio y el de solicitar memoria son necesarios para los programas que requieren
asignacin dinmica de memoria, puesto que su imagen de memoria ha de crecer o decrecer de
acuerdo a las necesidades de ejecucin.
Compartir memoria. Son los servicios de crear y liberar regiones de memoria compartidas, lo que
permite que los procesos puedan comunicarse escribiendo y leyendo en ellas.
El gestor de memoria establece la imagen de memoria de los procesos. La figura 2.12 muestra algunas
soluciones para sistemas reales y virtuales.
En el captulo 5 Gestin de memoria se estudiarn los conceptos relativos a la gestin de memoria,
los servicios ofrecidos por el gestor de memoria y las tcnicas de gestin de memoria.
Memoria
principal
Programa A
Programa A
Programa B
Memoria
virtual
Regin 0 '
Regin 1
^Programa A
Programa C
Regin 2
Sistema
operativo
Sistema
operativo
Sistema
operativo
Sistema virtual
varas regiones de memoria
50
Un computador
Dos computadores
El proceso A espera al B
51
El proceso B espera al A
52
a
Visin
lgica
S-------~i
(___J
m
(
Visin
fsica
=1
[.......... . 'i
&
53
posicin, para perifricos tales como terminales, controladores de red, impresoras, etc. Se emplea el trmino
de fichero especial, para diferenciarlos de los ficheros almacenados en disco o cinta magntica.
Servicios de ficheros
Un fichero es una entidad viva, que va evolucionando de acuerdo a los servicios que se solicitan sobre el
mismo. Las fases de esta vida son las siguientes:
Se crea el fichero.
Se cierra el fichero.
Se borra el fichero.
Los servicios que ofrece el servidor de ficheros son los siguientes:
Abrir un fichero. Un fichero debe ser abierto antes de ser utilizado. Este servicio comprueba que el
fichero existe, que el usuario tiene derechos de acceso y trae a memoria informacin del mismo para
optimizar su acceso, creando en memoria el puntero de posicin. Adems, devuelve al usuario un
identificador, descriptor o manejador de fichero de carcter temporal para su manipulacin. Nor
malmente, todos los sistemas operativos tienen un lmite mximo para el nmero de ficheros que
puede tener abierto un usuario. Ejemplos: o p e n y c r e a t en UNIX y C r e a t e F i l e en Windows.
Leer. La operacin de lectura permite traer datos del fichero a memoria. Para ello, se especifica el
descriptor de fichero obtenido en la apertura, la posicin de memoria para los datos y la cantidad de
informacin a leer. Normalmente, se lee a partir de la posicin que indica el puntero de posicin del
fichero. Ejemplos: read en UNIX y ReadFile en Windows.
Escribir. Las operaciones de escritura permiten llevar datos situados en memoria al fichero. Para
ello, y al igual que en las operaciones de lectura, se debe especificar el descriptor obtenido en la
creacin o apertura, la posicin en memoria de los datos y la cantidad de informacin a escribir.
Normalmente se escribe a partir de la posicin que indica el puntero de posicin del fichero. Si apun
ta dentro del fichero, se sobrescribirn los datos, no se aadirn. Si apunta al final del fichero se aa
den los datos aumentando el tamao del fichero. En este caso, el sistema operativo se encarga de
hacer crecer el espacio fsico del fichero aadiendo agrupaciones libres (si es que las hay). Ejemplos:
write en UNIX y WriteFile en Windows.
Posicionar el puntero. Sirve para especificar la posicin del fichero en la que se realizar la siguien
te lectura o escritura. Ejemplos: l s e e k en UNIX y S e t F i l e P o i n t e r en Windows.
Cerrar un fichero. Terminada la utilizacin del fichero se debe cerrar, con lo que se elimina el des
criptor temporal obtenido en la apertura o. creacin y se liberan los recursos de memoria que ocupa el
fichero. Ejemplos: c i s e en UNIX y C lo s e H a n d le en Windows.
Crear un fichero. Este servicio crea un fichero vaco. La creacin de un fichero exige una interpre
tacin del nombre, puesto que el servidor de ficheros ha de comprobar que el nombre es correcto y
que el usuario tiene permisos para hacer la operacin solicitada. La creacin de un fichero lo deja
abierto para escritura, devolviendo al usuario un identificador, descriptor o manejador de fichero de
carcter temporal para su manipulacin. Ejemplos: c r e a t en UNIX y C r e a t e F i l e en Windows.
Borrar un fichero. El fichero se puede borrar, lo que supone que se borra su nombre del correspon
diente directorio y que el sistema de ficheros ha de recuperar los bloques de datos y el espacio de
descripcin fsica que tena asignado. Ejemplos: u n l i n k en UNIX y D e l e t e F i l e en Windows.
Se puede observar que el nombre del fichero se utiliza en los servicios de creacin y de apertura. Am
bos servicios dejan el fichero abierto y devuelven un descriptor de fichero. Los servicios para leer, escribir,
posicionar el puntero y cerrar el fichero se basan en este descriptor y no en el nombre. Este descriptor es sim
plemente una referencia interna que mantiene el sistema operativo para trabajar eficientemente con el fichero
abierto. Dado que un proceso puede abrir varios ficheros, el sistema operativo mantiene una tabla de des-
54
criptores de fichero abiertos por cada proceso. Adems, todo proceso dispone, al menos, de tres elementos
en dicha tabla, que reciben el nombre de estndar, y ms concretamente de entrada estndar, salida estn
dar y error estndar. En un proceso interactivo la salida y error estndar estn asignadas a la pantalla del
terminal, mientras que la entrada estndar lo est al teclado. El proceso, por tanto, se comunica con el usuario
a travs de las entradas y salidas estndar. Por el contrario, un proceso que ejecuta en lotes tendr los descrip
tores estndar asignados a ficheros.
Se denomina redireccin a la accin de cambiar la asignacin de un descriptor estndar.
Varios procesos pueden tener abierto y, por tanto, pueden utilizar simultneamente el mismo fichero,
por ejemplo, varios usuarios pueden estar leyendo la misma pgina de ayuda. Esto plantea un problema de
coutilizacin del fichero, que se tratar en detalle en el captulo 9 Gestin de ficheros y directorios.
Servicios de directorios
Un directorio es un objeto que relaciona de forma unvoca un nombre con un fichero. El servicio de directo
rios sirve para identificar a los ficheros (objetos), por lo tanto, ha de garantizar que la relacin [nombre >
fichero] sea unvoca. Es decir, un mismo nombre no puede identificar a dos ficheros. Por el contrario, que un
fichero tenga varios nombres no presenta ningn problema, son simples sinnimos.
El servicio de directorios tambin presenta una visin lgica y una visin fsica. La visin lgica con
siste, habitualmente, en el bien conocido esquema jerrquico de nombres mostrado en la figura 2.17.
Se denomina directorio raz al primer directorio de la jerarqua, recibiendo los dems el nombre de
subdirectorios o directorios. El directorio raz se representa por el carcter / o \, dependiendo del sistema
operativo. En la figura 2.17, el directorio raz incluye los siguientes nombres de subdirectorios: T e x t o s ,
D i v l l y D iv 2 .
Se diferencia el nombre local, que es el nombre asignando al fichero dentro del subdirectorio en el que
est el fichero, del nombre o camino absoluto, que incluye todos los nombres de todos los subdirectorios
que hay que recorrer desde el directorio raz hasta el objeto considerado, concatenados por el smbolo / o
\. Un ejemplo de nombre relativo es Arll, mientras que su nombre absoluto es
/Textos/Tiro/Secl/Arll.
El sistema operativo mantiene un directorio de trabajo para cada proceso y un directorio home para ca
da usuario. El directorio de trabajo especifica un punto en el rbol que puede utilizar el proceso para definir
ficheros sin ms que especificar el nombre local desde ese punto. Por ejemplo, si el directorio de trabajo es
/Textos/Tiro/, para nombrar el fichero A rll basta con poner Secl/Arll. El sistema operativo
incluye servicios para cambiar el directorio de trabajo. El directorio home es el directorio asignado a un
usuario para su uso. Es donde ir creando sus subdirectorios y ficheros.
La ventaja del esquema jerrquico es que permite una gestin distribuida de los nombres, al garantizar
de forma sencilla que no existan nombres repetidos. En efecto, basta con que los nombres locales de cada
subdirectorio sean distintos entre s. Aunque los nombres locales de dos subdirectorios distintos coincidan, su
nombre absoluto ser distinto (p. ej.: / T e x t o s / T i r o / S e c l y / D i v 2 / P r o d u c / S e c l )
La visin fsica del sistema de directorios se basa en unas estructuras de informacin que permiten re
lacionar cada nombre lgico con la descripcin fsica del correspondiente fichero. En esencia, se trata de una
tabla NOMBRE-IDENTIFICADOR por cada subdirectorio, tabla que se almacena, a su vez, como un ficheDirectorio raz
[textos | Div11 | Div2
Edit | Tiro I Distrib I |Person| C lient I
7)
V 7)
>
...
Activ | Paslv I
i Identificador
I de directorio
|---------- Identificador
'---------- ' de fichero
55
ro. El NOMBRE no es ms que el nombre local del fichero, mientras que el IDENTIFICADOR es una in
fo r m a c i n que permite localizar la descripcin fsica del fichero.
Servicios de directorios
Un objeto directorio es bsicamente una tabla que relaciona nombres con ficheros. El servidor de ficheros
incluye una serie de servicios que permiten manipular directorios. Estos son:
Crear un directorio. Crea un objeto directorio y lo sita en el rbol de directorios. Ejemplos:
mkdir en UNIX y CreateDirectory en Windows.
Borrar un directorio. Elimina un objeto directorio, de forma que nunca ms pueda ser accesible, y
borra su entrada del rbol de directorios. Normalmente, slo se puede borrar un directorio vaco, es
decir, un directorio sin entradas. Ejemplos: rmdir en UNIX y RemoveDirectory en Windows.
Abrir un directorio. Abre un directorio para leer los datos del mismo. Al igual que un fichero, un
directorio debe ser abierto para poder acceder a su contenido. Esta operacin devuelve al usuario un
identificador, descriptor o manejador de directorio de carcter temporal que permite su manipula
cin. Ejemplos: opendir en UNIX y FindFirstFile en Windows.
Leer un directorio. Extrae la siguiente entrada de un directorio abierto previamente. Devuelve una
estructura de datos como la que define la entrada de directorios. Ejemplos: r e a d d i r en UNIX y
F in d N e x t F il e en Windows.
Cambiar el directorio de trabajo. Cambia el directorio de trabajo del proceso. Ejemplos chdir en
UNIX y SetCurrentDirectory en Windows.
Cerrar un directorio. Cierra un directorio, liberando el identificador devuelto en la operacin de
apertura, as como los recursos de memoria y del sistema operativo relativos al mismo. Ejemplos:
c l o s e d i r en UNIX y F in d C lo s e en Windows.
En el captulo 9 Gestin de ficheros y directorios se estudiar en detalle la gestin de ficheros y direc
torios, presentando los conceptos, los servicios y los principales aspectos de implementacin.
2.6.
SEGURIDAD Y PROTECCIN
La seguridad es uno de los elementos fundamentales en el diseo de los sistemas operativos de propsito
general. La seguridad tiene por objetivo evitar la prdida de bienes (datos o equipamiento) y controlar el uso
de los mismos (privacidad de los datos y utilizacin de equipamiento). El captulo 11 Seguridad y protec
cin desarrolla con detalle la seguridad y proteccin del sistema informtico.
El sistema operativo est dotado de unos mecanismos y polticas de proteccin con los que se trata de
evitar que se haga un uso indebido de los recursos del computador. La proteccin reviste dos aspectos: garan
tizar la identidad de los usuarios y definir lo que puede hacer cada uno de ellos. El primer aspecto se trata
bajo el trmino de autenticacin, mientras que el segundo se hace mediante los privilegios.
Autenticacin
El objetivo de la autenticacin es determinar que un usuario (persona, servicio o proceso) es quien dice ser.
El sistema operativo dispone de un mdulo de autenticacin que se encarga de validar la identidad de los
usuarios. La contrasea (password) es, actualmente, el mtodo de autenticacin ms utilizado.
Privilegios
Los privilegios especifican las operaciones que puede hacer un usuario sobre cada recurso. Para simplificar la
informacin de privilegios es corriente organizar los usuarios en grupos y asignar los mismos privilegios a
los componentes de cada grupo. La informacin de los privilegios se puede asociar a los recursos o a los
usuarios.
56
Informacin por recurso. En este caso se asocia una lista, denominada lista de control de acceso o
ACL (Access Control List), a cada recurso. Esta lista especifica los grupos y usuarios que pueden ac
ceder al recurso.
Informacin por usuario. Se asocia a cada usuario, o grupo de usuarios, la lista de recursos que
puede acceder, lista que se llama de capacidades (capabilities).
Dado que hay muchas formas de utilizar un recurso, la lista de control de acceso, o la de capacidades,
ha de incluir el modo en que se puede utilizar el recurso. Ejemplos de modos de utilizacin son: leer, escribir,
ejecutar, eliminar, test, control y administrar.
En su faceta de mquina extendida, el sistema operativo siempre comprueba, antes de realizar un servi
cio, que el proceso que lo solicita tiene los permisos adecuados para realizar la operacin solicitada sobre el
recurso solicitado.
Para llevar a cabo su funcin de proteccin, el sistema operativo ha de apoyarse en mecanismos hard
ware que supervisen la ejecucin de los programas, entendiendo como tal a la funcin de vigilancia que hay
que realizar sobre cada instruccin mquina que ejecuta el proceso de usuario. Esta vigilancia solamente la
puede hacer el hardware, dado que mientras ejecuta el proceso de usuario el sistema operativo no est ejecu
tando, est dormido, y consiste en comprobar que cada cdigo de operacin es permitido y que cada direc
cin de memoria y el tipo de acceso estn tambin permitidos.
2.7.
INTERFAZ DE PROGRAMACIN
La interfaz de programacin o API que ofrece un sistema operativo es una de sus caractersticas ms impor
tantes, ya que define la visin de mquina extendida que tiene el programador del mismo. En este libro se
presentan dos de las interfaces ms utilizadas en la actualidad: UNIX y Windows.
Actualmente, una gran cantidad de aplicaciones utilizan la codificacin Unicode, por lo que los siste
mas operativos tambin soportan este tipo de codificacin. Sin embargo, esta codificacin no aporta ningn
concepto adicional desde el punto de vista de los sistemas operativos, por lo que, para simplificar, los ejem
plos presentados en el presente libro no soportan Unicode.
59
Comunicacin con otros sistemas. Existirn herramientas para acceder a recursos localizados en
otros sistemas accesibles a travs de una red de conexin. En esta categora se consideran herramien
tas bsicas, tales como f t p y t e l n e t (aclaracin 2.3), dejando fuera aplicaciones de ms alto nivel
como un navegador web.
Informacin de estado del sistema. El usuario dispondr de utilidades para obtener informaciones ta
les como la fecha, la hora, el nmero de usuarios que estn trabajando en el sistema o la cantidad de
memoria disponible.
Configuracin de la propia interfaz y del entorno. Cada usuario tiene que poder configurar el modo
de operacin de la interfaz de acuerdo a sus preferencias. Un ejemplo sera la configuracin de los
aspectos relacionados con las caractersticas especficas del entorno geogrfico del usuario (el idio
ma, el formato de fechas, de nmeros y de dinero, etc.). La flexibilidad de configuracin de la inter
faz ser una de las medidas que exprese su calidad.
Intercambio de datos entre aplicaciones. El usuario va a disponer de mecanismos que le permitan es
pecificar que, por ejemplo, una aplicacin utilice los datos que genera otra.
Control de acceso. En sistemas multiusuario, la interfaz debe encargarse de controlar el acceso de los
usuarios al sistema para mantener la seguridad del mismo. Normalmente, el mecanismo de control
estar basado en que cada usuario autorizado tenga una contrasea que deba introducir para acceder
al sistema.
Sistema de ayuda interactivo. La interfaz debe incluir un completo entorno de ayuda que ponga a
disposicin del usuario toda la documentacin del sistema.
Copia de datos entre aplicaciones. Al usuario se le proporciona un mecanismo del tipo copiar y pegar
(copy-and-paste) para poder pasar informacin de una aplicacin a otra.
Aclaracin 2.3. La aplicacin f t p (file transfer proiocol) permite transferir ficheros entre computadores
conectadas por una red de conexin. La aplicacin t e l n e t permite a los usuarios acceder a computadores
remotas, de tal manera que el computador en la que se ejecuta la aplicacin t e l n e t se convierte en un trminal del computador remoto.
' : :
;
v
, . :
Para concluir esta seccin, es importante resaltar que en un sistema, adems de las interfaces disponi
bles para los usuarios normales, pueden existir otras especficas destinadas a los administradores del sistema.
Ms an, el propio programa (residente normalmente en ROM) que se ocupa de la carga del sistema operati
vo proporciona generalmente una interfaz de usuario muy simplificada y rgida que permite al administrador
realizar operaciones tales como pruebas y diagnsticos del hardware o la modificacin de los parmetros
almacenados en la memoria no voltil de la mquina que controlan caractersticas de bajo nivel del sistema.
66
2.9.
67
Modelo cliente-servidor
En este tipo de modelo, el enfoque consiste en implementar la mayor parte de los servicios y funciones del
sistema operativo para que ejecute como procesos en modo usuario, dejando slo una pequea parte del sis
tema operativo ejecutando en modo privilegiado. Esta parte se denomina microncleo y los procesos que
ejecutan el resto de funciones se denominan seryidores. Cuando se lleva al extremo esta idea se habla de nanoncleo. La figura 2.19 presenta la estructura de un sistema operativo con estructura cliente-servidor. Como
puede apreciarse en la figura, el sistema operativo est formado por diversos mdulos, cada uno de los cuales
puede desarrollarse por separado.
No hay una definicin clara de las funciones que debe llevar a cabo un microncleo. La mayora inclu
yen la gestin de interrupciones, gestin bsica de procesos y de memoria, y servicios bsicos de comunica
cin entre procesos. Para solicitar un servicio en este tipo de sistema, como por ejemplo crear un proceso, el
proceso de usuario (proceso denominado cliente) solicita el servicio al servidor del sistema operativo corres
pondiente, en este caso al servidor de procesos. A su vez, el proceso servidor puede requerir los servicios de
otros servidores, como es el caso del servidor de memoria. En este caso, el servidor de procesos se convierte
en cliente del servidor de memoria.
Una ventaja de este modelo es la gran flexibilidad que presenta. Cada proceso servidor slo se ocupa de
una funcionalidad concreta, lo que hace que cada parte pueda ser pequea y manejable. Esto a su vez facilita
el desarrollo y depuracin de cada uno de los procesos servidores. Por otro lado, al ejecutar los servicios en
espacios separados aumenta la fiabilidad del conjunto, puesto que un fallo solamente afecta a un mdulo.
En cuanto a las desventajas, citar que estos sistemas presentan una mayor sobrecarga en el tratamiento
de los servicios que los sistemas monolticos. Esto se debe a que los distintos componentes de un sistema
operativo de este tipo ejecutan en espacios de direcciones distintos, lo que hace que su activacin requiera
mayor tiempo.
Minix, Mach, Amoeba y Mac OS X, son ejemplos de sistemas operativos que siguen este modelo.
Windows NT tambin sigue esta filosofa de diseo, aunque muchos de los servidores (el gestor de procesos,
gestor de E/S, gestor de memoria, etc.) se ejecutan en modo privilegiado por razones de eficiencia (vase la
figura 2 .20 ).
Mquina virtual
E conceptcT de mquina virtual se basa en un monitor capaz de suministrar m versiones del hardware, es
decir m mquinas virtuales. Cada copia es una rplica exacta del hardware, incluso con modo privilegiado y
modo usuario, por lo que sobre cada una de ellas se puede instalar un sistema operativo convencional. Como
muestra la figura 2 .21 , una peticin de servicio es atendida por la copia de sistema operativo sobre la que
ejecuta. Cuando dicho sistema operativo desea acceder al hardware, por ejemplo, para leer de un perifrico,
se comunica con su mquina virtual, como si de una mquina real se tratase. Sin embargo, con quien se est
comunicando es con el monitor de mquina virtual que es el nico que accede a la mquina real.
El ejemplo ms relevantes de mquina virtual es el VM/370, que genera m copias de la arquitectura
EBM370.
Otra forma distinta de construir una mquina virtual es la mostrada en la figura 2.22. En este caso, el
monitor de mquina virtual no ejecuta directamente sobre el hardware, por el contrario, lo hace sobre un sis
tema operativo.
La mquina virtual generada puede ser una copia exacta del hardware real, como es el caso del VMware, que genera una copia virtual de la arquitectura Pentium, o puede ser una mquina distinta como es el caso
de la mquina virtual de Java (JVM Java Virtual Machine) o la CLI (Common Language Injrastructure) inP ro ce s o s clie n te
P r o g ra m a
de u s u a rio
P r o g ra m a
d e u s u a rio
API
API
P ro c e s o s s e rv id o r
Servidor de
procesos
Servidor de
memoria
Servidor de
la E/S
Servidor de
ficharos y
directorios
M ic ro n c le o
H ard w a re
Servidor de
Seguridad
Servidor
de
Com unicac.
Modo
usuario
Modo
privilegiado
68
CM
8
8
CL
c
o
8
L
Llamada al sistema
Salta al SO
SO 2
SO m
Instrucciones de E/S
Salta al monitor de
mquina virtual
Hardware
SO 2
SO 1
Monitor de
mquina virtual
Hardware
69
cucin.
En algunos diseos se incluye una capa, llamada exokernel, que ejecuta en modo privilegiado y que se
encarga de asignar recursos a las mquinas virtuales y de garantizar que ninguna mquina utilice recursos de
otra.
Por otro lado, dada la importancia que est tomando el tema de las mquinas virtuales, algunos fabri
cantes de procesadores estn incluyendo mecanismos hardware, tales como modos especiales de ejecucin,
para facilitar la construccin de las mismas.
Sistema operativo distribuido
tTrssfmi operativo distribuido es un sistema operativo diseado para gestionar un multicomputador, como
muestra la figura 2.23. El usuario percibe un nico sistema operativo centralizado, haciendo, por tanto, ms
fcil el uso de la mquina. Un sistema operativo de este tipo sigue teniendo las mismas caractersticas que un
sistema operativo convencional pero aplicadas a un sistema distribuido. Estos sistemas no han tenido xito
comercial y se han quedado en la fase experimental.
Middleware
Un middleware es una capa de software que se ejecuta sobre un sistema operativo ya existente y que se en
carga de gestionar un sistema distribuido o un multicomputador, como muestra la figura 2.24. En este senti
do, presenta una funcionalidad similar a la de un sistema operativo distribuido. La diferencia es que ejecuta
sobre sistemas operativos ya existentes que pueden ser, adems, distintos, lo que hace ms atractiva su utili
zacin. Como ejemplos de middleware se puede citar: DCE, DCOM, COM+ y Java RM3.
Programas
Sistema operativo distribuido
Hardware
~
Hardware
;___ i.............................................. l
Programas
Sistema operativo
Hardware
1
Red de interconexin
72
por ejemplo, existir un gestor de ventanas para mantener el estado de las mismas y permitir su manipula
cin, un administrador de programas que permita al usuario arrancar aplicaciones, un gestor de ficheros
que permita manipular ficheros y directorios, o una herramienta de configuracin de la propia interfaz y
del entorno. Observe la diferencia con las interfaces alfanumricas, en las que exista un programa por cada
mandato.
73
dar el problema de la E/S, facilitando al usuario paquetes de rutinas de E/S, para simplificar la programacin
de estas operaciones, apareciendo as los primeros manejadores de dispositivos. Se introdujo tambin el
concepto de system file ame que empleaba un nombre o nmero simblico para referirse a los perifricos,
haciendo que su manipulacin fiiera mucho ms flexible que mediante las direcciones fsicas.
Para minimizar el tiempo de montaje de los trabajos, estos se agrupaban en lotes (batch) del mismo tipo
(p. ej.: programas Fortran, programas Cobol, etc.), lo que evitaba tener que montar y desmontar las cintas de
los compiladores y montadores, aumentando el rendimiento.
En las grandes instalaciones se utilizaban computadores auxiliares o satlites para realizar las funciones
de montar y retirar los trabajos. As se mejoraba el rendimiento del computador principal, puesto que se le
suministraban los trabajos montados en cinta magntica y sta se limitaba a procesarlos y a grabar los resul
tados tambin en cinta magntica. En este caso se deca que la E/S se haca fuera de lnea (off-line).
Los sistemas operativos de las grandes instalaciones teman las siguientes caractersticas:
Tenan un lenguaje de control de trabajos denominado JCL (Job Conti-ol Language). Las instrucciones
JCL formaban la cabecera del trabajo y especificaban los recursos a utilizar y las operaciones a realizar por
cada trabajo.
Como ejemplos de sistemas operativos de esta poca se pueden citar el FMS (Fortran Monitor System),
el IBYSS y el sistema operativo de la IBM 7094.
Segunda generacin (aos sesenta)
Con la aparicin de la segunda generacin de computadores (principios de los sesenta), se hizo ms necesa
rio, dada la mayor competencia entre los fabricantes, mejorar la explotacin de estas mquinas de altos pre
cios. La multiprogramacin se impuso en sistemas de lotes como una forma de aprovechar el tiempo
empleado en las operaciones de E/S. La base de estos sistemas reside en la gran diferencia que existe, como
se vio en el captulo 1, entre las velocidades de los perifricos y de la UCP, por lo que esta ltima, en las ope
raciones de E/S, se pasa mucho tiempo esperando a los perifricos. Una forma de aprovechar ese tiempo con
siste en mantener varios trabajos simultneamente en memoria principal (tcnica llamada de
multiprogramacin), y en realizar las operaciones de E/S por acceso directo a memoria. Cuando un trabajo
necesita una operacin de E/S la solicita al sistema operativo que se encarga de:
Congelar el trabajo solicitante.
Iniciar la mencionada operacin de E/S por DMA.
Pasar a realizar otro trabajo residente en memoria. Estas operaciones las realiza el sistema operativo
multiprogramado de forma transparente al usuario.
Tambin en esta poca aparecieron otros modos de funcionamiento muy importantes:
Se construyeron los primeros multiprocesadores, en los que varios procesadores formaban una sola
mquina de mayores prestaciones.
Surgi el concepto de servicio del sistema operativo, siendo el sistema operativo Atlas I Supervisor
de la Universidad de Manchester el primero en utilizarlo.
Se introdujo el concepto de independencia de dispositivo. El usuario ya no tena que referirse en
sus programas a una unidad de cinta magntica o a una impresora en concreto. Se limitaba a especi
ficar que quera grabar un fichero determinado o imprimir unos resultados. El sistema operativo se
encargaba de asignarle, de forma dinmica, una unidad disponible, y de indicar al operador del sis
tema la unidad seleccionada, para que ste montara la cinta o el papel correspondiente.
Comenzaron los sistemas de tiempo compartido o timesharing. Estos sistemas, a los que estamos
muy acostumbrados en la actualidad, permiten que varios usuarios trabajen de forma interactiva o
conversacional con el computador desde terminales, que en aquellos das eran teletipos electro
mecnicos. El sistema operativo se encarga de repartir el tiempo de la UCP entre los distintos usua-
74
nos, asignando de forma rotativa pequeos intervalos de tiempo de UCP denominadas rodajas (time
slice). En sistemas bien dimensionados, cada usuario tiene la impresin de que el computador le
atiende exclusivamente a l, respondiendo rpidamente a sus rdenes. Aparecen as los primeros
planificadores. El primer sistema de tiempo compartido fue el CTSS (Compatible Time-Sharing Sys
tem) desarrollado por el MIT en 1961. Este sistema operativo se utiliz en un IBM 7090 y lleg a
manejar hasta 32 usuarios interactivos.
En esta poca aparecieron los primeros sistemas de tiempo real. Se trataba de aplicaciones militares,
en concreto para deteccin de ataques areos. En este caso, el computador est conectado a un siste
ma externo y debe responder velozmente a las necesidades de ese sistema extemo. En este tipo de
sistema las respuestas deben producirse en periodos de tiempo previamente especificados, que en la
mayora de los casos son pequeos. Los primeros sistemas de este tipo se construan en ensamblador
y ejecutaban sobre mquina desnuda, lo que haca de estas aplicaciones sistemas muy complejos.
Finalmente, cabe mencionar que Burroughs introdujo, en 1963, el Master Control Program, que
adems de ser multiprograma y multiprocesador inclua memoria virtual y ayudas para depuracin en lengua
je fuente.
Durante esta poca se desarrollaron, tambin, los siguientes sistemas operativos: El OS/360, sistema
operativo utilizado en las mquinas de la lnea 360 de IBM; y el sistema MULTICS, desarrollado en el MIT
con participacin de los laboratorios Bell. MULTICS fue diseado para dar soporte a cientos de usuarios; sin
embargo, aunque una versin primitiva de este sistema operativo ejecut en 1969 en un computador GE 645,
no proporcion los servicios para los que fue diseado y los laboratorios Bell finalizaron su participacin en
el proyecto.
Tercera generacin (aos setenta)
La tercera generacin es la poca de los sistemas de propsito general y se caracteriza por los sistemas opera
tivos multimodo de operacin, esto es, capaces de operar en lotes, en multiprogramacin, en tiempo real, en
tiempo compartido y en modo multiprocesador. Estos sistemas operativos fueron costossimos de realizar e
interpusieron entre el usuario y el hardware una gruesa capa de software, de forma que ste slo vea esta
capa, sin tenerse que preocupar de los detalles de la circuitera.
Uno de los inconvenientes de estos sistemas operativos era su complejo lenguaje de control, que deban
aprenderse los usuarios para preparar sus trabajos, puesto que era necesario especificar multitud de detalles y
opciones. Otro de los inconvenientes era el gran consumo de recursos que ocasionaban, esto es, los grandes
espacios de memoria principal y secundaria ocupados, as como el tiempo de UCP consumido, que en algu
nos casos superaba el 50% del tiempo total.
Esta dcada fue importante por la aparicin de dos sistemas que tuvieron una gran difusin, UNIX y
MVS de IBM. De especial importancia es UNIX, cuyo desarrollo empieza en 1969 por Ken Thompson, Dennis Ritchie y otros sobre un PDP-7 abandonado en un rincn en los Bell Laboratories. Su objetivo fue disear
un sistema sencillo en reaccin contra la complejidad del MULTICS. Pronto se transport a una PDP-11,
para lo cual se reescribi utilizando el lenguaje de programacin C. Esto fue algo muy importante en la histo
ria de los sistemas operativos, ya que hasta la fecha ninguno se haba escrito utilizando un lenguaje de alto
nivel, recurriendo para ello a los lenguajes ensambladores propios de cada arquitectura. Slo una pequea
parte de UNIX, aquella que acceda de forma directa al hardware, sigui escribindose en ensamblador. La
programacin de un sistema operativo utilizando un lenguaje de alto nivel como es C, hace que un sistema
operativo sea fcilmente transportable a una amplia gama de computadores. En la actualidad, prcticamente
todos los sistemas operativos se escriben en lenguajes de alto nivel, fundamentalmente en C.
La primera versin ampliamente disponible de UNIX fue la versin 6 de los Bell Laboratories, que apa
reci en 1976. A esta le sigui la versin 7 distribuida en 1978, antecesora de prcticamente todas las versio
nes modernas de UNIX. En 1982 aparece una versin de UNIX desarrollada por la Universidad de California
en Berkeley, la cual se distribuy como la versin BSD (Berkeley Software Distribution) de UNIX. Esta ver
sin de UNIX introdujo mejoras importantes como la inclusin de memoria virtual y la interfaz de sockets
para la programacin de aplicaciones sobre protocolos TCP/IP.
Ms tarde AT&T (propietario de los Bell Laboratories) distribuy la versin de UNIX conocida como
System V o RVS4. Desde entonces, muchos han sido los fabricantes de computadores que han adoptado a
UNIX como sistema operativo de sus mquinas. Ejemplos de estas versiones son: Solaris de SUN, HP UNIX,
IRIX de SGI y AIX de IBM.
Cuarta generacin (aos ochenta hasta la actualidad)
La cuarta generacin se caracteriza por una evolucin de los sistemas operativos de propsito general de la
tercera generacin, tendente a su especializacin, a su simplificacin y a dar ms importancia a la productivi
dad del usuario que al rendimiento de la mquina.
Adquiere cada vez ms importancia el tema de las redes de computadores, tanto de redes de largo al
cance como locales. En concreto, la disminucin del coste del hardware hace que se difunda el proceso dis
tribuido, en contra de la tendencia centralizadora anterior. El proceso distribuido consiste en disponer de
varios computadores, cada uno situado en el lugar de trabajo de las personas que las emplean, en lugar de una
sola central. Estos computadores suelen estar unidos mediante una red, de forma que puedan compartir in
formacin y perifricos.
Se difunde el concepto de mquina virtual, consistente en que un computador X, que incluye su siste
ma operativo, sea simulado por otro computador Y. Su ventaja es que permite ejecutar, en el computador Y,
programas preparados para el computador X, lo que posibilita el empleo de software elaborado para el com
putador X, sin necesidad de disponer de dicho computador.
Durante esta poca, los sistemas de bases de datos sustituyen a los ficheros en multitud de aplicacio
nes. Estos sistemas se diferencian de un conjunto de ficheros en que sus datos estn estructurados de tal for
ma que permiten acceder a la informacin de diversas maneras, evitar datos redundantes, y mantener su
integridad y coherencia.
La difusin de los computadores personales ha trado una humanizacin en los sistemas informticos.
Aparecen los sistemas amistosos o ergonmicos, en los que se evita que el usuario tenga que aprenderse
complejos lenguajes de control, sustituyndose stos por los sistemas dirigidos por men, en los que la selec
cin puede incluso hacerse mediante un manejador de cursor. En estos sistemas, de orientacin monousuario,
el objetivo primario del sistema operativo ya no es aumentar el rendimiento del sistema, sino la productividad
del usuario.
Los sistemas operativos que dominaron el campo de los computadores personales fueron UNIX, MSDOS y los sucesores de Microsoft para este sistema: Windows 95/98, Windows NT y Windows 200X. El
incluir un intrprete de BASIC en la ROM del PC de IBM ayud a la gran difusin del MS-DOS, al permitir
a las mquinas sin disco que arrancasen directamente dicho intrprete. La primera versin de Windows NT
(versin 3.1) apareci en 1993 e inclua la misma interfaz de usuario que Windows 3.1. En 1996 apareci la
versin 4.0, que se caracteriz por incluir, dentro del ejecutivo de Windows NT, diversos componentes grfi
cos que ejecutaban anteriormente en modo usuario. Durante el ao 2000, Microsoft distribuy la versin de
nominada Windows 2000 que ms tarde pas a ser Windows 2002, Windows XP y Windows 2003.
Tambin tiene importancia durante esta poca el desarrollo de GNU/Linux. Linux es un sistema opera
tivo de la familia UNIX, desarrollado de forma desinteresada durante la dcada de los 90 por miles de volun
tarios conectados a Internet. Linux est creciendo fuertemente debido sobre todo a su bajo coste y a su gran
estabilidad, comparable a cualquier otro sistema UNIX. Una de las principales caractersticas de Linux es que
su cdigo fuente est disponible, lo que le hace especialmente atractivo para el estudio de la estructura inter
na de un sistema operativo. Su aparicin ha tenido tambin mucha importancia en el mercado del software ya
que ha hecho que se difunda el concepto de software libre y abierto.
Durante esta etapa se desarrollaron tambin los sistemas operativos de tiempo real, encargados de
ofrecer servicios especializados para el desarrollo de aplicaciones de tiempo real. Algunos ejemplos son:
QNX, RTEMS y VRTX.
A mediados de los ochenta, aparecieron varios sistemas operativos distribuidos experimentales, que
no despegaron como productos comerciales. Como ejemplo de sistemas operativos distribuidos se puede ci
tar: Mach, Chorus y Amoeba.
Los sistemas operativos distribuidos dejaron de tener importancia y fueron evolucionando durante la
dcada de los 90 a lo que se conoce como middleware. Dos de los middleware ms importantes de esta dca
da han sido DCE y CORBA. Microsoft tambin ofreci su propio middleware conocido como DCOM que ha
evolucionado al COM+. En el entorno Java se ha desarrollado el RMI.
76
Durante esta etapa es importante el desarrollo del estndar UNIX, que define la interfaz de programa
cin del sistema operativo. Este estndar persigue que las distintas aplicaciones que hagan uso de los servi
cios de un sistema operativo sean portables sin ninguna dificultad a distintas plataformas con sistemas
operativos diferentes. Cada vez es mayor el nmero de sistemas operativos que ofrecen esta interfaz. Otra de
las interfaces de programacin ms utilizada es la interfaz Windows, interfaz de los sistemas operativos Win
dows 95/98, Windows NT, Windows 2000 y sucesivos.
Interfaces grficas
Las primeras experiencias con este tipo de interfaces se remontan a los primeros aos de la dcada de los
setenta. En Xerox PARC (un centro de investigacin de Xerox) se desarroll lo que actualmente se considera
la primera estacin de trabajo a la que se denomin Alto. Adems de otros muchos avances, esta investiga
cin estableci los primeros pasos en el campo de los GUI.
Con la aparicin, al principio de los ochenta, de los computadores personales dirigidos a usuarios no
especializados, se acentu la necesidad de proporcionar este tipo de interfaces. As, la compaa Apple
adopt muchas de las ideas de la investigacin de Xerox PARC para lanzar su computador personal Macin
tosh (1984) con una interfaz grfica que simplificaba enormemente el manejo del computador. El otro gran
competidor en este campo, el sistema operativo MS-DOS, tard bastante ms en dar este paso. En sus prime
ras versiones proporcionaba una interfaz alfanumrica similar a la de UNIX pero muy simplificada. Como
paso intermedio, hacia 1988, incluy una interfaz denominada DOS -SHELL que, aunque segua siendo alfanumrica, no estaba basada en lneas, sino que estaba orientada al uso de toda la pantalla y permita realizar
operaciones mediante mens. Por fin, ya en los noventa, lanz una interfaz grfica, denominada Windows,
que tomaba prestadas muchas de las ideas del Macintosh.
En el mundo UNIX se produjo una evolucin similar. Cada fabricante inclua en su sistema una interfaz
grfica adems de la convencional. La aparicin del sistema de ventanas X a mediados de los ochenta y su
aceptacin generalizada, que le ha convertido en un estndar de facto, ha permitido que la mayora de los
sistemas UNIX incluyan una interfaz grfica comn. Como resultado de este proceso, prcticamente todos
los computadores de propsito general existentes actualmente poseen una interfaz de usuario grfica.
La tendencia actual consiste en utilizar sistemas operativos multiprogramados sobre los que se aade un
gestor de ventanas, lo que permite que el usuario tenga activas, en cada momento, tantas tareas como desee
y que los distribuya, a su antojo, sobre la superficie del terminal. Este tipo de interfaces tiene su mayor repre
sentante en los sistemas operativos Windows de Microsoft. En la figura 2.25 se muestra uno de los elementos
clave de la interfaz grfica de este tipo de sistemas, el explorador de Windows, que da acceso a los recursos
de almacenamiento y ejecucin del sistema.
objects
1 "a 1
TotalSbeI
46,5GB
FreeSpacefComments
4,28G
B
zJH* 1
Providesoptionsfor..,
1y M
yCompUer
77
2.12. EJERCICIOS
2.1.
2.2.
2.3.
100.000 .000.000
10 . 000 . 000.000
Ethernet 10 Gb/s
1 .000 .000.000
Ethemet 1 Gb/s
-eab^-
100 .000.000
10 .000.000
0J
X
1.000.000
)
O
100.000
10.000
1.000
Ethernet 10 Mb/s
Ethernet 2,94 Mb/s
1970
GSM
Pager alfanumrico
100
10
UMTS
&
1990
2000
PROCESOS
Este captulo se dedica a estudiar todos los aspectos relacionados con los procesos, conceptos fundamenta
les para comprender el funcionamiento de un sistema operativo. Los temas que se tratan en este captulo
son:
Procesos.
Multitarea.
Informacin del proceso.
Vida del proceso.
Threads.
Planificacin.
Seales y excepciones.
Temporizadores.
Tipos de procesos.
Conceptos de ejecucin del sistema operativo.
Tratamiento de las interrupciones.
Estructuras del sistema operativo.
Servicios UNIX y Windows relacionados con la gestin de procesos.
80
3.1.
CONCEPTO DE PROCESO
Todos los programas, cuya ejecucin solicitan los usuarios al sistema operativo, se ejecutan en forma de pro
cesos, de ah la importancia de conocerlos en detalle. Como ya se vio en el captulo 2 '
Introduccin a los sistemas operativos, el proceso se puede definir como un programa en ejecucin y, de una
forma un poco ms precisa, como la unidad de procesamiento gestionada por el sistema operativo.
Se vio, en el captulo 1 Conceptos arquitectnicos del computador, que para ejecutar un programa
ste ha de residir con sus datos en el mapa de memoria. Adems, el sistema operativo mantiene una serie de
estructuras de informacin por cada proceso, estructuras que permiten identificar al proceso y conocer sus "J
caractersticas, as como los recursos que tiene asignados. En esta ltima categora entran los descriptores de
las regiones de memoria asignadas, los descriptores de los ficheros abiertos, los descriptores de los puertos de
comunicaciones, etc. Una parte muy importante de estas informaciones se encuentra, como ya sabemos, en el
bloque de control del proceso (BCP) que tiene asignado cada proceso en la tabla de procesos y que se analiza
ms adelante.
Jerarqua de procesos
La secuencia de creacin de procesos vista en la seccin 2.2.2 Arranque del sistema operativo genera un
rbol de procesos como el incluido en la figura 3.1.
Para referirse a las relaciones entre los procesos de la jerarqua se emplean los trminos de padre e hijo
(a veces se emplea el de hermano y abuelo). Cuando el proceso A solicita al sistema operativo que cree el
proceso B se dice que A es padre de B y que B es hijo de A. Bajo esta ptica la jerarqua de procesos puede
considerarse como un rbol genealgico.
Algunos sistemas operativos como UNIX mantienen de forma explcita esta estructura jerrquica de
procesos un proceso sabe quin es su padre , mientras que otros sistemas operativos como Windows no
la mantienen.
Entorno del proceso
El entorno del proceso consiste en un conjunto de variables que se le pasan al proceso en el momento de su
creacin. El entorno est formado por una tabla NOMBRE=VALOR que se incluye en la pila del proceso. El
NOMBRE especifica el nombre de la variable y el VALOR su valor. Un ejemplo de entorno en UNIX es el
siguiente:
PATH=/usr/bin /home/pepe/bin
TERM=vtl00
HOME=/home/pepe
PWD=/home/pepe/libros/primero
PATH indica la lista de directorios en los que el sistema operativo busca los programas ejecutables, V
(Proclnic;
c Edito
(Proceso B>
iProcesoD1
(ProcasoCi
Procesos
81
TERM el tipo de terminal, HOME el directorio inicial asociado al usuario y PWD el directorio de trabajo
a c tu a l.
El sistema operativo ofrece servicios para leer, modificar, aadir o eliminar variables de entorno. Por lo
que los procesos pueden utilizar las variables del entorno para definir su comportamiento. Por ejemplo, un
programa de edicin analizar la variable TERM, que especifica el terminal, para interpretar adecuadamente
las teclas que pulse el usuario.
Grupos de procesos
Los procesos forman grupos que tienen diversas propiedades. El conjunto de procesos creados a partir de un
shell puede formar un grupo de procesos. Tambin pueden formar un grupo los procesos asociados a un ter
minal.
El inters del concepto de grupo de procesos es que hay determinadas operaciones que se pueden hacer
sobre todos los procesos de un determinado grupo, como se ver al estudiar algunos de los servicios. Un
ejemplo es la posibilidad de terminar todos los procesos pertenecientes a un mismo grupo.
3.2.
MULTITAREA
Como se vio en la seccin 2.4 Tipos de sistemas operativos, dependiendo del nmero de procesos que pue
da ejecutar simultneamente, un sistema operativo puede ser monotarea o multitarea.
- Tiempo
82
Procesos
83
proceso en estado de listo para ejecutar, por lo que entrar a ejecutar menos veces el proceso nulo. Sin em
bargo, a mayor grado de multiprogramacin, mayores son las necesidades de memoria. Veamos este fenme
no con ms detalle para los dos casos de tener o no tener memoria virtual.
En un sistema con m em oria real los procesos activos han de residir totalmente en memoria principal,
por tanto, el grado de multiprogramacin viene limitado por el tamao de los procesos y por la memoria
principal disponible. Adems, como se indica en la figura 3.4, el rendimiento de la utilizacin del procesador
aumenta siempre con el grado de multiprogramacin (pero, al ir aumentando el grado de multiprogramacin
hay que aumentar la memoria principal). Esto es as ya que los procesos siempre residen en memoria principal.
En los sistemas con m em oria virtual la situacin es ms compleja, puesto que los procesos slo tienen
en memoria principal su conjunto residente (recordatorio 3.1), lo que hace que quepan ms procesos. Sin
embargo, al aumentar el nmero de procesos, sin aumentar la memoria principal, disminuye el conjunto resi
dente de cada uno, situacin que se muestra en la figura 3.5.
Recordatorio 3.1. Se denomina conjunto residente a las pginas que un proceso tiene en memoria principal
y conjunto de trabajo al conjunto de pginas que un proceso est realmente utilizando en un instante deter
minado________ _______________________________
.. . . . . --
'
Proceso N
SO
Memoria
principal
Cada procesa reside
totalmente en memoria
Figura 3.4 Grado de multiprogramacin y rendimiento del procesador. En un sistema real con suficiente
memoria al aumentar el grado de multiprogramacin aumenta la utilizacin del procesador.
G rado de Multiprogramacin
Figura 3.5 Para una cantidad de memoria principal dada, el conjunto residente medio decrece con el grado
de multiprogramacin.
84
Grado de Multlprogramacin*
Momorla grande
3.3.
Como se indic anteriormente, el proceso es la unidad de procesamiento gestionada por el sistema operativo.
Para poder realizar este cometido el proceso tiene asociado una serie de elementos de informacin, que se
resumen en la figura 3.7, y que se organizan en tres grupos: estado del procesador, imagen de memoria y ta
blas del sistema operativo.
Es de destacar que el proceso no incluye informacin de E/S, puesto que sta suele estar reservada al
sistema operativo.
- Registros -espedales-
- Registros -generales.
r~ p c - 1
i p i
I
Estado
Procesos
85
Cuando el proceso no est en ejecucin, su estado debe estar almacenado en el bloque de control de
proceso (BCP). Por el contrario, cuando el proceso est ejecutando, el estado del procesador reside en los
registros y vara de acuerdo al flujo de instrucciones mquina ejecutado. En este caso, la copia que reside en
el BCP no est actualizada. Tngase en cuenta que los registros de la mquina se utilizan para no tener que
acceder a la informacin de memoria, dado que es mucho ms lenta que stos.
Sin embargo, cuando se detiene la ejecucin de un proceso, para ejecutar otro proceso, es muy impor
tante que el sistema operativo actualice la copia del estado del procesador en el BCP. En trminos concretos,
la rutina del sistema operativo que trata las interrupciones lo primero que ha de hacer es salvar el estado del
procesador del proceso interrumpido en su BCP.
86
es ms conveniente usar un modelo de varias regiones, pues es mucho ms flexible y se adapta mejor a las
necesidades reales de los procesos.
Proceso con un nmero fijo de regiones de tamao variable
Un proceso contiene varios tipos de informacin, cuyas caractersticas se analizan seguidamente:
Texto o cdigo. Bajo este nombre se considera el programa mquina que ha de ejecutar el proceso.
Aunque el programa podra automodificarse, no es sta una prctica recomendada, por lo cual se
considerar que esta informacin es fija y que solamente se harn operaciones de ejecucin y lectura
sobre ella (aclaracin 3.2).
Datos. Este bloque de informacin depende mucho de cada proceso. Los lenguajes de programacin
actuales permiten asignacin dinmica de memoria, lo que hace que vare el tamao del bloque de
datos al avanzar la ejecucin del proceso. Cada programa estructura sus datos de acuerdo a sus nece
sidades, pudiendo existir los siguientes tipos:
Datos con valor inicial. Estos datos son estticos y su valor se fija al cargar el proceso desde el
fichero ejecutable. Estos valores se asignan en tiempo de compilacin.
Datos sin valor inicial. Estos datos son estticos, pero no tienen valor asignado, por lo que no
estn presentes en el fichero ejecutable. Ser el sistema operativo el que, al cargar el proceso,
rellene o no rellene esta zona de datos con valores predefinidos.
Datos dinmicos. Estos datos se crean y se destruyen de acuerdo a las directrices del progra
ma.
Los datos podrn ser de lectura-escritura o solamente de lectura.
Pila. A travs del puntero de pila, los programas utilizan una estructura de pila residente en memo
ria. En ella se almacenan, por ejemplo, los bloques de activacin de los procedimientos llamados. La
pila es una estructura dinmica, puesto que crece y decrece segn avanza la ejecucin del proceso.
Recordemos que hay procesadores que soportan una pila para modo usuario y otra para modo privi
legiado.
Aclaracin 3.2. Dado que tambin se pueden incluir cadenas inmutables de texto en el cdigo, tambin se
han de permitir las operaciones de lectura, adems de las de ejecucin.__________________________________
Para adaptarse a estas informaciones, se puede utilizar un modelo de imagen de memoria con un nme
ro fijo de regiones de tamao variable.
El modelo tradicional utilizado en UNIX contempla tres regiones: texto, pila y datos. La figura 3.8 pre
senta esta solucin. Observe que la regin de texto es de tamao fijo (el programa habitualmente no se modi
fica) y que las regiones de pila y de datos crecen en direcciones contrarias.
Este modelo se adapta bien a los sistemas con memoria virtual, puesto que el espacio virtual reservado
para que puedan crecer las regiones de datos y pila no existe fsicamente. Solamente se crea, gastando recur
sos de disco y memoria, cuando se asigna. No ocurrir lo mismo en un sistema real, en el que el espacio re
servado para el crecimiento ha de existir como memoria principal, dando como resultado que hay un recurso
costoso que no se est utilizando.
Si bien este modelo es ms flexible que los dos anteriores, tiene el inconveniente de no prestar ayuda
para la estructuracin de los datos. El sistema operativo ofrece un espacio de datos que puede crecer y decreEspacio de direcciones
Procesos
87
Esta solucin es ms avanzada que la anterior, al permitir que existan las regiones que desee el proceso. La
figura 3.9 presenta un caso de 7 regiones, que podrn ser de texto, de pila o de datos.
Es la solucin ms flexible y, por tanto, la utilizada en las versiones actuales de Windows y UNIX.
Informacin de identificacin del usuario y del proceso. Como ejemplo, se incluyen los siguientes datos:
Identificador del proceso.
Identificador del proceso padre, en caso de existir relaciones padre-hijo como en UNIX.
Informacin sobre el usuario (identificador de usuario, identificador de grupo).
Estado del procesador
Contiene los valores iniciales del estado del procesador o su valor en el instante en que fue expulsado el pro
ceso.
Informacin de control del proceso
En esta seccin se incluye diversa informacin que permite gestionar al proceso. Destacaremos los siguientes
datos, muchos de los cuales se detallarn a lo largo del libro:
Informacin de planificacin y estado.
Punteros para estructurar los procesos en colas o anillos. Por ejemplo, los procesos que estn en es
tado de listo pueden estar organizados en una cola, de forma que se facilite la labor del planificador.
Comunicacin entre procesos. El BCP puede contener espacio para almacenar las seales y para
Espacio de direcciones
Regiones
88
3.4.
VIDA DE UN PROCESO
Como ya sabemos, la vida de un proceso consiste en su creacin, su ejecucin y su muerte o terminacin. Sin
embargo, la ejecucin del proceso no se suele hacer de un tirn, puesto que surgen interrupciones y el propio
proceso puede necesitar servicios del sistema operativo. De acuerdo con ello, en esta seccin se analizarn de
forma general la creacin, interrupcin, activacin y terminacin del proceso.
BCP
Procesos
89
<=
L D .l, [.5 ]
Supongamos que el valor de CANT es H exA4E78, pero que el sistema operativo al ejecutar modifica el
registro . 5 , dndole el valor HexEB7A4. Al intentar, ms tarde, que siga la ejecucin del mencionado pro
ceso, la instruccin LD . 1 , [ . 5] cargar en el registro . 1 el contenido de la direccin HexEB7A4 en
vez del contenido de la direccin H exA4E78.
Para evitar esta situacin, lo primero que hace el sistema operativo al entrar a ejecutar es salvar el con
tenido de todos los registros de usuario, teniendo cuidado de no modificar el valor de ninguno de ellos antes
de salvarlo. Como muestra la figura 3.11, al interrumpirse la ejecucin de un proceso el sistema operativo
almacena los contenidos de los registros en el BCP de ese proceso (recordatorio 3.2). Para ms detalles ver la
seccin 3.11.2 Detalle del tratamiento de interrupciones.
Recordatorio 3.2. Como sabemos, la propia interrupcin modifica el contador de programa y el registro de
estado (cambia el bit que especifica el modo de ejecucin para pasar a modo privilegiado, as como los bits
de inhibicin de interrupciones). Sin embargo, esto no presenta ningn problema puesto que el propio hard
ware se encarga de salvar estos registros en la pila antes de modificarlos._______ _______________________
90
ceso de usuario, su restitucin garantiza que el proceso seguir ejecutando en modo usuario.
Igualmente, al restituir el registro de estado se restituyen los bits de inhibicin de interrupcin, segn
los tena el proceso cuando fue interrumpido.
Al restituir el contador de programa, se consigue que la siguiente instruccin mquina que ejecute el
procesador sea justo la instruccin en la que fue interrumpido el proceso. En este momento es cuan
do se ha dejado de ejecutar el sistema operativo y se pasa a ejecutar el proceso.
Procesos
91
Ejecucin
Planificado
Termina
Espera evento
Entra al
sistema
| Expulsado
Bloqueado
Se produce el evento
Entra al
sistema
Expulsado al disco
I Expulsado al disco
Listo y
suspendido
Procesos por lotes
Figura
Se produce el evento
[Bloqueado y]
[suspendido J
92
3.5.
PLANIFICACIN
El objetivo de la planificacin de procesos es el reparto del tiempo de procesador entre los procesos. Como
hemos visto, el planificador es el mdulo del sistema operativo que realiza la funcin de seleccionar el proce
so en estado de listo que pasa a estado de ejecucin, mientras que el activador es el mdulo que pone en eje
cucin el proceso planificado.
J
Los sistemas pueden incluir varios niveles de planificacin de procesos. La figura 3.14 muestra el caso
de tres niveles: corto, medio y largo plazo.
La planificacin a largo plazo tiene por objetivo aadir nuevos procesos al sistema, tomndolos de la
lista de espera. Estos procesos son procesos de tipo batch, en los que no importa el instante preciso en el que
se ejecuten (siempre que se cumplan ciertos lmites de espera).
La planificacin a medio plazo trata la suspensin de procesos. Es la que decide qu procesos pasan a
suspendido y cules dejan de estar suspendidos. Aade o elimina procesos de memoria principal modifican
do, por tanto, el grado de multiprogramacin.
La planificacin a corto plazo se encarga de seleccionar el proceso en estado de listo que pasa a estado
de ejecucin. Es, por tanto, la que asigna el procesador.
Planificacin de E/S
Dado que los perifricos son relativamente lentos, es frecuente que se acumulen las peticiones de acceso sin
haber completado las anteriores. Surge, por tanto, la necesidad de planificacin de entrada/salida, cuya mi
sin consiste en decidir el orden en que se ejecutan las operaciones de entrada/salida que estn pendientes
para cada perifrico.
Colas
Para tener anotados los candidatos que desean ser atendidos ya sean procesos listos para ejecutar u operacio
nes de E/S solicitadas, el sistema operativo debe mantener unas colas con dichos candidatos.
El planificador seleccionar un candidato de entre los listos para ejecutar, de acuerdo a los criterios o
algoritmos que tenga establecidos, algoritmos que se analizarn en detalle en el captulo 4 Planificacin de
Procesos.
3.6.
SEALES Y EXCEPCIONES
Cuando un sistema operativo desea notificar a un proceso la ocurrencia de un determinado evento, o error,
recurre al mecanismo de las seales en UND o al de las excepciones en Windows.
Procesos
97
Se crean mediante un servicio especial distinto del utilizado para los procesos de usuario.
Se crean dentro del dominio de proteccin del sistema operativo.
Tienen acceso a todo el mapa de memoria del sistema operativo.
Su imagen de memoria se encuentra dentro del mapa de memoria del sistema operativo.
Pueden utilizar un conjunto restringido de llamadas al sistema, adems de los servicios generales que
utilizan los procesos de usuario.
Ejecutan siempre en modo privilegiado.
Son flujos de ejecucin independientes dentro del sistema operativo.
El diseo de los procesos de ncleo ha de ser muy cuidadoso puesto que trabajan en el dominio de pro
teccin del sistema operativo y tienen todos los privilegios. Un proceso de ncleo, antes de terminar, ha de
liberar toda la memoria dinmica y todos los cerrojos asignados, puesto que no se liberan automticamente.
3.9.
THREADS
Un proceso se puede considerar formado por un activo y por un flujo de ejecucin. El activo es el conjunto
de todos los bienes y derechos que tiene asignados el proceso. En el activo se incluye la imagen de memoria
del proceso, el BCP, los ficheros abiertos, etc. El flujo de ejecucin est formado por el conjunto ordenado de
instrucciones mquina del programa que va ejecutando el proceso. Denominaremos thread a esta secuencia
de ejecucin (otros nombres utilizados son hilo o proceso ligero). ntimamente ligado al thread e.st el estado
del procesador, que va cambiando segn avanza el thread, el estado de ejecucin (listo, bloqueado o en eje
cucin) y la pila.
En los procesos clsicos, que hemos estudiado hasta ahora, solamente existe un nico thread de ejecu
cin, por lo que les denominamos monothread. La extensin que se plantea en esta seccin consiste en dotar
al proceso de varios threads. Llamaremos proceso multithread a este tipo de proceso, mostrado la figura
3.19. El objetivo de disponer de varios threads es conseguir concurrencia dentro del proceso, al poder ejecu
tar los mismos simultneamente.
Cada thread tiene informaciones que le son propias, informaciones que se refieren fundamentalmente al
contexto de ejecucin, pudindose destacar las siguientes:
Estado del procesador: Contador de programa y dems registros visibles.
Pila.
98
Espacio de memoria.
Variables globales.
Ficheros abiertos.
Procesos hijos.
Temporizadores.
Seales y semforos.
Contabilidad.
Es importante destacar que todos los threads de un mismo proceso comparten el mismo espacio de di
recciones de memoria, que incluye el cdigo, los datos y las pilas de los diferentes threads. Esto hace que no
exista proteccin de memoria entre los threads de un mismo proceso y que un thread pueda, aunque no sea
recomendable, acceder a la informacin propia de otro thread, como puede ser su pila.
El thread constituye la unidad ejecutable en Windows. La figura 3.20 representa de forma esquemtica
la estructura de un proceso de Windows con sus threads.
Cdigo
Datos
Recursos (ficheros,...)
Enlomo del proceso
Hi| 1
|Registros]
I Pila I
Figura 3.20 Estnictura de un proceso en Windows.
118
Compartir la informacin
Cuando la informacin ha de ser compartida por varios procesos, no ha de residir en el BCP, que es de acceso 4
restringido al proceso que lo ocupa. A lo sumo, el BCP contendr un apuntador que permita alcanzar esa in
formacin.
Un ejemplo de esta situacin lo presentan los procesos en relacin con los punteros de posicin de los
ficheros que tienen abiertos. Dos procesos pueden tener simultneamente abierto el mismo fichero por dos
razones: el fichero se hered abierto de un proceso ancestro o el fichero se abri de forma independiente por
los dos procesos. En el primer caso se trata de procesos diseados para compartir el fichero, por lo que deben >
compartir el puntero de posicin (PP). En el modelo UNIX existe una tabla nica llamada intermedia que
mantiene los punteros de posicin de todos los ficheros abiertos por todos los procesos.
Finalmente diremos que otra razn que obliga a que las tablas de pginas sean externas al BCP es para
permitir que se pueda compartir memoria. En este caso, como se analizar en detalle en el captulo 5 Ges
tin de memoria, dos o ms procesos comparten parte de sus tablas de pginas.
3.13. SERVICIOS
Esta seccin describe los principales servicios que ofrecen UNIX y Windows para la gestin de procesos,
threads y planificacin. Tambin se presentan los servicios que permiten trabajar con seales (UNIX), ex
cepciones (Windows) y temporizadores.
Identificacin de procesos.
El entorno de un proceso.
Creacin de procesos.
Terminacin de procesos.
En las siguientes secciones se presentan los servicios incluidos en cada una de estas categoras, utili
zando sus prototipos en lenguaje C.
Identificacin de procesos
UNIX identifica cada proceso por medio de un entero nico denominado identificador de proceso de tipo
p i d _ t . Los servicios relativos a la identificacin de los procesos son los siguientes:
ffl pid_t getpid (void) ;
'Vi!
fj
Procesos
119
int main(void)
{
pid_t id_proceso;
pid_t idjpadre;
id_proceso = getpidO;
id_padre = getppid();
printf("Identificador de proceso: %d\n", id_proceso);
printf("Identificador del proceso padre: %d\n", id_padre)
return 0 ;
Cada usuario en el sistema tiene un identificador nico denominado identificador de usuario, de tipo
u i d t . Cada proceso lleva asociado un usuario que se denomina propietario o usuario real. El proceso tiene
tambin un identificador de usuario efectivo, que, como se ver en el captulo 11 Seguridad y proteccin,
determina los privilegios de ejecucin que tiene el proceso. Generalmente el usuario real es el mismo que el
efectivo. El sistema incluye tambin grupos de usuarios, cada usuario debe ser miembro al menos de un gru
po. Al igual que con los usuarios, cada proceso lleva asociado el identificador de grupo real al que pertenece
y el identificador de grupo efectivo. Los servicios que permiten obtener estos identificadores son los siguien
tes:
0
uid_t getuid(void);
Este servicio devuelve el identificador de usuario real del proceso que lo solicita.
uid_t geteuid(void);
gid_t getgid(void);
gid_t getegid(void);
de
de
de
de
120
El entorno de un proceso
El entorno de un proceso viene definido por una lista de variables que se pasan en el momento de comenzar
su ejecucin. Estas variables se denominan variables de entorno y se puede acceder a ellas a travs de la va
riable global e n v i r o n , declarada de la siguiente forma:
extern char *environ[];
El entorno es un vector de cadenas de caracteres de la forma n o m b r e = v a lo r , donde n o m b re hace
referencia al nombre de una variable de entorno y v a l o r al contenido de la misma.
Este mismo entorno lo recibe el m a in como tercer parmetro. Basta con declararlo de la siguiente for
ma:
int main(int argc, char *argv[], char *envp[])
El programa 3.3 imprime las variables de entorno de un proceso.
Program a 3.3 Programa que imprime el entorno del proceso dos veces, usando e n v i r o n y e n v p .
#include <stdio.h>
#include <stdlib.h>
extern char **environ;
int maintint argc, char *argv[], char *envp[])
{
int i ;
printf("Lista de variables de entorno usando environ de %s\n", argvfo]);
for(i=0; environ[i] != NULL; i++)
printf(environ[%d] = %s\n", i, environ[i];
printf("Lista de variables de entorno usando envp de %s\n", argv[0]);
for(i=0; envpfi] != NULL; i++)
printf("envp[%d] = %s\n", i, envp[i];
return 0 ;
}
Cada aplicacin interpreta la lista de variables de entorno de forma especfica. UNIX establece el signi
ficado de determinadas variables de entorno. Las ms comunes son:
El servicio g e t e n v permite obtener el valor de una variable de entorno. Devuelve un puntero al valor de la
variable de entorno de nombre am e, o NULL si la variable de entorno no se encuentra definida.
El programa 3.4 utiliza el servicio g e t e n v para imprimir el valor de la variable de entorno HOME.
P ro g ram a 3.4 Programa que imprime el valor de la variable HOME.
# in c lu d e < s td io .h >
Procesos
121
#include <stdlib.h>
int main(void)
{
char *home;
home = getenv("HOME");
if (home == NULL)
printf("HOME no se encuentra definida\n");
else
printf("El valor de HOME es %s\n", home);
return 0 ;
Creacin de procesos
3 p id t fo rk O ; .
;y[,' -
La forma de crear un proceso en un sistema operativo que ofrezca la interfaz UNIX es invocando el servicio
f o r k . El sistema operativo trata este servicio realizando una clonacin del proceso que lo solicite. El proce
so que solicita el servicio se convierte en el proceso padre del nuevo proceso, que es, a su vez, el proceso
hijo.
La figura 3.35 muestra que la clonacin del proceso padre se realiza copiando la imagen de memoria y
el BCP. Observe que el proceso hijo es una copia del proceso padre en el instante en que ste solicita el ser
vicio f o r k . Esto significa que los datos y la pila del proceso hijo son los que tiene el padre en ese instante de
ejecucin. Es ms, dado que al entrar el sistema operativo a tratar el servicio, lo primero que hace es salvar
los registros en el BCP del padre, al copiarse el BCP se copian los valores salvados de los registros, por lo
que el hijo tiene los mismos valores que el padre. Esto significa, en especial, que el contador de programa de
los dos procesos tiene el mismo valor, por lo que van a ejecutar la misma instruccin mquina. No hay que
caer en el error de pensar que el proceso hijo empieza la ejecucin del cdigo en su punto de inicio; repeti
mos: el hijo empieza a ejecutar, al igual que el padre, en la sentencia que est despus del f o r k .
El servicio f o r k es invocado una sola vez por el padre, pero retoma dos veces, una en el padre y otra
en el hijo.
En realidad el proceso hijo no es totalmente idntico al padre, puesto que algunos de los valores del
BCP han de ser distintos. Las diferencias ms importantes son las siguientes:
El proceso hijo tiene su propio identificador de proceso, nico en el sistema.
El proceso hijo tiene una nueva descripcin de la memoria. Aunque el hijo tenga las mismas regio
nes con el mismo contenido, no tienen por qu estar en la misma zona de memoria (esto es especial
mente cierto en el caso de sistemas sin memoria virtual).
El tiempo de ejecucin del proceso hijo se iguala a cero.
Mapa de
memoria
Imagen del
/ . proceso A
Tabla de procesos
BCP.
A;
Mapa de
memoria
/Im agen del
proceso A v:
. Jmagen.deL
^ proceso Bj
BCP
a;
BCP
By
Nuevo PIO
Nueva descripcin de memoria
Distinto valor de retomo (0 en el hijo)
122
El hijo recibe un 0.
El padre recibe el identifcador de proceso del hijo.
Este valor de retomo se puede utilizar mediante una clusula de condicin para que el padre y el hijo
sigan flujos de ejecucin distintos, como se muestra en la figura 3.36.
Observe que las modificaciones que realice el proceso padre sobre sus registros e imagen de memoria
despus del f o r k no afectan al hijo y, viceversa, las del hijo no afectan al padre. Sin embargo, el proceso
hijo tiene su propia copia de los descriptores del proceso padre. Esto hace que el hijo tenga acceso a los fi
cheros abiertos por el proceso padre. Adems, padre e hijo comparten los punteros de posicin de los ficheros
abiertos hasta ese momento. Esta es la nica forma por la cual se pueden compartir punteros de ficheros.
El programa 3.5 muestra un ejemplo de utilizacin del servicio f o r k . Este programa hace uso de la
funcin de biblioteca p e r r o r que imprime un mensaje describiendo el error del ltimo servicio ejecutado.
Despus del servicio f o r k , los procesos padre e hijo imprimirn sus identificadores de proceso utilizando el
servicio g e t p i d , y los identificadores de sus procesos padre, por medio del servicio g e t p p i d . Observe
que los identificadores del proceso padre son distintos en cada uno de los dos procesos.
P rogram a 3.5 Programa que crea un proceso.
#include <sys/types,h>
#include <stdio.h>
int main(void)
{
pid_t pid;
pid = fork O;
switch(pid){
case -1 : /* error del forkt) */
perror("fork");
break;
case 0 : /* proceso hijo */
printf ("Proceso %d; padre = %d\n", getpidO, getppidO);
break;
default:
/* padre */
printf ("Proceso %d; padre = %d\n", getpidO, getppidO);
}
return 0 ;
El cdigo del programa 3.6 crea una cadena de n procesos como se muestra en la figura 3.37.
Programa 3.6 Programa que crea la cadena de procesos de la figura 3.37.
Procesos
123
#include <sys/types.h>
#include <stdio.h>
int main(void)
{
pid_t pid;
int i ;
int n = 10 ;
for (i = 0 ; i > n; i++){
pid = fork();
if (pid != 0 )
break;
}
printf ("El padre del proceso %d es %d\n", getpidO, getppidO);
return 0 ;
En cada ejecucin del bucle se crea un proceso. El proceso padre obtiene el identificador del proceso
hijo, que ser distinto de cero y saldr del bucle utilizando la sentencia b r e a k de C. El proceso hijo conti
nuar la ejecucin con la siguiente iteracin del bucle. Esta recursion se repetir hasta que se llegue al final
del bucle.
El programa 3.7 crea un conjunto de procesos cuya estructura se muestra en la figura 3.38.
Program a 3.7 Programa que crea la estructura de procesos de la figura 3.38.
#include <stdio.h>
#include <sys/types.h>
int main(void)
{
pid_t pid;
int i;
int n = 10 ;
for (i = 0 ; i > n; i++){
pid = fork();
if (pid == 0 )
124
break;
}
printff'El padre del proceso %d es %d\n", getpid(), getppidO)
return 0 ;
En este programa, a diferencia del anterior, es el proceso hijo el que sale del bucle ejecutando la senten
cia b r e a k , siendo el padre el encargado de crear todos los procesos.
C am biar el program a que ejecuta un proceso
El servicio e x e c de UNIX tiene por objetivo cambiar el programa que est ejecutando un proceso. Se puede
considerar que el servicio tiene tres fases. En la primera se comprueba que el servicio se puede realizar sin
problemas. En la segunda se vaca el proceso de casi todo su contenido. Una vez iniciada esta fase no hay
marcha atrs. En la tercera se carga un nuevo programa. La figura 3.39 muestra estas dos fases.
En la fase de vaciado del proceso se conservan algunas informaciones, como:
Entorno del proceso, que el sistema operativo incluye en la nueva pila del proceso.
Algunas informaciones del BCP como: identificador de proceso, identificador del proceso padre,
identificador de usuario y descriptores de ficheros abiertos.
En la fase de carga hay que realizar las siguientes operaciones:
Recuerde que el servicio f o r k crea un nuevo proceso, que ejecuta el mismo programa que el proceso
padre, y que el servicio e x e c no crea un nuevo proceso, sino que permite que un proceso pase a ejecutar un
programa distinto.
En UNIX existe una familia de funciones e x e c , cuyos prototipos se muestran a continuacin:
0
--J
:.Vv.'i
Mapa de
memoria
Imagen
del proceso
Tabla de procesos
BCP
Mapa de
memoria
Imagen
del proceso
Tabla de procesos
BCP
Procesos
g int execle(char
@ int execve(char
@ int execlp(char
0 int execvp(char
*pathi,
*path,
*file,
*file,
125
__ _____ _______
La familia de funciones e x e c reemplaza la imagen del proceso por una nueva imagen. Esta nueva imagen se
construye a partir de un fichero ejecutable. Si el servicio se ejecuta con xito, ste no retoma, puesto que la
imagen del proceso habr sido reemplazada, en caso contrario devuelve -1.
La funcin m ain del nuevo programa llamado tendr la forma:
int main(int argc, char *argv[])
donde a r g c representa el nmero de argumentos que se pasan al programa, incluido el propio nombre del
programa, y a r g v es un vector de cadenas de caracteres, conteniendo cada elemento de este vector un argu
mento pasado al programa. El primer componente de este vector ( a r g v [ 0 ]) representa el nombre del propio
programa.
El argumento p a t h apunta al nombre del fichero ejecutable donde reside la nueva imagen del proceso.
El argumento f i l e se utiliza para construir el nombre del fichero ejecutable. Si el argumento f i l e contiene
el carcter / , entonces el argumento f i l e constituye el nombre del fichero ejecutable. En caso contra
rio, el prefijo del nombre para el fichero se construye por medio de la bsqueda en los directorios pasados en
la variable de entorno PATH.
El argumento a r g v contiene los argumentos pasados al programa y debera acabar con un puntero
NULL. El argumento e n v p apunta al entorno que se pasar al proceso y se puede obtener de la variable ex
tema e n v i r o n .
Los descriptores de los ficheros abiertos previamente por el proceso que solicita el servicio e x e c per
manecen abiertos en la nueva imagen del proceso, excepto aquellos con el flag FD_CLOEXEC. Los directo
rios abiertos en el proceso que solicita el servicio sern cerrados en la nueva imagen del proceso.
Las seales con la accin por defecto seguirn por defecto. Las seales ignoradas seguirn ignoradas
por el proceso y las seales con manejadores activados tomarn la accin por defecto.
Si el fichero ejecutable tiene activo el bit de modo s e t - u s e r - I D (aclaracin 3.7), el identificador
efectivo del proceso pasar a ser el identificador del propietario del fichero ejecutable.
Aclaracin 3.7. Cuando un usuario ejecuta un fichero ejecutable con el bit de modo set-user-ID activo, el
nuevo proceso creado tendr como identificador de usuario efectivo el identificador de usuario del propieta
rio del fichero ejecutable. Como se ver en el captulo 11 Seguridad y proteccin, este identificador es el
que se utiliza para comprobar los permisos en los accesos a determinados recursos como son los ficheros. Por
tanto, cuando se ejecuta un programa con este bit activo, el proceso ejecuta con la identidad del propietario
del fichero ejecutable no con la suya._______________________________________________________________
Despus del servicio e x e c el proceso mantiene los siguientes atributos:
Identificador de proceso.
Identificador del proceso padre.
Identificador del grupo del proceso.
Identificador de usuario real.
Identificador de grupo real.
Directorio actual de trabajo.
Directorio raz.
Mscara de creacin de ficheros.
Mscara de seales del proceso.
Seales pendientes.
En el programa 3.8 se muestra un ejemplo de utilizacin del servicio e x e c l p . Este programa crea un
proceso hijo, que ejecuta el mandato l s -1 , para listar el contenido del directorio actual de trabajo.
126
- 1 mediante el servicio e x e c v p .
#include <sys/types.h>
#include <stdio.h>
int main(int argc, char *argv[])
(
pid_t pid;
char *argumentos[3] ;
argumentos [0] = "ls";
argumentos[1] = "-1 ";
argumentos [2] = NULL;
pid = fork();
switch(pid) {
case -1 : /* error del fork() */
return 1 ;
case 0 : /* proceso hijo */
execvp(argumentos[0] , argumentos);
perror("exec");
return 2 ;
default:
/* padre */
printf("Proceso padre\n");
}
Procesos
127
return 0 ;
}
El programa 3.10 crea un proceso que ejecuta un mandato recibido en la lnea de argumentos.
Programa 3.10 Programa que ejecuta el mandato pasado en la lnea de mandatos.
#include <sys/types.h>
#include <stdio.h>
main (int argc, char *argv[])
(
pid_t pid;
pid = fork();
switch(pid) {
case -1 : /* error del fork() */
return 1 ;
case 0 : /* proceso hijo */
execvp(argv[1 ], &argv[1]);
perror("exec");
return 2 ;
default:
/* padre */
printf("Proceso padre\n");
}
return 0 ;
}
Terminacin de procesos
Un proceso puede terminar su ejecucin de forma normal o anormal. La terminacin normal se puede realizar
de cualquiera de las tres formas siguientes:
Ejecutando una sentencia r e t u r n en la funcin m a in .
Ejecutando la funcin e x i t .
Mediante el servicio _ e x i t .
El servicio _ e x i t tiene por misin finalizar la ejecucin de un proceso. Recibe como argumento un valor
entre 0 y 255, que sirve para que el proceso d una indicacin de cmo ha terminado. Como se ver ms ade
lante, esta informacin la puede recuperar el proceso padre que, de esta forma, puede conocer cmo ha ter
minado el hijo. La finalizacin de un proceso tiene las siguientes consecuencias:
Se cierran todos los descriptores de ficheros.
La terminacin del proceso no finaliza de forma directa la ejecucin de sus procesos hijos.
Si el proceso padre del proceso que solicita el servicio se encuentra ejecutando un servicio w a i t o
w a i t p i d (su descripcin se realizar a continuacin), se le notifica la terminacin del proceso.
Si el proceso padre no se encuentra ejecutando un servicio w a i t o w a i t p i d , el cdigo de finaliza
cin del e x i t se salva hasta que el proceso padre ejecute la llamada w a i t o w a i t p i d .
Si la implementacin soporta la seal SIGCHLD, sta se enva al proceso padre.
El sistema operativo libera todos los recursos utilizados por el proceso.
128
0
En realidad, e x i t es una funcin de biblioteca que llama al servicio _ e x i t despus de preparar la termina
cin ordenada del proceso. Cuando un programa ejecuta la sentencia r e t u r n v a l o r ; dentro de la funcinm a in , el efecto es idntico al de e x i t ( v a l o r ) . El e x i t puede usarse desde cualquier parte del programa.
En general, se recomienda utilizar la funcin e x i t en vez del servicio _ e x i t , puesto que es ms por
table y permite volcar a disco los datos no actualizados. La funcin e x i t realiza los siguientes pasos:
Todas las funciones registradas con la funcin estndar de C a t e x i t , son llamadas en orden inver
so a su registro. Si cualquiera de estas funciones llama a e x i t , los resultados no sern portables. La
sintaxis de esta funcin es: i n t a t e x i t ( v o i d ( * f u n c ) ( v o id ) ) ;
Vaca los almacenamientos intermedios asociados a las funciones de entrada/salida del lenguaje.
Se llama al servicio _ e x i t .
Un proceso tambin puede terminar su ejecucin de forma anormal por la recepcin de una seal que
provoca su finalizacin o llamando a la funcin a b o r t . La seal puede estar causada por un evento extemo
(p. ej.: se pulsa CTLR-C), por una seal enviada por otro proceso, o por un error de ejecucin, como, por
ejemplo, la ejecucin de una instruccin ilegal o un acceso ilegal a una posicin de memoria.
Cuando un proceso termina de forma anormal, generalmente, se produce un fichero denominado core
que incluye la imagen de memoria del proceso en el momento de producirse su terminacin y que puede ser
utilizado para depurar el programa.
El programa 3.11 finaliza su ejecucin utilizando la funcin e x i t . Cuando se llama a esta funcin se
ejecuta la funcin f i n , registrada previamente por medio de la funcin a t e x i t .
P rogram a 3.11 Ejemplo de utilizacin de e x i t y a t e x i t .
#include <stdio.h>
#include <stdlib.h>
void fin(void)
{
printf("Fin de la ejecucin del proceso %d\n", getpidO);
}
void main(void)
{
if (atexit(fin) 1= 0)
perror("atexit");
exit(1 );
}
___ :'<J
Ambos servicios permiten a un proceso padre quedar bloqueado hasta que termine la ejecucin de un proceso
hijo, obteniendo informacin sobre el estado de terminacin del mismo.
El servicio w a i t suspende la ejecucin del proceso hasta que finaliza la ejecucin de uno de sus proce
sos hijos y devuelve el identificador del proceso hijo cuya ejecucin ha finalizado. Si s t a t u s es distinto de
NULL, entonces en esta variable se almacena informacin relativa al proceso que ha terminado. Si el hijo
Procesos
129
retorn un valor desde la funcin m a in , utilizando la sentencia r e t u r n , o pas un valor como argumento a
e x i t , ste valor se puede obtener utilizando las macros definidas en el fichero de cabecera s y s / w a i t .h .
Como macros del lenguaje C recuerde que valen 0 para indicar falso y cualquier otro valor para verdadero.
WIFEXITED (s t a t u s ): devuelve un valor verdadero si el hijo termin normalmente.
WEXITSTATUS ( s t a t u s ) : permite obtener el valor devuelto por el proceso hijo en el servicio
e x i t o el valor devuelto en la funcin m a in , utilizando la sentencia r e t u r n . Esta macro slo
puede ser utilizada cuando WIFEXITED devuelve un valor verdadero.
WIFSIGNALED ( s t a t u s ) : devuelve un valor verdadero si el proceso hijo finaliz su ejecucin
como consecuencia de la recepcin de una seal para la cual no se haba programado manejador.
WTERMSIG ( s t a t u s ): devuelve el nmero de la seal que provoc la finalizacin del proceso hijo.
Esta macro slo puede utilizarse si WIFSIGNALED devuelve un valor verdadero.
WIFSTOPPED( s t a t u s ) : devuelve un valor verdadero si el estado fue devuelto por un proceso
hijo actualmente suspendido. Este valor slo puede obtenerse en el servicio w a i t p i d con la opcin
WUNTRACED, como se ver a continuacin.
WSTOPSIG( s t a t u s ) : devuelve el nmero de la seal que provoc al proceso hijo suspenderse.
Esta macro slo puede emplearse si WIFSTOPPED devuelve un valor distinto de cero.
El servicio w a i t p i d tiene el mismo funcionamiento si el argumento p i d es -1 y el argumento o p
t i o n s es cero. Su funcionamiento en general es el siguiente:
Si p i d es -1, se espera la finalizacin de cualquier proceso.
Si p i d es mayor que cero, se espera la finalizacin del proceso hijo con identificador p i d .
Si p i d es cero, se espera la finalizacin de cualquier proceso hijo con el mismo identificador de
grupo de proceso que el del proceso que solicita servicio.
Si p i d es menor que -1, se espera la finalizacin de cualquier proceso hijo cuyo identificador de
grupo de proceso sea igual al valor absoluto del valor de p i d .
El argumento o p t i o n s se construye mediante el OR binario de cero o ms valores definidos en el
fichero de cabecera s y s / w a i t . h. De especial inters son los siguientes:
El programa 3.12 ejecuta un mandato recibido en la lnea de argumentos por la funcin m a in . En este
programa, el proceso padre solicita el servicio w a i t para esperar la finalizacin del mandato. Una vez con
cluida la ejecucin, el proceso padre imprime informacin sobre el estado de terminacin del proceso hijo.
P rogram a 3.12 Programa que imprime informacin sobre el estado de terminacin de un proceso hijo.
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
pid_t pid;
int valor;
pid = fork();
switch(pid) {
case -1 : /* error del forkO */
return 1 ;
case 0 : /* proceso hijo */
130
pid P
padre
padre
pid H
pwJL
pid P pid H
,-------------i Pd H i
e x l t ( ) p -CT^ 1zombie
pid P pid H
Texto
cm m
en
Datos
ezd
cn ; en
tb i
Archivos, tuberas,...
Procesos
131
0 - 0 ( 3 i > J i Q
Figura 3.41 En UNIX el proceso init hereda los procesos hijos que se quedan sin padre.
INTERBLOQUEOS
En un sistema informtico se ejecutan concurrentemente mltiples procesos que, normalmente, no son inde
pendientes, sino que compiten en el uso exclusivo de recursos, y se comunican y sincronizan entre s. El sis
tema operativo debe encargarse de asegurar que estas interacciones se llevan a cabo apropiadamente,
proporcionando la exclusin mutua requerida p o r las mismas. Sin embargo, generalmente, no basta con
esto. Las necesidades de algunos procesos pueden entrar en conflicto entre si provocando que stos se blo
queen indefinidamente. Esta situacin se denomina interbloqueo (en ingls se usa normalmente el trmino
deadlock). En este captulo se estudiar este problema y se analizarn sus posibles soluciones.
Se trata de un problema y a identificado en la dcada de los sesenta y estudiado ampliamente desde
entonces. Sin embargo, aunque pueda parecer sorprendente a priori, ese notable inters en su estudio teri
co no ha tenido una repercusin apreciable en los sistemas operativos reales. La mayora de los sistemas
operativos actuales ignoran en gran parte este problema o, al menos, no lo solucionan de form a general. Es
importante resaltar que este problema ha sido tambin analizado en otras materias ajenas a los sistemas
operativos, como es el caso de las bases de datos, donde si se afronta de una manera radical.
El planteamiento que se va a realizar en este captulo intentar conjugar, dentro de lo posible, los as
pectos tericos del tema con aqullos relacionados con su aplicacin en un sistema real. En prim er lugar, se
presentar el problema de una manera informal, mostrando varios ejemplos del mismo, tanto procedentes
del mbito de la informtica como de otros ajenos a la misma. Despus de esta introduccin, se plantear un
modelo general que perm itir un estudio form al de los interbloqueos. A continuacin, se estudiarn las tres
estrategias usadas para tratarlos: la deteccin y recuperacin, la prevencin y la prediccin. Por ltimo, se
analizar cmo manejan este problema los sistemas operativos reales y se mostrarn ejemplos prcticos de
interbloqueos. Este desarrollo del tema se desglosa en las siguientes secciones:
450
7.1.
El problema de los interbloqueos no se circunscribe nicamente al mundo de la informtica, sino que aparece
en muchos otros mbitos, incluyendo el de la vida cotidiana. De hecho, algunos de los ejemplos utilizados
por los investigadores en este tema estn inspirados en situaciones cotidianas. Un ejemplo de ello es el cono
cido problema de los filsofos comensales, propuesto por Dijkstra en 1965. En esta seccin se presentar un
ejemplo de interbloqueo extrado de la vida real para que sirva como una introduccin intuitiva a este tema.
Uno de los mbitos que proporciona ms ejemplos es el del trfico de vehculos. De hecho, uno de los
objetivos de algunas seales de trfico, e incluso de algunas normas de circulacin, es resolver los posibles
interbloqueos entre los vehculos. Ntese que, en este mbito, el interbloqueo causara la detencin perma
nente de los vehculos implicados. Al fin y al cabo, un atasco de trfico es un caso de interbloqueo.
Como ejemplo, considrese una carretera con dos sentidos de circulacin que atraviesa un largo puente
estrecho por el que slo cabe un vehculo. El interbloqueo se producira cuando dos vehculos atravesando
simultneamente el puente en sentido contrario se encontraran el uno frente al otro sin posibilidad, por tanto,
de continuar. Ntese que cada vehculo posee un recurso (el trozo de puente que ya ha cruzado hasta el mo
mento), pero necesita otro recurso (el trozo de puente que le queda por cruzar) para terminar su labor (cruzar
el puente). El interbloqueo surge debido a que se produce un conflicto entre las necesidades de los dos veh
culos: el recurso que necesita cada vehculo lo posee el otro. Hay que resaltar que otros vehculos que inten
taran cruzar el puente en ese momento en cualquiera de los dos sentidos se quedaran detenidos detrs de
ellos, vindose, en consecuencia, implicados tambin en el interbloqueo. Sobre este ejemplo, se puede plan
tear una primera idea general de cules son las posibles estrategias para tratar este problema:
Deteccin y recuperacin. Una vez detectada la situacin de interbloqueo, uno de los vehculos de
be liberar el recurso que posee para dejar que el otro lo utilice. Una posible recuperacin de esta si
tuacin consistira en seleccionar uno de los sentidos de circulacin, y hacer que el vehculo o
vehculos detenidos en ese sentido dieran marcha atrs hasta el principio del puente, liberando as el
paso en el otro sentido (se est suponiendo que un vehculo tiene capacidad para avanzar marcha
atrs, si no fuera as, habra que tomar una accin ms drstica como tirarlo al ro que pasa por deba
jo del puente). Debera existir una poltica para determinar qu vehculos deben retroceder. Para ello,
se podran tener en cuenta aspectos tan diversos como cunta distancia ha recorrido cada vehculo
dentro del puente, qu velocidad tiene cada vehculo, cul de ellos tiene mayor prioridad (por ejem
plo, en el caso de una ambulancia) o cuntos vehculos hay en cada sentido. Ntese que cada vehcu
lo afectado incurrira en un gasto extra de combustible y de tiempo debido al primer intento frustrado
de cruzar el puente, junto con el recorrido de vuelta hasta el principio del mismo. Esta estrategia, por
tanto, tiene un carcter que se podra considerar destructivo, ya que se pierde parte del trabajo reali
zado por una entidad.
Prevencin o prediccin. Un punto importante a resaltar en este ejemplo, y en general sobre los in
terbloqueos, es que, antes de producirse el interbloqueo propiamente dicho (los vehculos detenidos
frente a frente), existe un punto de no retomo, a partir del cual el interbloqueo es inevitable. En el
ejemplo, habiendo uno o ms vehculos atravesando el puente en un determinado sentido, el punto de
no retomo ocurrira en el momento en que un vehculo entrase en el puente en sentido contrario. A
partir de ese momento, tarde o temprano, se producira un interbloqueo. Las estrategias basadas en la
prevencin o prediccin evitan el interbloqueo asegurando que no se llega a este punto de no retomo.
En el ejemplo, se podra usar para ello un sistema de sealizacin basado en semforos (reales, no
informticos, claro). Ms adelante, se explicar la diferencia que existe entre las estrategias de pre
vencin y las de prediccin. Un ltimo aspecto a destacar es que, aunque estas estrategias no tienen
el carcter destructivo de la anterior, suelen implicar en muchos casos una infrautilizacin de los re
clusos. En el ejemplo planteado, podra ocurrir que una estrategia preventiva basada en el uso de
semforos hiciese que un vehculo tuviera que detenerse en el semforo aunque el puente estuviese
libre.
6.1.
CONCURRENCIA
Proceso A
Proceso B
Proceso C
Tiempo
Figura 6.1 Ejemplo de ejecucin en un sistema multiprogramado con una nica UCP.
Proceso A
C PU 1
Proceso B
CPU 2
Proceso C
Proceso D
Tiempo
Condiciones de carre ra
Este problema surge cuando varios procesos acceden de forma concurrente y sin coordinacin a recursos
compartidos. Para ilustrar este problema se van a presentar dos ejemplos en los que existe un fragmento de
cdigo que puede dar lugar a condiciones de carrera.
Vamos a describir, en primer lugar, un ejemplo que ocurre en un sistema con dos procesos que ejecutan
sobre una misma UCP. Supongamos que se quiere calcular la suma de los n primeros nmeros naturales de
forma paralela, utilizando mltiples threads, cada uno de los cuales se va a encargar de la suma de un subconjunto de todos los nmeros. En la figura 6,3 se presentan de forma grfica dos threads que se encargan de
realizar la suma de los 100 primeros nmeros naturales.
Un thread crea los dos threads encargados de realizar las sumas parciales, cada uno de los cuales ejecu
ta el fragmento de cdigo que se muestra en el programa 6.1.
P rogram a 6.1 Cdigo de la funcin su m a _ jp a rcial.
int suma_total = 0;
void suma_parcial(int ni, int nf) {
int j = 0;
int suma = 0 ;
for (j = ni; j <= nf; j++)
suma = suma + j ;
suma__total = suma_total + suma;
pthread_exit(0);
}
Cada uno de los threads realiza la suma de los nmeros comprendidos entre n i y n f . Una vez calculada
la suma parcial, acumulan en la variable global s u m a _ to ta l el resultado de su suma parcial. Vamos a su
poner que estos dos threads ejecutan de forma concurrente en un sistema con una nica UCP. Hay que hacer
notar que estos threads entran dentro de la clase de procesos cooperantes que comparten el acceso a una va
riable global, la variable s u m a _ to ta l. El problema que se va a describir a continuacin ocurrira de igual
forma en un sistema con dos UCP que ejecutaran de forma simultnea los dos threads anteriores.
(.Rl igual a 0)
(,R2 igual a 1275)
Llegados a este punto, el thread consume su porcin de tiempo y el sistema operativo decide pasar a
ejecutar el otro thread. Para ello, salva el estado del primero y comienza a ejecutar el segundo. En este se
gundo thread el valor de la variable local suma es 3775.
LD .Rl,/suma_total
LD .R2 ,/suma
ADD ,R1,.R2
ST .Rl, /suma_total
(.Rl igual a 0)
(.R2 igual a 3775)
(.Rl igual a 3775)
(suma_total igual a 3775)
Una vez finalizada la ejecucin de este segundo thread, el sistema pasa a ejecutar el primer thread sus
pendido con anterioridad y concluye la ejecucin de la sentencia de suma. Para ello se restaura el estado del
thread, estado que incluye el valor de los registros salvados anteriormente.
ADD .Rl, ,R2
ST.R1, /suma_total
Como se puede observar, el resultado obtenido es incorrecto. Esto se debe a que los dos threads no han
interaccionado ni colaborado correctamente entre s, debido a que no han sincronizado sus acciones. En con
creto no se han puesto de acuerdo en la forma de ejecutar la sentencia:
suma_total = suma_total + suma
Lo que ha ocurrido en el ejemplo anterior se denomina condicin de carrera. Una condicin de c a rre ra
ocurre cuando varios procesos acceden a recursos o datos de forma concurrente y suTcoonJinacin, y el resul
tado final depende del orden de ejecucin de las instrucciones. En efecto, dependiendcTde la ejerrin Hpfs
//;reas_l_Y_2_(yase la figura 6.3) se obtendran resultados distintos. As, por ejemplo, si los dos threads qo
hubieran entrelazado sus ejecuciones se hubiera obtenido el resultado correcto. El primer thread acumulara
en la variable s u m a _ to ta l el valor 1275 y, a continuacin, lo hara el siguiente thread dando un valor final
de 5050.
Este problema se debe a que la sentencia anterior constituye un cdigo que puede dar lugar a condicio
nes de carrera. Para evitar que se produzcan condiciones de carrera, el cdigo anterior debe ejecutarse en
exclusin m u tu a, de forma atm ica, es decir, de forma complet e indivisible. Esto es, cuando un proceso o
thread empiece a ejecutar cdigo que puede dar lugar a condiciones de carrera, ningn otro proceso podr
acceder a los datos o recursos compartidos. Esta seccin debe ejecutarse de forma atmica. Para ello los pro
cesos deben sincronizar sus ejecuciones y realizar una ejecucin ordenada, lo que implica que unos procesos
deben esperar a ejecutar el cdigo con condiciones de carrera mientras haya otro accediendo al recurso o dato
compartido. Este proceso como se ha podido comprobar ocurre incluso a pesar de que las instrucciones
mquina ejecutan de forma atmica, el hecho ocurre debido a que las sentencias de alto nivel pueden dar lu
gar a diferentes instrucciones mquina que en su totalidad no tienen por qu ejecutar de forma atmica e in
divisible.
Procesador 2
Procesador 1
Registro o
posicin de memoria
Lee PID
PID = 500
- j
PID = 500
Incrementa y
I asigna PID
PID = 501
Escribe PID
PID = 500
PID = 501
PID = 501
Incrementa y
asigna PID
PID = 501
Escribe PID
6.2.
Las necesidades de comunicacin y sincronizacin entre procesos se plantean en una serie de situaciones
clsicas de comunicacin y sincronizacin. Estos modelos estn presentes en numerosos escenarios reales.
Estos modelos junto con sus problemas se presentan a continuacin, para demostrar la necesidad de comuni
car y sincronizar procesos. Todos estos modelos se resolvern a lo largo del presente captulo mediante los
diferentes mecanismos de comunicacin y sincronizacin que ofrecen los sistemas operativos.
Interbloqueos
7.2.
451
Como se ha podido apreciar en el ejemplo anterior, un escenario donde pueden aparecer interbloqueos se
caracteriza por la existencia de un conjunto de entidades activas (los vehculos) que utilizan un conjunto de
recursos (el puente estrecho) para llevar a cabo su labor. De manera similar, en un sistema informtico exis
tirn estos dos mismos papeles:
Las entidades activas, que se corresponden, evidentemente, con los procesos existentes en el sistema.
Es importante resaltar que en un sistema operativo que proporcione threads, stos representarn las
entidades activas, ya que son la unidad de ejecucin del sistema.
Los recursos existentes en el sistema, que sern utilizados por los procesos para llevar a cabo su la
bor. En un sistema existe una gran variedad de recursos. Por un lado, recursos fsicos, tales como
procesadores, memoria o dispositivos. Por otro, recursos lgicos, tales como ficheros, semforos,
mutex, cerrojos, mensajes o seales.
Dada la diversidad de recursos existentes en un sistema y su diferente comportamiento con respecto al
interbloqueo, a continuacin se establecer una clasificacin de los distintos recursos, que permitir delimitar
el alcance del estudio de los interbloqueos que se plantear en este captulo. Asimismo, se mostrarn algunos
ejemplos de interbloqueos en un sistema informtico.
Proceso P2
Solicita(C)
Solicita(I)
Uso de los recursos
Libera(I)
Libera(C)
Solicita(I)
Solicita(C)
Uso de los recursos
Libera(C)
Libera(I)
Durante la ejecucin de estos procesos en un sistema multiprogramado, se puede producir un interbloqueo, ya que se puede llegar a una situacin en la que el primer proceso tiene asignada la cinta y est blo
queado esperando por la impresora, mientras que el segundo tiene la impresora pero est esperando por la
452
cinta. Dado que se trata del primer ejemplo de interbloqueo en un sistema informtico que se presenta, se
mostrar a continuacin un posible orden de ejecucin de los procesos que producira el interbloqueo:
1.
Pi
2.
P2
3.
P2
4.
Pi
s o lic ita (C )
s o lic ita (I)
s o l i c i t a (C)
s o l i c i t a (I )
En un sistema con un nico procesador, este orden de ejecucin entrelazado, caracterstico de los interbloqueos, se debera a que se producen cambios de contexto en los instantes correspondientes. En un multiprocesador, podra ocurrir debido a que cada proceso ejecuta en un procesador diferente.
Es interesante resaltar que no todos los posibles rdenes de ejecucin de estos dos procesos causaran
un interbloqueo. As, por ejemplo, si el orden de ejecucin fuera el siguiente:
1.
2.
3.
4.
5.
6.
7.
8.
Px *
P j:
P2:
Px:
P2:
P i:
P2:
P2:
s o l i c i t a (C)
s o lic ita (I)
s o lic ita d )
l i b e r a (I)
s o l i c i t a (C)
l i b e r a (C)
l i b e r a (C)
l i b e r a ( I)
- se
> se
> se
-> se
Los dos procesos habran terminado realizando su labor sin producirse interbloqueos. Ntese que hay
que diferenciar claramente entre el bloqueo de un proceso debido a la falta de un recurso (como ocurre con
P2 en los pasos 3 y 5 anteriores), que terminar cuando dicho recurso est disponible, y el interbloqueo, que
implica el bloqueo indefinido de los procesos involucrados.
Tambin pueden ocurrir interbloqueos en los que slo intervenga un proceso. Suponga que un proceso
que ya tiene asignado un cerrojo sobre un mutex vuelve, por error, a intentar establecerlo.
Proceso P
lock(M)
lock(M)
En algunas implementaciones, el proceso se quedar en estado de interbloqueo. Otras, sin embargo, de
tectaran este caso trivial de interbloqueo y devolveran un error en la siguiente llamada (la aclaracin 7.1
presenta un tipo de mutex especialmente diseado para evitar este tipo de problemas: los mutex recursivos).
En cuanto a los recursos consumibles, stos se caracterizan porque dejan de existir una vez que un
proceso los usa. Un proceso genera o produce el recurso y el otro lo utiliza consumindolo. En esta categora
se encuentran, bsicamente, los recursos lgicos relacionados con la comunicacin y sincronizacin de pro
cesos. Algunos ejemplos seran los mensajes, las seales o los semforos (ms adelante, se explicar por qu
se considera que los mutex son recursos reutilizables y, en cambio, los semforos son consumibles). As, por
ejemplo, en el caso de un mensaje, existe un proceso que genera el recurso (el emisor del mensaje) y otro que
lo consume cuando lo recibe (el receptor del mensaje). A continuacin, se muestra un ejemplo de interblo
queo entre procesos que se comunican mediante mensajes.
Supngase un sistema de comunicacin que proporciona funciones para enviar y recibir mensajes en las
que se especifica como primer parmetro el proceso al que se le quiere enviar o del que se quiere recibir, res
pectivamente, y como segundo el mensaje. Adems, suponga que en este sistema el envo del mensaje no
puede causar el bloqueo del proceso, pero la recepcin s. Considere que se ejecutan en este sistema los si
guientes tres procesos:
Proceso Px
Enviar(P3,A)
Recibir(P3,B)
Enviar(P2,C)
Proceso P2
Recibir(P1(D)
Enviar(P3,E)
Proceso P3
Recibir(P2,F)
Enviar(P1(G)
Recibir(Pj, H)
Interbloqueos
453
La ejecucin de estos tres procesos producira un interbloqueo de los mismos, con independencia de
cul sea su orden de ejecucin. El proceso P3 se quedara bloqueado indefinidamente esperando el mensaje
de P2, ya Que ste no lo puede mandar hasta que no reciba un mensaje de Px, que, a su vez, no puede hacerlo
porque debe antes recibir un mensaje de P3. Cada proceso se queda bloqueado esperando un mensaje que
slo puede enviarlo otro de los procesos implicados, lo que no puede ocurrir, ya que dicho proceso est tam
bin bloqueado esperando un mensaje. Es importante resaltar que en este ejemplo, a diferencia del primero,
se produce el interbloqueo con independencia del orden en que se ejecuten los procesos. Se trata, por tanto,
de un interbloqueo que se podra denominar estinctural, puesto que se debe a un error en el diseo del patrn
de comunicaciones entre los procesos. En una aplicacin relativamente compleja que conste de mltiples
procesos comunicndose entre s, pueden darse errores de este tipo que sean bastante difciles de detectar. En
un sistema general, los procesos usarn tanto recursos reutilizables como consumibles y, por tanto, como se
puede apreciar en el siguiente ejemplo, pueden aparecer interbloqueos en los que estn implicados recursos
de ambos tipos.
Proceso Pj.
Solicita(C)
Enviar <P2,A)
Libera(C)
Proceso P2
Solicita(C)
Recibir (Pj.,B)
Libera(C)
Si durante la ejecucin concurrente de estos dos procesos el proceso P2 obtiene el recurso C, se produ
cir un interbloqueo entre los dos procesos, ya que P2 nunca recibir el mensaje, puesto que P3 est bloquea
do esperando que se libere el recurso C. Ntese que si, en cambio, fuera el proceso Px el que obtuviera el
recurso C, no se producira un interbloqueo.
No hay una solucin general eficiente para tratar el problema de los interbloqueos con ambos tipos de
recursos debido, principalmente, a las caractersticas especficas que presentan los recursos consumibles. Por
ello, a partir de este momento, la exposicin se ocupar solamente de los recursos reutilizables, que son en
los que se centra la mayor parte de la literatura dedicada a este tema.
Aclaracin 7.1. Cuando se desarrolla una aplicacin multitliread de una cierta entidad, en la que participan
varios programadores, es frecuente que puedan producirse errores en los que un thread que ya tiene asignado
un mutex vuelve a intentar establecerlo. Aunque se detecte este problema y se evite el interbloqueo del thread
consigo mismo, el funcionamiento de la aplicacin ser errneo. Para entenderlo, vamos a suponer que en el
programa existe una determinada funcin F que durante su ejecucin usa un mutex M: .
F ()
lock(M)
unlock(M)
Si un thread que ya tiene asignado ese mutex invoca esta funcin, o bien entra en un interbloqueo, o bien se
producir un error en l llamada l o c k de la funcin, en caso de que la implementacin compruebe ese inter
bloqueo trivial. En ese ltimo caso, si el cdigo de la funcin no comprueba el error devuelto por l o c k y
prosigue su ejecucin, la llamada u n l o c k dentro de la funcin no fallar, sino que liberar el mutex, por lo
que al retom ar de la funcin, el thread que la invoc ha perdido, errneamente, el uso del mutex. Los mutex
recursivos resuelven este problema, ya que en este nuevo tipo de mutex, una llamada l o c k de un proceso
que ya tiene asignado el mutex no lo bloquea ni le devuelve un error, sino que, simplemente, actualiza un
contador asociado al mutex que refleja cuntos cerrojos sobre el mutex ha establecido el proceso que lo tiene
asignado. El mutex slo se liberar cuando se produzcan el mismo nmero de llamadas i m lo c k .
454
Interbloqueos
455
que las unidades asignadas, sean cuales sean, se deben corresponder con posiciones de memoria contiguas. A
continuacin, se muestra un ejemplo de interbloqueo en el uso de la memoria.
Considrese la ejecucin de los dos procesos siguientes, suponiendo que se dispone inicialmente de
450KB de memoria.
Proceso P*
Solicita(100K)
Solicita(100K)
Solicita(100K)
Proceso P2
Solicita(200K)
Solicita(100K)
Si se produce un orden de ejecucin tal que se satisfacen las dos primeras solicitudes del primer proce
so y la primera del segundo, se producira un interbloqueo, puesto que la cantidad de m emoria libre (50KB)
no es suficiente para cumplir con ninguna de las peticiones pendientes.
Aunque ya se coment previamente que los recursos consumibles quedaban fuera del alcance de esta
exposicin, es interesante resaltar que tambin pueden existir mltiples unidades asociadas a un recurso de
este tipo. As, por ejemplo, un semforo se puede considerar un recurso consumible que tiene tantas unidades
como indica el contador asociado al mismo (vase la aclaracin 7.2).
Aclaracin 7.2. Puede parecer sorprendente que, a la hora de clasificar los recursos, se hayan considerado de
forma diferente los mutex y los semforos. Los primeros se han clasificado como reutilizables, mientras que
los segundos como consumibles. A qu se debe esta diferencia? Un mutex responde al patrn de un recurso
reutizable exclusivo con un solo ejemplar asociado. Una vez creado, los procesos lo usan de forma exclusi
va hasta que se destruye. Con este mecanismo de sincronizacin se producen situaciones de interbloqueo
similares a la planteada en el ejemplo anterior, que mostraba dos procesos que usaban una cinta y una impre
sora. En el siguiente ejemplo, simplemente se han sustituido esos dos dispositivos por dos mutex.
Proceso Pj.'
Proceso P2
lockMi)
lock(M2)
lock(M2)
lock (Mi)
unlock (M2)
unlock (Mx)
unlock (Mi)
unlock (M2)
Como en el caso anteriormente citado, puede darse un interbloqueo si los dos procesos consiguen cerrar el
primer mutex y se quedan bloqueados esperando por el segundo. Ntese que este interbloqueo se producira
con independencia de lo que puedan hacer otros procesos existentes en el sistema. En cuanto a los semforos,
su patrn de comportamiento corresponde cn un recurso consumible con tantas unidades asociadas como
indique el contador del semforo. Cuando un proceso realiza una operacin s i g n a l sobre un semforo se
est produciendo una nueva unidad de ese recurso, mientras que cuando hace un w a i t se est consumiendo
una. El comportamiento, por tanto, de este tipo de recursos es diferente al de los mutex. As, considere qu
ocurrira si en el ejemplo anterior se sustituyen los mutex por semforos iniciados con un contador igual a l :
Proceso Px
Proceso P2
wait (Si)
wait (S2)
wait(S2j
wait (Si)
signal(S2)
signal (Si)
signal(Sx)
signal(S2)
fC'
456
Aparentemente, los procesos mantienen el mismo comportamiento. Sin embargo, hay un aspecto sutil muy
importante. En este caso, el comportamiento puede depender de otros procesos externos, que podran generar
nuevas unidades de estos dos recursos (o sea, podran incluir llamadas a s i g n a l sobre cualquiera de los dos
semforos). Por tanto, el posible interbloqueo detectado en el ejemplo anterior, podra no darse en este caso
siempre que algn proceso externo lo rompiera. Ntese que ste es uno de los motivos que complican el tra
tamiento general de los interbloqueos con recursos consumibles._______________________ _________________
Recursos expropiables o no
Algunas de las estrategias para el tratamiento de los interbloqueos que se estudiarn a lo largo de este captu
lo implicarn la expropiacin de recursos, o sea, la revocacin de un recurso asignado a un proceso, mientras
ste lo est usando, para otorgrselo a otro proceso. Para evitar la prdida de informacin, esta expropiacin
implica salvar de alguna forma el trabajo que llevaba hecho el proceso con el recurso expropiado. La posibi
lidad de llevar a cabo esta expropiacin de forma relativamente eficiente va a depender de las caractersticas
especficas del recurso, pudindose, por tanto, clasificar los recursos de acuerdo a este criterio.
Algunos recursos tienen un carcter no expropiable, ya que, o bien no es factible esta operacin o, en
caso de serlo, sera ineficiente. Por ejemplo, no tendra sentido quitarle a un proceso un trazador grfico
cuando lo est usando, porque con ello se perdera todo el trabajo realizado.
Otros recursos, sin embargo, pueden expropiarse de manera relativamente eficiente. Considrese, por
ejemplo, el caso de un procesador. Cada vez que se produce un cambio de proceso, el sistema operativo est
expropiando el procesador a un proceso para asignrselo a otro. La expropiacin de un procesador implicara
nicamente salvar el estado del mismo en el bloque de control del proceso correspondiente, para que as ste
pueda seguir ejecutando normalmente cuando se le vuelva a asignar. Obsrvese que, conceptualmente, el
procesador, como cualquier otro recurso reutilizable de uso exclusivo, puede verse envuelto en interbloqueos.
Suponga, por ejemplo, una situacin en la que existe un proceso que tiene asignada una cinta y est en estado
listo para ejecutar (o sea, no tiene asignado el procesador). Si el proceso que est en ejecucin (o sea, que
tiene asignado el procesador) solicita la cinta, se producir un interbloqueo, ya que cada proceso necesita un
recurso que posee el otro. Este interbloqueo potencial no ocurre en la prctica, puesto que en un sistema multiprogramado, cuando el proceso en ejecucin se bloquea, se asigna automticamente el procesador a otro
proceso (gracias al carcter expropiable de este recurso).
En los sistemas que utilizan un dispositivo de almacenamiento secundario (generalmente un disco) co
mo respaldo de la memoria principal (como son los sistemas con intercambio o con memoria virtual, que se
estudiaron en el captulo dedicado a la gestin de memoria), el recurso memoria tambin es expropiable.
Cuando se requiera expropiar a un proceso parte o toda la memoria que est usando, se copiar el contenido
de la misma en el dispositivo de respaldo, dejndola libre para que pueda usarla otro proceso. El ejemplo de
interbloqueo en el uso de la memoria planteado previamente podra resolverse de esta forma. Ntese que di
cha operacin de copia tiene un coste asociado que afectar al rendimiento del sistema.
El anlisis realizado en esta seccin ha permitido clasificar los diferentes tipos de recursos y delimitar
cules de ellos van a considerarse en el resto de esta exposicin, a saber, los recursos reutilizables exclusivos
compuestos por una o ms unidades. En la siguiente seccin se definir un modelo formal del sistema bajo
estas restricciones que servir de marco de referencia para poder caracterizar el problema del interbloqueo.
7.3.
Desde el punto de vista del estudio del interbloqueo, en un sistema se pueden distinguir las siguientes entida
des y relaciones:
Un conjunto de procesos (o threads).
Un conjunto de recursos reutilizables de uso exclusivo. Cada recurso consta, a su vez, de un conjunto
de unidades.
Interbloqueos
457
Un primer conjunto de relaciones entre procesos y recursos que define qu asignaciones de recursos
estn vigentes en el sistema en un momento dado. Esta relacin define si un proceso tiene asignadas
unidades de un determinado recurso y, en caso afirmativo, cuntas.
Un segundo conjunto de relaciones entre procesos y recursos que define qu solicitudes de recursos
estn pendientes de satisfacerse en el sistema en un momento dado. Esta relacin define si un proce
so tiene unidades de u determinado recurso pedidas y no concedidas, y, en caso afirmativo, cuntas.
Estos dos conjuntos de relaciones no pueden tomar cualquier valor, sino que deben cumplir las siguien
tes restricciones de coherencia para que un estado de asignacin de recursos sea vlido:
1.
2.
Restriccin de asignacin: El nmero total de unidades asignadas de un recurso tiene que ser me
nor o igual que el nmero de unidades existentes del mismo (no se puede dar ms de lo que hay).
Restriccin de solicitud: El nmero total de unidades de un recurso solicitadas (tanto asignadas
como pendientes de asignar) por un proceso en un determinado momento tiene que ser menor o
igual que el nmero de unidades existentes del recurso. Ntese que esta restriccin asegura que
ningn proceso quiere usar en un momento dado ms unidades de un recurso que las existentes.
De manera general e independientemente del tipo de cada recurso en particular o de un sistema operati
vo especfico, se van a considerar dos funciones abstractas para trabajar con los recursos que, dado su carc
ter genrico, permiten representar cualquier operacin especfica presente en un sistema operativo
determinado. A continuacin, se especifican estas funciones (la generalidad de estas funciones supera lo que
normalmente proporcionan los sistemas operativos, como se analiza en la aclaracin 7.3).
Solicitud (S (Rj. [Ui] , . . . ,Rn [Un] )): Permite que un proceso, que, evidentemente, no est blo
queado, pida varias unidades de diferentes recursos (Ux unidades del recurso 1, U2 del recurso 2,
etctera). Si todos los recursos solicitados estn disponibles, se conceder la peticin asignando al
proceso dichos recursos. En caso contrario, se bloquear el proceso sin reservar ninguno de los re
cursos solicitados, aunque algunos de ellos estn disponibles. El proceso se desbloquear cuando to
dos estn disponibles (como resultado de una o varias operaciones de liberacin). Obsrvese que se
asume un modo de operacin que se podra calificar como de todo-o-nada: hasta que no estn todos
los recursos disponibles no se asigna ninguno (el ejercicio 7.5 plantea al lector analizar las repercu
siones de modificar este comportamiento).
Liberacin (L{ (Rx [Ui] , . . . ,R n [Un] )): Permite que un proceso, que, evidentemente, no est
bloqueado, libere varias unidades de diferentes recursos que tenga asignadas. La liberacin puede
causar que se satisfagan solicitudes pendientes de otros procesos, provocando su desbloqueo.
Existen diversas maneras de representar esta informacin. Aunque todas las representaciones de este
modelo son lgicamente equivalentes, es conveniente mostrar diferentes alternativas, puesto que un esquema
de representacin puede ser ms adecuado que otro para expresar un determinado algoritmo de tratamiento
del interbloqueo. En concreto, se han seleccionado las dos representaciones ms habituales: el grafo de asig
nacin de recursos y la representacin matricial.
Aristas de asignacin que relacionan recursos con procesos. Una arista entre un recurso R* y un
proceso Pj indica que el proceso tiene asignada una unidad de dicho recurso.
Aristas de solicitud que relacionan procesos con recursos. Una arista entre un proceso P i y un re
curso Rj indica que el proceso est esperando la concesin de una unidad de dicho recurso.
458
Aclaracin 7.3. En un sistema real, generalmente, no hay una nica funcin para solicitar recursos o liberar-'los. Dada la gran variedad y heterogeneidad de los recursos, existen servicios especficos para distintos tipos
de recursos. Algunos ejemplos de UNIX seran los siguientes: o p e n y c i s e para el acceso a dispositivos;^
p t h r e a d _ m u t e x _ l o c k y p t h r e a d _ m u t e x _ u n l o c k para manejar mutex, y f c n t l o l o c k f paf|
establecer y quitar cerrojos en ficheros, como se estudiar en el captulo 9. Adems de esta diversidad, otrv
factor que diferencia a las funciones genricas propuestas de las reales es su mayor funcionalidad. Normal
mente, los servicios ofrecidos por los sistemas operativos no permiten solicitar o liberar mltiples recursos
simultneamente. Existen algunos ejemplos reales de servicios que s tienen ese comportamiento, aunque
habitualmente no son tan genricos, no pudindose aplicar a todos los tipos de recursos del sistema. As, por
ejemplo, como se vio en el captulo de comunicacin y sincronizacin de procesos, el servicio W a itF o r M u l t i p l e O b j e c t s de Windows permite solicitar mltiples recursos, tanto correspondientes con elemen-|
tos de sincronizacin como relacionados con la terminacin de procesos o threads (ntese que la
sincronizacin de un proceso con otro que termina se corresponde tambin con una situacin de uso de recur
sos y, por tanto, puede implicar interbloqueos). Sin embargo, a diferencia de la funcin de solicitud abstracta!
especificada anteriormente, este servicio permite especificar dos modalidades de comportamiento: un modo
de operacin todo-o-nada, similar al de la funcin abstracta, y un modo alternativo, en el que la solicitud sel
satisface en cuanto haya al menos un recurso disponible. Se podra considerar que el primer modo de operaTi
cin es una solicitud con un comportamiento lgico Y, mientras que el segundo sigue un modelo lgico 0 :|
Dado que la literatura sobre interbloqueos no ha tratado este segundo modelo, esta exposicin se centrar
nicamente en el primero. En el caso de UNIX, un ejemplo de operaciones que permiten solicitar o liberar*
mltiples recursos simultneamente seran las proporcionadas por los semforos de System V, que permiten
trabajar con vectores de semforos. Por lo que se refiere a servicios que tengan un comportamiento lgico O
se podra considerar como ejemplo la funcin s e l e c t , que permite esperar que se produzca un determinado:
evento en al menos un descriptor del conjunto especificado. Un ltimo aspecto a destacar es que, como se
analizar ms adelante, el uso de operaciones que permitan solicitar mltiples recursos simultneamente fa-;;
vorece el desarrollo de programas libres de interbloqueos.________ __________
- . ' v
Las restricciones de coherencia anteriormente especificadas se plasmaran en el grafo de asignacin de
recursos de la siguiente manera:
Restriccin de asignacin: El nmero de aristas que salen de un recurso debe ser menor o igual que
su inventario.
Restriccin de solicitud: Se debe cumplir que por cada pareja proceso i y recurso j , el nmero de
aristas de asignacin que van de Rj a Pt ms el nmero de aristas de solicitud que conectan Pi a Rj
sea menor o igual que el inventario.
A partir de la especificacin de las funciones genricas de solicitud y liberacin, se puede analizar
cmo afectara su procesamiento al grafo que representa el estado del sistema.
Solicitud del proceso i de Ux unidades del recurso 1, U2 del recurso 2, etc. Se presentan dos situacio
nes dependiendo de si todos los recursos pedidos estn disponibles o no.
Si no lo estn, se bloquea el proceso aadiendo al grafo, por cada recurso pedido j , tantas aris
tas desde el nodo PAhasta Rj como unidades se hayan solicitado (Uj). Cuando el proceso pos
teriormente se desbloquee al quedar disponibles todos los recursos requeridos, se eliminarn
del grafo todas estas aristas de solicitud y se aadirn las mismas aristas de asignacin que en
el caso de que los recursos hubiesen estado disponibles desde el principio.
Si estn disponibles, ya sea desde el principio o posteriormente, se aaden al grafo por cada
recurso pedido j tantas aristas desde el nodo Rj hasta P como unidades se hayan solicitado
(Uj).
Liberacin por parte del proceso i de Uj. unidades del recurso 1, U2 del recurso 2, etc. Por cada recur
so liberado j , se eliminan del grafo tantas aristas desde el nodo Rj hasta Pi como unidades se hayan
dejado libres (Uj).
Interbloqueos
459
Px :
P2 :
P2 :
P3 :
so
so
so
so
lic
lic
lic
lic
ita
ita
ita
ita
(Rj [2 ]
(Rj [1 ]
(Rx [1 ]
(R2 [1 ]
)
)
)
El grafo que representa la situacin del sistema despus de ejecutarse esta secuencia es el siguiente:
N={Pi, P2, P3, R,(2), R2(3), R3(2)}
A={Ri>P1, Rj>P], R2*P2i P2~^Rl) R2~^*3}
Para poder entender de una forma intuitiva el estado de un sistema, es conveniente establecer una repre
sentacin grfica del grafo de asignacin de recursos. La convencin que se suele utilizar es la siguiente:
Cada proceso se representa con un crculo.
Cada recurso con un cuadrado. Dentro del cuadrado que representa a un determinado recurso, se di
buja un crculo por cada unidad existente del recurso.
Las aristas de solicitud se representan como arcos que van desde el proceso hasta el cuadrado que
representa al recurso, mientras que las aristas de asignacin se dibujan como arcos que unen el crcu
lo que representa una unidad determinada del recurso con el proceso correspondiente.
Siguiendo esta convencin, en la figura 7.1 se muestra la representacin grfica del grafo del ejemplo
anterior. Continuando con el ejemplo, considrese que, a continuacin se realizan las siguientes peticiones:
5.
6.
P3 : s o l i c i t a (R2 [1 ] )
Px : s o l i c i t a (R2 [1 ] , R3 [2 ] ) - se bloquea, pues uno de los recursos no est disponible
El grafo que representa la situacin del sistema despus de ejecutarse esa secuencia es el siguiente:
N ={P1,P 2,P 3, R 1(2 ),R 2(3 ),R 3(2)}
A={Ri>P[, Ri>P], R2>P2, P2>Ri, R2>P3, R2-P 3, P i~>R2, P i>R3, P j>R3}
La figura 7.2 muestra la representacin grfica de este grafo resultante.
Generalmente, si en el sistema slo hay una unidad de cada recurso, se prescinde de los pequeos crcu
los que representan los ejemplares del recurso y se dibujan las aristas de asignacin como arcos que unen el
460
Px :
2.
3.
4.
5.
6.
P2 : s o l i c i t a (R2)
P2 : s o l i c i t a ( R i )
P3 : s o l i c i t a (R2)
P4 : s o l i c i t a (R3)
Px : s o l i c i t a (R2)
s o l i c i t a (Rx)
> se bloquea, puesto que el recurso no est disponible
> se bloquea, puesto que el recurso no est disponible
> se bloquea, puesto que el recurso no est disponible
El grafo que representa la situacin del sistema despus de ejecutarse esa secuencia es el siguiente:
N ={P|,P2,P3,P4,R|(1).R 2(1),R3(1)}
A={R |>P|, R2>P2) ?2~^P-I) P3~^P-2i P-3- ^P-ti P 1^R-2}
La figura 7.3 muestra la representacin grfica de este grafo de asignacin de recursos.
Interbloqueos
2 0 0
lo 1 0
[ OI O
[0
0 0
s= 1 0 0
lo 0 0
461
E= [2 3 2J D=[o 1
de cada recurso. Siendo p el nmero de procesos existentes (o sea,p = | P | ) y r el nmero de recursos diferen
tes que hay en el sistema (o sea, r= | R | ), el significado de las estructuras de datos es el siguiente:
Matriz de asignacin A de dimensinp x r. La componente A [ i , j ] de la matriz especifica cuntas
unidades del recurso j estn asignadas al proceso i.
Matriz de solicitud S de dimensin p x r. La componente S [ i , j ] de la matriz especifica cuntas
unidades del recurso j est esperando el proceso i que se le concedan.
Vector de recursos existentes E de dimensin r. La componente R [ i ] especifica cuntas unidades
del recurso i existen.
En este tipo de representacin, las restricciones de coherencia del sistema implicaran lo siguiente:
1.
2.
Restriccin de asignacin: Se debe cumplir para cada recurso i que la suma de la columna i de la
matriz A ( a [ j , i ] , para j 1, ..., p) sea menor o igual que el nmero de unidades existentes de
dicho recurso (E [ i ] ).
Restriccin de solicitud: Se tiene que verificar para cada proceso i y recurso j la siguiente expre
sin: A [ i , j ] + S [ i , j ] E [ j ] .
Cuando se utiliza una representacin matricial, las repercusiones de las operaciones de solicitud y libe
racin sobre las estructuras de datos que modelan el sistema seran las siguientes:
Solicitud del proceso i de Ui unidades del recurso 1, U2 del recurso 2, etc. Se presentan dos situacio
nes dependiendo de si todos los recursos pedidos estn disponibles o no.
Liberacin por parte del proceso i de Ux unidades del recurso 1, U2 del recurso 2, etc. Por cada recur
so liberado j , se restan de la matriz de asignacin las unidades liberadas: A [ i , j ] = A [ i , j ] - Uj.
Estas estructuras son suficientes para reflejar el estado del sistema. Sin embargo, para simplificar la es
pecificacin de algunos algoritmos que se expondrn ms adelante, es til usar un vector de recursos dispo
nibles D, que refleje el nmero de unidades de cada recurso disponibles en un momento dado. Ntese que
este vector no es estrictamente necesario, ya que su valor se puede deducir directamente a partir de la matriz
de asignacin A y del vector de recursos existentes E: D [ i ] = E [ i ] - D a [ j , i ] , para j = 1, ...,p.
Para hacer ms concisa la especificacin de los algoritmos, se utilizar a partir de ahora la siguiente no
tacin compacta:
Dada una matriz A, el valor A [ i ] representa un vector que corresponde con la fila i-sima de dicha
matriz.
Dados dos vectores A y B de longitud n, se considera que A < B s i A [ i ] < B [ i ] para todo/ = 1,
..., n.
Si se utiliza este modo de representacin para el ejemplo mostrado en la figura 7.1, se obtienen como
resultado las estructuras de datos que aparecen en la figura 7.4.
462
0 12
10 0
ooo
E [2 3 2}D= [o O 2)
'M
m
7.4.
Una vez establecido el modelo del sistema, parece que ya es momento de intentar definir ms formalmente el
interbloqueo para poder as caracterizarlo. Una posible definicin de interbloqueo sera la que se presenta a
continuacin:
Un conjunto de procesos est en interbloqueo si cada proceso est esperando un recurso que slo puede litr'
rar (o generar, en el caso de recursos consumibles) otro proceso del conjunto.
Normalmente, cada proceso implicado en el interbloqueo estar bloqueado esperando un recurso, pero
esto no es estrictamente necesario, ya que el interbloqueo tambin existira aunque los procesos involucrados
realizasen una espera activa. La espera activa tiene como consecuencia un uso innecesario del procesador,
pero, por lo que se refiere a los interbloqueos, no implica ninguna diferencia.
Hay que resaltar que existe cierta confusin con el trmino interbloqueo y, a veces, se usa en situacio
nes que no corresponden con su definicin. A continuacin, se plantean dos errores habituales a la hora de
aplicar este trmino:
Un conjunto de procesos compite por el uso de un recurso y un subconjunto de los mismos sufre
inanicin, no pudiendo obtener dicho recurso. Aunque haya procesos esperando indefinidamente pa
ra usar un recurso, no se trata de una situacin de interbloqueo, dado que slo hay un recurso y est
siendo usado por sucesivos procesos. El problema se debe a una poltica de asignacin de recursos
que no es equitativa.
Un conjunto de procesos compite por el uso de un recurso y, debido a un mal diseo del protocolo de
asignacin de recursos, no se cumple la condicin de progreso, y ninguno de ellos consigue obtener
acceso al recurso. Nuevamente, no se trata de un interbloqueo, sino de un problema en la poltica de
asignacin de recursos.
1
0
0
0
0
1
0
0
0
0
0
1
0
1
0
0
1
0
1
0
0
0
0
0
E= [l 1 l] D= [ 0 ]
31
fS
Interbloqueos
463
A partir de la definicin, es preciso caracterizar un interbloqueo. Coffinan identific las siguientes con
diciones como necesarias para que se produzca un interbloqueo:
1.
2.
3.
4.
Exclusin mutua. Los recursos implicados deben usarse en exclusin mutua, o sea, debe tratarse de
recursos de uso exclusivo. Como se analiz previamente en esta exposicin, los recursos comparti
dos no estn involucrados en interbloqueos.
Retencin y espera. Cuando no se puede satisfacer la peticin de un proceso, ste se bloquea man
teniendo los recursos que tena previamente asignados. Se trata de una condicin que refleja una
forma de asignacin que se corresponde con la usada prcticamente en todos los sistemas reales.
Sin expropiacin. No se deben expropiar los recursos que tiene asignado un proceso. U n proceso
slo libera sus recursos voluntariamente.
Espera circular. Debe existir una lista circular de procesos, tal que cada proceso en la lista est es
perando por uno o ms recursos que tiene asignados el siguiente proceso.
Estas cuatro condiciones no son todas de la misma ndole. Las tres primeras tienen que ver con aspectos
estticos del sistema, tales como qu caractersticas tienen que tener los recursos implicados o cmo debe ser
la poltica de asignacin de recursos. Sin embargo, la condicin de espera circular refleja cmo debe ser el
comportamiento dinmico de los procesos para que se produzca el interbloqueo.
Es importante resaltar que se trata de condiciones necesarias pero no suficientes (o sea, que el cumpli
miento de las condiciones no asegura la presencia del interbloqueo, pero para que exista un interbloqueo tie
nen que cumplirse). Sirvan como ejemplo las dos situaciones estudiadas previamente. En ambos casos se
cumplen las cuatro condiciones (las tres primeras se satisfacen debido a que corresponden con las suposicio
nes que se han hecho sobre el sistema) y, sin embargo, como se analizar ms adelante, slo en el segundo
existe un interbloqueo. En los dos ejemplos, correspondientes a las figuras 7.2 y 7.3 respectivamente, se pue
de identificar la siguiente lista circular de espera:
Px est esperando por un recurso que mantiene P2, que, a su vez, est esperando por un recurso asig
nado a Pi.
Adems de por tratarse de una resea histrica casi obligatoria, estas condiciones necesarias son intere
santes porque, como se analizar ms adelante, sirven de base para el desarrollo de estrategias de prevencin
de interbloqueos. Sin embargo, no bastan para poder caracterizar el interbloqueo adecuadamente: se precisa
establecer las condiciones necesarias y suficientes para que se produzca un interbloqueo.
464
La condicin necesaria y suficiente para que un sistema est libre de interbloqueos es que exista una se
cuencia de reducciones del estado actual del sistema que incluya todos los procesos del sistema. En caso con
trario, hay un interbloqueo en el que estn implicados los procesos que no estn incluidos en la secuencia de
reducciones.
Ntese que en un determinado paso de una secuencia de reduccin podra haber varios procesos a los
que aplicar la siguiente reduccin, ya que se satisfacen sus necesidades de recursos. En esta situacin se
podra elegir cualquiera de ellos, puesto que el proceso de reduccin no depende del orden. Para poder de
mostrar esta propiedad slo es necesario darse cuenta de que el proceso de reduccin es acumulativo, esto es,
en cada paso de reduccin se mantienen los recursos disponibles que haba hasta entonces, aadindose los
liberados en la reduccin actual. Por tanto, si en un determinado punto de la secuencia se cumplen las condi
ciones para poder aplicar la reduccin por un proceso, stas se seguirn cumpliendo aunque se realice la re
duccin por otro proceso.
En la seccin que analiza el tratamiento de los interbloqueos basndose en la deteccin y recuperacin,
se presentarn algoritmos que se basan en este principio. A continuacin se aplicar a los ejemplos plantea
dos hasta ahora.
En el ejemplo representado en la figura 7.2, se puede identificar la siguiente secuencia de reducciones:
1.
2.
3.
Se puede reducir el estado por P3, que no est pendiente de ningn recurso. Se liberan dos unidades
de R2.
Gracias a esas dos unidades, se puede reducir por Pj., ya que estn disponibles todos los recursos
que necesita (2 unidades de R 3 y una de R 2). Como resultado de la reduccin, se liberan dos unida
des de Rj.
Se produce la reduccin por P2, puesto que ya est disponible la unidad de Ri que necesitaba.
Dado que la secuencia de reducciones (P3, Px y P2) incluye todos los procesos, el sistema est libre de
interbloqueos. Por lo que se refiere al ejemplo correspondiente a la figura 7.3, la secuencia de reducciones
sera la siguiente:
1.
Se puede reducir el estado por P4,que no est pendiente de ningn recurso, liberndose una unidad
de R3.
Slo se puede realizar esta reduccin; por tanto, existe un interbloqueo en el sistema en el que estn in
volucrados el resto de los procesos. Como se ver ms adelante, la aplicacin directa de este principio lleva a
algoritmos relativamente complejos. Sin embargo, si se consideran sistemas con algn tipo de restriccin, se
reduce apreciablemente el orden de complejidad de los algoritmos. As, en el caso de un sistema con una sola
unidad de cada recurso, la caracterizacin del interbloqueo se simplifica, ya que las condiciones necesarias de
Coffman son tambin suficientes.
7.5.
'.i
Como se vio al principio del captulo, las tcnicas para tratar el interbloqueo pueden clasificarse en tres cate
goras: estrategias de deteccin y recuperacin, estrategias de prevencin y estrategias de prediccin. Antes
de analizar en detalle cada una de ellas, es interesante comentar que este tipo de soluciones se emplea tam
bin en otros mbitos diferentes, como puede ser en el mantenimiento de un equipo o en el tratamiento de
una enfermedad. As, por ejemplo, en el caso del mantenimiento de un equipo, la estrategia basada en la de
teccin y recuperacin consistira en esperar a que falle un determinado componente para sustituirlo, con la
consiguiente parada del sistema mientras se produce la reparacin. Una estrategia preventiva, sin embargo,
reemplazara peridicamente los componentes del equipo para asegurar que no se averian. Ntese que esta
sustitucin peridica podra implicar que se descarten componentes que todava estn en buenas condiciones.
Para paliar esta situacin, la prediccin se basara en conocer a priori qu sntomas muestra un determinado
componente cuando se est acercando al final de su vida (por ejemplo, presenta una temperatura excesiva o
produce una vibracin). Esta estrategia consistira en supervisar peridicamente el comportamiento del com
Interbloqueos
465
ponente y proceder a su sustitucin cuando aparezcan los sntomas predeterminados. Aunque, evidentemente,
este ejemplo no presenta las mismas caractersticas que el problema de los interbloqueos, permite identificar
algunas de las ideas bsicas sobre su tratamiento como, por ejemplo, el mal uso de los recursos que pueden
implicar las tcnicas preventivas o la necesidad de un conocimiento a priori que requieren las estrategias
basadas en la prediccin. A continuacin, se comentan los tres tipos de estrategias utilizadas para tratar el
interbloqueo:
Deteccin y recuperacin: Se podra considerar que este tipo de estrategias conlleva una visin op
timista del sistema. Los procesos realizan sus peticiones sin ninguna restriccin pudiendo, por tanto,
producirse interbloqueos. Se debe supervisar el estado del sistema para detectar el interbloqueo me
diante algn algoritmo basado en las condiciones analizadas en el apartado anterior. Ntese que la
aplicacin de este algoritmo supondr un coste que puede afectar al rendimiento del sistema. Cuando
se detecta, hay que eliminarlo mediante algn procedimiento de recuperacin que, normalmente,
conlleva una prdida del trabajo realizado hasta ese momento por algunos de los procesos implica
dos.
Prevencin: Este tipo de estrategias intenta eliminar el problema de raz, fijando una serie de restric
ciones en el sistema sobre el uso de los recursos que aseguran que no se pueden producir interblo
queos. Ntese que estas restricciones se aplican a todos los procesos por igual, con independencia de
qu recursos use cada uno de ellos. Esta estrategia suele implicar una infrautilizacin de los recursos,
puesto que un proceso, debido a las restricciones establecidas en el sistema, puede verse obligado a
reservar un recurso mucho antes de necesitarlo.
Prediccin (en ingls, se suele usar el trmino avoidance): Esta estrategia evita el interbloqueo
basndose en un conocimiento a priori de qu recursos va a usar cada proceso. Este conocimiento
permite definir algoritmos que aseguren que no se produce un interbloqueo. Como ocurre con las es
trategias de deteccin, a la hora de aplicar esta tcnica, es necesario analizar la repercusin que tiene
la ejecucin del algoritmo de prediccin sobre el rendimiento del sistema. Adems, como sucede con
la prevencin, generalmente provoca una infrautilizacin de los recursos.
Existe una cuarta alternativa que consiste en no realizar ningn tratamiento, o sea, ig n o rar los in ter
bloqueos. Aunque parezca sorprendente a priori, muchos sistemas operativos usan frecuentemente esta estra
tegia de esconder la cabeza debajo del ala. Esta opcin no es tan descabellada si se tiene en cuenta, por un
lado, las restricciones que se han ido identificando a lo largo del captulo que limitan considerablemente el
tratamiento general de los interbloqueos en un sistema real y, por otro, las consecuencias negativas que con
llevan las tcnicas de tratamiento (como la baja utilizacin de los recursos o el coste de los algoritmos de
tratamiento). Tngase en cuenta que ignorar el problema trae como consecuencia que, cuando se produce un
interbloqueo, los procesos implicados seguirn indefinidamente bloqueados y, lo que puede ser ms grave
todava, los recursos involucrados quedarn permanentemente inutilizables. En la seccin 7.9 se analizar
cules pueden ser las repercusiones de esta situacin dependiendo de diversos factores. En las siguientes sec
ciones se estudian en detalle las tres estrategias presentadas: deteccin y recuperacin, prevencin y predic
cin.
7.6.
Esta tcnica de tratamiento de los interbloqueos presenta, como su nombre indica, dos fases:
Fase de deteccin: Debe ejecutarse un algoritmo que determine si el estado actual del sistema est
libre de interbloqueos, y que, en caso de que no lo est, identifique qu procesos estn implicados en
el interbloqueo. Dado que, como se analizar ms adelante, los algoritmos de deteccin pueden tener
una repercusin apreciable sobre el rendimiento del sistema, un aspecto importante es establecer con
qu frecuencia se ejecutar dicho algoritmo. En el caso de que el algoritmo detecte un interbloqueo,
se activar la fase de recuperacin del sistema.
466
Fase de recuperacin: Una vez detectado el interbloqueo, se debe aplicar una accin que lo elimine.
Como se analizar ms adelante, esto conlleva, generalmente, abortar la ejecucin de algunos de los
procesos implicados, liberando de esta forma los recursos que tuvieran asignados. Debe existir, por
tanto, un algoritmo que determine a qu procesos se les aplica esa medida drstica.
}
Si (S==P)
/* si la secuencia contiene todos los procesos del sistema (P) */
No hay interbloqueo
Sino
Los procesos en el conjunto P-S estn en un interbloqueo
Este algoritmo tiene una complejidad O (p2r), siendo p el nmero de procesos en el sistema y r el nme
ro de recursos. Por un lado, el bucle principal puede ejecutarse una vez por cada proceso (p veces). Por otro,
en cada iteracin del bucle, la operacin que determina qu procesos de desbloquean por la reduccin implica
comparar las solicitudes de recursos de cada proceso que todava no est en la secuencia con los recursos
disponibles en el grafo reducido (del orden de p x r comparaciones).
Como ejemplo, se va a aplicar a continuacin este algoritmo al grafo dibujado en la figura 7.2, lo que
causar las etapas de reduccin que se muestran en las figuras 7.7, 7.8 y 7.9. La representacin formal del
grafo era la siguiente:
.
N = { P I, P 2, P 3 ,R 1( 2 ) ,R 2( 3 ) ,R 3(2 )}
Interbloqueos
467
A continuacin, como segundo ejemplo, se aplica el algoritmo de deteccin al grafo de la figura 7.3,
que tena la siguiente representacin formal:
N ={P P2, P3, P4, R i(l), R2(l), R3(l)}
A={Ri>P|, R2>P2, P2 ^Rl>P3-^R2> R3~*P-fi P l- ^ 2}
R1
R2
R3
468
00
O O O
R2
R3
4.
5.
1 2
^R2j P ^R- }
Como se coment previamente, cuando se consideran sistemas con algn tipo de restriccin, se pueden
disear algoritmos de menor complejidad. As, en el caso de un sistema con una sola unidad de cada recurso,
para asegurar que un sistema est libre de interbloqueos, slo es necesario comprobar que no hay un ciclo en
el grafo, dado que en este caso las condiciones de Coffinan son necesarias y suficientes para que exista un
interbloqueo. Por tanto, se puede usar para ello cualquier algoritmo de deteccin de ciclos en un grafo. El
orden de complejidad de este tipo de algoritmos es proporcional al nmero de aristas en el grafo. Como en un
grafo de asignacin de recursos, el nmero de aristas es proporcional a pxr, el algoritmo tiene una compleji
dad de 0(pr).
Algoritmo de deteccin p a ra u n a representacin m atricial
Es relativamente directo trasladar las ideas expuestas para el caso de una representacin mediante un grafo a
una de tipo matricial. Por ello, la exposicin que trata este caso se har de una forma ms sucinta. Por lo que
Interbloqueos
469
se refiere a la operacin de reduccin aplicada a una representacin matricial, se podra definir de la siguiente
forma: Un sistema se puede reducir por un proceso Pi si los recursos disponibles satisfacen sus necesidades,
es decir, si S [ i ] < D (recuerde que esta notacin compacta equivale a S [ i , j ] < D [ j ] para; = 1,..., r).
La reduccin consiste en devolver los recursos asignados al proceso Pi.:
D = D + A [i]
Una vez hecha esta definicin, se puede especificar un algoritmo de deteccin similar al presentado pa
ra el caso de un grafo y con la misma complejidad (O(p2r)).
S=0;
/* secuencia de reduccin. Inicialmente vaca */
Repetir {
Buscar Pi tal que S[il S D;
Si Encontrado {
Reducir grafo por Pi D = D + A[i]
Aadir Pi a S;
Continuar = cierto;
}
Sino
Continuar = falso;} Mientras (Continuar)
Si (S==P)
/* si la secuencia contiene todos los procesos del sistema (P) */
No hay interbloqueo
Si no
Los procesos en el conjunto P-S estn en un interbloqueo
A continuacin, se aplica este algoritmo a los dos ejemplos considerados. En primer lugar, al sistema
mostrado en la figura 7.2, cuya representacin matricial aparece en la figura 7.5. El resultado es el siguiente:
1.
2.
Estado inicial: S = 0
Se puede reducir por P3, ya que S [3] D ( [ 0
0 0 ]< [0
D = D + A [3] = [0 0 2] + [0 2 0] = [0 2 2]
3.
4.
5.
6.
7.
8.
D = D + A [1] = [0 2 2] -t- [2 0 0] = [2 2 2]
D = D + A [2] = [0 1 0 ]
+ [2 2 2] = [2 3 2]
En cuanto al segundo ejemplo, que corresponde con el sistema representado en la figura 7.3, cuya re
presentacin matricial se muestra en la figura 7.6. La aplicacin del algoritmo a este sistema producira el
siguiente resultado:
1.
2.
Estado inicial: S - 0
Se puede reducir por P4, ya que S [4] < D ( [ 0
D = D + A [4] = [0 0 1] + [0 0 0] = [0 0 1]
3.
4.
5.
470
Interbloqueos
471
dichos recursos. Este viaje hacia atrs en el tiempo es complicado, puesto que implica restaurar el estado
del proceso tal como estaba en ese instante previo. Esta operacin slo sera factible, pero no fcil de implementar, en sistemas que tengan algn mecanismo de puntos de recuperacin, lo que no es habitual en los sis
temas de propsito general (en la aclaracin 7.4, se analiza el uso de esta estrategia en sistemas de gestin de
bases de datos). Dada esta dificultad, lo ms habitual es realizar un retroceso total, abortando directamente
los procesos elegidos, con la consiguiente prdida del trabajo realizado por los mismos.
Aclaracin 7.4. Este tipo de estrategia es adecuada en los sistemas de gestin de bases de datos. En este tipo
de sistemas, las entidades activas son las transacciones y los recursos corresponden con los diversos registros
y tablas de la base de datos, a los que habr que acceder en ocasiones en modo exclusivo, usando un meca
nismo de cerrojos. Con respecto a la deteccin, es ms simple que en un sistema operativo de propsito gene
ral, dado que slo hay un nico tipo de recursos (los cerrojos). En cuanto a la recuperacin del interbloqueo,
gracias al carcter atmico de las transacciones, basta con abortar la transaccin seleccionada y volver arran
carla inmediatamente, sin que el usuario final sea consciente de esta circunstancia. No existe una prdida de
trabajo, slo una sobrecarga tolerable, dada su baja probabilidad, debido a la repeticin de la transaccin.
El algoritmo de recuperacin, por tanto, tomara como punto de partida el conjunto de procesos que
estn implicados en interbloqueos, tal como ha determinado el algoritmo de deteccin, e ira sucesivamente
abortando procesos de este conjunto hasta que los interbloqueos desaparezcan del sistema. Ntese que, des
pus de abortar un proceso, habra que volver a aplicar el algoritmo de deteccin para ver si siguen existiendo
interbloqueos y, en caso afirmativo, qu procesos estn implicados en los mismos.
El criterio a la hora de seleccionar qu procesos del conjunto se abortarn debera intentar minimizar el
coste asociado a la muerte prematura de los mismos. En esta decisin pueden intervenir numerosos factores,
tales como la prioridad de los procesos implicados, el nmero de recursos que tiene asignados cada proceso o
el tiempo que lleva ejecutando cada proceso.
Un ltimo aspecto a destacar es que si se realiza una supervisin continua del sistema (o sea, se aplica
el algoritmo de deteccin siempre que se produce una peticin que no puede satisfacerse), se podra tomar la
decisin de abortar precisamente al proceso que ha realizado la peticin que ha generado el interbloqueo. No
es un mtodo ptimo, ya que este proceso puede tener gran prioridad o llevar mucho tiempo ejecutando, pero
es eficiente, ya que elimina la necesidad de aplicar nuevamente el algoritmo de deteccin.
7.7.
Con la estrategia de prevencin se intenta eliminar el problema de raz, asegurando que nunca se pueden pro
ducir interbloqueos. Dado que, como se analiz previamente, es necesario que se cumplan las cuatro condi
ciones de Coffrnan para que se produzca un interbloqueo, bastara nicamente con asegurar que una de estas
condiciones no se puede satisfacer para eliminar los interbloqueos en el sistema. A continuacin, se analiza
sucesivamente cada una de estas cuatro condiciones para ver si es posible establecer estrategias que aseguren
que no puede cumplirse.
472
F igura 7.11 Diagrama de uso de recursos a lo largo del tiempo del programa usado como ejemplo.
Esta estrategia conlleva una tasa muy baja de utilizacin de los recursos. Ntese que, por ejemplo, el
recurso D est reservado desde el instante de tiempo t hasta el t8, aunque realmente slo se usa en el intervalo
de ti hasta tg. Adems, esta solucin retrasa considerablemente el inicio del programa, ya que ste tiene que
Interbloqueos
473
esperar a que todos los recursos estn libres para comenzar, cuando, en realidad, podra comenzar en cuanto
estuviese disponible el recurso A.
Una estrategia ms refinada consistira en permitir que un proceso pueda solicitar un recurso slo si no
tiene ninguno asignado. Con esta segunda alternativa, un programa slo se vera obligado a pedir simult
neamente dos recursos si se solapa en el tiempo el uso de los mismos. En el ejemplo anterior, la solicitud del
recurso D puede realizarse en el momento que realmente se necesita (/y), puesto que dicho recurso no se usa
simultneamente con ningn otro. Sin embargo, el resto de los recursos deben seguir pidindose al principio.
tx: Solicita(A,B,C)
(t1 /t2): slo utiliza A
(t2 ,t3) : utiliza A y B
t3: Libera(A)
(t3 ,t4) : slo utiliza B
(t4 ,t5) : utiliza B y C
t5: Libera(B)
(tS/t6) : slo utiliza C
t6: Libera(C)
t7: solicita(D)
(t7 ,ta) : slo utiliza D
ta: Libera(D)
Aunque esta nueva poltica supone una mejora sobre la anterior, sigue presentando los mismos proble
mas. As, por ejemplo, el recurso C seguir estando desaprovechado en el intervalo de tiempo entre ti y t4.
Obsrvese que, aunque el recurso A y el C no se usan de forma simultnea, se piden a la vez, puesto que el
uso de ambos se solapa con el del recurso B. Se produce, por tanto, un cierre transitivo a la hora de determi
nar qu recursos se pedirn juntos.
474
7.8.
Como se coment al principio del captulo, antes de que en el sistema aparezca un interbloqueo se produce
un punto de no retomo a partir del cual el interbloqueo es inevitable con independencia del orden en el que
realicen sus peticiones los procesos. Retomamos el primer ejemplo planteado en el que dos procesos usan
una cinta (C) y una impresora ( I) siguiendo la siguiente estructura:
Proceso
Solicita(C)
Solicitad)
Uso de los recursos
Libera(I)
Libera(C)
Proceso P2
Solicita(I)
Solicita (C)
Uso de los recursos
Libera(C)
Libera(I)
Si se permite que cada proceso obtenga su primer recurso solicitado, se habr atravesado el umbral que
conduce inevitablemente al interbloqueo. Ntese que en ese instante ninguno de los dos procesos est blo
queado pero, a partir de entonces, sea cual sea la secuencia de ejecucin que se produzca, el interbloqueo es
ineludible. Cmo se podra detectar cuando el sistema se acerca a este punto de no retomo para evitar entrar
en el mismo? La solucin es muy sencilla: slo es necesario conocer el futuro. Si se conociera a priori qu
recursos van a solicitar los procesos durante su ejecucin, se podra controlar la asignacin de recursos a los
procesos de manera que se evite el interbloqueo. En el ejemplo, si despus de asignarle la cinta al primer pro
ceso, se produce la solicitud de la impresora por parte del segundo, no se satisfar esta peticin bloqueando al
segundo proceso, aunque realmente el recurso est libre.
Aunque se trata de un ejemplo muy sencillo, ha permitido apreciar cules son las claves de los algorit
mos de prediccin de interbloqueos: un conocimiento a priori de las necesidades de los procesos y el no con
ceder las peticiones que pueden conducir hacia el interbloqueo, aunque los recursos solicitados estn
disponibles.
Interbloqueos
475
Los algoritmos de prediccin se basarn, por tanto, en evitar que el sistema cruce el punto de no retomo
que conduce al interbloqueo. Para ello, se necesitar conocer a priori las necesidades mximas de recursos
que tiene cada programa. A partir de esta informacin, se deber determinar si el estado del sistema en cada
momento es seguro.
Proceso P 2
Solicita(I)
Solicita(C)
Uso de los recursos
Libera(C)
Libera(I)
En este caso no puede haber nunca interbloqueo, pero, sin embargo, la informacin sobre el uso mxi
mo de recursos por cada proceso es la misma que en el ejemplo anterior. Por tanto, la situacin que corres
ponde con que cada proceso haya obtenido su primer recurso se considerar como un estado inseguro. Se
puede, por tanto, afinnar que una condicin necesaria pero no suficiente para que un sistema evolucione
hacia un interbloqueo es que su estado actual sea inseguro. Los algoritmos de prediccin se basarn en evitar
que el estado del sistema se convierta en inseguro, eliminando de esta forma la posibilidad del interbloqueo.
476
Interbloqueos
477
478
Interbloqueos
110
A= 0 1 2
10 0
479
3 0 2
N= 2 2 0
112
S= 0 ;
Repetir {
Buscar Pi tal que N[i] < D;
Si Encontrado {
Reducir grafo por Pi: D = D + A[i]
Aadir Pi a S;
Continuar = cierto;
}
Sino
Continuar = falso;
} Mientras (Continuar)
Si (S==P)
/* si la secuencia contiene todos los procesos del sistema (P) */
El estado es seguro
Sino
El estado no es seguro
Este algoritmo tendr, evidentemente, la misma complejidad (0(p2r)) que la versin que se usaba para
detectar interbloqueos.
Una vez especificado el algoritmo que determina si el estado es seguro, la definicin de la estrategia de
prediccin es casi directa. Cuando un proceso realiza una solicitud de recursos que estn disponibles, se cal
cula un nuevo estado provisional transformando las matrices de necesidad y de asignacin de acuerdo a la
peticin realizada.
Sobre este estado provisional, se aplica el algoritmo para determinar si es seguro. Si lo es, se asignan
los recursos solicitados haciendo que el estado provisional se convierta en permanente. En caso contrario, se
bloquea al proceso sin asignarle los recursos, restaurando, por tanto, el sistema al estado previo.
A continuacin, se va a aplicar esta estrategia de prediccin a un ejemplo. Considrese un sistema con
tres tipos de recursos (R^ R2 y R3) y 3 procesos (P i, P2 y P3). Supngase que se est utilizando el algoritmo
del banquero y que el estado actual del sistema, que se asume como seguro (el ejercicio 7.28 propone dem os
trar que este estado inicial es seg u ro ), es el mostrado en la figura 7.15.
Ntese que no se ha especificado la matriz de solicitud, puesto que no es relevante para el algoritmo.
Observando con detalle los datos del estado actual, se puede obtener informacin adicional sobre el sistema.
Por ejemplo, se puede apreciar que las necesidades mximas de Px con respecto al recurso Rj. son 4 unidades
(N [ 1 ,1 ] +A [ 1 , 1 ] ) , lo que coincide con el nmero total de unidades de dicho recurso que existen en el sis
tema (A [ 1 ,1 ] +A [ 2 , 1 ] + A (3 ,1 ].+ D [1 ]).
Supngase que, estando el sistema en ese estado, llega una peticin de P3 solicitando 1 unidad de R3.
En primer lugar, dado que el recurso implicado en la peticin est disponible, habra que calcular el estado
provisional resultante de satisfacer esta solicitud, que se muestra en la figura 7.16.
A continuacin, habra que comprobar si el nuevo estado es seguro aplicando el algoritmo del banquero
sobre dicho estado.
110
0 12
10 1
3 0 2
N= 2 2 0
111
480
1 1 0
1 1 2
10 1
3 0 2
N- 1 2 0
1 1 1
Estado inicial: S = 0
Se puede reducir por P3, ya que N[3] < D ([1 1 1]<[2 1 1]), dando como resultado:
3.
4.
5.
6.
7.
8.
D = D + A [3]
D = D + A [1]
D = D + A [2]
= [2 1 1]
+ [1 o 1] = [3 1 2]
= [3 1 2] + [1 1 0] = [4 2 2]
= [4 2 2]
+ [0 X 2 ]
= [4 3 4]
Por tanto, se aceptara la peticin, consolidando el estado provisional como nuevo estado del sistema.
Supngase que, a continuacin, el proceso P2 solicita 1 unidad de Rx. Puesto que el recurso implicado
est disponible, habra que, en primer lugar, calcular el estado provisional resultante, que sera el mostrado en
la figura 7.17.
Al aplicar al algoritmo que determina si el estado es seguro, el resultado sera el siguiente:
1.
2.
Estado inicial: S = 0
Se puede reducir por P3, ya que N [3 ] < D ( [ 1
D = D + A [3]
3.
4.
5.
= [1 1 1]
1 ]S [1
+ [1 0 1]
Por tanto, no se satisfara la peticin, bloqueando el proceso y restaurando el estado anterior del siste
ma.
Sea cual sea el algoritmo de prediccin utilizado, es conveniente resumir algunas de las deficiencias
que presentan este tipo de algoritmos:
Conocimiento de las necesidades mximas de los procesos. Esta informacin no siempre puede co
nocerse a priori y, en caso de poderse, siempre se deber corresponder con el peor caso posible en
cuanto al uso de recursos que puede tener un programa.
o Las necesidades mximas no pueden expresar el uso exacto de los recursos durante la ejecucin de
los programas. Por ello, como se vio en los ejemplos previos, se pueden detectar como inseguros es
tados que realmente no pueden conducir a un interbloqueo, ya que en ellos no hay un uso solapado
de recursos.
infirautilizacin de los recursos. Estos algoritmos pueden denegar la concesin de un recurso aunque
est disponible, producindose el consiguiente desaprovechamiento del mismo.
Introduccin.
El problema de la planificacin de recursos.
Caracterizacin de los procesos.
Objetivos de la planificacin.
Niveles de planificacin.
Mecanismos y polticas de planificacin.
Algoritmos de planificacin no expulsivos.
Algoritmos de planificacin expulsivos.
Diseo e implementacin del planificador.
Planificacin en sistemas de tiempo real.
Planificacin de threads.
Planificacin en multiprocesadores.
Estudio de un ejemplo: la planificacin en Linux.
Servicios UNIX y Windows de planificacin.
154
4.1.
INTRODUCCIN
Antes de la aparicin de la multiprogramacin, la planificacin del procesador era muy sencilla, puesto que a
cada programa se le asignaba el procesador hasta que completaba su ejecucin. Con la tcnica de la multi
programacin, el sistema operativo debe multiplexar a lo largo del tiempo el procesador entre los procesos
existentes, de manera transparente, salvando y restaurando el contenido de los registros del procesador en la
zona del bloque de control del proceso establecida para tal fin. Surge, por tanto, la necesidad de planificar la
asignacin del procesador entre los procesos activos en el sistema.
En los primeros sistemas multiprogramados, los sistemas por lotes, el objetivo principal del planifica
dor era obtener un buen aprovechamiento del procesador, puesto que los computadores eran muy costosos en
esa poca y era necesario sacarles todo el rendimiento posible. Por tanto, todos los algoritmos de planifica
cin iban destinados a tal fin.
Con el advenimiento de los sistemas de tiempo compartido, entraron enjuego muchos otros factores, tal
como el reparto equitativo del procesador entre los usuarios presentes en el sistema, que hicieron ms com
plejo el diseo del algoritmo de planificacin, puesto que requeran equilibrar factores muy diversos, e inclu
so, en algunos casos, contrapuestos.
La enorme difusin de los computadores personales y la revolucin que han supuesto las redes de co
municacin han creado nuevos retos para el planificador. Este tipo de sistemas requiere una gran interactividad y precisa que los tiempos de respuesta que observan los usuarios cuando interaccionan con las
aplicaciones a travs de una interfaz de usuario grfica sean casi instantneos para satisfacer sus expectativas
a la hora de trabajar con el sistema, incluso cuando detrs de esa interaccin existe una transmisin de infor
macin por una red.
La aparicin de los multiprocesadores ha causado tambin un fuerte impacto en el diseo del planifica
dor. Como se estudiar en la seccin 4.12, el planificador debe controlar la asignacin de los procesos a los
diversos procesadores disponibles intentando explotar al mximo el paralelismo del hardware.
Adems del uso del computador en entornos de propsito general, cada vez es ms frecuente su utiliza
cin en entornos donde existen requisitos de tiempo real. Como se analizar en la seccin 4.10, en el caso de
tratarse de sistemas de tiempo real no crtico, pueden afrontarse con sistemas operativos de propsito general,
siempre que en el diseo de los mismos se hayan tenido en cuenta los requisitos que imponen este tipo de
sistemas tanto al planificador como a otras partes del sistema operativo. Los sistemas de tiempo real crticos
requieren sistemas operativos especficos, as como algoritmos de planificacin propios, tal como se anali
zar en dicha seccin.
Es importante resaltar que la presencia de nuevos retos y objetivos para el planificador no conlleva que
desaparezcan los criterios ms tradicionales. Por tanto, como se explicar en la seccin 4.4, un esquema de
planificacin en un sistema actual tiene que intentar satisfacer aspectos tan diversos como lograr un buen
aprovechamiento del procesador, ofreciendo un reparto equitativo del mismo entre los usuarios, proporcio
nando un tiempo de respuesta muy bajo en el uso de aplicaciones interactivas, dando buen soporte a los mul
tiprocesadores, e intentando, dentro de lo posible, satisfacer las necesidades de los sistemas de tiempo real no
crtico. Para afrontar este reto, el diseo de un planificador requiere la aplicacin de todo el bagaje terico
desarrollado en este campo, que incluye una serie de algoritmos clsicos presentados en las secciones 4.7 y
4.8. Sin embargo, tambin es necesario incluir en el algoritmo de planificacin una serie de tcnicas pura
mente empricas para lograr un comportamiento adecuado en los muy diversos escenarios donde se puede
utilizar un sistema operativo de propsito general. Para hacer ms nfasis en este aspecto, tngase en cuenta
que un sistema operativo de estas caractersticas, como Linux, cuyo esquema de planificacin se presentar
en la seccin 4.13, est concebido para su uso en el amplio rango de mquinas que va desde sistemas empo
trados y porttiles hasta grandes multiprocesadores NUMA, tanto para sistemas destinados al trabajo interac
tivo de un usuario como para grandes servidores, as como para operar en todo tipo de entornos (de oficina,
cientficos, de ingeniera, universitarios, empresariales, de tiempo real, etctera). Como podr imaginar el
lector, disear un sistema operativo con tanta versatilidad es una labor compleja y en ella juega un papel muy
importante el planificador.
De todas las consideraciones previas, se deduce que la planificacin de procesos y threads es funda
mental en cualquier sistema operativo. Las entidades ejecutables que existen en el sistema no haran funcio-
155
Recurso
------->[
cola de espera
fU 6 : U11 U9
4.2.
La planificacin de recursos es un problema general que va ms all del campo de los sistemas operativos e,
incluso, de la propia informtica. En su concepcin general, este problema se presenta cuando mltiples
usuarios, sean del tipo que sean, necesitan usar de forma exclusiva un determinado recurso, que puede cons
tar de uno o ms ejemplares, en varias fases a lo largo de su ejecucin. La planificacin determina en cada
instante qu ejemplar se le asigna a cada uno de los usuarios que requiera utilizar el recurso en ese momento.
Se presentan varias posibilidades dependiendo del nmero de ejemplares disponibles:
Si el nmero de usuarios que precisan usar el recurso en ese momento es menor o igual que el nme
ro de ejemplares existentes, la planificacin debe decidir qu ejemplar se asigna a cada usuario. Por
tanto, la planificacin lleva a cabo una multiplexacin espacial de los recursos.
Si hay ms peticiones de uso que ejemplares disponibles, el planificador debe determinar qu usua
rios obtendrn un ejemplar del recurso, y qu ejemplar recibir cada uno, y cules no. Aquellos usua
rios cuya peticin no pueda satisfacerse en ese instante debern aguardar en una cola de espera hasta
que el planificador decida asignarles un ejemplar del recurso. En este caso, se produce una multi
plexacin temporal y espacial de los recursos. En la figura 4.1 se muestra un ejemplo donde hay un
recurso con 4 ejemplares y existen 7 usuarios que necesitan usarlo. La planificacin determina qu
cuatro usuarios obtienen un ejemplar del recurso, y qu ejemplar consigue cada uno, y qu tres usua
rios debn quedarse aguardando en la cola de espera.
En el caso particular de que se trate de un recurso con un nico ejemplar, slo es preciso decidir a
qu usuario asignar ese ejemplar en cada momento. La planificacin realiza una multiplexacin tem
poral del recurso.
Antes de proseguir con el anlisis de este problema general, se plantea un caso hipottico del mismo,
que servir como ejemplo a lo largo del captulo, y que se ir completando progresivamente para ilustrar los
diversos aspectos involucrados en la planificacin. Suponga que un equipo de mdicos de una determinada
especialidad atiende a sus pacientes en una clnica, de manera que cada mdico tiene su propia consulta, pero
tal que cualquier mdico puede atender a un paciente, puesto que, al ser parte del mismo equipo, comparten
los historiales clnicos de los pacientes. En este ejemplo, los usuarios son los pacientes, el recurso es el servi
156
ci de atencin mdica, siendo cada mdico del equipo un ejemplar del mismo, y la sala de espera de la clni
ca, como su nombre indica, hace el papel de cola de espera.
Aunque se analizarn con ms detalle en la seccin 4.4, en este modelo general ya se pueden detectar
qu diversos objetivos debe intentar satisfacer un esquema de planificacin de recursos:
Dado que lo que se pretende es administrar un recurso, uno de los principales objetivos de la planifi
cacin ser optimizar el uso de dicho recurso. En el ejemplo, habr que intentar que, siempre que
haya trabajo pendiente, el equipo mdico est ocupado lo mximo posible.
Hay que minimizar el tiempo gastado por el usuario en la cola de espera, puesto que repercute nega
tivamente en la calidad del servicio recibido. En el caso hipottico planteado, si un paciente tiene que
esperar mucho tiempo en la sala de espera antes de ser atendido, probablemente, no volver a esta
clnica la prxima vez. El malestar ser mayor si ese largo tiempo de espera se ha producido en una
visita en la que el tiempo de consulta requerido es muy breve.
Puesto que hay que dar servicio a mltiples usuarios, la planificacin debe asegurar un reparto equi
tativo del recurso entre los distintos usuarios que precisan su uso. En el ejemplo planteado, el equipo
mdico debera dar un tratamiento de la misma calidad a todos los pacientes.
Generalmente, no todas las peticiones de uso del recurso tendrn el mismo grado de urgencia (la
misma prioridad), por lo que el planificador debera satisfacer las peticiones teniendo en cuenta este
aspecto. En el ejemplo del servicio de atencin mdica, la existencia de distintos grados de urgencia
se explica por s misma.
Un aspecto importante en un sistema de estas caractersticas es si el recurso administrado es expropiable o no, es decir, si es posible interrumpir el uso de un recurso por parte de un usuario para asignrselo a
otro, pudindoselo reasignar posteriormente sin prdida del trabajo ya realizado. Como veremos un poco ms
adelante, y estudiaremos en detalle en la seccin 7.2.1, en el caso de un computador, algunos recursos son
intrnsicamente no expropiables. En el caso de la clnica, se trata de un recurso expropiable: el mdico puede
decidir interrumpir la atencin a un paciente para tratar a otro que presenta un problema urgente. Una vez
tratado el caso urgente, el mdico puede retomar la atencin al primer paciente en el punto donde se qued,
aunque con un cierto trabajo adicional (el paciente ha tenido que pasar antes a la sala espera y ahora volver a
la consulta; el mdico deber retomar el historial clnico de este paciente; etctera). Teniendo en cuenta este
aspecto, se presentan dos alternativas a la hora de realizar la planificacin:
Planificacin no expulsiva. Una vez asignado un ejemplar de un recurso a un usuario, ste lo man
tendr hasta que termine de usarlo. El esquema de planificacin slo se activa cuando un ejemplar
queda libre. Este es el nico esquema factible si el recurso es no expropiable, aunque tambin se
puede usar con recursos expropiables si se considera oportuno. Como se analizar en la seccin 4.7,
este esquema dificulta el reparto equitativo del recurso entre los usuarios y no permite implantar
adecuadamente grados de urgencia en el servicio. En el ejemplo de la clnica, se correspondera con
un esquema donde bajo ninguna circunstancia se interrumpira la atencin a un paciente.
Planificacin expulsiva. Esta alternativa, que slo podr usarse si el recurso es expropiable, puede
reasignar a un usuario un ejemplar de un recurso que est siendo usado por otro usuario cuando las
circunstancias lo propicien, ya sea en aras de un reparto equitativo del recurso o por motivos de gra
dos de urgencia. Adems de cuando se queda un ejemplar del recurso libre, el algoritmo de planifi
cacin de recursos tambin se activar en otras circunstancias, tales como cuando llegada una nueva
peticin de un recurso o cuando el tiempo de uso de un recurso por parte de un usuario llega a un
cierto plazo mximo. En el ejemplo planteado, dado el carcter expropiable de la atencin mdica, se
puede utilizar una estrategia de planificacin de este tipo.
Otro aspecto que ya se puede vislumbrar en este modelo general es la afinidad. En principio, una peti
cin de uso de un recurso por parte de un usuario puede satisfacerse utilizando cualquier ejemplar libre (si
para una peticin debe usarse un determinado ejemplar, realmente no se trata de un recurso con mltiples
ejemplares, sino mltiples recursos con un solo ejemplar cada uno). Sin embargo, en ocasiones, un usuario
puede considerar oportuno restringir qu ejemplares de un recurso pueden utilizarse para satisfacer sus peti
ciones. Esta restriccin establece que el usuario tiene afinidad hacia ese conjunto de ejemplares. El planifica
dor nunca asignar a un usuario un ejemplar que no est incluido dentro del conjunto que define su afinidad,
157
incluso aunque est libre y los de dicho conjunto ocupados. Por ello, denominaremos a esta caracterstica
afinidad estricta. En el ejemplo de la clnica, correspondera a un paciente que slo permite que le atiendan
ciertos mdicos del equipo.
Adems de la afinidad estricta, existe otro tipo de afinidad que denominaremos afin id ad n atu ral. En
este caso, el usuario no establece ninguna restriccin en el uso de los ejemplares. Sin embargo, para cierto
tipo de recursos, puede obtenerse algn beneficio si al usuario se le asigna el mismo ejem plar que la ltima
vez que utiliz el recurso. El ejemplar puede tener memoria de ese usuario, con lo que disminuye el tiempo
de servicio. Se podra decir que el usuario tiene afinidad natural hacia ese ejemplar. En el ejemplo del servi
cio mdico, es preferible que al paciente le atienda el mismo mdico que en la ltima visita, puesto que pro
bablemente recuerde alguna informacin clnica de dicho paciente, agilizndose, por tanto, la consulta.
A continuacin, nos centramos en el caso que nos interesa, es decir, en los recursos de un computador y
en la manera como el sistema operativo los planifica. En este caso, los usuarios son los procesos o threads
presentes en el sistema y, en cuanto a los recursos a planificar, existe una gran variedad, entre la que se pue
den destacar los siguientes recursos:
El procesador. Es el recurso bsico del computador. Puede constar de varios ejemplares si se trata
de un sistema multiprocesador. El planificador controla la asignacin de procesadores a los threads
(o a los procesos, en un sistema que no implemente esta abstraccin) listos para ejecutar y es el obje
to de este captulo. Ntese que la cola de procesos listos se corresponde con la cola de espera de este
recurso, que es de tipo expropiable (basta con salvar y restaurar los registros en el BCP) y en el que
se presenta la propiedad de la afinidad, como se analizar en la seccin 4.12.
L a m em oria. En los sistemas con memoria virtual, tal como se analizar en la seccin 5.5, se produ
ce una multiplexacin espacial y temporal de los marcos de pgina existentes, que se corresponden
con los ejemplares del recurso, entre los procesos activos en el sistema. Las polticas de reparto de
espacio y de reemplazo, que se estudian en dicha seccin, constituyen el esquema de planificacin de
este recurso. Obsrvese que se trata de un recurso expropiable (slo requiere copiar a memoria se
cundaria el contenido del marco expropiado), sobre el que se utiliza una planificacin expulsiva (el
reemplazo de un marco equivale a reasignar un ejemplar de un recurso mientras lo estaba usando un
proceso).
El disco. Los procesos realizan peticiones de acceso al disco que deben planificarse para determinar
en qu orden se van sirviendo. En la seccin 8.5.2 se estudiarn los diversos algoritmos de planifica
cin del disco. En este caso se trata de un recurso compuesto de un nico ejemplar (aunque haya va
rias unidades de disco, un proceso querr usar aqulla que contiene los datos que pretende
manipular), no expropiable (no se puede interrumpir una operacin sobre el disco sin abortarla),
siendo la cola de bloqueo del disco la que corresponde con la cola de espera.
Los m ecanism os de sincronizacin. Cuando un proceso deja libre un mutex que tena cerrado, co
mo se analizar en el captulo 6, o cuando libera un cerrojo asociado a un fichero, como se ver en el
captulo 9, hay que planificar a cul de los procesos que estn esperando usar este recurso, en caso de
que haya alguno, se le asigna dicho recurso. Evidentemente, se trata de un recurso no expropiable,
puesto que en la esencia de estos mecanismos est que el proceso debe mantener el recurso hasta que
lo libere voluntariamente.
En el ejemplo de la clnica tambin es necesario planificar mltiples tipos de recursos. Adems de la
atencin mdica directa, durante la misma pueden requerirse pruebas adicionales (analticas, diagnsticos
basados en imgenes, etctera). La clnica cuenta tambin con estos servicios y en cada uno de ellos aparecen
todos los elementos caractersticos de un sistema de planificacin (usuarios, ejemplares, salas de espera,
carcter expropiable y posible afinidad). De alguna manera, una estancia de un paciente en la clnica sigue la
misma pauta que la evolucin de un proceso durante su ejecucin en el sistema:
Cuando se crea el proceso, se aade a la lista de procesos listos para ejecutar. El paciente que entra
en la clnica pasa a la sala de espera.
En un momento dado, el planificador asignar un procesador al proceso. En cierto instante, el pa
ciente ser atendido por un mdico.
158
4.3.
Para proporcionar un buen servicio, sea del tipo que sea, hay que conocer las caractersticas y las necesidades
de los clientes. En el caso de la planificacin de procesos, es evidente que no todos los procesos son iguales y
que, por tanto, es necesario caracterizar el comportamiento y las necesidades de los mismos. Para ello, en
esta seccin se van a distinguir tres factores: el perfil de uso del procesador que presenta el proceso, su grado
de interactividad y su nivel de urgencia.
Perfil de uso del procesador
Un programa est formado por una secuencia de instrucciones entre las que se incluyen llamadas al sistema
para solicitar servicios del sistema operativo. Algunas de estas llamadas implican el uso de un determinado
recurso y causan el bloqueo del proceso mientras se espera por el mismo. Por tanto, la ejecucin de un pro
grama puede verse como una secuencia en la que se va alternando una fase de uso del procesador (denomina
da rfaga de procesador) con una fase de bloqueo asociada al uso de un recurso (denominada,
habitualmente, rfaga de entrada/salida, debido a que en la mayora de los casos se trata de un dispositivo
de entrada/salida). La duracin de las sucesivas rfagas de procesador de un programa es una caracterstica
intrnseca del mismo y es un factor importante a la hora de realizar la planificacin del procesador, pues de
termina la cantidad de tiempo que un proceso usa el procesador cada vez que se le asigna.
Existen programas con rfagas de procesador muy cortas, es decir, que realizan frecuentes llamadas pa
ra operar con dispositivos de entrada/salida u otros recursos bloqueantes del sistema operativo. Se podra
decir que el tiempo total de ejecucin de estos procesos est condicionado en mayor parte por el tiempo de
uso de estos recursos bloqueantes, ms que por el propio uso del procesador. Por ello, se suelen denominar
procesos con un uso intensivo de la E/S, como el que se muestra en la figura 4.2, donde las rfagas de pro
cesador se han marcado con lnea continua y las de entrada/salida con lnea discontinua. En contraposicin,
hay programas que tienen largas rfagas de procesador, usando ocasionalmente recursos bloqueantes. Dado
que el ritmo de ejecucin de estos programas est condicionado principalmente por su uso del procesador, se
les aplica habitualmente el calificativo de procesos con un uso intensivo del procesador, como el que apa
rece en la figura 4.3.
159
Programa
inicioQ;
Repetir
leer(fichero_entr, dato);
/* procesado sencillo /
res=pr(dato);
escribir(fichero_sal, res);
hasta EOF(fichero_entr);
inicio
leer
pr escribir
leer
pr escribir
escribir
fin
fin();
Programa
inicioQ;
leer(fichero, matriz);
inicio
o
leer
procesar
escribir
fin
/* procesado complejo */
procesar(matriz);
escriblr(fichero, matriz);
fin();
160
G rado de interactividad
Por grado de interactividad de un programa, nos referimos al nivel de interaccin directa que existe entre el
usuario de la aplicacin y sta misma. Un programa con un alto grado de interactividad va ejecutando las
operaciones que selecciona el usuario mediante dispositivos de entTada tales como el teclado o el ratn. Fren
te a este tipo de programas, existen otros, denominados habitualmente procesos batch, en los que no existe
este dilogo: una vez activado el programa, ste ejecuta sin ninguna interaccin directa con el usuario, leyen
do, normalmente, sus datos de ficheros y dejando los resultados tambin en ficheros. Como ocurra con el
perfil de uso de procesador, en muchos casos, la divisin no es tan drstica, y un programa puede pasar por
fases de mayor o menor interactividad. Tngase en cuenta que un programa con un alto grado de interactivi
dad normalmente tiene un perfil de uso intensivo de la E/S. Sin embargo, la afirmacin contraria no es siem
pre cierta, ya que un proceso no interactivo puede realizar muchas operaciones de entrada/salida sobre
dispositivos que no estn vinculados directamente con el usuario, como son los discos.
De cara a la planificacin, hay que asegurar que un proceso con un alto grado de interactividad respon
de rpidamente a las peticiones del usuario, puesto que, en caso contrario, ste quedara insatisfecho con el
servicio proporcionado por el sistema operativo. Obsrvese que el dar prioridad a los procesos con rfagas
ms cortas, tal como se plante en el apartado anterior, conlleva un beneficio a los procesos interactivos, al
tener stos este tipo de perfil, aunque tambin a otros procesos que no lo son. Por ello, adicionalmente, el
planificador debera otorgar a estos procesos unos beneficios extras. Por ejemplo, algunos planificadores
conceden mayor prioridad a los procesos que estn ejecutando en primer plano o, si se trata de aplicaciones
grficas, cuya ventana tenga el foco activo.
Nivel de urgencia
Es evidente que todos los procesos activos en el sistema no tienen el mismo grado de urgencia. Por un lado,
algunos procesos realizan labores vinculadas con el funcionamiento de ciertas partes del sistema operativo y
son, por tanto, crticos. Dentro de esta categora se encuentran algunos procesos del ncleo, tal como el de
monio de paginacin que se estudia en la seccin 5.5 (tngase en cuenta que no todos los procesos del ncleo
tienen una gran prioridad; el proceso nulo, por ejemplo, tiene prioridad mnima). Tambin existen procesos
del sistema (es decir, procesos en modo usuario, pero arrancados por el sper-usuario) que requieren esa prio
ridad elevada. En cuanto a los usuarios convencionales, aunque no pueden tener un control ilimitado sobre el
grado de prioridad que tienen sus procesos, tambin requieren poder definir distintos niveles de urgencia en
tre sus propios procesos.
Para garantizar el grado de urgencia requerido, el sistema operativo debe asegurar que cuando un pro
ceso urgente se incorpora a la cola de procesos listos, obtiene el uso del procesador inmediatamente.
Un campo donde este aspecto es fundamental es el de los sistemas de tiempo real, donde existen proce
sos que tienen que cumplir unos requisitos estrictos en cuanto a plazos de ejecucin y tiempo de respuesta.
Como se coment previamente y se analizar con detalle en la seccin 4.10, los sistemas operativos de
propsito general actuales intentan dar soporte a este tipo de procesos, aunque sea en entornos de tiempo real
no crtico.
Resumiendo, el planificador debera gestionar distintos niveles de prioridad de servicio permitiendo que
en ellos se puedan plasmar los diversos grados de urgencia que tienen las labores que se llevan a cabo en un
sistema en un momento dado.
Como recapitulacin de esta seccin, se puede destacar que de la propia caracterizacin de los procesos
surgen de forma natural algunos de los requisitos que debe satisfacer un planificador en un sistema operativo
de propsito general. El planificador deber favorecer a los procesos que tengan las siguientes caractersticas:
Procesos con un uso intensivo de la entrada/salida, para minimizar el tiempo medio de espera.
Procesos interactivos, para asegurar que responden rpidamente al usuario.
Procesos urgentes, para garantizar que se ejecutan sin ningn tipo de demora.
4.4.
161
OBJETIVOS DE LA PLANIFICACIN
Para caracterizar el comportamiento de los algoritmos de planificacin se suelen definir dos tipos de parme
tros: de usuario (ya sea de proceso o de thread) y de sistema. Los primeros se refieren al comportamiento del
sistema tal y como lo perciben los usuarios o los procesos. Los segundos se centran principalmente en el uso
eficiente del procesador. Un proceso o thread se puede caracterizar con tres parmetros principales:
Tiempo de ejecucin (Te): Tiempo que tarda en ejecutarse un proceso o thread desde que se crea
hasta que termina totalmente. Incluye todo el tiempo en que el proceso est listo para ejecutar, en
ejecucin y en estado bloqueado (por sincronizacin o entrada/salida).
Tiempo de espera (Tw): Este parmetro define el tiempo que pasa un proceso en la cola de procesos
listos para ejecutar. Si el proceso no se bloquea nunca, es el tiempo que espera el proceso o thread en
estado listo para ejecutar antes de que pase al estado de ejecucin.
Tiem po de respuesta (Ta): Tiempo que pasa entre el momento en que se crea el proceso y se pone
listo para ejecutar y la primera vez que el proceso responde al usuario. Es fundamental en los siste
mas interactivos, ya que un sistema de planificacin se puede configurar para responder muy rpido
al usuario, aunque luego el proceso o thread tenga un tiempo de ejecucin largo.
Desde el punto de vista de la planificacin, un sistema se caracteriza con dos parmetros principales:
Uso del procesador (C): Tiempo en que se ha utilizado el procesador. Normalmente esta medida se
expresa en porcentajes que se definen comparando el tiempo de uso del procesador con el tiempo (T)
desde que se arranc el sistema - Tu / T - , donde Tu es el tiempo til dedicado a procesamiento y se
puede calcular sumando los tiempos en que hay un proceso en estado de ejecucin, exceptuando el
proceso nulo. Este parmetro vara mucho dependiendo de los sistemas. Por ejemplo, un computador
de sobremesa suele usarse menos de un 15%. Sin embargo, un servidor muy cargado puede usarse al
95%. Este parmetro es importante en sistemas de propsito general, pero es mucho ms importante
en sistemas de tiempo real y con calidad de servicio. En estos ltimos casos, siempre debe existir un
porcentaje de uso del procesador que permita crear un proceso o thread, como se ver ms adelante.
Tasa de trab ajo s com pletados (P): Este parmetro indica el nmero de procesos o threads ejecuta
dos completamente por unidad de tiempo. Se puede calcular como la inversa del tiempo medio de
ejecucin (1 / Media(Te)).
Los problemas de planificacin se pueden modelar como un sistema de ecuaciones con restricciones,
donde se trata de maximizar algunos de los parmetros anteriores, los que afectan al uso del sistema, y mini
mizar otros, los que afectan al proceso o thread. Entre los objetivos que se persiguen estn los siguientes:
Aunque tambin se pueden perseguir objetivos ms complejos y no tan fcilmente modelables, como:
Imparcialidad.
Poltica justa. Realizar un reparto equitativo del procesador.
162
Eficiencia: mantener el procesador ocupado el mayor tiempo posible con procesos de usuario.
Predecibilidad en la ejecucin. Cumplir los plazos de ejecucin de un sistema de tiempo real
Equilibrio en el uso de los recursos.
Minimizar la varianza del tiempo de respuesta.
Reducir el tiempo de cambio entre procesos o threads.
Etctera.
Muchos de estos objetivos son incompatibles entre s, por lo que hay que centrar la atencin en aqul
que sea de mayor inters. Por ejemplo, una planificacin que realice un reparto equitativo del procesador no
conseguir optimizar el uso del mismo. Adems, hay que decir que algunos objetivos estn dirigidos a proce
sos interactivos, mientras que otros lo estn a procesos de tipo batch. Por tanto, para valorar los algoritmos de
planificacin hay que tener en cuenta los beneficios que presenta cada una de las alternativas a analizar y el
tipo de sistema en que se van a usar. Asimismo, no hay que olvidar el tiempo de procesador que se consume
debido al propio algoritmo (tiempo gastado en aadir elementos a las colas, ordenar stas y analizarlas). En
este sentido un algoritmo menos bueno pero muy simple, como el aleatorio, que consume muy poco tiempo
de procesador, puede ser globalmente mejor que otro ms sofisticado, puesto que la ganancia de rendimiento
conseguida puede no compensar el mayor tiempo consumido. Adems de eficiente, el algoritmo de planifica
cin debe ser escalable, es decir, mostrar un buen comportamiento en sistemas donde puede haber decenas de
miles de procesos listos para ejecutar. El objetivo es disear esquemas de planificacin cuyo orden de com
plejidad sea constante y no dependa del nmero de procesos listos.
En general, en los sistemas operativos de propsito general se persiguen los objetivos enunciados arri
ba, es decir, maximizar el uso del procesador (C) y el nmero de procesos ejecutados por unidad de tiempo
(P), al tiempo que se quiere minimizar el tiempo de ejecucin de un proceso, su tiempo de respuesta y de
espera (Te, Tw, Ta). En otros sistemas, como en los servidores interactivos, se suele primar la reduccin del
tiempo de respuesta (Tw), de forma que los clientes tengan la sensacin de que el sistema les atiende rpida
mente y no abandonen el servicio. En los sistemas de trabajo por lotes, se suele tratar de maximizar C y P,
para explotar al mximo el procesador, como veremos ms adelante.
165
servicio y no se rechazan usuarios, como ocurre en sistemas de tiempo real y con calidad de servicio. Ahora
bien, incluso si C es menor que 1, es importante estudiar los algoritmos de planificacin para ver cul es el
tiempo medio de servicio (x) esperado para el sistema.
En el caso de que hubiera bloqueos, observe, que el uso del procesador, sin embargo, no depende del
tiempo de bloqueo de los procesos ni del tiempo de espera en la cola. Slo depende del tiempo que se usa el
propio procesador. Por tanto, C se podra calcular como:
C = X (n a)
Si el sistema tiene mltiples colas segn la prioridad de los procesos, habr una tasa de llegadas Xi,
siendo i la prioridad del proceso. La tasa total de llegadas X = Xi. En este caso se puede afinar ms la eva
luacin y ver hasta qu nivel de prioridad se pueden procesar los trabajos. Si todo va bien, se cumple que C <
1. Ahora bien, si C > 1, se puede calcular la prioridad i a partir de la cual hay inanicin. Asumiendo una dis
tribucin uniforme por nivel de prioridad (Xi = X / p), C se podra calcular como:
C = Xi t, siendo i = 0.. p => C = p (X x/ p) = (X x)
En este caso, se puede calcular el sumatorio de niveles:
Ci = Xi x, i=0..k, tal que C i < 1
El valor k para el que C se hace mayor que 1 indica que a partir de ese nivel de prioridad habr inani
cin si no hace nada en el planificador para proporcionar algn tipo de reparto del procesador distinto de la
prioridad pura. Si hay una distribucin de llegadas uniforme por prioridad, este valor ser:
k (X x /p ) = ( k /p ) (X x ) < 1
Cuando estudiemos los algoritmos de planificacin ms adelante, veremos cmo se comportan frente a
los parmetros anteriores.
4.5.
NIVELES DE PLANIFICACIN
En un sistema operativo, la planificacin sirve fundamentalmente para gestionar el uso del procesador, pero
no slo para eso. Hay tambin otros recursos, como la memoria o los discos, que tambin se ven afectados
por la planificacin. Es por ello necesario tener tres niveles de planificacin, como se muestra en la figura
4.7: a corto plazo, a medio plazo y a largo plazo.
La planificacin a corto plazo (tambin llamado short-term scheduler) se encarga de la gestin ms
directa del procesador. Es responsable de decidir qu proceso de los que estn en la cola de listos para ejecu
tar, y por cunto tiempo, recibe el procesador para ejecutar. Este captulo se centra bsicamente en este nivel
de planificacin.
El planificador a corto plazo se activa cada vez que un suceso ocurrido en el sistema operativo modifica
el estado del mismo. Algunos de estos sucesos son los bloqueos voluntarios del proceso o thread en ejecu
cin, interrupciones, temporizadores de rodaja, llamadas al sistema, seales, activacin de nuevos programas,
desbloqueo de un proceso, etc. En cualquiera de estos casos, es necesario ejecutar el algoritmo de planifica
cin para estimar qu proceso debe ocupar el procesador a continuacin. Si hay un cambio con el proceso
actual, es necesario cambiar los procesos que usan el procesador, salvando el contexto de ejecucin del pro
ceso que ocupaba el procesador.
Debido a la frecuencia con que se activa (alrededor de un centenar de milisegundos en un sistema de
tumo rotatorio), el planificador a corto plazo debe ser rpido y generar poca carga para el procesador, puesto
que es sobrecarga pura en el uso del sistema. A l tiempo que transcurre entre que un proceso o thread pasa al
estado de ejecucin hasta que comienza a ejecutarse, se le denomina latencia del activador (dispatch latency).
Esta latencia es sobrecarga pura del procesador (como veremos en secciones posteriores), por ello debe inten
tar minimizarse.
El planificador a m edio plazo (tambin llamado mid-term scheduler o swapper) es el encargado de
quitar procesos temporalmente de la memoria principal y moverlos al dispositivo de intercambio o de pagi-
166
167
tar. Ello significa que controla la admisin de procesos que se ejecutan en el sistema, con tres posibles resul
tados: admitidos, diferidos o denegados. La decisin que adopte depende del grado de multiprogramacin
que se acepte en el sistema. Si se ha llegado al grado mximo, se puede denegar la ejecucin de un nuevo
proceso hasta que quede algn recurso disponible.
Normalmente se ejecuta cuando se crea o termina un proceso, cosa que ocurre con mucha menos fre
cuencia que la planificacin a corto plazo. Por ello, se pueden aplicar algoritmos ms sofisticados y con ma
yor carga computacional, todo ello para conseguir el objetivo de proporcionar al planificador a corto plazo
una mezcla de trabajos que optimice el uso del procesador, juntando procesos intensivos en el uso del proce
sador e intensivos en entrada/salida, aumente el nmero de procesos activos en el sistema, minimice el tiem
po de espera o respuesta, etctera. Tngase en cuenta que este nivel de planificacin se utilizaba en los
sistemas por lotes, por lo que se dispona a priori de informacin sobre el comportamiento del proceso (dura
cin estimada, uso de recursos del programa, etc.) que el usuario deba proporcionar cuando solicitaba la eje
cucin del programa. Esta informacin permite implementar algoritmos como el SJF, que se ver en la
seccin 4.7, pero usando el tiempo total del programa y no el de la prxima rfaga.
En los sistemas operativos de propsito general actuales no existe este nivel como tal, puesto que en
ellos se aceptan todos los procesos, siendo el planificador a medio plazo el encargado de controlar el grado
de multiprogramacin. En cambio, en los sistemas de tiempo real o con calidad de servicio este nivel es muy
importante, como veremos en las secciones dedicadas a este tipo de sistemas.
Estos tres niveles de planificacin tambin se pueden aplicar al ejemplo de la clnica:
Planificacin a corto plazo. La ya comentada al presentar el ejemplo, es decir, la que controla qu
pacientes de la sala de espera reciben atencin mdica en un determinado momento.
Planificacin a medio plazo. Debido al xito de la clnica, el equipo mdico se ha visto obligado a
adquirir una nueva sala de espera mucho mayor, pero ubicada en otro edificio, fuera de la clnica
propiamente dicha. Cuando se produce congestin en las salas de espera de la clnica (recuerde que,
adems de la sala de espera de la consulta, hay salas de espera en los distintos servicios de pruebas
mdicas), se invita a uno o ms pacientes a que pasen a la sala de espera situada en otro edificio, pre
ferentemente a aqullos que estn pendientes de obtener el resultado de una prueba mdica. Cuando
baja el nivel de congestin, se informa de este hecho a los pacientes en la sala de espera externa para
que algunos de ellos, que no estn pendientes del resultado de una prueba mdica, se reincorporen a
la sala de espera de la consulta. Este proceso se correspondera con la planificacin a medio plazo.
Planificacin a largo plazo. El equipo mdico ha pensado en cambiar el modo de organizacin del
servicio mdico. En vez de visitar la clnica directamente, se va a implantar un modulo de peticin
previa, tal que el paciente debe llamar por telfono a la clnica antes de asistir a la misma. El equipo
mdico telefonear al paciente para informarle de cundo puede visitar la clnica. De esta forma, se
puede controlar a priori el nivel de congestin del servicio de atencin mdica. Este modo de opera
cin se correspondera con un planificador a largo plazo.
4.6.
En esta seccin se muestra cmo se pueden plasmar todos los conceptos presentados hasta el momento en un
sistema funcional coherente, con los mecanismos apropiados y las polticas adecuadas para satisfacer las ex
pectativas esperadas del planificador. Para ello, se muestra primero la estructura del planificador y, acto se
guido, los mecanismos y su relacin con las polticas de planificacin.
172
Expulsiva o no.
Igualitaria o no.
Equitativa o no.
Eficiente o no.
Predecible o no.
La eleccin de unos u otros criterios llevar hacia un comportamiento del sistema completamente dis
tinto, que es el que refleja realmente el criterio de los diseadores o de los que aplican el sistema operativo.
Por ejemplo, un mismo sistema se puede ajustar para favorecer a procesos con un uso intensivo del procesa
dor o de la entrada/salida, aplicar prioridades a distintos procesos o no, admitir a ciertos procesos o no, garan
tizar calidad de servicio o no, etc.
Como en todo sistema poltico, muchos de estos criterios son dependientes entre s y algunos son con
trapuestos, de forma que es imposible optimizar todos de forma simultnea. En el diseo de la poltica de
planificacin es donde se plasman una serie de compromisos entre todos, o algunos, de ellos para conseguir
un determinado comportamiento del sistema. Al final, lo normal en sistemas de propsito general es llegar a
un compromiso que d el mejor comportamiento posible para el conjunto de parmetros a considerar, tenien
do en cuenta todos los tipos de perfiles de procesos posibles en el sistema. Siguiendo con el ejemplo de la
economa, lo normal es que se aplique una poltica mixta que recaude impuestos por tramos, teniendo en
cuenta distintas caractersticas de los contribuyentes. Normalmente, los casos extremos son raros, aunque
pueden existir (piense en Suiza, por ejemplo). Estos casos extremos suelen funcionar slo con sistemas alta
mente especializados y con un perfil muy determinado de trabajos a realizar (por ejemplo, en Suiza, con los
muy ricos). En computacin pueden existir en sistemas dedicados altamente especializados que conocen per
fectamente los procesos que ejecutan. Por ejemplo, una mquina que est calculando el 99% del tiempo del
procesador.
Las polticas de planificacin se implementan mediante algoritmos de planificacin en el ncleo del sis
tema. Existe una amplia variedad de algoritmos de planificacin y de criterios de medida de los mismos. En
este libro los mostraremos siguiendo la distincin clsica entre algoritmos sin expulsin y con expulsin
(tambin llamados apropiativos). A continuacin, se describen los principales algoritmos de cada tipo.
4.7.
173
Instante de llegada
0
10
20
30
algoritmo de planificacin serian slo los cuatro primeros de los identificados en la seccin 4.6.2, que se co
rresponden con cambios de contexto voluntarios.
Como el lector puede comprender, este tipo de algoritmos no son apropiados para sistemas multiusuario
interactivos, donde lo que interesa es atender simultneamente a varios procesos multiplexando el procesa
dor entre ellos. Este modelo se basa ms en el paradigma de servicio completo y proviene de las operacio
nes clsicas cliente/servidor, como pagar a una cajera en el supermercado u obtener un servicio bancario. En
todos estos servicios, una vez que un proceso o thread se apropia del recurso servidor, lo tiene dedicado ex
clusivamente a l hasta que termina, decide irse voluntariamente u ocurre algo (como por ejemplo, la falta de
precio de un producto en el supermercado) que hace que el sistema lo ponga en el estado de bloqueado. No se
plantea expulsin, por lo que el proceso sigue ejecutndose mientras lo desee.
Existen ms algoritmos de planificacin que los mostrados en este libro, dado que este campo ha sido
objeto de mucha investigacin por su importancia en el comportamiento del sistema operativo. A continua
cin, se estudian slo los principales algoritmos usados con planificacin no expulsiva. Para obtener ms
informacin el lector puede acudir a las referencias bibliogrficas del final del captulo.
174
T3
T2
T1
T0!
t=0
Ejecucin
Bloqueado
Listo
170
190
20
Tiempo (ms.)
Tiempo (ms.)
Figura 4.10 Cronograma de ejecucin usando FCFS con otro orden.
175
Tiempo (ms.)
Figura 4.11 Cronograma de ejecucin usando FCFS con bloqueo.
procesos y se habran ejecutado 5. Cuando se despierte de nuevo, debera esperar 180 ms. Y as sucesivamen
te. Imagine ahora que entrara un proceso de 10 segundos, cul sera el efecto sobre nuestro proceso? Evi
dentemente, se puede apreciar que este algoritmo no es muy conveniente para procesos interactivos o con
muchas operaciones de entrada/salida.
Para ver otro ejemplo, imagine que en el sistema entra un proceso cada 5 ms y que tarda en ejecutarse
20 ms sin bloqueos. Si el primer proceso que ejecuta tiene 5 fases que consisten en una rfaga de procesador
de 10 ms y un bloqueo de 20 ms por una operacin de entrada/salida. Cul sera su comportamiento? Ejecu
tara la primera rfaga y se bloqueara. Durante el bloqueo habran llegado otros 4 procesos que deberan eje
cutar y slo se habra ejecutado uno, luego debera esperar:
Tw - 4*20 - 20 = 60 ms
Empezara a ejecutar de nuevo a los 90 ms, pero durante su espera y ejecucin habran entrado otros 14
procesos y se habran ejecutado 5. Cuando se despierte de nuevo, debera esperar 180 ms. Y as sucesivamen
te. Imagine ahora que entrara un proceso de 10 segundos, cul sera el efecto sobre nuestro proceso? Evi
dentemente, se puede apreciar que este algoritmo no es muy conveniente para procesos interactivos o con
muchas operaciones de entrada/salida.
176
Tiempo (ms.)
Tiempo (ms.)
177
(1/n)
(t + . . . +
t0
) =
(1/n) tn + ((n-l)/n)
El problema es que este mtodo es costoso de calcular, supone almacenar muchos valores anteriores y
guarda memoria de toda la vida del proceso. Suponga que un proceso ejecuta una primera rfaga de 150 ms y
5 rfagas sucesivas de 10 ms. Cul sera la siguiente rfaga predicha?
t n+i = (1/ 6) (5 * 10 + 150) = 200 / 6 = 33,3 ms.
Sin embargo, debido a la localidad temporal de los procesos y threads, lo lgico sera elegir 10 ms co
mo siguiente rfaga. Este problema se puede aliviar haciendo que la memoria del algoritmo no sea toda la
vida de rfagas del proceso, sino solo una ventana hacia atrs. En este caso, por ejemplo, si se estima una
ventana k = 4, la rfaga predicha sera:
tn +1 = (1/4) (4 * 10) = 40 / 3 = 10 ms
Este mtodo no es muy bueno cuando las rfagas tienen valores cambiantes, ya que asigna el mismo
peso a todos los valores de rfagas pasados. Qu ocurrira si los valores de las cuatro ltimas rfagas fueran
20, 50, 10 y 50? El valor resultante sera:
Ta+i = (1/ 3) (20 + 50 + 10 + 50) = 130 / 3 = 43,3 ms
Puesto que es ms probable que las instancias de rfagas recientes reflejen mejor el comportamiento del
proceso, es muy habitual usar la media exponencial para predecir la siguiente rfaga:
Tn+i =
a t
(1-a)
El valor de a indica el peso que se da a la historia del proceso. Cuanto ms cercano es a 0, menos im
portancia se da a la historia reciente. Si a es 1 o muy cercano a l , ms reducida es la ventana que importa
para predecir la rfaga. La figura 4.14 muestra una comparativa de prediccin con la media aritmtica y tres
medias exponenciales (0,5, 0,25 y 0,75) para el caso mostrado arriba.
El ltimo problema por resolver es asignar la primera rfaga al proceso, ya que no hay historia de eje
cucin del mismo. Hay dos opciones: tener un valor estndar para todos o tener un histrico de rfaga media
en el sistema. Ambas opciones son vlidas, puesto que los algoritmos anteriores se adaptan a rfagas adecua
das finalmente.
178
O
e
V
\w
.\ V \
\\\V
4rafaga
A ..
\
MA
--M E 0
'E 40 ... , \ V _
20
--- -4----1--- ^
0 ------------ 1------V----
i
" i
i
" i.... .....*l
1
ME 0 25
ME 0,75
Rfaga
179
Linux
3
40; de -20 a 19
100; de 0 a 99
100; de 0 a 99
Baja-> Alta
W indows
2
15; de 1 a 15
16; de 16 a 31
AltaBaja
La prioridad de un proceso o thread puede ser esttica o dinmica. Una prioridad esttica no cambia
durante la vida del proceso o thread, independientemente de sus circunstancias de ejecucin, entorno, etc. Su
prioridad se calcula inicialmente cuando se crea el proceso o thread (consulte el captulo 3) y ya no cambia.
Una prioridad se denomina dinm ica si puede cambiar durante la vida del proceso o thread, dependiendo de
sus circunstancias de ejecucin, entorno, etc. Con este tipo de prioridad, es necesario tener algn criterio para
variar la prioridad del proceso. Por ejemplo, en Linux y UNIX la prioridad dinmica slo se aplica a procesos
convencionales (no de tiempo real) y la establece el planificador basndose en la historia del proceso, tenien
do en cuenta la suma del tiempo que ha pasado en la cola ms el nmero de interrupciones de reloj que le
quedan dentro de su rodaja. Adems, existe el mandato n i c e que permite a un proceso cambiar la prioridad
de un proceso.
En cuanto a la implementacin, se presentan las tres mismas alternativas que en el SJF: cola nica en
orden FIFO, cola nica en orden de prioridad o mltiples colas, una por cada prioridad.
Para analizar su comportamiento vamos a estudiar el siguiente ejemplo consistente en 4 procesos cuyas
caractersticas de rfagas de procesador y prioridad se describen en la tabla 4.3.
La figura 4.15 muestra el cronograma de ejecucin de los trabajos usando el algoritmo de prioridad.
Como se puede ver al tratarse de un algoritmo no expulsivo, las prioridades son slo significativas cuando el
procesador queda libre. Por tanto, T2 debe esperar 30 milisegundos hasta que T0 deje voluntariamente el
procesador para poder hacer valer su prioridad. Un proceso de mxima prioridad debe esperar hasta que con
cluya la rfaga del proceso actual para poder obtener el procesador.
Vamos a estudiar a continuacin el comportamiento del algoritmo de prioridad respecto a los tres
parmetros anteriores: Te, Tw y Tr.
Tiempo medio de ejecucin: 50 + 190 + 50 + 50 ) / 4 = 85 ms.
Tiempo medio de espera: (0 + 70 + 30 + 40) / 4 = 35 ms.
Tiempo medio de respuesta: Asumiendo que el proceso responde algo en cuanto se activa, el tiempo
medio de respuesta ser similar al tiempo medio de espera, es decir, 35 ms.
Como se puede ver, la planificacin basada en prioridades da buenos resultados en rendimientos me
dios. Sin embargo, tiene un problema: cuando las prioridades son estticas puede surgir el problema de la
inanicin, que implica que un proceso pueda estar esperando indefinidamente sin llegar a ejecutar.
Imagine que en un sistema con tres colas de prioridad llegan los siguientes procesos en el instante ini
cial:
Prioridad 0: (P l, 30), (P2, 40)
Prioridad 1:
Prioridad 3: (P3, 30)
T abla 4.3 Procesos de ejemplo en planificacin con prioridades.
Proceso o thread
T0
TI
T2
T3
In stan te de llegada
0
10
20
30
P rio rid ad
4
3
1
2
180
E je c u c i n
Bloqueado
m m - o
20T
Tiem po (ms.)
4.8.
Los algoritmos no expulsivos no son adecuados para realizar la planificacin en un sistema operativo de
propsito general. El algoritmo SJF, a pesar de mejorar el tiempo de espera (y, por tanto, el de respuesta) de
los procesos con respecto al FCFS, no lo hace en un grado suficiente, puesto que, una vez que se le asigna el
181
procesador a un proceso, ste contina hasta que se produce un cambio de contexto voluntario. Los algorit
mos basados en prioridad de carcter no expulsivo, aunque implementan grados de urgencia, no lo hacen de
la forma requerida en un sistema de propsito general, ya que cuando se desbloquea un proceso muy urgente,
debe esperar a que el proceso actual deje voluntariamente el procesador. Adems, los algoritmos no expulsi
vos no proporcionan un buen reparto del procesador. Como el lector puede suponer, los algoritmos expulsi
vos resuelven todas estas deficiencias.
Dos de los algoritmos que se presentan en esta seccin son las versiones expulsivas de dos algoritmos
que se estudiaron en la seccin anterior, concretamente, el algoritmo de planificacin basado en prioridades y
el SJF. Como se coment previamente, se trata de esquemas de planificacin que usan la misma funcin de
planificacin pero que se invoca en distintas situaciones.
182
183
Tiempo (ms.)
Figura 4.17 Cronograma de ejecucin con bloqueo usando un algoritmo de tumo rotatorio.
segundos, dependiendo de la prioridad y grado de interactividad del proceso, siendo 100 el valor por defecto.
En Windows, todos los procesos tienen la misma rodaja, cuyo valor es configurable, tal como se acaba de
explicar. Sin embargo, cuando un proceso pasa a primer plano (normalmente, porque el usuario ha seleccio
nado la ventana asociada al mismo), se le triplica el valor de su rodaja, para, de esta forma, favorecer su eje
cucin y su interaccin con el usuario. Obsrvese que hacer que un proceso tenga una rodaja ms grande es
una manera alternativa de darle ms importancia frente al uso de la prioridad. Para entender la diferencia en
tre estas dos estrategias, supngase que se le quiere dar ms importancia al proceso P que al Q: dando ms
prioridad a P, djamos que Q slo ejecute cuando P no est listo para ejecutar, mientras que otorgando mayor
rodaja a P, hacemos que este proceso obtenga un mayor porcentaje del uso del procesador, pero Q tambin
podr progresar aunque P no se bloquee. Dependiendo de las caractersticas de los procesos, una opcin pue
de ser mejor que la otra.
Para concluir la revisin de este algoritmo, hay que resaltar que, de una manera u otra, est presente en
todos los esquemas de planificacin utilizados en los sistemas operativos de propsito general, puesto que
asegura un reparto equitativo del procesador. Sus dos puntos dbiles son que no favorece a los procesos con
un uso intensivo de la entrada/salida, que es uno de los objetivos de la planificacin, y que no permite implementar grados de urgencia.
184
E je c u c i n
!
Bloqueado
I y / ' i Lsto
pre-
E je c u c i n
s'
Bloqueado
[ L is to
Tiempo (ms.)
Figura 4.19 Cronograma de ejecucin con bloqueo usando un algoritmo SRTF.
185
E je c u c i n
i
Bloqueado
Listo
Tiempo (ms.)
186
Una tcnica interesante que ofrecen algunos sistemas operativos es la cesin de la prioridad. Con esta
tcnica un proceso puede traspasarle a otro parte o toda su prioridad, para favorecer su ejecucin inmediata.
Este mecanismo lo puede usar, por ejemplo, un proceso que ha enviado un mensaje a otro proceso que acta
de servidor solicitando una determinada operacin. El cliente, despus de mandar el mensaje, puede ceder
toda su prioridad al servidor para que ste ejecute con la mayor urgencia posible y Heve a cabo rpidamente
su peticin de servicio.
Recapitulando, hay que resaltar que con este algoritmo se consiguen implementar adecuadamente nive
les de urgencia, pero no proporciona un reparto equitativo del procesador, ni dispensa un mejor trato a los
procesos con un uso intensivo de la entrada/salida, a no ser que la prioridad venga condicionada precisamente
por este factor. Como ha ocurrido en los casos anteriores, un esquema de planificacin real no puede basarse
exclusivamente en este aspecto, pero, por otro lado, tiene que estar incluido en un esquema ms general.
A claracin 4.2. Es conveniente recalcar que no hay ninguna relacin entre las prioridades de los procesos y
los niveles de prioridades de las interrupciones. En un sistema de propsito general un proceso de mxima
prioridad puede ser interrumpido por una interrupcin de mnima prioridad. En un sistema de estas caracters
ticas se considera ms urgente servir una interrupcin, que, al fin y al cabo, es una peticin de servicio urgente por parte de un dispositivo, que ejecutar un proceso de mxima prioridad.
Nivel 1
187
Prioridad m xim a
Nivel 2
Prioridad m edia
Nivel 3
Prioridad m inim a
El nmero de niveles existentes, es decir, el nmero de clases de procesos que se distinguen. Cada
proceso (o thread, en un sistema que implemente esta entidad) pertenece a una clase durante toda su
ejecucin, a no ser que realice una llamada al sistema solicitando cambiar de clase. Normalmente,
cuando se crea un proceso, pertenecer a la misma clase que el proceso padre y seguir en ella, sino
solicita un cambio de clase.
El algoritmo de planificacin que se utiliza para repartir el procesador entre los procesos de un de
terminado nivel.
El esquema de planificacin que se usa para repartir el procesador entre los distintos niveles.
En la figura 4.21 se muestra un ejemplo con tres niveles, tal que en cada nivel se usa un algoritmo de
tumo rotatorio con distinto tamao de la rodaja. En cuanto al mecanismo de planificacin entre niveles, se
usa un esquema de prioridad tal que slo se ejecutarn procesos de un determinado nivel si en los niveles de
mayor prioridad no hay ningn proceso listo. Tngase en cuenta que se pueden usar otros esquemas de plani
ficacin entre niveles como, por ejemplo, un algoritmo de tumo rotatorio, que establecera qu porcentaje del
tiempo del procesador le corresponde a cada nivel.
En el esquema planteado cada proceso est asociado a un determinado nivel durante toda su ejecucin,
a no ser que pida explcitamente un cambio de clase. Existe, sin embargo, un modelo alternativo, denominado
esquema de colas m ultinivel con realim entacin, donde el sistema operativo puede cambiar de nivel a un
proceso dependiendo de su evolucin. En este nuevo modelo existe un parmetro adicional: la poltica de
cambio de nivel, que establece en qu circunstancias un proceso incluido en un determinado nivel pasa a
formar parte de otro nivel. En la figura 4.22 se muestra un ejemplo de este tipo de esquema. Los parmetros
son los mismos que en el ejemplo anterior, pero se le ha aadido la siguiente poltica de cambio de nivel:
Si un proceso de los niveles 1 2 consume su rodaja cuando ejecuta (es decir, su rfaga es mayor
que su rodaja), se le cambia a un nivel inferior.
Si un proceso de los niveles 2 3 no agota su rodaja cuando ejecuta, se le pasa a un nivel superior.
188
Con esta estrategia, los procesos con un uso intensivo de la entrada/salida, estarn en el nivel 1
otorgndoles la mayor prioridad, mientras que los intensivos en el uso del procesador se situarn en el nivel
3, con la menor prioridad, quedando en el nivel intermedio los procesos con un perfil mixto.
Tanto Linux como Windows usan esquemas de planificacin que gestionan clases de procesos siguien
do un modelo sin realimentacin. El esquema de Linux se analizar en la seccin 4.13. En cuanto a Win
dows, distingue entre dos clases de procesos: procesos de tiempo real y procesos normales. Ambas clases
usan un esquema de prioridad, pero con un tratamiento diferente. La prioridad de los procesos de tiempo real,
que es, evidentemente, mayor que la de los procesos normales, es esttica y no se modifica durante la ejecu
cin del proceso, a menos que ste la cambie explcitamente. En cambio, los procesos normales tienen una
prioridad dinmica, que va cambiando segn evoluciona la ejecucin del proceso. Por simplicidad, para evi
tar tener que almacenar explcitamente la clase a la que pertenece cada proceso, las prioridades se asignan de
forma continua: los valores de prioridad entre el 1 y el 15 se corresponden con procesos normales, mientras
que las prioridades desde la 16 a la 31 son de procesos de tiempo real. Tngase en cuenta que, aunque la prio
ridad de los procesos normales es dinmica, nunca puede crecer ms all de un valor de 15.
4.9.
Como se ha podido apreciar en la seccin anterior, cada algoritmo expulsivo satisface algunos de los requisi
tos de la planificacin, pero no cumple con otros. Cmo es entonces un esquema de planificacin real? Qu
algoritmo se utiliza? La respuesta es predecible: uno que sea una mezcla de todos estos algoritmos. Sin em
bargo, queda pendiente la cuestin de saber cmo integrarlos. Esta seccin plantea el diseo de un hipottico
esquema de planificacin que integra todos estos algoritmos tericos, y cuyas caractersticas son similares a
los presentes en los sistemas operativos reales. Adems de revisar aspectos de diseo, tambin se expondrn
algunas consideraciones sobre la implementacin de este esquema. Dado que todava no se han estudiado los
aspectos especficos de la planificacin con threads (seccin 4.11), ni de la planificacin de tiempo real es
tricta (seccin 4.10), as como tampoco se han revisado las tcnicas requeridas para planificar un sistema
multiprocesador (seccin 4.12), se plantea un esquema de planificacin para un sistema de propsito general
destinado a una mquina con un solo procesador y sin threads. Los objetivos que debe satisfacer este planifi
cador son los ya expuestos repetidamente para cualquier planificador de un sistema operativo de propsito
general: favorecer los procesos intensivos en el uso de la entrada/salida, y entre ellos especialmente los inter
activos, ofrecer distintos niveles de urgencia, proporcionar un reparto equitativo del procesador y dar soporte
a sistemas de tiempo real no crtico.
Comenzamos el diseo del planificador con ese ltimo objetivo. Dado que los procesos de tiempo real
tienen unas caractersticas muy distintas de los procesos convencionales, lo ms razonable es disear un pla
nificador que distinga entre dos clases de procesos: los de tiempo real y los normales. Se tratara, por tanto,
de un sistema de colas multinivel sin realimentacin, ya que bajo ninguna circunstancia un proceso normal se
convertir en uno de tiempo real, y viceversa, a no ser que lo pida explcitamente y tenga los permisos nece
sarios para hacerlo. En cuanto al algoritmo de planificacin entre niveles, dado el grado de urgencia de los
procesos de tiempo real, se debe utilizar un algoritmo de prioridad expulsivo, de manera que slo se puedan
ejecutar procesos normales si no hay ningn proceso de tiempo real listo para ejecutar. A continuacin, se
analiza cada uno de los niveles, comenzando por la clase de procesos de tiempo real.
El algoritmo de planificacin del nivel de tiempo real debe ser, evidentemente, un algoritmo de priori
dades expulsivo. El rango de prioridades debera ser lo ms grande posible para facilitar ms precisin a la
hora de fijar los diversos grados de urgencia. La prioridad de cada proceso de tiempo real debera ser esttica,
puesto que es una caracterstica intrnseca del mismo, pudindose cambiar slo por una peticin explcita del
proceso. En cuanto a los procesos con la misma prioridad, se puede usar una estrategia FCFS o una de tumo
rotatorio. En cualquier caso, sera el propio proceso el encargado de establecer cul de las dos estrategias
prefiere y, en caso de que seleccione una poltica de tumo rotatorio, debera fijar el tamao de la rodaja para
ese proceso. Observe que cada proceso usar su propio valor de rodaja, que no debera ser modificado, a me
nos que el proceso lo solicite.
GESTIN DE MEMORIA
La memoria es uno de los recursos ms importantes del computador y, en consecuencia, la parte del sistema
operativo responsable de tratar con este recurso, el gestor de memoria, es un componente bsico del mismo.
Sin embargo, la gestin de memoria no es una labor del sistema operativo nicamente, sino que se realiza
mediante la colaboracin de distintos componentes de muy diversa ndole que se reparten las tareas reque
ridas para llevar a cabo esta labor. Entre estos componentes, adems del propio sistema operativo, estn el
lenguaje de programacin, el compilador, el montador y el hardware de gestin de memoria. Aunque este
capitulo se centra en el sistema operativo, se estudia cmo se integran los diversos componentes para pro
porcionar la funcionalidad requerida. Por otra parte, hay que resaltar que el gestor de memoria es lina de
las partes del sistema operativo que est ms ligada al hardware. Esta estrecha relacin ha hecho que tanto
el hardware como el software de gestin de memoria hayan ido evolucionando juntos. Las necesidades del
sistema operativo han obligado a los diseadores del hardware a incluir nuevos mecanismos que, a su vez,
han posibilitado el uso de nuevos esquemas de gestin de memoria. De hecho, la frontera entre la labor que
realiza el hardware y la que hace el software de gestin de memoria es difusa y ha ido tambin evolucionan
do. El sistema de gestin de memoria ha sufrido grandes cambios segi'm han ido evolucionando los sistemas
operativos. Por ello, en esta presentacin, se ha optado por desarrollar este tema de manera que no slo se
estudie el estado actual del mismo, sino que tambin se pueda conocer su evolucin desde los sistemas ms
primitivos, ya obsoletos, hasta los ms novedosos. Consideramos que este enfoque va a permitir que el lector
entienda mejor qu aportan las caractersticas presentes en los sistemas actuales.
Por lo que se refiere a la organizacin del captulo, en primer lugar, se analizarn aspectos generales
sobre la gestin de memoria, lo que permitir fijar los objetivos del sistema de memoria y establecer un con
texto general para el resto del captulo. Posteriormente, se mostrarn las distintas fases que conlleva la ge
neracin de un ejecutable y se estudiar cmo es el mapa de memoria de un proceso. En las siguientes
secciones se analizar cmo ha sido la evolucin de la gestin de la memoria, desde los sistemas multiprogramados ms primitivos hasta los sistemas actuales basados en la tcnica de memoria virtual. Por ltimo,
se estudiarn algunos de los servicios de gestin de memoria de UNIX y de Windows. El ndice del captulo
es el siguiente:
Introduccin.
Aspectos generales de la gestin de memoria.
Modelo de memoria de un proceso.
Esquemas de gestin de la memoria del sistema.
Memoria virtual.
Servicios de gestin de memoria.
Gestin de memoria
Edificio
:q:
.
111. habitacin
rla..i I.....
:.... i _
s;
Itrg habit ; jhab
219
p
.o
II
|jg.. |
5.2.
En esta seccin se analizarn aspectos generales sobre la gestin de memoria, lo que permitir fijar los obje
tivos del sistema de memoria y establecer un contexto general para el resto del captulo. En primer lugar, se
analizar cules son los niveles de gestin presentes en el sistema de memoria. Acto seguido, se expondrn
las necesidades que tienen los programas con respecto al mismo y cmo el sistema operativo satisface estos
requisitos y los suyos propios. A continuacin, se estudiar el problema general de la asignacin de memoria
dinmica, presente en todos los niveles de gestin, y se mostrar el largo camino de transformaciones que
deben producirse para convertir el acceso simblico que realiza un programa en un acceso real a la memoria.
220
Este esquema de tres niveles es el ms habitual, pero, como se ver a lo largo del captulo, en alguno %
sistemas de gestin de memoria se fusionan dos de estos niveles (el de procesos y el de regiones), quedando '
slo dos presentes (como se estudiar ms adelante, esta situacin se produce en un sistema basado en see
mentacin). Siguiendo el smil, considere qu ocurrira si un apartamento pudiera estar formado por habita
ciones pertenecientes a distintos edificios. En ese caso, slo habra dos niveles de gestin: cmo se reparte eF
espacio urbanizable entre los edificios y de qu manera se distribuyen las habitaciones de cada apartamento is
entre los distintos edificios.
A lo largo del captulo, se estudiarn estos tres niveles mostrando para cada uno de ellos las distintas
soluciones existentes. Es interesante resaltar que, aunque es muy diferente la forma de gestionar cada nivel
puesto que son intrnsicamente distintos, existen algunas similitudes, ya que, al fin y al cabo, en todos los'
casos se trata de repartir un espacio. No obstante, en cada nivel, las peticiones de reserva de memoria correspondern a eventos totalmente distintos. A continuacin, se analiza qu tipo de operaciones genricas existen
en cada nivel. Esta enumeracin de operaciones genricas, adems de tener inters en s misma, va a permitir
que cuando se presente cada uno de los esquemas de gestin de memoria, se explique ms sistemticamente
su modo de operacin, mostrando cmo se implementan dichas operaciones en el mismo. A cada operacin
le asignamos un nombre para facilitar el hacer referencia a la misma.
Operaciones en el nivel de procesos
En el nivel de procesos se realizan operaciones vinculadas con la gestin del mapa de memoria del proceso.
C rear el m apa de m em oria del proceso {crearjnap). Antes de comenzar la ejecucin de un pro
grama, hay que iniciar su imagen de memoria tomando como base el fichero ejecutable que lo con
tiene. En UNIX se trata del servicio e x e c , mientras que en Windows es C r e a t e P r o c e s s , ya
estudiados en el captulo 3.
E lim inar el m apa de m em oria del proceso {eliminarjnapa). Cuando termina la ejecucin de un
proceso, hay que liberar todos sus recursos, entre los que est su mapa de memoria. En el caso de
UNIX, tambin hay que liberar el mapa actual del proceso en el servicio e x e c , antes de crear el
nuevo mapa basado en el ejecutable especificado.
D uplicar el m apa de m em oria del proceso (duplicar mapa). El servicio f o r k de UNIX crea un
nuevo proceso cuyo mapa de memoria es un duplicado del mapa del padre.
Para completar este nivel, y aunque no tenga que ver directamente con la solicitud y liberacin de espa
cio, falta una operacin genrica adicional asociada al cambio de contexto:
C am biar de m apa de m em oria de proceso (cambiarjnapa). Cuando se produce un cambio de
contexto, habr que activar de alguna forma el nuevo mapa y desactivar el anterior.
Operaciones en el nivel de regiones
En el nivel de regiones, las operaciones estn relacionadas con la gestin de las regiones.
C rear una regin dentro del m apa de un proceso (crear regin). Esta operacin ser activada al
crear el mapa del proceso, para crear las regiones iniciales del mismo. Adems, se utilizar para ir
creando las nuevas regiones que aparezcan segn se va ejecutando el proceso.
E lim inar un a regin del m apa de un proceso (eliminar regin). Al terminar un proceso hay que
eliminar todas sus regiones. Adems, hay regiones que desaparecen durante la ejecucin del proceso.
C am b iar el tam ao de una regin (redimensionar_regin). Algunas regiones, como la pila y el
heap, tienen un tamao dinmico que evoluciona segn lo vaya requiriendo el proceso.
D uplicar un a regin del m apa de un proceso en el m apa de otro (duplicar regin). El duplicado
del mapa asociado al servicio f o r k requiere duplicar cada una de las regiones del proceso padre.
Gestin de memoria
221
< i= 0 ; i<tam ,- i+ + )
-m
fe
i
^
- ;
S is te m a O perativo
... V 7-
*T
Figura 5.5 Problemas al compartir una zona en diferentes direcciones del mapa de cada proceso.
cin debe permitir en este caso que direcciones lgicas de dos o ms procesos, posiblemente distintas entre
s, se correspondan con la misma direccin fsica.
La posibilidad de que los procesos compartan una zona de memoria hacindola corresponder a rangos
diferentes de su espacio lgico presenta problemas en determinadas circunstancias. Considere el caso de que
una posicin de memoria de la zona compartida tenga que contener la direccin de otra posicin de dicha
zona (o sea, una referencia), debido a que, por ejemplo, la zona compartida contiene una estructura de lista
basada en punteros. Como se puede apreciar en la figura 5.5, no es posible determinar qu direccin almace
nar en la posicin origen, puesto que cada proceso ve la posicin referenciada en una direccin diferente de
su mapa de memoria. A esta anomala la denominaremos el problem a de las autorreferencias.
Soporte de las regiones del proceso
Como se analizar con ms detalle en secciones posteriores, el mapa de un proceso no es homogneo, sino
que est formado por distintos tipos de regiones con diferentes caractersticas y propiedades. El programa
necesita que el sistema de memoria gestione adecuadamente las caractersticas especficas de cada tipo de
regin. As, por ejemplo, el contenido de la regin que contiene el cdigo del programa normalmente no debe
poder modificarse. Se debera detectar cualquier intento de escritura sobre una direccin incluida en dicha
regin y tratarlo adecuadamente (por ejemplo, enviando una seal al proceso).
Otro aspecto a resaltar es que el mapa del proceso no es esttico. Durante la ejecucin de un programa,
puede variar el tamao de una regin. Tmese como ejemplo el comportamiento dinmico de la regin de
pila del proceso, que crece segn se van realizando llamadas a procedimiento. Asimismo, pueden aparecer
nuevas regiones o eliminarse regiones existentes. As, por ejemplo, cuando se crea un thread, aparecer una
nueva regin que corresponde a la pila del nuevo thread, que desaparecer cuando ste termine. Este carcter
dinmico del mapa de un proceso puede implicar la existencia de zonas dentro del mapa de memoria del pro
ceso que en un determinado momento de su ejecucin no pertenecen a ninguna regin, y que, por tanto, cual
quier acceso a las mismas implica un error de programacin. El gestor de memoria debera detectar cundo se
produce un acceso a las mismas y, como en el caso anterior, tratarlo adecuadamente. Adems, en aras de un
buen aprovechamiento de la memoria, el esquema de gestin de memoria debe evitar reservar memoria para
las zonas del mapa que no estn asignadas al proceso en un determinado instante.
Algunas aplicaciones sofisticadas requieren un nmero muy elevado de regiones. El sistema de memo
ria debera permitirlo. En algunos casos se trata de procesos que necesitan un nmero muy grande de regio
nes, pero tal que stas, adems, son de carcter dinmico, con lo que es necesario asegurar que tienen espacio
entre ellas para crecer sin solaparse. De este tipo de aplicaciones se dice que tienen un espacio de direccio
nes disperso, en el sentido de que las regiones estarn diseminadas por todo el espacio de direcciones del
proceso. El sistema de memoria debe dar soporte a este tipo de aplicaciones intentando minimizar el gasto de
recursos.
Hay que resaltar que el sistema operativo no se encarga de proporcionar directamente los diversos tipos
de objetos de memoria, siendo sta una labor del lenguaje de programacin. Sin embargo, consideramos que
es necesario conocerlos para entender de qu manera estn asociados con los diversos tipos de regiones pre
sentes en un proceso.
P ersistencia de datos
Las aplicaciones necesitan poder almacenar datos de forma persistente, de manera que pervivan cuando ter
mine su ejecucin e incluso cuando se apague su computador. Como el lector conoce sobradamente, este re
quisito se satisface mediante el uso de ficheros que se almacenan en dispositivos de almacenamiento no
voltiles. Como se estudiar en el captulo dedicado al sistema de ficheros, ste ofrece una coleccin de fun
ciones que permite almacenar y recuperar informacin del programa en ficheros. Sin embargo, este modo de
operacin requiere que el programador incluya explcitamente en su cdigo llamadas al sistema de ficheros.
Un modo alternativo, que puede ser ms conveniente para muchas aplicaciones, es uno en el que, una vez
marcados ciertos datos como persistentes, no sea necesario invocar funciones del sistema de ficheros. En su
lugar, el programa accede a esos datos como al resto de las variables, realizndose de forma automtica su
salvaguarda y recuperacin del almacenamiento no voltil. La mayora de los sistemas operativos actuales
ofrecen este tipo de acceso alternativo a los datos persistentes dentro de los servicios proporcionados por el
sistema de gestin de memoria, usando, como se analizar al final del captulo, la tcnica de la proyeccin de
ficheros.
D esarrollo m odular
Cuando se afronta el desarrollo de una aplicacin de una cierta envergadura, es conveniente hacerlo de una
manera modular. Observe que intencionadamente no se va a definir con precisin a qu nos referimos con el
trmino mdulo, resaltando nicamente que se trata de una unidad de compilacin independiente, y obviando
cualquier otro aspecto que no sea pertinente para esta presentacin El desarrollo modular permite programar
y compilar cada mdulo de una manera independiente, y luego integrar todos los mdulos requeridos con
formando el programa ejecutable. Esta tcnica facilita el desarrollo incremental y fomenta la reutilizacin del
software. Es importante resaltar que durante la fase de compilacin de un mdulo no se conoce con qu otros
mdulos se integrar para formar un ejecutable. Por tanto, en el cdigo objeto resultante de la compilacin de
un mdulo se incluirn referencias a direcciones de memoria dentro del mbito del mdulo (normalmente,
entre 0 y un valor mximo). Aprciese que vuelve a requerirse un proceso de traduccin (reubicacin). Sin
A pesar de sus peculiaridades, el sistema operativo es al fin y al cabo un programa ms. Por tanto, se plantea
si es necesario un proceso de reubicacin de las direcciones contenidas en el fichero ejecutable del sistema
operativo, como ocurre con el resto de los programas. En este caso, en principio, no sera estrictamente nece
saria la traduccin, ya que el sistema operativo puede compilarse de manera que utilice un determinado rango
de direcciones (por ejemplo, desde 0 hasta un valor mximo) y cargarse justo en ese rango (al principio de la
memoria, en caso de que se haya compilado en un rango que comienza por 0), eliminando la necesidad de la
reubicacin. De cualquier manera, el uso de una funcin de traduccin puede ser conveniente, puesto que
proporciona ms flexibilidad. Para entender esto, considere qu ocurrira, en caso de que no hubiera reubica
cin, si el sistema operativo estuviera compilado para usar un cierto rango de direcciones y este rango no
estuviera disponible debido a que, por ejemplo, correspondiera a memoria ROM. En este caso, no sera posi
ble la ejecucin del sistema operativo. El uso de la reubicacin tambin en el sistema operativo proporciona
un grado de flexibilidad que permite cargarlo en cualquier rango de direcciones, creando un mapa propio
para el mismo.
Como ocurre con la reubicacin de procesos, la solucin usada para el sistema operativo es una reubi
cacin hardware, es decir, las direcciones generadas por el cdigo del sistema operativo son traducidas en
tiempo de ejecucin por la MMU. Esta circunstancia plantea un problema del tipo huevo o gallina (qu fue
antes?): el sistema operativo es el encargado de indicar a la MMU cul debe ser la funcin de traduccin que
r .w .o
7 '- '
bW
Blo qi
; Bloqi
- i. ,- - '
?;
......
e.
B lo qi
234
Gestin de memoria
235
El prxim o que ajuste (next fit). Se trata de una pequea variacin del first fit, tal que cada vez que
se realiza una nueva bsqueda se consideran primero los huecos que no se analizaron en la bsqueda
previa, y se usa el primero de ellos que encaje. De esta forma, se va rotando entre los huecos dispo
nibles a la hora de satisfacer las peticiones sucesivas. Esta estrategia distribuye de manera ms uni
forme las reservas a lo largo de la memoria, lo que puede ser beneficioso en ciertos problemas de
gestin de memoria.
Gestin de la inform acin de estado
Para poder gestionar el espacio de almacenamiento en cuestin, es necesario mantener informacin sobre el
estado del mismo, identificando los bloques y huecos existentes, y organizando la informacin de estos lti
mos en algn tipo de estructura de datos que permita un uso eficiente, tanto en las operaciones de reserva
como de liberacin.
Un primer aspecto a tener en cuenta es dnde se almacena esta informacin de estado, presentndose
dos posibilidades: usar alguna zona de memoria ajena al espacio de almacenamiento que se est gestionando
(en el ejemplo planteado, supngase que se utiliza un mueble archivador para guardar la informacin sobre
los apartamentos alquilados y el espacio libre disponible, y que este mueble est almacenado en una estancia
externa a la nave) o utilizar el espacio de cada bloque y cada hueco para almacenar su informacin (en el
ejemplo, la informacin sobre cada apartamento ocupado y cada espacio libre se guarda en la propia zona,
ocupando parte del espacio de la misma). Ntese que si se usa la opcin del almacenamiento interno, el espa
cio asignado a una peticin debe ser mayor que el solicitado para poder incluir la informacin del estado del
mismo, aunque, por otro lado, si se trata de un hueco, la informacin de estado no consume un espacio til. A
lo largo del captulo, se presentan esquemas de ambos tipos.
Con independencia de si se almacena la informacin de estado interna o externamente, existen mlti
ples alternativas a la hora de elegir qu estructura de datos se va a utilizar para mantener el conjunto de hue
cos disponibles en cada momento. A continuacin, se analizan las tres opciones ms habituales: lista nica,
mltiples listas y mapas de bits.
La solucin ms usada consiste en enlazar los huecos disponibles en una nica lista (si la informacin
de estado se almacena externamente, ms que de huecos, se trata de una lista de nodos tal que cada nodo con
tiene informacin de un hueco; tambin se requerira en este caso una lista de bloques). Habitualmente, se
trata de una lista doblemente encadenada y ordenada. Existen mltiples criterios a la hora de ordenar la lista,
entre los que se encuentran los siguientes: por la direccin de comienzo de cada hueco, el ms habitual ya
que facilita la gestin, por el tamao de los huecos, que sera apropiado para una poltica del mejor ajuste, en
orden LIFO (ltimo hueco generado es el primero usado), que puede generar un mejor uso de la cach. Ini
cialmente, toda la memoria disponible formar un nico hueco. Para satisfacer una peticin* hay que recorrer
la lista buscando el hueco adecuado de acuerdo con el algoritmo de asignacin de espacio usado,, que podr
ser cualquiera de los cuatro algoritmos presentados anteriormente. Si se genera un espacio sobrante, se in
cluir en la lista en la posicin que le corresponda segn el orden establecido. Cuando se libere un bloque, se
crear un hueco con ese espacio, compactndolo con los huecos adyacentes, en caso de que los haya. Como
se puede apreciar, esta estrategia sufre de fragmentacin extema. Este esquema ofrece un tiempo de bsque
da de un hueco proporcional al tamao de la lista de huecos. Por otro lado, en caso de usarse en un sistema
multiprocesador, la bsqueda en la lista nica puede convertirse en un cuello de botella al requerir un acceso
sincronizado.
En la figura 5.9 se muestra un ejemplo del uso de este esquema con una poltica del prximo que ajuste,
un almacenamiento interno de la informacin de estado y una lista circular unidireccional ordenada por las
direcciones de comienzo de los huecos. En los primeros cuatro bytes de cada bloque y de cada hueco, se al
macena su tamao en bytes, excluyendo esos cuatro bytes. En el caso de los huecos, en los 4 siguientes bytes
se almacena el puntero que hace referencia al siguiente hueco de la lista. Para implementar la poltica del
prximo que ajuste, se mantiene un puntero {prximo) que indica cul es el siguiente hueco a considerar a la
hora de satisfacer una peticin. En la parte superior de la figura se muestra el estado de una zona de 64 bytes
(se trata de un ejemplo a pequea escala) que tiene dos huecos (dibujados en blanco) de 12 bytes y dos blo
ques (dibujados como sombreados) de 20 y 4 bytes, respectivamente. Suponga que en esta situacin se pro-
236
Gestin de memoria
237
; .V;
4
SI M
:S?y r/i':
V jv
'P r
i'
4
'
.fe
' <
Figura 5.11 Ejemplo de uso de un esquema de mltiples listas con particiones estticas.
por lo que, realmente, las listas tienen un tamao til de 4 y 12 bytes, respectivamente. En cuanto a los hue
cos, no es necesario almacenar su tamao al ser ste fijo. Slo se precisa guardar en los primeros cuatro bytes
el puntero que hace referencia al siguiente hueco de la lista de ese tamao. El estado de partida de la figura,
que corresponde con la parte superior, representa una situacin en la que se han reservado dos bloques de
tamao 4 y uno de tamao 8, que se ha redondeado a 12 para encajar en el tamao de una de las listas, provo
cando una fragmentacin interna de 4 bytes, que en la figura se representa con un sombreado de menor inten
sidad. En la parte inferior de la figura, se muestra cul sera el estado resultante despus de satisfacer tres
peticiones adicionales de 4 bytes. Como puede apreciarse, al agotarse los huecos del tamao adecuado, se ha
usado uno de tamao 16, provocando una fragmentacin interna de 8 bytes, nuevamente mostrada en la figu
ra con un sombreado de menor intensidad.
El segundo esquema de este tipo se denomina sistem a buddy binario (hay otro algoritmo buddy basado
en la secuencia de nmeros de Fibonacci, que queda fuera de esta exposicin). Este esquema intenta reducir
el nivel de fragmentacin interna presente en el anterior, permitiendo que se generen huecos con el espacio
sobrante cuando se usa un hueco de una lista de mayor tamao que el requerido, pero manteniendo ciertas
restricciones que aseguran que el nivel de sobrecarga asociado a la gestin de los huecos sea muy limitado.
En este esquema la lista de tamaos sigue una secuencia de potencias de 2, desde un tamao mnimo de 2M
hasta uno mximo de 2N (siendo N>M). Cuando se produce una solicitud, el tamao de las peticiones se re
dondea por exceso al ms cercano. Como ocurra en la solucin previa, si hay un hueco en la lista del tamao
correspondiente, se asigna completo, producindose fragmentacin interna, y si no lo hay, se busca un hueco
sucesivamente en las listas de los siguientes niveles, y se usa. La diferencia es que en este caso s se genera
un hueco con el espacio sobrante y, adems, que cuando el bloque se libere, se intentar compactar con los
posibles huecos adyacentes. Sin embargo, esta gestin de huecos se realiza con unas ciertas restricciones, que
reducen sensiblemente su complejidad.
A continuacin, se explica brevemente el modo de operacin de este algoritmo mostrando cmo se lle
van a cabo las operaciones de reserva y de liberacin de espacio:
Inicialmente, toda la zona de memoria est, evidentemente, libre y, por tanto, estar incluida como
huecos en la lista correspondiente al tamao mximo (2N).
Cuando llega una peticin y no hay huecos libres en la lista que corresponde (tamao 2P), se busca
en la lista siguiente (tamao 2P+I).
Si hay un hueco en esa lista, se rompe en dos partes: el fragmento de direccin ms baja (al que lla
maremos parte inferior) se usa para satisfacer la peticin, mientras que el otro fragmento (al que de
nominaremos parte superior), se incluye en la lista pertinente (la de tamao igual a 2P). En caso de
que no lo haya, se busca en la siguiente lista (tamao 2P+3).
Si nos fijamos en las direcciones, podemos apreciar que dos huecos amiguetes, como el primero y el
segundo, o el tercero y el cuarto, se diferencian en el bit sexto (considerando el bit de menor peso como el bit
0), que es justo la posicin correspondiente al tamao de la lista. Por tanto, bastar con invertir ese bit en la
direccin de comienzo de un hueco para encontrar a su amigete.
Este esquema presenta un nivel de fragmentacin interna considerable, aunque mucho menor que el de
particiones fijas. Con este esquema, en el peor de los casos, se desperdicia un espacio ligeramente menor que
el tamao de los huecos de la lista anterior a la usada. Ese peor caso, correspondera a una peticin que tenga
justamente un tamao que exceda ligeramente el valor de una potencia de 2. Esa peticin no podra usar la
lista correspondiente a esa potencia, sino que utilizara la siguiente, que es el doble de grande, malgastndose,
por tanto, casi la mitad del hueco asignado. As, por ejemplo, a una peticin de tamao 36 se le asignara un
hueco de tamao 64 desperdicindose 28 bytes, que es un valor ligeramente inferior que el tamao de los
huecos de la lista anterior, es decir, 32 bytes.
En la figura 5.12 se muestra un ejemplo de este esquema, aplicado a una zona de 64 bytes, utilizando
listas de huecos de tamao 8, 16 y 32 bytes. Como ocurra en la solucin anterior, en los primeros cuatro by-
240
iU
II
Gestin de memoria
241
Huecos de tamaa 32
looooool lioooool
Huecos de tamao 16
. .. .
OOOOOOOOOOOOOOOOllllllllllllllllllllllllOOOOOOOOOOOOOOOOOOOOOOOG
242
Para terminar esta seccin, se expone una consideracin sobre los niveles mltiples de gestin de me
moria. Retomando el ejemplo planteado del alquiler de apartamentos, supngase que una persona que ha al
quilado un apartamento se plantea, a su vez, compartimentarlo en habitaciones y alquilarlas a terceros. Se
tratada de una situacin en la que existiran dos niveles de gestin de memoria. En cada uno de ellos, se
podra usar un esquema distinto. Por ejemplo, el propietario de la nave podra realizar una asignacin din
mica similar al esquema de lista nica, mientras que el que pretende realquilar su apartamento podra hacer
una particin esttica de habitaciones. Es interesante resaltar cmo cambia la visin sobre el estado de una
zona dependiendo desde qu nivel se contemple. As, una habitacin de un apartamento que no ha sido real
quilada est libre para la persona que tiene alquilado el apartamento, pero, sin embargo, est ocupada desde
el punto de vista del propietario de la nave, como parte del apartamento que es. Esta consideracin se puede
aplicar a cualquier sistema donde existan mltiples niveles de gestin de memoria.
s]
[Df ]
La primera etapa de este proceso es la resolucin de smbolos, que determina en qu mdulo M est
definido el smbolo referenciado (S), as como con qu direccin D m dentro del contexto del mdulo se co
rresponde (generalmente, los smbolos definidos en un mdulo tendrn asignadas direcciones entre 0 y un
valor mximo).
[p, s ]
Esta etapa de resolucin ser igual en todos los esquemas de gestin de memoria: el compilador, si el
smbolo est definido en el mismo mdulo, o el montador, en caso de estar definido en otro mdulo, se en
cargarn de la misma, excepto si hay montaje dinmico (vase la seccin 5.3.3), donde la resolucin se reali
za en tiempo de ejecucin. Terminada esta fase, falta todava el resto del proceso de traduccin:
[P, M, D] -
[D]
En esa expresin se puede apreciar que se trata de una transformacin de un espacio tridimensional (la
direccin Dm corresponde al mbito del mdulo M, que, dado que puede haber mltiples activaciones del
Gestin de memoria
243
Espacio destino 1
Espacio origen '
600
Espacio destino 2
Espacio origen 2
100
En algunos casos, la funcin de reubicacin puede ser slo aplicable a un subconjunto de las direccio
nes del espacio origen, generando un error -cuando se utiliza con una direccin que no pertenece al subcon
junto de direcciones vlidas (como veremos adelante, esta circunstancia ser til para proporcionar un
soporte adecuado a las regiones de un proceso):
Reubicacin(D) > D' kj Error
La funcin de reubicacin puede ser tan sencilla como sumar a toda direccin un determinado despla
zamiento, lo que hara que en el espacio destino las direcciones se mantuvieran contiguas (reubicacin line
al), o mucho ms compleja, sin mantener la contigidad (reubicacin no lineal), pudiendo requerir para poder
ser aplicada una tabla de correspondencias entre valores de entrada y de salida, como ocurre con la pagina
cin, que se estudiar ms adelante. A pesar de su mayor complejidad, la reubicacin no lineal presenta ven
tajas en ciertas situaciones, ya que favorece un mejor aprovechamiento de la memoria al no requerir
contigidad en el espacio destino (como se ver ms adelante, esto es especialmente beneficioso en el nivel
de procesos). En la figura 5.15 se muestran dos ejemplos de funciones de reubicacin: la funcin aplicada al
primer espacio origen es de carcter lineal y se tratara de un simple desplazamiento de 100 unidades, mien
tras que la utilizada en el segundo espacio origen es no lineal.
Ese tipo de reubicacin, a la que denominaremos reubicacin simple, hace corresponder un nico es
pacio origen con un espacio destino. Sin embargo, para realizar el aplanamiento de la direccin, es necesario
establecer una correspondencia entre mltiples espacios origen y un destino, de forma que la funcin de
transformacin no slo dependa de la direccin D, sino tambin del espacio origen (es decir, del contexto C)
donde est definida, dando como resultado una direccin D independiente de ese contexto:
Reubicacin(C,
D)
>
D'
244
Espacio origen 1
Espacio destino
600
400
Gestin de memoria
245
[P, Dp]
[D]
246
Edificio
Edificio
1 U
Edificio
Terreno
Edificio
Edificio
Edificio
Edificio
Edificio
[Df ]
[P, Dp]
> [Df]
S]
[P ,
M,
D J
-> [ P ,
R,
Dr ]
[P ,
Dp] - [Dg]
->
[Df]
S]
[ P ( M,
DJ
[P( R, DJ
[D J
[Df]
Para terminar esta seccin, y aunque pequemos de ser un poco reiterativos, volvemos a aconsejar al lec
tor que no se desanime si no ha comprendido totalmente el sentido y la utilidad de esta notacin. Estamos
convencidos de que, segn vaya aplicndose a la hora de clasificar las distintas tcnicas de gestin de memo
ria, el lector llegar a entenderla y apreciarla.
5.3.
Esta seccin se centra en todos los aspectos relacionados con la gestin del mapa de memoria de un proceso
y las regiones incluidas en el mismo, abarcando todo el espectro que va desde la generacin del cdigo ejecu
table del programa hasta la propia ejecucin del mismo. Por tanto, los conceptos presentados en esta seccin
se corresponden directamente con lo que hemos identificado anteriormente como el nivel de regiones (y tam
bin con el de zonas, puesto que se analizar cmo se implementan aquellas regiones que engloban zonas
independientes, concretamente, la pila y el heap).
En primer lugar, se analizar cmo se implementan los distintos tipos de objetos de memoria requeridos
por los programas y cul es su correspondencia con el mapa de memoria del proceso, haciendo especial nfa
sis en la gestin de los datos de carcter dinmico. Acto seguido, dado que el mapa inicial de un proceso est
muy vinculado con el fichero que contiene el programa ejecutable asociado al mismo, se estudiar cmo es el
ciclo de vida de un programa, desde que se tiene escrito su cdigo fuente hasta su activacin y ejecucin,
pasando anteriormente por las fases de compilacin y montaje. Como parte de este estudio, se mostrar cmo
316
Resolucin/R.mdulos
Compilador/montador
Compilador/montador
Compilador/montador
Compilador/montador
Compilador/montador
Compilador/montador
Compilador/montador
R. regiones
R. procesos
Montador
Cargador
Montador
MMU
MMU (seg)
Montador
| MMU (pg)
MMU (seg)
MMU (seg)
MMU (pg)
Montador
Cargador
R. global
MMU (pg)
MMU (pg)
A claracin 5.7. En algunas arquitecturas, las direcciones que se usan para acceder a memoria (llamadas ca
pabilities), adems de la referencia a la posicin de memoria propiamente dicha, incluyen uno o ms bits de
informacin de proteccin, que, entre otras cosas, identifican que se trata de una direccin de acceso a memo
ria. El aspecto interesante de las capabilities es que slo se pueden modificar estando en modo privilegiado:
Por tanto, slo en dicho modo se pueden generar direcciones vlidas de acceso a memoria. Un proceso podr
usar las posiciones de memoria que le ha asignado el sistema operativo, puesto que ste le ha proporcionado
las capabilities requeridas para acceder a las mismas. Sin embargo, no podr acceder a otras direcciones,
puesto que la unidad de control del procesador asegura que una capability slo se puede modificar en modo
privilegiado. El mecanismo de capabilities asegura la proteccin requerida, permitiendo usar direcciones
fsicas directamente, lo que elimina el problema de las autorreferencias. La reubicacin necesaria se puede
realizar por software. El nico problema de este mecanismo, que ha limitado considerablemente su impacto,
es que requiere un procesador con una arquitectura muy especfica.__________________
x
Para terminar esta seccin, se plantea la tabla 5.1, que sirve de recapitulacin de la misma y muestra
una comparativa de los distintos esquemas de gestin de memoria estudiados, mostrando cmo se llevan a
cabo las distintas etapas identificadas en la seccin 5.2.5.
5.5.
M EM O RIA V IR TU A L
En prcticamente todos los sistemas operativos de propsito general actuales se usa la tcnica de memoria
virtual. Hasta el momento, por motivos pedaggicos, se han presentado los diversos esquemas de memoria
sin apenas hacer referencia a esta tcnica. En esta seccin se estudiar esta tcnica mostrando cmo se integra
con estos esquemas de gestin de memoria. En el primer captulo ya se presentaron los fundamentos de la
memoria virtual, explicando aspectos tales como la jerarqua de memoria o la proximidad de referencias, por
lo que no se volver a incidir en los mismos. Como se apreciar a lo largo de esta seccin, la memoria virtual
resuelve dos de los objetivos del sistema de memoria identificados al principio del captulo: ejecutar ms
procesos de los que caben en la memoria principal, y ejecutar un proceso cuyo mapa no cabe en la memoria.
Antes de la aparicin de la memoria virtual, esas dos necesidades ya existan y se intentaban resolver de la
mejor manera posible, teniendo en cuenta la tecnologa presente por entonces. Esta seccin, por tanto, co
m enzar presentando las tcnicas de intercambio y de overlays como precedentes de la memoria virtual. A
continuacin, se analizarn las diversas polticas de administracin de la memoria virtual, especialmente, las
estrategias de reemplazo y las polticas de reparto de la memoria entre los procesos.
5.5.1. Intercambio
Como se coment previamente, la tcnica del intercambio (swapping) signific en su momento una manera
de perm itir que en los sistemas del tiempo compartido existieran ms procesos de los que caben en memoria.
Gestin de memoria
317
Se puede considerar que se trata de un mecanismo antecesor de la memoria virtual. En este apartado se pre
sentarn de forma breve los fundamentos de esta tcnica.
El intercambio se basa en utilizar un disco o parte de un disco como respaldo de la memoria principal.
Esta zona de almacenamiento se denomina dispositivo de swap. Cuando no caben en memoria todos los pro
cesos activos (por ejemplo, debido a que se ha creado uno nuevo), se elige un proceso residente y se copia en
swap su imagen en memoria. El criterio de seleccin puede tener en cuenta aspectos tales como la prioridad
del proceso, el tamao de su mapa de memoria, el tiempo que lleva ejecutando y, principalmente, su estado.
Es preferible expulsar (swap out) procesos que estn bloqueados. Cuando se expulsa un proceso, no es nece
sario copiar toda su imagen al dispositivo de swap. Los huecos en el mapa no es preciso copiarlos, ya que su
contenido es intrascendente. Tampoco se tiene que copiar el cdigo, puesto que se puede volver a recuperar
directamente del ejecutable.
Evidentemente, un proceso expulsado tarde o temprano debe volver a activarse y cargarse en memoria
principal (swap in). Slo se deberan volver a cargar aquellos procesos que estn listos para ejecutar. Esta
readmisin en memoria se activar cuando haya espacio de memoria disponible (por ejemplo, debido a que
se ha terminado un proceso) o cuando el proceso lleve un cierto tiempo expulsado. Tngase en cuenta que al
tratarse de un sistema de tiempo compartido, se debe repartir el procesador entre todos los procesos. Por ello,
en numerosas ocasiones hay que expulsar un proceso para poder traer de nuevo a memoria a otro proceso que
lleva expulsado un tiempo suficiente.
La estrategia que decide cundo expulsar un proceso a swap y cundo reincorporarlo a memoria se co
rresponde con la planificacin a medio plazo presentada en el captulo 4.
En cuanto al dispositivo de swap, hay dos alternativas en la asignacin de espacio:
Con preasignacin: Al crear el proceso ya se reserva espacio de swap suficiente para albergarlo. Si
el proceso nunca se expulsa, se desperdicia el espacio asignado.
Sin preasignacin. Slo se reserva espacio de swap cuando se expulsa el proceso. Puede haber pro
blemas si se intenta expulsar un proceso a swap para traer a otro proceso y no hay espacio en el dis
positivo.
Un ltimo aspecto a tener en cuenta es que no debera expulsarse un proceso mientras se estn realizan
do operaciones de entrada/salida por DMA vinculadas a su imagen de memoria, ya que provocara que el
dispositivo accediera al mapa de otro proceso.
5.5.2. Overlays
En los tiempos en los que todava no se haba propuesto la tcnica de memoria virtual y las memorias tenan
una capacidad limitada, se presentaba con cierta frecuencia el problema de que un determinado programa no
cupiera en memoria. Para resolver dentro de lo posible este problema, se ide la tcnica de los overlays. Se
trataba de un esquema que no era transparente al programador, puesto que ste tena que determinar si ciertos
mdulos de su programa no requeran estar simultneamente en memoria en tiempo de ejecucin y que, por
tanto, podran usar la misma zona de memoria en distintas fases de ejecucin del programa. El programador
usaba un lenguaje de definicin de overlays para notificar al montador esta informacin. El montador gene
raba un fichero ejecutable en el que inclua automticamente cdigo para cargar y descargar los mdulos del
programa. En la llamada desde un mdulo a una funcin definida en otro mdulo, el montador inclua cdigo
que comprobaba si el mdulo destino estaba ya cargado en memoria. En caso de no estarlo, el cdigo inclui
do por el montador cargaba ese mdulo, usando para ello, si es necesario, el espacio ocupado por otro mdu
lo cuya presencia no se requiere segn indica la informacin suministrada al montador.
Gestin de memoria
319
F igura 5.67 Ciclo de vida de una pgina de una regin compartida con soporte.
produzca un acceso a una de estas pginas, se producir una excepcin (fallo de pgina) que activar al sis
tema operativo, que ser el encargado de traerla desde la memoria secundaria.
+
X
D
S
Ld#f,0I&
^"6c#
,'*-IN,'&), S
"$&
D
0
? G
C A-? D ?Lj = CED
"T#4/i2,g# 30/#)/
Cb
? = JIDj
"T&]+FL#),0I&u/hSF(2#)JI(2&
= AXr JJC D D
C
uG
/0BU/POF(S)I-S#4/<
D ;>; Cb
&
/0BuH#4/*QF,FI-#),
=#),0L&)"{+F(*Q
,.'&)"T#g#
c&
/X
(
F^2"'&ESE#
F"
".&ESE#),xBO'SUA#Bc,0,FIN,!@BO
(2#t'WfIK/*P&MBU(2&mO&),F*-IIV)(+&ES BH&SE&=@BCF(iF/RI(O/F*P&)(2*Qb/XF(BOF(2*-,g&A"{IPkF,'`amR/
(*P#)(3
F/ BO&)(2SE#
/X2BO.SdI(Cw# .&),d&)" Cb
? = JIDj
CEDFA = H&),'&v@BCJw4&IPJBc(2&=H&),*-I I-V)(za6;" I(*QF,. &)+kFI&ESE#f,\(#
0/tLy4/=@BCBU(+2,'#30/#vSF" % a !a Bc<E&4/=*P&),.'&4/ FBU(SE&)+F(*P&)"0/t/#)(*
YxBO&)(2S#A/^S I-SM&ESf\I-*-I,;Bc(G\BCFw#2,'# 3F/#!H#),xO&),F*QMS"42"$&f(CI
'&
%
F"
%
F"
+*
3&
BH&f(*P#
(
& *P#),.0/=*P&)"0/
;"
'SE&ES
SF"m2,'# 30/#
.#),QH#),'&ESE#)9+/
&]/XF,
I(
*-IF(zF(
BCF(*P&
F(
w&),FI-#4/
" 1
IV)(
&]"T&u/F"
.#fd#+/FB
)$
!%)+ ! "
BCF(*-,'&
/X(
!#&
! %%) &
c(CI .#v0/="T&
#
#),FL&GLy4/t/0I^2"T\SADU0/F*-IV)( S+FL#),FI-&Ua
S)IwXI-SfI-SE&u/FIN^2"F+F(*Q
F(
S#4/
3#)(*-ITD)BH&)/a
y),.'&4/
@BCSXk.
(2&
S
F""T&4/
F/F*P&),v,.0/FI-S(*Q
Z&G+FL#),FI&
0/*Py
&4/0ITD)(2&ES&
F(
+FL#),FI&
;"R,'0/*P#hSi"T&+FL#),0I&
/&)/0ITD)(2&),'y
&"$#)/A2,g# 3
0/#)/S(2#)JIN(&ESE#4/i*-,'&)(O/FI*P#f,0I#4/39
BH&)"0/A/#f( . &),DE&ESE#)/A<i-Bc*P&ES#4/=SABc(2#i(vBU(#iF( ,'0/Q2BC0/F*P&G&J"T&4/tVf,gS(0/=SF"zBU/0BO&),0I#a
YxBO&)(2SE# Bc( ,g#00/#
*-,'&)(O/FI*P#),FI#
c& j(&)" I X&SE#49d"/0IN/F*QFL&]#0OF,'&f*-Iw# S`k..&),DE&), #f*-,'#O&),g&
X
B IV)(a
5Qd#f(CI*P#f,Q?Ea
"T#4/
Yb#fd#
(2#L/,=&4/
(CBCFw#Uat;"
&
? G
C A-? D~j ?*j = CED ; D =
CEJC -DFA>D
.$
'&
&
'&
/,
(*P#),F(2#
S
H#
L#)(CI-*P#),
/(*-I-S#uF" BU/#
c(CI .#a
0
S. O. (monitor)
Area de procesos
transitorios
max
760G"2 : x
" 2 1
) &()+!
A,8E("76)EV"!H$"L='!'&D4"("7='
) 5
/$
#),Fd&+S
(IkF"MF(iw4&),0I&4/xH&),*-I I-#f(0/39
SUF"H2,'#.D),'&)L&@BC,'0/FI-SU\(
($
FBc( IV)(S
+
= AXr JJC D D
? G
C A-? D ?Lj = CED
D =
EC JC Dj C ?L
? G
CEJ
S6"$&)/jH&),*-II-#f(0/0/Hc& FBOF,'&GSA"
C&4/;SU0/P2B0/S!0/*P#am
"U( c+F,'#6S H&f,F*-II#)(0/
<t"c*P&)L& #
SJ"$&4/\JIK/Fd&)/39F/JS*Q,0JI(2&ESE#vSfBU,'&)(*QiF"C,g#0
0/#StD(F,'&IV)( SUF" /FIK/*QFL&49*QF(CIPF(2SE# (
BCF(*P&"T& 3&0H&ISE&ESdSU"T&=Ld#f,0I& N /0I. &SfIK/QH#)(CIPkF"09 F"UDf,g&ES#\SUJBc"{*-I 2,'#.D),'&)L& IV)( S0/X'&ESE#
<vF" *P&)L& 2#n* 2I 3#S\"T#4/2,'#3
F/#4/L@BC\/#UkF,'+S)Ic #i/0IN/F*Qd&Gw4&)(u&i/,dX BH*P&ESE#)/a 6#),FL&)"
+F(*Q c&k,gy)(=H&),*-II-#f(0/xO'@BC 2&)/39 L.S)I-&f(2&4/<^D),'&)(2SF/1O&),g&H#`SF,MX
BH*P&),AS)I XF,.F(*Q0/!*-I H#4/
S
2,'#3
0/#4/a
(-
(-
[1(2&
)-
c&)(]/0ISE#
S j(I-SE&)/39=F"j/FIK/*QFL&#FOF,'&f*-INw4#
( 3F/0I-*P&vD)BO&),gS&),
.#)L#d"{Ik,'=#+F(vBU/#492H&),'&M,g#0OV4/0I-*P#4/6St&4/FI$D)(&IV)(a;;"eF/F*P&ESE#i&*-BO&)"
<v"T#4/+&f*-,FIkBc*P#4/+S+"T&4/MH&),*-I
I-#)(z0/G0/F*Pyf( & +F(CBOSE# ,'3 #02I"$&ES#4/F(]Bc(2& 0/F*-,FB X *-BU,'& SGSE&f*P#4/
S(2#)JIN(&ESE&
D > D
A-? A>? G J = C ; JC A>? D G ; D =
CEJC -? G u
w aYb&ESE&=O&),F*-I IV)( /JSU0/
,FIPk.jH#),!/0BGSfIN,. IV)( SU. #)JI X#d#dk'&4/X09O#),/FBi*P&)L& 2#<=/0BG0/*P&ESE#a\YxBO&)(2SE#Bc(2&!H&),*-I I-Vf(
0/*Pyf*-I.& 0/GB/&ESE&/V)"$#
/iL#XS)I .
&),'yu" . &f!O# SvF/F*P&ESE#Ua Yb#)L# . #)+F(*PyUk'&)L#4/v&)(*QF,FI-#f,
+F(*QF9="$#)/Gw&f"$#),.0/
SF",.0/*P#uS
&)^H#)/G/XvS j
.
(CIPF,g#f( F( "$&uS j
(I IV)( S"T&4/H&),*-I I-#)(z0/39
L&)(*Q(CI(2SE#4/XtI(2&)"$*QF,'&kF"0/.
#)( F"cO&4/#nSF"1*-IF^H#Ua
2IN/F*P&dSUM/0Bv0/*P&ESE#49b*P&)"
(-
0K
N Particin Direc. Base
0
0K
1
100 K
2
400 K
3
500 K
4
750 K
5
900 K
Tamao
100 K
300 K
100 K
250 K
150 K
100 K
100 K
Estado
Asignada
Libre
Asignada
Asignada
Asignada
Libre
400 K
Pi
500 K
Pj
750 K
Pk
900 K
1000 K
,.'&ES#L#&*-INw4&ESE#49mF"O/FIK/*QFL�CF,g&E*-INw#\I(*QF(2*P&
&4/FI$Df(2&),F"TBU(2&
H&),*-I I-V)(GS+FL#),FI&A" IPkF,.!SU*P&)L& 2#t/0B
IPF(*Q . #)(O/FBU"$*P&)(2SE#="T&4/(*-,g&SE&4/&t"T&
7
ba;( F" 3&4/#GS\F(.#)(2*-,g&),=BU(2&AH&),*-I I-V)( &ES BH&ES#49F" 3 &)^H#3 #),0,.0/QH#)(2S)IPF(*QJ&f"ZF/F*P&ESE#
SGS)Ic&LH&f,F*-IIV)(
F/Ld&f, .&SE#
.#)L# % <"z2,'#3 0/# 0/. &),DE&ES#hF( "$&LH&),*-I I-Vf(
.#f,0,.0/PO#)(2S)IPF(*QXa7
BO0/*P#L@BC6F("T&67 (2#J&0O&),' 3 \@BUI F (BH*-IN"{I X&"$&!O&),F*-I IV)(O9x/F,'yLF"E2,g#F2I-#
2,'#3F/#
F"j@BO=D)BO&),gSU+@BCAH&),*-I
IV)( *-IPF(L&4/0ITD)(2&ES& F(]"Z76Y^a!YxBH&)(SE# F"2,'#3 0/# j
(2&)"{I `&
#+/\SF/ .&),DE&
S)IN(y)JI .&fL(*Q09
F"C2,'#3
0/#nBc*-I"{I `&),gyi"T&GIN(#),FL& IV)( SF"7tY H&),'&GL&), 3 &),\S
(CBCFw#i"T&AO&),F*-IIV)(
#)L#
.
a
(-
YxBO&)(2S#6Bc(2,g# 30/#d(2#6,.0/FI-S(*Q^w&J&t/XF,
I""$&+*Q'#),-&!"T&i0/*-,g&E*QD)I&GSU=&4/FI$Df(2&IV)(
@BO=/X;2BC'SE&&)/0ITD)(2&),=@B c
&0 F,a
R2"T&)(*Q'&f(SE#4/R2,'#kF"FL&4/=S*-,'y4/=S=F/F*P&J/XF(
Bc(2&tH&),*-I IV)(O9j<L/0Ib(2#
c&)<L(IN(UDfBU(2&6H&f,F*-IIV)(
S
? G
C A-? D~j ?*j = CED ; D =
CEJC -DFA>D
BO&)(*P#
"{IPkF,'F/39+"T&
&)/0ITD)(2&IV)(JBO'SUt,.'&)"{I `&),0/SMw&),FI&4/ML&)(zF,g&)/a Z&4/MLy4/.#)JBc(0/A/#f(* = G
.
v5l&)" D#),0I-*-L#
SUF"c2,FIN+F,=&ESUBO&ESE#F?G<
? G
.
5r&)" DE#),FI*-L#GSF"eLy4/=&ES BH&SE#F?fa!;"H2,FIN+F, 3 &4/#+/\k'&4/&F(
(.#)(*-,'&),nBc(2&iH&),*-II-Vf(
SE#)(2Sv*-I(
.&kI-SE&]F" 2,g# 30/#)9=Bc*-I"{I `&)(2SE#Bc(2& c(CI. & . #f"$&au;( F"
/XD)Bc(2SE#
.&)/#+/J0/ .#.Dd&@BO"N"T&=H&),*-I I-V)( @BCBU(&+w) Bc*-I"{I `&ESE&GSX\"Z+F(2#),\F/PH& I-#i"{IkF,.09
F/LSUI,39/X 3#.DGSGF(*-,.+*P#`SE&4/d"$&)/!H&f,F*-II#)(0/+&ES
BH&SE&4/39M"$& Ly4/^O'@BC 2&an;( F"2,FIN+F,
&f" DE#f,0I-*-L#u&0,g#)w)c&)L#4/+#f,
F" 2,'#30/&ESE#),LH#),'@BC(2# ,'3
#),0,.F,.FL#4/ *P#XSE&u"$& 7 9t/0I(2#
@BO
H&),'&),.FL#4/ BO&)(2SE#nF(.#f(*-,'d#)/ABc(2&GF(*-,'&ESE&G&ES
BO&ESE&Ua;( "z/D)Bc(2SE# . &4/#L,.. #f,0,.FL#4/
*P#`SE&6"T&A7
IN(2*QF(*P&)(2S#\F( .
#)(*-,'&),^&E@BOF""T&\&S BO&ESE&\< 3 #)(n (CIL#6S0/QOF,'S)I I-#dS!+FL#),FI-&)9
&F2,g#fw4c&f(2SE#+#f,R"T&t+FL#),FI-&)9UCF,g#MDE&4/*P&)(*P#=*-IF^H#S 2,'#3
F/&ESE#f,MF(n(. #)(*-,'&),"T&A+#),a
;(
&
"T&
S
&4/FI$D)(& IV)(O9d/0B`H#)(IF(SE#
@BC 'WfIK/*QF(
H&),*-I I-#f(0/
)-
!"$#
)$
)$
,''&I-Vf(#d&d&E@BC
#.&4/FI-#)(z0/39+F"mD0/*P#),v(2#n2BC'S
/&E*-IK/&0
F,"$&)/
;"cDF/F*P#),tSM+FL#),FI-&dSUXk.6&)/0ITD)(2&),^Ld#f,0I&d&\"$#)/j2,'# 30/#4/6SM(CBCFw&
""T#4/@BOv/
S0/ .&),DE&),'#)(
S)I(2y)JI .&)+F(*QXa
;(
BH&f(2SE#
A>D G D G ; D =
CEJC -? G ? G
C = ? G ; ? = ? ;>= JI? G ?*
= D
? ? G A-?Lj@D G CEDFA
= D A>? ;( 0/*Q.&4/#49j" % a a FJI*Q^Bc(nL(O/&gXAStF,F,'#),a &6/#)"{B IV)(\H&)/&!H#),^,'.S)I
j(CI,t"$&)/
H&),*-I I#)(F/\#6H#),=,.'S)IN/ 2&),J"O2,'#.D),'&)L&H&),'&@BC,'.S)B .&"T#4/6,.'@BCF,FINJIPF(*P#4/
&
.-
/*
S=+FL#),0I&a
A>D G3 D G ; D =
CEJC ? G ? G
OD G C DFA>D G % d0/QOF,'& H&4/F*P&@BC+" &)" D)Bc(2&H&f,F*-IIV)(
2BC'SE&t/F,
&)"$#'&ES#aJ[1(2&^/#)"{B I-Vf(G0/j/&.&),&MBU(t2,g# 30/#
@BC+0/*P&k'&
(h+FL#),0I&H&f,g&
S&),Bc(2&O&),F*-I
IV)( /FB IF(2*QF+F(*Q6Df,g&)(S^2,'#)w# .&)(2SE#
BU(+2,'#kF"FL&S6/F"
I-V)(]Stw *-IL&i<iS\S0/ . &),DE&S)I(2y)JI 3 &GSUF"ZJIK/FL#+&GS)IK/ . #a
@BC'S" IPkF,.;<t"2,'# 30/#\(*-,g&f(*Q
#
rP-D G ; D =
CEJC -? G ? G
C = ? Gf ; ? = -Cb
/F,=Bc*-I" I X&SE&4/F(h0/F*Q.&4/#a
+*
]!g"!R$"E)!'='=#7JE(-QeG&/='E,/$@)7"
&0O&ISE&ES\S H#)(zF,!F(LwXITDE#),
.
I#)(0/091CF,g#(2#+/V)"T# 0,.F(*QJ&iI(*-,'#)JIK/FI-#)(z0/
SU#f*-,'#4/62,'#3F/#4/
F(
F"!0/QH&I#hSvS)IN,. I-#)(&)JIF(2*P#uS" % a ;9!/FIN(2#
@BO
&ESE&G,g#0 0/#]SXk.
3
F/F*P&),
,g#f*QPD)I-S# 0,.F(*Q\&+IN(*-,'#)JIN/0I#)(0/6S\#f*-,'#4/
2,'#3
0/#4/a
Z&AI(*QD),FISE&ES=SU;BU(L/0IN/F*QFL&AJBc"{*-I 2,'#.D),'&)L&ESE#\SQOF(S!SUR/0B
"x&)IN/0"T&)JI(*P#iSU"$#4/JS)IK/*-IN(2*P#4/0/PH& I-#)/JS\S)I,'
S="T&62,g#E*Q
IV)(uS="T&iLd#f,0I&G(Bc(/0IN/F*QFL&GSE&ESE#)9R*-I(2S\&0/F*P&),
I&ESE#6H#),JF"z/#0O#),F*Q H&),gS m&),'JSfIK/QH#)(CIPkF"Xa
Z&iIN^2"F+F(*P& I-Vf(
/,
(2#),FLL(*Q=IN( ;BCF(
bW)IN/F*QF(
w&),FI#4/t
&
*P#XSE#4/S2,'#f*Q I-Vf(
D G DFA ?* = ? C G
= G D G ? k j C
?
*P&),vF"
& 30/#]&GH#4/0II#)(0/SG+FL#),FI-&
dy)/n&)""$y
.$
F"m/FIK/*QFL&
@
+
= AXr JJC D D
? G
C A-? D ?Lj = CED
Reg. Base
SI
<= Registro
lmite
CPU
NO
max
Violacin de la
proteccin
Memoria
,
#0OF,'&f*-Iw#
.&SE&62,g# 30/#
S
F/F*Q
k.&4/G0/F*Pyf(
)$
.&4/#G*QF(2S),.FL#4/6Bc(2#4/6,.D)IN/F*-,'#4/.#f*P&iI( XF,0I#),t<3#f*P&+/0B`O
,0I#),09RS6*P&f"ZL&)(F,'&n@BO="T&nS)IN,.
I-V)( DUF(F,'&ESE&c &nSJF( . #)(*-,'&),0/dF(*-,.\S)Ic&4/ .#E*P&4/a
;(
k
? G A>? ;-= "
?BJIJC
.&),DE&LF(++FL#),FI&49e/!&4/0ITD)(2&\F"Ow&)"T#),
&n/0Bn7
a1;( . &ES&v& 3 F/#&
Ld#f,0I&
/+w&)"{I-S&
"T&,.,'F( I-&
3#)^H&),'&)(2SE# " 7 SUF"z2,'#3 0/# . #)( "mw&)"T#),iSUi"$#4/
kF<f*Q0/S2,'#f*Q IV)( S"xkF"T#X@BCd& 3.S)I-S#49R<+/0I (2#
.#)I( ISF( /
2,'#XS)B 3 \Bc( F,0,'#),Xa
SJ*P#XSE#)/"T#4/JkFI-*/\S!,g#f*Q
BH&)(2*P#
YxBO&)(2S#6Bc(t2,'#.D),'&)L&=/
IV)(
SU\"$#)/JkF"T#X@BC0/+@BO+# B`H&
&]"$&
&
E(=#6G&7E(!'&
#
0/=Bc(2&vS"T&4/\d&f(F,'&4/.#)^H&f,g&f*-I
w&)+F(*Q=Ly4/A/0I^2"TF/6SUt/#0H#),*P&),6JBc"{*-I 2,'#.D),'&)L&IV)(a
Z&dD0/*-I-Vf(uk'&4/&SE&
;"
H&),*-I I-#f(2&)JI(*P#
SE#)(2Sd"$&
.&),DE&
F(u"CH&f,F*-I I#)(2&)JIPF(*P#v0/*Pyf*-I 3#
0/F*Pyf*-I .#
S
+FL#),FI&
F/vI-SEVf('#
SUd*-,'&k'&g#F/!2,.'S Ik"T09M<G/0BU/
F(
&E@BCF""$#)/
F(*P#),F(2#4/F/F*Pyf*-I .#4/
S2,g# 30/#)/Q?fa
Z#4/vL&)<E#),.0/
IN(
I(
? G
C A-? D~j ?*j = CED ; D =
CEJC -DFA>D
($
($
(2#S+"T#4/M2,0I(
&
/-
/-
*P&fd& 2#iSUt"T&LL&)<E#),
I#)(0/+F(uF" *P&)L& 2#SU\"$#)/
.#)( 0/F*-,FB *-BU,'&4/ S SE&f*P#4/v@BC
(-
2,'#.D),'&)L&4/a
( c+F,g#
;"R*Q(F,+Bc(
C#
&
!
"
#
$%
$
&
'
( #)
*
! %
Y{!'=#)8"!R$;\#S788"!'&2$"c.!'=2_@,/7!#(C)e$OEM!Yb!'=#)8"!HYZ20,8!#(*)2E=#7JE(-76(C)!#(@
F,'&XD)+F(*P& I-V)(iIN(2*QF,0(&
F,g&`D)+F(*P& IV)(
!"$#
5,+CF,
<LH#),
X#Ua
c&)JIPF(*P#!H#f,^ *P#JS
P760G"2 : # x
+*
!"$# m
F"
".&ESE#),\&.#f,F*P#62"T&
I &),3/X+@BOL/0I""DE&
BU(&JO*-I IV)(
.#f(X0Bc(*P#a
S
o
<f&
(2#J2BO.Sn&f*QF(2SUF,3/X
c&kFIPF(2S#8
oo
'WE*QF,0(&
"{Ik,'0/
(
-
A C - j CEJ
D =
C JBC .- Dj CE? *
(-
"H2,'#kF"FL&=2,0I(
JI(CI\I X&f,!"T&
%*
($
+ -*
=
AXr JJC
D D
-
? G
C
-
Libres
TODA LA
MEMORIA
LIBRE
(UN HUECO)
800 k
100 k
Asignacin
Libres
LIBRE
700 K
100 k
Asignacin
800 k
Libres
LIBRE 100 k
300 k
100 k
300 k
LIBRE
400 k
Termina
el primero
LIBRE 400 k
Libres
Asignacin
50 k
50 k
LIBRE 50 k
300 k
Libres
50 k
LIBRE 50 k
300 k
350 k
Asignacin
350 k
LIBRE 400 k
760G"2 : Sx
Libres
LIBRE 50 k
Y{!'=#)8"!H$O\#S7D8"!'&2$"i.!'=_@,/7!#(C)e$OEV!Y{!'=#)/"!RYZ20,8!#(*)2E=#7JE( !)S)!#(@
(-
(-
(-
L#XS)I .&ES&6SE#)(2SUR/*P#)L&M(2#f*P&6S
"$&4/
,'.&ESE&4/A<JSUM"$&)/A&4/FI$D)(&ESE&4/ x<!H#),6#f*-,'&^H&),*QMBc(2&J"{IK/*P&dSM+FL#),FI-&d" IPkF,.Xa XkI-SE#
&G@BCJS)IN(y)JI .
&fL(*QF/F*P&i" IN/F*P&+w&), &49b/6/0BCF"IN^2"F+F(*P&f, .#)L#iBU(2&+"{IK/*P&GF("$& `&ESE&a
&4/
0/*-,0B *-Bc,g&)/
(z 30/&),0I&4/;/#)(tH#),;BU(L"T&ESE#t"$&7
+*
H&f,F*-I I#)(0/
Yb#f(
0/F*P&
0/*-,0B *-Bc,g&
H&f,F*-I I#)(2&)JIPF(*P#
.#fd#
/0I(]BU/&f,a
"T&
L&)(,g&
,.'&IV)(
SE&f*P#)/Gw&fd#)/v& w4F,
3#)L#
FBU( I-#f(2&]"mD0/F*P#f,
S+FL#),FI&
.#)(
#)(]*P#`SE& "$& +FL#),0I& SfIK/QH#)(CIPkF"AO&),g&
3
3#)L#v"{Ik,'09^d&f, .yf(2SE#4/XL"T&4/+F(*-,'&ESE&4/iF(]"T&i7
&
"{IK/*P&
SG+FL#),FI-&"{Ik,'
#)(*-IPF(GBc(2& c(CI.&uF(2*-,g&ES&a H&f,F*-I,nSUv0/F*Q
.
SABc(2&^H&f,F*-IIV)(n7
SUt*P&)L& 2#67
*P&fd& 2#\/t"N"Fw&i& .
&k.#iSt"$&J/0ITD)BUIPF(*Q
SfIN(2yf\I .#aG;"
2Bc(*P#49
S
@BO.SE&)(2SE#
S "$&f,g&ES&
(-
/-
? G
C
-
100K
400K
500K
0K
N Par. Dir. Base Tamao Estado
0
0K
100K Asig.
1
2
400K
100K Asig.
3
500K
250K Asig.
4
750K
150K Asig.
5
6
7
-
Cabeza
900K
300K
750K
900K
"!
1000K
0K
N Par. Dir. Base Tamao Estado
0
0K
100K Asig.
1
280K
120K Asig
2
400K
100K Asig.
3
500K
250K Asig.
4
750K
150K Asig.
5
6
7
-
100K
280K
#%$&('*)+ ,
798;:8
400K
500K
Cabeza
#-$.&/'*)0+ ,213+54)6$
900K
180K
<=
<>+
<@?
750K
900K
<>A
B
CEDFDG
1000K
0K
N Par. Dir. Base Tamao Estado
0
0K
100K Asig.
1
280K
120K Asig
2
400K
100K Asig.
3
4
750K
150K Asig.
5
6
7
-
100K
280K
HJIKML3NPO Q
V"WX%W
YPZ
400K
500K
Y3O
750K
900K
Y3[
Cabeza
HJI.KL3NRO QSFOTNUI
500K
180K
900K
250K
\
]_^9^a`
1000K
"bdcefg 3 hi3j ek.lmbonPkg
pqbormk*stnvurmwaryxtz*e.rmp{g|ur~}wg
kb l@gPlmboPkgPxgPunrmk}g
fsbolmbonPkg
pqbormk*stnvu3b&%
k
pqbolyn
M
"
+ -*
=
A JJC
-
D D
? G
C
8EaM;(
%
(- ($
(-
(-
(-
(-
*P&)L& 2# M7
*P&)L& 2#a
.&f" Bc"T& *P&)L& # -7 *P&)L& #a % I F/
+F(#),#tITD)BH&f"O@BO IPF,F*P&.#)(C/F*P&)(*Q
Y19m(*P#)(3
F/6/&4/0IT D)(2&G*P#XS&+"T&t H&),*-I IV)( &J7R9RS*P&)"eL&)(,g&n@BC
7
7 *Pk'&)&)L/& # k'&) / *P &)L& 2#
% I
F/6d&f<f#f,=@BOnY
7
k'&)/ \
5 k'&4/ ?
*P&)L& 2#
%
:ca
(-
.#)(2*-,g&),=F(
(-
>UaM;(
"$&7
<+*P&)L& 2#G&\7
D)IN/F*-,'&),J"Z(
_2a
(-
/-
*P&fd& 2#49R&4/
cL,g#nSJF(*-,'&ESE&nS="T&\7
k.&4/
/0BG76Y
^a
I#)(2&),tBc(yf,''&iSA+FL#),FI&
"{Ik,'
C = G
>
?IH
>
;-= C@? =
? G ?@DFA-D ;
? LG D = CED -*
? ? G C >CE? -*
?
? G ? DFA-D ;
? ;"x&)" D#),0I-*-L#S
= G
-
0Bc(I#)(2&iITD)BO&)" &f"ZwXIN/F*P#vF( F"b0/@BCFL&vS
H&),*-I
I#)(2&f\IPF(*P#LF/F*Pyf*-I.#a
;"e&)" DE#),FI*-L#dS - ?IH
-
FBU(I-#)(&49bk'y)/0I.&)+F(*Q09jITD)BO&)"@BO
F"
= G
-
3 #)(n"$&t/&)"{w4'SE&S\SU^@BO^&6"T& c #),'&S,.'&)"{I `&),Bc(2&k U/@BO'S&J(2#!I `&SU0/S
F" .
#f\IPF( `#vS"T&G" IN/F*P&i/FIN(#G@BO\"T&i/0ITD)BcI(*QLk U/@BC'SE& . #)(2*-IN(CBO&&=H&),*-I,\S\"T& c"{*-IL&
@BOG/vF( .
#)(*-,'Va \
v0/*P& L&)(F,'& /GI(*QF(2*P&hFwXI-*P&),.WE&)JIN(&),nkF"T#X@BC0/\O'@BO #4/@BO
/0BCF"T(
#)(3 F(2*-,g&),0/L&)"ZI(CI I-#iS="$&+" IN/F*P& . #)L# . #)(C/ BCF( I-& S=&)/0ITD)(2& I#)(F/
2,'wXI-&)/a
3
%*
*
)-
( "8
? G
>
( 8
)-
($
= G
>
? ; ? = G ? DFA>D ;
? ;( .#)(*-,'&LS"+#),M@BC^/XA&ESE&0*QF9j0/*Qt&)" DE#
,0I-*-L#0/ .
#.DjH&f,g&J&4/FI$D)(&),!F"OL&)<E#),!kF"$#`@BO^"{IPkF,'`a %
I(*QF(*P&\SM0/F*P&=L&)(F,'&6JI(CI\I X&f,
"$&L'WfIK/*QF(
I&LSmC'@BC 2#4/ BC. #4/F("T&\+FL#),0I&!2,'#XS)B ISE#4/RH#),6F"z&f(*QF,FI-#),A&)" DE#),FI*-L#a
)-
)-
(GF"4H&4/#t:JSF"&)" DE#),FI*-L#^DF(F,'&)"2&f(*QF,FI-#),F+F(*Q^'W02BC0/F*P#)9bF"4H&f,gy)+*-,'#GY
I^2I-SfIN,A"T&
)$
-?@? = G ? DFA-D ;
? R/*QJ&)" D#),0I-*-L#i\I(CIJI `&d"T& .&)(*-ISE&ESS=+
d#f,0I&S0/&02,'#)w4H&ESE&aJ7#),LF" .#)(*-,'&),FI-#
0/Ly4/="F(*P#)9&ESUFLy4/JS^2,g#`S)B IN,^O'@BO #4/
BO .#4/=I(O/0B IPF(*QF/
H&),'& FBH*-BU,'&4/&4/FI$D)(&I#)(0/Xa
*
BO .#4/JF(
"T&L+FL#),FI&a
F"1F/@BCFL&nSH&),*-I
I#)(2&f\IPF(
(2#v/62,'#XS)B 3 F,'&XD)+F(*P&I-V)(
'Wf*QF,F(2&
BO&)(2S#"$& /FBUL& Si"T#4/+*P&)L& 2#4/
c(L,g#00/#49ZOF,'#n"O
c #nS=@BO=(2#J/'&)(
S6"$&++FL#),0I&iF/DUF(F,'&)"{L(*Q+#f,6(
2#4/
w&=&6IN(2*QF(*P&),
(
c&Uk.F,
#k0/F*P&f(*Q62BC'S
"zH&),*-I I-#)(&)JIF(2*P#SfIN(2yf\I .#
0,'&XD)+F(*P& I-Vf(
(-
? G
C!
-
0K
100K
S.O
Px
220K
320K
Pi
Pk
470K
1000K
#
!
"#$ %'&()*+")) , *-
"#.0/tk001.#02")43&5!.) !
.#Pk04
k00
.
&(
26
7.) '80.
"0
Ua9.% :"#/;.<
-
"$
" 7=0!
"0 &
'6
7>?6 @.!&A2
5
B*C!
"#$ +D=
@. &5
@.%>2E(2
0FE#.G'
!.
# 8#.=&Ck0"0:"CH @.C'8#.0 6#.
*I J( (/K(0")
+&*F6
.J.#Pa
9LM#.3&50! 7L
y@.<?'0")
N
- $
7
. C
"I.#&(
"O
P6 4H 7!
"#$ +,P k0"=0Q&A
R")
STH U=0!
"#$ aV9L &(
H3&*0"
.
@/OH
W*7=0!
"0 S#.
@.0
. X0
0
BDB 60Ly@.Y0Z.0[.E0! 1*XkT.
#(
"0 "T")&Ok0
\:2yO a^];
"T
2
10W 63&50>H
@.
.0[.E0! @.Y3&5
" 8_Y&A A
")( ,`
"= "a X S"0O& k b
>2 y
% @/2
B. .0&(0Q #',
"
(
"0 $
2
%0F
4
>2 y
% 8
a
#
@.C#.3&(
.CL'"a
E $
QD&.
"
40U0 8 @.
4Z
" $
2 O0F
4
>2y
%
.
cO&AD.0:%>H
"#.G
8 @.
d;
"
2
%$F
40.0Py
a
2nPk.lmwde.xbonPk.ryx
2y
#.0Py6
Ua;];
"G
2
@/NH 4
")0 + + " 70.
,`
"Xa
a
+ -*
=
A JJC!
-
D D
? G
C!
-
8
F")
"#$
40A
"
2
%$F
+#.
@/`
-6 !H ==0!
"0 2&(I.0"I @.0H?
' 66 4 &A
*5
I2")
?
")
! a
Py
O0F
.&*D6
@.4")3&("#>%$02
@.7*4=0!
"#$ =2&5)0^: ")!F
"#.7
&A")
FE+.0&V &%$
Gw
];
"
F") @/0A "0$
2
%0F
!
>
%
")3&A0")%* &A2 !
D6
"
F 0:g$6 6D&A2
@.
?
"#!
@.J@.
2
.O?#.0$
UG=0!
"0
9L
"
2
%$F
%
:
%
G.-&A>, *- "
0 63&(0>
@. 0F
"#2
.6
2
"$?6 !<") ($
)
%0. :2")0 9NR
[.E0d!
-0
@.
0"0
@.
0>2
2
O
@.M
"
'
%$02
@.
""!$#%!&
L ? ?
- < DFJC!
D
C - DFJBC !
-
8
") $
B0 >OEZ2&* 80"#.G.0:%&Ag
)
=0FE;
") ?6
'
"I$ (
9LX0
.
c=3&(!.!E0*?6 1%& A
@.O.$?!F
@.8/2
Y#.%") +*-
' 0!&*. "O"$?
:.0")
@.+ 0
7.#&B0H9 6
.0E O%!
-
Y3&5!H 0 %.$?
=02
@.%..#& B=0!
"0 f !
:.
'
*J&AY"$?
:.0")
) @.-C*J = 0H 4J.$?!F
@. A
f B!3&5G 02&*2 + =H + 0 2
0 6 6
3&(40M A!"a
cO.-$?
=0F
.= ') 6
!
"=022")
?
")
! '&()*9@
"#$
"!
2g !FE#/;.&.
&AX")?
[."a
1+
*?>&(Q4 c 0 Q+.?
=0F
@. A
# f B +
"#! >+.0 A .#/$ Bc#.=&A2
:" $
U?
@/ 2"0:=0")
+.I.-
2"0&( d.#Z0 A=0")
7I.$?
=02
4.O#.G$?6
,/ #.C >"#/.0
.
# f f eH
7#.#/Z0F
8#.C.O( -2 6*O
f =. A .
f BP/N"#.#&AH
26
7 @. eH 702"a 6
VH H Q9L.T00=0F
B4 0 c.+#/IDQ =
":"d0;#.E2H1 *-
%0F
c.-d
0'4
:" $
[.0 8 #
@. 9
"#.O%#.
@.C6
@.J"$?
:.0")
@.I.-C ,! 82
Q
0 0QU2] ?
C#.Q0N2&*2
V 9-:.0 X0 f '&/O 1.?
=0F $
b0.c#.0 ,=0FE &*2 9
0"8.0W*
Q=0!
"0$ 4
"
2 66 S
>
% 8
=0FE#/8
^ Ag 2#. ) @.-#.7DQ >%>E#. # B=0!
"#$ 10.
.#?
2 66 40
"0! =Z
"
'#. 9
"0 00.8/` '"#>
-0")$ 4#.G3&5O 6 =.$?
=02
>2
: 9-$
&(
.- B
.#?
2 X&A2 *U
#.+
"
#. # @. )
.#.QDV :%E#. QH
.Y.-$?
=0F
@.
50"0E' 0FE#.% &A2")
8#.
76 66
.
d?
&(
"a 66
@.O0YH f SD+0 2] ?b0A2")
8#.
d
3&5
50"0E' 8
@.#$
2 6
G
"O
g 802
%0F
+Dd 80.
T + @. f # d @.#?
2
Q 6 7
:"
9P:"& ("))3&*0"J<6
@. 80.
@.< G=0!
"0 >Z&*2 O GH f =
") CH O @.#?
2 9->"0&(
2 [.0
/
D7&A2 7.$?
&A26 ! "a #)0"d T O
.#X=0!
"#$ :.# *#.) 6 49.*>"8/ .-")
& 8
K A
4J
)
26 d - : 9
d % 6 8 2
@.0 0J.
g&
= @. <
"J&A>, *- "<&A2
@. &(
F
@.
"$?
:.0")
@.+6
2C?
& "a6 "!H
.=F"a 6 @.=!H Y 0 T&*. 6 @.
@.O" 0FE!FE#/
SH
c3&5.-
")
& 8O +"a 02 *P $
Nmero de segmento
Tamao
0
D
1
500
2
C
3
S
Mdulo de carga
Tipo
Datos
Pila
Cdigo
Cdigo
9 'H
A 5+ " ?
&A"a
B2>
2")D
9
8 d&*' !>FE0"0"#&P $
B
f '&(
")3&5!)R8=0
! (-2
g
ftug
ftr ur%}ftnPstrylylmboPk|e.xtnqlynPpq}g
fsboun
#
"#! d 2")
E B@.I2 &A")
( "a 4.0[.E0! @.CG.-$?
=0F
@.!#.G 73&5C.% #(
D6 T0
@. "$?
:.0")
@. ) @.- DO >%>EL9LK#.
+J
>" $
2
%0F
!$?
<&AO2"a
8#.
d#. N5$6
(
"<
P6 @. @. 02"a 6 @. <.#& f ?e
!R8E'
J
") =0 @.
!.-$?
=0F
@.
"$6
@.8/e
+ -< = I
A JJC!
-
D KD
? G< C!
-
0
(DATOS)
d-1
0
20000
(PILA)
(COMUN)
499
0
(CDIGO)
c-1
0
(COMN)
20100
ssub2
40000
(PILA)
40500
(CODIGO)
75000
(DATOS)
Max
Memoria
100
s-1
Mapa de Segmentos
&;")
)$
$
($
($
/,
.$
L ? ?
- < DFJC!
D
C - DFJBC !
-
Violacin tamao
segmento
Dir. Lgica (3,100)
20100
<= s
Base
Tamao
75000
40000
500
40500
20000
SDT
bdcefg 3 h R j tx z>e.rmp{gqur%ryxtsboPk ur rmp nPfbg ! Pg xUgPunqrmk rmcp rmk*sgPlmboPk
0
1
2
3
4
Base
Tamao
1400
1000
6300
400
4300
400
3200
1100
4700
1000
Tabla de Segmentos
rmpq}won
#
0.
"0"a
:
C]Z"a
?"a
!
c
P
&*
"#/ Y"a 29 # .+!H T.?
=0F $
(/H
&(
N2 &A")
$
C
=0FE+2
@.
2
& 8 cH Q N570F$6 60.+=02
"#.7I2")
?
")
! Q"0H
2 66 @.
H8?
8
=0FE
+ -< = I
A JJC!
-
D KD
? G< C!
-
(,
9L
F
U&A^.$?
=02
d2&5)T.-0"dG
.?
")
2*Y3&(TH U=0!
"#$ :.# B
:.(
5
0
! (-2
=GPR
:!
dG
@. .$?
=02
@.") C2")
00! @.;(
"a 4")
"I +H8?
8 7%
>")
'#.
0c#."#& &A"a @.GG6
@.J $0"
! /-2
@/
!
! "0 ##.%&ADG?
"a 2#.L9L.0 @. A
Y
.0"I>20=0F 66
.G 9 "#$
@.J.?
=0F
@.
""!$#%!
J1E),5 .%14365
7 .
9L62"0: 62")
00! =*H @.<")?
'#. 9
"0 #.#/#.8/
!
.9-:.0
@/MH #") -?
=0F c)R($
E0"02 # ( -?
>2 $
Y#. &AY#.3&( +Z?#. <=0!
"0 %3&5G0g>O>2 C
@. ")3&50"#>%$F
@.
I 4
.#?
2 $
QG=0!
"#$ :.#
F ?
&( @/
(-
(-
2 # .T0Z A!"a
U*d!
"
@.TG - ?:2
/ #.+ #( $6 6S4 =
0!
"#$ [.0 8
>(.0 H 6 D # .Y0;
! (-2
1d 46-?
>2 G
"#!
g=0FE#/O
F
8
!
.
Q(
E0$ @.
L ? ?
- < DFJC!
D
C - DFJBC !
F
-
02
26
8/`&A2 0&* Q3&(*H9-&50 9
&AQ")0.#&Ag 6
0FE0")
T
E05$6
7C")6
2*)
"
"
R8#.
S0
$02Ed.0 U
:9-[.0c2"a
P
& #7&A "#.0
1
[.:2
c* 80")
S9.J
"T0.
@/G3&54.0J0
'"a
##.
2
#.%&AU%&*H 'H
FE0")
YM /-2
76-?
>2 @/0 *H>
7 "
c 6-?
>2 Y#.
"P
(
"
g=0FEO#. #2")D
9@ A 66
9.0
d#.J
=3&5I.
2
#
!
= D @? -< DFJC! - A>? ; C - D /
3&(G2
d 4I.0"I&A @.
I "0 &AH
"% #") -?
=02 $
:FE"#2 4 =5 9
0 ; -?:2
9L!.0[.E0! @.
G -?
>2 $
(/ H G"a 6&
*
>" $
'#. . :H9 O 8 )
d G
D
&(6 C*
&A2 O 0 @.0H?2 $
d:
! 66 < D 0"K D3A-? K @D ; D3A-? ; C - D G N 2.0 G.-
(."#&AD
\$ (
"$?6 ^*02"a
8#.
U "a #.0 0 80"U
"#"#.(
20 W02")QH @.U
>") $
'#.
9P:"& #.YDB @. [.0
. G
DB&A2 02"a 6 0^]
"! -?
>2 9->"0&(
I0\0e2")
80.
9L
9@
H
"Y 66 F"a 6 V#.c0 A=0")
S*T!
"
V P?
:' X B!
"#$ :.# S6
2
8
"#"#.E
2
0FE -?
>2
9-:"&(
#.
8
H
66
9 'H
A 5+ " ?
&A"a
B>
N pgina
0
1
2
3
Marco de pgina
1
4
3
7
PMT
N Marco pgina
];
"I
F
A D!&*'
#
0
1
2
3
4
5
6
7
Pgina 0
Pgina 2
Pgina 1
Pgina 3
Memoria
Fsica
LIBRE
ASIGNADA
LIBRE
ASIGNADA
ASIGNADA
LIBRE
LIBRE
ASIGNADA
MMT
Pgina0
Pgina 1
Pgina 2
Pgina3
Memoria
Lgica
!
I2")
8#.
@.O - 9
.
9@0
$6 6^0J
?6
"0>!
V7?*#.0$
\c S=0!
"0 0W&A #.3&( ^= P?
:' $
9
02
"PY*E0"0O>2 6 O
"% @9 H
6 8
X3&(.%.) # +*=08
F")
"!
" 8
@.=<6-?
>2
g
0")0.=9L.
"+0:
c3&(.=
!
"P 8
!
c#."#& &A"a +6
. "a Y =?#.X!
@.O!
"
@.
*Z6- ?
>2 !g
0 ")0.G&*' !g[. 45H - 66
1*
1*
5
. ?
C - D G
F0'Q0
+ -< = I
. ?
C G< = I
A JJC!
-
D KD
? G< C!
#
@. 9 H
"#. #.
@."$?
:.0")
@.L.
4 N5$6
@.;0=0
I 8
"? G0P2")
8#.
IDI
g! 80' 66
@.
0 Q0'] ?_*0A2")
8#.
A
Y + D@&(6 40
"a/,`
")0/`H
.<.0[.E0! @. '8#.0> Q
@.G 8#.
@.
c=0!
"0 >T&A2
U QH ] \D
")
U U
>" $
:.# U0 &(#. OT#. !
'0") c.
2&5)+")
& >"71&A 0Z
c*
26 = =0!
"0$ 8 2
"#! c+"#.
9@0"7#.0E
!L2")
00! @.I0.<>F")
-
& :" &AT5&5H 9
A
")( ,`
"#/L#.J >"8/N&A2 5)3&5) -2 +=0!
"#$ !G
H
9@H
6 ;(
"a O
g! 802 ";&*=.#*&
&AF
%; @. 0F") 66 @.;
@.Z&. 66 @.0+H G 0 C* P?
:' @.8/
# ;/ 3&(
8
F0'N
"#.J *=0")
@.<*N -?
>2 @
. 9->"&
#.<DJ.#&*
.
"0"#.
2
0FE#.< *=0")
@.
Z -?:2 d6
2GH
.6 -?
>2 @.O0 &5#.0$
B#.
,! 82 66 @.Oc =!
"#$ :.#
9Z #.3&50! ?0 0"a 0 &*
'
%$02
4#.C0.#?
&*0FE >
CPU
Direccin
Lgica
Direccin
Fsica
Memoria
Fsica
B 8
"#"#.E
2! +
>" $
[.0
`DH 4
>") $
H?
A -?
>2
+D4#.'H+ *P
%$F
HB!
"0")0.
'O 4:" $
[.0 8
g
ftu2g
ftr ur }ftnPstrylylmboPk|e.xtnqlynPpq}g
fsboun
2 ")
E $
Y.Z?6 "a
2 *P =0% P?
:' $
=?
") $ @.J O =)R[.E0$ !0'"$?
:.0")
:%E <
/L3&5O.%&. C
") TE
"D4") A +*- "O>FE02
@.O 8#.
@.= d=0!
"#$ 4@.O
H T%H
@.
L ? ?
- < DFJC!
N pgina
0
1
2
3
D
C - DFJBC !
Marco de pgina
5
6
1
2
PMT
N Marco pgina
-
0
4 I, J, K, L
8 M, N, O, P
12
16
20 A, B, C, D
24 E, F, G, H
28
Memoria
Fsica
Libre
Asignada
Asignada
Libre
Libre
Asignada
Asignada
Libre
MMT
0 A, B, C, D
4 E, F, G, H
8 I, J, K, L
12 M, N, O, P
Memoria
Lgica
A5 D9@ 9.0
("#%EQ3&5cH
. -?
>2 @.
"0")0.
'
$FE#.U S&* A5
Y2")
8#.
c2&5)6
.-0"
[.E(0"#. 6 @. "a 29 #.!% d=0!
"0 <.
$
26
TH
.G0>.%H
.%0"
@.+! 8#.
@. D 9@0.c!2")
E
5/40< 8#.
B&A2 P?
:' S 66 T2&5)Y.-0" "#.0"0>*?
$6
& 26
1.
8#.
"#$
9 &*.
(
"0$6
T* -?
>2 @.#.G)
.0
FEO.0:>H
T .#:.0E0! @.
U&*' ?#.0$
B%!.$
L
!
"0$ -?
>2 66 8 2 A5 8
#2$ ! &*2 < -?
>2
(
"0$6 '&()*<." >,=02EJ @.#?
2 6
d F
@.%#.E $
@.
>") $
'#.
!
4.-#.- 5 73&5 8 66 T @.0H?2 $
1#.O:H9 6 T )
(
" =)
$
&A2 0F") 66 8
" =07 O 0 !02! # %N -?:2
.<062"a
8#.
40 &5#.0$
(/
-0"0FE#.Z2")
80.
@.;'&()*0UE0'0"O
-0"0FE#.%0" A
@.%O 8#.
T =H I -?:2
"0$6
2nPk.lmwde.xbonPk.ryx
&
($
.0$0'6
")
(.(
")FE;
")
@.`'"a
# J -? >2 B0g>O>2 J2"P =0FEC # ") -? =0F URE0"02
0
! (-'
+G 6-?
>2 7#.I%&*D 5)3&5)-2
];
"O
F")
"0
@/`.C$' # ") -?
=0F Q*L P ?
:'
+ -< = I
A JJC!
-
D KD
? G< C!
-
9L(2")
80.
c% @.#?
2 B
O0$U")
& # = 4 d%> dM
A
7
26 T*OH 4=0!
"0$
@ %
# " B
G=0!
"0$ 9P:"& #. &AY#.3&(0! !*?*#.0$
=0!
"0 %6
2 .H
C&A2
"EJ0K#.
& #
""! "!&
# O!
"#$J 9->"0&(
2&( .-0" >20=0F 66
!
%&A2 =)RE(.#$
Y H J?0.0$
Y<=0!
"0$
P?
:' 66 X
B.$?
=02 66 b];
" F
@/%H S") 6
& $
c
>") $
'#.Q9->"0&(
#.c X
>")
'#.
[.0 8 @.7#.d>H
9@ 66 B )
7
"d=)
$
B*7 0 @.Td! #( BO -?
>2 @.T
+
"d=)
$
B*7 0 @.
#. "# '
"#. d.$?
=02
@. # B
-0") $ 9-0'Y6 66 d
")3&5%(
"
#. 0 #.( $
1
>" $
'#.0B &
4'&()*01#.0 "G
&.-0FE#.%GH ==0!
"#$ J2"#>
GESTIN DE FICHEROS Y
DIRECTORIOS
En este captulo se presentan los conceptos relacionados con ficheros y directorios. El captulo tiene tres
objetivos bsicos: mostrar al lector dichos conceptos desde el punto de vista de usuario, los servicios que da
el sistema operativo y los aspectos de diseo de los sistemas de ficheros y del servidor de ficheros. De esta
forma, se pueden adaptar los contenidos del tema a distintos niveles de conocimiento.
Desde el punto de vista de los usuarios y las aplicaciones, los ficheros y directorios son los elementos
centrales del sistema. Cualquier usuario genera y usa informacin a travs de las aplicaciones que ejecuta
en el sistema. En todos los sistemas operativos de propsito general, las aplicaciones y sus datos se almace
nan en ficheros no voltiles, lo que permite su posterior reutilizacin. Por ello, un objetivo fundamental de
cualquier libro de sistemas operativos suele ser la dedicada a la gestin de archivos y directorios, tanto en
lo que concierne a la visin externa y al uso de los mismos mediante los servicios del sistema, como en lo
que concierne a la visin interna del sistema y a los aspectos de diseo de estos elementos.
Para alcanzar este objetivo el planteamiento que se va a realizar en este captulo es plantear el pro
blema inicialmente los aspectos externos de ficheros y directorios, con las distintas visiones que de estos
elementos deben tener los usuarios, para continuar profundizando en los aspectos internos de descripcin de
ficheros y directorios, las estructuras que los representan y su situacin en los dispositivos de almacena
miento usando sistemas de ficheros. Al final del capitulo se mostrarn ejemplos prcticos de programacin
de sistemas en UNIX y en Windows.
Para desarrollar el tema, el capitulo se estructura en los siguientes grandes apartados:
574
9.1.
Desde el punto de vista de los usuarios y las aplicaciones, los ficheros y directorios son los elementos centra
les del sistema. Cualquier usuario genera y usa informacin a travs de las aplicaciones que ejecuta en el sis
tema. En todos los sistemas operativos de propsito general, las aplicaciones y sus datos se almacenan en
ficheros no voltiles, lo que permite su posterior reutilizacin. La visin que los usuarios tienen del sistema
de ficheros es muy distinta de la que tiene el sistema operativo en el mbito interno. Como se muestra en la
figura 9.1, los usuarios ven los ficheros como un conjunto de informacin estructurada segn sus necesidades
o las de sus aplicaciones, mientras que el sistema operativo los contempla como conjuntos de datos estructu
rados segn sus necesidades de almacenamiento y representacin. Adems, puede darse la circunstancia de
que distintos usuarios vean un mismo fichero de forma distinta. Un fichero de empleados, por ejemplo, puede
tratarse como un conjunto de registros indexados o como un fichero de texto sin ninguna estructura. Cuando
en un sistema existen mltiples ficheros, es necesario dotar al usuario de algn mecanismo para estructurar el
acceso a los mismos. Estos mecanismos son los directorios, agrupaciones lgicas de ficheros que siguen cri
terios definidos por sus creadores o manipuladores. Para facilitar el manejo de los ficheros, casi todos los
sistemas de directorios permiten usar nombres-lgicos, que, en general, son muy distintos de los descriptores
fsicos que usa internamente el sistema operativo. Cualquiera que sea la visin lgica de sus ficheros, para
los usuarios su caracterstica principal es que no estn ligados al ciclo de vida de una aplicacin en particular.
Un fichero y un directorio tienen su propio ciclo de vida. Para gestionar estos objetos, todos los sistemas ope
rativos de propsito general incluyen servicios de ficheros v directorios, iunto con programas de utilidad que
facilitan el uso de sus servicios.
El servidor de ficheros es la parte del sistema operativo que se ocupa de facilitar el manejo de los dis
positivos perifricos, ofreciendo una visin lgica simplificada de los mismos en forma de ficheros. Mediante
esta visin lgica se ofrece a los usuarios un mecanismo de abstraccin que oculta todos los detalles relacio
nados con el almacenamiento y distribucin de la informacin en los dispositivos perifricos, as como el
funcionamiento de los mismos. Para ello se encarga de la organizacin, almacenamiento, recuperacin, ges
tin de nombres, coutilizacin y proteccin de los ficheros de un sistema.
9.2.
FICHEROS
Las aplicaciones de un computador necesitan almacenar informacin en soporte permanente, tal como discos
o cintas. Dicha informacin, cuyo tamao puede variar desde unos pocos bytes hasta Terabytes, puede tener
accesos concurrentes desde varios procesos. Adems, dicha informacin tiene su ciclo de vida que normal
mente no est ligado a una nica aplicacin.
575
En esta seccin se va a estudiar la visin externa del sistema de ficheros. Para ello, se mostrar el con
cepto de fichero, la gestin de nombres de ficheros, las estructuras de fichero posibles, las semnticas de ac
ceso, las semnticas de coutilizacin y los servicios que proporcionan los sistemas operativos para gestionar
ficheros.
576
Cabecera
Atributos
Atributos
Tamao KB
Entrada ris
directorio de MS-DOS
Nodo-i de UNIX
Nombre
Seguridad
Datos
Vclusters
de WINDOWS-NT
....
;>:
El sistema operativo debe proporcionar, al menos, una estructura de fichero genrico que d soporte a
todos los tipos de ficheros mencionados anteriormente, un mecanismo de nombrado, facilidades para prote
ger los ficheros y un conjunto de servicios que permita explotar el almacenamiento secundario y el sistema
de E/S de forma sencilla y eficiente. Dicha estructura debe incluir los atributos deseados para cada fichero,
especificando cules son visibles y cules estn ocultos a los usuarios. La figura 9.2 muestra tres formas de
describir un fichero: nodo-i de UNIX, registro de MFT en Windows y entrada de directorio de MS-DOS.
Todas ellas sirven como mapas para acceder a la informacin del fichero en los dispositivos de almacena
miento.
El nodo-i de UNIX contiene informacin acerca del propietario del fichero, de su grupo, del modo de
proteccin aplicable al fichero, del nmero de enlaces al fichero, de valores de fechas de creacin y actuali
zacin, el tamao del fichero y el tipo del mismo. Adems, incluye un mapa del fichero mediante apuntado
res a bloques de dispositivo que contienen datos del fichero. A travs del mapa de bloques del nodo-i se
puede acceder a cualquiera de sus bloques con un nmero muy pequeo de accesos a disco.
Cuando se abre un fichero, su nodo-i se trae a memoria. En este proceso, se incrementa la informacin
del nodo-i almacenada en el disco con datos referentes al uso dinmico del mismo, tales como el dispositivo
en que est almacenado y el nmero de veces que el fichero ha sido abierto por los procesos que lo estn
usando.
El registro de M F T de Windows describe el fichero mediante los siguientes atributos: cabecera, in
formacin estndar, descriptor de seguridad, nombre de fichero y datos (vase figura 9.2). A diferencia del
nodo-i de UNIX, un registro de Windows permite almacenar hasta 1,5 Kbytes de datos del fichero en el pro
pio registro, de forma que cualquier fichero menor de ese tamao debera caber en el registro. Si el fichero es
mayor, dentro del registro se almacena informacin del mapa fsico del fichero incluyendo punteros a grupos
de bloques de datos ( Vclusters), cada uno de los cuales incluye a su vez datos y punteros a los siguientes
grupos de bloques. Cuando se abre el fichero, se trae el registro a memoria. Si es pequeo, ya se tienen los
datos del fichero. Si es grande hay que acceder al disco para traer bloques sucesivos. Es interesante resaltar
que en este sistema todos los accesos a disco proporcionan datos del fichero, cosa que no pasa en UNIX,
donde algunos accesos son slo para leer informacin de control.
En el caso de MS-DOS, la representacin del fichero es bastante ms sencilla debido principalmente a
que es un sistema operativo monoproceso y monousuario. En este caso, la informacin de proteccin no exis
te y se limita a unos atributos mnimos que permiten ocultar el fichero o ponerlo como de slo lectura. El
nombre se incluye dentro de la descripcin, as como los atributos bsicos y el tamao del fichero en Kbytes.
Adems, se especifica la posicin del inicio del fichero en la tabla FAT (file allocation table), donde se al
macena el mapa fsico del fichero.
577
578
C a b e c er a de
se c c i n 1
C a b e c er a de
s e c c i n n
S e c ci n 1
N m e ro de secciones
Tam a o segm ento texto
Tipo de seccin,
tam ao de la seccin
direccin virtual______
Tipo de seccin,
tam ao de la seccin
direccin virtual______
Cdigo
S e c ci n 2
Datos con
valor inicial
S e c c i n n
Datos con
valor inicial
Inform acin
de carga
Tabla de
sm bolos
O tra
inform acin
(6 /0 )
El ltimo tipo de fichero considerado son los enlaces. Como se ver ms adelante, los enlaces no son
ficheros reales, sino representaciones de otros ficheros. Tienen limitaciones importantes en ciertos casos y
exigen tambin una gestin especial por parte del sistema operativo. Si se ejecuta el mandato f i l e sobre un
fichero h i j o l , que es un enlace del h i j o del ejemplo anterior, se obtiene:
# f ile h ijo l
h i j o l : sy m b o lic l i n k t o h i j o
579
5ize 1 Type
fS^Mv Pictures
r i My Webs
Rie Folder
Rie Folder
GD pstr-inf J iles
M .fvwmrc
& cartacas.tex
F l cata99.ps
[w] control, bib
fg[ faxing.log
[ S flg 3 -l.tif
Iwlfiq3-7.cdr
pstr-inf. doc
13 KB
1 KB
193 KB
16 KB
1 Modified
07/09/2000 11:36
06/09/2000 11:57
Hie Folder
14/09/2000 16:21
FVWMRC Rie
COREL Texture
06/05/1999 13:00
06/05/1999 17:55
PS Rie
06/05/1999 17:55
BIB File
06/05/1999 17:55
Text Document
06/05/1999 17:55
27 KB
Corel PHOTO-PAIN...
CDR File
22/08/2000 11:59
03/05/2000 18:27
53 KB
14/09/2000 16:21
4 KB
734 KB
1 KB
14/09/2000 9:51
^ r e m a in .zip
0 KB
WinZip File
30/05/2000 12:34
'
Q d Sample.jpg
10 KB
Corel PHOTO-PAIN...
05/09/2000 17:08
3 KB
Application
CPP Rie
07/09/2000 13:10
11/07/2000 15:30
ji
2 KB
C File
14/07/2000 12:52
ADB File
Microsoft Power Poi,..
24/02/2000 9:49
24/07/1998 8:15
10 KB
22/12/1999 11:28
4.110 KB
07/04/1999 11:11
pstr-inf .htm
@3 winamp265.exe
N cmutex.cpp
fl secobject.c
adasmspkg. adb
PpDem o.ppt
vol3 tc 04 .htm l
2.112 KB
13 KB
345 KB
'
'
un
Estos descriptores indican los lugares por defecto desde donde se leen los datos de trabajo y hacia
donde se envan los resultados y los errores, respectivamente. Cuando se crea un proceso, el sistema operati
vo abre estos dispositivos y les asigna los nombres estndares. Una gran ventaja de estos descriptores que se
pueden redireccionar mediante mandatos o mediante programas para cambiar el lugar de donde se leen los
datos, donde se envan los resultados y donde se envan los errores, respectivamente. As, tanto en UNIX
como en Windows, el smbolo > permite cambiar los dispositivos asociados a los nombres estndar para usar
otros dispositivos, ficheros, etctera Por ejemplo, el mandato c a t :
#cat
Lee lo que se escribe por el teclado y lo reproduce en pantalla, incluyendo posibles errores. Sin embar
go, el mandato:
#cat
<
h ijo
>
/d e v /lp
Lee el contenido del fichero h i j o y lo muestra la impresora, cambiando los dispositivos asociados a los
nombres estndar como se muestra en la figura 9.5 (b). Observe que la salida de errores no se ha cambiado.
Este mecanismo permite crear mandatos ms complejos a partir de mdulos bsicos basados en los descripto
res estndar y est actualmente presente en todos los sistemas operativos.
En la seccin 9.3 se muestra un programa de ejemplo para asociar los nombres estndar a dispositivos
distintos usando llamadas al sistema operativo UNIX.
Nombres internos (del sistema de ficheros) de un fichero
Los nombres lgicos de usuario no significan nada para el sistema de ficheros. Cunado se crea un fichero en
un dispositivo o volumen, el sistema operativo le asigna un identificador interno nico que es el que realmen
te se utiliza en todas las operaciones del sistema operativo. Estos descriptores internos son tanto en UNIX
/LINUX como en Windows nm eros enteros que identifican la posicin o ndice de los metadatos del fiche
ro dentro del dispositivo fsico o lgico de almacenamiento en el que est el fichero.
En LINUX por ejemplo, el dispositivo se identifica mediante dos nmeros: primario (m ajor) para el ti
po de dispositivo y secundario (m inor) para el dispositivo en s. Por tanto un fichero se identificar dentro
de un computador mediante un identificador resultante de unir esos dos nmeros y el nmero del nodo-i del
fichero dentro del dispositivo. En Windows, los dispositivos de almacenamiento se gestionan mediante
volmenes, que tienen un identificador numrico asignado, por lo que los ficheros se identifican mediante el
descriptor del volum en y el descriptor del MFT dentro del volumen. Este esquema se puede extender a sis
temas distribuidos sin ms que usar la direccin IP del sistema antes de los descriptores anteriores.
Cmo se relacionan los nombres lgicos, o de usuario, con los internos, o del sistema operativo? Pues
582
se relacionan a travs de los directorios. Los directorios, que se explican a continuacin, no son sino formas
de enlazar nombres con nmeros, o representaciones simblicas con el descriptor real del objeto. Son idnti
cos a una gua de telfonos que asigna a cada usuario un nmero de telfonos.
Qu descriptores internos tienen los nombres estndar? No tienen ninguno a priori. Se les asigna el del
dispositivo con el que se relacionan en cada momento.
Aclracin 9.1 EL nombr interno de un fichero es nico y pervive mientras exista el fichero. No se di
confundir con el descriptor de fichero que reciben los usuarios cuando abren un fichero, como se: puede
servar en la seccin en la que se describe ms adelante el cico de vida de un fichero.
~
585
hay delante de ellos. Imagine que tiene un fichero de clientes ordenado por orden alfabtico y quiere buscar a
Juan y a Pepe. Deber leer todos los nombres y ver si son ellos. Con el mtodo ISAM, existe un fichero de
ndice que le dice, por ejemplo, donde empiezan los clientes cuyo nombre comienza por A , por B, etctera
Para leer los datos de Juan puede ir directamente a la posicin del ndice para la J y luego comparar los datos
para buscar Juan dentro de ese bloque. Observe que, en cualquier caso, es necesario leer los datos hasta
Juan!
Con la llegada de los dispositivos de acceso directo (como los discos magnticos) surgi la forma de
acceso directo, o aleatorio, a un fichero. El fichero se considera como un conjunto de registros, cada uno de
los cuales puede ser un byte. Se puede acceder al mismo desordenadamente moviendo el apuntador de acce
so al fichero a uno u otro registro. Esta forma de acceso se basa en un modelo de fichero almacenado en dis
co, ya que se asume que el dispositivo se puede mover aleatoriamente entre los distintos bloques que
componen el fichero. Para proporcionar este mtodo de acceso a las aplicaciones, los sistemas operativos
incluyen llamadas del sistema de ficheros con las que se puede modificar la posicin dentro del fichero (se
ek) o en las que se puede especificar el nmero de registro o bloque a leer o escribir, normalmente relativos
al principio del fichero. El sistema operativo relaciona estos nmeros relativos con nmeros absolutos en los
dispositivos fsicos de almacenamiento. Por ejemplo, para acceder primero a los datos de Juan y Miguel igual
que antes, la secuencia de instrucciones a ejecutar es la siguiente:
Seek alumno 34
Read
/* Autoincrementa el puntero tras la lectura*/
Seek alumno 16
Read
/* Autoincrementa el puntero tras la lectura*/
Este mtodo de acceso es fundamental para la implementacin de muchas aplicaciones. Las bases de
datos, por ejemplo, usan fundamentalmente ficheros de este tipo. Imagine que tiene la lista de clientes ante
rior en un dispositivo que permite acceso directo. En lugar de leer los datos hasta Juan basta con leer la posi
cin en el ndice y saltar hasta dicha posicin. Actualmente, todos los sistemas operativos usan esta forma de
acceso, mediante la cual se puede tambin acceder secuencialmente al fichero de forma muy sencilla. Igual
mente, sobre sistemas de acceso directo se pueden construir fcilmente otros mtodos de acceso como los de
ndice, registros de tamao fijo o variable, etctera (Prestaciones 9.1).
Prestaciones 9.1 Seleccionar adecuadamente la forma de acceso a un fichero influye mucho en el rendimien
to de las operaciones sobre ficheros. Por ejemplo, usar accesos secuenciales en una base de datos cuyas ope
raciones se hacen en el mbito de los registros sera psimo. Sin embargo, usar accesos secuenciales para
copiar un fichero sobre otro seria ptimo.__________________________
9.3.
DIRECTORIOS
Un sistema de ficheros puede ser muy grande. Para poder acceder a los ficheros con facilidad, todos los sis
temas operativos proporcionan formas de organizar los nombres de ficheros mediante directorios. Un direc
torio puede almacenar otros atributos de los ficheros tales como ubicacin, propietario, etctera dependiendo
de cmo haya sido diseado. Habitualmente, los directorios se implementan como ficheros, pero se tratan de
forma especial y existen servicios especiales del sistema operativo para su manipulacin.
En esta seccin se va a estudiar el concepto de directorio, las estructuras de directorios ms comunes,
su relacin con los nombres de fichero y las formas ms frecuentes de construir las jerarquas de directorios.
586
ftrtttvo
ddn
Vtr
rf* tu
Evortto tJerrafttort**
Carpetas
B O ACER(O)
a
ArtNv de programa
& ejBOOtT
ffl C3 Corel
S
eygwin
f
ffl
j JJ
Ayuda
|(5
Qfc
Nombre
x
g l ^ GUIDE
GUIDE
ONLINE
F**idoc
-j
ED bome
tD fe
Dsbn
S > u*
f**l D30TEMP
3 Documento and SetUngs
3 &EUMENTS
(B j Ghortgum
ffl m
ffl ea V306
a llocAfcwor/
ffl C ) SY5TNFO
ffl 3 TCMP
EB 5 twnf
S G WINDOWS
O ACERDATAfD:)
9 ^ UnidadDVD/CD-RW(E:)
a
DMco extrabto (F:)
i-
U>;
X. o m a |
Tamafia I Tipo
1KB Icono
10.929 KB Adobe Aoobafc Doc...
1KB Imagen de mapa da...
Carpet da arttVvos
j /Hrcha do modHcadn 1
16/03/20019:11
06/02/2003 11:53
25/08/1997 16| 17
26/09/2001 I7i 10
587
eficiente. La forma de estructurar dichas entradas vara de unos sistemas a otros dependiendo de las necesi
dades de cada sistema.
En sistemas operativos antiguos, como CP/M, se usaron estructuras de directorio de nivel nico y di
rectorios con dos niveles (figura 9.10). En la primera, existe un nico directorio que contiene todas las en
tradas de ficheros. Es fcil de entender e implementar, pero asignar nombre a un fichero nuevo no es fcil por
la dificultad de recordar todos los nombres o la imposibilidad de ver los de otros usuarios. En CP/M, para
evitar este problema, el nmero mximo de ficheros que poda haber en un sistema de ficheros estaba signifi
cativamente limitado. Esto reduce el problema de gestin de nombres, pero limita el nmero de ficheros en
un dispositivo de almacenamiento.
Con el crecimiento de la capacidad de los dispositivos de almacenamiento, se resolvi el problema an
terior extendiendo la estructura a un directorio de dos niveles, donde cada usuario dispona de su propio di
rectorio, reduciendo as una parte de la confusin inherente a los directorios de nivel nico. Cuando se daba
de alta un nuevo usuario en el sistema, las utilidades de administracin del sistema operativo creaban el di
rectorio para los ficheros del usuario con un nombre fijado con criterios internos al sistema.
Cuando el usuario entraba al sistema, se le pona dentro de su directorio. Para acceder a sus ficheros
poda hacer dos cosas: especificar slo el nombre del fichero relativo a su directorio (por ejemplo, c la v e s ) o
especificar el nombre completo del fichero incluyendo dispositivo, directorio del usuario y nombre de fiche
ro (por ejemplo, C: \ m ig u el\ cla v es). Esta estructura mejoraba la seguridad al aislar a los usuarios, pero
no se evitaba otros problemas, tales como la gestin de nombres propios de un usuario, la imposibilidad de
agrupar los ficheros de un mismo usuario con distintos criterios o el uso compartido de ficheros. Suponga
mos, por ejemplo, que un alumno tiene varios ficheros de prcticas. Todos ellos estaran bajo el mismo direc
torio, pero no podra agrupar los de las prcticas de sistemas operativos o las de arquitectura de
computadores. Suponga ahora que la prctica se lleva a cabo por un grupo de tres alumnos. Cmo pueden
compartir los ficheros de la misma? Con esta estructura sera necesario copiar los ficheros en los directorios
de todos ellos, con el peligro consiguiente de incoherencias entre las distintas copias, o crear un nuevo usua
rio (por ejemplo, g r u p o -1 ) e introducir en su directorio los ficheros compartidos. Esta solucin se adopt
para permitir que todos los usuarios vieran las utilidades del sistema operativo sin tener que hacer mltiples
copias: crear un usuario especial, denominado sistem a , en cuyo directorio se incluan dichas utilidades con
permisos de lectura y ejecucin para todos los usuarios.
[c a rta |
["*1
mapa.glfj
lista.txt j
[J
D ire c to rio
Archivos
programa.o j
!"']
(A ) Nivel n ico
mi9uel I -
elvlfa i
i
datosi lista.c; |
Archivos
| mail
-I-
1
1 | test | agenda 1
i claves j
i
i
Iista.c
_T_
.
I
"
Archivos
1claves
Imo.O j
-T_
Archivos
(B )
Figura 9.10 Estructuras de directorio de uno y dos niveles.
D o s n iv eles
588
A medida que la capacidad de los dispositivos se fue incrementando, fue tambin creciendo el nmero
de ficheros almacenados por los usuarios en el sistema de ficheros. Con lo que el problema de la complejidad
de la asignacin de nombres, paliado por la estructura de dos niveles, volvi a aparecer a nivel de usuario.
Fue pues necesario generalizar la estructura de dos niveles para obtener una estructura jerrquica ms general
que permitiera a los usuarios ordenar sus ficheros con criterios lgicos en sus propios subdirectorios, sin de
pender de las limitaciones de los niveles de la estructura de directorios, lo que llev a la estructura de rbol.
Una estructura de rbol (figura 9.11) representa todos los directorios y subdirectorios del sistema partiendo
de un directorio raz, existiendo un camino nico (path) que atraviesa el rbol desde la raz hasta un fichero
determinado. Los nodos del rbol son directorios que contiene un conjunto de subdirectorios o ficheros. Las
hojas del rbol son siempre ficheros. Normalmente, cada usuario tiene su propio directorio home a partir del
cual se cuelgan sus subdirectorios y ficheros y en el que le sita el sistema operativo cuando entra a su cuen
ta. Este directorio lo decide el administrador, o los procesos de creacin de nuevos usuarios, cuando el usua
rio se da de alta en el sistema y est almacenado junto con otros datos del usuario en una base de datos o
fichero del sistema operativo. En el caso de UNIX, por ejemplo, el fichero /e t c /p a s s w o r d contiene una
lnea por usuario del sistema, similar a la siguiente:
miguel:* Miguel:/users/miguel:/etc/bin
Donde el directorio home es /u s e r s /m ig u e l. MS-DOS y Windows tienen registros de usuarios que
tambin definen el directorio home.
Los usuarios pueden subir y bajar por el rbol de directorios, mediante servicios del sistema operativo,
siempre que tengan los permisos adecuados. Por ello, tanto el propio usuario como el sistema operativo de
ben conocer dnde estn en cada instante. Para solventar este problema se defini el concepto de directorio
de trabajo, que es el directorio en el que un usuario se encuentra en un instante determinado. Para crear o
borrar un fichero o directorio, se puede indicar su nombre relativo al directorio de trabajo o completo desde
la raz a las utilidades del sistema que llevan a cabo estas operaciones. Un problema interesante con este tipo
de estructura es cmo borrar un directorio no vaco. Hay dos soluciones posibles:
Un directorio no se borra si no est vaco. Si tiene ficheros o subdirectorios, el usuario debe borrarlos
previamente. Esta es la solucin adoptada habitualmente en las llamadas a los sistemas operativos.
Un directorio, y todo el subrbol de directorios que cuelga de l, es borrado, aunque el subrbol no
est vaco. Esta solucin existe en UNIX y Windows, aunque no como llamada al sistema sino como
mandato de usuario. Para evitar que un usuario borre ficheros por error se solicita una confirmacin
del usuario, va opcin en el mandato UNIX o confirmacin en un men grfico en Windows. Si la
respuesta es afirmativa, se borra todo el subrbol recursivamente.
La estructura de rbol es muy general, pero no proporciona los servicios requeridos en algunos entor-
589
nos. Por ejemplo, puede ser interesante que varios programadores que trabajan en el mismo proyecto com
partan ficheros o subdirectorios llegando a los mismos por sus respectivos directorios de usuario para no te
ner problemas de seguridad y proteccin. Esta forma de acceso no existe en la estructura de rbol porque
exige que a un fichero se llegue con nico nombre. El modelo descrito, sin embargo, rompe la relacin uno a
uno entre el nombre y el fichero, al requerir que un mismo fichero se pueda acceder a travs de varios cami
nos. Este problema puede resolverse generalizando la estructura del rbol de directorio para convertirla en un
grafo acclico (figura 9.12) en el cual el mismo fichero o subdirectorio puede estar en dos directorios distin
tos, estableciendo una relacin unvoca nombre-fichero.
La existencia de enlaces desde varios nombres al mismo fichero introduce dos problemas en este tipo
de estructura de directorio. Primero, existen varios nombres para el mismo fichero. Si se quiere recorrer todo
el rbol es importante evitar los bucles. (Advertencia 9.1). Segundo, el borrado de ficheros se complica, ya
que un mismo fichero puede ser borrado por varios caminos. Es necesario pues determinar cuando se puede
borrar el fichero. En UNIX, el fichero no se borra hasta que no existe ninguna referencia al mismo, lo que
significa que el valor del contador de enlaces es cero. Para ello, cuando se borra un fichero, se borra la entra
da de directorio que referencia al fichero y se decrementa su contador de enlaces. Slo en el caso de que el
contador de enlaces sea cero y de que nadie tenga abierto el fichero se borra el fichero realmente y se liberan
sus recursos.
Advertencia 9.1 Es importante evitar la existencia de bucles en el rbol de directorios. Dichos bucles origi
nan dos problemas: no permiten recorrer el rbol de directorios completo y pueden hacer que una operacin
de traduccin de nombre no acabe nunca.__________________ ._________________________ ____________ ______
Para evitar los problemas anteriores, algunos sistemas operativos, como MS-DOS, no permiten la exis
tencia de directorios compartidos o enlaces. En el caso de UNIX, existen limitaciones para que no se puedan
establecer enlaces hacia arriba en el rbol de directorios, evitando as la formacin de bucles.
Dado el gran tamao de los dispositivos de almacenamiento actuales y la necesidad de clasificar la in
formacin de formas variadas, existen actualmente varias propuestas para incrementar la potencia de las es
tructuras de directorios que se basan en la idea de los directorios dinmicos o relacinales. La idea que hay
detrs de esta nueva tendencia es sencilla. Se trata de permitir al usuario aadir a los objetos de almacena
miento atributos propios que, aadidos a los del sistema, permitan clasificarlos y recuperarlos de forma ms
rpida. Hay varias propuestas de este estilo, como el nuevo WinFS de Microsoft y los proyectos Storage y
Medusa de Gnome. La figura 9.13 muestra un ejemplo de etiquetado con atributos en WinFS, donde el usua
rio puede aadir al objeto informacin relacionada con su tema, categora, palabras clave, plantilla, comenta
rios de fechas de creacin y modificacin, etctera
590
View - Favorites
Tools
Search
is?-Folder:
Last M inutes
Share
Author
9.4.
NOMBRES JERRQUICOS
La especificacin del nombre de un fichero en un rbol de directorios, o en un grafo acclico, toma siempre
como referencia el directorio raz (/ en UNIX, \ en MS-DOS). A partir de este directorio, es necesario viajar
por los sucesivos subdirectorios hasta encontrar el fichero deseado. Para ello, el sistema operativo debe cono
cer el nombre completo del fichero a partir del directorio raz. Hay dos posibles formas de obtener dicho
nombre:
Que el usuario especifique el nombre completo del fichero, denominado nombre absoluto.
Que el usuario especifique el nombre de forma relativa, denominado nombre relativo, a algn subdirectorio del rbol de directorios.
El nombre absoluto de un fichero proporciona todo el camino a travs del rbol de directorios desde
la raz hasta el fichero. Por ejemplo, en UNIX, un nombre absoluto de uno de los ficheros existentes en la
figura 9.11 sera /u s e r s /m i g u e l /c l a v e s . Este nombre indica al sistema de ficheros que a partir del direc
torio raz (/) se debe atravesar el directorio u s e r s y, dentro de este ltimo, el subdirectorio m igu el para lle
gar al fichero
c la v e s .
En MS-DOS,
dicho nombre
absoluto
se representara como /
C :\ u se rs\ m ig u e l\ cla v e s. Un nombre absoluto es autocontenido, en el sentido de que proporciona al
sistema de ficheros toda la informacin necesaria para llegar al fichero, sin que tenga que suponer o aadir
ninguna informacin de entorno del proceso o interna al sistema operativo. Algunas aplicaciones necesitan
este tipo de nombres para asegurar que sus programas funcionan independientemente del lugar del rbol de
directorios en que estn simados. Por ejemplo, un compilador de lenguaje C, en una mquina que ejecuta el
sistema operativo UNIX, necesita saber que los ficheros con definiciones de macros y tipos de datos estn en
el directorio /u s r / i n c l u d e . Es necesario especificar el nombre absoluto porque no es posible saber en que
directorio del rbol instalar cada usuario el compilador.
Puesto que la profundidad del rbol de directorios puede ser muy grande, resultara muy incomodo te
ner que especificar constantemente nombres absolutos de ficheros. Adems, algunas aplicaciones usan direc
torios relativos a su situacin para almacenar ficheros. Es por ello que la mayora de los sistemas operativos
modernos permiten definir nombres relativos, es decir nombres de fichero que slo especifica una porcin
591
el nombre absoluto a partir de un determinado subdirectorio del rbol de nombres. Por ejemplo, m i
g u e l/c la v e s . Los nombres relativos no se pueden interpretar si no se conoce el directorio del rbol a partir
el que empiezan, para ello existe un directorio de trabajo, o actual, a partir del cual se interpretan siempre
los nombre relativos. Por ejemplo, si el directorio de trabajo es /u s r y se especifica el nombre relativo m i
g u e l/c la v e s se obtendr un error. Pero si el directorio de trabajo es /u s e r s , la interpretacin del nombre
relativo ser correcta. Es responsabilidad del usuario colocarse en el directorio de trabajo adecuado antes de
usar nombres relativos al mismo. El sistema operativo o el intrprete de mandatos almacenan el directorio de
trabajo actual de cada proceso en su BCP como parte de su entorno. Suele existir una variable de entorno
asociada (PWD en el caso de UNIX y Linux) que se modifica cada vez que se cambia el directorio de trabajo
del proceso. Puesto que el sistema operativo solo trabaja en realidad con nombres absolutos, cuando se espe
cifica un nombre relativo, el sistema operativo o el intrprete de mandatos concatenan el valor de la variable
del directorio de trabajo con el del nombre relativo para obtener el nombre absoluto, es decir:
nombre a b s o lu t o = d i r e c t o r i o de t r a b a j o + nombre r e l a t i v o
Antes de interpretar dicho nombre o usarlo en llamadas al sistema. En secciones posteriores se mos
trarn algunas optimizaciones de este proceso.
Muchos sistemas operativos con directorios jerrquicos tienen dos entradas especiales, . y . . , en
cada directorio para referirse a s mismos y a su directorio padre en la jerarqua. Estas entradas especiales son
muy tiles para especificar posiciones relativas al directorio actual y para viajar por el rbol. Por ejemplo, si
el directorio actual es /u s e r s /m ig u e l, el mandato UNIX:
# ls
../
Mostrar las entradas de directorio de su padre en el rbol, es decir del directorio u s e r s . Pero el man
dato UNIX:
#cp / u s r / i n c l u d e / s t d i o . h
Copiar el fichero s t d i o .h al directorio actual, es decir m igu el.
Las entradas especiales son muy importantes en la gestin e interpretacin de nombres de ficheros y di
rectorios, ya que permiten navegar hacia arriba y hacia abajo por los nombres. Esto es as tambin para los
sistemas de ficheros montados, como veremos en secciones posteriores de este captulo que se dedican al
diseo del sistema de nombres.
592
ficheros. Las dos llamadas al sistema de UNIX que realizan estas operaciones son mount y umount. La operacin de montado permite conectar un sistema de ficheros, almacenado en un volumen o particin, a una
entrada de directorio del rbol de directorios existente. A partir de dicha operacin, el sistema de ficheros en
el nuevo dispositivo aparece como un subrbol del rbol de directorios, sin que exista diferencia con el resto M
del mismo. Sus ficheros y directorios son accesibles a travs del nombre lgico. Por ejemplo, para montar
/ d ev/hda3 de forma que se construya un rbol de directorios como el de la figura 9.12, se ejecutara el si- '^
guente mandato:
#mount /dev/hda3 /users
Desmontar (umount) un sistema de ficheros es sencillo. Por ejemplo, para desconectar el dispositivo
/dev/hda3 montado en el directorio /users del sistema de ficheros raz, bastara con ejecutar el mandato:
ttumount /users
Si no se est usando ningn fichero o directorio del sistema de ficheros existente en /d e v /h d a 3 , el sistema operativo lo desconecta. A partir de ese instante, el subrbol de directorios del dispositivo no aparecer
en la jerarqua de directorios y sus datos no estarn accesibles.
Las operaciones anteriores tienen varias ventajas:
iM
9.5.
FICHEROS COMPARTIDOS
Los procesos y los usuarios comparten ficheros con distintos motivos: sincronizacin, repositorios de datos
compartidos, almacenes de operaciones temporales, etctera Este hecho genera dos problemas bsicos que el
sistema operativo debe afrontar: qu prevalece cuando dos o ms procesos escriben simultneamente sobre
un fichero y cmo se pueden proteger ficheros para evitar que dos o ms procesos modifiquen informacin
simultneamente. El primer problema se resuelve definiendo e implementando una semntica de comparti
cin, el segundo se puede resolver dotando a los usuarios con un mecanismo de bloqueos totales o parciales
sobre ficheros.
595
Los bloqueos parciales se activan mediante un cerrojo en el que se indica el inicio y el final de la re
gin de fichero bloqueada. En UNIX no existe ninguna llamada al sistema, pero se pueden implementar me
diante la llamada f c n t l y la estructura de datos f lo c k :
stru ct flo c k {
sh ort
l_ ty p e ;
sh ort
l_w h en ce;
o ff_ t
l_ s ta r t;
o ff_ t
l_ le n ;
p id _ t
l_ p id ;
/*
/*
/*
/*
/*
};
Los tipos de bloqueos incluyen: lectura f _ rdlck , escritura f_ wrlck y liberacin FJUNLCK. Por ejem
plo, las sentencias siguientes ponen un cerrojo de escritura sobre una regin del fichero de notas, regin que
incluye a los alumnos comprendidos entre el 3 y el 10.
# in c lu d e < f c n t l .h >
s tru ct flo c k c e r r o jo ;
fd * open ( "n o ta s _ a lu m n o s ", 0_RDWR);
f l o c k . l _ t y p e = F_WRLCK;
flo c k .l_ w h e n c e = SEEK_SET;
f l o c k . l _ S t a r t = 3 * s i z e o f ( s t r u c t a lu m n o);
f l o c k . l _ l e n = 7 * s i z e o f ( s t r u c t a lu m n o);
f lo c k . l_ p id = g e t p id O ;
f c n t l ( f d , F_SETLK, c e rr o jo ) ;
En la seccin de servicios UNIX y Windows se explican estas llamadas con ms detalle y se muestran
programas de ejemplo. La figura 9.14 muestra el efecto de usar cerrojos compartidos y exclusivos sobre un
fichero. Como se puede ver, si hay un bloqueo exclusivo, sucesivos intentos de poner otro bloqueo devuelven
error hasta que se libera el bloqueo exclusivo.
Debido al potencial de todos los mecanismos de bloqueo para crear interbloqueos o para dejar recursos
bloqueados, como se vio en el captulo 7, en general estas llamadas para bloquear el fichero solo son reco
mendaciones (advisory) para el sistema operativo y para los dems usuarios. Cualquier proceso puede abrir
un fichero sobre el que tenga permisos sin comprobar la existencia de bloqueos y leer o escribir de l. Tam
bin puede decidir escribir o leer sobre el fichero aunque no est en posesin del cerrojo del bloqueo.
9.6.
Los dispositivos de almacenamiento secundario no son voltiles, es decir, no pierden su contenido cuando la
computadora deja de tener fluido elctrico (como le ocurre a la memoria RAM). Por ello, el ciclo de vida de
un fichero no est ligado al de ningn proceso, ni siquiera est ligado al ciclo de vida del proceso que lo
crea. Los ficheros se crean y permanecen en el dispositivo de almacenamiento hasta que alguien los destruye
borrndolos (como en discos o cintas) o destruyendo el dispositivo (com o en los DVD que no se pueden reescribir ni borrar).
Los ficheros tienen su propio ciclo de vida, de forma similar a un libro que tiene un ciclo de vida distin
to al del autor que lo escribi. As puede haber libros inmortales como El Quijote y otros (cm o ste?) que
duren menos que no trasciendan el ciclo de vida de sus autores. De forma similar un proceso puede crear y
destruir varios ficheros durante su vida (por ejemplo, los ficheros temporales que usa el sistema operativo) y
puede crear ficheros cuya vida sea mucha ms larga que la del proceso (por ejemplo, un fichero de resultados
de una simulacin o un registro de entradas al sistema operativo).
Cada uno de estos ficheros tiene su nombre lgico y su nombre interno, pero cm o se relacionan stos
con los procesos cuando quieren trabajar con un fichero? Pues asignando al proceso un descriptor de fichero
596
cuando abre un fichero para trabajar con l. Pero qu descriptor se asigna al proceso? Existen dos respues
tas a esta pregunta:
Asociar el descriptor del nombre interno. Esta solucin podra ser vlida si en cada instante solo
un proceso trabajara con un fichero. Sin embargo, como ya hemos visto, varios procesos pueden
abrir un fichero simultneamente y trabajar con l. En ese caso, todos estaran manipulado el des
criptor del fichero, lo que creara problemas de concurrencia. Adems de ello, cada proceso podra
estar trabajando en una zona distinta del fichero. Cmo sabra el fichero qu informacin es relativa
a un proceso si todos usaran el descriptor interno? Quin llevara el control de la posicin (despla
zamiento) de trabajo de cada proceso dentro del fichero?
Asociar un descriptor temporal asociado al nombre interno. Con esta solucin cada proceso tie
ne una tabla o lista de descriptores de ficheros abiertos por el proceso. Asociada a esta tabla puede
tener la posicin de trabajo en cada fichero, lo que resolvera los problemas anteriores. Es la solucin
elegida habitualmente en los sistemas operativos. Qu tipo de descriptor de fichero abierto se usa?
Depende del sistema operativo. Windows asocia al proceso una lista de objetos fichero que incluye
el identificador del objeto fichero devuelto por el sistema operativo cuando se abre un fichero.
LIMJX asocia a cada proceso una tabla de descriptores de ficheros abiertos y devuelve al usuario la
posicin de la tabla donde se encuentra el descriptor asociado. Como se ver ms adelante, la solu
cin real es un poco ms compleja debido a un cierto tipo de comparticin de ficheros.
La figura 9.15 muestra el ciclo de vida de un fichero. El fichero vive desde que el proceso PO lo crea,
con el nombre h i j o , hasta que el proceso P3 lo borra. Todos los procesos realizan sesiones de entra
da/salida con el fichero y van obteniendo descriptores para del fichero que son vlidos exclusivamente para
esa sesin de trabajo. Observe que incluso el mismo proceso, Pl, puede obtener distintos descriptores de fi
chero para distintas sesiones de trabajo.
En la seccin 9.12, dedicada al diseo, se describen las estructuras de datos que usa el sistema operativo
para almacenar cada tipo de descriptores, aunque del descriptor de sesin de trabajo ya se coment en el cap
tulo 3, dedicado a los procesos.
9.7.
Los conceptos anteriores se proporcionan a los usuarios en forma de bibliotecas (ver figura 9.16) con las que
construyen sus aplicaciones. Algunas de estas bibliotecas son especiales (por ejemplo la l i b e o la s t d li b
en sistemas Linux) porque son las que realizan las llamadas al sistema. Estas bibliotecas son proporcionadas
habitualmente por los fabricantes o programadores del sistema operativo. De entre los mecanismos de entra
da/salida que proporcionan las bibliotecas los usuarios usan especialmente dos: los flujos (streams) y los me
canismos estndares del sistema operativo. La biblioteca de flujos proporciona optimizaciones sobre las
operaciones estndar. Por ejemplo, si se accede un fichero byte a byte, usar las operaciones estndares es
muy lento porque hay que realizar muchas llamadas al sistema y operaciones de disco. Con la biblioteca de
flujos se lee un bloque completo del fichero a un buffer de memoria y se sirven los bytes directamente al
usuario desde este bloque.
Una vez realizada una llamada al sistema, se entra en el sistema operativo. La llamada al sistema filtra
los parmetros de la operacin solicitada, comprueba que sean correctos y solicita el servicio al servidor de
ficheros o al de directorios, los componentes del sistema operativo que gestionan objetos fichero y directorio.
En la seccin 9.2 se describen las llamadas al sistema operativo utilizadas en UNDC (UNDC/Linux) y en Win
dows (Windows) y se muestran ejemplo de cmo realizar programas que usan dichas llamadas.
597
PO
abrir
cerrar
abrir
cerrar
P2
brir
P3
Figura 9.15 Ciclo de vida de unfichero: duracin y sesiones de trabajo.
La funcin principal de los servidores de ficheros y de directorios es adaptar las peticiones lgicas de
los usuarios a la representacin fsica de los objetos almacenada en los dispositivos, para lo que llevan a cabo
una serie de transformaciones de datos y operaciones. Otra funcin de estos componentes es proporcionar un
espacio de almacenamiento lgico que permita ofrecer una gestin ms sofisticada a nivel de bloques de los
dispositivos de entrada/salida de almacenamiento secundario, para lo que crean distintos tipos de estructuras
denominadas sistemas de ficheros.
Las cuatro funciones principales del sistema operativo en cuanto al almacenamiento son: ser capaz de
gestionar con eficacia los recursos, conecta la imagen lgica del fichero con la fsica, proporcionar sistemas
de nombrado lgico de ficheros y proteger los datos de los usuarios. En las secciones siguientes se muestran
598
los aspectos de diseo fundamentales relacionados con el servidor de ficheros y con los sistemas de ficheros.
f ^ ^ 'b f f e r
U
Archivo lqico
'
|
Rlnqnps lgirns
Bloques de disco
Figura 9.17 Flujo de operaciones en unfichero.
3 v [fe;4
jf5
fe s
[ 8322 I
599
sitivos y de las estructuras de datos usadas para representar el fichero. En la seccin siguiente se describen las
principales estructuras usadas para representar un fichero y las formas de almacenar dicho fichero.
9.8.
Una de las cuestiones ms importantes del diseo y la implementacin de un servidor de ficheros es cmo
asignar los bloques de disco a un fichero y cmo hacerlos corresponder con la imagen del fichero que tiene la
oplir.ar.in. Kste problema se resuelve con lo que tradicionalmente se conoce como mecanismos de asigna:
cin. Es fundamental conocer en primera instancia cmo se quieren almacenar los ficheros y directorios" a
nivel interno del sistema. Dado que los dispositivos de almacenamiento son dispositivos de bloque (vea el
captulo 8), es necesario decidir cmo se va a hacer corresponder el modelo de bytes contiguos que usa el
usuario con el modelo de bloques fsicos de los dispositivos. El sistema operativo debe pues proporcionar una
estructura de fichero que permita proyectar conjuntos de bytes sobre bloques de disco. lJara ello existen dos
opciones bsicas:
Asignacin de bloques contiguos del dispositivo. Con este mtodo, los ficheros deben estar totalmente
contiguos en los dispositivos. Origina fragmentacin extema debido a los huecos que no se pueden usar. La
representacin del fichero con este mtodo es muy sencilla, como se ver a continuacin.
Asignacin de bloques discontiguos del dispositivo. Con este mtodo, se asigna al fichero el primer
bloque que se encuentra libre. De esta forma se elimina el problema de la fragmentacin externa del disco y
el de la bsqueda de huecos. Adems, los ficheros pueden crecer mientras exista espacio en el disco. Sin em
bargo, este mtodo complica la implementacin de la imagen de fichero que usa el servidor de ficheros. La
razn es que se pasa de un conjunto de bloques contiguos a un conjunto de bloques dispersos, debiendo co
nocer dnde estn dichos bloques y en qu orden deben recorrerse. Los tipos principales de estructuras de
ficheros con asignacin discontigua son: ficheros enlazados, ficheros indexados y rboles balanceados. A
continuacin se estudian en detalle.
600
CONTIGUO
;;
X X X
1 2
A A A AA
X X
4 5 6 7
X X
a y a -'.:--
B B B
9 10 11 12 13 14 15
f
Archivo B
archivo A: (3 ,5 )
archivo B: (12, 3)
/venivo a
ENLAZADO
BLOQUES
ENLAZADO
GRUPOS
X X X
A A A
X X
A A
0 1 2 3 4 5 6 7 8 9 1 0
X X
BB
11 1 2 1 3 1 4 1 5
0 1 2 3 4 5 6 7 8
9 1 0 1 1 1213 1415
f
Archivo B
archivo A: (3 ,3 ), (8 ,2 )
Archivo B
archivo A: 6, 8 ,4 , 2
archivo B: 5, 9 ,1 2
No es necesario acceder a ms bloques que el de datos, que se obtiene sumando al bloque calculado el
bloque base o inicial del fichero. Por tanto, hay un acceso a disco.
Tiempo acceso
10 mseg. = 10 mseg.
601
Direccionamiento
Tamao Bloque
Bloques por
Agrupacin
16
2 ** 16
4 Kbytes
32
2 ** 32
4 Kbytes
1
8
1
Tamao
Fichero (by
tes)
516 Mbytes
2 Gbytes
16 TBytes
La inclusin de los apuntadores en los bloques de datos hace que el tamao de estos deje de ser ml
tiplo de 2 (cosa que ocurre habitualmente), complicando mucho el clculo del nmero de bloque en
el que est un determinado byte del fichero.
Es muy p oco fiable, ya que la prdida de un bloque del fichero supone la prdida de todos los datos
del fichero que van detrs de dicho bloque.
Las desventajas de la lista enlazada se pueden eliminar si se quitan los apuntadores de los bloques del
fichero y se almacenan en un ndice enlazado, gestionado por el servidor de ficheros, que representa el disco.
Para representar un fichero desde cada bloque o grupo se apunta al siguiente del fichero indicando en cada
bloque el siguiente bloque del fichero. El ltimo bloque del mismo incluye la entrada EOF. La lista de grupos
est formada por un encadenamiento de entradas que incluyen el bloque de comienzo y el nmero de bloques
contiguos incluidos en el grupo. La primera es tpica de sistemas FAT (file allocation table) y la segunda de
sistemas FAT con agrupaciones, como se ver a continuacin (vase figura 9.18).
La gran desventaja de esta solucin es que para acceder a una posicin aleatoria de un fichero es nece
sario recorrer el fichero desde el primer bloque hasta encontrar el bloque de la posicin deseada, lo que hace
a este sistema muy lento para accesos aleatorios si los ficheros son grandes. Tiene adems otro problema: el
espacio que ocupan las tablas de ndices, l'or ejemplo, si se quiere representar un dispositivo de 4 Gbytes
dividido en bloques de 2 KBytes, hara falta una lista de bloques con 2*1024*1024 entradas, lo que, asu
miendo entradas con 32 bits, origina una lista de bloques de 8 MBytes. El tamao de esta tabla hara difcil
mantenerla en memoria.
Cul es el tamao mximo de fichero que se puede representar con este mtodo? De nuevo depende
nicamente del tamao de dispositivo y del apuntador de posicin delTichero. Sin embargo, en este caso es
necesario tener en cuneta los bits que se usan para representar el nmero de bloque dentro de la lista enlaza
da. La tabla 9.1 muestra la diferencia entre una representacin FAT con entradas de 16 bits (FAT16), con 32
bits (FAT 32) y ambos casos apuntando en lugar de bloques agrupaciones de 4 bloques.
Como se puede ver el sistema FAT16 tiene serias limitaciones para ser usado en dispositivos grandes.
Asignando todos los bloques del dispositivo a un fichero se puede llegar a un fichero mayor de 2 Gbytes,
pero a costa de asignar agrupaciones cada vez mayores. Este diseo, como se ver a continuacin, desperdi
cia muchsimo espacio de disco y es poco aconsejable. El sistema FAT32 permite direccionar dispositivos
muy grandes y desperdicia menos espacio de disco, pero a costa de ocupar mucho espacio con la tabla de
enlaces.
;.Cul es el peor tiempo de acceso a un bloque de uno de estos ficheros para un disco con tiempo de ac
ceso de 10 mseg.? Pues la respuesta es clara, depende proporcionalmente de su posicin en la tabla de enla
ces (FAT). Asumiendo que el descriptor del fichero (directorio) est en memoria y que desde l se apunta al
primer bloque del fichero en la FAT, si en el ejemplo anterior se pide el byte 6 Mbytes del fichero, el bloque
donde est el byte es el siguiente:
Bloque = offset / tamao bloque + 1 = 6
Asumiendo que el primer bloque del fichero sea el 10, es necesario recorrer los 1536 enlaces siguientes
del fichero para poder calcular el bloque del dispositivo que tiene ese byte. Para ello es necesario leer los
bloques de la FAT a memoria y luego el bloque de datos. Cuntos bloques de la FAT hay que leer? Asu
miendo un bloque de 4 KBytes y 32 bits para direccional cada bloque, cada bloque de la FAT contendr 1024
enlaces. Si el fichero estuviera almacenado contiguamente, bastara con 2 accesos a FAT y uno a datos:
602
El problema surge cuando los bloques del fichero estn dispersos por toda la FAT. En este caso el
tiempo peor de acceso nos puede llegar a realizar 1536 accesos a disco para leer los nmeros de bloque de la
FAT.
Tiempo acceso pesimista = (1536 FAT + 1 datos) * 10 mseg. = 15370 mseg.
Asumiendo que en cada bloque de la FAT se encuentran un 10% del fichero, es decir 124 bloques, ser
an necesarios 13 accesos a la FAT, luego:
Tiempo acceso 10% = (13 FAT + 1 datos) * 10 mseg. = 140 mseg.
Como se puede observar, el tiempo de acceso depende mucho de que el fichero est almacenado conti
guamente en los dispositivos.
Prestaciones 9.1 Como se puede ver, el tiempo de acceso depende de lo compacta que est la informacin d1;
los ficheros en el disco y de que los bloques de un fichero estn lo ms cerca posible. Esto se puede conseguir?,
compactando el disco con cierta frecuencia.
> 4 Tbytes
603
Como se puede observar el fichero representable es muy grande, lo que junto con el tiempo de acceso
son las razones principales por la cuales este mtodo de representacin no ha quedado obsoleto, como ha
ocurrido con las listas enlazadas.
Cul es el peor tiempo de acceso a un bloque de uno de estos ficheros para un disco con tiempo de ac
ceso de 10 mseg.? Asumiendo que el descriptor (nodo-i) est en memoria, si en el ejemplo anterior se pide el
byte 6 Mbytes el bloque donde est el byte es el siguiente:
Bloque = offset / tamao bloque + 1 = 6
Es necesario acceder a los bloques de indireccin triple. Luego el peor tiempo de acceso sera:
Tiempo acceso pesimista = (3 * bloques indirectos + 1 bloque de datos) *
10 mseg. = 40 mseg.
605
Cul es el peor tiempo de acceso a un bloque de uno de estos ficheros para un disco con tiempo de ac
ceso de 10 mseg.? Asumiendo que el descriptor (nodo-i) est en memoria, si en el ejemplo anterior se pide el
byte 6 Mbytes el bloque donde est el byte es el siguiente:
Bloque = offset / tamao bloque + 1 = 6
Con una amplitud de 1024, se almacenaran 4 Mbytes en el primer nivel. Sera pues necesario imple
mentar un nodo ndice de segundo nivel para estos 1024 y puntero al bloque 1536 se encontrara con solo leer
el primer bloque de ndices, por lo que seran necesarios 2 accesos a disco:
Tiempo acceso pesimista = (1 * bloques ndice + 1 bloque de datos) *
10 mseg. = 20 mseg.
Suponiendo un rbol de amplitud 4, en cada nodo de ndices se podran almacenar tambin 4 Kbytes de
datos, por lo que en cada nivel n se almacenaran 4" * 4 Kbytes, obtenindose el total mediante la frmula:
E 4 ' * 4096, i=0..n-l
Lo que para el ejemplo significa 4 accesos a disco, es decir:
Tiempo acceso pesimista = (4 * bloques ndice + 1 bloque de datos)
10 mseg. = 50 mseg.
Para evitar accesos extra, Windows NTFS almacena datos en el mismo descriptor de fichero. De esta
forma, muchos ficheros pequeos pueden leerse completamente con un nico acceso a disco. Para ficheros
ms grandes, el servidor de ficheros mantiene una estructura jerrquica en forma de rbol, donde en cada
bloque se almacenan datos y apuntadores a los bloques siguientes. Si el fichero es muy grande, algunos de
estos bloques pueden a su vez estar llenos de apuntadores a nuevos bloques. Este esquema permite un acceso
muy rpido a los datos, ya que cada acceso trae datos, pero complica la implementacin del modelo de fiche
ros en el servidor de ficheros porque el primer bloque necesita un clculo de direccin especial. Adems para
optimizar ms las bsquedas y los accesos, en el Reiser File Systems usan rboles variables (dancing trees),
es decir rboles que pueden mezclar nodos sin atender a cada modificacin del rbol, sino en respuesta a un
volcado de bloques en memoria o como resultado de una clausura de transaccin que enva varios bloques a
discos. Con ello se consigue agrupar mucho ms los rboles y se escriben porciones mucho mayores, lo que
optimiza el acceso a disco.
En las secciones siguientes veremos cmo se plasman estas estructuras de almacenamiento en los dis
positivos usando sistemas de ficheros.
9.9.
Al igual que un fichero, un directorio es un objeto y debe ser representado por una estructura de datos. Una
cuestin importante de diseo es decidir qu informacin debera ir asociada a una entrada del directorio.
Hay tres alternativas principales:
Directorios para ficheros contiguos, que almacenan los atributos del fichero- en su entrada del direc
torio, junto con el primer bloque del fichero y el tamao del fichero.
Directorios para ficheros enlazados, que almacenan los atributos del fichero en su entrada del direc
torio, junto con los nmeros de todos sus bloques o del primero de ellos y el tamao del fichero.
Directorios ficheros indexados, que almacenan nicamente el identificador del descriptor de fichero
(en UNIX, el nodo-i) y colocan los atributos del objeto fichero dentro de la estructura de datos aso
ciada a su descriptor.
Los directorios para ficheros contiguos estn presentes en algunos sistemas de ficheros modernos,
como el ISO-9660 que se usa en los CD-ROM. En este caso la estructura del directorio, como se puede ver
en la figura 9.21, es muy sencilla. Esto se debe a que estos sistemas de ficheros solo incluyen almacenamien
to contiguo de ficheros, por lo que basta con conocer el primer bloque y la longitud del fichero, as como el
nombre y otros sencillos atributos x para tener el fichero perfectamente descrito. En este caso un fichero se
606
Tamao
Directorio de MS-DOS
Directorio de CP/M
Ubicacin Fecha y
archivo
hora
Nombre
base
_L
1
Longitud Tarnao
archivo
Num.
CD
t
Nombre Sistema
archivo
607
Los sistemas operativos modernos usan la tercera opcin, directorios para ficheros indexados, porque
tiene muchas ms ventajas que la primera y porque sera imposible reflejar la complejidad del fichero dentro
del directorio, al no existir listas encadenadas de bloques. En el sistema operativo UNIX la entrada de direc
torio es una estructura de datos muy sencilla (figura 9.22) que contiene nicamente el nombre del fichero
asociado a ella y el identificador del descriptor de fichero, nmero de nodo-i, usado por el sistema operativo.
Toda la informacin relativa a los atributos del fichero se almacena en su nodo-i. El uso de una entrada de
directorio como la de UNIX tiene varias ventajas:
La entrada de directorio no se ve afectada por los cambios de atributos del fichero.
Los nodos-i pueden representar a su vez directorios o ficheros, con lo que se pueden construir es
quemas de nombres jerrquicos de forma sencilla.
a La longitud de los nombres no est predeterminada, pudiendo ser variable hasta un lmite grande
(4096 caracteres en las versiones actuales).
o La interpretacin de nombres es muy regular, lo que aporta sencillez al sistema de ficheros.
Facilita la creacin de sinnimos para el nombre del fichero.
Para optimizar la gestin de directorios y facilitar la vida a los programadores de sistemas se incluyeron
en UNIX las llamadas al sistema de gestin de directorios mostradas en la seccin final del captulo.
Como se puede ver tambin en la figura, la entrada de directorio de Windows NTFS es similar a la de
Linux ext2, pero incluye adems atributos del fichero, lo que facilita la bsqueda de ficheros por distintos
conceptos y no slo por el nombre. Una entrada similar a esta se convierte en un registro de una tabla de base
de datos en el nuevo WinFS.
Nodo-i
I
_ A ___________________
Directorio de UNIX SV
Entrada
jyifPT
Longitud Longitud
entrada nombre Tipo
I
Nombre Unicode
Nombre
I
608
Aclaracin 9.3 El sistema operativo puede acceder directamente a la particin como si fuera un dispositivo:
orientado a caracteres, pero con acceso a bloques. En este caso no es necesario que la particin tenga instiSI
do ningn tipo de sistemas de ficheros. Este tipo de accesos, habitual en bases de datos y en dispsitiv^di
swap, son muy raros a nivel de usuario en aplicaciones de propsito general. En muchos casos hay restricc?
nes de seguridad para acceder a los dispositivos de ese modo. Adems, cuando se acceden as, el sistema pe?!
rativo no puede hacer la alineacin de memoria a bloques de fichero, por lo que es obligacin del usuario5
alienar dichas peticiones_________________
- i.
Cuando se crea un sistema de ficheros en una particin de un disco, se crea una entidad lgica autocontenida con espacio para la informacin de carga del sistema de operativo, descripcin de su estructura, des
criptores de ficheros, informacin del estado de ocupacin de los bloques del sistema de ficheros y bloques
de datos.
El sistema de ficheros permite organizar la informacin dentro de los dispositivos de almacenamiento
secundario en un formato inteligible para el sistema operativo de forma que pueda realizar operaciones con
los ficheros y directorios que ponga en el mismo. El sistema de ficheros deben satisfacer los siguientes obje
tivos: satisfacer las necesidades de almacenamiento de las operaciones de usuario, optimizar el rendimiento,
garantizar la integridad y validez de los datos, ofrecer un conjunto lgico de servicios y rutinas de entra
da/salida y proporcionar soporte de entrada/salida para los distintos tipos de dispositivos de almacenamiento
y para las distintas estructuras de ficheros y directorios vistos anteriormente.
Habitualmente, cuando se instala el sistema operativo, los dispositivos de almacenamiento estn vacos.
Una vez creadas las particiones, el sistema operativo debe crear las estructuras de los sistemas de ficheros
dentro de esas particiones. Para ello se proporcionan mandatos como f ormat o mkf s al usuario. Los siguien
tes mandatos de UNIX crean dos sistemas de ficheros, uno para intercambio y uno para datos, dentro de dos
particiones del disco duro a : /dev/hda2 y /dev/hda3:
#mkswap -c /dev/hda2 2 0 800
#mkfs -c /dev/hda3 -b 8196 123100
El tamao del sistema de ficheros, por ejemplo 20800, se define en bloques. Un bloque se define como
una agrupacin lgica de sectores de disco y es la unidad de transferencia mnima que usa el sistema de
ficheros. Se usan para optimizar la eficiencia de la entrada/salida de los dispositivos secundarios de almace
namiento. Aunque todos los sistemas operativos proporcionan un tamao de bloque por defecto, habitual
mente los usuarios pueden definir el tamao de bloque a usar dentro de un sistema de ficheros. Por ejemplo,
en UNIX, mediante el mandato mkfs -b 8192 define un tamao de bloque de 8 Kbytes para /dev/hda3.
(Prestaciones 9.2) El tamao de bloque puede variar de un sistema de ficheros a otro, pero no puede cambiar
dentro del mismo sistema de ficheros.
Prestaciones 9.2. Aunque no es obligatorio, el tamao de bloque suele ser mltiplo par del nmero de sect|>
res del disco para obtener ms rendimiento del disco y para facilitar la implementacin del sistema de fiche-;
ros.
________________________ |______________________________ '________________ ___________
'..Vi
En muchos casos, adems de estos parmetros, se puede definir el tamao de la agrupacin, es decir el
P a r ti c i n
Particin 2
Particin 3
Figura 9.23 Distintas particiones y discos.
609
conjunto de bloques que se gestionan como una unidad lgica de gestin del almacenamiento. El problema
que introducen las agrupaciones, y los bloques grandes, es la existencia de fragmentacin interna. Por ejem
plo, si el tamao medio de fichero es de 6 Kbytes, un tamao de bloque de 8 Kbytes introduce una fragmen
tacin interna media de un 25%. Si la agrupacin es de 4 bloques (asignacin de 32 Kbytes), la
fragmentacin interna alcanzara casi el 80%.
Una vez decidido el tamao del bloque y agrupacin que se quiere usar, es necesario decidir la estructu
ra del sistema de ficheros plasmar en la particin. Aunque las estructuras, y la informacin que se almacena
en ella, pueden ser muy distintas, como veremos a continuacin, todos los sistemas de ficheros tienen los
siguientes campos comunes:
Descripcin del sistema de ficheros. Incluye descripcin del tipo de sistema de ficheros, configura
cin, etctera
Descripcin del mapa del dispositivo. Incluye algn tipo de informacin (enlaces, mapas de bits,
etctera.) que indica el estado de ocupacin o no de cada bloque del dispositivo.
Metadatos (nodos-i, FAT, etctera) de los ficheros almacenados en el sistema de ficheros.
Bloques de datos.
Para gestionar los ficheros y directorios, todos los sistemas operativos de propsito general incluyen
dos componentes, denominados servidor de directorios y servidor de ficheros, que se encargan de gestionar
todo lo referente a los sistemas de ficheros y las operaciones relacionadas con ellos. Estos componentes se
estudian en detalle en las secciones siguientes.
Si embargo, antes de llegar a ellos, se estudiarn los distintos tipos de sistemas de ficheros ms habitua
les en los sistemas operativos actuales. Como se podr observar, cada uno de ellos se corresponde casi direc
tamente con una de las formas de almacenar los ficheros descritos anteriormente.
610
Las listas de recursos libres permiten resolver el problema de forma completamente distinta. La idea
es mantener enlazados en una lista todos los recursos disponibles (bloques o descriptores de ficheros) mante
niendo un apuntador al primer elemento de la lista. Este apuntador se mantiene siempre en memoria. Cada
elemento de la lista apunta al siguiente recurso libre de ese tipo. Cuando el servidor de ficheros necesita recursos libres, recorre la lista correspondiente y desenlaza elementos, que ya no estarn libres. Como el lector
puede comprender, este mtodo no es eficiente, excepto para dispositivos muy llenos y fragmentados, donde ^
las listas de bloques libres son muy pequeas. En cualquier otro caso, recorrer las listas requiere mucha en-l
trada/salida. La FAT del sistema operativo MS-DOS es una lista enlazada.
Una posible optimizacin de la gestin de bloques libres es reunir los bloques en agrupaciones y man
tener mapas de bits o listas de recursos libres para ellas. Por ejemplo, si en el dispositivo anterior se usan
agrupaciones de 64 Kbytes (16 bloques), el mapa de bits se reduce a 8 Kbytes. Sin embargo, esto complica la
poltica de gestin de espacio libre en el servidor de ficheros. Los sistemas operativos UNIX, LINUX y Win
dows usan este mtodo. Igualmente, se puede usar la agrupacin de bloques en las listas de recursos libres.
Obviamente, cuando se usan agrupaciones, la mnima unidad que se puede asignar es una agrupacin, por lo
que es muy importante decidir cul va a ser el tamao de la misma. Cuanto mayor sea, ms grande puede ser
la fragmentacin interna del dispositivo. Para paliar en parte este problema, los sistemas que usan agrupacio
nes suelen usar tambin el mecanismo de gestin de fragmentos descrito en la seccin del Fast File System
(FFS).
611
sst m a
&V
osyp
ES
ES
e s
EH
.lo c a liz a c i n
m m 'mm eh ehi
e e
su
Q I] [ ] n a
!] n u QU
mi mi
Em Em
612
El sistema de ficheros FAT fue diseado inicialmente para su uso en MS-DOS, con arquitecturas de 16
bits de tipo Intel 286 y tamaos de discos de 32 64 MBytes y se denomin FAT16. Con esta tecnologa, el
sistema de ficheros FAT est limitado a 65.525 bloques, lo que hizo que quedara rpidamente corto para el
creciente tamao de los discos. Para solventar este problema, se agruparon los bloques en paquetes (clusters)
cada vez de mayor tamao (4, 8, 16, y 32), de forma que cada entrada de la FAT representaba una de estas
agrupaciones. Aun as, el tamao mximo de este tipo de sistemas de ficheros es de 2 GB, lmite que surge
del nmero mximo de clusters (216) y del tamao mximo del cluster que deba ser potencia de 2 y menor de
2 16 bytes (es decir 64 Kbytes), lo que produce un tamao mximo de clster de 32.768 bytes (32 KB). La
propia tabla FAT ocupada 216 * 2 = 2 17 bytes, es decir 128 Kbytes, que cabe cmodamente en memoria.
El problema de la organizacin en clusters es que presenta mucha fragmentacin interna, ya que cada
vez que se crea un fichero se le asigna como mnimo un cluster. Si el cluster es de 32 KB y el tamao medio
de los ficheros 8 KB, se desperdicia un 75% del espacio de almacenamiento. Por ello, cuando se introdujeron
las arquitecturas de 32 bits, Microsoft cre el sistema de ficheros FAT32, que usaba 32 bits para direccional
los bloques de sistema de ficheros, lo que permita incluir hasta 232 bloques (4 Gbloques) en un sistema de
este tipo. Tener un nmero de bloques tan alto permite usar clusters de un tamao ms reducido, usar disposi
tivos ms grandes y eliminar en gran parte la fragmentacin interna. Por ejemplo, si se usan clusters de 4
KBytes, se pueden construir ficheros de hasta 16 Tbytes. Todo ello a costa del aumento del tamao de la
FAT, que ahora tericamente puede llegar a ocupar 23" * 4 = 234 bytes, es decir 16 Gbytes, lo que supone una
buena porcin del disco. Asumiendo un caso actual ms realista, con una particin de 64 Gbytes y bloque de
4 Kbytes, se necesitara una FAT de 16 mega direcciones de 4 bytes, lo que significa ocupar un espacio d
disco de 64 Mbytes para cada tabla FAT. Este tamao ya no cabe tan cmodamente en memoria, por lo que
ser necesario hacer entrada/salida a disco para gestionar la FAT.
Puesto que un fichero puede estar muy disperso por el disco, puede ocurrir que hay que leer muchos
bloques de la FAT para leer dicho fichero. Adems, debido a la creacin y borrado de ficheros, quedan agu
jeros como los vistos en el caso anterior lo que origina la dispersin de los ficheros. Para evitar este proble
ma es conveniente compactar el disco con cierta periodicidad, aun cuando el sistema de ficheros no est
excesivamente lleno.
La asignacin de espacio libre se lleva a cabo buscando por las FAT los bloques necesarios. Obvia
mente, cuanto ms compacta est la FAT, ms posibilidades hay de encontrar grupos de bloques libres. C
mo se sabe que un bloque del sistema de ficheros est libre? Porque la entrada correspondiente de la FAT
tiene un cero (0). Si est ocupado, incluye el nmero del bloque siguiente del fichero. Para optimizar la bs
queda de bloques libres, el sistema mantiene un apuntador al ltimo bloque libre encontrado y busca de esa
posicin hacia delante.
Comprobar la integridad de un sistema de ficheros FAT es sencillo. Basta con comprobar que cada en
trada de una FAT es igual a la de la otra, recorriendo ambas FAT de principio a fin. Si no son iguales, habr
que hacerlas iguales eligiendo la correcta si es posible. La otra cuestin a comprobar es que el directorio raz
tenga un nmero de primer bloque vlido. El procedimiento anterior es sencillo y rpido. Si se hace una
comprobacin ms exhaustiva, se mira directorio a directorio para ver si el primer bloque de cada fichero
FAT
Directorio
raz ,
Archivos y
directorios
613
Mapas
de bits
Nodos-i
Archivos y
directorios
614
m?
h i
Para cada uno de ellos, se incluye una estructura de datos para su superbloque particular, el mximo
tamao de fichero posible, la proteccin que se aplica al sistema de ficheros, etctera Adems, para optimizar
aspectos como la bsqueda de espacio libre, se incluye informacin sobre la situacin del primer bloque libre
y del primer descriptor de ficheros libre. Como ejemplo de superbloque particular, se muestra el de MINIX
Cuando arranca el computador y se carga el sistema operativo, el superbloque del dispositivo de carga,
o sistema de ficheros raz, se carga en memoria en la tabla de superbloques. A medida que otros sistemas
de ficheros son incorporados a la jerarqua de directorios (en U N IX se dice que son montados) sus superblo
ques se cargan en la tabla de superbloques existente en memoria. La forma de enlazar unos con otros se ver
ms adelante.
Tras el superbloque, el sistema de ficheros incluye informacin de gestin de espacio en el disco. Esta
informacin se basa en el uso de mapas de bits y es necesaria por dos razones: para permitir al servidor de
ficheros implementar distintas polticas de asignacin de espacio y para reutilizar los recursos liberados para
nuevos ficheros y directorios. Normalmente, los sistemas de ficheros incluyen dos mapas de espacio libre:
Mapas de bloques de datos, o mapas de bits, en los que se indica si un bloque de datos est libre o
no. En caso de que el espacio de datos se administre con agrupaciones para optimizar la gestin de
espacio libre, esta informacin se refiere a las agrupaciones. Si el bit[j] = 0, el bloque est libre; si el
bit[j] = 1, el bloque est ocupado.
Mapas de la descriptores fsicos de ficheros, como nodos-i en UNIX o registros de Windows, en la
que se indica si un descriptor de fichero est libre o no. Si el bit[j] = 0, el nodo-i est libre; si el bit[j]
= 1, el nodo-i est ocupado.
Los mapas de bits ocupan espacio en disco. Por ejemplo, para un disco de 64 Gbytes y bloque de 4
Kbytes, se necesitan 16 Mbits (2 Mbytes). Sin embargo, estos mapas de bits se pueden albergar en memoria
de forma cmoda actualmente.
Despus de los mapas de recursos del sistema de ficheros, se encuentran los descriptores fsicos de fi
cheros. Estos descriptores son los nodos-i de UNIX, tienen una estructura y tamao variable dependiendo de
cada sistema operativo, segn se vio en secciones anteriores. Por ejemplo, en LINUX ocupa 128 bytes y en
UNIX casi 2 Kbytes. El tamao del rea de descriptores de fichero es fcilmente calculable si se conoce el
tamao del nodo-i y el nmero de nodos-i disponibles en el sistema de ficheros. Normalmente, cuando se
Superbloque Virtual .
r Dispositivo
M fey 'sT ania to16 bloque del superbloque
^ f $ - vF1ags, nmero mgico y tiempos
^gO peraciones sobre el sistema de archivos
& & .Ofcracione3 sobre el superbloque
- . Superbloque de EXT2
:
.
. .
/. Superbloque de MINIX
Superbloque de MINIX
Nmero de agrupaciones
:Nmro]da,bloques de mapa de bits de nodos-i
Nmero d btoqs de mapas de bits de agrupaciones
, ; primer bloque de datos
Mximo tamao de archivo
fjS S ^ -flh te ro al nodo-i raz del SF montado
f e iS H Puntero al nodo-i de montaje
^ N m e ro de dispositivo
Fia; de proteccin (ro,...)
^Versin de SF
|gfe_bit!b ra;enel mapa de bits de nodos-J
Ijbre en l mapa de bits de dusters
Informacin
presente
en disco y
en memoria
615
crea un sistema de ficheros, el sistema operativo habilita un nmero de descriptores de fichero proporcional
al tamao del dispositivo. Por ejemplo, en LINUX se crea un nodo-i por cada 2 bloques de datos. Este par
metro puede ser modificado por el usuario cuando crea un sistema de ficheros, lo que en el caso de UNIX se
hace con el mandato mkf s.
El ltimo componente del sistema de ficheros son los bloques de datos. Estos bloques, bien tratados de
forma individual o bien en grupos, son asignados a los ficheros por el servidor de ficheros, que establece una
correspondencia entre el bloque y el fichero a travs del descriptor del fichero. Tanto si se usan bloques indi
viduales como agrupaciones, el tamao de la unidad de acceso que se usa en el sistema de ficheros es uno de
los factores ms importantes en el rendimiento de la entrada/salida del sistema operativo. Puesto que el blo
que es la mnima unidad de transferencia que maneja el sistema operativo, elegir un tamao de bloque pe
queo, por ejemplo 512 bytes, permite aprovechar al mximo el tamao del disco. As, el fichero p ru eba de
1,2 Kbytes ocupara 3 bloques y slo desperdiciara Vi bloque o el 20% del espacio de disco si todos los fi
cheros fuesen de ese tamao. Si el bloque fuese de 32 Kbytes, el fichero ocupara un nico bloque y desper
diciara el 90% del bloque y del espacio de disco. Ahora bien, transferir el fichero pru eba, en el primer caso,
necesitara la transferencia de 3 bloques, lo que significa buscar cada bloque en el disco, esperar el tiempo de
latencia y hacer la transferencia de datos. Con bloques de 32 Kbytes slo se necesitara una operacin. La
figura 9.28 muestra la relacin entre tamao de bloque, velocidad de transferencia y porcentaje de uso del
sistema de ficheros, con un tamao medio de fichero de 14 Kbytes. Como puede verse, los dos ltimos par
metros son contradictorios, por lo que es necesario adoptar una solucin de compromiso que proporcione
rendimientos aceptables para ambos. En el caso del dispositivo cuyos resultados se muestran en la figura, el
tamao de bloque puede estar entre 4Kbytes y 8 Kbytes. Es interesante resaltar que esta curva cambia con la
tecnologa de los discos y con el tamao medio de los ficheros, que ha cambiado desde 1 Kbyte en los siste
mas UNIX de hace 15 aos hasta los 14 Kbytes medidos en estudios ms actuales. Adems, el uso masivo de
informacin multimedia tender a incrementar mucho el tamao medio de los ficheros en un futuro prximo,
por lo que es necesario evaluar los parmetros cuidadosamente y ajustarlos al tipo de almacenamiento que se
llevar a cabo en cada dispositivo (general, cientfico, multimedia, etctera).
La asignacin de espacio libre se lleva a cabo buscando en los mapas de bits los bloques necesarios.
Para buscar en los mapas de bits se llevan a cabo mscaras de bits a nivel de palabra de 32 bits. Si se mantie
ne un indicador del ltimo bit asignado (u ba), se puede calcular la palabra a la que pertenece mediante la
operacin pal = uba / 32. Una vez conocida la palabra se lee y se efecta una mscara con Oxffffffff
para ver si hay algn bloque libre en esa palabra:
Si pal & Oxffffffff = 0 -> hay un bloque libre.
Con este mtodo se pueden asignar fcilmente grupos de hasta 32 bloques consecutivos. Si se necesita
ms espacio es cuestin de repetir la operacin anterior. En caso de que el sistema de ficheros est muy lleno
habr que repetir la operacin muchas veces buscando por el mapa de bits. En cualquier caso, la asignacin
de bloques es rpida si el mapa de bits est en memoria.
Tamao de Bloque
Figura 9.28 Relacin entre el tamao de bloque, el ancho de banda y el uso del disco.