Está en la página 1de 61

SISTEMAS OPERATIVOS

(Resumen)

UNIDAD 1 : Introduccin
DIVISIONES DEL SOFTWARE
(1)

Programas de Sistema: Controlan la operacin de la PC.

(2)

Programas de Aplicacin: Hacen tareas que el usuario desea.

DEFINICIN DE UN SISTEMA OPERATIVO (S.O.)


Es el programa de sistema ms fundamental y es el que controla todos los recursos
de la computadora. Evita que los programadores tengan que ocuparse del manejo de
dispositivos como disquetes y/o unidades flash.
MISIN DEL SISTEMA OPERATIVO
Asegurar un reparto ordenado y controlado de los procesadores, memorias y
dispositivos de E/S entre los diferentes programas que compiten por ellos, como el manejo
de impresiones para varios usuarios haciendo ordenado el envo al dispositivo.
1.
2.
3.
4.

Manejo de Procesos
Manejo de E/S
Manejo de Memoria
Sistema de archivos

COMPONENTES PRINCIPALES

DEFINICIN DE UNA MAQUINA VIRTUAL (MAQUINA EXTENDIDA)


As se denomina la capa de software, a manera e interfaz, encima del hardware,
llamada sistema operativo, que evita la complejidad de dispositivos y recursos a los
programadores, ofreciendo facilidad en el uso de dispositivos.
EL ARRANQUE DE UN SISTEMA OPERATIVO
Cuando se enciende la computadora, el hardware lee el primer sector de la primera
pista del disco de arranque y lo coloca en la memoria, luego ejecuta el cdigo que encuentra
ah. Los detalles varan entre un disco duro y un disquete. En un disquete este sector
contiene el programa de auto arranque (bootstrap), que es muy pequeo, pues debe
caber en un sector. Este programa carga un programa ms grande, boot, que luego carga al
sistema operativo propiamente dicho.
En cambio, los discos duros requieren un paso intermedio. Un disco duro est dividido
en particiones, y el primer sector de un disco duro contiene un pequeo programa y la
tabla de particiones del disco. Colectivamente, stos se conocen como registro maestro
de arranque. La parte de programa se ejecuta para leer la tabla de particiones y
seleccionar la particin activa, la cual tiene un auto arranque en su primer sector, mismo
que se carga y ejecuta para encontrar e iniciar una copia de boot en la particin,
exactamente como se ha cuando se arranca con un disquete.
En ambos casos, boot busca un archivo multi partes en el disquete o la particin y
carga las partes individuales en las posiciones apropiadas de la memoria. Estas partes
incluyen el Kernel, administrador de memoria, sistema de archivos e init, el primer proceso
del usuario. Una vez que todos se han ejecutado e inicializado en orden, se bloquean,
esperando algo que hacer. Una vez que todos estn bloqueados, se ejecuta init para
comenzar a trabajar.
EVOLUCION DE LAS COMPUTADORAS
Primera generacin (1945-1955): tubos de vaco
Lo cierto es que el primer computador digital fue diseado por el matemtico ingls
Charles Babbage hace cerca de siglo y medio. Era un computador totalmente mecnico, que
Babbage nunca pudo construir, principalmente debido a que la tecnologa de la poca no
era capaz de producir las piezas con la precisin requerida. Despus de eso, poco se hizo
Sistemas Operativos

Pgina 1 /59

hasta la segunda guerra: alrededor de 1940 se construyeron las primeras mquinas


calculadoras usando tubos de vaco. Estas mquinas de varias toneladas de peso eran
diseadas, construidas, programadas y operadas por el mismo grupo de personas. No haba
ni lenguajes de programacin, ni compiladores; mucho menos sistema operativo. Cada
programa se escriba en lenguaje de mquina, usando tableros con enchufes e interruptores
y tena que manejar todo el sistema (lo que era factible gracias a que el programador era el
mismo que dise y construy la mquina). Con el tiempo se introdujeron las tarjetas
perforadas, para reemplazar al tablero, pero el sistema era esencialmente el mismo.
Segunda generacin (1955-1965): transistores y procesamiento por lotes
La introduccin de los transistores permiti aumentar sustancialmente la
confiabilidad de los computadores, lo que a su vez hizo factible construir mquinas
comerciales. Por primera vez hubo una separacin entre diseadores, constructores, y
programadores.
La aparicin de los primeros compiladores (de FORTRAN) facilit la programacin, a
costa de hacer mucho ms compleja la operacin de los computadores. Por ejemplo, para
probar un programa en FORTRAN recin escrito, el programador deba esperar su turno, y:
Cargar compilador de FORTRAN, tpicamente desde una cinta magntica.
Poner el alto de tarjetas perforadas correspondientes al programa FORTRAN y correr el
compilador.
El compilador genera cdigo en assembler, as que hay que cargar ahora el
ensamblador para traducirlo a lenguaje de mquina. Este paso requiere poner otra cinta con
el ensamblador. Ejecutar el ensamblador, para generar el programa ejecutable.
Al Ejecutar el programa.
Si hay errores en cualquiera de estos pasos, el programador deba corregir el
programa y comenzar todo de nuevo. Obviamente, mientras el programdor pona cintas y
tarjetas, y mientras se devanaba los sesos para descubrir por qu el programa no funciona,
la CPU de millones de dlares de costo se mantena completamente ociosa. Ms que rpido,
se idearon mecanismos para mantener a la CPU siempre ocupada. El primero fue separar el
rol de programador del rol de operador. Un operador profesional demoraba menos en
montar y desmontar cintas, y poda acumular lotes de trabajos con requerimientos similares:
por ejemplo, si se acumula la compilacin de varios programas FORTRAN, entonces el
compilador de FORTRAN se carga una sola vez para todos los trabajos.
An as, en la transisin de un trabajo a otro la CPU se mantena desocupada.
Aparecieron entonces los monitores residentes, que fueron los precursores de los sistemas
operativos. Un monitor residente es un pequeo programa que est siempre en la memoria
del computador, desde que ste se enciende. Cuando un programa termina, se devuelve el
control al monitor residente, quien inmediatamente selecciona otro programa para ejecutar.
Ahora los programadores, en vez de decirle al operador qu programa cargar, deban
informrselo al monitor (mediante tarjetas de control especiales):
$JOB
$FTN
programa FORTRAN
$LOAD
$RUN
datos para el programa
$END
Esto se conoce como procesamiento por lotes: el programador deja su alto de
tarjetas, y despus vuelve a retirar la salida que se emite por la impresora (y que puede ser
nada ms que la notificacin de que el programa tena un error de sintaxis).
Tercera generacin (1965-1980): circuitos integrados y multiprogramacin
El procesamiento por lotes evita que la CPU tenga que esperar tareas ejecutadas por
lentos seres humanos. Pero ahora el cuello de botella se traslad a los dispositivos
mecnicos (impresoras, lectoras de tarjetas y de cinta), intrnsecamente ms lentos que que
las CPUs electrnicas. Para resolver esto, aparece, dentro de la tercera generacin de
Sistemas Operativos

Pgina 2 /59

computadores, la multiprogramacin: varios trabajos se mantienen permanentemente en


memoria; cuando uno de ellos tiene que esperar que una operacin (como grabar un
registro en cinta) se complete, la CPU contina con la ejecucin de otro trabajo. Si se
mantiene un nmero suficiente de trabajos en la memoria, entonces la CPU puede estar
siempre ocupada.
Pero el sistema sigue siendo esencialmente un sistema de procesamiento por lotes;
los programadores no interactan en lnea con el computador, los tiempos de respuesta
desde que se deja un trabajo para ejecucin hasta conocer el resultado son demasiado
grandes. (En cabio, los computadores de primera generacin eran interactivos!) De ah
nace el concepto de tiempo compartido que es una variante de la multiprogramacin en la
cual una CPU atiende simultneamente los requerimientos de varios usuarios conectados en
lnea a travs de terminales. Ya que los usuarios humanos demoran bastante entre la
emisin de un comando y otro, una sola CPU es capaz de atender, literalemente, a cientos
de ellos simultneamente (bueno, en realidad, uno despus de otro, pero los usuarios tienen
la ilusin de la simultaneidad). Al mismo tiempo, cuando no hay ningn comando que
ejecutar proveniente de un usuario interactivo, la CPU puede cambiar a algn trabajo por
lote.
Cuarta generacin (1980-): computadores personales
Con el advenimiento de la integracin a gran escala, que permiti concentrar en un
solo chip miles, y luego millones de transistores, naci la era de la computacin personal.
Los conceptos utilizados para fabricar los sistemas operativos de la tercera generacin de
computadores siguen siendo, en general, adecuados para la cuarta generacin. Algunas
diferencias destacables:
Dado los decrecientes costos de las CPUs, ya no es nada de grave que un procesador est
desocupado.
La creciente capacidad de las CPUs permite el desarrollo de interfaces grficas;
buena parte del cdigo de los sistemas operativos de hoy es para manejar la interfaz con el
usuario.
Los sistemas paralelos (un computador con varias CPUs), requieren sistemas
operativos capaces de asignar trabajos a los distintos procesadores.
Las redes de computadores y sistemas distribuidos abren nuevas posibilidades e
imponen nuevas obligaciones a los sistema operativo.
EVOLUCION DE LOS SISTEMAS OPERATIVOS (ESTRUCTURAS)
(1) MONOLTICOS

Todo el sistema es un conjunto de procedimientos, sin privacidad que pueden


llamarse uno a otro cuando se quiera. Todo compilado en un solo archivo objeto
unido.
Solo tienen una pequea estructuracin donde para las llamadas al sistema se hacen
colocando parmetros en lugares previamente definidos, como registros o pilas y
despus ejecutando una instruccin especial (trampa o interrupcin) de Kernel para
ejecutar un procedimiento (llamada supervisora). Una vez hecha la llamada, se
detecta en los parmetros si el nuevo proceso correr en modo Kernel o modo
usuario.
Existen 3 capas: (1) procedimientos principales (2) procedimientos de servicio (3)
procedimientos de utilidades.
(2) SISTEMAS DE ESTRATOS (CAPAS)

Con esto se pretende establecer un sistema operativo ms slido sobre una


clasificacin jerrquica de procedimientos en estratos o capas. Por ejemplo:
CAPA
4

FUNCIONES
Programas del usuario.
Sistemas Operativos

Cada capa sabe


que puede contar
Pgina 3 /59

3
2
1
0

Administracin de E/S.
Comunicaciones.
Administracin de Memoria.
Multiprogramacin.

con las otras para


realizar sus
funciones yendo del
4 al 0

(3) MAQUINAS VIRTUALES


Se creo sobre la observacin que un sistema operativo de tiempo compartido se
puede dividir en: (1) Multiprogramacin y (2) Interfaz amigable con el usuario. Sobre esto se
dividieron las dos reas, teniendo un corazn llamado Monitor de Mquina Virtual que ofrece
varias mquinas virtuales a la siguiente capa de interfaz de programacin, siendo cada
mquina una copia exacta de la mquina real con su modo Kernel / Usuario, E/S,
interrupciones y dems.
Esto permite la ejecucin de diferentes sistemas operativos sobre la misma
computadora real. Simulando ASAMBLER o MICROPROGRAMACIN a nivel de Hardware. Por
ejemplo: Intel puso esto en Pentium para emular el procesador del D.O.S. o ejecutar
Windows.
Actualmente se pueden tener por ejemplo 2 mquinas virtuales con recursos
diferentes para su ejecucin y un EXOKERNEL que se encarga de coordinar y administrar
recursos de ambas.
Ventajas: facilita el desarrollo de sistemas operativos (cuando la mquina es cara y
no se puede entregar una a cada programador). Sin este esquema, es necesario bajar la
mquina cada vez que quiere probar una modificacin al sistema. Tambin permite resolver
problemas de compatibilidad. Por ejemplo, si queremos desarrollar un nuevo sistema
operativo, pero queremos que los miles de programas DOS que existen sigan corriendo,
podemos usar esta solucin, asignando una mquina virtual a cada programa DOS que se
ejecute. Se puede ir ms lejos, y crear una mquina virtual distinta a la original. As es como
Windows para arquitectura Intel se puede ejecutar, por ejemplo en una Silicon Graphics. El
problema es que, en este caso, hay que interpretar cada instruccin (en lugar de ejecutarla
directamente).
(4) CLIENTE / SERVIDOR
La idea es desplazar el cdigo del sistema a capas superiores, dejando el cdigo del
Kernel al mnimo. El mtodo ms usado es que las funciones del sistema operativo se hagan
en modo usuario y que las terminales enven la solicitud a un servidor que haga el trabajo,
buscando que el Kernel se ocupe solo de comunicaciones entre los clientes y servidores.
En teora ofrece la ventaja que al ejecutarse los procesos en el servidor en modo
usuario, si ocurre una falla, el hardware no se cae, nicamente el servicio.
Otra ventaja es su adaptabilidad a sistemas distribuidos, donde al cliente no le afecta
quin atiende su solicitud. nicamente recibe la tarea realizada de
vuelta.
MODOS DE EJECUCIN
Existen 2 modos:
(1)

Modo Usuario: Es cuando un usuario hace una llamada al sistema operativo para
realizar una tarea. En este modo slo se permiten algunas operaciones por la
proteccin que tiene el sistema operativo.

(2)

Modo Supervisor (Kernel) : Es cuando el sistema se encarga de hacer lo que el


usuario solicit. Toda operacin sobre dispositivos se permite.

Sistemas Operativos

Pgina 4 /59

Estos dos modos cambian constantemente entre si, con lo que se da un cambio de
contexto.
TIPOS DE PROTECCION
1. PROTECCIN E/S: Las instrucciones E/S solo se pueden ejecutar en modo sistema
para prevenir un dao por el usuario y asi el sistema filtra los datos.
2. PROTECCIN DE MEMORIA: Como se ver ms adelante en administracin de
memoria se divide en base y lmite para protegerla.
3. CONTROL DEL CPU: Se previene que no se quite el control al sistema operativo si
sucediera algo como un ciclo infinito en un programa de usuario.
La idea es que el usuario le pide al sistema operativo que haga estas tareas por l a
travs de llamadas al sistema.
LLAMADAS AL SISTEMA
Son instrucciones extendidas que el sistema operativo ofrece como una interfaz entre
los programas de usuario y el sistema operativo como tal.
Modo Usuario

Hace

Llamada al sistema

Modo Supervisor
pasa a

INTERRUPCIONES
Existen interrupciones en software, anlogas a las del hardware. El sistema operativo
se vale de interrupciones para notificar a los procesos mensajes de error o envos de
informacin requerida.
Las llamadas al sistema, en la mayora de los sistemas operativos se hacen por
medio de una interrupcin de software o trap a una ubicacin especfica del vector de
interrupciones. Ejemplo hipottico, (parecido a MSDOS), para borrar un archivo:
1. Poner en registro A el cdigo de la operacin: 41h = borrar archivo
2. Poner puntero al nombre del archivo en registro B
3. INT 21h (generar interrupcin de software)
Como la llamada es a travs de una interrupcin, se hace lo de siempre: cambiar a modo
protegido, y pasar control a la direccin en la posicin 4*21h del vector de interrupciones, o
sea, a la rutina que maneja las llamadas al sistema (o tal vez, la rutina que maneja las
llamadas que tienen que ver con archivos; puede que otras clases de llamadas sean
atendidas por medio de otras interrupciones). Dicha rutina examina el registro A para
determinar qu operacin debe ejecutar, y despus determina el nombre del archivo a
travs del registro B. En seguida, decide si la operacin es vlida: puede que el archivo no
exista o pertenezca a otro usuario; segn eso, borra el archivo o "patalea" de alguna
manera.
Cuando uno hace esto en un lenguaje de alto nivel, como C, simplemente escribe:
char* Nombre = "Datos";
remove(Nombre);
El compilador de C es quien se encarga de traducir esto a una llamada al sistema, ocultando
el detalle de la interfaz con el sistema operativo.
VECTOR DE INTERRUPCIONES
rea de memoria que guarda la direccin inicial de un proceso al ocurrir una
interrupcin.
Sistemas Operativos

Pgina 5 /59

Dado que existe una cantidad limitada (y reducida) de tipos de interrupciones


posibles, se usa una tabla con las direcciones de los servidores de cada interrupcin,
tpicamente en las primersimas posiciones de la memoria.
Esta tabla se conoce como vector de interrupciones. As por ejemplo, si las
direcciones ocupan 4 bytes, la direccin del servidor de la interrupcin i se guarda en los 4
bytes a partir de la posicin 4i de la memoria.
Se require la proteccin de modo sistema porque un programa de usuario podra
poner una direccin que apunte a una rutina propia en el vector de interrupciones. As,
cuando se produzca la interrupcin, el hardware cambiara a modo sistema, y pasara el
control a la rutina del usuario.
CATEGORAS PRINCIPALES
1. Referentes a Procesos
2. Referentes a archivos
LLAMADAS REFERENTES A ARCHIVOS
La referente a procesos se ve en la siguiente unidad. Bsicamente la de archivos se
refiere a que el sistema operativo maneja los archivos con rutas en forma de rbol donde la
raz es el primer nodo de un dispositivo E/S, que a su vez es un nodo de dispositivos E/S que
tiene la computadora.
El usuario continuamente hace llamadas referentes a archivos como escribir o leer
datos en archivos o dispositivos E/S.

CLASIFICACION DE LOS SISTEMAS OPERATIVOS (CAPAS)


Sistema
bancario

Reservaciones
areas

Compiladores

Editores

Navegador
WEB
Intrprete
de comandos-SHELL

Sistema Operativo
Lenguaje de mquina
Microprogramacin
Dispositivos fsicos

Programas de
Aplicacin
Programas de
Sistema
Hardware

DISPOSITIVOS FISICOS
Circuitos integrados (CHIPS), alambres, fuentes de potencia y otros aparatos fsicos
similares.
MICROPROGRAMACIN
Es una programacin en los dispositivos fsicos, normalmente de slo lectura que
ejecuta cada instruccin, del lenguaje mquina definido en la siguiente capa, en varios
pasos de operaciones sobre el dispositivo fsico.
LENGUAJE MAQUINA
Es el conjunto de instrucciones para hacer funcionar a los dispositivos, pero no todas
las computadoras hacer pasan por la microprogramacin, por ejemplo el procesador IBM
POWER PC o computadoras RISC (computadoras con conjunto de instrucciones reducido)
ejecuta las instrucciones de lenguaje mquina directamente, a diferencia del MOTOROLA
680X0 que si tiene microprogramacin.

Sistemas Operativos

Pgina 6 /59

PROGRAMAS DE SISTEMA
Estos programas no son parte del sistema operativo, aunque generalmente son
dados por el fabricante de la computadora.
El sistema operativo es la porcin de software que corre ya sea en modo Kernel o
modo supervisor y est protegido contra la intervencin del usuario.
PROGRAMAS DE APLICACION
Los usuarios compran o escriben estos programas para resolver problemas
particulares.

Sistemas Operativos

Pgina 7 /59

UNIDAD 2 : Procesos
DEFINICIN DE PROCESO
Es un programa en ejecucin. Cada proceso tiene asociado un espacio de direcciones
en memoria con un mnimo, generalmente 0, hasta un mximo, donde puede leer o escribir,
teniendo en este espacio la siguiente informacin:
Otra informacin para ejecutarse.
(Registros multipropsito)
Otros registros hardware
IF Instruction Fetch
(siguiente instruccin a hacer)
Apuntador de la Pila
Contador del programa
PC Program pointer
(Puntero de memoria del programa)
Pila
Datos del Programa
Programa Ejecutable
IR Instruction Register
(Instrucciones del programa)

Otros Registros

Programa

MULTIPROGRAMACION (TIME-SHARING)
Significa que se pueden ejecutar varias tareas o procesos, mediante el cambio de
una proceso a otro (conmutar o context-switch), aprovechando el tiempo desperdiciado en
esperas E/S. Tambin hace posible el trabajo multiusuario.
Con la conmutacin de procesos ya no se ejecutan todos los procesos con una misma
duracin o un tiempo dado, menos reproducible. Es por esta razn que en adelante Nunca
se hacen suposiciones de tiempo de ejecucin en procesos.
LLAMADAS AL SISTEMA DE ADMINISTRACIN DE PROCESOS
Las Principales son:
(1)
Creacin de Procesos
(2)
Terminacin de Procesos
Algunas otras que se dan son:
(1)
Solicitar ms memoria.
(2)
Liberar memoria no utilizada.
(3)
Esperar a que un proceso hijo termina.
(4)
Superponer otro programa al actual.
Todo el manejo de las interrupciones y de los detalles de echar a andar y suspender
procesos estn escondidos en el administrador de procesos, bastante pequeo y que
adems planifica la ejecucin de los mismos.
Algunos procesos estn ejecutando programas en respuesta a comandos emitidos por
los usuarios (o sea, son procesos de usuario o interactivos) y otros procesos forman
parte del sistema; se encargan, por ejemplo de atender peticiones de otros procesos para
manipular archivos, o de manejar algn dispositivo.
ESTADOS DE PROCESOS
1.

Ejecutndose (usando al CPU).


Sistemas Operativos

Pgina 8 /59

2.

Listo (se puede ejecutar, pero se suspendi temporalmente para dejar que
otro proceso se ejecute).
3.
Bloqueado (no puede ejecutarse en tanto no ocurra algn evento externo.

TABLA DE PROCESOS
Esta tabla existe porque peridicamente, el sistema operativo decide dejar de
ejecutar un proceso y comenzar otro, volvindose necesario el tener un lugar para guardar
todos los datos al momento de suspender un proceso para despus reanudarlo en el mismo
lugar donde se dej. Por ejemplo: El apuntador de un registro en un archivo abierto para
leer la informacin en ese registro al reanudar el proceso.
En esta tabla se guardan estos datos junto con la direccin y espacio en memoria
que ocupa el proceso suspendido. Todo se guarda en forma de una lista:
Info. Del Nodo
Imagen del Ncleo

Info. Del Nodo


Info. Del Nodo
Imagen del Ncleo
Imagen del Ncleo

Algunos campos importantes para los procesos son:


1.
2.
3.
4.
5.
6.
7.
8.

Registros
Contador de programa
Estado del programa
apuntador a la pila
Hora de inicio del proceso.
Tiempo del CPU usado
Tiempo de CPU de los hijos
Identificador del proceso.

se le llama IMAGEN DEL NCLEO al espacio de direcciones guardado en la tabla de


procesos para un proceso suspendido.

Sistemas Operativos

Pgina 9 /59

PROCESOS HIJO
Es cuando un proceso crea a otro. Esto va formando una estructura de rbol para los
procesos en la tabla de procesos (lista enlazada):
P1
P1A
P1A1

P2
P1B

(Tabla de Procesos)

(rboles binarios con hijos)

P1A2
HILOS DE CONTROL (THREADS)

Los procesos hijos pueden corren en espacios de memoria diferente o en el mismo


espacio que el padre. La ventaja es compartir memoria y recursos entre procesos como
conexiones a servidores o que queden en espacios de memoria independientes, conexiones
independientes. La tabla que guarda la conmutacin de procesos vara dependiendo del
manejo de hilos en el mismo espacio en memoria o distinto.
No hay proteccin entre threads: nada impide que un thread pueda escribir, por
ejemplo, sobre el stack de otro.
Las ventajas de resolver esta clase de problemas usando dos procesos, es que
tenemos:

Modularidad, ya que cada proceso realiza una funcin bien especfica.

Disminucin en el tiempo de ejecucin en caso que contemos con ms de un


procesador, ya que los procesos pueden trabajar en paralelo.

Las desventajas son:

Los procesos deben sincronizarse entre s, y deben compartir el buffer. Cmo puede
hacerse esto si los procesos tiene espacios de direccionamiento disjuntos?
(Recordemos que el sistema operativo no permite que un proceso escriba en la
memoria que le corresponde a otro proceso). Veremos formas de hacerlo, pero, por
ahora, lo importante es que no es "natural": hay que hacerlo explcitamente.

Para que la CPU suspenda un proceso y retome otro, debe hacer lo que se conoce
como cambio de contexto (context-switch), y para eso, se requiere guardar el estado
del proceso que est ejecutando, y cargar el estado que se haba guardado del nuevo
proceso. El estado de un proceso comprende el PC y los registros de la CPU. Adems,
si se usan las tcnicas de administracin de memoria que veremos ms adelante,
hay ms informacin involucrada. Este cambio es puro overhead, puesto que
entretanto la CPU no hace trabajo til (ningn proceso avanza). Considerando que la
CPU hace varios cambios de contexto en un segundo, su costo es relativamente alto.
Adems, al cambiar de un proceso a otro, como los espacios de direccionamiento son
disjuntos, hay otros costos indirectos, que tienen relacin con el cach de la CPU.

Ejemplo: servidor de archivos, que recibe solicitudes para leer y escribir archivos en un
disco. Para mejorar el rendimiento, el servidor mantiene un cach con los datos ms
recientemente usados, en la eventualidad que reciba algn requerimiento para leer esos
datos, no es necesario accesar el disco. Cuando se recibe una solicitud, se le asigna a un
thread para que la atienda. Si ese thread se bloquea porque tuvo que accesar el disco,
otros threads pueden seguir atendiendo otras solicitudes. La clave es que el buffer debe ser
compartido por todos los threads, lo que no podra hacerse si se usa un procesos pesados
para cada solicitud.
Sistemas Operativos

Pgina 10 /59

UNIDAD 3: Planificacin de Procesos


La parte del sistema operativo que decide la ejecucin entre varios procesos se llama
planificador y el algoritmo que usa se llama algoritmo de planificacin.
Casi todas las computadoras tienen incorporado un cronmetro o reloj electrnico
que genera interrupciones peridicamente. Es comn una frecuencia de 60 o 50
interrupciones por segundo (50 o 60 Hz.), pero hoy en da, en muchas computadoras el
sistema operativo puede ajustar la frecuencia del cronmetro.
NIVELES DE PLANIFICACIN
Es cuando los procesos tienen parte de sus datos en memoria secundaria, con un
acceso ms lento por lo que tenemos los siguientes niveles:
1. A CORTO PLAZO: Es la ejecucin de varios procesos en memoria principal.
2. A MEDIANO PLAZO: Es el cambio de memoria principal a secundaria para la ejecucin
de otro proceso.
3. A LARGO PLAZO: Es planificar de antemano y sobre datos como estadsticas, los
procesos que habr que cargar a memoria principal de la secundaria.
FORMAS DE PLANIFICACIN (APROPIATIVA)
(1)

PLANIFICACIN NO APROPIATIVA: Se daba al principio y los procesos se


ejecutaban hasta terminar.

(2)

PLANIFICACIN APROPIATIVA: Estrategia de suspender procesos lgicamente


ejecutables.

CRITERIOS LOS ALGORITMOS


(1)

EQUITIVIDAD: Cada proceso recibe una parte justa del tiempo de CPU.

(2)

EFICIENCIA: Mantener el CPU ocupado todo el tiempo.

(3)

TIEMPO DE RESPUESTA: Minimizar el tiempo de respuesta para usuarios


interactivos.

(4)

TIEMPO DE ESPERA: Minimizar el tiempo medio de espera en la cola de listos en


los procesos.

(5)

VOLUMEN DE PRODUCCIN: Maximizar el numero de trabajos procesados por


hora.

Sistemas Operativos

Pgina 11 /59

ALGORITMOS DE PLANIFICACIN:
(1) ALGORITMO DE PLAZO FIJO
Se establece la duracin de cada proceso no apropiativo.
(2) ALGORITMO DE FIFO
FCFS (First-come, first-served) por sus siglas en ingls. Es un algoritmo que no usa
expropiacin, y que consiste en atender a los procesos por estricto orden de llegada a la
cola READY. Cada proceso ejecuta hasta que termina, o hasta que hace una llamada
bloqueante (de I/O), o sea, ejecuta su fase de CPU completa. La gracia es que se trata de un
algoritmo muy simple: la cola READY se maneja como una simple cola FIFO.

No apropiativo
Equitativo
Eficiente
El tiempo global no es aceptable.
(3) ALGORITMO DE TORNEO (ROUND ROBIN)

Es el ms sencillo, equitativo y antiguo. A cada proceso se le asigna un intervalo de


tiempo llamado Quantum, durante el cual se le permite ejecutarse. Al terminarse el tiempo
y an se ejecuta, el sistema operativo se apropia del CPU y se lo da a otro proceso.
Si el proceso termina antes de su tiempo, el cambio de CPU se hace cuando el
proceso se bloquee o termine. La implementacin bsicamente es una lista donde al hacer
un cambio de procesos, se extrae el proceso actual y se inserta al final:
B
(Lista inicial)

(Nueva)

Suspender un proceso e iniciar otro, requiere tiempo por almacenar datos de estado.
Este tiempo se suma al Quantum lo que lo hace mayor. A Quantum de menor tiempo, ms
suspensiones de procesos y ms tiempo del CPU desperdiciado en cambios de procesos. En
Sistemas Operativos

Pgina 12 /59

Quantum mayor, se desperdicia menos el CPU en cambios de procesos, pero el rendimiento


es pobre con muchos usuarios o procesos que se ejecuten por lo que no es productivo.
Por ejemplo: Un Quantum de 20 Ms. Con 5 fijados para cambio es un 20% de CPU
desperdiciado, un buen tiempo medio razonable es 100 Ms. Por Quantum.
(4) ALGORITMO POR ROUND ROBIN (CON PRIORIDADES, SJN)
SJN es un caso especial de planificacin por prioridad, en la cual a cada proceso se le
asigna una prioridad, y la CPU se asigna al proceso con mayor prioridad en la cola READY. Se
asignan prioridades a los procesos, dando ms quantum a los de mayor prioridad. Para
evitar que dejen en espera permanente a los otros, se va reduciendo su prioridad en la
medida que el reloj los ejecuta, bajndolos a la capa inmediatamente inferior hasta terminar.
Cada capa de prioridades se ejecuta con ROUND ROBIN, pero siempre garantizando
el desplazamiento de procesos a otras capas al irse ejecutando. Por ejemplo:
ROUND ROBIN
Prioridad 4

Cambios de Nivel
prioridad

Prioridad 3
Prioridad 2
Prioridad 1
(5) ALGORITMO SJF (PRIORIDAD AL PROCESO MAS CORTO)
SJF es planificacin por prioridad donde la prioridad es funcin del estimador de la
duracin de la prxima fase de CPU. Una variante se hizo, haciendo que a todos los proceso
se daba 1 quantum y si el proceso consuma todo su Quantum, se le duplicaba la cantidad
del tiempo o sea 2 Quantums y as sucesivamente, degradndose a su vez de prioridad,
pero a la larga ejecutndose en menos intercambios. No es equitativo.
Pero si el proceso se degradaba y se volva interactivo con el usuario, digamos con la
tecla ENTER, no era correcto dejarlo congelado, por lo que se opt por subirlo de prioridad al
detectar una interaccin.
De esta forma se iba atendiendo ms rpidamente a estos procesos. Todo iba bien
hasta que un usuario coment que cuando presionaba ENTER todo le corra ms rpido...
LAS PRIORIDADES EN ALGORITMOS
Este tema da para mucho, pues hay muchas formas de definir la prioridad. La
prioridad puede definirse de manera esttica o dinmica; interna o externa.
Ejemplos:

Segn categora del usuario (externa).


Segn tipo de proceso: sistema, interactivo, o por lotes; o bien, CPU-bound o I/O
bound (interna).
Segn cuanto hayan ocupado la CPU hasta el momento (dinmica).
Para evitar que un proceso de baja prioridad sea postergado en demasa, aumentar
prioridad mientras ms tiempo lleve esperando: aging o envejecimiento (dinmica).
Para evitar que un proceso de alta prioridad ejecute por demasiado tiempo, se puede
poner un lmite de tiempo, o ir bajando la prioridad.
Sistemas Operativos

Pgina 13 /59

(6) ALGORITMO AL PRIMER TRABAJO MAS CORTO


SJN (shortest-job-next) por sus siglas en ingls. Supongamos que tenemos tres
procesos cuyas prximas fases de CPU son de a, b y c milisegundos de duracin. Si ejecutan
en ese orden, el tiempo medio de espera es:
0 + a + (a + b) = 2a+b
O sea, el primer proceso que se ejecute es el que tiene mayor incidencia en el tiempo
medio, y el ltimo, tiene incidencia nula. En conclusin, el tiempo medio se minimiza si se
ejecuta siempre el proceso con la menor prxima fase de CPU que est LISTO. Lo malo es
que para que esto funcione, hay que adivinar el futuro, pues se requiere conocer la duracin
de la prxima fase de CPU de cada proceso. Lo que se hace es predecir la prxima fase de
CPU en base al comportamiento pasado del proceso, usando un promedio exponencial.
Supongamos que nuestra prediccin para la n-sima fase es Tn, y que en definitiva result
ser tn. Entonces, actualizamos nuestro estimador para predecir Tn+1:
Tn+1 = (1-a) tn + a Tn
El parmetro a, entre 0 y 1, controla el peso relativo de la ltima fase en relacin a la
historia pasada.
Tn+1 = (1-a)tn + a(1-a)tn-1 + ... + aj(1-a)tn-j+ ... + an+1T0
O sea, mientras ms antigua la fase menos incidencia tiene en el estimador. Un valor
atractivo para a es 1/2, ya que en ese caso slo hay que sumar los valores y dividir por dos,
operaciones especialmente fciles en aritmtica binaria. Por ejemplo, con a = tenemos:
T0, T0/2 + T1/2, T0/4 + T1/4 + T2/2, T0/8 + T1/8 + T2/4 + T3/2
Despus de tres nuevas ejecuciones, el peso de T 0 en el nuevo estimado se ha
reducido a 1/8.
(7) PLANIFICACIN POR LOTERA
La idea es dar a los procesos boletos de lotera para los diversos recursos del
sistema, como el tiempo de CPU. Para tomar decisiones de planificacin se escoge al azar un
boleto para que obtenga el recurso, pudiendo realizar el sistema una lotera 50 veces por
segundo, concediendo 20 Ms. De tiempo de CPU como premio.
Se pueden dar ms boletos a los procesos ms importantes, a fin de aumentar sus
posibilidades de ganar. Algunas de sus propiedades interesantes son por ejemplo el que
cada vez que aparezca un proceso nuevo, se le conceden boletos, con lo que ya tendr una
probabilidad de ganar proporcional al nmero de boletos recibidos.
En procesos cooperativos pueden intercambiar boletos entre s como en servicios
cliente-servidor donde el cliente puede prestarle temporalmente al servidor sus boletos para
una mayor posibilidad de ganar tiempos.
(8) PLANIFICACIN DE TIEMPO REAL
Por lo regular en un sistema de tiempo real uno o ms dispositivos fsicos externos
a la computadora generan estmulos y la computadora debe reaccionar a ellos de forma
apropiada en un plazo fijado, como la msica de los datos ledos en un CD-ROM o
aplicaciones tan serias como un reactor nuclear.

Sistemas Operativos

Pgina 14 /59

El programa se divide en varios procesos y sus plazos es conocido de antemano por


el planificador, generalmente de menos de 1 seg. Se asegura cumplir todos los procesos en
su tiempo, pudindose dar los procesos peridicos y no peridicos.
La planificacin puede ser esttica, sabiendo de antemano los tiempos o dinmica,
asignando tiempos conforme se ejecutan los procesos. Un ejemplo de los estticos es
asignar tiempos basndose en la proporcin de la cantidad de veces que se ejecutar el
proceso del total de eventos establecidos. A esta forma de planificar se le llama algoritmo
de tasa monotnica.
Otro algoritmo es el de primer plazo ms prximo que funciona evaluando el
nuevo proceso contra los que quieren tiempo y les asignar prioridades de ejecucin. Por
ejemplo, podra evaluar un nuevo proceso interactivo contra un proceso peridico que
necesita ejecutar inmediatamente.
El algoritmo de Holgura siempre elige al proceso con menos holgura como el caso
de uno que requiera 200 Ms. y debe terminar en 250, tiene una holgura de 50 Ms., eligiendo
siempre al que tenga menor holgura.
(9) PLANIFICACIN DE MULTIPLES COLAS
Podemos agrupar los procesos en distintas clases, y usar distintos algoritmos de
planificacin intra-clase, ms algn algoritmo nter-clases. Por ejemplo, los procesos
interactivos y los procesos por lotes tienen distintos requerimientos en cuanto a tiempos de
respuesta. Entonces, podemos planificar los proceso interactivos usando RR, y los procesos
por lotes segn FCFS, teniendo los primeros prioridad absoluta sobre los segundos.

Sistemas Operativos

Pgina 15 /59

Una forma de implementar este algoritmo es dividiendo la cola READY en varias


colas, segn la categora del proceso. Por ejemplo, podemos tener una cola para:
1.
2.
3.
4.

Procesos
Procesos
Procesos
Procesos

de sistema.
interactivos.
de los alumnos.
por lotes.

Cada cola usa su propio algoritmo de planificacin, pero se necesita un algoritmo de


planificacin entre las colas. Una posibilidad es prioridad absoluta con expropiacin. Otra
posibilidad: asignar tajadas de CPU a las colas. Por ejemplo, a la cola del sistema se le puede
dar el 60% de la CPU para que haga RR, a la de procesos por lotes el 5% para que asigne a
sus procesos segn FCFS, y a las otras el resto.
Por otra parte, podramos hacer que los procesos migren de una cola a otra. Por ejemplo:
varias colas planificadas con RR, de prioridad decreciente y quantum creciente. La ltima se
planifica con FCFS. Un proceso en la cola que no termina su fase de CPU dentro del
quantum asignado, se pasa al final de la siguiente cola de menor prioridad, pero con mayor
quantum. Un proceso en la cola que s termina su fase de CPU dentro del quantum asignado,
se pasa al final de la siguiente cola de mayor prioridad, pero con menor quantum. Ejemplo:
Cola
0:
quantum=10
Cola
1:
quantum=20
Cola
2:
quantum=35
Cola 3: FCFS, 5% de CPU.

ms,
ms,
ms,

40%
30%
15%

de
de
de

CPU.
CPU.
CPU.

As los procesos de fases ms cortas tienen prioridad. Este algoritmo es uno de los
ms generales, pero tambin uno de los ms complejos de implementar. Tambin es difcil
de afinar, pues hay mltiples parmetros que definir.
(10) PLANIFICACIN EN 2 NIVELES
Hasta ahora de alguna manera hemos supuesto que todos los procesos ejecutables
estn en memoria. Pero si hay poca memoria disponible y muchos procesos, entonces
algunos procesos deben mantenerse en disco, lo que cambia radicalmente la problemtica
de la planificacin, porque el tiempo requerido para hacer un cambio de contexto que
involucre traer un proceso del disco es muchsimo mayor que el tiempo de un cambio de
contexto entre procesos en memoria.
Las cosas se simplifican si se divide el problema en dos, y se usa un scheduler
distinto para cada caso. Un scheduler de corto plazo se encarga slo de decidir a qu
proceso se le asigna la CPU, de entre todos los que estn en memoria. Peridicamente, otro
scheduler de largo plazo decide qu procesos que han estado demasiado tiempo en
memoria deben ser pasados a disco para dar oportunidad a procesos que han estado mucho
rato en el disco. Para tomar esa decisin se pueden usar factores como el tiempo que un
proceso lleva en memoria o disco, cantidad de CPU usada hasta el momento, tamao del
proceso, prioridad, etc.

Sistemas Operativos

Pgina 16 /59

Entre los criterios que el planificador superior puede usar para la toma de decisiones
podran estar:
1.
2.
3.
4.

hace cunto el proceso se intercambi a disco?


Cunto tiempo a recibido el proceso recientemente?
Qu tan grande es el proceso?
Qu tan alta es la prioridad del proceso?
(11) PLANIFICACIN EN MULTIPROCESADORES

Cuando hay varias CPUs (y una memoria comn), la planificacin tambin se hace
ms compleja. Podramos asignar una cola READY a cada procesador, pero se corre el riesgo
de que la carga quede desbalanceada: algunos procesadores pueden llegar a tener una cola
muy larga de procesos para ejecutar, mientras otros estn desocupados (con la cola vaca).
Para prevenir esta situacin se usa una cola comn de procesos listos. Este enfoque tiene
dos alternativas:

Cada procesador es responsable de su planificacin, y saca procesos de la cola


READY para ejecutar. El problema? Hay ineficiencias por la necesaria sincronizacin
entre los procesadores para accesar la cola.
Dejar que slo uno de los procesadores planifique y decida qu procesos deben
correr los dems: multiprocesamiento asimtrico.

UNIDAD 4: Concurrencia
Muchos problemas se pueden resolver ms fcilmente o ms eficientemente si
usamos procesos (o hebras) cooperativos, que ejecutan concurrentemente, tcnica que se
conoce como programacin concurrente. La programacin concurrente es una herramienta
poderosa, pero introduce algunos problemas que no existen en la programacin secuencial
(no concurrente).
Concurrencia = operaciones paralelas o pseudo paralelas (intercaladas).
COMUNICACIN ENTRE PROCESOS
Se da cuando los procesos trabajan juntos para realizar tareas.
Formas de comunicacin
Existen 2 formas de comunicacin entre procesos:
(1)

MEMORIA COMPARTIDA: Procesos comparten variables y se espera que los


procesos intercambien informacin a travs de estas variables. En este esquema
el S.O. solo provee memoria, la responsabilidad de la informacin es de las
aplicaciones.

(2)

SISTEMA DE MENSAJES: Los procesos intercambian mensajes y la responsabilidad


descansa totalmente en el S.O. pudindose tener 2 operaciones:
a. SEND (Destino, &Mensaje)
b. RECEIVE (Origen, &Mensaje)
Se pueden dar ambas formas simultneamente. En seguida veremos la forma de
memoria compartida.

MEMORIA COMPARTIDA

Sistemas Operativos

Pgina 17 /59

A veces los procesos necesitan trabajar juntos con informacin en comn. Bajo este
esquema, los procesos pueden necesitar trabajar con datos en una memoria compartida.
EXCLUSIN MUTUA
Es evitar que los procesos colisionen al querer leer o escribir en sus datos
compartidos al mismo tiempo.
CONDICIONES DE COMPETENCIA (RACE-CONDITION)
Es cuando 2 o ms procesos manipulan datos compartidos y el resultado final
depende de estas condiciones de competencia. Por ejemplo: El ltimo en escribir deja sus
datos.
SECCIONES CRITICAS
Para lograr la exclusin mutua y entrar a concursar se debe evitar que dos o ms
procesos utilicen sus datos compartidos al mismo tiempo. La parte del programa donde
accede a la informacin compartida se denomina regin crtica o seccin crtica. Si se
puede garantiza que 2 procesos no estn en su seccin crtica al mismo tiempo, entran a
condiciones de concurso.
ALGORITMOS PARA LOGRAR EXLUSION MUTUA (MEMORIA COMPARTIDA)
4 CONDICIONES PARA SOLUCION ADECUADA DE DATOS COMPARTIDOS:
1.
2.
3.
4.

Dos procesos nunca pueden estar simultneamente dentro de sus regiones crticas.
No puede suponerse nada acerca de las velocidades o el nmero de las CPU.
Ningn proceso que se ejecute fuera de su regin crtica puede bloquear a otros
procesos.
Ningn proceso deber tener que esperar indefinidamente para entrar en su regin
crtica.
(1) Sistema en Lotes (Inhabilitacin de Interrupciones)

La solucin mas sencilla es hacer que cada proceso inhabilite las interrupciones justo
despus de ingresar en su regin critica y vuelva a habilitarlas antes de salir de ella. De esta
forma, no pueden ocurrir interrupciones de reloj. Este enfoque casi nunca resulta atractivo
porque no es prudente conferir a los procesos de usuario la facultad de desactivar las
interrupciones por el riesgo de no volverlas a habilitar. El Kernel si utiliza esto para algunas
actualizaciones, pero en conclusin la inhabilitacin de interrupciones suele ser una tcnica
til dentro del sistema operativo, pero no es apropiada para los procesos del usuario.

Sistemas Operativos

Pgina 18 /59

(2) Variable de Candado (Sin variables iniciales)


es 0:

La primera solucin por software es tener una variable compartida, con valor inicial

PROCESO 1
WHILE TRUE {
WHILE Cerrado = 0;
Cerrado = 1;
[Seccin Crtica]
Cerrado = 0;
}

PROCESO 2
WHILE TRUE {
WHILE Cerrado = 0;
Cerrado = 1;
[Seccin Crtica]
Cerrado = 0;
}

Los 2 pueden estar en seccin crtica al mismo tiempo si llegan a evaluar el


WHILE Cerrado = 0 en el mismo instante.

Una versin ms formal del algoritmo anterior es:


PROCESO_1
WHILE TRUE {
[ Tareas Previas 1]
WHILE Proceso_2_Adentro;
Proceso_1_Adentro = True;
[Seccin Crtica]
Proceso_1_Adentro = False;
[Tareas no Crticas 1]
}

PROCESO_2
WHILE TRUE {
[ Tareas Previas 2]
WHILE Proceso_1_Adentro;
Proceso_2_Adentro = True;
[Seccin Crtica]
Proceso_2_Adentro = False;
[Tareas no Crticas 2]
}

La exclusin mutua no se garantiza (si los 2 llegan estn al mismo tiempo en el


WHILE de espera, los 2 detectan pasan porque no hay ninguno adentro y los 2
ejecutan sus secciones crticas).
Utiliza 2 variables.
(3) Variable de Candado (Con Variables iniciales)
La primera solucin por software es tener una variable compartida, con valor inicial

es 0:
PROCESO 1
WHILE TRUE {
WHILE Cerrado <> 0;
[Seccin Crtica]
Cerrado = 1;
[Seccin no Crtica]
}
Se evita que ambos entren a seccin
Uno bloquea a otro en su seccin no
lento que otro.

PROCESO 2
WHILE TRUE {
WHILE Cerrado <> 1;
[Seccin Crtica]
Cerrado = 0;
[Seccin no Crtica]
}
crtica, pero
crtica cuando hay un proceso mucho ms

Sistemas Operativos

Pgina 19 /59

El algoritmo anterior tambin se puede escribir de la siguiente manera:


BEGIN
Proceso_1
ParBegin
Proceso_1
Proceso_2
ParEnd
END
PROCESO_1
WHILE TRUE {
[ Tareas Previas 1]
WHILE Proceso_2;
[Seccin Crtica]
Proceso_2;
[Tareas no Crticas 1]
}

PROCESO_2
WHILE TRUE {
[ Tareas Previas 2]
WHILE Proceso_1;
[Seccin Crtica]
Proceso_1;
[Tareas no Crticas 2]
}

Utiliza la espera ocupada.


Orden constantemente alterno.
Si uno de los 2 procesos termina, el otro no podr continuar.
Problema en sincronizar alternancia (si uno es ms rpido puede seguir entrando y
dejar al otro esperando).
(4) Variable de Candado (Con Variables iniciales de desear entrar)

BEGIN

END

P1_DeseaEntrar = False
P2_DeseaEntrar = False
ParBegin
Proceso_1
Proceso_2
ParEnd

PROCESO_1
PROCESO_2
WHILE TRUE {
WHILE TRUE {
[ Tareas Previas 1]
[ Tareas Previas 2]
P1_DeseaEntrar = True
P2_DeseaEntrar = True
WHILE P2_DeseaEntrar;
WHILE P1_DeseaEntrar;
[Seccin Crtica]
[Seccin Crtica]
P1_DeseaEntrar = False;
P2_DeseaEntrar = False;
[Tareas no Crticas 1]
[Tareas no Crticas 2]
}
}
nter bloqueo, aplazamiento indefinido. Cuando los 2 procesos cambian sus
variables de querer entrar al mismo tiempo y se pasa a espera ocupada.
Garantiza exclusin mutua.

Sistemas Operativos

Pgina 20 /59

Una tentativa para resolver el nter bloqueo es tratar de desbloquear a alguno de los 2
procesos con retardos aleatorios:
BEGIN
P1_DeseaEntrar = False
P2_DeseaEntrar = False
ParBegin
Proceso_1
Proceso_2
ParEnd
END
PROCESO_1
WHILE TRUE {
[ Tareas Previas 1]
P1_DeseaEntrar = True
WHILE P2_DeseaEntrar
P1_DeseaEntrar = False;
Retraso (Aleatorio, Algunos ciclos)
P1_DeseaEntrar = True;
ENDWHILE;
[Seccin Crtica 1]
P1_DeseaEntrar = False;
[Tareas no Crticas 1]
}

PROCESO_2
WHILE TRUE {
[ Tareas Previas 2]
P2_DeseaEntrar = True
WHILE P1_DeseaEntrar
P2_DeseaEntrar = False;
Retraso (Aleatorio, Algunos ciclos)
P2_DeseaEntrar = True;
ENDWHILE;
[Seccin Crtica 2]
P2_DeseaEntrar = False;
[Tareas no Crticas 2]
}

Garantiza exclusin mutua y no hay nter bloqueos por los diferentes retardos.
Aplazamiento indefinido en la ejecucin de 1 o ms procesos.
(5) ALGORITMO DE DECKER

Program Exclusin_mutua;
Var Proceso_favorecido
:(Primero, Segundo);
P1_DeseaEntrar, P2_DeseaEntrar : Boolean;

Matemtico holands
T. DECKER invent este
algoritmo que no
requiere alternancia
estricta.

Procedure Proceso_Uno;
While TRUE do
Begin
[Tareas Previas 1]
P1_DeseaEntrar = True;
While P2_DeseaEntrar do
If Proceso_Favorecido = Segundo Then
Begin
P1_DeseaEntrar = False;
While Proceso_Favorecido = Segundo do;
P1_DeseaEntrar = True;
End;
[Seccin Crtica 1]
Proceso_Favorecido = Segundo;
P1_DeseaEntrar = False;
[ Tareas no crticas 1]
End;
Procedure Proceso_Dos;
While TRUE do
Begin
[Tareas Previas 2]
P2_DeseaEntrar = True;
Sistemas Operativos

Pgina 21 /59

End;

While P1_DeseaEntrar do
If Proceso_Favorecido = Primero Then
Begin
P2_DeseaEntrar = False;
While Proceso_Favorecido = Primero do;
P2_DeseaEntrar = True;
End;
[Seccin Crtica 2]
Proceso_Favorecido = Primero;
P2_DeseaEntrar = False;
[ Tareas no crticas 2]

BEGIN

END

P1_DeseaEntrar = False;
P2_DeseaEntrar = False;
Proceso_favorecido = Primero;
ParBegin
Proceso_Uno;
Proceso_Dos;
ParEnd
Resuelve exclusin mutua.
Utiliza variable de turno con variables de intencin de entrada para resolver casos de
conflicto.
No se produce aplazamiento indefinido.

Sistemas Operativos

Pgina 22 /59

(6) ALGORITMO DE PETERSON


Program Exclusin_mutua;
Var Proceso_favorecido
:(Primero, Segundo);
P1_DeseaEntrar, P2_DeseaEntrar : Boolean;

Este es una forma ms


sencilla que el
algoritmo anterior de
DECKER (hacindolo
obsoleto)

Procedure Proceso_Uno;
While TRUE do
Begin
Actualmente es el ms
[Tareas Previas 1]
usado.
P1_DeseaEntrar = True;
Proceso_Favorecido = Primero;
While P2_DeseaEntrar AND Proceso_Favorecido = Segundo do;
[Seccin Crtica 1]
P1_DeseaEntrar = False;
[ Tareas no crticas 1]
End;
Procedure Proceso_Dos;
While TRUE do
Begin
[Tareas Previas 2]
P2_DeseaEntrar = True;
Proceso_Favorecido = Segundo;
While P1_DeseaEntrar AND Proceso_Favorecido = Primero do;
[Seccin Crtica 2]
P2_DeseaEntrar = False;
[ Tareas no crticas 2]
End;
BEGIN

END

P1_DeseaEntrar = False;
P2_DeseaEntrar = False;
Proceso_favorecido = Primero;
ParBegin
Proceso_Uno;
Proceso_Dos;
ParEnd
Resuelve exclusin mutua y los nter bloqueos.
No se produce aplazamiento indefinido.

Sistemas Operativos

Pgina 23 /59

(7) Algoritmo Productor Consumidor


Dos procesos comparten un mismo BUFFER de espacio limitado. El consumidor
coloca informacin y el otro la saca, pudindose generalizar a N productores y
consumidores.
Cuando el productor quiere agregar un elemento, pero el BUFFER esta lleno, debe
dormir hasta que el consumidor saque un elemento y entonces puede seguir agregando
elementos. Igualmente si el consumidor no tiene elementos que extraer del BUFFER,
entonces duerme hasta que el productor coloque elementos.
#define N 100
int count = 0;
void producer(void)
{
while (true) {
produce_intem();
if (count == N) sleep();
enter_item();
count = count + 1;
}

if (count == 1) wakeup(consumer);

}
void consumer(void)
{
while (true) {
if (count == 0) sleep();
remove_item();
count = count 1;

if (count == N 1) wakeup(producer);
consume_item();

}
Se da un problema porque por ejemplo, al estar vaco el BUFFER, el consumidor esta
evaluando su contador y ve que no hay datos, pero antes de dormirse el CPU pasa a
ejecutar al productor, este pone un dato y despierta al consumidor, sin embargo como el
Consumidor no llego a dormirse al reanudarse se duerme y el productor continua
produciendo. Tarde o temprano el productor habr llenado el BUFFER. Un arreglo es agregar
un bit de espera donde si un proceso quiere despertar a uno que nunca se durmi, este bit
evita que caiga de nuevo al Sleep(), pero esta solucin se vuelve difcil de implementar con
varios procesos y muchos bits de espera.

Semforos
Los semforos vinieron a solucionar el problema de los productores y consumidores
de varios procesos con un bit de espera para evitar problemas con el BUFFER compartido. La
solucin la propuso E.W. Dijkstra (1965) introduciendo la variable de un semforo con dos
funciones manejadas atmicamente.
Sistemas Operativos

Pgina 24 /59

Las operaciones atmicas son:


P(S): WHILE S <= 0;
S = S 1;
V(S): S = S + 1;
Cuando el valor del semforo al dormir P(S) es menor o igual que 0, se queda en P(S)
sin completar el dormir. Cuando V(S) se ejecuta, uno de los que estaban en P(S) elegido al
azar puede despertar para terminar P(S), dejando a los otros dormidos. Esto funciona
siempre que se garantice la atomicidad de operaciones. La variable del semforo, aqu S, y
normalmente conocida como MUTEX se inicia siempre con valor 1 para que el primer
proceso pare a los dems. De forma general, la implementacin para procesos es:
Aplicados a Productor Consumidor
Aplicando semforos a los productores y consumidores tenemos el siguiente cdigo
(P(S) = down(S), V(S) = up(S) ):
#define N 100
TYPEDEF int semaphore;
semaphore mutex = 1;
semaphore empty = N;
semaphore full = 0;

/* Tamao BUFFER.
/* Los semforos son un tipo especial de int.
/* Controla acceso a regin crtica.
/* Cuenta las ranuras vacas
/* Cuenta las ranuras llenas.

Void producer(void)
{
int item;
while (TRUE) {
produce_item(&item);
down(&empty);
/*
down(&mutex);
/*
enter_item(item);
/*
up(&mutex);
/*
up(&full);
/*
}

/* Generar algo.
Decrementa ranuras vacas.
Entrar en seccin crtica
Inserta nuevo elemento.
Sale seccin crtica.
Incrementa ranuras llenas.

}
Void consumer(void)
{
int item;

}
}

while (TRUE) {
down(&full); /* Decrementa ranuras llenas.
down(&mutex);
/* Entra seccin crtica.
remove_item(&item); /* Saca elemento.
up(&mutex);
/* Sale de seccin crtica.
up(&empty);
/* Incrementa ranuras vacas.
consume_item(item); /* Hacer algo con elemento consumido.
Problema de Filsofos con semforos

Cinco filsofos pasan la vida alternando entre comer y pensar, alrededor de una
mesa redonda. Como son medio torpes, requieren dos tenedores para comer, pero como son
pobres, slo tienen 5 tenedores. Han acordado que cada uno usar slo los tenedores a su
Sistemas Operativos

Pgina 25 /59

izq. y a su derecha. Entonces, de los 5 filsofos, slo 2 pueden comer al mismo tiempo, y no
pueden comer dos que son vecinos.

Una posibilidad: representar cada tenedor con un semforo inicializado en 1 (Semaforo


tenedor[5];), y cada filsofo i hace:
while (TRUE) {
P(Tenedor[i]);
P(Tenedor[i+1 % 5]);
comer();
P(Tenedor[i]);
P(Tenedor[i+1 % 5]);
pensar();
}
Problema: bloqueo mutuo. Soluciones posibles:
Usar solucin asimtrica: uno de los filsofos toma primero el tenedor i+1%5 y despus el i.
Permitir que un filsofo tome sus tenedores slo si ambos estn disponibles (y hacerlo
dentro de una seccin crtica).
Permitir que slo cuatro filsofos se sienten en la mesa.
Estas soluciones evitan bloqueo mutuo, pero tambin es conveniente asegurar que ningn
filsofo muera de hambre. Si un proceso es postergado indefinidamente se dice que sufre de
inanicin o starvation (an cuando no haya comida de por medio).

Sistemas Operativos

Pgina 26 /59

Sistemas de Mensajes
Bsicamente se puede dar de 2 formas:
(1)

COMUNICACION DIRECTA: Cada proceso que enva o recibe, debe nombra


explcitamente al otro proceso en SEND y RECIEVE, teniendo las propiedades:
a. 1 enlace se establece automticamente entre cada par de procesos que
quieren comunicarse.
b. Un enlace es asociado exactamente a 2 procesos.
c. El enlace es bidireccional.
La desventaja de este esquema es que al cambiar el nombre de un proceso,
requiere examinar la definicin de cualquier mensaje, pues las referencias a
nombres antiguos deben ser cambiadas al nuevo nombre.

(2)

COMUNICACION INDIRECTA: Los mensajes son enviados y recibidos desde


apartados postales (MAILBOXES) tambin conocidos como puertos. Cada
apartado tiene un nmero de identificacin nico, siendo las comunicaciones de
la forma: SEND (A, &mensaje) y RECIEVE (A, &mensaje). Se tienen las siguientes
propiedades:
a. Un enlace entre procesos se establece si tienen un apartado compartido.
b. Un enlace puede asociarse con ms de 2 procesos.
c. El enlace puede ser unidireccional o bidireccional.
Concurrencia en apartados

Si es un sistema de apartados, puede darse concurrencia al tener 3 procesos


asociados a 1 mismo apartado. Por ejemplo, al escribir un proceso y los otros 2 leen, a
quien da el mensaje?. Todo depender de:
1. Permitir que un enlace sea para 2 procesos como mximo.
2. Permitir que solo un proceso ejecute RECIEVE en un momento dado. (con semforos).
3. Permitir que el sistema decida arbitrariamente.
La sincronizacin de procesos es muy importante para evitar prdidas. Con varias
computadoras el riesgo es mayor de prdidas y cuando un proceso termina o es cancelado,
el sistema debe notificar la terminacin y tomar en cuenta los mensajes pendientes de
enviar o recibir.
Tipos de apartados
Un apartados puede pertenecer a un (1) proceso o al (2) sistema. Si es del proceso,
el propietario es quien recibe mensajes y el usuario (quien enva mensajes a travs de este
apartado). Cuando el proceso propietario termina, desaparece el apartado.
Los apartados del sistema operativo tienen independencia de cualquier proceso y el
sistema puede crearlos, enviar y recibir mensajes, y destruirlos cuando lo desee.
BUFFERING para mensajes
Las colas de mensajes en un enlace dado pueden ser:
Sistemas Operativos

Pgina 27 /59

(1)

CAPACIDAD 0: El enlace no puede tener mensajes en espera, el enviador tiene


que esperar hasta que el receptor reciba el mensaje. Ambos procesos deben
sincronizarse para que se haga la transferencia del mensaje correctamente.

(2)

CAPACIDAD LIMITADA: La cola tiene capacidad de al menos N mensajes en el


enlace. Si la cola no esta llena el enviador puede colocar su mensaje en cola y
esperar. Si la cola esta llena, el enviador debe esperar hasta que haya espacio.

(3)

CAPACIDAD ILIMITADA: La cola tiene capacidad ilimitada y el enviador nunca tiene


que esperar.
Tipos de Mensajes
1. Tamao fijo
2. Tamao Variable
3. Typed Message (Mensaje con un tipo asociado)

UNIDAD 5: nter bloqueo (DeadLocks)


CASOS DE INTERBLOQUEOS
Cuando tenemos muchos procesos que compiten por recursos finitos, puede darse
una situacin en la que un proceso est bloqueado esperando por un recurso que nunca se
liberar, porque lo posee otro proceso tambin bloqueado.
Ley de principios de siglo, en Kansas: "cuando dos trenes se aproximan a un cruce,
ambos deben detenerse completamente, y ninguno podr continuar hasta que el otro se
haya ido."
CONDICIONES
Para que haya deadlock, deben darse simultneamente las siguientes condiciones:
(1)
(2)
(3)
(4)

Exclusin mutua. Los recursos no son compartidos. Si un proceso est usando


un recurso, otros no pueden hacerlo.
Retencin y espera. Hay procesos que tienen recursos asignados y al mismo
tiempo estn esperando poder adquirir otros recursos.
No expropiacin. Los recursos no pueden ser expropiados a los procesos.
(Ejemplo: impresora).
Espera circular. Existe un conjunto {P0, P1, ..., Pn} de procesos tales que el
proceso Pi est esperando por un recurso retenido por Pi+1 para 0 <= i < n, y Pn
est esperando recurso retenido por P0.

Una forma de modelar estas condiciones es usando un grafo de recursos: crculos


representan procesos, los cuadrados recursos. Una arista desde un recurso a un proceso
indica que el recurso ha sido asignado al proceso. Una arista desde un proceso a un recurso
indica que el proceso ha solicitado el recurso, y est bloqueado esperndolo. Entonces, si
hacemos el grafo con todos lo procesos y todos los recursos del sistema y encontramos un
ciclo, los procesos en el ciclo estn bajo bloqueo mutuo.

Sistemas Operativos

Pgina 28 /59

ESTRATEGIAS PARA RESOLVERLOS


(1) DEL AVESTRUZ (No hacer nada)
Los deadlocks son evidentemente indeseables. Los recursos retenidos por los
procesos bajo bloqueo mutuo no estn disponibles para otros procesos, y los procesos en
deadlock no pueden avanzar. Pero si un deadlock se produce, en promedio, cada diez aos y
en cambio el sistema se cae todos los das por fallas en el hardware o en el sistema
operativo, entonces el problema de los bloqueos mutuos es irrelevante. Muchos sistema
operativo modernos (UNIX entre ellos) no se preocupan de evitar deadlocks (porque es caro
y los procesos deben someterse a ciertas restricciones), pero algunas tendencias hacen que
el tema vaya adquiriendo importancia: a medida que progresa la tecnologa, tiende a haber
ms recursos y ms procesos en un sistema.
(2) Deteccin y recuperacin
Una posibilidad es monitorear cada cierto tiempo el estado del grafo de recursos.
(Cada cunto?) Si se detecta un ciclo, se matan todos los procesos del ciclo (se usa!), o se
van matando procesos del ciclo hasta que no queden ciclos (cul matar primero?). Es un
mtodo drstico, pero mejor que nada.
(3) Prevencin
Una tercera estrategia es imponer restricciones a los procesos de manera de hacer
estructuralmente imposible la ocurrencia de un bloqueo mutuo. La idea es asegurar que no
se d al menos una de las cuatro condiciones necesarias para que haya deadlock.
1. Exclusin mutua.
Hay recursos que son intrnsecamente no compartibles, de modo que no se puede
descartar la exclusin mutua.
2. No expropiacin.
Esta condicin se puede eliminar imponiendo expropiacin. Si un proceso P tiene
recursos y solicita otro que est ocupado, se le pueden expropiar a P los que ya tiene, o bien
expropiarle al otro proceso el recurso que P necesita. Es aplicable a cierta clase de recursos
(cuyo estado se puede almacenar y luego recuperar), pero no a otros como registros de
base de datos o impresoras.
Retencin y espera.
Podemos impedir esta condicin exigiendo que los procesos soliciten de una vez, al
comienzo, todos los recursos que van a necesitar. Si uno o ms recursos no estn
disponibles, el proceso se bloquea hasta que pueda obtenerlos todos. Inconvenientes:
muchos procesos no pueden saber de antemano qu y cuntos recursos necesitarn.
Subutilizacin de recursos, ya que quedan retenidos de principio a fin de la ejecucin.
Alternativa: Hacer que los procesos liberen todos los recursos que tienen antes de
solicitar un nuevo conjunto de recursos. Tambin tiene inconvenientes: por ejemplo,
programa que usa archivo temporal durante toda su ejecucin. Si lo libera entremedio, otro
proceso se lo puede borrar.
(4) Espera circular
Podemos evitar la espera circular si imponemos un orden total a los recursos (o sea,
asignamos a cada recurso R un nmero nico F(R)), y obligamos a los procesos a que
soliciten recursos en orden: un proceso no puede solicitar Q y despus R si F(Q)>F(R). Por
ejemplo:
Sistemas Operativos

Pgina 29 /59

F(CD-ROM)=1
F(impresora)=2
F(plotter)=3
F(Cinta)=4
De esta manera se garantiza que no se generarn ciclos en el grafo de recursos. Una
mejora inmediata es exigir solamente que ningn proceso solicite un recurso cuyo nmero
es inferior a los recursos que ya tiene. Pero tampoco es la panacea. En general, el nmero
potencial de recursos es tan alto que es difcil dar con tal funcin F para ordenarlos.
(5) Evitacin
En vez de restringir la forma u orden en que los procesos deben solicitar recursos,
antes de conceder un recurso, chequeamos que sea seguro.
Hay diversos algoritmos, que varan en el tipo de informacin que requieren a priori
de cada proceso. En el que vamos a ver, necesitamos que cada proceso declare la cantidad
mxima de recursos de cada clase que va a necesitar: Por ejemplo: 2 unidades de cinta, una
impresora lser y 200 bloques de disco, como mximo. (El sistema puede tener varias
unidades de cinta y varias impresoras lser idnticas).

Sistemas Operativos

Pgina 30 /59

(6) Estado seguro


Un estado de asignacin de recursos es el nmero de recursos disponibles y
asignados, y el mximo declarado por cada proceso. Ejemplo: Sistema con 12 unidades de
cinta y 3 procesos.
Mximo

Actual

Diferencia

Disponible

10

Un estado seguro es un estado en el cual el sistema puede asignar recursos a los


procesos (hasta su mximo) en alguna secuencia, y evitar deadlock. Ms formalmente, un
estado es seguro slo si existe una secuencia segura, es decir, una secuencia de procesos
<P1, P2,...,Pn > donde, para cada Pi, los recursos que Pi an puede solicitar pueden
satisfacerse con los recursos disponibles y los retenidos por Pj con j<i. Si los recursos que Pi
necesita no estn disponibles, Pi puede esperar hasta que los Pj terminen. Si no existe tal
secuencia, se dice que el sistema est en un estado inseguro.
El estado del ejemplo es seguro, ya que la secuencia <Q,P,R > satisface la condicin
de seguridad. Si en ese estado se le concede una unidad ms a R, entonces pasamos a un
estado inseguro. Un estado inseguro no necesariamente implica que se va a producir
deadlock, pero se corre el riesgo. En cambio, mientras el sistema est en un estado seguro,
no puede haber deadlock. La clave entonces es no pasar a un estado inseguro; en el
ejemplo, no se le puede conceder otra unidad a R; si la solicita, hay que suspenderlo,
aunque el recurso est disponible. Esto significa que habr una subutilizacin de los
recursos que no existira si no se hiciera nada para manejar los bloqueos mutuos.
(7) Algoritmo del banquero
Un ejemplo sencillo:
Tengo 12 impresoras.
P1
P2
P3

Prstamo actual
5
3
2
-------------10 utilizadas

Necesidad Mxima
10
5
6

Tengo 2 libres.
A P2 le faltan 2 -> Finalizo P2.
Tengo 5 libres.
A P1 le faltan 5 -> Finalizo P1.
Tengo 10 libres.
A P3 le faltan 4 -> Finalizo P3.
Sistematizando y generalizando para mltiples recursos, obtenemos el algoritmo del
banquero (se supone que los procesos son clientes que piden crdito, y los recursos
corresponden al dinero del que dispone el banco). La idea es bsicamente la misma, slo
que debemos manejar vectores en vez de escalares. Por ejemplo, para 5 procesos y 3
recursos, Mximo, Actual y Diferencia, que antes eran columnas, ahora son matrices de
5x3; y Disponible, que antes era un escalar, ahora es un vector de 3 elementos.

Sistemas Operativos

Pgina 31 /59

Mximo

Actual

Diferencia

Disponible

P0

P1

P2

P3

P4

Para chequear si un estado, como el anterior, es seguro:


Buscar un proceso (cualquiera) cuyos recursos mximos puedan satisfacerse con los
disponibles (ms los que ya tiene); o sea, un proceso tal que Diferencia <= Disponible,
componente a componente. Si no existe, el estado es inseguro.
Si existe, suponer que el proceso termina y libera todos sus recursos, agregndolos a
los disponibles.
Repetir 1 y 2 hasta haber pasado por todos los procesos, en cuyo caso el estado es
seguro, o hasta determinar que el estado es inseguro.
En el ejemplo, podemos escoger primero P1 o P3 (da igual); escojamos P1. Al terminar,
los recursos disponibles quedan en <4,5,4 >. Ahora podemos escoger P3 o P4, y as, hasta
determinar que el estado es seguro.
Supongamos ahora que, en ese estado, P1 pide 1 instancia adicional de A y 2 de C.
Los recursos estn disponibles, pero antes de concedrselos a P1, debemos chequear si el
nuevo estado sera seguro o no. Dicho estado sera:
Mximo

Actual

Diferencia

Disponible

P0

P1

P2

P3

P4

y tambin es seguro, ya que la secuencia <P1, P3, P4, P0, P2 > es segura. En
consecuencia, podemos otorgar los recursos solicitados por P1.
Si en ese nuevo estado, P4 pide ahora 3 unidades de A y 3 de B, entonces P4 debe
suspenderse porque no hay suficientes recursos para satisfacer el pedido. Si P3 pide 2
unidades adicionales de B, simplemente abortamos el proceso, pues no cumplira con el
mximo declarado. Y si P0 pide 2 unidades de B, tambin debe suspenderse, pero en este
caso porque si se le otorgan, el estado pasara a ser inseguro. Cada vez que algn proceso
libera recursos, debera chequearse cules de las solicitudes pendientes pueden atenderse.
Este algoritmo fue publicado en 1965 y ha sido objeto de innumerables estudios. En
teora funciona muy bien, pero en la prctica, rara vez se usa, puesto que es muy difcil para
los procesos saber a priori sus necesidades mximas de cada recurso.
En resumen, los algoritmos de prevencin son extremadamente restrictivos y los de
evitacin requieren informacin que por lo general no est disponible. Por eso, los mtodos
de deteccin y recuperacin no son tan poco usuales ni descabellados. Tambin se usan
mtodos adecuados a situaciones especficas, pero no existe ningn mtodo mentholatum
(que sirva para todo).

Sistemas Operativos

Pgina 32 /59

UNIDAD 6: Administracin de la memoria


La memoria es un recurso escaso, y para aprovecharla bien hay que administrarla
bien. A pesar de que la memoria es ms barata cada da, los requerimientos de
almacenamiento crecen en proporcin similar. Por otra parte, la memoria ms rpida es
obviamente ms cara, por lo que la mayora de los computadores tiene una jerarqua de
memoria. Por ejemplo, en un Pentium tpico:
Cach de nivel 1: 8 KB empaquetados dentro del chip; por lo mismo, la velocidad de acceso
es de unos pocos nanosegundos.
Cach de nivel 2: 256 a 512 KB, 12-20 ns, U$80/MB
Memoria RAM: 8 a 32 MB, 70ns, U$10/MB
Disco duro. Para almacenamiento estable, y tambin para extender la RAM de manera
virtual. 1GB, 10ms, U$0.3/MB.
Cinta. 1 a 40 GB. U$0.02/MB.
Monoprogramacin
La forma ms simple de administrar memoria es ejecutando slo un programa a la
vez, compartiendo la memoria con el sistema operativo. Por ejemplo, MS-DOS, en
direcciones crecientes de memoria: Sistema operativo; programa de usuario; manejadores
de dispositivos (en ROM). Cuando usuario digita un comando, el sistema operativo carga el
programa correspondiente en la memoria, y lo ejecuta. Cuando el programa termina, el
sistema operativo solicita un nuevo comando y carga el nuevo programa en la memoria,
sobre escribiendo el anterior.

Sistemas Operativos

Pgina 33 /59

Multiprogramacin Contigua
Particiones estticas
Ya hemos hablado bastante de las ventajas de la multiprogramacin, para aumentar
la utilizacin de la CPU. La forma ms simple de obtener multiprogramacin es dividiendo la
memoria en n particiones fijas, de tamaos no necesariamente iguales, como lo haca el IBM
360 (dcada del 60; hoy es raro encontrarlo).
Puede haber una cola de trabajos por particin, o bien una sola cola general. En el
primer caso, cuando llega un trabajo, se pone en la cola de la particin ms pequea en la
que todava quepa el trabajo. Si llegan muchos trabajos pequeos podra pasar que,
mientras las colas para las particiones chicas estn llenas, las particiones grandes quedan
sin uso. En el caso de una sola cola, cada vez que un programa termina y se libera una
particin, se escoge un trabajo de la cola general. Cmo escoger?
(1)
(2)

FIFO: podra quedar un trabajo pequeo en una particin grande,


desaprovechando memoria.
EL MAS GRANDE QUE QUEPA: trabajos pequeos son postergados, lo cual
no es buena poltica de programacin, si suponemos que los trabajos ms
chicos son tambin los ms cortos (recordar SJN).
Reubicacin y proteccin

Bajo multiprogramacin, si un mismo programa se ejecuta varias veces, no siempre


va a quedar en la misma particin. Por ejemplo, si el programa, ejecutando en la particin 1
(que comienza en la direccin 100K) ejecuta un salto a la posicin 100K+100, entonces, si el
mismo programa ejecuta en la particin 3 (que comienza en 400K), debe ejecutar un salto a
la posicin 400K+100, porque si salta a la 100K+100 va a caer en la memoria que
corresponde a otro proceso. Este es el problema de la reubicacin, y hay varias formas de
resolverlo:
(1)

TIEMPO DE COMPILACIN: Cuando al compilar se conoce la direccin absoluta, el


compilador escribe la imagen exacta del cdigo que se cargar en la memoria,
por ejemplo:
100:
102:
104:
106:

LOAD $210, R1
ADD R1, -1
CMP R1, 0
JNE 102

En este caso el cdigo debe cargarse a partir de la direccin 100. Los


programas .COM de MS-DOS son de este estilo.

Sistemas Operativos

Pgina 34 /59

(2)

(3)

TIEMPO DE CARGA: Si al compilar no se conocen todava las direcciones


absolutas, hay que generar cdigo reubicable. El cargador o loader, es
responsable de determinar las direcciones absolutas al momento de poner el
programa en memoria. Para eso, el compilador genera cdigo como para ejecutar
a partir de la direccin 0, y agrega un encabezado con informacin acerca de
cules de las posiciones corresponden a direcciones que deben ajustarse segn
donde se cargue el programa (.EXE de MS-DOS?).
TIEMPO DE EJECUCIN: Si el sistema operativo usa swapping (pasar procesos a
disco para hacer espacio en la memoria), puede que un proceso sea cambiado de
posicin durante su ejecucin. En este caso se usa hardware especial.

Pero adems de la reubicacin tenemos el problema de la proteccin: queremos que un


programa ejecutando en una particin no pueda leer ni escribir la memoria que corresponde
a otra particin. Podemos entonces matar dos pjaros de un tiro con una variante de los
registro base y lmite. Cuando se carga un programa en una particin, se hace apuntar
base al comienzo de la particin, y lmite se fija como la longitud de la particin. Cada vez
que la CPU quiere accesar la direccin d, el hardware se encarga de que en realidad se
accese la direccin fsica base+d (y, por supuesto, adems se chequea que d<lmite).
Decimos que d es la direccin lgica o virtual, y base+d la direccin fsica. El programa
de usuario slo ve direcciones lgicas; es la unidad de administracin de memoria (MMU)
quien se encarga de traducirlas transparentemente a direcciones fsicas. La gracia es que el
compilador puede generar cdigo absoluto, pensando que el programa se va a cargar
siempre en la posicin 0, y en realidad el binding se hace en tiempo de ejecucin.
Particiones dinmicas con Intercambio (Swapping)
En un sistema de procesamiento por lotes, organizar la memoria en particiones fijas
es simple y efectivo: cada trabajo se carga en la memoria cuando le toque su turno, y se
queda en memoria hasta que termine. Si hay suficientes particiones para mantener a la CPU
siempre ocupada, no habra razones para usar nada diferente.
Pero en un sistema interactivo, es posible que la memoria no alcance para mantener
a todos los procesos. En este caso se usa el disco como apoyo para extender la capacidad
de la memoria: algunos procesos se pasan temporalmente a disco (recordar planificador a
largo plazo).
El sistema operativo mantiene una tabla que indica qu partes de la memoria estn
desocupadas, y cules en uso. Podemos pensar en que las partes desocupadas son hoyos en
la memoria; inicialmente, toda la memoria es un solo gran hoyo Cuando se crea un proceso
o se trae uno del disco, se busca un hoyo capaz de contenerlo, y se pone el proceso all.
Las particiones ya no son fijas, si no que van cambiando dinmicamente, tanto
cantidad como en ubicacin y tamao. Adems, cuando un proceso es pasado a disco,
hay ninguna garanta de que vuelva a quedar en la misma posicin de memoria al traerlo
vuelta, de manera que es imprescindible el apoyo del hardware para hacer binding
tiempo de ejecucin.

en
no
de
en

Hasta ahora hemos supuesto que los procesos son estticos en tamao, pero es ms
realista pensar que pueden crecer, por ejemplo va asignacin dinmica de memoria. Si
es as, conviene reservar un poco ms de memoria que la que estrictamente necesita al
momento de ponerlo en memoria. Al hacer swapping, no es necesario guardar todo el
espacio que tiene reservado, sino slo el que est usando. Qu pasa si proceso quiere
crecer ms all del espacio que se le haba reservado? Si hay un hoyo contiguo se puede
usar. Si no, se puede pasar el proceso a un hoyo ms grande. Si no hay ninguno, se pasa a
disco hasta que haya. Tambin se puede, simplemente, matar al proceso.

Sistemas Operativos

Pgina 35 /59

Otro punto que hay que tener en cuenta al usar swappping, es el I/O que pudiera
estar pendiente. Cuando se hace, por ejemplo, input, se especifica una direccin de
memoria donde se va a poner lo que se lea desde el dispositivo. Supongamos que proceso A
trata de leer del disco hacia la direccin d, pero el dispositivo est ocupado: su solicitud, por
lo tanto, es encolada. Entretanto, el proceso A es intercambiado a disco, y la operacin se
completa cuando A no est en memoria. En esas circunstancias, lo ledo se escribe en la
direccin d, que ahora corresponde a otro proceso. Para evitar tal desastre: no pasar a disco
procesos con I/O pendiente, o bien hacer siempre I/O desde y hacia buffers del sistema
operativo.
Windows 3.x usa swapping, pero un proceso pasado a disco slo vuelve a la memoria
si el usuario activa su ventana. Windows NT usa un esquema ms sofisticado. Unix comienza
a usar swapping cuando se supera un cierto lmite de utilizacin de memoria.
Administracin de Memoria dinmica con mapas de BITS
El sistema operativo debe saber dnde estn los hoyos. Podemos dividir la memoria
en pequeas unidades, y registrar en un mapa de bits (con tantos bits como unidades haya)
las unidades ocupadas con un 1 y las desocupadas con un 0. Las unidades pueden ser de
unas pocas palabras cada una, hasta de un par de KB. A mayor tamao de las unidades,
menor espacio ocupa el mapa de bits, pero puede haber mayor fragmentacin interna.
Desventaja: para encontrar hoyo de n unidades hay que recorrer el mapa hasta encontrar n
ceros seguidos (puede ser caro).
Administracin de Memoria dinmica con lista ligada
Otra forma es con una lista ligada de segmentos: estado (ocupado o en uso),
direccin (de inicio), tamao. Cuando un proceso termina o se pasa a disco, si quedan dos
hoyos juntos, se funden en un solo segmento. Si la lista se mantiene ordenada por direccin,
podemos usar uno de los siguientes algoritmos para escoger un hoyo donde poner un nuevo
proceso (cuyo tamao, obviamente, debe conocerse).
(1)
(2)
(3)

FIRST-FIT: Asignar el primer hoyo que sea suficientemente grande como para
contener al proceso.
BEST-FIT: Asignar el menor hoyo en el que el proceso quepa.
WORST-FIT: Asignar el mayor hoyo.

Cada vez que se asigna un hoyo a un proceso, a menos que quepa exactamente, se
convierte en un segmento asignado y un hoyo ms pequeo. Best-fit deja el hoyo ms
pequeo de todos. La idea de worst-fit es la de dejar hoyos grandes. Simulaciones han
mostrado que first-fit y best-fit son mejores en trminos de utilizacin de la memoria. First-fit
es ms rpido (no hay que revisar toda la lista). Se puede pensar en otras variantes (por
ejemplo, mantener la lista ordenada por tamao, o varias listas, cada una con un rango de
tamaos, etc).
Fragmentacin externa e interna
Los mtodos anteriores de administracin de memoria sufren el problema de la
fragmentacin externa: puede que haya suficiente espacio libre como para agregar un
proceso a la memoria, pero no es contiguo. La fragmentacin puede ser un problema severo.
En algunos sistemas usar first-fit puede ser mejor en trminos de fragmentacin; en otros
puede ser mejor best-fit, pero el problema existe igual. Por ejemplo para first-fit, las
estadsticas hablan de un tercio de la memoria inutilizable por estar fragmentada. Una forma
de resolver este problema es usando compactacin de la memoria: mover los procesos de
manera que queden contiguos. Generalmente no se hace por su alto costo. En una mquina
con 32MB que copia 32 bytes por microsegundo, podra tomar hasta un segundo de CPU. Si
se usa, no es trivial decidir la mejor forma de hacerlo. Si movemos ciegamente los procesos
hacia un extremo de la memoria, podemos estar moviendo de ms, puesto que puede ser
ms barato dejar el hoyo en ese extremo (y no los procesos), o bien dejar el hoyo al medio.
Sistemas Operativos

Pgina 36 /59

Otra posibilidad es desfragmentar slo hasta donde es razonable: si ya recuperamos 500K,


pero nos quedan 100, no tiene sentido seguir mientras no hay ningn proceso que quepa en
100k.
Por otra parte, supongamos que tenemos un segmento desocupado de 1000 bytes, y
queremos poner un proceso de 998 bytes de tamao, lo que dejara un hoyo de 2 bytes.
Difcilmente otro proceso podr aprovechar esos dos bytes: es ms caro mantener un
segmento en la lista que "regalarle" esos dos bytes al proceso. La fragmentacin interna se
produce cuando un proceso tiene asignada ms memoria de la que necesita.
Multiprogramacin no contigua
Memoria dinmica con Paginacin
Hace tiempo que alguien se dio cuenta de que esto de que los procesos tengan que
usar un espacio contiguo de la memoria era un impedimento serio para poder optimizar el
aprovechamiento de la memoria. Idea: que las direcciones lgicas sean contiguas, pero que
no necesariamente correspondan a direcciones fsicas contiguas. O sea, dividir la memoria
fsica en bloques de tamao fijo, llamados marcos o frames, y dividir la memoria lgica (la
que los procesos ven) en bloques del mismo tamao llamados pginas.

Sistemas Operativos

Pgina 37 /59

Se usa una tabla de pginas para saber en que marco se encuentra cada pgina.
Obviamente, necesitamos el apoyo del hardware. Cada vez que la CPU intenta accesar una
direccin, la direccin se divide en nmero de pgina p y desplazamiento u offset d. El
nmero de pgina se transforma en el frame correspondiente, antes de accesar fsicamente
la memoria.

Sistemas Operativos

Pgina 38 /59

El tamao de las pginas es una potencia de 2, tpicamente entre 0.5 y 8K. Si las
direcciones son de m bits y el tamao de pgina es 2n, entonces los primeros m-n bits de
cada direccin forman p, y los restantes n forman d.
Este esquema es parecido a tener varios pares de registros base y lmite, uno para
cada marco (o sea, por cierto, tenemos binding en tiempo de ejecucin).
Cada proceso tiene su propia tabla, es decir, la tabla de pginas forma parte del
contexto: cuando la CPU se concede a otro proceso, hay que cambiar la tabla de pginas a
la del nuevo proceso. La paginacin en general encarece los cambios de contexto. La
seguridad sale gratis, ya que cada proceso slo puede accesar las pginas que estn en su
tabla de pginas.
Fragmentacin? Slo interna, y de media pgina por proceso, en promedio. Esto
sugerira que conviene usar pginas chicas, pero el problema es que aumenta el sobrecosto
de administrar las pginas (entre otras cosas, aumenta el tamao de la tabla de pginas).
En general, el tamao de pgina ha ido aumentando con el tamao de la memoria fsica de
una mquina tpica.
Tablas de pginas
Si las direcciones son de m bits y el tamao de pgina es 2n, la tabla de pginas
puede llegar a contener 2m-n entradas. En el PDP-11 m=16 y m=13; una relacin poco usual,
pero basta con 8 entradas para la tabla de pginas, lo que permite tener 8 registros de CPU
dedicados especialmente a tal propsito. En una CPU moderna, m=32 (y ahora, incluso, 64),
y n=12 o 13, lo que significa que se requeriran cientos de miles de entradas: ya no es
posible tener la tabla en registros.
Lo que podemos hacer es manejar la tabla de pginas de cada proceso
completamente en memoria, y usar slo un registro que apunte a la ubicacin de la tabla.
Para cambiar de un proceso a otro, slo cambiamos ese registro. Ventaja: agregamos slo un
registro al cambio de contexto. Desventaja: costo de cada acceso a memoria se duplica,
porque primero hay que accesar la tabla (indexada por el nmero de pgina). O sea, si sin
paginacin nos costaba 70ns cada acceso, ahora nos cuesta 140!
Solucin tpica (intermedia): usar un pequeo y rpido cach especial de memoria
asociativa, llamado translation look-aside buffer (TLB). La memoria asociativa guarda
pares (clave, valor), y cuando se le presenta la clave, busca simultneamente en todos sus
registros, y retorna, en pocos nanosegundos, el valor correspondiente. Obviamente, la
memoria asociativa es cara; por eso, los TLBs rara vez contienen ms de 64 registros. El TLB
forma parte de la MMU, y contiene los pares (pgina, marco) de las pginas ms
recientemente accesadas. Cuando la CPU genera una direccin lgica a la pgina p, la MMU
busca una entrada (p,f) en el TLB. Si est, se usa marco f, sin acudir a la memoria. Slo si no
hay una entrada para p la MMU debe accesar la tabla de pginas en memoria (e incorporar
una entrada para p en el TLB, posiblemente eliminando otra).
La gracia es que, por pequeo que sea el TLB, la probabilidad de que la pgina est
en el TLB (tasa de aciertos) es alta, debido a que los programas suelen hacer muchas
referencias a unas pocas pginas (por ejemplo, copiar un arreglo). Si la tasa de aciertos es
del 90% y un acceso al TLB cuesta 10ns, entonces, en promedio, cada acceso a memoria
costar 87ns (por qu?). o sea, slo un 24% ms que un acceso sin paginacin. Una Intel
80486 tiene 32 entradas en el TLB; Intel asegura una tasa de aciertos del 98%.
En cada cambio de contexto, hay que limpiar el TLB, lo que puede ser barato, pero
hay que considerar un costo indirecto: si los cambios de contexto son muy frecuentes, la
tasa de aciertos se puede reducir (por qu?).
Otras ventaja de paginacin: tambin se facilita almacenamiento de procesos en el
disco; permite que procesos compartan pginas. Por ejemplo, varios procesos ejecutando el
mismo cdigo (que tiene que ser reentrante): las primeras pginas lgicas apuntan a las
mismas pginas fsicas, que contienen el cdigo. El resto, apunta a datos locales, propios de
cada ejecucin.
Sistemas Operativos

Pgina 39 /59

Memoria dinmica con Segmentacin


Cuando se usa paginacin, el sistema divide la memoria para poder administrarla, no
para facilitarle la vida al programador. Lo que ocurre es que la vista lgica que el
programador tiene de la memoria no tiene nada que ver con la vista fsica que el sistema
tiene de ella. El sistema ve un slo gran arreglo dividido en pginas, pero cuando uno
programa, uno piensa en trminos de un conjunto de subrutinas y estructuras de datos, a
las cuales nos referimos por su nombre: la funcin coseno, el stack, la tabla de smbolos, sin
importarnos su ubicacin en memoria, y si acaso una est antes o despus que la otra.
La segmentacin es una forma de administrar la memoria que permite que el usuario
vea la memoria de esa manera, es decir, como una coleccin de segmentos, cada uno de los
cuales tiene un nombre y un tamao (que, adems, puede variar dinmicamente). Las
direcciones lgicas se especifican como un par (segmento, desplazamiento).

IMPLEMENTACION:
Similar a paginacin: en vez de tabla de pginas, tenemos tabla de segmentos; para
cada segmento, necesitamos saber su tamao y dnde comienza (base). Una direccin
lgica (s,d), se traduce a base(s)+d. Si d es mayor que el tamao del segmento, entonces
ERROR.

Las ventajas son:

Al usuario se le simplifica el manejo de estructuras de datos de tamao dinmico.


Se facilita el que los procesos compartan memoria.
Los segmentos pueden estar protegidos segn la semntica de su contenido. Por
ejemplo, un segmento que contiene cdigo, puede especificarse como slo para
ejecucin (y nadie puede copiarlo ni sobreescribirlo); un arreglo puede especificarse
como read/write but not execute. Esto facilita enormemente la deteccin de errores
en el cdigo.
Libreras compartidas de enlace dinmico (DLLs).

Sistemas Operativos

Pgina 40 /59

Pero la memoria sigue siendo, fsicamente, un slo arreglo de bytes, que debe contener
los segmentos de todos los procesos. A medida que se van creando y eliminando procesos,
se va a ir produciendo, inevitablemente fragmentacin externa.
Si consideramos cada proceso como un slo gran segmento, tenemos el mismo caso que
el de las particiones variables (ver Intercambio). Como cada proceso tiene varios segmentos,
puede que el problema de la particin externa se reduzca, pues ya no necesitamos espacio
contiguo para todo el proceso, sino que slo para cada segmento. Para eliminar
completamente el problema de la fragmentacin interna, se puede usar una combinacin de
segmentacin y paginacin, en la que los segmentos se paginan.

Sistemas Operativos

Pgina 41 /59

Memoria Dinmica con Segmentacin paginada en los 386


En una 80386 puede haber hasta 8K segmentos privados y 8K segmentos globales,
compartidos con todos los otros procesos. Existe una tabla de descripcin local (LDT) y una
tabla de descripcin global (GDT) con la informacin de cada grupo de segmentos. Cada
entrada en esas tablas tiene 8 bytes con informacin detallada del segmento, incluyendo su
tamao y direccin. Una direccin lgica es un par (selector, desplazamiento), donde el
desplazamiento es de 32 bits y el selector de 16, dividido en: 13 para el segmento, 1 para
global/local, y 2 para manejar la proteccin. La CPU tiene un cach interno para 6
segmentos.

En realidad, la tabla de pginas es de dos niveles...

Sistemas Operativos

Pgina 42 /59

UNIDAD 7: Memoria Virtual


Definicin
Qu podemos hacer si un programa es demasiado grande para caber en la memoria
disponible? Una posibilidad es usar superposiciones (overlays), como en MS-DOS: dividimos
el programa en trozos independientes, y los vamos cargando de a uno, a medida que se
necesiten. Por ejemplo, compilador de dos pasadas: Cargamos primero el cdigo de la
primera pasada, la ejecutamos, y despus la descartamos para cargar el cdigo de la
segunda pasada. Las rutinas comunes y estructuras de datos compartidas entre las dos
pasadas las mantenemos en memoria permanentemente. El problema es que agregamos
complejidad a la solucin. No siempre es fcil dividir un programa grande en unidades
independientes, que no interactan entre s.
Mucho mejor sera poder extender la memoria de manera virtual, es decir, hacer que
el proceso tenga la ilusin de que la memoria es mucho ms grande que la memoria fsica (o
que el trozo de memoria fsica que le corresponde, si tenemos multiprogramacin). El
sistema operativo se encarga de mantener en memoria fsica los trozos (pginas) que el
proceso est usando, y el resto en disco. Ya que el disco es barato, podemos tener espacios
de direccionamiento enormes.
Administracin de la Memoria
Paginacin por demanda
Cmo se implementa memoria virtual? Con un poco de ayuda del hardware.
Agregamos un bit a la tabla de pginas, que indica si la pgina en cuestin es vlida o
invlida. Vlida significa que est en memoria (en el marco que indica la tabla), e invlida
significa que no est. El acceso a las pginas vlidas funciona igual que antes, pero si la CPU
intenta accesar una pgina invlida, se produce una falta de pgina que genera un trap al
sistema operativo, quien debe encargarse de ir a buscar esa pgina al disco, ponerla en la
memoria, y reanudar el proceso. O sea, en detalle, el sistema operativo debe:
Bloquear al proceso.
Ubicar un marco libre. Si no hay, tiene que liberar uno (ya veremos cmo).
Ordenar al controlador de disco que lea la pgina (de alguna manera, el sistema
operativo debe saber dnde la guard). Mientras, otros procesos pueden ejecutar.
Cuando se completa la lectura, modificar la tabla de pginas para reflejar que ahora
la pgina si es vlida.
Pasar el proceso a la cola READY. Cuando le toque ejecutar, no notar ninguna
diferencia entre esta falta de pgina y una simple expropiacin de la CPU (en ambos
casos, el efecto neto es que est un rato sin ejecutar).
Qu hemos ganado?
Ya no necesitamos overlays para ejecutar programas grandes.
Slo cargamos en memoria las partes del programa que se usan, reduciendo costos
de lectura desde disco. Por ejemplo, muchos programas tienen cdigo para manejar
situaciones excepcionales y que, por lo mismo, rara vez se ejecuta.
Ahora que no es necesario tener el programa completo en memoria para poder
ejecutarlo, podemos aumentar el nivel de multiprogramacin.
Tablas de pginas
Ahora que la memoria lgica puede ser mucho ms grande que la fsica, se acenta
el problema del tamao de la tabla de pginas. Con direcciones de 32 bits, la memoria
virtual puede alcanzar los 4GB (lo cual ya no es irreal). Con pginas de 4 KB, necesitaramos
hasta 1M entradas. Si cada entrada usa 32 bits, entonces la tabla podra pesar 4 MB.
Adems, cada proceso tiene su tabla, y esta tabla debe estar siempre en memoria fsica (al
menos mientras ejecuta por qu?). O sea, tenemos un problema serio.
Sistemas Operativos

Pgina 43 /59

Solucin: usar tablas de varios niveles. El 386 usa dos niveles: una direccin lgica
de 32 bits la dividimos en (p1, p2, d), de 10, 10 y 12 bits respectivamente. Usamos p1 como
ndice a una tabla de tablas (o metatabla) o tabla de primer nivel, que contiene 210=1024
entradas de 32 bits (o sea, ocupa justo una pgina). La entrada correspondiente a p1 en esta
tabla indica el frame donde se encuentra otra tabla (de segundo nivel), donde hay que
buscar indexando por p2, el frame donde est la pgina que finalmente se necesita.
La clave es que slo estamos obligados a mantener en memoria la tabla de primer
nivel. Las otras (que tambin ocupan exactamente una pgina), se tratan como pginas
ordinarias, es decir, pueden estar en disco. As, al utilizar la propia memoria virtual para
estas pginas, se mantienen en memoria fsica slo las ms usadas. Claro que estamos
agregando un acceso ms a la memoria para convertir cada direccin lgica a una fsica,
pero con un TLB con tasa de aciertos alta el impacto es mnimo.
Ahora, si las direcciones son de 64 bits, tendramos que usar ms niveles. Otra
posibilidad sera usar tablas de pgina invertidas, en las que, en vez de haber una entrada
por pgina virtual, hay una entrada por marco en la memoria fsica. As, si tenemos 32 MB
de memoria real y pginas de 4 KB, una tabla invertida necesita slo 8K entradas
(independientemente de si las direcciones son de 32 o 64 bits). Cada entrada dice a qu
pgina virtual de qu proceso corresponde el marco. Cuando proceso P accesa direccin
lgica l, hay que buscar un par (P,l) en esta tabla. La posicin de este par es el marco que
hay que accesar. Problema obvio: la bsqueda en una tabla de 8192 entradas puede costar
muchos accesos a memoria. Soluciones: otra vez el TLB evita hacer la bsqueda la mayor
parte de las veces, y se puede implementar la tabla con hashing.
Reemplazo de pginas
Hasta ahora hemos soslayado un tema fundamental. Cuando un proceso accesa una
pgina invlida, hay que ir a buscar su contenido a disco y ponerlo en algn marco. El punto
es en qu marco, si no hay ninguno libre? Una posibilidad en tal caso es pasar a disco un
proceso, con lo cual los marcos que ocupaba quedan libres. Vamos a analizar este caso ms
adelante.
Lo usual es usar algn algoritmo de reemplazo de pginas para seleccionar un marco
vctima (por ejemplo, al azar). Para poder usar ese marco, primero hay que sacar la pgina
que originalmente contena, o sea, pasarla a disco. Sin embargo, si la pgina original no
haba sido modificada, la copia en disco es idntica, as que se puede descartar esta
operacin de escritura. El sistema operativo puede saber si una pgina ha sido modificada
examinando un bit asociado a la pgina (el dirty bit) que el hardware se encarga de poner
en 1 cada vez que se escribe en ella.
O sea, cada falta de pgina produce una o dos transferencias de pginas entre la
memoria y el disco. Moraleja: tratar de reducir las faltas al mnimo. Por lo tanto, para
comparar algoritmos de reemplazo hay que contar cuntas faltas se producen dadas
algunas secuencias de acceso a la memoria (cules?).
Vamos a comenzar por analizar formas de elegir un marco de un conjunto. Despus
vamos a analizar si ese conjunto debe contener todos los marcos, o slo los que le
corresponden al proceso.
Algoritmos para el reemplazo de pginas
Algoritmo ptimo
El algoritmo que evidentemente minimiza el nmero de faltas consiste en escoger la
pgina para la cual el lapso de tiempo hasta la prxima referencia es el mayor.
Si tenemos tres marcos y las pginas son accesadas en la secuencia 7, 0, 1, 2, 0, 3,
0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1, tendramos 9 faltas.
Lo "nico" malo es que es imposible de implementar, pues para escoger una pgina
hay que conocer cules sern los accesos futuros. En todo caso, sirve como referencia.
Sistemas Operativos

Pgina 44 /59

FIFO
Consiste en reemplazar la pgina ms vieja (la que lleva ms tiempo en memoria
fsica). Es simple, pero no es bueno, ya que la pgina ms antigua no necesariamente es la
menos usada. En el ejemplo tendramos 15 faltas. Adems sufre de la Anomala de Belady:
las faltas pueden aumentar si aumentamos el nmero de marcos disponibles (probar
1,2,3,4,1,2,5,1,2,3,4,5 con 3 y 4 marcos).
La menos recientemente usada (LRU)
La poltica ptima usa conocimiento del futuro. Se puede aproximar este
conocimiento usando el pasado reciente para predecir el futuro. Se selecciona la pgina
menos recientemente usada con la esperanza de que, si no ha sido accesada en el pasado
reciente, no lo ser en el futuro cercano. Con el ejemplo LRU producira 12 faltas. Es una
buena poltica, pues los procesos presentan localidad temporal de referencia.
El problema es que la implementacin requiere un apoyo del hardware que es caro
de implementar. Por ejemplo, con un contador y un campo adicional (de unos 64 bits) para
cada pgina. Cada vez que se accesa una pgina, se incrementa el contador y se guarda en
el campo de la pgina accesada. As la pgina menos recientemente usada es aquella con el
menor valor en su campo. Hay otras posibilidades, pero todas caras, por lo que LRU en
general no se usa; ms bien se usan aproximaciones ms baratas.
Fondos de marcos
Independientemente del algoritmo de reemplazo usado, se puede mantener un pool
o fondo de marcos libres. Ante una falta de pgina, se escoge una vctima como siempre,
pero la pgina faltante se pone en un marco del fondo si es que la vctima tiene el bit de
modificacin encendido. La vctima se puede escribir a disco y pasar al fondo despus de
reanudar el proceso, con lo que se reduce el tiempo de espera.
Adems, si se produce una falta sobre una pgina que todava est en el pool,
entonces no es necesario ir a buscarla al disco. Las primeras partidas de la CPU VAX no
mantenan correctamente el bit de referencia, de manera que el sistema operativo VMS
usaba FIFO; pero gracias a un fondo de pginas se mejoraba el rendimiento.
Tambin se pueden aprovechar los momentos en que el disco est libre para escribir
las pginas sucias (qu se gana? por cules pginas conviene comenzar?).
Hiperpaginacin o thrashing
El conjunto de pginas que un proceso est usando se denomina el conjunto de
trabajo.
Supongamos que un proceso est usando 4 pginas en forma intensiva, (por ejemplo,
1,2,3,4,1,2,3,4,1,2,3,4...). Si las 4 pginas que conforman su conjunto de trabajo estn en
memoria, entonces el proceso ejecutar fluidamente. Pero si slo dispone de 3 marcos,
cualquiera sea el algoritmo de reemplazo, slo alcanzar a ejecutar unas pocas
instrucciones cada vez, antes de producir una falta de pgina, o sea, hace Hiperpaginacin,
y como consecuencia el proceso andar un milln de veces ms lento que con cuatro
marcos!
Asignacin de marcos
Cuntos marcos le asignamos a cada proceso? Debemos considerar que:
No podemos asignar ms marcos que los que hay.
Pasado un lmite, si asignamos ms marcos a un proceso no vamos a reducir
significativamente el nmero de faltas de pginas (ejemplo del compilador de dos
pasadas).
Si m es el mximo nmero de marcos que requiere una instruccin de la mquina, no
podemos asignar menos que m. Ejemplo: ADD A,B podra requerir 6 marcos.
Si asignamos pocos, nos caben ms procesos en memoria, pero corremos el riesgo
de que los procesos pasen a rgimen de Hiperpaginacin.

Sistemas Operativos

Pgina 45 /59

Si hay N procesos y M marcos, podemos asignar M/P marcos a cada uno, pero los
procesos chicos podran quedar con ms marcos que los que necesitan. Mejor sera hacer
una asignacin proporcional al tamao de los procesos. En cualquiera de los dos casos, hay
que considerar la entrada y salida de procesos al sistema. Adems, para mantener la
proporcionalidad, el reemplazo de pginas debe ser local, es decir, si un proceso produce
una falta de pgina, se escoge una vctima dentro de sus propios marcos.
Otra posibilidad es dejar que la asignacin se vaya ajustando sola, por la va de usar
reemplazo global, es decir, escoger una vctima entre todos los marcos, sin importar a que
proceso est actualmente asignado. En general, se obtienen mejores resultados, pues la
asignacin se adapta dinmicamente al tamao de los conjuntos de trabajo.
Una manera ms directa de controlar la Hiperpaginacin es monitoreando la tasa de
faltas por segundo de cada proceso. Si supera un lmite MAX se le asignan ms marcos, y si
baja de MIN se le quitan marcos. Si se llega a una situacin en la que no es posible
mantener a todos los procesos bajo MAX, entonces se pasan procesos a disco.

UNIDAD 8,9,10: Gestin de I/O, planificacin del disco y archivos


El cdigo destinado a manejar el I/O representa una fraccin significativa de un
sistema operativo.
Control de perifricos
Las unidades de I/O consisten tpicamente de una parte mecnica y una parte
electrnica, conocida como controlador de dispositivo. El sistema operativo slo se comunica
con el controlador, escribiendo comandos en los registros del ste. La interfaz entre el
controlador y la parte mecnica es de muy bajo nivel. En el caso de un disco, el controlador
recibe un flujo de bits, que incluyen un encabezado, los datos propiamente, y una suma de
chequeo. La tarea del controlador es ensamblar esos bits, haciendo los chequeos del caso,
en una serie de bytes que el sistema operativo ver como un bloque.
I/O estructurado en capas
El I/O se puede estructurar en forma eficiente y modular usando capas. Cada capa se
encarga de una tarea especfica, y ofrece una interfaz bien definida a la capa superior.

Proceso de Usuario
Software independiente del dispositivo
Manejadores de dispositivo (drivers)
Controladores
Dispositivo mecnico

El manejador de dispositivo contiene todo el cdigo que es dependiente del dispositivo.


Es decir, cada dispositivo diferente requiere un driver para que el sistema operativo lo
Sistemas Operativos

Pgina 46 /59

pueda usar. La tarea del driver es la de aceptar rdenes abstractas (independientes del
dispositivo) de la capa superior (como por ejemplo, leer el bloque n), traducirla a rdenes
concretas (dependientes del dispositivo) y dar esas rdenes al controlador correspondiente.
El sistema de archivos pertenece a la capa de software independiente del dispositivo, ya
que slo maneja bloques lgicos, numerados correlativamente. Gracias esta estructuracin,
se puede usar el mismo sistema de archivos para una serie de dispositivos diferentes: discos
flexibles, discos duros, CD-ROMs, etc.
La divisin exacta entre las dos capas depende un poco del sistema operativo: tareas
que se pueden considerar independientes del dispositivo pueden asignarse al driver por
razones de eficiencia.
El manejo de errores se hace principalmente en el driver, pues la mayora de los errores
son dependientes del dispositivo (y por ende, slo el driver podra saber qu hacer). Por
ejemplo, si el driver recibe un mensaje de error del controlador al intentar leer un bloque,
reintentar varias veces antes de reportar el error a la capa superior. Entonces el software
independiente del dispositivo decidir qu hacer, en una forma independiente del dispositivo
(por ejemplo, comunicar el error para arriba).
Funcionamiento de un disco duro y bsquedas
Un disco, mirado desde ms bajo nivel, no es simplemente una secuencia de
bloques. Est compuesto de platos, cada uno de los cuales contiene una serie de pistas o
tracks concntricos. A su vez, las pistas se dividen en sectores. Las pistas exteriores, que
son ms grandes, pueden contener ms sectores que las interiores. (En un CD, en realidad
hay una espiral de sectores.) Existe un brazo mecnico con un cabezal lector / escritor para
cada plato. El brazo mueve todos los cabezales juntos. Un cilindro se conforma por las pistas
que los cabezales pueden leer cuando el brazo est en una posicin determinada.
Una de las tareas del manejador de disco es traducir los bloques lgicos que ve el
resto del sistema operativo a un tro (cilindro, plato, sector). El tiempo requerido para leer un
sector depende de:

El seek time o tiempo de bsqueda, es decir, el tiempo requerido para mover el brazo
al cilindro apropiado.
El retardo rotacional, o sea, el tiempo que hay que esperar hasta que el sector
requerido pase por debajo del cabezal.
El tiempo de transferencia de los datos.

El primero es el que predomina, de manera que conviene reducirlo para aumentar la


eficiencia del sistema. El sistema de archivo puede ayudar (por ejemplo, con asignacin
contigua). Obviamente, bloques en el mismo cilindro deben considerarse contiguos. Pero
hay otra cosa que se puede hacer, considerando que en un sistema con muchos procesos la
cola de solicitudes pendientes de un dispositivo suele no estar vaca: atenderlas en un orden
que
reduzca los movimientos del brazo.
Discos RAM o unidades virtuales
Gracias a la estructuracin en capas, podemos usar el mismo sistema de archivos en
cualquier dispositivo de bloques con un driver adecuado, que implemente la interfaz para el
software independiente del dispositivo (que bsicamente consiste en "leer bloque i" y
"escribir bloque i". Por ejemplo, en los primeros computadores personales, que tenan slo
una disquetera como medio de almacenamiento, era habitual crear un disco RAM, es decir
reservar un trozo de la memoria para usarlo como un disco virtual, para almacenar archivos.
Un driver de disco RAM es extremadamente simple. Dado un tamao de bloque B,
leer o escribir el bloque i es simplemente accesar B bytes a partir de la posicin B*i del rea
reservada para el disco RAM.
Bloques daados

Sistemas Operativos

Pgina 47 /59

Los discos, en cuanto dispositivos mecnicos, son propensos a fallas. A veces la falla
es transitoria: el controlador no puede leer un sector debido a que se interpuso una partcula
de polvo entre el cabezal y la superficie del disco. El controlador siempre reintenta varias
veces una operacin que fracasa por si la falla es transitoria; muchas veces se resuelve, sin
que el driver siquiera se entere. En los casos en que el sector est permanentemente
daado, el error se informa al driver, y el driver informa al sistema de archivos, quien de
alguna manera registra el bloque como daado, para no volver a usarlo. Cmo se pueden
registrar los bloques daados? Igual hay bloques crticos: en todo sistema de archivo, debe
haber al menos un bloque en una direccin fija. Si ese bloque se daa, el disco entero se
hace inusable.
Algunos controladores inteligentes reservan de antemano algunas pistas, que no son
visibles para el driver. Cuando se daa un sector, el propio controlador lo reemplaza por uno
de los reservados. (en forma transparente, si la operacin era de escritura, pero no tan
transparente si era de lectura). Muchos discos vienen con sectores daados ya marcados
desde la fbrica. Pero, dnde se guarda la informacin de los bloques malos? As, si el
bloque 5 se daa, entonces el controlador usa, digamos, el 999 cada vez que el driver le
solicita el 5. El problema es que los algoritmos de scheduling de disco se van a las pailas.
Solucin que a veces se usa: que el controlador reserve bloques esparcidos en el disco, y
cuando se dae un sector, trate de sustituirlo por uno de los de reserva que se encuentre en
el mismo cilindro, o por lo menos cerca.
Algoritmos para planificar brazo de acceso en disco
FIFO
Es simple, pero no estamos haciendo nada por la eficiencia. Es malo si las solicitudes
se alternan entre cilindros exteriores e interiores. Por ejemplo, si, mientras se lee el cilindro
11 llegan solicitudes para los cilindros 1,36,16,34,9,12, y se atienden en ese orden, el brazo
recorrer 111 cilindros.
SSTF (shortest seek-time first)
Se trata de atender primero las solicitudes ms cercanas a la posicin actual del
brazo. La atencin sera en el orden 11,12,9,16,1,34,36, para un total de 61 cilindros de
desplazamiento. El problema es que, cuando hay muchas solicitudes, es posible que slo se
atiendan las cercanas al centro. Puede haber inanicin para los procesos que solicitan
cilindros de los extremos.
Algoritmo del ascensor
Para evitar inanicin, se mantiene la direccin de movimiento del brazo hasta que no
queden solicitudes pendientes en esa direccin. Es lo mismo que hacen los ascensores. En el
ejemplo, suponiendo que el brazo iba hacia las direcciones altas, las solicitudes se
atenderan en el orden 11,12,16,34,36,9,1, lo que da un total de 60 cilindros de recorrido del
brazo. O sea, en este caso en particular es un poco mejor que SSTF, pero en general es peor.
Una propiedad interesante es que para cualquier conjunto de solicitudes, el movimiento del
brazo est acotado: 2 veces el ancho del disco. Un pequeo problema es las solicitudes en
los extremos tienen, en promedio, un tiempo de espera mayor. Esto se puede resolver si las
solicitudes siempre se atienden en un solo sentido. En el otro sentido, el cabezal se
devuelve, pero sin atender solicitudes a su paso.
Tambin podramos pensar en un algoritmo ptimo, pero su complejidad no justifica
usarlo. Si la carga es muy poca (la cola nunca tiene ms de una solicitud pendiente) todos
los algoritmos tienen el mismo rendimiento. Para cargas pesadas, se usa el del ascensor.
Arreglos de discos duros
Se puede decir que los discos son la componente menos confiable de un computador,
la componente ms complicada de sustituir, y la que frena el mejoramiento de la velocidad
de procesamiento con los avances tecnolgicos. En efecto, la velocidad de los procesadores
se duplica ms o menos cada 2 aos, y la capacidad de los chips de memoria crece a un
ritmo parecido. No obstante, el ancho de banda (velocidad de transferencia) del I/O ha
variado muy poco.

Sistemas Operativos

Pgina 48 /59

A este ritmo, en 7 aos ms los procesadores van a ser 10 veces ms rpidos, pero
en general las aplicaciones corrern menos de 5 veces ms rpido, por las limitaciones de
I/O.
Una solucin posible: en lugar de uno solo disco grande, usar muchos discos chicos y
baratos, en paralelo, para mejorar el ancho de banda. Para garantizar paralelismo, se hace
disk striping o divisin en franjas. Cada bloque lgico se compone de varios sectores fsicos,
cada uno en un disco distinto. As, cada acceso a un bloque lgico se divide en accesos
simultneos a los discos. En 1991 la situacin era la siguiente:

IBM 3380: 7500 MB, 18 U$/MB, 30000 horas de MTTF (mean time to failure)
Conner CP3100: 100 MB, 10 U$/MB, 30000 horas de MTTF

El IBM 3380 tiene bastante ms ancho de banda que un CP3100, pero si juntamos 75 de
estos ltimos tenemos la misma capacidad total, con menor costo, menor consumo de
electricidad, y potencialmente 12 veces ms ancho de banda. El gran problema es la
confiabilidad: si antes tenamos 30000 horas de funcionamiento sin fallas, ahora tendramos
400 (30000/75) horas, o sea, slo dos semanas. O sea, la tolerancia a fallas es crucial, y
para obtenerla se usa redundancia, en una configuracin conocida como RAID (Redundant
Array of Inexpensive Disks), y que se puede implementar en varios niveles.
RAID 1
Se usan discos espejos, o sea, la informacin de cada disco se mantiene siempre
duplicada en otro idntico. O sea, MTTF aumenta notoriamente, pero duplicando el costo.
RAID 2
Se reduce la redundancia usando tcnicas de deteccin y correccin de errores
(cdigos de Hamming). Por ejemplo, si un bloque se reparte entre 10 discos y suponemos
que no va a haber ms de una falla simultneamente, entonces no necesitamos duplicar el
bloque entero para reconstituirlo en caso de falla, puesto que ante una falla slo se perder
un 10% de la informacin. El problema es que si no sabemos qu 10% se perdi, de todas
maneras se necesita bastante redundancia (20 a 40%).
RAID 3
El punto es que, gracias a que cada controlador usa sumas de chequeo (y
suponiendo que adems podemos saber cundo un controlador falla) s podemos saber qu
trozo de la informacin est errnea. Y sabiendo eso, basta con usar slo un disco adicional
para guardar informacin de paridad con la cual es posible reconstituir la informacin
original.
Hay otros niveles (RAID 4 y 5). Ahora (1996) la situacin es:

IBM 3390: un disco de 102 GB, 3.9 MB/s, 22.8 ms de latencia.


IBM RAMDAC 2: 64 discos, 180 GB en total, 12.6 MB/s, 4.2 ms de latencia.

La ganancia en ancho de banda es menor que la terica, entre otras cosas porque la
tolerancia a fallas impone un overhead. Por otra parte, con un RAID de 100 discos para datos
y otros 10 para paridad, el MTDL (mean time to data loss) es de 90 aos, comparado con 3
aos de los discos estndares.

Sistemas Operativos

Pgina 49 /59

Implementacin de los archivos


Podemos modelar el disco duro como una secuencia de bloques, de 0 a N-1, de
tamao fijo (usualmente, de 512 bytes), a los cuales tenemos acceso directo, (es decir, se
puede leer y escribir cualquier bloque, en cualquier orden), pero, por el movimiento del
brazo es ms caro leer dos bloques separados que dos bloques contiguos.
El primer problema consiste en determinar cmo vamos a almacenar los archivos en
el disco.
Asignacin contigua
Este mtodo requiere que cada archivo se almacene en un conjunto contiguo de
bloques. Su ventaja es que por una parte es simple, porque para saber qu bloques ocupa
un archivo, basta con registrar el primero (su tamao, por cierto, lo conocemos). Tambin es
muy simple implementar acceso directo. Por otra parte, tiene muy buen rendimiento cuando
los archivos se leen enteros, en forma secuencial, pues el movimiento del brazo del disco es
el mnimo posible.
Su desventaja es qu hacer si un archivo crece? Deberamos reservar espacio
suficiente, pero no necesariamente vamos a saber de antemano su tamao mximo.
Adems, la situacin es anloga a la de asignacin de particiones de memoria de tamao
variable, y por lo mismo, hay fragmentacin externa. Podramos pensar en compactacin,
pero, tratndose de disco, no es muy aconsejable hacerlo (salvo de noche, cuando el
sistema no est en uso).
Lista ligada
El segundo mtodo para almacenar archivos es manteniendo cada uno como una
lista ligada de bloques. Los primeros bytes de cada bloque se usan como puntero al
siguiente; el resto para los datos. Su ventaja es que se resuelven los problemas del mtodo
anterior: no hay fragmentacin externa (aunque s un poco de fragmentacin interna). El
directorio slo debe registrar el primer bloque de cada archivo. No es necesario declarar el
mximo tamao que puede llegar a tener un archivo, puesto que puede crecer sin
problemas (mientras queden bloques libres).
Su desventaja es que el acceso secuencial es simple, pero no tan eficiente como con
asignacin contigua. Acceso aleatorio es extremadamente lento. Punteros ocupan espacio, y
adems hacen que la informacin til de cada bloque deje de ser potencia de 2. Para reducir
impacto en espacio, se pueden agrupar varios bloques fsicos en uno slo lgico (o cluster).
Tabla de asignacin de archivos (FAT)
Para eliminar algunas desventajas del mtodo anterior, en vez de tener esparcidos
los punteros en cada bloque, los podemos juntar y poner todos juntos en una tabla o FAT. Es
lo que hace MS-DOS, reservando un pedazo al comienzo del disco para la FAT. Sus ventajas
son las sismas del anterior, y adems: Si mantenemos la FAT en memoria, acceso aleatorio
se agiliza enormemente. Informacin en cada bloque vuelve a ser potencia de 2.
Su desventaja es que se sigue perdiendo espacio para los punteros (ahora en forma
de FAT). FAT puede ser grande (y hay que mantenerla en memoria). MS-DOS impone un
lmite de 216 entradas en la FAT, lo que obliga a usar cluster demasiado grandes en discos de
alta capacidad, (Para 1 GB, clusters de 16K!) lo que se traduce en una altsima
fragmentacin interna.

Sistemas Operativos

Pgina 50 /59

Nodos-I
El ltimo mtodo consiste en mantener juntos los punteros de cada archivo, en una
tabla, asociada al archivo, y que se guarda en un bloque como cualquiera (esta tabla es
anloga a la tabla de pginas). Adems, en ese bloque se puede guardar informacin de los
otros atributos del archivo. El directorio slo contiene un puntero al bloque que contiene la
tabla.
Problema: y si el archivo es grande y su tabla no cabe en un solo bloque?
Soluciones: lista ligada de bloques, ndice multinivel (como en las tablas de pginas), o un
esquema combinado, que es lo que se usa en Unix:
Supongamos que en un bloque, aparte del espacio para los atributos, queda espacio
para 32 punteros a otros bloques. Entonces los 29 primeros se usan como hemos dicho, es
decir, apuntan a bloques que contienen datos del archivo. Pero los tres ltimos apuntan a
bloques indirectos. El antepenltimo apunta a un bloque indirecto simple, es decir a un
bloque que contiene punteros a bloques con datos. El penltimo apunta a un bloque
indirecto doble, es decir a un bloque que contiene punteros a bloques con punteros a
bloques con datos. El ltimo apunta a un bloque indirecto triple, es decir... adivinen. Hasta
qu tamao de archivo soporta este sistema?

Sus ventajas es que prcticamente lo nico que hay que registrar en el directorio es
un puntero al i-node. Acceso aleatorio rpido para archivos pequeos. Bajo overhead fijo (no
hay FAT, entradas en directorios pequeas).
Su desventaja es que es relativamente complejo. Mayor overhead variable: cada
archivo, por pequeo que sea, necesita al menos dos bloques. Acceso aleatorio ms
complicado para archivos grandes (en todo caso, los bloques con ndices pueden guardarse
en memoria para agilizar el acceso).
Sistemas Operativos

Pgina 51 /59

Resumen de Mtodos y Windows NT


Cada uno de estos mtodo tiene ventajas y desventajas. Por eso, algunos sistemas
(como RDOS de Data General), ofrecen varios (se escoge uno al crear el archivo). Otra
posibilidad es usar asignacin contigua para archivos pequeos, e indexada para grandes.
Lo usual es, en todo caso, uno slo para todos los archivos.
En general, se usan mtodos mucho ms complejos que los que hemos visto. La
enorme disparidad en velocidad entre la CPU y el disco justifica usar algoritmos complejos
(incluso inteligencia artificial), que utilicen mucha CPU para ahorrar un par de movimientos
del brazo.
Windows NT administra el contenido del disco a travs de una base de datos
relacional, y utiliza el modelo de transacciones para asegurarse que las modificaciones son
atmicas y no se produzcan inconsistencias.
Administracin del espacio libre en archivos
Es necesario saber qu bloques estn libres. Las opciones son parecidas a las que se
pueden usar para administrar espacio en memoria.
Mapa de bits
Un bit por bloque. Es eficiente si se puede mantener el mapa entero en memoria.
Disco de 1 GB, con bloques de 512 KB requiere un mapa de 256 KB. Usado en los Macs.
Lista ligada
En un bloque reservado (fijo) del disco se registran las direcciones de los bloques
desocupados. La ltima direccin apunta no a un bloque libre, sino a otro bloque con ms
direcciones de bloques libres...
En MS-DOS se usa la misma FAT para administrar el espacio libre.
Cachs de disco
Ya que el disco es tan lento comparado con la memoria (unas 10000 veces) resulta
rentable usar un cach, es decir mantener en memoria fsica parte de la informacin que
hay en el disco, de manera que, si en el futuro se requiere un bloque que ya est en
memoria, nos ahorramos el acceso al disco.
Igual que en el caso de memoria virtual, debemos tratar de adivinar qu bloques se
van a accesar en el futuro cercano, para mantener esos bloques en el cach. Pero al
contrario de lo que ocurre con memoria virtual, no se requiere ningn apoyo especial del
hardware para implementar LRU, ya que todos los accesos a disco pasan por las manos del
sistema operativo. Paradjicamente, LRU no es necesariamente la mejor alternativa
tratndose de bloques de disco. Qu pasa, por ejemplo, en el caso del acceso secuencial a
un archivo? Por otra parte, algunos de los bloques contienen informacin crtica respecto del
sistema de archivos (por ejemplo, un bloque que contiene informacin del directorio raz o
de un i-node o de los bloques libres). Si este bloque es modificado y puesto al final de la cola
LRU, puede pasar un buen tiempo antes de que llegue a ser el menos recientemente usado,
y sea escrito en el disco para ser reemplazado. Si el sistema se cae antes que eso, esa
informacin crtica se perder, y el sistema de archivos quedar en un estado inconsistente.
Podemos modificar un poco LRU, considerando dos factores:

Qu tan probable es que el bloque se necesite de nuevo. Bloques de directorios se


suelen usar bastante. El ltimo bloque de un archivo que se est escribiendo,
tambin es probable que se vuelva a necesitar.
Qu tan esencial es el bloque para la consistencia del sistema de archivos.
Bsicamente todos los bloques, excepto los de datos, que han sido modificados.
Estos deben grabarse en disco lo ms rpidamente posible.

Segn eso, ponemos cada bloque ms adelante o ms atrs en la lista LRU.


Sistemas Operativos

Pgina 52 /59

En Unix, hay una llamada al sistema, sync, para asegurarse que los bloques modificados se
graben en el disco. Por eso, antes de sacar un disquete, se debe hacer sync. MS-DOS, en
cambio, usa un cach write-through, es decir, cada vez que se escribe un bloque en el
cach, este se graba inmediatamente en el disco. Por eso no hay que hacer nada especial
antes de retirar un disquete, pero es menos eficiente.

Sistemas Operativos

Pgina 53 /59

OTROS TEMAS
Sistemas Distribuidos
Un sistema distribuido es una coleccin de computadores conectados por una red de
comunicaciones, que el usuario percibe como un solo sistema (no necesita saber qu cosas
estn en qu mquinas). El usuario accesa los recursos remotos de la misma manera en que
accesa recursos locales.
En comparacin con un sistema centralizado:

Mejor aprovechamiento de los recursos.


Mayor poder de cmputo a ms bajo costo. (Procesamiento paralelo).
Algunas aplicaciones son inherentemente distribuidas: red de cajeros automticos.
En teora, mayor confiabilidad, si se maneja suficiente redundancia. (Si se cae una
mquina, no se cae todo el sistema).
Crecimiento incremental.
El software es mucho ms complejo (de hecho, todava no est muy claro como
hacerlo).
Muchos usuarios desde muchas partes: problemas de seguridad.

Redes de computadores
Cada computador en una red es un nodo. Los nodos pueden estar conectados
fsicamente de diversas maneras: red totalmente conectada, parcialmente conectada,
jerrquica, en estrella, anillo o bus.
Ya que no hay memoria compartida, la comunicacin entre los nodos se basa
exclusivamente en mensajes. Cmo programamos ahora un sistema productor-consumidor,
si el productor est en un nodo y el consumidor en otro? Mediante mensajes. Un sistema
operativo con soporte para redes provee primitivas de comunicacin interprocesos:
send(P, mensaje) enva el mensaje al proceso P, y contina.
receive(Q, mensaje) bloquea el proceso hasta recibir un mensaje de Q.
receive(id, mesaje) bloquea el proceso hasta recibir un mensaje de cualquier proceso. El
Identificador del emisor se devuelve en id.
Cmo se identifican los procesos? Cmo se hace llegar un mensaje a su destino, si
la red no est totalmente conectada? (Estrategias de ruteo). Las redes de comunicacin no
son confiables, lo que significa que no hay ninguna garanta de que un mensaje llegue a
destino. Esta imperfeccin suele ser ocultada por el sistema operativo, quien provee a los
procesos primitivas de comunicacin que son una abstraccin de una red confiable: por
debajo el sistema se las arregla mediante ACKs, timeouts y retransmisiones para resolver
problemas causador por errores transitorios como prdida de mensajes.
En rigor, en un sistema centralizado los procesos tambin se pueden comunicar
mediante mensajes (recordemos que los procesos, por defecto, no comparten memoria).
Sistemas operativos de red
Un sistema operativo de red provee un ambiente en el que los usuarios pueden
accesar recursos remotos, pero deben estar conscientes de la multiplicidad de mquinas.
Login remoto
En Unix, uno puede hacer telnet lucifer.cs.uwm.edu si quiere entrar a esa mquina en
forma remota. Cuando se ejecuta este programa se crea un proceso cliente telnet que
intenta comunicarse con la mquina remota. Para que esto funcione, en tal mquina debe
haber un servidor telnet, que, cuando recibe una solicitud de conexin, crea un proceso que
acta en representacin del usuario (previa autentificacin). Todo lo que el usuario digita es
enviado por el cliente al proceso remoto, quien ejecuta los comandos y enva la salida para
que el cliente la despliegue.
Sistemas Operativos

Pgina 54 /59

Transferencia de archivos
Otra funcin que los sistemas operativos de red proveen es la de transferencia de archivos.
En la Internet hacemos
ftp altar.ing.puc.cl
<autentificacin...>
get archivo
o tambin:
rcp maquina1:archivo1 maquina2:archivo2
Bajo este esquema no hay transparencia para el usuario, pues ste debe saber
exactamente dnde est el archivo que necesita. El acceso a un archivo remoto difiere
bastante del acceso a un archivo local. Adems, los archivos en realidad no se comparten;
ms bien, hay muchas copias de un mismo archivo en todos los lugares en los que se
necesita; no slo se gasta espacio, sino que puede haber problemas de consistencia. FTP se
implementa de manera similar a telnet, slo que el servidor FTP responde slo a un conjunto
predefinido de comandos (get, put, ls, cd, etc.).
Un punto importante acerca de telnet y FTP es que el usuario debe cambiar de
paradigma. Para usar FTP el usuario debe conocer un conjunto de comandos que difiere
bastante de los comandos del sistema operativo. En el caso de telnet la diferencia no es tan
drstica, pero existe en la medida que el sistema operativo de la mquina remota difiera del
de la mquina local.
NFS
Un avance sera proveer un sistema de archivos global, accesible por todas las
estaciones de trabajo en la red. Los servidores de archivos soportan el sistema de archivos,
y atienden solicitudes de las estaciones para leer, escribir y, en general, manipular archivos.
NFS (Network File System) puede clasificarse como un sistema operativo de red. NFS
permite que una coleccin de clientes y servidores compartan un sistema de archivos
comn. Una mquina puede ser cliente y servidor al mismo tiempo. Cada servidor exporta
uno o ms de sus directorios para que sean accesados por clientes remotos. Los clientes
accesan estos directorios montndolos en algn punto de su jerarqua de directorios. (mount
server:/cdrom /net/cdrom). Este esquema permite tener estaciones sin disco.
Una vez que el directorio est montado, para un programa que ejecuta en la mquina
cliente, no hay diferencia en la forma de accesar archivos locales y remotos. Ahora s, los
archivos son verdaderamente compartidos. Hay transparencia, pero menos que la ideal: el
nombre de un archivo compartido depende del lugar desde donde se accese: /net/cdrom de
una mquina puede ser el /remote/cddrive de otra.
Para el montaje, el cliente enva al servidor una solicitud, especificando el nombre de
uno de los directorio que el servidor exporta. Si todo es legal, el servidor devuelve un asidor
file handle al cliente, que contiene, entre otras cosas, el dispositivo en el que se encuentra,
y el nmero del nodo-i del directorio. El cliente debe usar este asidor en todas las
operaciones subsecuentes sobre ese directorio. NFS soporta las mismas operaciones sobre
archivos que UNIX, con la excepcin de open y close. Para usar un archivo, el cliente primero
enva una solicitud de bsqueda (LOOKUP) indicando el nombre del archivo. El servidor, en
vez de almacenar localmente la informacin que tradicionalmente se maneja en una tabla
de archivos abiertos, la enva como respuesta al cliente en un asidor. De ah en adelante,
para leer y escribir archivos, el cliente debe especificar el asidor cada vez. Ventaja: toda la
informacin la maneja el cliente, de manera que el servidor no tiene que recordar nada
(servidor sin estado o stateless). El servidor puede caerse y recuperarse, sin que el cliente lo
note.
NFS soporta sistemas heterogneos. Por ejemplo, un cliente DOS puede accesar archivos de
un servidor Unix.
Sistemas Operativos

Pgina 55 /59

Sistemas operativos distribuidos y aspectos de diseo


Segn nuestra definicin, un sistema operativo distribuido debe hacer que los
usuario (procesos) perciban el sistema como un monoprocesador virtual. No es necesario
que los usuarios estn al tanto de la existencia de mltiples mquinas y mltiples
procesadores en el sistema. En la actualidad no hay ningn sistema que cumpla cabalmente
con esta definicin, pero se estn haciendo avances.
Aspecto 1: Transparencia
Los usuarios deben poder accesar los objetos remotos de la misma forma que los
locales. Es responsabilidad del sistema operativo distribuido localizar el recurso y obtener la
interaccin adecuada.
La transparencia tambin tiene que ver con la forma de nombrar los objetos: el
nombre de un objeto no debe depender del lugar en que se almacena. Un recurso debe
poder migrar de un lugar a otro, sin que esto signifique que haya que cambiar su nombre.
Los usuarios, adems, deben tener la misma vista del sistema, independientemente
del lugar en que el usuario haga login. (Esto se cumple en AFS, pero no en NFS).
Aspecto 2: Confiabilidad
Supongamos que tenemos un sistema con 5 mquinas, cada una con una
probabilidad del 95% de estar funcionando normalmente en cualquier instante. Si el hecho
de que una mquina se caiga bota todo el sistema, entonces la probabilidad de que el
sistema est funcionando en un instante dado es del 77%. Si en cambio el sistema est
hecho de manera tal que cualquier mquina puede asumir el trabajo de una mquina que se
cae, entonces el sistema estar funcionando un 99.9994% del tiempo. La primera opcin es
definitivamente mala (mucho peor que en un sistema centralizado); la segunda, es poco
realista (muy difcil de implementar). Adems, la tolerancia a fallas es un tema
particularmente complejo, debido a que, en general, no es posible diferenciar entre un
enlace de comunicaciones cado, una mquina cada, una mquina sobrecargada, y prdida
de mensajes.
En la prctica: ubicar un punto intermedio razonable. O sea, replicar hasta un punto
razonable los elementos claves (datos, servicios, hardware). Obviamente, la confiablidad
tiene que ver con la consistencia de los datos. Si un archivo importante se replica, hay que
asegurarse que las rplicas se mantengan consistentes; mientras ms haya, ms caro es
mantenerlas, y ms probable es que haya inconsistencias.
La seguridad es tambin un aspecto fundamental de la confiablidad.
Aspecto 3: Escalabilidad
La escalabilidad de un sistema es la capacidad para responder a cargas de trabajo
crecientes. En particular un sistema distribuido escalable debe disearse de manera que
opere correcta y eficientemente con diez o con millones de mquinas.
Un principio bsico en el diseo de sistemas escalables es que la carga de trabajo de
cualquier componente del sistema debe estar acotada por una constante independiente del
tamao del sistema. Si no es as, entonces el crecimiento del sistema estar limitado. En
consecuencia, todo lo que huela a centralizacin a la larga constituir un freno a la
escalabilidad. Por ejemplo, servidores de autentificacin, de nombres o de archivos: si estos
son centralizados (uno para todo el sistema), entonces hay un lmite en la cantidad de
servicios que pueden atender. (Adems de que la centralizacin atenta contra la tolerancia a
fallas). Los algoritmos centralizados tambin deben evitarse. Por ejemplo, dada un topologa
de red compleja, en teora la mejor manera de rutear mensajes es recopilando la
informacin acerca del estado de los enlaces (qu conexiones hay, y qu grado de
congestin tiene cada una), correr un algoritmo de teora de grafos que encuentra el camino
ms corto (barato) entre cada par de nodos, y despus divulgar esa informacin. Pero, otra
vez, un mecanismo as no es escalable. En la medida que sea posible, hay que usar
algoritmos descentralizados, que tienen las siguientes caractersticas:

Ninguna mquina tiene el conocimiento completo del estado del sistema.


Cada nodo toma decisiones basndose nicamente en la informacin que tiene
disponible.
La falla de una mquina no hace fracasar el algoritmo.
Sistemas Operativos

Pgina 56 /59

Los algoritmos no dependen de la existencia de relojes sincronizados. (Por ejemplo, si


un algoritmo obliga a que todos los nodos registren alguna informacin acerca de su
estado a las 12:00:00.0...)

Todas estas imposiciones son bastante fuertes. No siempre es posible encontrar


algoritmos que cumplan todos estos requisitos. Incluso, algoritmos que los cumplen no
siempre escalan bien.
Aspecto 4: Flexibilidad
Sistemas distribuidos son nuevos. Es importante, por ende, que se puedan adaptar a
nuevas tecnologas y a nuevos avances en el tema.
Rendimiento.
Ciertamente, es un aspecto que no se puede dejar de lado. Cmo se mide?

Sistemas Operativos

Pgina 57 /59

TABLA DE CONTENIDO

UNIDAD 1 : Introduccin......................................................................... 1
DIVISIONES DEL SOFTWARE.............................................................................1
DEFINICIN DE UN SISTEMA OPERATIVO (S.O.)..................................................1
MISIN DEL SISTEMA OPERATIVO.....................................................................................1
COMPONENTES PRINCIPALES............................................................................................ 1
DEFINICIN DE UNA MAQUINA VIRTUAL (MAQUINA EXTENDIDA)......................................1
EL ARRANQUE DE UN SISTEMA OPERATIVO......................................................................1
EVOLUCION DE LAS COMPUTADORAS................................................................1
Primera generacin (1945-1955): tubos de vaco.............................................................2
Segunda generacin (1955-1965): transistores y procesamiento por lotes......................2
Tercera generacin (1965-1980): circuitos integrados y multiprogramacin....................3
Cuarta generacin (1980-): computadores personales.....................................................3
EVOLUCION DE LOS SISTEMAS OPERATIVOS (ESTRUCTURAS).............................3
(1) MONOLTICOS.............................................................................................................. 3
(3) MAQUINAS VIRTUALES................................................................................................4
(4) CLIENTE / SERVIDOR................................................................................................... 4
MODOS DE EJECUCIN.....................................................................................5
TIPOS DE PROTECCION..................................................................................................... 5
INTERRUPCIONES.............................................................................................................. 5
VECTOR DE INTERRUPCIONES.......................................................................................... 6
CATEGORAS PRINCIPALES................................................................................................ 6
LLAMADAS REFERENTES A ARCHIVOS..............................................................................6
CLASIFICACION DE LOS SISTEMAS OPERATIVOS (CAPAS)....................................6
DISPOSITIVOS FISICOS...................................................................................................... 7
MICROPROGRAMACIN..................................................................................................... 7
LENGUAJE MAQUINA......................................................................................................... 7
PROGRAMAS DE SISTEMA.................................................................................................7
PROGRAMAS DE APLICACION............................................................................................ 7

UNIDAD 2 : Procesos.............................................................................. 8

DEFINICIN DE PROCESO.................................................................................8
MULTIPROGRAMACION (TIME-SHARING)...........................................................................8
LLAMADAS AL SISTEMA DE ADMINISTRACIN DE PROCESOS...........................................8
ESTADOS DE PROCESOS...................................................................................8
TABLA DE PROCESOS.......................................................................................9
PROCESOS HIJO.............................................................................................................. 10
HILOS DE CONTROL (THREADS)......................................................................................10

UNIDAD 3: Planificacin de Procesos..................................................... 11


NIVELES DE PLANIFICACIN...........................................................................11
FORMAS DE PLANIFICACIN (APROPIATIVA)....................................................11
CRITERIOS LOS ALGORITMOS.........................................................................11
ALGORITMOS DE PLANIFICACIN:...................................................................12
(1) ALGORITMO DE PLAZO FIJO.......................................................................................12
(2) ALGORITMO DE FIFO................................................................................................. 12
(3) ALGORITMO DE TORNEO (ROUND ROBIN).................................................................12
(4) ALGORITMO POR ROUND ROBIN (CON PRIORIDADES, SJN).......................................13
(5) ALGORITMO SJF (PRIORIDAD AL PROCESO MAS CORTO)...........................................13
LAS PRIORIDADES EN ALGORITMOS................................................................................13
(6) ALGORITMO AL PRIMER TRABAJO MAS CORTO..........................................................14
(7) PLANIFICACIN POR LOTERA....................................................................................14
(8) PLANIFICACIN DE TIEMPO REAL..............................................................................15
(9) PLANIFICACIN DE MULTIPLES COLAS.......................................................................15
(10) PLANIFICACIN EN 2 NIVELES.................................................................................16
(11) PLANIFICACIN EN MULTIPROCESADORES..............................................................17

UNIDAD 4: Concurrencia....................................................................... 17
COMUNICACIN ENTRE PROCESOS.................................................................17
Formas de comunicacin................................................................................................ 17
MEMORIA COMPARTIDA..................................................................................18
Sistemas Operativos

Pgina 58 /59

EXCLUSIN MUTUA......................................................................................................... 18
CONDICIONES DE COMPETENCIA (RACE-CONDITION).....................................................18
SECCIONES CRITICAS...................................................................................................... 18
ALGORITMOS PARA LOGRAR EXLUSION MUTUA (MEMORIA COMPARTIDA)..........18
4 CONDICIONES PARA SOLUCION ADECUADA DE DATOS COMPARTIDOS:.......................18
(1) Sistema en Lotes (Inhabilitacin de Interrupciones)..................................................18
(2) Variable de Candado (Sin variables iniciales)............................................................19
(3) Variable de Candado (Con Variables iniciales)...........................................................19
(4) Variable de Candado (Con Variables iniciales de desear entrar)................................20
(5) ALGORITMO DE DECKER............................................................................................ 21
(6) ALGORITMO DE PETERSON........................................................................................ 23
(7) Algoritmo Productor Consumidor..............................................................................23
Semforos.................................................................................................... 24
Aplicados a Productor Consumidor.................................................................................25
Problema de Filsofos con semforos.............................................................................25
Sistemas de Mensajes...................................................................................27
Concurrencia en apartados............................................................................................. 27
Tipos de apartados......................................................................................................... 27
BUFFERING para mensajes............................................................................................. 28
Tipos de Mensajes.......................................................................................................... 28

UNIDAD 5: nter bloqueo (DeadLocks)................................................... 28


CASOS DE INTERBLOQUEOS............................................................................28
CONDICIONES................................................................................................ 28
ESTRATEGIAS PARA RESOLVERLOS..................................................................29
(1) DEL AVESTRUZ (No hacer nada)................................................................................29
(2) Deteccin y recuperacin.......................................................................................... 29
(3) Prevencin................................................................................................................ 29
(4) Espera circular.......................................................................................................... 30
(5) Evitacin................................................................................................................... 30
(6) Estado seguro........................................................................................................... 31
(7) Algoritmo del banquero............................................................................................. 31

UNIDAD 6: Administracin de la memoria.............................................. 33


Monoprogramacin........................................................................................33
Multiprogramacin Contigua..........................................................................34
Particiones estticas....................................................................................................... 34
Reubicacin y proteccin................................................................................................ 34
Particiones dinmicas con Intercambio (Swapping)........................................................35
Administracin de Memoria dinmica con mapas de BITS..............................................36
Administracin de Memoria dinmica con lista ligada....................................................36
Fragmentacin externa e interna...................................................................................36
Multiprogramacin no contigua......................................................................37
Memoria dinmica con Paginacin..................................................................................37
Memoria dinmica con Segmentacin............................................................................40
Memoria Dinmica con Segmentacin paginada en los 386...........................................42

UNIDAD 7: Memoria Virtual................................................................... 43


Definicin..................................................................................................... 43
Administracin de la Memoria........................................................................43
Paginacin por demanda................................................................................................ 43
Tablas de pginas........................................................................................................... 43
Reemplazo de pginas.................................................................................................... 44
Algoritmos para el reemplazo de pginas.......................................................44
Algoritmo ptimo............................................................................................................ 45
FIFO................................................................................................................................ 45
La menos recientemente usada (LRU)............................................................................45
Fondos de marcos.......................................................................................................... 45
Hiperpaginacin o thrashing..........................................................................45
Asignacin de marcos..................................................................................................... 46

UNIDAD 8,9,10: Gestin de I/O, planificacin del disco y archivos ............46


Control de perifricos....................................................................................46
Sistemas Operativos

Pgina 59 /59

I/O estructurado en capas............................................................................................... 47


Funcionamiento de un disco duro y bsquedas...............................................47
Discos RAM o unidades virtuales....................................................................................48
Bloques daados............................................................................................................ 48
Algoritmos para planificar brazo de acceso en disco........................................48
FIFO................................................................................................................................ 48
SSTF (shortest seek-time first)........................................................................................ 48
Algoritmo del ascensor................................................................................................... 48
Arreglos de discos duros................................................................................49
RAID 1............................................................................................................................ 49
RAID 2............................................................................................................................ 49
RAID 3............................................................................................................................ 50
Implementacin de los archivos.....................................................................51
Asignacin contigua........................................................................................................ 51
Lista ligada..................................................................................................................... 51
Tabla de asignacin de archivos (FAT)............................................................................51
Nodos-I........................................................................................................................... 52
Resumen de Mtodos y Windows NT..............................................................................53
Administracin del espacio libre en archivos...................................................53
Mapa de bits................................................................................................................... 53
Lista ligada..................................................................................................................... 53
Cachs de disco............................................................................................. 53

OTROS TEMAS...................................................................................... 55
Sistemas Distribuidos....................................................................................55
Redes de computadores................................................................................................. 55
Sistemas operativos de red............................................................................................ 55
Login remoto.................................................................................................................. 55
Transferencia de archivos............................................................................................... 56
NFS................................................................................................................................. 56
Sistemas operativos distribuidos y aspectos de diseo..................................................57
Aspecto 1: Transparencia............................................................................................... 57
Aspecto 2: Confiabilidad................................................................................................. 57
Aspecto 3: Escalabilidad................................................................................................. 57
Aspecto 4: Flexibilidad.................................................................................................... 58

Sistemas Operativos

Pgina 60 /59