Está en la página 1de 162

Sistemas Operativos

1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS

1.1 CONCEPTO Y FUNCIONES DEL SISTEMA OPERATIVO


En los años sesenta, un sistema operativo se podría haber definido como el
software que controla al hardware. Sin embargo, actualmente existe una tendencia
significativa a la transferencia de las funciones del software al firmware, es decir,
microcódigo. Dicha tendencia se ha pronunciado tanto que es probable que en
algunos sistemas las funciones codificadas en firmware sobrepasen pronto a
aquéllas codificadas en software.
Es evidente que se necesita una nueva definición de sistema operativo. Se puede
imaginar un sistema operativo como los programas, instalados en el software o el
firmware, que hacen utilizable el hardware.
Un sistema operativo es un conjunto de programas que administran eficientemente
los recursos de un sistema de cómputo, controlando la ejecución de programas de
aplicación y actuando como una interfaz entre el usuario y la computadora (el
hardware). Puede considerarse que un sistema operativo lleva a cabo tres
funciones principales:

Comodidad: Un sistema operativo hace que una computadora sea más fácil de
utilizar.
Eficiencia: Un sistema operativo permite que los recursos de un sistema
informático se aprovechen de una manera más eficiente.
Capacidad de evolución: Un sistema operativo deberá construirse de modo
que permita el desarrollo efectivo, la verificación y la introducción de nuevas
funciones en el sistema y a la vez, no interferir en los servicios que brinda.

Los sistemas operativos son ante todo administradores de recursos; el principal


recurso que administran es el hardware de la computadora: el procesador, los
medios de almacenamiento, los dispositivos de E/S, los dispositivos de
comunicación y los datos. Los sistemas operativos realizan muchas funciones,
como proporcionar la interfaz con el usuario, permitir que los usuarios compartan
entre sí el hardware y los datos, evitar que los usuarios se interfieran
recíprocamente, planificar la distribución de los recursos entre los usuarios,
facilitar la entrada y salida, recuperarse de los errores, contabilizar el uso de los
recursos, facilitar las operaciones en paralelo, organizar los datos para lograr un
acceso rápido y seguro, y manejar las comunicaciones en red.

Como sea que se decida definir los sistemas operativos, lo importante es no


olvidar que constituyen una parte integral del ambiente de cómputo y, por tanto,
necesitan ser comprendidos en alguna medida por todos los usuarios de
computadoras.

1 Lily Alejandra Medrano Mendoza


Sistemas Operativos

1.2 HISTORIA Y EVOLUCIÓN DE LOS SISTEMAS OPERATIVOS


Para intentar comprender la manera de funcionar de un sistema operativo y la
razón de ser de algunas de sus características principales resulta útil considerar la
manera cómo han evolucionado a lo largo de los años.

Proceso en serie
En las primeras computadoras de finales de los 40 hasta mediados de los 50, el
programador interactuaba directamente con el hardware; no había sistema
operativo.
La operación con la máquina se efectuaba desde una consola consistente en unos
indicadores luminosos, unos conmutadores, algún tipo de dispositivo de entrada y
una impresora. Los programas en código máquina se cargaban a través del
dispositivo de entrada (un lector de tarjetas, por ejemplo). Si se detenía el
programa por un error, la condición de error se indicaba mediante los indicadores
luminosos. El programador podía examinar los registros y la memoria principal
para determinar la causa del error.
Si el programa continuaba hasta su culminación normal, la salida aparecía en la
impresora.

Estos primeros sistemas presentaban dos problemas principales:

Planificación: La mayoría de las instalaciones empleaban un formulario de


reserva de tiempo de máquina. Normalmente un usuario podía reservar bloques
de tiempo en múltiplos de media hora o algo por el estilo. Un usuario podía
reservar una hora y terminar a los 45 minutos; esto daba como resultado un
desperdicio del tiempo de la computadora. Por el contrario, el usuario podía tener
dificultades, no terminar en el tiempo asignado y verse forzado a parar sin haber
resuelto el problema.

Tiempo de preparación: Un programa sencillo, llamado trabajo, cargaba un


compilador y un programa en lenguaje de alto nivel (programa fuente) en la
memoria, salvaba el programa compilado (programa objeto) y luego montaba y
cargaba el programa objeto junto con las funciones comunes. Cada uno de estos
pasos podía implicar montar y desmontar cintas o preparar paquetes de tarjetas.
Si se producía un error, el infortunado usuario tenía que volver al inicio de este
proceso de preparación. De este modo, se perdía un tiempo considerable en
preparar un programa para su ejecución.

Este modo de operación podría denominarse proceso en serie porque refleja el


hecho de que los usuarios tenían que acceder al computador en serie. Con el
paso del tiempo se desarrollaron varias herramientas de software de sistemas
para intentar hacer más eficiente este proceso en serie. Entre éstas se incluían
bibliotecas de funciones comunes, montadores, cargadores y rutinas de manejo de
E/S que estaban disponibles como un software común para todos los usuarios.

2 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Sistemas simples de procesos por lotes

Las primeras máquinas eran muy caras y, por tanto, era importante maximizar la
utilización de las mismas. El tiempo desperdiciado por la planificación y la
reparación era inaceptable.
Para mejorar el uso, se desarrolló el concepto de sistema operativo por lotes
(batch). El primer sistema operativo por lotes fue desarrollado a mediados de los
50 por la General Motors para usar en un IBM 701. Este concepto fue refinado
posteriormente e implementado en un IBM 704 por una serie de clientes de IBM. A
principios de los 60, un conjunto de constructores ya habían desarrollado sistemas
operativos por lotes para sus computadores. IBSYS, el sistema operativo de IBM
para los computadores 7090/7094, es particularmente notable por su amplia
influencia en otros sistemas.
La idea central que está detrás del esquema sencillo de proceso por lotes es el
uso de un elemento de software conocido como monitor. Con el uso de esta clase
de sistema operativo, los usuarios ya no tenían acceso directo a la máquina. En su
lugar, el usuario debía entregar los trabajos en tarjetas o en cinta al operador de la
computadora, quien agrupaba secuencial mente los trabajos por lotes y ubicaba
los lotes enteros en un dispositivo de entrada para su empleo por parte del
monitor. Cada programa se construía de modo tal que volviera al monitor al
terminar su procesamiento y, en ese momento, el monitor comenzaba a cargar
automáticamente el siguiente programa.
Para entender como funciona este esquema, se va a ver desde dos puntos de
vista: el del monitor y el del procesador. Desde el punto de vistas del monitor, él es
quien controla la secuencia de sucesos. Para que esto sea posible, gran parte del
monitor debe estar en memoria principal y disponible para su ejecución figura 1.2.
Esta parte del monitor se conoce como monitor residente. El resto del monitor
consta de utilidades y funciones comunes que se cargan como subrutinas en los
programas de los usuarios al comienzo de cualquier trabajo que las necesite. El
monitor lee los trabajos uno a uno del dispositivo de entrada (normalmente, un
lector de tarjetas o una unidad de cinta magnética). A medida que lo lee, el trabajo
actual se ubica en la zona del programa de usuario y el control pasa al trabajo.
Cuando el trabajo termina, se devuelve el control al monitor, quien lee
inmediatamente un nuevo trabajo. Los resultados de cada trabajo se imprimen y
entregan al usuario.
Considere esta secuencia desde el punto de vista del procesador. En un cierto
momento, el procesador estará ejecutando instrucciones de la zona de memoria
principal que contiene al monitor. Estas instrucciones hacen que el trabajo
siguiente sea leído en otra zona de la memoria principal. Una vez que el trabajo se
ha leído, el procesador encuentra en el monitor una instrucción de desvío que
ordena al procesador continuar la ejecución en el inicio del programa de usuario.
El procesador ejecuta entonces las instrucciones del programa de usuario hasta
que encuentre una condición de finalización de error. Cualquiera de estos dos
sucesos provocan que el procesador vaya por la instrucción siguiente del
programa monitor. De este modo, la frase “el control se le pasa al trabajo” quiere
decir simplemente que el procesador pasa a leer y a ejecutar instrucciones del

3 Lily Alejandra Medrano Mendoza


Sistemas Operativos
programa de usuario, que la frase “el control vuelve al monitor” quiere decir que el
procesador pasa ahora a leer y ejecutar las instrucciones del programa monitor.

Figura 1.1 Disposición de la memoria con un monitor residente

Debe quedar claro que es el monitor el que gestiona el problema de la


planificación. Se pone en cola un lote de trabajos y éstos son ejecutados tan
rápido como es posible, sin que haya tiempo alguno de desocupación.

¿Qué ocurre con la preparación de los trabajos? El monitor también se encarga de


esto. Con cada trabajo, se incluyen instrucciones de una forma primitiva de
lenguaje control de trabajos (JCL, Job Control Language), que es un tipo especial
de lenguaje de programación empleado para dar instrucciones al monitor. La
figura 1.2 muestra un ejemplo sencillo con entradas de trabajos desde tarjetas. En
este ejemplo, el usuario envía un programa escrito en FORTRAN junto a unos
datos que se utilizarán en el programa. Además de las tarjetas de FORTRAN y de
datos, el paquete incluye instrucciones de control de trabajos, que se denotan
mediante un signo dólar ($) al comienzo.

4 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Figura 1.2 Paquete de tarjetas para un sistema sencillo por lotes

Para ejecutar el trabajo, el monitor lee la tarjeta $FTN y carga el compilador


adecuado desde el dispositivo de almacenamiento masivo (generalmente una
cinta). El compilador traduce el programa de usuario en código objeto, que se
almacena en memoria o en el dispositivo de almacenamiento. Si se carga en
memoria, la operación es conocida como “compilar, cargar y arrancar” (compile,
load, and go). Si se almacena en cinta, entonces se requiere la tarjeta &LOAD.
Esta tarjeta es leída por el monitor, quien retoma el control después de la
operación de compilación. El monitor llama al cargador, que carga el programa
objeto en memoria en lugar del compilador y le transfiere el control. De esta
manera, un segmento grande de memoria se puede compartir entre diferentes
subsistemas, aunque en cada momento sólo uno de ellos tiene que estar presente
y ejecutándose.

Durante la ejecución del programa de usuario, cada instrucción de entrada origina


la lectura de una tarjeta de datos. La instrucción de entrada en el programa de
usuario hace que se invoque una rutina de entrada, que forma parte del sistema
operativo. La rutina de entrada se asegura de que el programa de usuario no ha
leído accidentalmente una tarjeta JCL. Si esto sucede, se produce un error y el
control se transfiere al monitor. Al terminar un trabajo, con o sin éxito, el monitor
recorre las tarjetas de entrada hasta encontrar la próxima tarjeta JCL. De este
todo, el sistema se protege contra un programa que tenga tarjetas de datos de
más o de menos. Se comprobará que el monitor o el sistema de proceso por lotes
es simplemente un programa de computadora. Se basa en la capacidad del
procesador para traer y ejecutar instrucciones desde varias zonas de la memoria

5 Lily Alejandra Medrano Mendoza


Sistemas Operativos
principal y así apoderarse y ceder el control de forma alterna. Para esto serían
convenientes algunas otras características del hardware, entre las que se
encuentran las siguientes:

Protección de memoria: Mientras el programa de usuario este ejecutándose, no


debe modificar la zona de memoria en la que está el monitor. Si se hace un intento
tal, el hardware del procesador deberá detectar el error y transferir el control al
monitor. El monitor abortara entonces el trabajo, imprimirá el mensaje de error y
cargará el siguiente trabajo.

Temporizador: Se utiliza un temporizador para impedir que un solo trabajo


monopolice el sistema. El temporizador se lanza al comenzar cada trabajo. Si
expira el tiempo, se producirá una interrupción y el control volverá al monitor.

Instrucciones Privilegiadas: Ciertas instrucciones son consideradas como


privilegiadas y pueden ser ejecutadas sólo por el monitor. Si el procesador
encuentra una instrucción tal, cuando está ejecutando el programa del usuario, se
producirá una interrupción de error. Entre las instrucciones privilegiadas se
encuentran las instrucciones de E/S, de forma que el monitor retenga el control de
todos los dispositivos de E/S. Esto impide por ejemplo, que un programa de
usuario lea accidentalmente instrucciones de control que son del trabajo siguiente.
Si un programa de usuario desea realizar una E/S, debe solicitar al monitor que
haga la operación por él. Si el procesador encuentra una instrucción privilegiada
cuando esta ejecutando un programa de usuario, el hardware del procesador la
considera como un error y transfiere el control al monitor.

Interrupciones: los primeros modelos de computadores no tenían esta


capacidad. Esta característica aporta al sistema operativo más flexibilidad para
ceder y retomar el control de los programas usuarios.

Naturalmente se puede construir un sistema operativo sin esta característica, pero


los fabricantes de computadores comprobaron rápidamente que los resultados
eran caóticos y, por tanto, incluso los sistemas operativos por lotes más primitivos
ya disponían de esta características en el hardware. Por otro lado, hay que decir
que el sistema operativo más utilizado del mundo, el MS-DOS, no dispone de
protección de memoria ni de instrucciones privilegiadas de E/S. Sin embargo,
como este sistema está destinado a computadoras personales de un solo usuario,
los problemas que se puedan originar son menos graves.

En un sistema operativo por lotes, el tiempo de máquina se reparte entre la


ejecución de programas de usuarios y la ejecución del monitor. Así se tienen dos
pérdidas: se entrega al monitor cierta cantidad de memoria principal y éste
consume cierto tiempo de la máquina. Ambas pérdidas son una forma de
sobrecarga. Aún con esta sobrecarga, los sistemas operativos sencillos por lotes
mejoran el uso de la computadora.

6 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Sistemas por lotes multiprogramados

Aún con el secuenciamiento automático de los trabajos ofrecido por un sistema


operativo sencillo por lotes, el procesador esta desocupado a menudo. El
problema es que los dispositivos de E/S son lentos comparados con el
procesador. La figura 1.3 detalla un cálculo representativo. Los números
corresponden a un programa que procesa un archivo de registros y ejecuta, en
promedio, 100 instrucciones de máquina por cada registro. En este ejemplo, la
computadora gasta más del 96% del tiempo esperado a que los dispositivos de
E/S terminen de transferir sus datos. La figura 1.4ª ilustra esta situación. El
procesador gasta parte del tiempo ejecutando hasta que encuentra una instrucción
de E/S. Entonces debe esperar a que concluya la instrucción de E/S antes de
continuar.

Leer un registro 0,0015 segundos


Ejecutar 100 instrucciones 0,0001 segundos
Escribir un registro 0,0015 segundos

TOTAL 0,0031 segundos


Porcentaje de utilización de la CPU = 0,0001/0,0031 = 0,032 = 3,2%

Figura 1.3 Ejemplo de utilización del sistema

Esta ineficiencia no es necesaria. Se sabe que hay memoria suficiente para


almacenar el sistema operativo (el monitor residente) y un programa de usuario.
Supóngase que hay espacio suficiente para el sistema operativo y dos programas
de usuario. Ahora, cuando un trabajo necesite esperar una E/S, el procesador
puede cambiar al otro trabajo, que probablemente no estará esperando a la E/S
(figura 1.4b). Además, se podría ampliar la memoria para almacenar tres, cuatro o
más programas y conmutar entre todos ellos (figura 1.4c). Este proceso es
conocido como multiprogramación multitarea. Este es el punto central de los
sistemas operativos modernos.

7 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Figura 1.4 Multiprogramación

Sistemas de tiempo compartido

Con el uso de multiprogramación, el tratamiento por lotes puede llegar a ser


bastante eficiente. Sin embargo, para muchas tareas, es conveniente suministrar
un modo en que el usuario interactúe con la computadora. De hecho, para algunos
trabajos, tales como el proceso de transacciones, este modo interactivo es
fundamental.

8 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Hoy en día, los requisitos de un servicio de computación interactiva pueden y
suelen llevarse a cabo con el empleo de una computadora dedicada. Esta opción
no estaba disponible en los años 60, cuando la mayoría de los computadores eran
grandes y costosas. En su lugar, se desarrollaron las técnicas de tiempo
compartido.

Al igual que la multiprogramación permite al procesador manejar varias tareas por


lotes al mismo tiempo, la multiprogramación puede también utilizarse para manejar
varias tareas interactivas. En este último caso, la técnica se conoce como tiempo
compartido, por que refleja el hecho de que el tiempo del procesador es
compartido entre los diversos usuarios. La técnica básica de un sistema de tiempo
compartido es tener varios usuarios utilizando simultáneamente el sistema
mediante terminales, mediante que el sistema operativo intercala la ejecución de
cada programa de usuario en ráfagas cortas de cómputo o quantum. De esta
manera si hay N usuarios que solicitan servicio a la vez, cada usuario solo
dispondrá, en medio, de 1/N de la atención efectiva de la computadora, sin contar
con la sobrecarga del sistema operativo. Sin embargo, dado el tiempo de reacción
relativamente lento que tiene el ser humano, el tiempo de respuesta en un sistema
correctamente diseñado debería ser comparable al de una computadora dedicada.
Tanto la multiprogramación por lotes como el tiempo compartido utilizan
multiprogramación. Las diferencias básicas se enumeran en la tabla 1.1.

Tabla 1.1 Multiprogramación por lotes frente a tiempo compartido

9 Lily Alejandra Medrano Mendoza


Sistemas Operativos

1.3 HARDWARE, SOFTWARE Y FIRMWARE

HARDWARE
El hardware consiste en los dispositivos de un sistema de cómputo: su
procesador, sus almacenamientos, sus dispositivos de entrada/salida y sus
conexiones de comunicación.

SOFTWARE
El software se compone de los programas con instrucciones en lenguaje de
máquina y los datos que son interpretados por el hardware. Algunos tipos
comunes de software son los compiladores, ensambladores, cargadores, editores
de enlace, cargadores de enlace, programas de aplicación, sistemas manejadores
de base de datos, sistemas de comunicación de datos y sistemas operativos.
El software esta constituido por los programas de instrucciones y los datos que
definen para el hardware los algoritmos de resolución de problemas. Los sistemas
operativos y otro software de sistemas son proporcionados generalmente por los
proveedores de hardware. La gran mayoría del software de aplicación es
proporcionada por proveedores independientes de software.

FIRMWARE
El firmware consiste en programas ejecutables almacenados en un circuito
integrado programable de sólo lectura (PROM).
Instrucción o programa informativo (tal como una microprograma) de uso frecuente
que se encuentra almacenado en la ROM, en lugar de estar incluido en el software
básico. Se utiliza a menudo en computadoras que controlan procesos de
producción.
Firmware, en general, software de sistema guardado de manera permanente en la
memoria de solo lectura (ROM) o en otra parte de la circuiteria de la computadora,
como en los chips del sistema básico de entrada-salida (BIOS) de las
computadoras compatibles con la PC de IBM.

10 Lily Alejandra Medrano Mendoza


Sistemas Operativos

1.4 ESTRUCTURA DE UN SISTEMA OPERATIVO

El esquema que suele usarse para el estudio de los sistemas operativos recibe el
nombre de “modelo de cebolla”, debido a que esta formado por capas
concéntricas al rededor del núcleo (ver figura 1.5). La parte interna del conjunto
jerárquico de programas que forman un sistema operativo recibe el nombre de
núcleo o kernel. Las otras capas se encargan del manejo de la memoria, el
procesador, los dispositivos de E/S y los archivos.

Figura 1.5 Un modelo de estudio para los sistemas operativos

11 Lily Alejandra Medrano Mendoza


Sistemas Operativos
TIPOS DE SISTEMAS OPERATIVOS

Sistemas Operativos por su Estructura

Según [Alcal92], se deben observar dos tipos de requisitos cuando se construye


un sistema operativo, los cuales son:

Requisitos de usuario: Sistema fácil de usar y de aprender, seguro, rápido y


adecuado al uso al que se le quiere destinar.

Requisitos del software: Donde se engloban aspectos como el mantenimiento,


forma de operación, restricciones de uso, eficiencia, tolerancia frente a los errores
y flexibilidad.

A continuación se describen las distintas estructuras que presentan los actuales


sistemas operativos para satisfacer las necesidades que de ellos se quieren
obtener.

Estructura monolítica.

Es la estructura de los primeros sistemas operativos constituídos


fundamentalmente por un solo programa compuesto de un conjunto de rutinas
entrelazadas de tal forma que cada una puede llamar a cualquier otra (Ver Fig. 2).
Las características fundamentales de este tipo de estructura son:

Construcción del programa final a base de módulos compilados separadamente


que se unen a través del ligador.

Buena definición de parámetros de enlace entre las distintas rutinas existentes,


que puede provocar mucho acoplamiento.

Carecen de protecciones y privilegios al entrar a rutinas que manejan diferentes


aspectos de los recursos de la computadora, como memoria, disco, etc.

Generalmente están hechos a medida, por lo que son eficientes y rápidos en su


ejecución y gestión, pero por lo mismo carecen de flexibilidad para soportar
diferentes ambientes de trabajo o tipos de aplicaciones.

12 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Estructura jerárquica.

A medida que fueron creciendo las necesidades de los usuarios y se


perfeccionaron los sistemas, se hizo necesaria una mayor organización del
software, del sistema operativo, donde una parte del sistema contenía subpartes y
esto organizado en forma de niveles.

Se dividió el sistema operativo en pequeñas partes, de tal forma que cada una de
ellas estuviera perfectamente definida y con un claro interface con el resto de
elementos.

Se constituyó una estructura jerárquica o de niveles en los sistemas operativos, el


primero de los cuales fue denominado THE (Technische Hogeschool, Eindhoven),

En la estructura anterior se basan prácticamente la mayoría de los sistemas


operativos actuales. Otra forma de ver este tipo de sistema es la denominada de
anillos concéntricos o "rings" (Ver Fig. 4).

13 Lily Alejandra Medrano Mendoza


Sistemas Operativos

En el sistema de anillos, cada uno tiene una apertura, conocida como puerta o
trampa (trap), por donde pueden entrar las llamadas de las capas inferiores. De
esta forma, las zonas más internas del sistema operativo o núcleo del sistema
estarán más protegidas de accesos indeseados desde las capas más externas.
Las capas más internas serán, por tanto, más privilegiadas que las externas.

Máquina Virtual.

Se trata de un tipo de sistemas operativos que presentan una interface a cada


proceso, mostrando una máquina que parece idéntica a la máquina real
subyacente. Estos sistemas operativos separan dos conceptos que suelen estar
unidos en el resto de sistemas: la multiprogramación y la máquina extendida. El
objetivo de los sistemas operativos de máquina virtual es el de integrar distintos
sistemas operativos dando la sensación de ser varias máquinas diferentes.

El núcleo de estos sistemas operativos se denomina monitor virtual y tiene como


misión llevar a cabo la multiprogramación, presentando a los niveles superiores
tantas máquinas virtuales como se soliciten. Estas máquinas virtuales no son
máquinas extendidas, sino una réplica de la máquina real, de manera que en cada
una de ellas se pueda ejecutar un sistema operativo diferente, que será el que
ofrezca la máquina extendida al usuario (Ver Fig. 5).

14 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Cliente-servidor ( Microkernel)

El tipo más reciente de sistemas operativos es el denominado Cliente-servidor,


que puede ser ejecutado en la mayoría de las computadoras, ya sean grandes o
pequeñas.

Este sistema sirve para toda clase de aplicaciones por tanto, es de propósito
general y cumple con las mismas actividades que los sistemas operativos
convencionales.

El núcleo tiene como misión establecer la comunicación entre los clientes y los
servidores. Los procesos pueden ser tanto servidores como clientes. Por ejemplo,
un programa de aplicación normal es un cliente que llama al servidor
correspondiente para acceder a un archivo o realizar una operación de
entrada/salida sobre un dispositivo concreto. A su vez, un proceso cliente puede
actuar como servidor para otro." [Alcal92]. Este paradigma ofrece gran flexibilidad
en cuanto a los servicios posibles en el sistema final, ya que el núcleo provee
solamente funciones muy básicas de memoria, entrada/salida, archivos y
procesos, dejando a los servidores proveer la mayoría que el usuario final o
programador puede usar. Estos servidores deben tener mecanismos de seguridad
y protección que, a su vez, serán filtrados por el núcleo que controla el hardware.
Actualmente se está trabajando en una versión de UNIX que contempla en su
diseño este paradigma.

Sistemas Operativos por Servicios

Esta clasificación es la más comúnmente usada y conocida desde el punto de


vista del usuario final. Esta clasificación se comprende fácilmente con el cuadro
sinóptico que a continuación se muestra en la Fig. 6.

15 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Monousuarios

Los sistemas operativos monousuarios son aquéllos que soportan a un usuario a


la vez, sin importar el número de procesadores que tenga la computadora o el
número de procesos o tareas que el usuario pueda ejecutar en un mismo instante
de tiempo. Las computadoras personales típicamente se han clasificado en este
renglón.

Multiusuarios

Los sistemas operativos multiusuarios son capaces de dar servicio a más de un


usuario a la vez, ya sea por medio de varias terminales conectadas a la
computadora o por medio de sesiones remotas en una red de comunicaciones. No
importa el número de procesadores en la máquina ni el número de procesos que
cada usuario puede ejecutar simultáneamente.

Monotareas

Los sistemas monotarea son aquellos que sólo permiten una tarea a la vez por
usuario. Puede darse el caso de un sistema multiusuario y monotarea, en el cual

16 Lily Alejandra Medrano Mendoza


Sistemas Operativos
se admiten varios usuarios al mismo tiempo pero cada uno de ellos puede estar
haciendo solo una tarea a la vez.

Multitareas

Un sistema operativo multitarea es aquél que le permite al usuario estar realizando


varias labores al mismo tiempo. Por ejemplo, puede estar editando el código
fuente de un programa durante su depuración mientras compila otro programa, a
la vez que está recibiendo correo electrónico en un proceso en background. Es
común encontrar en ellos interfaces gráficas orientadas al uso de menús y el
ratón, lo cual permite un rápido intercambio entre las tareas para el usuario,
mejorando su productividad.

Uniproceso

Un sistema operativo uniproceso es aquél que es capaz de manejar solamente un


procesador de la computadora, de manera que si la computadora tuviese más de
uno le sería inútil. El ejemplo más típico de este tipo de sistemas es el DOS y
MacOS.

Multiproceso

Un sistema operativo multiproceso se refiere al número de procesadores del


sistema, que es más de uno y éste es capaz de usarlos todos para distribuir su
carga de trabajo. Generalmente estos sistemas trabajan de dos formas: simétrica
o asimétricamente. Cuando se trabaja de manera asimétrica, el sistema operativo
selecciona a uno de los procesadores el cual jugará el papel de procesador
maestro y servirá como pivote para distribuir la carga a los demás procesadores,
que reciben el nombre de esclavos. Cuando se trabaja de manera simétrica, los
procesos o partes de ellos (threads) son enviados indistintamente a cualesquiera
de los procesadores disponibles, teniendo, teóricamente, una mejor distribución y
equilibrio en la carga de trabajo bajo este esquema.

Se dice que un thread es la parte activa en memoria y corriendo de un proceso, lo


cual puede consistir de un área de memoria, un conjunto de registros con valores
específicos, la pila y otros valores de contexto. Un aspecto importante a considerar
en estos sistemas es la forma de crear aplicaciones para aprovechar los varios
procesadores. Existen aplicaciones que fueron hechas para correr en sistemas
monoproceso que no toman ninguna ventaja a menos que el sistema operativo o
el compilador detecte secciones de código paralelizable, los cuales son ejecutados
al mismo tiempo en procesadores diferentes. Por otro lado, el programador puede
modificar sus algoritmos y aprovechar por sí mismo esta facilidad, pero esta última
opción las más de las veces es costosa en horas hombre y muy tediosa, obligando
al programador a ocupar tanto o más tiempo a la paralelización que a elaborar el
algoritmo inicial.

17 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Sistemas Operativos por la Forma de Ofrecer sus Servicios

Esta clasificación también se refiere a una visión externa, que en este caso se
refiere a la del usuario, el cómo accesa los servicios. Bajo esta clasificación se
pueden detectar dos tipos principales: sistemas operativos de red y sistemas
operativos distribuidos.

Sistemas Operativos de Red

Los sistemas operativos de red se definen como aquellos que tiene la capacidad
de interactuar con sistemas operativos en otras computadoras por medio de un
medio de transmisión con el objeto de intercambiar información, transferir
archivos, ejecutar comandos remotos y un sin fin de otras actividades. El punto
crucial de estos sistemas es que el usuario debe saber la sintaxis de un conjunto
de comandos o llamadas al sistema para ejecutar estas operaciones, además de
la ubicación de los recursos que desee accesar. Por ejemplo, si un usuario en la
computadora hidalgo necesita el archivo matriz.pas que se localiza en el
directorio /software/código en la computadora morelos bajo el sistema operativo
UNIX, dicho usuario podría copiarlo a través de la red con los comandos
siguientes: hidalgo% hidalgo% rcp morelos:/software/código/matriz.pas . hidalgo%
En este caso, el comando rcp que significa "remote copy" trae el archivo indicado
de la computadora morelos y lo coloca en el directorio donde se ejecutó el
mencionado comando. Lo importante es hacer ver que el usuario puede accesar y
compartir muchos recursos.

Sistemas Operativos Distribuidos

Los sistemas operativos distribuidos abarcan los servicios de los de red, logrando
integrar recursos ( impresoras, unidades de respaldo, memoria, procesos,
unidades centrales de proceso ) en una sola máquina virtual que el usuario accesa
en forma transparente. Es decir, ahora el usuario ya no necesita saber la ubicación
de los recursos, sino que los conoce por nombre y simplemente los usa como si
todos ellos fuesen locales a su lugar de trabajo habitual. Todo lo anterior es el
marco teórico de lo que se desearía tener como sistema operativo distribuido, pero
en la realidad no se ha conseguido crear uno del todo, por la complejidad que
suponen: distribuir los procesos en las varias unidades de procesamiento,
reintegrar sub-resultados, resolver problemas de concurrencia y paralelismo,
recuperarse de fallas de algunos recursos distribuídos y consolidar la protección y
seguridad entre los diferentes componentes del sistema y los usuarios. [Tan92].
Los avances tecnológicos en las redes de área local y la creación de
microprocesadores de 32 y 64 bits lograron que computadoras mas o menos
baratas tuvieran el suficiente poder en forma autónoma para desafiar en cierto
grado a los mainframes, y a la vez se dio la posibilidad de intercomunicarlas,
sugiriendo la oportunidad de partir procesos muy pesados en cálculo en unidades
más pequeñas y distribuirlas en los varios microprocesadores para luego reunir los
sub-resultados, creando así una máquina virtual en la red que exceda en poder a
un mainframe. El sistema integrador de los microprocesadores que hacer ver a las

18 Lily Alejandra Medrano Mendoza


Sistemas Operativos
varias memorias, procesadores, y todos los demás recursos como una sola
entidad en forma transparente se le llama sistema operativo distribuído. Las
razones para crear o adoptar sistemas distribuídos se dan por dos razones
principales: por necesidad ( debido a que los problemas a resolver son
inherentemente distribuídos ) o porque se desea tener más confiabilidad y
disponibilidad de recursos. En el primer caso tenemos, por ejemplo, el control de
los cajeros automáticos en diferentes estados de la república. Ahí no es posible ni
eficiente mantener un control centralizado, es más, no existe capacidad de
cómputo y de entrada/salida para dar servicio a los millones de operaciones por
minuto. En el segundo caso, supóngase que se tienen en una gran empresa varios
grupos de trabajo, cada uno necesita almacenar grandes cantidades de
información en disco duro con una alta confiabilidad y disponibilidad. La solución
puede ser que para cada grupo de trabajo se asigne una partición de disco duro
en servidores diferentes, de manera que si uno de los servidores falla, no se deje
dar el servicio a todos, sino sólo a unos cuantos y, más aún, se podría tener un
sistema con discos en espejo ( mirror ) a través de la red, de manera que si un
servidor se cae, el servidor en espejo continúa trabajando y el usuario ni cuenta se
da de estas fallas, es decir, obtiene acceso a recursos en forma transparente.

Otra clasificación de los Sistemas Operativos.

Sistemas Operativos por lotes.

Algunos ejemplos de Sistemas Operativos por lotes exitosos son el SCOPE, del
DC6600, el cual está orientado a procesamiento científico pesado, y el EXEC II
para el UNIVAC 1107, orientado a procesamiento académico.

Algunas otras características con que cuentan los Sistemas Operativos por lotes
son:

 Requiere que el programa, datos y órdenes al sistema sean remitidos todos


juntos en forma de lote.
 Permiten poca o ninguna interacción usuario/programa en ejecución.
 Mayor potencial de utilización de recursos que procesamiento serial simple
en sistemas multiusuarios.
 No conveniente para desarrollo de programas por bajo tiempo de retorno y
depuración fuera de línea.
 Conveniente para programas de largos tiempos de ejecución (ej, análisis
estadísticos, nóminas de personal, etc.)
 Se encuentra en muchos computadores personales combinados con
procesamiento serial.
 Planificación del procesador sencilla, típicamente procesados en orden de
llegada.
 Planificación de memoria sencilla,  generalmente se divide en dos: parte
residente del S. O. y programas transitorios.
 No requieren gestión crítica de dispositivos en el tiempo.

19 Lily Alejandra Medrano Mendoza


Sistemas Operativos
 Suelen proporcionar gestión sencilla de manejo de archivos: se requiere
poca protección y ningún control de concurrencia para el acceso.

Sistemas Operativos de tiempo real.

Los Sistemas Operativos de tiempo real son aquellos en los cuales no tiene
importancia el usuario, sino los procesos. Por lo general, están subutilizados sus
recursos con la finalidad de prestar atención a los procesos en el momento que lo
requieran. se utilizan en entornos donde son procesados un gran número de
sucesos o eventos.

Muchos Sistemas Operativos de tiempo real son construidos para aplicaciones


muy específicas como control de tráfico aéreo, bolsas de valores, control de
refinerías, control de laminadores. También en el ramo automovilístico y de la
electrónica de consumo, las aplicaciones de tiempo real están creciendo muy
rápidamente. Otros campos de aplicación de los Sistemas Operativos de tiempo
real son los siguientes:

 Control de trenes.
 Telecomunicaciones.
 Sistemas de fabricación integrada.
 Producción y distribución de energía eléctrica.
 Control de edificios.
 Sistemas multimedia.

Algunos ejemplos de Sistemas Operativos de tiempo real son: VxWorks, Solaris,


Lyns OS y Spectra. Los Sistemas Operativos de tiempo real, cuentan con las
siguientes características:

 Se dan en entornos en donde deben ser aceptados y procesados gran


cantidad de sucesos, la mayoría externos al sistema computacional, en
breve tiempo o dentro de ciertos plazos.
 Se utilizan en control industrial, conmutación telefónica, control de vuelo,
simulaciones en tiempo real., aplicaciones militares, etc.
 Objetivo es proporcionar rápidos tiempos de respuesta.
 Procesa ráfagas de miles de interrupciones por segundo sin perder un solo
suceso.
 Proceso se activa tras ocurrencia de suceso, mediante interrupción.
 Proceso de mayor  prioridad expropia recursos.
 Por tanto generalmente se utiliza planificación expropiativa basada en
prioridades.
 Gestión de memoria menos exigente que tiempo compartido, usualmente
procesos son residentes permanentes en memoria.
 Población de procesos estática en gran medida.
 Poco movimiento de programas entre almacenamiento secundario y
memoria.

20 Lily Alejandra Medrano Mendoza


Sistemas Operativos
 Gestión de archivos se orienta  más a velocidad de acceso que a utilización
eficiente del recurso.

Sistemas Operativos de multiprogramación (o Sistemas Operativos de


multitarea).

Se distinguen por sus habilidades para poder soportar la ejecución de dos o más
trabajos activos (que se están ejecutado) al mismo tiempo. Esto trae como
resultado que la Unidad Central de Procesamiento (UCP) siempre tenga alguna
tarea que ejecutar, aprovechando al máximo su utilización.

Su objetivo es tener a varias tareas en la memoria principal, de manera que cada


uno está usando el procesador, o un procesador distinto, es decir, involucra
máquinas con más de una UCP.

Sistemas Operativos como UNIX, Windows 95, Windows 98, Windows NT, MAC-
OS, OS/2, soportan la multitarea.

Las características de un Sistema Operativo de multiprogramación o multitarea


son las siguientes:

 Mejora productividad del sistema y utilización de recursos.


 Multiplexa recursos entre varios programas.
 Generalmente soportan múltiples usuarios (multiusuarios).
 Proporcionan facilidades para mantener el entorno de usuarios individuales.
 Requieren validación de usuario para seguridad y protección.
 Proporcionan contabilidad del uso de los recursos por parte de los usuarios.
 Multitarea sin soprte multiusuario se encuentra en algunos computadores
personales o en sistemas de tiempo real.
 Sistemas multiprocesadores son sistemas multitareas por definición  ya
que  soportan la ejecución simultánea de múltiples tareas sobre diferentes
procesadores.
 En general, los sistemas de multiprogramación se caracterizan por tener
múltiples programas activos compitiendo por los recursos del sistema:
procesador, memoria, dispositivos periféricos.

Sistemas Operativos de tiempo compartido.

Permiten la simulación de que el sistema y sus recursos son todos para cada
usuarios. El usuario hace una petición a la computadora, esta la procesa tan
pronto como le es posible, y la respuesta aparecerá en la terminal del usuario.

Los principales recursos del sistema, el procesador, la memoria, dispositivos de


E/S, son continuamente utilizados entre los diversos usuarios, dando a cada
usuario la ilusión de que tiene el sistema dedicado para sí mismo. Esto trae como

21 Lily Alejandra Medrano Mendoza


Sistemas Operativos
consecuencia una gran carga de trabajo al Sistema Operativo, principalmente en
la administración de memoria principal y secundaria.

Ejemplos de Sistemas Operativos de tiempo compartido son Multics, OS/360 y


DEC-10.

Características de los Sistemas Operativos de tiempo compartido:

 Populares representantes de sistemas multiprogramados multiusuario, ej:


sistemas de diseño asistido por computador, procesamiento de texto, etc.
 Dan la ilusión de que cada usuario tiene una máquina para  sí.
 Mayoría utilizan algoritmo de reparto circular.
 Programas se ejecutan con prioridad rotatoria que se incrementa con la
espera y disminuye después de concedido el servicio.
 Evitan monopolización del sistema asignando tiempos de procesador (time
slot).
 Gestión de memoria proporciona protección a programas residentes.
 Gestión de archivo  debe proporcionar protección y control de acceso
debido a que  pueden existir múltiples usuarios accesando un mismo
archivos.

Sistemas Operativos distribuidos.

Permiten distribuir trabajos, tareas o procesos, entre un conjunto de procesadores.


Puede ser que este conjunto de procesadores esté en un equipo o en diferentes,
en este caso es transparente para el usuario. Existen dos esquemas básicos de
éstos. Un sistema fuertemente acoplado es a es aquel que comparte la memoria y
un reloj global, cuyos tiempos de acceso son similares para todos los
procesadores. En un sistema débilmente acoplado los procesadores no comparten
ni memoria ni reloj, ya que cada uno cuenta con su memoria local.

Los sistemas distribuidos deben de ser muy confiables, ya que si un componente


del sistema se compone otro componente debe de ser capaz de reemplazarlo.

Entre los diferentes Sistemas Operativos distribuidos que existen tenemos los
siguientes: Sprite, Solaris-MC, Mach, Chorus, Spring, Amoeba, Taos, etc.

Características de los Sistemas Operativos distribuidos:

 Colección de sistemas autónomos capaces de comunicación y cooperación


mediante interconexiones hardware y software .
 Gobierna operación de un S. C. y proporciona abstracción de máquina
virtual a los usuarios.
 Objetivo clave es la transparencia.
 Generalmente proporcionan medios para la compartición global de
recursos.

22 Lily Alejandra Medrano Mendoza


Sistemas Operativos
 Servicios añadidos: denominación global, sistemas de archivos distribuidos,
facilidades para distribución de cálculos (a través de comunicación de
procesos internodos, llamadas a procedimientos remotos, etc.).

Sistemas Operativos de red.

Son aquellos sistemas que mantienen a dos o más computadoras unidas a través
de algún medio de comunicación (físico o no), con el objetivo primordial de poder
compartir los diferentes recursos y la información del sistema.

El primer Sistema Operativo de red estaba enfocado a equipos con un procesador


Motorola 68000, pasando posteriormente a procesadores Intel como Novell
Netware.

Los Sistemas Operativos de red mas ampliamente usados son: Novell Netware,
Personal Netware, LAN Manager, Windows NT Server, UNIX, LANtastic.

El Núcleo del Sistema Operativo

El “núcleo” del Sistema Operativo controla todas las operaciones que implican
procesos y representa solo una pequeña porción del código de todo el Sistema
Operativo pero es de amplio uso.

Generalmente permanece en el almacenamiento primario.

El proceso de interrupciones se incluye en el núcleo ya que debe ser rápido


(especialmente en sistemas multiusuario), para optimizar el uso de los recursos
del sistema y proveer tiempos de respuesta aceptables a los usuarios interactivos.

El núcleo inhabilita las interrupciones mientras responde a una interrupción. Las


interrupciones son habilitadas de nuevo después de completar el proceso de una
interrupción.

El núcleo del Sistema Operativo generalmente realiza las siguientes funciones:


 

 Manipulación de interrupciones.
 Creación y destrucción de procesos.
 Cambio de estados de procesos.
 Despacho.
 Suspensión y reanudación de procesos.
 Sincronización de procesos.
 Comunicación entre procesos.
 Manipulación de bloques de control de proceso.
 Soporte de las actividades de Entrada / Salida.
 Soporte de la asignación y desasignación de almacenamiento.

23 Lily Alejandra Medrano Mendoza


Sistemas Operativos
 Soporte del sistema de archivos.
 Soporte de un mecanismo de llamada / regreso al procedimiento.
 Soporte de ciertas funciones contables (estadísticas) del sistema.

El kernel o núcleo del sistema operativo es la parte fundamental de un sistema


operativo. Es el software responsable de facilitar a los distintos programas acceso
seguro al hw de la computadora o en forma más básica, es la encargada de
gestionar los recursos, a través de los servicios de llamada al sistema. Como hay
muchos programas y el acceso al hw es limitado, el núcleo también se encarga de
decidir qué programa podrá hacer uso de un dispositivo de hw y durante cuánto
tiempo, lo que se conoce como multiplexado.

Hay cuatro grandes tipos de núcleos:

1. Los núcleos monolíticos, facilitan abstracciones del hw subyacente


realmente potentes y variadas.
2. Los micronúcleos ( o microkernel) proporcionan un pequeño conjunto de
abstracciones simples del hw, y usan las aplicaciones llamadas servidores
para ofrecer mayor funcionalidad. Ejemplo: Minix, Mac Os.
3. Los híbridos (micronúcleos modificados) son muy parecidos a los
micronúcleos puros, excepto porque incluyen código adicional en el espacio
de núcleo para que se ejecute más rápidamente.
4. Los exonúcleos, no facilitan ninguna abstracción, pero permiten el uso de
bibliotecas que proporcionan mayor funcionalidad gracias al acceso directo
o casi directo al hw.

MICRONÚCLEOS.

El enfoque micronúcleo consiste en definir una abstracción muy simple sobre el


hw, con un conjunto de primitivas o llamadas al sistema que implementan
servicios del sistema operativo mínimos, como la gestión de hilos, el espacio
de direccionamiento y la comunicación entre procesos. Son modulares y
simplifican la estructura y diseño del núcleo. Ejemplo: si un servidor falla no se
colgará el sistema entero y se podrá reiniciar un módulo independientemente
del resto.

El objetivo principal es la separación de la implementación de los servicios


básicos y de la política de funcionamiento del sistema.
Los micronúcleos modernos permiten cargar módulos, es decir, un módulo
cargable es aquel código que se compila por separado y luego lo incorpora al
núcleo.

24 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Algunos ejemplos de micronúcleos:

AIX
La familia de micronúcleos L4
El micronúcleo Mach, usado en GNU Hurd y en Mac OS X
Minix
MorphOS
QNX
RadiOS
VSTa

NÚCLEOS MONOLÍTICOS EN CONTRAPOSICIÓN A MICRONÚCLEOS.

Frecuentemente se prefieren los núcleos monolíticos frente a los micronúcleos


debido al menor nivel de complejidad que comporta el tratar con todo el código de
control del sistema en un solo espacio de direccionamiento.

Los núcleos monolítico suelen ser más fáciles de diseñar correctamente, y por lo
tanto pueden crecer más rápidamente que un sistema basado en micronúcleo,
pero hay casos de éxito en ambos bandos. Los micronúcleos suelen usarse en
robótica embebida o computadoras médicas, ya que la mayoría de los
componentes del sistema operativo residen en su propio espacio de memoria
privado y protegido. Esto no sería posible con los núcleos monolíticos, ni siquiera
con los modernos que permiten cargar módulos.

QNX es un sistema operativo que ha estado disponible desde principios de los


años 1980, y tien un diseño muy minimalista. Este sistema ha conseguido llegar a
las metas del paradigma del micronúcleo con mucho más éxito que Mach. Se usa
en situaciones en que no se puede permitir que haya fallos de sw, lo que incluye
desde brazos robóticas en naves espaciales, hasta máquinas que pulen cristal
donde un pequeño error podría costar centenas de miles de euros.

NÚCLEOS HÍBRIDOS ( MICRONÚCLEOS MODIFICADOS)

Los núcleos híbridos fundamentalmente son micronúcleos que tiene algo de


código ni esencial en espacio de núcleo para que éste se ejecute más rápido de lo
que haría si estuviera en espacio de usuario. La mayoría de los sistemas
operativos modernos pertenecen a esta categoría, siendo el más popular Microsoft
Windows, XNU, el núcleo de Mac OS S, también es un micronúcleo modificado,
debido a la inclusión de código del núcleo de FreeBSD en el núcleo basado en
Mach. DragonFly BSD es el primer sistema BSD que adopta la arquitectura de
núcleo híbrido sin basarse en Mach.

Algunos ejemplos de núcleos híbridos son:

Microsoft Windows NT, usado en todos los sistemas que usan el código
base de Windows NT

25 Lily Alejandra Medrano Mendoza


Sistemas Operativos
XNU
DragonFly BSD
ReactOS

Híbrido implica que el núcleo en cuestión usa conceptos de arquitectura o


mecanismos tanto del diseño monolítico como del micronúcleo, específicamente el
paso de mensajes y la migración de código no esencial hacia el espacio de
usuario, pero manteniendo cierto código no esencial en el propio núcleo por
razones de rendimiento.

EXONÚCLEOS

Los exonúcleos, también conocidos como sistemas operativos verticalmente


estructurados, representan una aproximación radicalmente nueva al diseño de
sistemas operativos.
Los exonúcleos son extremadamente pequeños, ya que limitan expresamente su
funcionalidad a la protección y el multiplexado( el núcleo decide qué programa
podrá hacer uso de un dispositivo de hw y durante cuánto tiempo )de los recursos.
Debido a que el exonúcleo sólo proporciona una interfaz al hw de muy bajo nivel,
careciendo de todas las funcionalidades de alto nivel de otros sistemas operativos,
éste es complementado por una biblioteca de sistema operativo. Esta biblioteca se
comunica con el exonúcleo subyacente, y facilita a los programadores de
aplicaciones las funcionalidades que son comunes en otros sistemas operativos.
Algunas implicaciones teóricas de un sistema exonúcleo son que es posible tener
distintos tipos de sistemas operativo ( por ejemplo, Windows y Unix) ejecutándose
en un solo exonúcleo, y que los desarrolladores pueden elegir prescindir de o
incrementar funcionalidades por motivos de rendimiento.
Actualmente, los diseños de los exonúcleos están fundamentalmente en fase de
estudio y no se usan en ningún sistema popular. Un concepto de sistema
operativo es Nemesis, creado por la Universidad de Cambridge, la Universidad de
Glasgow, Citrix Systems ye el Instituto Sueco de Informática. El MIT también ha
diseñado algunos sistemas basados en exonúcleos.

26 Lily Alejandra Medrano Mendoza


Sistemas Operativos

2. ADMINISTRACIÓN DE PROCESOS

2.1 CONCEPTOS ACERCA DE LOS PROCESOS

El término “proceso” fue utilizado por primera vez por los diseñadores del sistema
Multics en los años sesenta. Desde entonces, el término proceso, utilizado a veces
como sinónimo de tarea (task) o trabajo (job), ha tenido muchas definiciones. A
continuación se presentan algunas:

Un programa en ejecución


Una actividad asíncrona
El “espíritu animado” de un procedimiento
El “centro de control” de un procedimiento en ejecución
Lo que se manifiesta por la existencia de un “bloque de control de proceso” en
el sistema operativo
La entidad a la que se asignan los procesadores
La unidad “despachable”.

El concepto de “programa en ejecución” parece ser que se utiliza con más


frecuencia. Un programa es una entidad inanimada; sólo cuando un procesador le
“infunde vida” se convierte en la entidad “activa” que se denomina proceso.

2.2 ESTADOS DE UN PROCESO

Un proceso pasa por una serie de estados discretos. Varios eventos pueden
ocasionar que un proceso cambie de estado.
Se dice que un proceso se está ejecutando, es decir, se encuentra en estado de
ejecución, si tiene asignada la unidad central de procesamiento (CPU de aquí en
adelante). Se dice que un proceso está listo (es decir, se encuentra en estado
Listo) si pudiera utilizar una CPU en caso de haber una disponible. Un proceso
está bloqueado (es decir, se encuentra en estado bloqueado) si está esperando
que suceda algún evento (como un evento de fin de E/S, por ejemplo) antes de
poder proseguir su ejecución.
Por sencillez, se considera un sistema con una sola CPU, aunque no es difícil la
extensión a múltiples procesadores. Solamente puede haber un proceso en
ejecución a la vez, pero puede haber varios listos y varios pueden estar
bloqueados. Así pues, se forma una lista de procesos listos y otras de procesos
bloqueados. La lista de procesos listos se ordena por prioridad, de manera que el
siguiente proceso que reciba la CPU será el primero de la lista. La lista de
procesos bloqueados normalmente no está ordenada; los procesos no se
desbloquean (es decir, no pasan a ser procesos listos) en orden de prioridad, sino
que lo hacen en el orden de ocurrencia de los eventos que están esperando.

27 Lily Alejandra Medrano Mendoza


Sistemas Operativos

2.3 TRANSICIONES DE ESTADO DE LOS PROCESOS

Cuando se admite una tarea en el sistema, se crea el proceso correspondiente y


se inserta normalmente al final de la lista de procesos listos. El proceso se
desplaza poco a poco hacia el frente de la lista de procesos listos, a medida que
los procesos que se encuentran antes que él completan su turno de uso de la
CPU. Cuando el proceso llega al principio de la lista, se le asigna la CPU cuando
ésta queda disponible y entonces se dice que hay una transición de estado del
estado listo al estado de ejecución(Figura 2.1). La asignación del procesador al
primer proceso de la lista de procesos listos se denomina despacho; dicha
actividad la realiza una entidad del sistema llamada despachador. Esa transición
se indica como sigue:

despachar(nombre_del_proceso):listo? en_ejecución

Para evitar que un proceso monopolice el sistema, en forma accidental o


malintencionada, el sistema operativo utiliza un reloj de interrupción por hardware
(o cronómetro de intervalos) para que las tareas de este usuario se ejecuten
durante un intervalo específico de tiempo o quantum. Si el proceso no libera
voluntariamente la CPU antes de que expire el intervalo de tiempo, el reloj genera
una interrupción, haciendo que retome el control el sistema operativo. El sistema
operativo transforma entonces el proceso que estaba ejecutándose en un proceso
listo y procede a ejecutar el primero de los procesos de la cola de listos. Estas
transiciones de estado se indican así:

tiempo_expirado (nombre_del_proceso):en_ejecución? listo


y
despachar (nombre_del proceso): listo ? en ejecución

Los relojes sirven para mantener la hora del día, indicar la expiración de los
quantums, contabilizar el uso de los recursos, dar notificaciones a los procesos en
los momentos designados y acumular estadísticas de desempeño. Algunas
computadoras utilizan baterías para mantener funcionando los relojes aun cuando
esté apagado el sistema.

28 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Figura 2.1 Transiciones de estados de los procesos.

Si el proceso que se está ejecutando inicia una operación de E/S antes de que
expire su quantum, libera voluntariamente la CPU (es decir, el proceso se bloquea
a sí mismo esperando a que se complete la operación de E/S). Esta transición de
estado es

bloquear(nombre_del_proceso): en ejecución? Bloqueado

29 Lily Alejandra Medrano Mendoza


Sistemas Operativos
La última transición posible en este modelo de tres estados ocurre cuando se
completa una operación de E/S (o algún otro evento que espere un proceso). El
proceso realiza la transición del estado bloqueado al estado listo. La transición es

despertar (nombre_del_proceso):bloqueado? Listo

De esta forma se han definido cuatro posibles transiciones de estado:

despachar (nombre_del_proceso):listo? en_ejecución


tiempo_expirado (nombre_del_proceso):en_ejecución? listo
bloquear (nombre_del_proceso):en_ejecución? bloqueado
despertar (nombre_del_proceso):bloqueado? listo

Obsérvese que la única transición de estado iniciada por el proceso de usuario es


el bloqueo; las otras tres transiciones son iniciadas por entidades externas al
proceso.

2.4 EL BLOQUE DE CONTROL DE PROCESO

La forma en que se manifieste un proceso en un sistema operativo es mediante un


bloque de control de proceso (process control block o PCB) o un descriptor de
proceso.
El PCB es una estructura de datos que contiene información importante acerca de
un proceso, esto es, un almacén central de información que permite al sistema
operativo localizar toda la información importante acerca de un proceso. Cuando el
sistema operativo conmuta la CPU entre varios procesos activos, utiliza las áreas
de salvaguarda de los PCB para guardar la información que necesita para reiniciar
un proceso cuando éste obtenga la CPU nuevamente.
Así pues, el PCB es la entidad que define un proceso al sistema operativo. Dado
que los PCB necesitan ser manejados con eficiencia por el sistema operativo,
muchos sistemas de cómputo tienen un registro de hardware que siempre apunta
hacia el PCB del proceso que se está ejecutando. A menudo existen instrucciones
de hardware que cargan en el PCB información acerca del estado, y que la
recuperan con rapidez.

Elementos Básicos de un bloque de Control de Proceso

Identificación del Proceso


Identificadores

Los identificadores numéricos que se pueden guardar en el bloque de control de


proceso incluyen:

Identificador de este proceso


Identificador del proceso que creó a este proceso (el proceso padre)

30 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Identificador del usuario

Información de Estado del Procesador

Registros Visibles para el Usuario

Un registro visible para el usuario es aquél al que puede hacerse referencia por
medio del lenguaje máquina que ejecuta el procesador. Normalmente, existen de 8
a 32 de estos registros, aunque algunas implementaciones RISC tienen más de
100.

Registros de Control y de Estado

Hay varios registros del procesador que se emplean para controlar su


funcionamiento, Entre estos se incluyen:

Contador de programa: Contiene la dirección de la próxima instrucción a ser


tratada.

Códigosde condición: Muestran el resultado de la operación aritmética o lógica


más reciente (signo, cero, acarreo, igualdad, desbordamiento).

Información de estado: Incluye los indicadores de habilitación o inhabilitación de


interrupciones y el modo de ejecución.

Apuntadores de stack

Cada proceso tiene uno o más stacks del sistema asociados. Los stacks se
utilizan para almacenar los parámetros y las direcciones de retorno de los
procedimientos y de las llamadas al sistema. El Apuntador al stack siempre apunta
al elemento indicado por el tope.

Información de Control del Proceso


Información de Planificación y de Estado

Esta es la información que se necesita por el sistema operativo para llevar a cabo
sus funciones de planificación. Los elementos típicos de esta información son los
siguientes:

Estado del proceso: Define la disposición del proceso para ser planificado para
ejecutar (en ejecución, listo, esperando, detenido).

Prioridad:Se puede usar uno o más campos para describir la prioridad de


planificación de los procesos. En algunos sistemas se necesitan varios valores
(por omisión, actual, la más alta permitida).

31 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Información de planificación: Ésta dependerá del algoritmo de planificación
utilizado.

Como ejemplos se tienen la cantidad de tiempo que el proceso ha estado


esperando y la cantidad de tiempo que el proceso ejecutó la última vez.

Suceso:La identidad del suceso que el proceso está esperando antes de poder
reanudarse.

Estructuración de Datos

Un proceso puede estar enlazado con otros procesos en una cola, un anillo o
alguna otra estructura. Por ejemplo todos los procesos que están en estado de
espera de un nivel determinado de prioridad pueden estar enlazados en una cola.
Un proceso puede mostrar una relación padre-hijo (creador-creado) con otro
proceso. El bloque de control de proceso puede contener apuntadores a otros
procesos para dar soporte a estas estructuras.

Comunicación entre Procesos

Puede haber varios indicadores, señales y mensajes asociados con la


comunicación entre dos procesos independientes. Una parte de esta información o
toda ella se puede guardar en el bloque de control de proceso.

Información de Control del Proceso


Privilegios de los procesos

A los procesos se les otorgan privilegios en términos de la memoria a la que


pueden acceder y el tipo de instrucciones que pueden ejecutar. Además, también
se pueden aplicar privilegios al uso de los servicios y utilidades del sistema.

Gestión de Memoria

Esta sección puede incluir apuntadores a las tablas de páginas y/o segmentos que
describen la memoria virtual asignada al proceso.

Propiedad de los Recursos y Utilización

Se pueden indicar los recursos controlados por el proceso, tales como los archivos
abiertos. También se puede incluir un histórico de la utilización del procesador o
de otros recursos; esta información puede ser necesaria para el planificador.

2.5 PROCESAMIENTO DE INTERRUPCIONES

En un sistema de cómputo, una interrupción es un evento que altera la secuencia


en que el procesador ejecuta las instrucciones. La interrupción es generada por el

32 Lily Alejandra Medrano Mendoza


Sistemas Operativos
hardware del sistema de cómputo. Cuando ocurre una interrupción:

El sistema operativo toma el control (es decir, el hardware pasa el control al
sistema operativo).

El sistema operativo guarda el estado actual del proceso interrumpido en el


PCB del proceso (conmutación de contexto).

El sistema operativo aplica la transición:


bloquear (nombre_del_proceso): en_ejecución bloqueado

El manejador de interrupciones del sistema operativo analiza la interrupción y


transfiere el control a la rutina apropiada para atenderla; en muchos sistemas el
hardware se encarga de esto automáticamente.

La rutina seleccionada por el manejador de interrupciones procesa la


interrupción.

El sistema operativo aplica la transición:


despachar (nombre_del_proceso): listo en_ejecución

Cuando se ha terminado de atender el evento que generó la interrupción el


sistema operativo aplica la transición:

despertar (nombre_del_proceso): bloqueado listo

Una interrupción puede ser iniciada específicamente por un proceso en ejecución


(en cuyo caso se suele denominar trampa (trap), y se dice que está sincronizada
con la operación del proceso) o puede ser causada por algún evento que puede
estar relacionado o no con el proceso en ejecución (en cuyo caso se dice que es
asíncrona con la operación del proceso).
Una ventaja importante de las interrupciones es que son una forma económica de
llamar la atención de la CPU, de este modo no necesita escrutar constantemente
los dispositivos para ver si alguno requiere atención.
Un ejemplo simple de la diferencia de escrutinio e interrupción se puede observar
en las cocinas modernas equipadas con hornos de microondas. El cocinero puede
ajustar un reloj para que se detenga después de cierto tiempo (un ejemplo de
interrupción es el sonido que produce la alarma cuando transcurre el tiempo), o
bien, el cocinero puede mirar periódicamente a través de la ventana del horno
para ver cómo se cocina el asado (esta clase de vigilancia periódica es un ejemplo
de escrutinio).
Los sistemas orientados hacia las interrupciones pueden sobrecargarse. Si estas
llegan con mucha frecuencia, el sistema no será capaz de atenderlas. Un
controlador de humano de tráfico aéreo podría verse fácilmente abrumado si
convergieran muchos aviones en una zona reducida. En algunos sistemas
orientados hacia el teclado, cada tecla presionada almacena en la memoria un

33 Lily Alejandra Medrano Mendoza


Sistemas Operativos
código de un byte y genera una interrupción para informar a la CPU que un
carácter esta listo para ser procesado. Si la CPU no puede procesar el dato antes
de que se presione la siguiente tecla, se pierde el primer carácter.

Clases de interrupciones

En términos generales puede considerarse que existen seis clases de


interrupciones:

Interrupciones SVC (supervisor call, llamadas al supervisor). Son iniciadas por


un proceso en ejecución que ejecute la instrucción SVC. Una SVC es una petición
generada por el usuario de un servicio particular del sistema, como realizar una
operación de E/S, obtener más memoria o comunicarse con el operador del
sistema.
El mecanismo de las SVC ayuda a proteger el sistema operativo de las acciones
de los usuarios. Un usuario no puede entrar arbitrariamente al sistema operativo,
sino que debe solicitar un servicio por medio de una SVC. El sistema operativo
está al tanto de todos los usuarios que intentan rebasar sus límites y puede
rechazar ciertas peticiones si el usuario no tiene los privilegios necesarios.

Interrupciones de E/S. Son iniciadas por hardware de entrada y salida. Estas


interrupciones indican a la CPU el cambio de estado de un canal o un dispositivo.
Las interrupciones de E/S se producen cuando finaliza una operación de E/S o
cuando un dispositivo pasa al estado listo, por ejemplo.

Interrupciones externas. Son causadas por diversos eventos, incluyendo la


expiración de un cuanto de un reloj que interrumpe, la pulsación de la tecla de
interrupción de la consola o la recepción de una señal procedente de otro
procesador en un sistema de múltiples procesadores.

Interrupciones de reinicio. Ocurre cuando se presiona el botón de reinicio de


la consola o cuando llega desde otro procesador una instrucción de reinicio (señal
del procesador) en un sistema de múltiples procesadores.

Interrupciones de verificación del programa. Son causadas por una amplia


clase de problemas que pueden ocurrir cuando se ejecutan las instrucciones en
lenguaje de máquina de un programa. Dichos problemas incluyen la división entre
cero, el exceso o defecto de los números que pueden ser manejados por las
operaciones aritméticas, la presencia de datos (con los cuales se está trabajando)
con un formato erróneo, el intento de ejecutar un código de operación inválido, el
intento de hacer referencia a una localidad de memoria que esté fuera de los
limites de la memoria real, el intento por parte de un proceso de usuario de
ejecutar una instrucción privilegiada y el intento de hacer referencia a un recurso
protegido. Muchos sistemas ofrecen a los usuarios la opción de especificar las
rutinas que deben ejecutarse cuando ocurra una interrupción de verificación del
programa.

34 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Interrupciones de verificación de la máquina. Son ocasionadas por el mal


funcionamiento del hardware.

2.6 SECCIONES CRITICAS

El fenómeno de exclusión mutua genera entre otras cosas, la necesidad de


programar secciones o regiones críticas que permitan el acceso a recursos
compartibles por múltiples procesos, de manera que la integridad de los datos se
preserve.
La exclusión mutua debe ponerse en práctica cuando los procesos obtienen
acceso a datos compartidos modificables; cuando los procesos realizan
operaciones que no entran en conflicto con otras, debe permitirse que procedan
concurrentemente.
Cuando un proceso obtiene acceso a datos compartidos modificables, se dice que
se encuentra en una sección crítica o región critica.
Mientras un proceso se encuentra en su sección crítica, otros procesos pueden,
claro está, seguir ejecutándose fuera de sus secciones críticas. Cuando un
proceso abandona su región crítica, otro proceso que esperaba entrar en su propia
sección crítica podrá hacerlo (si existe algún proceso en espera). Lograr que se
cumpla la exclusión mutua es uno de los problemas fundamentales de la
programación concurrente. Se han propuesto muchas soluciones, algunas de
software y otras de hardware, algunas sencillas y otras complejas, y algunas que
requieren la cooperación voluntaria de los procesos y otras que exigen un estricto
ajuste a rígidos protocolos.
Encontrarse dentro de una región crítica es un estado especial concedido a un
proceso. El proceso tiene acceso exclusivo a los datos compartido y los demás
procesos que requieran acceso a los datos en ese momento deben esperar. Así
pues, las secciones críticas deben ejecutarse tan rápido como sea posible; un
proceso no debe bloquear dentro de su propia sección crítica y las secciones
críticas deben codificarse con mucho cuidado (para evitar, por ejemplo, la
posibilidad de ciclos infinitos).
Si un proceso de una sección crítica termina, ya sea voluntaria o
involuntariamente, el sistema operativo, al realizar su mantenimiento de
terminaciones, debe liberar la exclusión mutua de manera que otros procesos
puedan entrar en sus regiones críticas.

2.7 SEMÁFOROS Y MONITORES

SEMÁFORO

La contribución más importante de la comunicación entre procesos fue la


introducción del concepto de semáforos (Dijkstra, 1965) y el funcionamiento de las
primitivas wait y signal que actúan sobre ellos.

35 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Un semáforo es una variable entera no negativa que, aparte de su valor inicial,
sólo puede ser activada por las operaciones wait y signal. Estas operaciones sólo
actúan en los semáforos, y su efecto se define como sigue.

signal(s)
Su efecto es aumentar el valor del semáforo s en uno, el incremento será
considerado como una operación indivisible. La indivisibilidad implica que signal(s)
no es equivalente a la sentencia de asignación s = s + 1. Suponga que dos
procesos A y B desean realizar una operación signal(s) cuando el valor de s es,
digamos 3. Entonces el valor de s cuando ambas operaciones estén completos
será 5. Suponga por otro lado que en circunstancias similares ambos procesos
desearon ejecutar s = s + 1. Esta declaración sería implementada como tres
operaciones en más de un hardware; lee s, agregue uno, y almacene s; esto sería
verdad aun cuando una sola instrucción de máquina siempre fuera usada para
incrementar s. No habría ninguna garantía que A complete las tres operaciones
antes de que B empezara; si no fuera así cada proceso podría asignar el valor 4
entonces a s, y se perdería uno de los incrementos deseados.

wait(s)
El efecto es disminuir el valor del semáforo s en 1, en cuanto el resultado fuera no
negativo. De nuevo la operación es indivisible. La operación wait implica un
retraso potencial, para cuando actúe en un semáforo cuyo valor es 0, el proceso
que ejecuta la operación sólo puede proceder cuando algún otro proceso ha
aumentado el valor del semáforo a 1 por una operación signal. La indivisibilidad de
la operación indica que si algunos procesos son borrados entonces solo uno de
ellos puede completar exitosamente la operación cuando el semáforo se pone
positivo. No se hace suposición alguna sobre que proceso es éste. Los efectos de
las operaciones de wait y signal pueden resumirse como:

wait(s): si s > 0 decrementa s


signal (s): incrementa s
donde s es cualquier semáforo.

MONITORES

Un programador puede poner fácilmente wait y signal en lugares no convenientes,


o incluso omitirlos en su totalidad. Por ejemplo, un programador que no
comprende que una estructura de datos particular será compartida por varios
procesos omitirá en las operaciones wait y signal la sección crítica del programa
que accedan. La estructura de datos estará entonces indefensa de la
manipulación simultánea por varios procesos, y las inconsistencias en sus
contenidos probablemente sucederán. Para evitar tales problemas ha habido
varios propuestas que obligan al programador a que declare datos compartido y
recursos explícitos, y que de fuerza a la exclusión mutua de acceso a objetos
compartidos. Uno de los más influyentes y ampliamente adoptado es el monitor
(Hoare, 1974)

36 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Un monitor consiste de:

1. Los datos que comprenden un objeto compartido


2. Un juego de procedimientos que pueden llamarse para acceder el objeto
3. Una porción de programa que inicializa el objeto (este programa sólo se ejecuta
una vez, cuando el objeto se crea)

Por ejemplo, un buffer para los campos de datos de paso entre los procesos del
productor y procesos del consumidor podría representarse por un monitor que
consiste de:

1. El espacio del buffer e indicadores (por ejemplo, un arreglo, e índices dentro de


este)
2. Dos procedimientos depositar y extraer que pueden ser llamados por los
procesos para poner un campo en el buffer o remover un campo de este.

3. Una pieza de programa que inicializa el apuntador del buffer al comienzo.

El compilador de un lenguaje que incorpora a los monitores debe asegurar que


acceda un objeto compartido que sólo puede hacerse llamando un procedimiento
del monitor correspondiente. El compilador también debe asegurar que los
procedimientos de cada monitor sean implementados como exclusión mutua,
secciones críticas. El compilador puede hacer bien esto con las operaciones wait y
signal de los semáforos apropiados en el programa compilado. Así, en el ejemplo
del buffer, el compilador garantiza que el acceso al buffer es restringido al
depositar y extraer procedimientos, y que esos procedimientos son mutuamente
excluyentes. Debe estar claro que los monitores eliminan una fuente
potencialmente fértil de errores transfiriendo la responsabilidad por la exclusión
mutua del programador al compilador. La responsabilidad para otras formas de
restos de sincronización, sin embargo, con el programador debe usar los
semáforos (o algo equivalente) para efectuarlo. Por ejemplo, la representación de
un buffer como un monitor asegura a través de la exclusión mutua de depositar y
extraer ese campo que no puede ser simultáneamente insertados o borrados. Esto
no se hace, sin embargo, previniendo procesos que depositan campos en un
buffer lleno o vaciando uno. Tales desastres deben ser prevenidos poniendo las
operaciones de sincronización apropiados dentro de las operaciones depositar y
extraer.

La estructura del monitor se ha llevado a cabo en varios lenguajes de


programación, como Concurrent Pascal (Hansen, 1975), Pascal-plus (Welsh y
Bustard, 1979), Mesa (Lampson - y Redell, 1980), y Turing (Holt y Cordy, 1988).
Para el administrador del sistema operativo tiene la ventaja de restringir todos las
operaciones en un objeto compartido a un juego de procedimientos bien definidos,
y de asegurar que estas operaciones son mutuamente exclusivas.

37 Lily Alejandra Medrano Mendoza


Sistemas Operativos

2.8 INTERBLOQUEO (DEADLOCK)

Bloqueo Mutuo O Abrazo Mortal

Los bloqueos mutuos pueden aparecer de muchas formas. Si a un proceso se le


asigna la tarea de esperar a que ocurra un evento y el sistema no incluye
providencias para señalar la ocurrencia de dicho evento, habrá un bloqueo mutuo
con un solo proceso. La mayor parte de los bloqueos mutuos en los sistemas
reales implican una competencia entre varios procesos por varios recursos.

Un problema afín: Aplazamiento indefinido

En cualquier sistema que mantenga los procesos en espera mientras se les asigna
un recurso o se toman decisiones de planificación, la programación de un proceso
puede postergarse indefinidamente mientras otro recibe la atención del sistema.
Tal situación se conoce con varios nombres, entre los que se incluyen
aplazamiento indefinido, bloqueo indefinido e inanición, y puede resultar tan
peligrosa como un bloqueo mutuo.
El aplazamiento indefinido puede ocurrir debido a predisposiciones en las políticas
de planificación de recursos del sistema. Cuando los recursos se planifican por
prioridad, es posible que un proceso dado espere en forma indefinida un recurso
por que siguen llegando otros procesos con mayor prioridad. La espera es un
hecho de la vida real y es sin duda un aspecto muy importante de lo que ocurre
dentro de los sistemas de cómputo. Los sistemas deben diseñarse para
administrar los procesos en espera de manera justa además de eficiente. En
algunos sistemas, el aplazamiento indefinido se evita aumentando la prioridad del
proceso mientras espera. Esto se conoce como envejecimiento. En algún
momento la prioridad de ese proceso superará la prioridad de los otros procesos
entrantes y el proceso en espera será atendido.

2.8.1 PRINCIPIOS DEL INTERBLOQUEO

Todos los interbloqueos suponen demandas contradictorias de recursos por parte


de dos o más procesos. La figura de avance conjunto de los procesos P1 y P2
ilustra este conflicto de forma abstracta en el caso de dos procesos y dos
recursos. Los dos ejes del diagrama representan el avance de los dos procesos en
términos de instrucciones ejecutadas. El avance conjunto de los dos procesos se
representa entonces con una secuencia discreta de puntos en el espacio. Las
líneas horizontales o verticales representan el intervalo de tiempo en el que sólo
uno de los procesos está ejecutándose (intercalado); una línea diagonal significa
ejecución simultánea (solapamiento). Supóngase que existe un punto en la
ejecución de cada proceso en el que se requiere el uso exclusivo de ambos
recursos, R1 y R2, para continuar. En el ejemplo, llega un punto en el que el
proceso P1 ha adquirido el recurso R1 y el proceso P2 ha adquirido el recurso R2
y cada proceso necesita el otro recurso. Este es el punto de interbloqueo.

38 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Figura 2.2 Avance conjunto de los procesos P1 y P2

Recursos Reutilizables

Se pueden distinguir dos categorías generales de recursos: reutilizables y


consumibles. Un recurso reutilizables es aquél que pude ser utilizado con
seguridad por un proceso y que no se agota con el uso. Los proceso tiene
unidades de recursos que liberan posteriormente para que otros procesos las
utilicen. Como ejemplos de recursos reutilizables se tiene los procesadores,
canales de E/S, memoria principal y secundaria, dispositivos y estructura de datos
tales como archivos, bases de datos y semáforos. Como ejemplo de interbloqueo
con recursos reutilizables, considérense dos procesos que compiten por el acceso
exclusivo a un archivo D del disco y a una unidad de cinta T. Los programas están
dedicados a las siguientes operaciones repetidas:

El interbloqueo se produce si cada proceso retiene un recurso y solicita el otro.


Puede parecer que es un error de programación en lugar de un error del diseño
del sistema operativo. Sin embargo, se ha visto que el diseño de un programa
concurrente entraña gran dificultad. Se producen interbloqueos como éste y la
causa está frecuentemente en la compleja lógica del programa, lo que hace más
difícil su detección. Una posible estrategia para resolver estos interbloqueos es

39 Lily Alejandra Medrano Mendoza


Sistemas Operativos
imponer restricciones en el diseño del sistema sobre el orden en el que se solicitan
los recursos.
Otro ejemplo de interbloqueo con un recurso reutilizable tiene que ver con las
peticiones a memoria principal. Supóngase que el espacio disponible es de 200KB
y se origina la siguiente secuencia de peticiones:

P1
repeat
...
Solicitar (D);
...
Solicitar (T);
...
Liberar (T);
...
liberar (D);
...
Forever

P2
repeat
...
Solicitar (T);
...
Solicitar (D);
...
Liberar (D);
...
liberar (T);
...
Forever

P1
...
Solicitar 80K bytes;
...
Solicitar 60K bytes;
P2
...
Solicitar 70K bytes;
...
Solicitar 80K bytes;

Se produce un interbloqueo si ambos procesos avanzan hasta su segunda


petición. Si la cantidad de memoria que van a solicitar no se conoce con
antelación, resulta difícil enfrentarse a este tipo de interbloqueo por medio de

40 Lily Alejandra Medrano Mendoza


Sistemas Operativos
restricciones en el diseño del sistema. La mejor forma de resolver este problema
en particular es, de hecho, eliminar la posibilidad, por medio de la memoria virtual.

Recursos Consumibles

Un recurso consumible es aquél que puede ser creado (producido) y destruido


(consumido). Normalmente, no hay límite en el número de recursos consumibles
de un tipo en particular. Un proceso productor que no está bloqueado puede
liberar cualquier número de recursos consumibles. Cuando un proceso adquiere
un recurso, éste deja de existir. Como ejemplos de recursos consumibles están las
interrupciones, señales, mensajes, e información en buffers de E/S.
Como ejemplo de interbloqueo con recursos consumibles, considérese el siguiente
par de procesos:

El interbloqueo se produce si el receptor se bloquea. De nuevo, la causa del


interbloqueo es un error de diseño. Estos errores pueden ser bastante sutiles y
difíciles de detectar. Es más, puede darse una combinación de sucesos poco
habitual que origine el interbloqueo; así pues, un programa puede funcionar
durante un periodo de tiempo considerable, incluso años, antes de que el
problema se manifieste. No hay ninguna estrategia sencilla que puede solucionar
todas las clases de interbloqueo. A continuación se resumen los elementos claves
de los enfoques más importantes que se han tomado: detección, prevención y
predicción.

P1
...
Recibir (P2, M);
...
Enviar (P2,N);
P2
...
Recibir (P1, Q);
...
Enviar (P1, R);

41 Lily Alejandra Medrano Mendoza


Sistemas Operativos

42 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Condiciones de Interbloqueo

Deben darse tres condiciones para que pueda producirse un interbloqueo:

1. Exclusión mutua: Sólo un proceso puede usar un recurso simultáneamente.


2. Retención y espera: Un proceso puede retener los recursos asignados
mientras espera que se le asignen otros.
3. No apropiación: Ningún proceso puede ser forzado a abandonar un recurso
que retenga.

En la mayoría de los casos, estas condiciones son bastante necesarias. Por


ejemplo, la exclusión mutua hace falta para asegurar la consistencia de resultados
y la integridad de la base de datos. De forma similar, la expulsión o apropiación no
se puede aplicar arbitrariamente y, cuando se encuentran involucrados recursos
de datos especialmente, debe estar acompañada de un mecanismo de
recuperación y reanudación, que devuelva a un proceso y a sus recursos a un
estado previo adecuado, desde el que el proceso pueda finalmente repetir sus
acciones.
Puede existir interbloqueo con estas tres condiciones, pero puede no existir con
sólo estas tres condiciones. Para que se produzca interbloqueo, se necesita una
cuarta condición:

4. Círculo vicioso de espera: Existe una cadena cerrada de procesos, cada uno
de los cuales retiene, al menos, un recurso que necesita el siguiente proceso de la
cadena.

Las tres primeras condiciones son necesarias, pero no suficientes, para que exista
interbloqueo. La cuarta condición es, en realidad, una consecuencia potencial de
las tres primeras. Es decir, dado que se producen las tres primeras condiciones,
puede ocurrir una secuencia de eventos que desemboque en un círculo vicioso de
espera irresoluble. Un círculo de espera irresoluble es, de hecho, la definición de
interbloqueo. El círculo de espera de la condición 4 es irresoluble porque se
mantienen las tres primeras condiciones. Es decir, las cuatro condiciones en
conjunto constituyen una condición necesaria y suficiente para el interbloqueo.

2.8.2 PREVENCIÓN DEL INTERBLOQUEO

La estrategia de prevención del interbloqueo consiste, a grandes rasgos, en


diseñar un sistema de manera que esté excluida, a priori, la posibilidad de
interbloqueo.
Los métodos para prevenir el interbloqueo son de dos tipos. Los métodos
indirectos consisten en impedir la aparición de alguna de las tres condiciones
necesarias, antes mencionadas (condiciones 1 a 3). Los métodos directos
consisten en evitar la aparición del círculo vicioso de espera (condición 4). Se
examinarán a continuación las técnicas relacionadas con cada una de las cuatro
condiciones.

43 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Negación de la condición de Exclusión Mutua

En general, la primera de las cuatro condiciones no puede anularse. Si el acceso a


un recurso necesita exclusión mutua, el sistema operativo debe soportar la
exclusión mutua. Algunos recursos, como los archivos, pueden permitir varios
accesos para lectura, pero sólo accesos exclusivos para escritura. Incluso en este
caso, se puede producir interbloqueo si más de un proceso necesita permiso de
escritura.

Negación de la condición de Retención y Espera

La condición de retención y espera puede prevenirse exigiendo que todos los


procesos soliciten todos los recursos que necesiten a un mismo tiempo y
bloqueando el proceso hasta que todos los recursos puedan concederse
simultáneamente. Esta solución resulta ineficiente por dos factores. En primer
lugar, un proceso puede estar suspendido durante mucho tiempo, esperando que
se concedan todas sus solicitudes de recursos, cuando de hecho podría haber
avanzado con sólo algunos de los recursos.

Figura 2.3 Espera circular

Y en segundo lugar, los recursos asignados a un proceso pueden permanecer sin


usarse durante periodos considerables, tiempo durante el cual se priva del acceso
a otros procesos.

44 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Negación de la condición de No apropiación

La condición de no apropiación puede prevenirse de varias formas. Primero, si a


un proceso que retiene ciertos recursos se le deniega una nueva solicitud, dicho
proceso deberá liberar sus recursos anteriores y solicitarlos de nuevo, cuando sea
necesario, junto con el recurso adicional. Por otra parte, si un proceso solicita un
recurso que actualmente está retenido por otro proceso, el sistema operativo
puede expulsar al segundo proceso y exigirle que libere sus recursos. Este último
esquema evitará el interbloqueo sólo si no hay dos procesos que posean la misma
prioridad. Esta técnica es práctica sólo cuando se aplica a recursos cuyo estado
puede salvarse y restaurarse más tarde de una forma fácil, como es el caso de un
procesador.

Negación de la condición Círculo Vicioso de Espera

La condición del círculo vicioso de espera puede prevenirse definiendo una


ordenación lineal de los tipos de recursos. Si a un proceso se le han asignado
recursos de tipo R, entonces sólo podrá realizar peticiones posteriores sobre los
recursos de los tipos siguientes a R en la ordenación.
Para comprobar el funcionamiento de esta estrategia, se asocia un índice a cada
tipo de recurso. En tal caso, el recurso Ri antecede a Rj en la ordenación si i < j.
Entonces, supóngase que dos procesos A y B se interbloquean, porque A ha
adquirido Ri y solicitado Rj, mientras que B ha adquirido Rj y solicitado Ri. Esta
situación es imposible porque implica que i <j y j < i.
Como en la retención y espera, la prevención del círculo vicioso de espera puede
ser ineficiente, retardando procesos y denegando accesos a recursos
innecesariamente.

2.8.3 DETECCIÓN DEL INTERBLOQUEO

Las estrategias de prevención del interbloqueo son muy conservadoras;


solucionan el problema del interbloqueo limitando el acceso a los recursos e
imponiendo restricciones a los procesos. En el lado opuesto, las estrategias de
detección del interbloqueo no limitan el acceso a los recursos ni restringen las
acciones de los procesos. Con detección del interbloqueo, se consideran los
recursos que los procesos necesiten siempre que sea posible. Periódicamente, el
sistema operativo ejecuta un algoritmo que permite detectar la condición de círculo
vicioso de espera descrita en el punto 4 anterior e ilustrada en el Resumen de los
enfoques de detección, prevención y predicción del interbloqueo en los
sistemas operativos mencionados anteriormente. Puede emplearse cualquier
algoritmo de detección de ciclos en grafos dirigidos.

El control del interbloqueo puede llevarse a cabo tan frecuentemente como las
solicitudes de recursos o con una frecuencia menor, dependiendo de la
probabilidad de que se produzca el interbloqueo. La comprobación en cada
solicitud de recurso tiene dos ventajas: Conduce a una pronta detección y el
algoritmo es relativamente simple, puesto que está basado en cambios

45 Lily Alejandra Medrano Mendoza


Sistemas Operativos
increméntales del estado del sistema. Por otro lado, tal frecuencia de
comprobaciones consume un tiempo de procesador considerable.
Una vez detectado el interbloqueo, hace falta alguna estrategia de recuperación.
Las técnicas siguientes son posibles enfoques, enumeradas en orden creciente de
sofisticación:

1. Abandonar todos los procesos bloqueados. Esta es, se crea o no, una de las
soluciones más comunes, si no la más común, de las adoptadas en un sistema
operativo.
2. Retroceder cada proceso interbloqueado hasta algún punto de control definido
previamente y volver a ejecutar todos los procesos. Es necesario que haya
disponibles unos mecanismos de retroceso y reinicio en el sistema. El riesgo de
esta solución radica en que puede repetirse el interbloqueo original. Sin embargo,
el no determinismo del procesamiento concurrente asegura, en general, que esto
no va a pasar.
3. Abandonar sucesivamente los procesos bloqueados hasta que deje de haber
interbloqueo. El orden en el que se seleccionan los procesos a abandonar seguirá
un criterio de mínimo coste. Después de abandonar cada proceso, se debe
ejecutar de nuevo el algoritmo de detección para ver si todavía existe interbloqueo.
4. Apropiarse de recursos sucesivamente hasta que deje de haber interbloqueo.
Como en el punto 3, se debe emplear una selección basada en coste y hay que
ejecutar de nuevo el algoritmo de detección después de cada apropiación. Un
proceso que pierde un recurso por apropiación debe retroceder hasta un momento
anterior a la adquisición de ese recurso.
Para los puntos 3 y 4, el criterio de selección podría ser uno de los siguientes,
consistentes en escoger el proceso con:

La menor cantidad de tiempo de procesador consumido hasta ahora


El menor número de líneas de salida producidas hasta ahora
El mayor tiempo restante estimado
El menor número total de recursos asignados hasta ahora
La prioridad más baja

Algunas de estas cantidades son más fáciles de medir que otras. El tiempo
restante estimado deja lugar a dudas, especialmente. Además, aparte de las
medidas de prioridad, no existe otra indicación del "coste" para el usuario frente al
coste para el sistema en conjunto.

2.8.4 PREDICCIÓN DEL INTERBLOQUEO

Otra forma de resolver el problema del interbloqueo, que se diferencia sutilmente


de la prevención, es la predicción de interbloqueo. En la prevención de
interbloqueo, se obligaba a las solicitudes de recursos a impedir que sucediera,
por lo menos, alguna de las cuatro condiciones de interbloqueo. Esto se hace
indirectamente, impidiendo la aparición de una de las tres condiciones necesarias
(exclusión mutua, retención y espera, no apropiación) o directamente, impidiendo
la aparición de un círculo vicioso de espera. Se llega así a un uso ineficiente de los

46 Lily Alejandra Medrano Mendoza


Sistemas Operativos
recursos y una ejecución ineficiente de los procesos. Con predicción del
interbloqueo, por otro lado, se pueden alcanzar las tres condiciones necesarias,
pero se realizan elecciones acertadas para asegurar que nunca se llega al punto
de interbloqueo. La predicción, por tanto, permite más concurrencia que la
prevención. Con predicción del interbloqueo, se decide dinámicamente si la
petición actual de asignación de un recurso podría, de concederse, llevar
potencialmente a un interbloqueo. La predicción del interbloqueo necesita, por
tanto, conocer las peticiones futuras de recursos.

Dos enfoques para la predicción del interbloqueo:

Noiniciar un proceso si sus demandas pueden llevar a interbloqueo.


No conceder una solicitud de incrementar los recursos de un proceso si esta
asignación puede llevar a interbloqueo.

Una Estrategia Integrada de Interbloqueo

Como se propone en el Resumen de los enfoques de detección, prevención y


predicción del interbloqueo en algunos sistemas operativos, hay puntos fuertes y
debilidades en todas las estrategias de solución del interbloqueo. En lugar de
intentar diseñar un servicio del sistema operativo que emplee sólo una de las
estrategias, puede ser más eficiente usar diferentes estrategias en diferentes
situaciones. Silberschatz y Galvin sugieren este enfoque:

Agrupar los recursos en un número de clases diferentes.


Usar la estrategia deordenación lineal definida anteriormente para la prevención
de círculos viciosos de espera e impedir el interbloqueo entre clases de recursos.
Dentro de cada clase de recursos, emplear el algoritmo más apropiado para
dicha clase. Como ejemplo de esta técnica, considérense las siguientes clases de
recursos:

Espacio intercambiable: Bloques de memoria en almacenamiento secundario


para el uso en el intercambio de procesos.

Recursos de procesos: Dispositivos asignables, como unidades de cinta y


archivos.

Memoria principal: Asignable a los procesos en páginas o segmentos

Recursos internos: Como canales de E/S.

El orden en que se enumeran estas clases de recursos es el orden en el que se


asignan. El orden es razonable, teniendo en cuenta la secuencia de pasos que un
proceso debe seguir durante su vida. En cada clase, se pueden usar las siguientes
estrategias:

47 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Espacio intercambiable: puede aplicarse prevención de interbloqueo, pidiendo
que todos los recursos sean asignados de una vez, como en la estrategia de
prevención de retención y espera. Esta estrategia es razonable si se conocen los
requisitos máximos de almacenamiento, lo que suele ser habitual. Otra posibilidad
es la predicción de Interbloqueos.

Recursosde procesos: La predicción es a menudo efectiva en esta categoría,


puesto que es razonable esperar que los procesos declaren por anticipado los
recursos de esta clase que necesitarán. También es posible en esta clase la
prevención mediante la ordenación de recursos.

Memoria principal: la prevención con apropiación aparece por la estrategia más


adecuada para la memoria principal. Cuando se expulsa a un proceso,
simplemente es trasladado a la memoria secundaria, liberando espacio para
resolver el Interbloqueo.

Recursos internos: puede usarse la prevención por orden de recursos.

48 Lily Alejandra Medrano Mendoza


Sistemas Operativos

3. ADMINISTRACIÓN DE MEMORIA

3.1 MANEJO DE LA MEMORIA REAL


La organización y administración de la Memoria principal, memoria primaria o
memoria real de un sistema de cómputo ha sido uno de los factores más
importantes que influyen en el diseño de los sistemas operativos. Los términos
memoria y almacenamiento se han utilizado como sinónimos en la literatura. Los
programas y datos deben residir en la memoria principal para poderlos ejecutar o
para hacer referencia directamente a ellos. El almacenamiento secundario (el
medio más común es el disco magnético), proporciona capacidad barata y en gran
escala para los numerosos programas y datos que deben mantenerse disponibles
para su procesamiento.

3.1.1 ORGANIZACIÓN Y ADMINISTRACIÓN DEL ALMACENAMIENTO


Por organización del almacenamiento se entiende la forma de considerar el
almacenamiento principal. Esto es, la manera como se estructura la memoria en
sentido físico.
La administración del almacenamiento se orienta a lograr determinado
comportamiento de una organización de almacenamiento cuando se siguen
diferentes políticas.

3.1.2 JERARQUÍA DEL ALMACENAMIENTO


Los programas y datos necesitan estar en el almacenamiento principal para ser
ejecutados o para poder hacer referencia de ellos. Los programas o datos que no
se necesitan de inmediato pueden guardarse en el almacenamiento secundario
hasta que se necesiten y en ese momento se transfieren al almacenamiento
principal para ser ejecutados o hacer referencia a ellos. Los medios de
almacenamiento secundario, como cintas o discos, son en general menos
costosos que el almacenamiento principal y su capacidad es mucho mayor.
Normalmente es mucho más rápido el acceso al almacenamiento principal que al
secundario. En los sistemas con varios niveles de almacenamiento hay muchas
transferencias constantes de programas y datos entre los diferentes niveles. Estas
trasferencias consumen recursos del sistema, como tiempo de la CPU, que de otro
modo podría utilizarse con provecho.
En los años sesenta se hizo evidente que la jerarquía del almacenamiento podría
extenderse un nivel más con una clara mejora del rendimiento y la utilización. Este
nivel adicional, la memoria caché, es un almacenamiento de alta velocidad, mucho
más rápido que el almacenamiento principal. La memoria caché es
extremadamente cara, comparada con la memoria principal, por lo que sólo se
utilizan memorias caché relativamente pequeñas. La figura 3.1 muestra la relación
que existe entre la memoria caché, el almacenamiento principal y el
almacenamiento secundario.

49 Lily Alejandra Medrano Mendoza


Sistemas Operativos

La memoria caché introduce un nivel adicional de transferencia de información en


el sistema. Los programas en memoria principal se pasan a la memoria caché
antes de ejecutarse. En la memoria caché se pueden ejecutar mucho más rápido
que en la principal. La esperanza de los diseñadores que utilizan el concepto de
memoria caché es que el trabajo extra requerido por la transferencia de los
programas sea mucho menor que el aumento del rendimiento obtenido por la
rápida ejecución que es posible en la memoria caché.

3.1.3 ESTRATEGIAS DE ADMINISTRACIÓN DEL ALMACENAMIENTO


Los recursos caros se administran intensivamente para obtener una mejor
utilización. Las estrategias de la administración del almacenamiento se ajustan
para obtener el mejor aprovechamiento posible del recurso de almacenamiento
principal. Las estrategias de la administración del almacenamiento se dividen en
las siguientes categorías.
1. Estrategias de obtención
a) Estrategias de obtención por demanda
b) Estrategias de obtención anticipada
2. Estrategias de colocación
3. Estrategias de reemplazo

Las estrategias de obtención determinan cuándo debe obtenerse la siguiente parte


el programa o los datos que se van a transferir del almacenamiento secundario al

50 Lily Alejandra Medrano Mendoza


Sistemas Operativos
principal.

Las estrategias de colocación tienen que ver con la determinación de la parte del
almacenamiento principal donde se colocará un programa entrante.

Las estrategias de reemplazo están relacionadas con la determinación de qué


parte del programa o de los datos se debe desalojar para dejar espacio a los
programas entrantes.

3.1.4 ASIGNACIÓN DEL ALMACENAMIENTO CONTIGUO Y NO CONTIGUO


Los primeros sistemas de cómputo requerían una asignación de almacenamiento
contiguo: cada programa tenía que ocupar un único bloque contiguo de
localidades de memoria. No fue sino hasta que se intentó hacer multiprogramación
con particiones variables cuando quedó claro que podía ser útil la asignación de
almacenamiento no contiguo.
En la asignación de almacenamiento no contiguo un programa se divide en varios
bloques o segmentos que se pueden colocar en el almacenamiento principal en
fragmentos que no necesitan ser adyacentes. Es más difícil para un sistema
operativo controlar la asignación del almacenamiento no contiguo, pero la ventaja
es que, si el almacenamiento principal tiene muchos huecos pequeños disponibles
en lugar de un único hueco grande, el sistema operativo a menudo puede cargar y
ejecutar un programa que en otro caso tendría que esperar.

3.1.5 ASIGNACIÓN DE ALMACENAMIENTO CONTIGUO PARA UN USUARIO


ÚNICO
Los primeros sistemas de cómputo permitían que sólo una persona a la vez
utilizara la máquina. Todos los recursos de la máquina estaban a disposición del
usuario. El cobro del uso del computador era muy simple: como el usuario
disponía de toda la máquina, se le cobraban todos los recursos, ya fuera que sus
trabajos los utilizaran o no. De hecho, el mecanismo de cobro normal se basaba
en el tiempo de reloj. La máquina se asignaba a un usuario por algún tiempo
determinado y se le cobraba una tarifa fija por hora Algunos de los sistemas
compartidos actuales tienen algoritmos de cobro mucho más complejos.

Originalmente, cada usuario escribía todo el código necesario para realizar una
aplicación específica, incluyendo las detalladas instrucciones de entrada/salida a
nivel de la máquina. Muy pronto el código de entrada/salida requerido para realizar
las funciones básicas se consolidó en un sistema de control de entrada/salida
(input/output control system, IOCS). Los usuarios que querían hacer entrada/salida
ya no tenían que codificar directamente las instrucciones, sino que llamaban a las
rutinas de IOCS para realizar el trabajo. Ello simplificaba y aceleraba mucho el
proceso de codificación. La implantación de los sistemas de control de
entrada/salida bien pudo haber constituido el comienzo del concepto actual de
sistemas operativos. La figura 3.2 ilustra la organización del almacenamiento en
un sistema representativo de asignación de almacenamiento contiguo con un
único usuario.

51 Lily Alejandra Medrano Mendoza


Sistemas Operativos

En tamaño de los programas está limitado por la cantidad de memoria principal,


pero es posible ejecutar programas más grandes que el almacenamiento principal
utilizando superposiciones(overlay). La figura 3.3 ilustra el concepto. Si una
sección de un programa no se necesita durante el resto de la ejecución del
programa, entonces se puede traer del almacenamiento secundario otra sección
del programa para ocupar el espacio utilizado por la que ya no se necesita.

Las superposiciones ofrecen al programador una forma de ampliar el


almacenamiento principal limitado. Sin embargo, la superposición manual exige
una cuidadosa planificación y lleva mucho tiempo.

52 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Protección en los sistemas de usuario único


En los sistemas de asignación de almacenamiento contiguo para un solo usuario,
este último tiene un control absoluto sobre todo el almacenamiento principal. La
memoria se divide en una parte en la que residen las rutinas del sistema operativo,
otra en la que residen los programas del usuario y otra no utilizada. La cuestión de
la protección es sencilla.
Si el programa del usuario se desvía puede destruir el sistema operativo. Si esto
resulta fatal y el usuario no puede proseguir, sabrá que algo anda mal, terminará
la ejecución, arreglará el problema y volverá a intentar la ejecución de su
programa. En tales circunstancias no resulta evidente la necesidad de proteger el
sistema operativo.
Pero supóngase que el usuario destruye el sistema operativo más "sutilmente".
Por ejemplo, supóngase que ciertas rutinas de entrada/salida son modificadas por
accidente, de tal modo que pueden estar truncados todos los registros de salida. l
trabajo puede seguir en ejecución; pero si los resultados no se examinan sino
hasta que se completa el trabajo, entonces se estarán desperdiciando los recursos
de máquina. Peor aún, el daño al sistema operativo puede hacer que se
produzcan salidas cuyos errores no san evidentes.

53 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Sin duda es obvio que el sistema operativo se debe proteger del usuario. La
protección se realiza con un registro de límites único integrado en la CPU, como
se muestra en la figura 3.4. Cada vez que un programa de usuario hace referencia
a una dirección de memoria, se revisa el registro de limites para verificar que el
usuario no está a punto de destruir el sistema operativo. El registro de límites
contiene la dirección más alta utilizada por el sistema operativo. Si el usuario
intenta entrar en el sistema operativo, se intercepta la instrucción y el trabajo
termina con un mensaje de error apropiado.

Naturalmente, el usuario necesita entrar de vez en cuando en el sistema operativo


para utilizar algunos servicios, como la entrada/salida. El problema se resuelve
dando al usuario una instrucción específica con la cual puede solicitar los servicios
del sistema operativo (es decir, una instrucción de llamada al supervisor). El
usuario que desee leer en una cinta enviará una instrucción solicitando al sistema
operativo que lo haga por él. El sistema operativo realizará la función deseada y
después devolverá el control al programa del usuario.

A medida que se han vuelto más complejos los sistemas operativos ha sido
necesario llevar a la práctica mecanismos más avanzados para proteger al
sistema operativo de los usuarios y proteger a éstos entre sí.

3.1.6 MULTIPROGRAMACIÓN CON PARTICIONES FIJAS


Aun con los sistemas operativos de procesamiento por lotes, los sistemas de
usuario único siguen desperdiciando una gran cantidad de los recursos de

54 Lily Alejandra Medrano Mendoza


Sistemas Operativos
cómputo. La Figura 3.5 ejemplifica la situación. El programa consume el recurso
de la CPU hasta que se necesita una entrada o una salida. Cuando se genera la
solicitud de E/S, es frecuente que el trabajo no pueda continuar sino hasta que se
envíen o reciban los datos requeridos. Las velocidades de entrada y salida son
muy bajas, en comparación con las velocidades de la CPU.

Figura 3.5 Utilización de la UCP en un sistema de un solo Usuario. Nota: En


muchos trabajos de un solo usuario, la duración de las esperas por entrada/salida
es mucho mayor con respecto a la duración de los periodos de utilización de la
UCP que lo indicado en este diagrama.

Los diseñadores vieron que otra vez podrían aumentar notablemente el


aprovechamiento de la CPU mediante una administración intensiva. Esta vez
decidieron realizar sistemas de multiprogramación en los cuales varios usuarios
compiten al mismo tiempo por los recursos del sistema. El trabajo que está
esperando la terminación de una operación E/S cederá la CPU a otro trabajo que
esté listo para realizar cálculos, si es que hay uno en espera. De esta forma
pueden efectuarse simultáneamente las operaciones de E/S y los cálculos de la
CPU. Esto mejora mucho el aprovechamiento de la CPU y los resultados del
sistema.
Para aprovechar al máximo la multiprogramación, es necesario que varios trabajos
residan al mismo tiempo en el almacenamiento principal del computador. Así,
cuando un trabajo solicita E/S, la CPU puede conmutarse de inmediato a otro y
realizar cálculos sin retraso. Cuando este nuevo trabajo abandona la CPU, otro
puede estar listo para utilizarla.
La multiprogramación requiere por lo regular mucho más almacenamiento que un
sistema de usuario único. Sin embargo, la mejor utilización de la CPU y los
dispositivos periféricos justifica de sobra el costo del almacenamiento adicional.

55 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Multiprogramación con particiones fijas: traducción y carga absolutas
Los primeros sistemas de multiprogramación utilizaban la multiprogramación con
partición fija, en la cual el almacenamiento principal se dividía en particiones de
tamaño fijo. En cada partición podía haber un solo trabajo. La UCP se conmutaba
rápidamente entre los usuarios para crear la ilusión de simultaneidad.
Los trabajos se traducían con compiladores y ensambladores absolutos para
ejecutarse sólo en una partición específica. (Figura 3.6). Si un trabajo estaba listo
para ser ejecutado y su partición estaba ocupada , tenía que esperar, aunque
estuvieran libres otras particiones (Figura 3.7). Tal cosa provoca un desperdicio
del almacenamiento, pero el sistema operativo era relativamente simple de llevar a
la práctica.

Figura 3.6 multiprogramación con particiones fijas, con traducción y carga


absolutas.

56 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Multiprogramación con particiones fijas: traducción y carga con reubicación

Los compiladores, ensambladores y cargadores con reubicación sirven para


producir programas reubicables que se pueden ejecutar en cualquier partición
disponible que sea lo bastante grande para contenerlos (Figura 3.8). Dicho
esquema elimina parte del desperdicio de espacio inherente a la
multiprogramación con carga y traducción absolutos. Los traductores y cargadores
con reubicación son más complejos que los absolutos.

57 Lily Alejandra Medrano Mendoza


Sistemas Operativos

58 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Protección en los sistemas con multiprogramación

En los sistemas de multiprogramación y asignación contigua, la protección se


logra a menudo con varios registros de limites. Con dos registros se pueden
establecer los límites superior e inferior de la partición de un usuario (Figura 3.9) o
se puede indicar el límite inferior (o el límite superior) y la longitud de la región. El
usuario que necesita llamar el sistema operativo utiliza una instrucción de llamada
al supervisor para hacerlo. Esto permite al usuario cruzar el límite del sistema
operativo y solicitar sus servicios sin poner en peligro la seguridad del sistema
operativo.

Fragmentación en la multiprogramación con particiones fijas


La fragmentación del almacenamiento se presenta en todos los sistemas de
cómputo, sea cual sea la organización de su almacenamiento. En los sistemas con
multiprogramación y particiones fijas, la fragmentación ocurre porque los trabajos
de los usuarios no llenan por completo las particiones designadas o porque una
partición se queda sin utilizar por ser demasiado pequeña para contener un trabajo
en espera.

59 Lily Alejandra Medrano Mendoza


Sistemas Operativos
3.1.7 MULTIPROGRAMACIÓN CON PARTICIONES VARIABLES
Al observar los diseñadores de sistemas operativos los problemas de la
multiprogramación con particiones fijas, decidieron que una mejora evidente sería
permitir que los trabajos ocuparon tanto espacio como necesitaran (pero no todo el
almacenamiento real). No se impondrían límites fijos, sino que se daría a los
trabajos todo el almacenamiento que necesitaran. Este esquema se denomina
multiprogramación con particiones variables. En la figura 3.10 se ilustra la
asignación inicial de las particiones en un sistema de multiprogramación con
particiones variables.

Aquí sólo se tratarán los esquemas de asignación contigua: un trabajo debe


ocupar localidades de memoria contiguas. En la multiprogramación con particiones
variables no se hacen suposiciones sobre el tamaño de los trabajos (excepto que
no deben ser mayores que el almacenamiento principal disponible en el
computador). Si cuando llega un trabajo los mecanismos de planificación deciden
que debe proseguir, se le asigna tanto espacio como necesite. No hay
desperdicio, pues la partición de un trabajo tiene exactamente el tamaño del
trabajo.
No obstante, todo esquema de organización del almacenamiento implica algún
grado de desperdicio. En la multiprogramación con particiones variables, el
desperdicio no se hace evidente sino hasta que los trabajos empiezan a terminar y
dejan huecos en el almacenamiento principal. Como se muestra en la figura 3.11.

60 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Otros trabajos pueden utilizar dichos huecos, pero entonces los huecos restantes
se hacen más pequeños, acabando por ser tan reducidos que no pueden contener
nuevos trabajos. Así pues, en la multiprogramación con particiones variables
también hay desperdicio.

Condensación de Huecos

Cuando termina un trabajo en un sistema de multiprogramación con particiones


variables, se puede comprobar si el almacenamiento liberado colinda con otras
áreas libres del almacenamiento (huecos). Si es así, se puede registrar en la lista
de almacenamiento libre ya sea (1) un hueco adicional o (2) un hueco único que
refleje la unión del hueco existente y del nuevo hueco adyacente.
El proceso de fusionar huecos adyacentes para formar un solo hueco más grande
se denomina condensación y se ilustra en la figura 3.12. Mediante la
condensación de huecos se pueden recuperar los bloques contiguos de
almacenamiento más grandes que sea posible.

61 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Compactación del almacenamiento.

A pesar de la condensación de los huecos, muchas veces resulta que los huecos
individuales distribuidos a lo largo del almacenamiento principal constituyen una
parte significativa del almacenamiento. A veces, cuando un trabajo pide cierta
cantidad de almacenamiento principal, ningún hueco individual es lo bastante
grande para contenerlo, aunque la suma de todos los huecos sea mayor que el
almacenamiento requerido por el nuevo trabajo.
La técnica de compactación del almacenamiento (figura 3.13) implica trasladar
todas las áreas ocupadas del almacenamiento a algún extremo de la memoria
principal. Esto deja un gran hueco único de almacenamiento libre, en lugar de los
numerosos huecos pequeños característicos de la multiprogramación con
particiones variables. Ahora todo el almacenamiento libre está contiguo, así que
un trabajo en espera puede ejecutarse si sus necesidades de memoria son
satisfechas por el hueco único resultante de la compactación. A veces, y en forma
por demás pintoresca, la compactación del almacenamiento se denomina eructo
del almacenamiento (burping the storage). Un nombre mas convencional es
recolección de basura (garbage collection).

La compactación presenta los siguientes inconvenientes.

Consume recursos del sistema que podrían utilizarse en forma productiva.

62 Lily Alejandra Medrano Mendoza


Sistemas Operativos
El sistema debe detener todas sus actividades mientras realiza la
compactación.
Ello puede ocasionar tiempos de respuestas irregulares para usuarios interactivos
y podría ser devastador en sistemas de tiempo real.

La compactación implica reubicar los trabajos que estén en el almacenamiento.


Eso significa que la información requerida para realizar la reubicación, que se
pierde por lo regular cuando se carga un programa, debe ahora mantenerse
accesible.

Con una combinación normal de trabajos que cambia rápidamente, a menudo


es necesario compactar. Los recursos del sistema que se consuman quizá no
justifiquen las ventajas de la compactación.

63 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Estrategias de colocación en almacenamiento

Las estrategias de colocación en almacenamiento sirven para determinar en qué


lugar del almacenamiento principal se deben colocar los programas y datos
entrantes. En la figura 3.14 se ilustran tres estrategias mencionadas a menudo en
la literatura.

Estrategiadel mejor ajuste: Un trabajo que entre en el sistema se colocará en el


hueco del almacenamiento principal en el que quepa mejor y que deje la menor
cantidad posible de espacio sin utilizar. Para muchos, el mejor ajuste parece ser
intuitivamente la estrategia más atractiva.

Estrategia del primer ajuste: Un trabajo que entre en el sistema se colocará en el


almacenamiento principal en el primer hueco disponible lo bastante grande para
contenerlo. Intuitivamente, el primer ajuste también es atractivo, pues permite
decidir con rapidez dónde se colocará un trabajo.

Estrategia del peor ajuste: A primera vista ésta parecería una elección
extravagante, pero después de un examen más cuidadoso, el peor ajuste también
posee un fuerte atractivo intuitivo. El peor ajuste consiste en colocar un programa
en el almacenamiento primario en el hueco donde peor se ajusta, es decir, en el
hueco más grande posible. El atractivo intuitivo es sencillo: Después de colocar el
programa en ese gran hueco, el hueco restante a menudo será también grande y
por consiguiente podrá contener un nuevo programa relativamente grande.
Una variante de la estrategia del primer ajuste, denominada estrategia del
siguiente ajuste, comienza cada búsqueda de un hueco disponible en el lugar
donde terminó la búsqueda anterior.

3.1.8 MULTIPROGRAMACIÓN CON INTERCAMBIO DE ALMACENAMIENTO

En algunos sistemas de intercambio(Swapping)(Figura 3.15), un trabajo ocupa el


almacenamiento principal de una vez. Ese trabajo se ejecuta hasta que no puede
continuar y entonces cede el almacenamiento y la CPU al siguiente trabajo. Así
todo el almacenamiento está dedicado a un trabajo por un periodo breve; después
se saca ese trabajo (es decir, se intercambia con el de afuera) y se carga el
siguiente (es decir, se intercambia con el de adentro). Un trabajo normalmente
será intercambiado en ambos sentidos repetidas veces antes de completarse.

64 Lily Alejandra Medrano Mendoza


Sistemas Operativos

65 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Muchos de los primeros sistemas de tiempo compartido se efectuaron con esta


técnica de intercambio. Se podían garantizar tiempos de respuesta razonables
para unos pocos usuarios, pero los diseñadores sabían que se necesitarían
mejores técnicas para manejar un gran número de usuarios. Los sistemas de
intercambio de principios de los años sesenta dieron lugar a los sistemas de
paginación de uso común en la actualidad.
Se han desarrollado sistemas de intercambio más avanzados que permiten
mantener en memoria principal varias imágenes (copias) de usuario al mismo
tiempo. En estos sistemas una imagen de usuario se saca sólo cuando su
almacenamiento es requerido por una imagen de usuario entrantes. Con suficiente
espacio de almacenamiento, tales sistemas reducen considerablemente el tiempo
gastado en los intercambios.

66 Lily Alejandra Medrano Mendoza


Sistemas Operativos

3.2 ORGANIZACIÓN DE LA MEMORIA VIRTUAL

El término almacenamiento virtual suele asociarse con la capacidad para obtener


acceso a direcciones en un espacio de almacenamiento mucho mayor que el
disponible en el almacenamiento primario de un sistema de cómputo determinado.
El almacenamiento virtual no es un concepto nuevo. Apareció por primera vez en
el sistema de cómputo Atlas construido en la Universidad de Manchester,
Inglaterra, en 1960. No obstante, el empleo generalizado de los sistemas de
almacenamiento virtual es relativamente reciente. Los microprocesadores actuales
manejan el almacenamiento virtual.
Los dos métodos más comunes para poner en práctica el almacenamiento virtual
son la paginación y la segmentación. Algunos sistemas de almacenamiento virtual
emplean una técnica u otra, mientras que algunos otros utilizan ambas. Todos los
sistemas de almacenamiento virtual tienen la propiedad de que las direcciones
calculadas por programas en ejecución no son necesariamente las disponibles en
el almacenamiento primario. De hecho, las direcciones virtuales se seleccionan
por lo regular de un conjunto de direcciones mucho más grande que el disponible
en el almacenamiento primario.

3.2.1 EVOLUCIÓN DE LA ORGANIZACIÓN DEL ALMACENAMIENTO

La figura 3.16 muestra cómo ha evolucionado la organización del almacenamiento


desde los sistemas de almacenamiento real dedicados a un solo usuario hasta los
sistemas de almacenamiento virtual que combinan técnica paginación y
segmentación.

67 Lily Alejandra Medrano Mendoza


Sistemas Operativos
3.2.2 ALMACENAMIENTO VIRTUAL: CONCEPTOS BÁSICOS

La clave del concepto de almacenamiento virtual es la disociación de las


direcciones a las que hace referencia un proceso en ejecución de las direcciones
disponibles en el almacenamiento primario. Las direcciones a las que hace
referencia un proceso en ejecución se conocen como direcciones virtuales. Las
direcciones disponibles en el almacenamiento primario se conocen como
direcciones reales. El intervalo de direcciones virtuales a las que puede hacer
referencia un proceso en ejecución se conoce como espacio de direcciones
virtuales, V, del proceso. El intervalo de direcciones reales disponibles en un
sistema de cómputo determinando se conoce como espacio de direcciones reales,
R, del computador. El número de direcciones en V se denota |V|, y el número de
direcciones en R, |R|. En los sistemas de almacenamiento virtual ya implantados lo
normal es que |V| >> |R|, aunque se han construido sistemas en los cuales |V| < |
R|. Aunque los procesos sólo hacen referencia a direcciones virtuales, deben
ejecutarse en el almacenamiento real. Por tanto, es preciso establecer la
correspondencia entre las direcciones virtuales y las reales durante la ejecución de
un proceso. Esto debe hacerse con rapidez, pues en caso contrario el rendimiento
del sistema se degradaría a niveles inaceptables, eliminando así las ganancias
logradas por el empleo del concepto de almacenamiento virtual (figura 3.17)

Se han desarrollado varios métodos para asociar las direcciones virtuales con las
reales. Los mecanismos de traducción dinámica de direcciones (dynamic address
translation, DAT) convierten las direcciones virtuales en direcciones reales ientras
se ejecuta un proceso. Todos estos sistemas tienen la propiedad de que las
direcciones contiguas en el espacio de direcciones virtuales de un proceso no son

68 Lily Alejandra Medrano Mendoza


Sistemas Operativos
necesariamente contiguas en el almacenamiento real. Esto se conoce como
contigüidad artificial(figura 3.18). De esta forma se libera al usuario de la
preocupación por la posición de procedimientos y datos en el almacenamiento
real. El usuario puede escribir los programas con la mayor naturalidad, atendiendo
a detalle de eficiencia del algoritmo y estructura del programa y haciendo caso
omiso de los detalles de la estructura de hardware subyacente. La computadora
se considera (o puede ser) un vehículo de realización de algoritmos en un sentido
lógico, en lugar de, en un sentido físico, un dispositivo de características únicas,
algunas de las cuales pueden obstaculizar el proceso de diseño de programas.

69 Lily Alejandra Medrano Mendoza


Sistemas Operativos
3.2.3 PAGINACIÓN: CONCEPTOS BÁSICOS

Teniendo en cuenta la complejidad del manejo de bloques de tamaño variable en


la multiprogramación con particiones variables, lo más conveniente es comenzar
con la correspondencia de bloques de tamaño fijo; es decir, la paginación.

Una dirección virtual en un sistema de paginación es un par ordenado (p, d) en el


cual p es el número de la página del almacenamiento virtual en la que reside el
elemento al que se hace referencia, y d es el desplazamiento dentro de la página
p donde se localiza dicho elemento(figura 3.19). Un proceso puede ejecutarse si
su página activa se encuentra en el almacenamiento primario. Las páginas se
transfieren del almacenamiento secundario al primario y se colocan dentro de
bloques llamados marcos de página que tienen el mismo tamaño que las páginas
entrantes. Los marcos de página comienzan en direcciones de almacenamiento
real que son múltiplos enteros del tamaño fijo de la página (figura 3.20). Una
página entrante puede colocarse en cualquier marco de página disponible.
Nota: Los marcos de pagina son receptáculos, nichos o huecos donde se van a
depositar bloques de información.

70 Lily Alejandra Medrano Mendoza


Sistemas Operativos

71 Lily Alejandra Medrano Mendoza


Sistemas Operativos
La traducción dinámica de direcciones en la paginación se realiza de la siguiente
forma. Un proceso en ejecución hace referencia a una dirección de
almacenamiento virtual v=(p, d). Un mecanismo de correspondencia de páginas
(Figura 3.21) busca la página p en una tabla de correspondencia de páginas y
determina que la página p se encuentra en el marco de página p’ . La dirección de
almacenamiento real se forma concatenando p’ y d.

72 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Ahora consideremos el proceso con mayor detalle. Debido sobre todo a que
normalmente no todos las páginas del proceso se encuentran en el
almacenamiento primario al mismo tiempo, la tabla de correspondencia de páginas
debe indicar si la página a la que se hace referencia se encuentra o no en el

73 Lily Alejandra Medrano Mendoza


Sistemas Operativos
almacenamiento primario; si sí está, donde se encuentra y si no, dónde puede
encontrarse en el almacenamiento secundario. La figura 3.22 muestra una tabla
de correspondencia de páginas representativas. Un bit de residencia de página, r,
tiene valor 0 si la pagina no se encuentra en el almacenamiento primario, entonces
s es su dirección en el almacenamiento secundario. Si la página se encuentra en
el almacenamiento primario, entonces p’ es su número de marco de página.
Obsérvese que p’ no es una dirección real en el almacenamiento primario; la
dirección de almacenamiento primario en la cual comienza el marco de página, p’’
es el producto de p’ y el tamaño fijo de la página (suponiendo que los marcos de
páginas estén numerados consecutivamente a partir de cero).

Traducción de direcciones en la paginación por correspondencia directa

Un proceso en ejecución hace referencia a una dirección virtual v = (p,d). Antes de


que un proceso comience su ejecución, el sistema carga (durante la conmutación
de contexto) la dirección en almacenamiento primario de la tabla de
correspondencia de páginas en el registro de origen de la tabla de
correspondencia de páginas. La dirección base, b, de la tabla de correspondencia
de páginas se suma al número de página, p, para formar la dirección en
almacenamiento primario, b + p, de la entrada de la página p en la tabla de
correspondencia de páginas. Esta entrada indica que el marco de página p'

74 Lily Alejandra Medrano Mendoza


Sistemas Operativos
corresponde a la página virtual p. Después, p' se concatena con el
desplazamiento, d, para formar la dirección real, r Se dice que éste es un ejemplo
e correspondencia directa porque la tabla de correspondencia de páginas contiene
una entrada para cada página del almacenamiento virtual del proceso. Si el
proceso tiene n páginas en su almacenamiento virtual, entonces la tabla de
correspondencia de páginas con correspondencia directa del proceso contiene
entradas sucesivas para las páginas 0, 1, 2,..., n - 1. La correspondencia directa
se parece mucho al acceso a un elemento de un arreglo mediante índices;
cualquier entrada de la tabla puede localizarse directamente con un solo acceso a
la tabla, véase la figura 3.23.

Tanto la dirección virtual que se traduce, como la dirección base de la tabla de


correspondencia de páginas, se conservan en registros de alta velocidad en el
procesador central, de manera que las operaciones en las que participan pueden
realizarse con rapidez dentro de un solo ciclo de ejecución de instrucciones. Pero
la tabla de correspondencia de páginas con correspondencia directa, que puede
ser muy grande, se conserva por lo regular en almacenamiento primario. En
consecuencia, la referencia a la tabla requiere un ciclo completo de
almacenamiento primario. Como el tiempo de un ciclo de almacenamiento primario
representa la mayor parte de un ciclo de ejecución de instrucciones y se necesita
un ciclo de ejecución de almacenamiento primario adicional para la
correspondencia de páginas, el empleo de traducción de direcciones de páginas
mediante correspondencia directa puede hacer que el sistema ejecute los

75 Lily Alejandra Medrano Mendoza


Sistemas Operativos
programas a la mitad de la velocidad, lo cual es inadmisible. Por tanto, para lograr
una traducción más rápida, la mayor parte de los sistemas actuales colocan la
tabla completa de correspondencia directa de páginas en una memoria caché de
muy alta velocidad. Tal cosa ha sido posible gracias a que los costos de la
memoria caché han disminuido constantemente debido a los avances en la
tecnología de memorias.

Traducción de direcciones en la paginación por correspondencia asociativa

Una forma de acelerar la traducción dinámica de direcciones, es colocar toda tabla


de correspondencia de páginas dentro de un almacenamiento asociativo accesible
por contenido (y no por dirección), el cual tiene ciclos de un orden de magnitud
más rápidos que los del almacenamiento primario. La figura 3.24 muestra cómo se
realiza la traducción dinámica de direcciones con una correspondencia asociativa
pura. Un programa en ejecución hace referencia a una dirección virtual V = (p,d).
Cada entrada en el almacenamiento asociativo se revisa en forma simultánea en
busca de la página p. Se devuelve p' como el marco de página que corresponde a
p, y p' se concatena con d para formar la dirección real, r. Obsérvese que las
flechas dirigidas al mapa de correspondencias asociativo entran realmente en
cada celda del mapa. Esto indica que se revisa al mismo tiempo cada celda del
almacenamiento asociativo en busca de p. Ésta es la razón de que el
almacenamiento asociativo tenga un costo prohibitivo, aun comparado con la
memoria caché, por lo que nunca se utiliza la correspondencia asociativa pura;
aquí se muestra por si alguna vez se vuelve económica la correspondencia
asociativa. De nuevo, el dilema que se presenta es que la traducción dinámica de
direcciones debe ejecutarse con rapidez para hacerse práctico el concepto de
almacenamiento virtual. Si resulta muy costoso el empleo de la memoria caché
para establecer una correspondencia directa pura, o del almacenamiento
asociativo para establecer una correspondencia asociativa pura, los diseñadores
pueden escoger un esquema intermedio que ofrezca muchas de las ventajas de la
memoria caché o del almacenamiento asociativo, pero con un costo más modesto.

76 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Traducción de direcciones en la paginación con correspondencia combinada


asociativa/directa

La mayor parte de la exposición ha tratado hasta ahora acerca del hardware


necesario para poner en práctica de manera eficiente el almacenamiento virtual. El
hardware se ha presentado desde un punto de vista lógico más que físico. No nos
interesa la estructura precisa de los dispositivos, sino su organización funcional y
sus velocidades relativas. Esta visión del hardware es la que deben tener los
diseñadores de sistemas operativos, sobre todo en ambientes de desarrollo en los
cuales puedan modificarse los diseños de hardware.
En las tres últimas décadas, las mejoras han sido mucho más rápidas en el
hardware que en el software. Se ha llegado al punto en que los diseñadores
prefieren no comprometerse con una tecnología de hardware en particular, pues
esperan que pronto se disponga de una tecnología mejor. Los diseñadores de
sistemas operativos no tienen por lo general muchas opciones, ya que deben
poner en práctica los sistemas operativos con las tecnologías existentes. También
deben enfrentarse a las realidades y los factores económicos del hardware actual.
Hoy día, la memoria caché y la asociativa son mucho más caras que el
almacenamiento primario de acceso directo, lo que lleva a algunos diseñadores a
recurrir a un mecanismo conciliador de correspondencia de páginas.
Se utiliza un almacenamiento asociativo capaz de contener sólo un pequeño
porcentaje de la tabla de correspondencia de páginas de un proceso (Figura 3.25)
(esto se denomina a veces buffer de traducción de búsqueda rápida, translation

77 Lily Alejandra Medrano Mendoza


Sistemas Operativos
lookaside buffer). Las entradas de página mantenidas en este mapa de
correspondencias concuerdan nada más con las páginas a las que se ha hecho
referencia más recientemente, utilizando la heurística de que tales páginas tienen
probabilidades de ser requeridas en un futuro cercano. (Éste es un ejemplo de
localidad. La traducción dinámica de direcciones se realiza de la siguiente forma.
Un programa en ejecución hace referencia a una dirección virtual v = (p,d). El
mecanismo de traducción intenta encontrar primero la página p en el mapa de
correspondencias parcial asociativo. Si p está ahí, el mapa asociativo devuelve p'
como número de marco correspondiente a la página virtual p, y p' se concatena
con el desplazamiento d para formar la dirección real, r, que corresponde a la
dirección virtual v = (p,d). Si no se encuentra la página p en el mapa de
correspondencias parcial asociativo, se hace referencia a un mapa directo
convencional en el almacenamiento principal. La dirección, b, en el registro de
origen de la tabla de páginas se suma a p para localizar la entrada apropiada para
la página p en la tabla del mapa de páginas de correspondencia directa en
almacenamiento primario. La tabla indica que p' es el marco de página que
corresponde a la página virtual p, y p' se concatena con el desplazamiento d, para
formar la dirección real r correspondiente a la dirección virtual v = (p,d). Ahora que
se ha localizado p en el marco p', el mapa de correspondencias parcial asociativo
se actualiza para incluir esta información; el hardware reemplaza esta entrada por
la de la página menos recientemente utilizada. Ahora, las referencias (en el futuro
cercano) a la página p serán traducidas con rapidez por medio del mapa de
correspondencias de páginas asociativo parcial.
El mapa de correspondencias de páginas asociativo parcial no necesita ser grande
para lograr un buen desempeño. De hecho, sistemas que utilizan esta técnica con
sólo 8 ó 16 registros de almacenamiento asociativo alcanzan a menudo un 90%
del rendimiento que podría obtenerse con un mapa de correspondencias
asociativo completo, el cual podría requerir en los sistemas actuales cientos o
hasta miles de veces ese número de registros.
Utilizar o no el mecanismo combinado de correspondencia asociativa/directa es
una decisión de ingeniería basada en los factores económicos y capacidades
relativos de las tecnologías de hardware existentes. En consecuencia, es
importante que los estudiantes y diseñadores de sistemas operativos estén al
tanto de las nuevas tecnologías de hardware.

78 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Compartimiento en un sistema de paginación

En los sistemas multiprogramados, en especial en los de tiempo compartido, es


común que muchos usuarios ejecuten los mismos programas. Si se asignan
copias individuales de esos programas a cada usuario, se desperdiciaría mucho
almacenamiento primario. La solución obvia es compartir las páginas que deben
compartirse.
El compartimiento debe controlarse con cuidado para evitar que un proceso
modifique los datos que está utilizando otro proceso. En la mayor parte de los
sistemas actuales que realizan comportamiento, los programas se dividen en

79 Lily Alejandra Medrano Mendoza


Sistemas Operativos
áreas separados de procesamiento y de datos. Los procedimientos no
modificables no deben compartirse sin un control de concurrencia cuidadoso. Los
datos no modificables (como una información tabular fija, por ejemplo) pueden
compartirse. Los procedimientos modificables no pueden compartirse (aunque
alguien podría imaginar un ejemplo esotérico en el cual pudiera tener sentido
hacerlo con alguna forma de control de concurrencia).

Toda la exposición hace evidente la necesidad de identificar si cada página se


puede compartir o no. Una vez clasificadas de esta forma todas las páginas de los
procesos, se realiza el comportamiento en los sistemas de paginación pura como
la figura 3.26. Si se hace que ciertas entradas en la tabla de correspondencia de
páginas de diferentes procesos apunten hacia el mismo marco de página, esos
procesos compartirán dicho marco. Compartir reduce la cantidad de
almacenamiento primario necesaria para la ejecución eficiente de un grupo de
procesos, y puede hacer posible que un sistema de servicio a más usuarios.
Obsérvese en la figura 3.26 que se han colocado las entradas de las páginas de
los procedimientos compartidos en las mismas posiciones en cada mapa de

80 Lily Alejandra Medrano Mendoza


Sistemas Operativos
correspondencias de página (en relación con el comienzo de cada mapa de
correspondencia de páginas).

3.2.4 SEGMENTACIÓN

En la multiprogramación con particiones variables, la colocación de los programas


en el almacenamiento se realiza con una técnica del primer ajuste, mejor ajuste o
peor ajuste. No obstante, persiste la limitación de ejecutar los programas en un
bloque de localidades contiguas de almacenamiento real.
En los sistemas de almacenamiento real con segmentación se elimina dicha
restricción y un programa (y sus datos) pueden ocupar muchos bloques separados
de almacenamiento real (figura 3.27). Los bloques no tienen que ser del mismo
tamaño y sí deben estar formados por localidades contiguas, pero no es forzoso
que ellos sean adyacentes.

81 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Esto da pie a varios problemas interesantes. Por ejemplo, el problema de evitar


que un usuario sea destruido por otros resulta ahora más complejo. Ya no es
suficiente con un par de registros de límites. Así mismo, resulta más difícil limitar el
intervalo de acceso de un programa. Uno de los esquemas para lograr la
protección del almacenamiento en los sistemas con segmentación es el empleo de
claves de protección del almacenamiento, como se ilustra en la figura 3.28.

82 Lily Alejandra Medrano Mendoza


Sistemas Operativos
En los sistemas de almacenamiento virtual con segmentación, una dirección virtual
es un par ordenado v = (s, d), donde s es el número de segmento en
almacenamiento virtual en el que se encuentra el elemento al que se hace
referencia y d es el desplazamiento dentro del segmento s en donde se localiza
dicho elemento (Figura 3.29). Un proceso sólo se puede ejecutar si su segmento
activo (como mínimo) se encuentra en el almacenamiento primario. Los
segmentos se transfieren del almacenamiento secundario al primario como
unidades completas. Todas las localidades del segmento se colocan en
localidades contiguas del almacenamiento primario. Un segmento entrante puede
colocarse en cualquier área disponible del almacenamiento primario cuyo tamaño
sea suficiente para contenerlo. Las estrategias de colocación para la
segmentación son idénticas a las empleadas en la multiprogramación con
particiones variables, y las técnicas más comunes son las del primer ajuste y del
mejor ajuste.

La traducción dinámica de direcciones en la segmentación se realiza de la


siguiente forma. Un proceso en ejecución hace referencia a una dirección de
almacenamiento virtual v = (s, d) (Figura 3.30). Un mecanismo de correspondencia
de segmentos busca el segmento s en la tabla de correspondencia de segmentos
y determina que el segmento s se encuentra en el almacenamiento real a partir de
la dirección s’. La dirección de almacenamiento real correspondiente a la dirección
de almacenamiento virtual v = (s, d) se forma sumando s’ y d.

83 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Control del acceso en los sistemas con segmentación

No se recomienda otorgar a cada proceso un acceso ilimitado a todos los


segmentos del sistema. De hecho, una de las cualidades de los sistemas con
segmentación es el cuidadoso control de acceso que puede realizarse, lo cual se
logra asignando a cada proceso ciertos derechos de acceso a cada segmento y,
de hecho, denegando por completo el acceso a muchos segmentos.
La figura 3.31 muestra los tipos de control de acceso más comunes empleados
por los sistemas actuales. Si un proceso tiene acceso para lectura a un segmento,
podrá obtener cualquier información contenida en le segmento. Si lo desea puede
realizar una copia completa del segmento.

84 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Si un proceso tiene acceso para escritura a un segmento, entonces puede


modificar cualquier parte del contenido del segmento, y colocar información
adicional. Si lo desea, el proceso puede destruir toda la información del segmento.
Un proceso con acceso para ejecución a un segmento puede ejecutar ese
segmento como programa. El acceso de ejecución se suela denegar para
segmentos de datos.
Un proceso con acceso para adición a un segmento puede agregar información
adicional al final del segmento, pero no puede modificar la información existente.
En un sistema con estos cuatro tipos de control de acceso se pueden crear 16
modos de control de acceso diferentes permitiendo o denegando cada uno de los
tipos. Alguno de dichos modos son interesantes, en tanto que otros no tienen
sentido. Por sencillez, considérense las ocho combinaciones diferentes de los
accesos para lectura, escritura y ejecución de la figura 3.32.
En el modo 0 no se permite el acceso al segmento. Esto es útil en esquemas de
seguridad en los que cierto proceso no debe obtener acceso al segmento.
En el modo 1 el proceso tiene acceso sólo para ejecución al segmento.} Este
modo es útil cuando se permite a un proceso usar el programa contenido en el
segmento, pero no puede copiarlo ni modificarlo. Los modos 2 y 3 no son útiles; no
tiene sentido otorgar a un proceso derecho para modificar un segmento si no tiene
derecho a leerlo. En el modo 4 se permite ah proceso acceso sólo para lectura al
segmento. Esto es útil en aplicaciones de consulta de información en las cuales un
proceso debe tener acceso a ha información, pero no puede modificaría.
En el modo 5 se permite al proceso acceso para lectura/ejecución al segmento.
Esto es útil en situaciones en las cuales se permite a un proceso utilizar el

85 Lily Alejandra Medrano Mendoza


Sistemas Operativos
programa contenido en el segmento, pero no puede modificar ha copia original; sin
embargo, el proceso sí puede hacer su propia copia del segmento y modificarla.
En el modo 6 se permite al proceso acceso para lectura/escritura a un segmento.
Esto es útil cuando eh segmento contiene datos que pueden ser leídos o escritos
por el proceso, pero que deben protegerse de una ejecución accidental (ya que el
segmento no es un programa).
En el modo 7 se permite ah proceso acceso ilimitado a un segmento. Esto es útil
para conceder al proceso un acceso total a sus propios segmentos y para
asignarle un estado de máxima confianza para obtener acceso a segmentos de
otros usuarios. El sencillo mecanismo de control del acceso descrito en esta
sección constituye la base de la protección de segmentos en muchos sistemas
reales.

86 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Traducción de direcciones con segmentación por correspondencia directa

Al igual que en los sistemas paginados, existen muchas estrategias para realizar
la traducción de direcciones con segmentación. Puede hacerse con
correspondencia directa, asociativa o directa/asociativa combinada. Puede
realizarse con memorias caché de tamaño suficiente para contener toda la tabla
de correspondencia de segmentos o con almacenamientos asociativos parciales
de tamaño suficiente para contener entradas para los segmentos a los que se ha
hecho referencia más recientemente. En la figura 3.33 se muestra con detalle una
entrada representativa de una tabla de mapa de correspondencias de segmentos.

87 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Primero se verá el caso en el cual ha traducción de direcciones se realiza en


forma normal y después se tratarán varios problemas que pueden presentarse. Un
proceso en ejecución hace referencia a una dirección virtual v = (s, d). Eh número
de segmentos, s, se suma a la dirección base, b, en el registro de origen de la
tabla de correspondencia de segmentos para formar la dirección de memoria real,
b + s, de la entrada para el segmento s en la tabla de correspondencia. Esta tabla
contiene la dirección de memoria primaria s', en la cual comienza el segmento. El
desplazamiento, d, se suma a s' para formar la dirección real, r = s' + d,
correspondiente a la dirección virtual v = (s, d).

La figura 3.34 muestra con detalle una entrada representativa de una tabla de
correspondencia de segmentos. Un bit de residencia, r, indica si el segmento se
encuentra o no en el almacenamiento primario. Si es así, s' es la dirección del
almacenamiento primario en la que comienza el segmento. Si éste no se ncuentra
en el almacenamiento primario, entonces a es la dirección en almacenamiento
secundario de donde debe leerse el segmento antes de que el proceso pueda
continuar su ejecución. Todas las referencias al segmento deben verificarse contra
la longitud del segmento, l, para asegurar que se encuentra dentro de él. En cada
referencia al segmento se revisan también los bits de protección para ver si está

88 Lily Alejandra Medrano Mendoza


Sistemas Operativos
permitida la operación que se intenta. Ahora bien, durante la traducción dinámica
de direcciones, una vez localizada en la tabla de correspondencia la entrada para
el segmento s, se examina primero r para comprobar si el segmento está en el
almacenamiento primario. Si el segmento no se encuentra ahí, se genera una falla
por falta de seguimiento, lo cual hace que el sistema operativo asuma el control y
cargue el segmento al que se hizo referencia desde la dirección a del
almacenamiento secundario. Cuando el segmento está cargado, continúa la
traducción de la dirección comprobando si el desplazamiento d es menor o igual
que la longitud del segmento, l. Si no es así, se genera una excepción por
desbordamiento de segmento, lo que provoca que el sistema operativo tome el
control y termine la ejecución de este proceso. Si el desplazamiento se encuentra
dentro del intervalo del segmento, se revisan los bits de protección para asegurar
que está permitida la operación intentada. Si es así, el último paso es sumar la
dirección base, s', del segmento en almacenamiento primario al desplazamiento,
d, para formar la dirección de almacenamiento real r = s' + d correspondiente a la
dirección de almacenamiento virtual v = (s,d). Si no está permitida la operación
que se intenta, se genera una excepción por protección de segmento, lo cual hace
que el sistema operativo tome el control y termine la ejecución de este proceso.

Compartición en un sistema con segmentación

Una de las ventajas que tiene la segmentación sobre la paginación es que la


segmentación es un concepto lógico, no físico. En su forma más general, los
segmentos no están restringidos arbitrariamente a cierto tamaño, sino que pueden
ser(dentro de límites razonables) tan grandes (o tan pequeños) como sea
necesario. Un segmento correspondiente a un arreglo tiene el tamaño del arreglo.
Un segmento correspondiente a una estructura de datos dinámica puede crecer o
decrecer según lo haga la estructura de datos misma. Un segmento
correspondiente a código de procedimientos generado por un compilador será tan
grande como sea necesario para contener el código.
La compartición de segmentos es bastante sencilla comparado con la
compartición en un sistema de paginación pura. Si un arreglo en un sistema de
paginación pura tiene tres páginas y media de longitud, entonces, en lugar de
tener entradas simples para indicar "arreglo compartido", habrá que tener entradas
individuales para cada una de las páginas donde reside el arreglo El manejo de la
página parcial puede ser difícil. La situación empeora con una estructura de datos
dinámica. Cuando una estructura así crece y ocupa una nueva página, las
indicaciones de compartición, deberán ajustarse en el momento de la ejecución.
En un sistema con segmentación, cuando un segmento se declara como
compartido las estructuras de datos pueden crecer o decrecer sin afectar el hecho
lógico de que residen en segmentos compartidos.
La figura 3.34 muestra cómo se logra la compartición en un sistema de
segmentación pura. Para que dos procesos puedan compartir un segmento, basta
que tengan entradas en sus tablas de segmentos que apunten al mismo segmento
del almacenamiento primario.

89 Lily Alejandra Medrano Mendoza


Sistemas Operativos

3.2.5 SISTEMAS CON PAGINACIÓN/SEGMENTACIÓN

Tanto la segmentación como la paginación ofrecen ventajas significativas como


organizaciones del almacenamiento virtual. A partir de los sistemas construidos a
mediados de los años sesenta, en particular Multics y el TSS de IBM, se han
construido muchos sistemas que combinan la paginación con la segmentación.
Tales sistemas ofrecen las ventajas de ambas técnicas de organización del
almacenamiento virtual. Los segmentos tienen por lo general un tamaño múltiplo
de páginas; no es necesario que todas las páginas de un segmento estén en
almacenamiento primario a la vez, y las páginas que son contiguas en el
almacenamiento virtual no son por fuerza contiguas en el almacenamiento real.
Las direcciones son tridimensionales, y una dirección de almacenamiento virtual,
v, es una tripleta ordenada v = (s,p,d), donde s es el número de segmento, p el
número de página dentro del segmento y d el desplazamiento dentro de la página
donde se encuentra el elemento deseado (Figura 3.35).

90 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Traducción dinámica de direcciones en sistemas con


paginación/segmentación

Considérese ahora la traducción dinámica de direcciones virtuales a direcciones


reales en un sistema con paginación/segmentación que utiliza correspondencia
combinada asociativa/directa como se muestra en la figura 3.36A. Un proceso en
ejecución hace referencia a una dirección virtual v=(s,p,d). Las páginas a las que
e ha hecho referencia más recientemente tienen entradas en un
almacenamiento parcialmente asociativo. Se realiza una búsqueda asociativa para
tratar de localizar (s,p) en el almacenamiento asociativo. Si se encuentra (s,p),
entonces el marco de página del almacenamiento primario p’ en el cual reside la
página p del segmento s, se concatena con el desplazamiento d para formar la
dirección real, r, correspondiente a la dirección virtual v=(s,p,d), con lo cual finaliza
la traducción de la dirección.
Por lo regular, la mayor parte de las peticiones de traducción de direcciones son
satisfechas mediante la búsqueda en el almacenamiento asociativo. Cuando esto
no es posible, se establece una correspondencia directa de la siguiente forma. La
dirección base, b, de la tabla de mapa de correspondencia de segmentos (en
almacenamiento primario) se suma el número de segmentos, s, para formar la
dirección, b + s, de la entrada para el segmento s en la tabla de mapa de
correspondencia de segmentos en el almacenamiento primario. La entrada en
dicha tabla índica la dirección base s’, de la tabla de páginas (en el
almacenamiento primario) para el segmento s. El número de página, p, se suma a
s’ para firmar la dirección p+s’, de la tabla de páginas para la página p del
segmento s. Esta tabla indica que p’ es el número de marco de página que
corresponde a la página virtual p. El número de marco, p’, se concatena con el
desplazamiento, d, para formar la dirección real, r, correspondiente a la dirección
virtual v=(s,p,d).

91 Lily Alejandra Medrano Mendoza


Sistemas Operativos

92 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Este proceso de traducción da por hecho, desde luego, que cada elemento de
información se encuentra donde se supone que debe estar. Pero hay muchos
pasos donde puede fallar el proceso. La búsqueda en la tabla de mapa de
correspondencia de segmentos puede indicar que el segmento s no se encuentra
en el almacenamiento primario, lo que ocasiona una falla por falta de segmentos y
hace que el sistema operativo localice el segmento en el almacenamiento
secundario, cree una tabla de páginas para el segmento y cargue la página
apropiada en el almacenamiento primario, reemplazando posiblemente una página
existente de ese proceso o de algún otro. Si el segmento se encuentra en el

93 Lily Alejandra Medrano Mendoza


Sistemas Operativos
almacenamiento primario, la referencia a la tabla de mapa de correspondencia de
páginas puede indicar que la página deseada no se encuentra en el
almacenamiento primario. Ello generaría una falla de página, haciendo que el
sistema operativo tome el control, localice la página en el almacenamiento
secundario y la cargue (una vez más, reemplazando posiblemente otra página). Al
igual que en la segmentación pura, una dirección de almacenamiento virtual puede
rebasar el final del segmento, generando así una excepción por desbordamiento
de segmento. Por otra parte, los bits de protección también pueden indicar que no
está permitida la operación que se va a realizar sobre la dirección virtual a la que
se hace referencia, con lo que se genera así una excepción por protección del
segmento. El sistema operativo debe manejar todas estas posibilidades.
El almacenamiento asociativo (o de igual forma, una memoria caché de alta
velocidad) es crítico para la operación eficiente de este mecanismo de traducción
dinámica. Si se utilizara un mecanismo de correspondencia directa pura,
manteniendo el mapa de correspondencia complejo dentro del almacenamiento
primario, el promedio de referencias al almacenamiento virtual requeriría un ciclo
de almacenamiento para obtener acceso a la tabla de correspondencia de
segmentos, un segundo ciclo para hacer referencia a la tabla de correspondencia
de páginas y un tercer ciclo para hacer referencia al elemento deseado en el
almacenamiento real. De esta manera cada referencia a un elemento implicaría
tres ciclos de almacenamiento y el sistema de cómputo funcionaria a un tercio de
su velocidad normal, ¡con lo que consumiría dos tercios de su tiempo en la
traducción de direcciones! Resulta interesante que muchos sistemas logren operar
al 90% o más de la velocidad máxima de sus procesadores de control con sólo 8 ó
16 registros asociativos.
La figura 3.37 índica la estructura detallada de tablas requerida por un sistema con
paginación/segmentación. En el nivel más alto está un tabla de procesos que
contiene una entrada por cada proceso conocido por el sistema. La entrada en
dicha tabla para un proceso dado apunta a la tabla de correspondencia de
segmentos del proceso. Cada entrada en la tabla de correspondencia de
segmentos de un proceso apunta a la tabla de correspondencia de páginas del
segmento asociado, y cada entrada de esa tabla apunta al marco de página donde
reside esa página o bien a la dirección en almacenamiento secundario donde
puede encontrarse la página. En un sistema con un número muy grande de
procesos, segmentos y páginas, esta estructura de tabla puede consumir una
porción importante del almacenamiento primario. La cuestión aquí es que la
traducción de dirección se realiza con más rapidez en el momento de la ejecución
si todas las tablas están en el almacenamiento primario; pero con más tablas en el
almacenamiento primario, el sistema tiene capacidad para menos procesos y así
baja la productividad.
Los diseñadores de sistemas operativos deben evaluar dicha cuestión para lograr
el delicado equipo necesario para que el sistema funcione eficientemente y
proporcione un servicio seguro a sus usuarios.

94 Lily Alejandra Medrano Mendoza


Sistemas Operativos

95 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Compartimiento en un sistema con paginación/segmentación

En los sistemas con paginación/segmentación son muy importantes las ventajas


de compartir segmentos. El compartimiento se logra mediante entradas en la
tablas de correspondencia de segmentos de diferentes procesos que apuntan a la
misma tabla de correspondencia de páginas, como se indica en la figura 3.38.
El compartimiento tanto en sistemas de paginación como en aquellos con
segmentación o paginación segmentación, requiere un cuidadoso manejo por
parte del sistema operativo. En particular, el lector debe considerar lo que
sucedería si una página entrante reemplazara una página compartida por muchos
procesos.

96 Lily Alejandra Medrano Mendoza


Sistemas Operativos

97 Lily Alejandra Medrano Mendoza


Sistemas Operativos

3.3 ADMINISTRACIÓN DE LA MEMORIA VIRTUAL

3.3.1 ESTRATEGIAS DE ADMINISTRACIÓN DE MEMORIA VIRTUAL

Estrategiasde obtención. Determinan cuándo se debe transferir una página o un


segmento del almacenamiento secundario al primario. Las estrategias de
obtención por demanda esperan a que un proceso en ejecución haga referencia a
una página o un segmento antes de extraer la página o el segmento al
almacenamiento primario. Los esquemas de obtención anticipada intentan
determinar por adelantado a cuáles páginas o segmentos hará referencia un
proceso. Si la probabilidad de una referencia es alta y hay espacio disponible,
entonces se trae al almacenamiento primario la página o el segmento antes de
que se haga la referencia explícita.

Estrategias de colocación. Determinan en qué lugar del almacenamiento


primario se debe colocar una página o un segmento entrante. Los sistemas de
paginación vuelven trivial la decisión de la colocación, porque una página entrante
se puede ubicar en cualquier marco de la página disponible. Los sistemas con
segmentación requieren estrategias de colocación como las tratadas en el
contexto de los sistemas de multiprogramación con particiones variables.

Estrategias
de reemplazo. Sirven para decidir cuál página o segmento se debe
desplazar para dejar espacio a una página o segmento entrante cuando está
completamente ocupado el almacenamiento primario.

3.3.2 ESTRATEGIAS DE REEMPLAZO DE PÁGINAS

En los sistemas con paginación es común que estén en uso todos los marcos de
páginas. En este caso, las rutinas de administración del almacenamiento del
sistema operativo deben decidir que página del almacenamiento primario se debe
desplazar para dejar espacio a una página entrante. Se verán las siguientes
estrategias de reemplazo de páginas:

El principio de optimalidad


Reemplazo de páginas aleatorio
Primeras entradas-primeras salidas (PEPS)
La menos recientemente utilizada (LRU)
La menos frecuentemente utilizada (LFU)
La no utilizada recientemente (NUR)
Modificaciones de PEPS
Frecuencia de fallas de página
Paginación por demanda
Paginación Anticipada

98 Lily Alejandra Medrano Mendoza


Sistemas Operativos
El principio de optimalidad

El principio de optimalidad establece que, para obtener un rendimiento optimo, la


página que se debe remplazar es aquélla que tardará más tiempo en volver a ser
utilizada. Se puede demostrar la optimalidad de esta estrategia, pero desde luego
ésta es irrealizable puesto que no podemos predecir el futuro. Esta estrategia
óptima de reemplazo se denomina OPT o MIN.
Por tanto, para lograr un buen rendimiento se intenta una aproximación al principio
de optimalidad utilizado técnicas de reemplazo de páginas que se aproximen al
reemplazo óptimo de páginas.

Reemplazo de páginas aleatorio

Si se busca una estrategia de reemplazamiento, el reemplazo de páginas aleatorio


es una técnica sencilla para lograrlo. Así, todas las páginas que se encuentran en
el almacenamiento principal tienen la misma probabilidad de ser elegidas para el
reemplazo. Esta estrategia podría seleccionar cualquier página para ser
emplazada, incluyendo la siguiente página a la que se hará referencia (lo cuál
constituye, por supuesto, la peor elección de reemplazo de páginas). Las
decisiones de reemplazo aleatorio de páginas se pueden tomar rápidamente, y
con un número significativo de marcos de páginas donde elegir sólo habría una
pequeña probabilidad de reemplazar una página a la que se vaya hacer referencia
de nuevo casi de inmediato. Sin embargo, este esquema casi no se utiliza debido
a su enfoque aleatorio para acertar o errar.

Reemplazo de páginas de primeras entradas-primeras salidas (PEPS)

En el reemplazo de páginas de primeras entradas-primeras salidas (PEPS), para


cada página se registra el instante en que entró en el almacenamiento primario.
Cuando se necesita reemplazar una página, se escoge la que ha permanecido en
el almacenamiento primario. Cuando se necesita reemplazar una página, se
escoge la que ha permanecido en el almacenamiento durante mayor tiempo. Por
lo tanto esta estrategia parece razonable, pues esa página ha tenido su
oportunidad y es tiempo de darle una oportunidad a otra página.
Lamentablemente, es probable que esta estrategia reemplace páginas muy
utilizadas, ya que si una página permanece en el almacenamiento primario
durante mucho tiempo puede deberse a que está en uso constante. Por ejemplo
en los grandes sistemas de tiempo compartido es común que muchos usuarios
compartan una copia de un editor de texto cuando capturan y corrigen sus
programas. La estrategia de reemplazo de páginas de primeras entradas-primeras
salidas en tales sistemas podría decidir reemplazar una página muy utilizada del
editor, y esta será sin duda una mala elección, porque la página se volvería a
transferir al almacenamiento principal casi de inmediato. Dicha estrategia también
se podría poner en práctica con una simple cola PEPS: a medida que llega una
página, se coloca al final de la cola, y las páginas que se reemplaza son las de
principio de cola.

99 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Reemplazo de páginas de la menos recientemente utilizada (LRU).

Esta estrategia selecciona, para su reemplazo, aquella página que no ha sido


utilizada durante el mayor tiempo. La estrategia se basa en la heurística de
localidad según la cual el pasado reciente es un buen indicador del futuro cercano,
de modo que LRU exige que se marque cada página con el instante en que se
hace referencia a ella. Esto podría requerir mucho trabajo adicional, por lo que la
estrategia LRU pese a ser atractiva, no se usa a menudo en los sistemas actuales;
lo que se hace es utilizar estrategias que se aproximen a la LRU y que no
ocasionen esos grandes costos. La estrategia LRU se puede realizar con una
estructura de listas que contenga una entrada por cada marco de página ocupado.
Cada vez que se hace referencia a un marco de páginas, la entrada
correspondiente a esa página se coloca al principio de la lista, y las entradas más
antiguas se llevan al final de la lista. Cuando hay que reemplazar una página para
dejar espacio a otra entrante, se selecciona la entrada final de la lista, se libera el
marco de página correspondiente (lo cual posiblemente requiera escribir una
página modificada en el almacenamiento secundario), se coloca la página entrante
en el marco de página y la entrada correspondiente a ese marco de página se
coloca al principio de la lista, porque esa página es la que ha sido utilizada más
recientemente. Este esquema llevaría a la práctica fielmente la estrategia LRU,
pero también incurre en un considerable trabajo extra.
Siempre hay que tener cuidado al aplicar razonamiento heurísticos en los sistemas
operativos. Por ejemplo, en la estrategia LRU, la página menos recientemente
usada podría ser la siguiente en ser utilizada, si un programa realiza un ciclo
grande que abarque varias páginas. Si se reemplazara la página LRU, el sistema
se encontraría a sí mismo transfiriendo esa página de nuevo al almacenamiento
principal casi de inmediato. Dicho fenómeno también podría ocurrir en un sistema
con una serie de llamadas a procedimientos profundamente anidados; a medida
que los procedimientos llamados volvieran a la página que contenía la llamada
original, esa página podría reemplazarse fácilmente como página LRU justo antes
del retorno final.

Reemplazo de páginas de la menos frecuente utilizada (LFU)

Una aproximación a LRU es la estrategia de “la menos frecuentemente


utilizada”(LFU), en la cual lo importante es la intensidad con la que se ha utilizado
cada página; la página por remplazar es aquella que se ha utilizado menos
frecuentemente o a la que se ha hecho referencia con menos frecuencia. De
nuevo, el atractivo intuitivo es real, pero con toda facilidad se podría seleccionar
para reemplazo una página equivocada. Por ejemplo, la página menos
frecuentemente utilizada podría ser aquella que se trajo al almacenamiento
principal más recientemente. Esa página ha sido utilizado una sola vez, mientras
que las demás páginas que se encuentran en almacenamiento principal podrían
haber sido utilizadas en varias ocasiones. El mecanismo de reemplazo de páginas
reemplazará esta página, aunque de hecho tenga una alta probabilidad de ser
utilizada de inmediato.

100 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Al parecer, todos los esquemas de reemplazo de páginas corren cierto riesgo de
tomar decisiones equivocadas. Esto sucede por el simple hecho de que no se
puede predecir con precisión el futuro. Por tanto es deseable una estrategia de
reemplazo de paginas que tomo decisiones razonables la mayor parte del tiempo y
que implique un gasto extra reducido.

Reemplazo de páginas de la no utilizada recientemente (NUR)

Un esquema popular de aproximación a la LRU con poco trabajo extra es el de “la


no utilizada recientemente” (NUR). No es probable que sean utilizadas pronto las
páginas que no sean utilizadas recientemente, por lo que pueden reemplazarse
con páginas entrantes.
Cuando es deseable reemplazar una página que no ha sido modificada mientras
estaba en el almacenamiento primario, la estrategia NUR se lleva a la práctica con
la adición de dos bits de hardware por página. Esos bits son

a) bit de referencia = 0 si no se ha hecho referencia a la página


= 1 se ha hecho referencia a la página

b) bit de modificación = 0 si la página no ha sido modificada


= 1 si la página ha sido modificada

El bit de modificación se denomina a menudo bit sucio. La estrategia NUR trabaja


en la forma siguiente. Inicialmente los bits de referencia de todas las páginas valen
cero. Cuando ocurre una referencia a una página, su bit de referencia toma el alor
1.
Inicialmente, los bits de modificación de todas las páginas valen cero. Cuando una
página se modifica, su bit de modificación toma el valor 1. Cuando se va a
reemplazar una página, primero se intenta encontrar una página a la que no se ha
hecho referencia (por que estamos aproximando la estrategia LRU). De otro modo,
no queda más elección que remplazar una página a la que se hizo referencia. Si
una página no ha sido objeto de una referencia, se comprueba si ha sido
modificada. Si no ha sido se reemplaza, pues requiere menos trabajo que el
reemplazo de una página modificada, la cual debe escribirse en el
almacenamiento secundario. De otro modo, hay que reemplazar una página
modificada.

Modificaciones de PEPS; reemplazo de páginas por reloj y reemplazo de


páginas con segunda oportunidad

La evidente debilidad de la estrategia PEPS es que puede decidir reemplazar una


página muy utilizada que ha permanecido en memoria durante mucho tiempo.
Esta posibilidad se puede evitar reemplazando solo aquellas páginas cuyos bits de
referencia valgan 0.
La variante de PEPS denominada “con segunda oportunidad” examina el bit de
referencia de la página más antigua; si este bit vale 0, se selecciona de inmediato
la página para ser remplazada. Si el bit de referencia vale 1, se le asigna el valor 0

101 Lily Alejandra Medrano Mendoza


Sistemas Operativos
y la página se pasa al final de la lista y se considera en esencia como una página
nueva; gradualmente, dicha página se desplaza hacia el principio de la lista, donde
será seleccionada para reemplazo sólo si su bit de referencia sigue valiendo 0. En
esencia esto da a la página una segunda oportunidad de permanecer en el
almacenamiento principal si su bit de referencia cambia a 1 antes de que la página
llegue al principio de la lista.
La variación “por reloj” del algoritmo de la segunda oportunidad dispone las
páginas en una lista circular, en lugar de una lista lineal. Un apuntador a la lista se
desplaza alrededor de la lista circular en la misma forma que gira la manecilla de
un reloj. Cuando el bit de referencia de una página toma el valor 0, el apuntador se
mueve al siguiente elemento de la lista (simulando el movimiento de esta página al
final de la lista PEPS).

REEMPLAZO DE PÁGINAS POR FRECUENCIA DE FALLAS DE PÁGINAS

Una medida de la eficiencia con que se ejecuta un proceso en un ambiente de


paginación es su tasa de fallas de página. Los procesos que fallan
constantemente pueden estar hiperpaginando por que tienen muy pocos marcos
de páginas y no pueden mantener sus conjuntos de trabajo en almacenamiento
primario. Los procesos que casi nunca fallan pueden tener de hecho demasiados
marcos de páginas y estar impidiendo el proceso de otros procesos del sistema.
Idealmente, los procesos deben operar en algún punto entre esos extremos. El
algoritmo de frecuencia de fallas de página (page fault frequency, PFF) ajusta el
conjunto de páginas residentes de un proceso (es decir aquellas páginas que
están actualmente en la memoria) basándose en la frecuencia con que el proceso
tiene fallas de página (o, alternativamente, según el tiempo que hay entre fallas de
página denominado entre fallas).

El PFF registra el tiempo entre la ultima falla de página y el vigente. Si ese tiempo
es mayor que un valor límite superior, entonces se liberan todas las páginas a las
que no se haya hecho referencia en ese intervalo. Si el tiempo es menor que un
valor limite inferior, la página entrante se convierte en un miembro del conjunto de
páginas residentes del proceso.
Lo práctico del PFF es que ajusta dinámicamente el conjunto de páginas
residentes de un proceso en respuesta al comportamiento cambiante del proceso.
Si un proceso esta conmutándose a un conjunto de trabajo mayor, entonces
tendrá fallas frecuentes de páginas y el PFF le dará más marcos de páginas. Una
vez que se acumule el nuevo conjunto de trabajo, la frecuencia de fallas de
páginas se reducirá y el PFF mantendrá el conjunto de páginas residentes o
incluso podrá reducirlo Evidentemente, la clave para la obtención adecuada y
eficiente del PFF es mantener los limites en valores apropiados.

Una ventaja del PFF con respecto al reemplazo de páginas con conjunto de
trabajo es que ajusta el conjunto de páginas residentes sólo después de cada falla
de pagina, mientras que un mecanismo de conjunto de trabajo debe operar
después de cada referencia a la memoria.

102 Lily Alejandra Medrano Mendoza


Sistemas Operativos
PAGINACIÓN POR DEMANDA

El sentido común indica que las páginas de un proceso deben cargarse por
demanda. No se debe transferir ninguna página del almacenamiento secundario al
primario hasta que un proceso en ejecución haga explícitamente referencia a ella.
Hay varias razones por las cuales es atractiva esta estrategia.

Los resultados de la teoría de la computabilidad, es específicamente el


problema de la detención, indican que no se pueden predecir con precisión la
trayectoria de ejecución que seguirá un programa. Así pues, cualquier intento de
carga páginas con anticipación a su uso puede hacer que se carguen las páginas
equivocadas.

La paginación por demanda garantiza que las únicas páginas que se transfieren
al almacenamiento principal son aquellas que requieren los procesos.

Eltrabajo extra requerido para decir cuáles páginas se deben transferir al


almacenamiento principal es mínimo. Las estrategias de obtención anticipada de
páginas pueden requerir mucho tiempo de ejecución adicional.

PAGINACIÓN ANTICIPADA

En la paginación anticipada, el sistema operativo intenta predecir cuáles páginas


necesitará un proceso y entonces carga dichas páginas cuando hay espacio
disponible. Si se toman las decisiones correctas, se puede reducir
considerablemente el tiempo de ejecución total del proceso. Mientras el proceso
se ejecuta con sus páginas actuales, el sistema carga nuevas página, que estarán
disponibles cuando las requiera el proceso.

Ventajas de la paginación anticipada.

Sise pueden tomar las decisiones correctas en casi todos los casos, se reducirá
bastante el tiempo de ejecución de un proceso. Así pues, es importante tratar
desarrollar mecanismo de paginación anticipada, aunque no puedan ser cien por
ciento precisos.

En muchos casos se puede tomar decisiones precisas. Si la toma de decisiones


se puede realizar con relativamente poco trabajo extra, entonces la ejecución de
un proceso dado se puede acelerar en gran medida sin afectar negativamente
otros procesos activos.

Como el hardware de la computadora se vuelve cada vez más económico, las


consecuencias de una mala decisión son menos serias. Se puede adquirir
almacenamiento principal extra para manejar la acumulación de páginas
excedentes que un mecanismo de anticipación transferiría al almacenamiento
principal.

103 Lily Alejandra Medrano Mendoza


Sistemas Operativos
LIBERACIÓN DE PÁGINAS

En una administración del almacenamiento mediante conjuntos de trabajos, los


procesos indican por referencia explícita cuáles páginas desean utilizar. Los
procesos que ya no requieran páginas específicas deberán desechar tales páginas
de sus conjuntos de trabajo. Por lo regular, hay un tiempo durante el cual
permanecen en el almacenamiento principal las páginas que ya no se requieren.
Cuando es evidente que ya no será necesario una página, un usuario podría dar
una orden de liberación voluntaria de página para liberar el marco de página. Esto
eliminaría el retraso que implica dejar que el proceso deseche poco a poco la
página de su conjunto de trabajo.
La liberación voluntaria de páginas podría eliminar el desperdicio y acelerar la
ejecución de un programa, pero la mayoría de los usuarios de los sistemas de
cómputo actuales ni siquiera saben qué es una página y no se les puede pedir que
tomen decisiones al nivel del sistema. La incorporación de mandatos de liberación
de páginas en los programas de usuario podría ser mucho más lento el desarrollo
de las aplicaciones.
La esperanza real en esta área es que los compiladores y sistemas operativos
detecten automáticamente las situaciones en las que debe liberar una página, y
mucho antes de lo que es posible con las estrategias que emplean conjuntos de
trabajo.

TAMAÑO DE PAGINAS

En los sistemas de paginación, el almacenamiento real se divide normalmente en


marcos de página de tamaño fijo. ¿Qué factores determinan si una página debe
ser grande o pequeña? Aquí se resumen algunos de ellos:

Cuanto menor sea el tamaño de la página, más páginas y más marcos de


páginas habrá y mayores tendrán que ser las tablas de páginas. En los sistemas
en los que las tablas de páginas ocupan el almacenamiento primario, hay una
necesidad de páginas más grandes. El desperdicio de almacenamiento debido a
tablas excesivamente grandes se denomina Fragmentación de tablas. Cabe
señalar que este argumento es menos válido hoy día gracias a la disponibilidad de
memorias muy grandes y económicas.

Con tamaño de páginas grandes, se paginan en el almacenamiento primario


grandes cantidades de información a la que quizá nunca se haga referencia. Esto
indica la necesidad de páginas más pequeña.

Dado que las transferencias de E/S desde el disco son relativamente lentas, se
desea reducir al mínimo el número de transferencias a que se somete un
programa a medida que se ejecuta. Esto parece indicar la necesidad de tamaño
de páginas grades.

Los programas tienden a exhibir la propiedad de localidad de referencia y esas


localidades tienden a ser más pequeñas. Así, un tamaño de página más pequeño

104 Lily Alejandra Medrano Mendoza


Sistemas Operativos
ayudará a un programa a establecer un conjunto trabajo más ajustado; es decir,
las páginas del conjunto de trabajo que se mantienen en el almacenamiento real
contendrán más elementos de información a los que se hará referencia
intensamente.

Debido a que las unidades de procedimientos y datos rara vez comprenden un


número entero de páginas, los sistemas con paginación experimentan
fragmentación interna, como se ilustra en la figura 3.39. Existe la misma
posibilidad de que un segmento de longitud s tenga su última página casi llena o
casi vacía y, por tanto, en promedio hay media página de fragmentación interna
(con la restricción de que una página no puede contener partes de más de un
segmento). Cuanto menor sea el tamaño de la página, menor será la
fragmentación interna.

105 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Muchos resultados publicados, tanto teóricos como empíricos, sugieren la
necesidad de páginas pequeñas. La figura 3.40 muestra los tamaños de página
utilizados en varios computadores populares e importantes a lo largo de la
historia.0bservese el tamaño relativamente pequeño de página elegido por la
VAX8800. Obsérvese también la popularidad de los tamaños de página de
aproximadamente 4K caracteres. A medida que aumenta el tamaño y se reduce el
costo de las memorias de las computadoras, y conforme proliferan las
aplicaciones que utilizan más memoria, es probable que el significado de “tamaño
de página pequeño” sea modificado en el contexto de máquinas más poderosas.
De hecho, tamaños de páginas de 32K e incluso de 1Mb podrían a llegar a ser
considerados “pequeños”.

COMPORTAMIENTO DE UN PROGRAMA CUANDO SE USA PAGINACIÓN

La paginación es un concepto valioso y tal vez se seguirá integrando en los


sistemas de cómputo en las próximas décadas. Se han realizado muchos estudios
que examinan el comportamiento de los procesos en los ambientes de paginación.
La figura 3.41 muestra el porcentaje de las páginas de un proceso representativo a
las que se ha hecho referencia desde el momento en que comenzó a ejecutarse el
proceso. La pronunciada pendiente ascendente inicial indica que un proceso
tiende a ser referencia a una porción significativa de sus páginas inmediatamente
después de comenzar la ejecución. Con el tiempo, la pendiente disminuye y la
gráfica se aproxima asintóticamente al 100%. Sin duda, algunos procesos hacen
referencia al 100% de sus páginas, pero la gráfica se dibuja para reflejar el hecho
de que muchos procesos se pueden ejecutar durante largo tiempo sin hacer
referencia al 100% de sus páginas. Esto sucede a menudo cuando se llama rara
vez a ciertas rutinas de procesamiento de errores.

106 Lily Alejandra Medrano Mendoza


Sistemas Operativos

La figura 3.42 indica el efecto de variar el tamaño de la página manteniendo


constante la cantidad de almacenamiento principal. La gráfica muestra que el
número de fallas de página experimentados por un proceso en ejecución tiende a
crecer a medida que aumenta el tamaño de la página. Esto ocurre por que al
aumentar el tamaño de la página se traen a un almacenamiento primario de
tamaño fijo más procedimientos y datos a los que no se hará referencia. Por
consiguiente, hay una disminución en el porcentaje del limitado almacenamiento
primario del proceso ocupado por procedimientos y datos a los que se hará
referencia. Como el patrón de referencias del proceso es en esencia
independiente de la cantidad de almacenamiento primario asignado, se generan
más fallas de página para traer los procedimientos y datos requeridos al
almacenamiento principal durante la ejecución del proceso. La porción punteada
de la gráfica indica que a medida que el tamaño de la página se aproxima al

107 Lily Alejandra Medrano Mendoza


Sistemas Operativos
tamaño de todo el proceso, el número de fallas de página decae rápidamente a
cero.

La figura 3.43 muestra como varia el tiempo medio entre fallas (es decir, el tiempo
entre las fallas de página) a medida que aumenta el número de páginas asignado
a un proceso. La gráfica es monótonamente creciente; cuantos más marcos de
página tiene un proceso, mayor es el tiempo entre las fallas de página (por
supuesto, siempre que no haya un comportamiento extraño como el observado en
la anomalía PEPS). Pero la gráfica se curva en un punto y su pendiente decae con
rapidez. Es el punto en el cual el proceso tiene todo su conjunto de trabajo en el
almacenamiento primario. En un principio, el tiempo entre las fallas crece muy
rápidamente, a medida que se puede mantener en el almacenamiento primario
una parte mayor del conjunto de trabajo. Una vez que la asignación de
almacenamiento primario es suficiente para contener el conjunto de trabajo, la
curva se dobla en forma pronunciada, indicado que asignar marcos de página

108 Lily Alejandra Medrano Mendoza


Sistemas Operativos
adicionales no tiene un efecto tan grande en el aumento de tiempo entre las fallas.
La clave es tener el conjunto de trabajo en el almacenamiento principal. Franklin,
Graham y Gupta han observado situaciones anómalas en las que aumentar el
tamaño de la ventana del conjunto de trabajo, y por tanto el del conjunto de
trabajo, reduce de hecho el tiempo entre fallas. No obstante, esta clase de
comportamiento es poco común.

Se han realizado muchos otros experimentos que parecen indicar la necesidad de


páginas pequeñas. En uno de ellos, los investigadores midieron el número de
instrucciones ejecutadas por páginas antes de pasar a otra página. Con un
tamaño de página de 1024 palabras, la mayor parte del tiempo se ejecutaron en
una página menos de la quinta parte de las instrucciones.

109 Lily Alejandra Medrano Mendoza


Sistemas Operativos

4. ADMINISTRACIÓN DEL PROCESADOR

La asignación de procesadores físicos a los procesos hace posible que éstos


realicen su trabajo, y tal asignación es un problema complejo manejado por el
sistema operativo.

4.1 NIVELES, OBJETIVOS Y CRITERIOS DE LA PLANIFICACIÓN

4.1.1 NIVELES DE PLANIFICACIÓN

Se tratarán tres niveles importantes de planificación (figura 4.1.)

Planificación de alto nivel. También conocida como planificación de trabajo,


determina cuáles trabajos podrán competir activamente por los recursos del
sistema o cuáles trabajos deben admitirse en el sistema, por lo que también se
llama planificación de admisión. Una vez admitidos, los trabajos se convierten en
procesos o grupos de procesos.

Planificación de nivel intermedio. Determina qué procesos pueden competir por


la CPU. El planificador de nivel intermedio responde a las fluctuaciones
temporales en la carga del sistema mediante la suspensión temporal y la
activación (o reanudación) de procesos para lograr una operación más fluida del
sistema y para ayudar al alcanzar ciertas metas globales de rendimiento del
sistema. Este planificador de nivel intermedio actúa, pues, como amortiguador
entre la admisión de trabajos en el sistema y la asignación de la CPU a esos
trabajos.

Planificación de bajo nivel. Determina a cuál proceso listo se le asignará la CPU


cuando ésta se encuentre disponible, y de hecho se encarga de asignar la CPU a
ese proceso (es decir, despacha la CPU al proceso). La planificación de bajo nivel
se realiza mediante el despachador (dispatcher), que opera muchas veces por
segundo. El despachador debe residir en todo momento en el almacenamiento
primario.

110 Lily Alejandra Medrano Mendoza


Sistemas Operativos

111 Lily Alejandra Medrano Mendoza


Sistemas Operativos
4.1.2 OBJETIVOS DE LA PLANIFICACIÓN

En el diseño de una disciplina de planificación deben considerarse muchos


objetivos. En particular, una disciplina de planificación debe:

Ser justa: Una disciplina de planificación es justa si todos los procesos se tratan
de la misma forma y ningún proceso se aplaza en forma indefinida.

Elevar al máximo la producción o rendimiento: Una disciplina de planificación


debe tratar de atender el mayor número posible de procesos por unidad de tiempo.

Aumentar al máximo el número de usuarios interactivos que reciben respuesta


en tiempos aceptables (es decir, en unos cuantos segundos).

Ser predecible: Una tarea debe ejecutarse aproximadamente en el mismo


tiempo y casi al mismo costo sea cual sea la carga del sistema.

Reducir al mínimo el gasto extra: Contra lo que podría pensarse, este punto no
suele considerarse como uno de los objetivos más importantes. El gasto extra se
considera por lo común como un desperdicio de recursos, pero la inversión de
cierta porción de los recursos del sistema como gasto extra puede mejorar en gran
medida el rendimiento total del sistema.

Equilibrar el aprovechamiento de los recursos: Los mecanismos de planificación


deben mantener ocupados los recursos del sistema. Deben favorecerse los
procesos que requieren recursos poco utilizados.

Lograr un equilibrio entre la respuesta y el aprovechamiento: La mejor manera


de garantizar tiempos de respuesta adecuados es tener suficientes recursos
disponibles en el momento en que son necesarios. El precio que se debe pagar
por esta estrategia es que el aprovechamiento global de los recursos será pobre.
En los sistemas de tiempo real, las respuestas rápidas son esenciales y el
aprovechamiento de los recursos es menos importante. En otros tipos de
sistemas, la economía exige un aprovechamiento efectivo de los recursos.

Evitar el aplazamiento indefinido: En muchos casos, el aplazamiento indefinido


es tan perjudicial como el bloqueo mutuo. La mejor forma de evitarlo es emplear el
envejecimiento; es decir, mientras un proceso espera un recurso, su prioridad
debe crecer. En algún momento, la prioridad será tan alta que el recurso se
asignará al proceso.

Imponer prioridades: En los ambientes en que se asignan prioridades a los


procesos, los mecanismos de planificación deben favorecer a los proceso de más
alta prioridad.

112 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Dar preferencia a los procesos que ocupan recursos decisivos: Aunque un
proceso tenga baja prioridad, podría estar ocupando un recurso decisivo, y el
recurso puede ser requerido por un proceso de prioridad alta. Si el recurso no es
apropiable, el mecanismo de planificación debe dar al proceso un trato mejor del
que se le daría de ordinario, de manera que libere el recurso con más rapidez.

Dar un mejor trato a los procesos que muestren un comportamiento deseable


(por ejemplo, tasas bajas de paginación).

Degradarse paulatinamente con las cargas pesadas: Un mecanismo de


planificación no debe desplomarse bajo el peso de una carga fuerte en el sistema.
Debe evitar la carga excesiva impidiendo la creación de procesos nuevos cuando
la carga es pesada, o bien debe dar servicio a la carga mayor con una reducción
moderada del nivel de atención a todos los procesos.

Muchas de estas metas están en conflicto unas con otras, por lo que la
planificación se torna un problema complejo.

4.1.3 CRITERIOS DE LA PLANIFICACIÓN

Para lograr los objetivos de planificación, un mecanismo debe considerar:

La limitación de un proceso por entrada y salida. Cuando un proceso obtiene la


CPU, ¿sólo la usará brevemente antes de generar una petición de E/S?

La limitación de un proceso por CPU. Cuando un proceso obtiene la CPU,


¿tiende a usarla hasta que expira su cuanto de tiempo?

Si un proceso es por lotes o interactivo. Los usuarios interactivos suelen hacer
peticiones "triviales" que deben atenderse de inmediato para garantizar tiempos de
respuesta adecuados. Los usuarios por lotes por lo general pueden tolerar
retrasos razonables.

Cuán urgente es la respuesta. Un proceso por lotes que tarda toda la noche no
necesitará una respuesta inmediata. Un sistema de control de procesos en tiempo
real que supervise una refinería de petróleo requiere una respuesta rápida, quizás
para evitar una explosión.

Las prioridades de los procesos. Los procesos de alta prioridad deben recibir
mejor tratamiento que los de baja prioridad.

La frecuencia con la que un proceso está generando fallas de página.


Supuestamente, un proceso que genera pocas fallas de página tiene acumulados
sus conjuntos de trabajo en el almacenamiento principal. Pero los procesos que
experimentan muchas fallas de página no han establecido aún sus conjuntos de
trabajo, y lo convencional es favorecer a los procesos que ya los han establecido.

113 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Otro punto de vista es que los procesos con altas tasas de fallas de página deben
tener preferencia, ya que usan poco la CPU antes de generar una petición de E/S.

La frecuencia con la que los recursos de un proceso son apropiados por otro de
mayor prioridad. Los procesos cuyos recursos son apropiados muy a menudo
deben recibir un tratamiento menos favorable. La cuestión es que cada vez que el
sistema operativo invierte trabajo extra en echar a andar este proceso, el breve
lapso de ejecución que se logra antes de la apropiación no justifica el gasto extra
necesario para echar a andar el proceso en primer lugar.

Cuánto tiempo real de ejecución ha recibido el proceso. Algunos diseñadores


opinan que deben favorecerse los procesos con poco tiempo de ejecución. Otro
punto de vista es que un proceso que ha recibido mucho tiempo de ejecución debe
estar por terminar y debe favorecerse para ayudarlo a que termine y abandone el
sistema tan pronto como sea posible.

Cuánto tiempo más necesitará el proceso para terminar. Los tiempos de espera
promedio pueden reducirse al mínimo ejecutando primero aquellos procesos que
requieran los menores tiempos de ejecución para terminar. Por desgracia, casi
nunca se sabe con exactitud cuánto tiempo durará un proceso.

4.1.4 PLANIFICACIÓN APROPIATIVA Y NO APROPIATIVA

Una disciplina de planificación es no apropiativa si una vez que la CPU ha sido


asignada al proceso, ya no se le puede arrebatar. Una disciplina de planificación
es apropiativa si al proceso se le puede arrebatar la CPU.
La planificación apropiativa es útil en los sistemas en los cuales los procesos de
alta prioridad requieren una atención rápida. En los sistemas de tiempo real, por
ejemplo, las consecuencias de perder una interrupción pueden ser desastrosas.
En los sistemas interactivos de tiempo compartido, la planificación apropiativa es
importante para garantizar tiempos de respuesta aceptables.
La apropiación tiene un precio. El cambio de contexto implica un gasto extra. Para
que la técnica de apropiación sea efectiva deben mantenerse muchos procesos en
almacenamiento principal de manera que el siguiente proceso se encuentre listo
cuando quede disponible la CPU. Conservar en el almacenamiento principal
programas que no estén en ejecución también implica un gasto extra.
En los sistemas no apropiativos, los trabajos largos retrasan a los cortos, pero el
tratamiento para todos los procesos es más justo. Los tiempos de respuesta son
más predecibles porque los trabajos nuevos de alta prioridad no pueden desplazar
a los trabajos en espera.
Al diseñar un mecanismo de planificación apropiativa no hay que perder de vista la
arbitrariedad de casi todos los sistemas de prioridades. Se puede construir un
mecanismo complejo para implantar fielmente un esquema de apropiación por
prioridades sin que, de hecho, se hayan asignado las prioridades en forma
coherente.

114 Lily Alejandra Medrano Mendoza


Sistemas Operativos
En los sistemas operativos no es raro encontrar mecanismos rebuscados que
apoyan esquemas un tanto arbitrarios. El diseñador debe evaluar con todo
cuidado cada mecanismo propuesto antes de implantarlo. La sencillez resulta
atractiva, pero si el mecanismo no se puede hacer sencillo, debe tratarse al menos
de hacerlo efectivo y significativo.

4.1.5 EL CRONÓMETRO DE INTERVALOS O RELOJ DE INTERRUPCIONES

Se dice que el proceso al cual está asignada la CPU está en ejecución. Si el


proceso pertenece al sistema operativo, se dice que el sistema operativo está en
ejecución y puede tomar decisiones que afectan la operación del sistema. Para
evitar que los usuarios monopolicen el sistema (ya sea deliberada o
accidentalmente), el sistema operativo tiene mecanismos para arrebatar la CPU al
usuario. El sistema operativo mantiene un reloj de interrupciones o cronómetro de
intervalos para generar interrupciones en algún momento futuro específico (o
después de cierto tiempo). Luego la CPU se despacha al proceso. Éste mantiene
el control de la CPU hasta que la libera voluntariamente, hasta que el reloj
interrumpe o hasta que alguna otra interrupción desvía la atención de la CPU. Si el
usuario se encuentra en ejecución y el reloj interrumpe, el sistema operativo entra
en ejecución y entonces decide a qué proceso se asignará enseguida la CPU.
El reloj de interrupciones ayuda a garantizar tiempos de respuesta aceptables para
los usuarios interactivos, evita que el sistema quede bloqueado en un ciclo infinito
de algún usuario y permite que los procesos respondan a eventos dependientes
de tiempo.
Los procesos que deben ejecutarse periódicamente dependen del reloj de
interrupciones.

4.1.6 PRIORIDADES

Las prioridades pueden ser asignadas en forma automática por el sistema, o bien
se pueden asignar externamente. Pueden ganarse o comprarse. Pueden ser
estáticas o dinámicas. Pueden asignarse en forma racional, o de manera arbitraria
en situaciones en las que un mecanismo del sistema necesita distinguir entre
procesos pero no le importa cuál de ellos es en verdad más importante.

Prioridades estáticas y dinámicas

Las prioridades estáticas no cambian. Los mecanismos de prioridad estática son


fáciles de llevar a la práctica e implican un gasto extra relativamente bajo. Sin
embargo, no responden a cambios en el ambiente que podrían hacer necesario un
ajuste de prioridades.
Los mecanismos de prioridad dinámica responden a los cambios. La prioridad
inicial asignada a un proceso tiene una duración corta, después de lo cual se
ajusta a un valor más apropiado. Los esquemas de prioridad dinámica son más
complejos e implican un mayor gasto extra que los esquemas estáticos. El gasto
extra queda justificado por el aumento en la sensibilidad del sistema.

115 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Prioridades compradas

Un sistema operativo debe proporcionar un servicio competente y razonable a una


gran comunidad de usuarios, pero también debe manejar las situaciones en las
cuales un miembro de la comunidad necesite un trato especial.
Un usuario con un trabajo urgente puede estar dispuesto a pagar extra, es decir,
comprar prioridad, por un nivel más alto de servicio. Este pago extra es obligatorio
debido a que puede ser necesario arrebatar recursos a otros usuarios que también
pagan. Si no hubiera un pago extra, entonces todos los usuarios pedirían un nivel
más alto de servicio.

4.2 ALGORITMOS DE SECUENCIACIÓN

4.2.1 PLANIFICACIÓN DE PLAZO FIJO (apropiativa)

En la planificación de plazo fijo se programan ciertos trabajos para terminarse en


un tiempo especifico o plazo fijo. Estos trabajos pueden tener un gran valor si se
entregan a tiempo, y carecer de él si se entregan después del plazo. A menudo los
usuarios están dispuestos a pagar algo extra con tal de asegurar la terminación a
tiempo. La planificación de plazo fijo es compleja por muchas razones.

El usuario debe informar por adelantado de las necesidades precisas de


recursos de la tarea. Semejante información rara vez está disponible.

El sistema debe ejecutar la tarea a plazo fijo sin degradar demasiado el servicio
a los otros usuarios.

El sistema debe planificar cuidadosamente sus necesidades de recursos dentro


del plazo. Ello puede ser difícil por la llegada de nuevos procesos que impongan
demandas impredecibles al sistema.

Si hay muchas tareas a plazo fijo activas al mismo tiempo, la planificación
puede ser tan compleja que se necesiten métodos de optimización avanzados
para cumplir con los plazos.

La administración intensiva de recursos requerida por la planificación de plazo


fijo puede producir un gasto extra sustancial. Aunque los usuarios estén
dispuestos a pagar una cuota alta por los servicios recibidos, el consumo neto de
los recursos del sistema puede ser tan alto que el resto de la comunidad puede
sufrir una degradación del servicio. Los diseñadores de sistemas operativos deben
considerar con cuidado tales conflictos.

116 Lily Alejandra Medrano Mendoza


Sistemas Operativos
4.2.2 PLANIFICACIÓN DE PRIMERAS ENTRADAS-PRIMERAS SALIDAS
(PEPS) (no apropiativa)

Tal vez la disciplina más simple de planificación sea la de primeras entradas


primeras salidas (PEPS)(Figura 4.2). Los procesos se despachan de acuerdo con
su tiempo de llegada a la cola de procesos listos. Cuando un proceso tiene la
CPU, se ejecuta hasta terminar. La disciplina PEPS es no apropiativa. Es justa en
el sentido formal, pero algo injusta en cuanto a que los trabajos largos hacen
esperar a los cortos y los trabajos sin importancia hacen esperar a los importantes.
PEPS ofrece variaciones relativamente pequeñas en los tiempos de respuesta y
por tanto es más predecible que los otros esquemas. No es útil en la planificación
para usuarios interactivos porque no puede garantizar buenos tiempos de
respuesta.

El esquema PEPS rara vez se usa como esquema principal en los sistemas
actuales, pero a menudo está incorporado en otros esquemas. Por ejemplo,
muchos esquemas de planificación despachan los procesos de acuerdo con la
prioridad, pero los procesos con la misma prioridad se despachan mediante el
esquema PEPS.

4.2.3 PLANIFICACIÓN ROUND ROBIN (RR) (apropiativa)

En la planificación Round Robin (por turno) (Figura 4.3), los procesos se


despachan en forma PEPS, pero se les asigna una cantidad limitada de tiempo de
CPU conocida como división de tiempo o quantum. Si un proceso no termina antes
de que expire su tiempo de CPU, se le quita la CPU y ésta se asigna al siguiente
proceso en espera. El proceso desposeído se coloca al final de la lista de
procesos listos.
La asignación por turno es afectiva en ambientes de tiempo compartido en los
cuales el sistema necesita garantizar tiempos de respuesta razonables para
usuarios interactivos. El gasto extra debido a la apropiación es bajo gracias a
eficientes mecanismos de cambio de contexto y a la asignación de suficiente
memoria para que los procesos residan en el almacenamiento principal al mismo
tiempo.

117 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Kleinrock presenta una variable de la planificación por turno conocida como


planificación por turno egoísta. En este esquema, cuando un proceso entra en el
sistema reside en principio en una cola de espera hasta que su prioridad alcanza
el nivel de las prioridades de los procesos que están en la cola activa. Mientras un
proceso está en la cola de espera, su prioridad aumenta con una tasa a hasta que
es lo bastante alta para entrar en la cola activa, y a partir de ese momento su
prioridad aumenta con una tasa b.

4.2.4 TAMAÑO DEL QUANTUM

La determinación del tamaño del cuanto es vital para la operación efectiva de un


sistema de cómputo.
Si el cuanto es muy grande, cada proceso tendrá el tiempo necesario para
terminar, de manera que el esquema de planificación por turno degenera en uno
de primeras entradas - primeras salidas. Si el cuanto es muy pequeño, el gasto
extra por cambio de contexto se convierte en el factor dominante y el rendimiento
del sistema se degradará hasta el punto en que la mayor parte del tiempo se
invierta en la conmutación del procesador, con muy poco o ningún tiempo para
realizar los cálculos de los usuarios.

4.2.5 PLANIFICACIÓN POR PRIORIDAD DEL TRABAJO MÁS CORTO (SJF)


(no apropiativa)

La planificación por prioridad del trabajo más corto (SJF, shortest-job-first) es una
disciplina no apropiativa según la cual se ejecuta primero el trabajo (o proceso) en
espera que tiene el menor tiempo estimado de ejecución hasta terminar. SJF
reduce el tiempo de espera promedio de PEPS, pero, los tiempos de espera tienen
una variación más grande (es decir, son más impredecibles) que los de PEPS,
sobre todo el caso de trabajos grandes.
SJF favorece los trabajos (o procesos) cortos a expensas de los largos. Muchos
diseñadores declaran que cuanto más pequeño sea el trabajo, mejor será el
servicio que reciba. No hay un acuerdo universal al respecto en especial cuando
deben tenerse en cuenta las prioridades de los trabajos.

118 Lily Alejandra Medrano Mendoza


Sistemas Operativos
SJF selecciona trabajos para atenderlos de manera que se asegure que el
siguiente trabajo se completará y saldrá del sistema lo antes posible. Esto tiende a
reducir el número de trabajos en espera, y reduce también el número de los que
esperan detrás de un trabajo grande. Como resultado, SJF puede reducir al
mínimo el tiempo de espera promedio de los trabajos que entran en el sistema.
El problema obvio con SJF es que exige conocer con exactitud el tiempo que
tardará en ejecutarse un trabajo o proceso, y esa información no suele estar
disponible; lo mejor que puede hacer SJF es basarse en los tiempos de ejecución
estimados por el usuario. En los ambientes de producción donde se ejecutan
regularmente los mismos trabajos es posible proporcionar estimaciones
razonables, pero en los ambientes de desarrollo los usuarios rara vez conocen el
tiempo que tardaran en ejecutarse sus programas.
Basarse en las estimaciones de los usuarios tiene una consecuencia interesante.
Si los usuarios saben que el sistema está diseñado para favorecer trabajos con
cortos tiempos estimados de ejecución, pueden proporcionar estimaciones bajas.
No obstante, el planificador puede ser diseñado de manera que elimine semejante
tentación. Se puede indicar al usuario con anticipación que si su trabajo se ejecuta
en más tiempo del estimado será suspendido y el usuario deberá pagar el trabajo.
Una segunda opción es ejecutar el trabajo durante el tiempo estimado más un
pequeño porcentaje extra y después aplazarlo, es decir preservarlo en su forma
actual para proseguir con su ejecución en un momento posterior. Lógicamente, el
usuario ha de pagar el gasto extra del aplazamiento y la reactivación y sufrirá un
retraso en la terminación del trabajo. Otra solución es ejecutar la tarea durante el
tiempo estimado a tarifas normales y después cobrar una tarifa extra, muy por
encima de la normal, por el tiempo adicional de ejecución. En este sistema, el
usuario que proporcione estimaciones exageradamente bajas para obtener mejor
servicio acabará pagando una cuota muy alta.
SJF, al igual que PEPS, no es apropiativa y por tanto no resulta útil en ambientes
de tiempo compartido en los que deben garantizarse tiempos de respuesta
razonables.

4.2.6 PLANIFICACIÓN POR EL TIEMPO RESTANTE MÁS CORTO (SRT)


(apropiativa)

La planificación por el tiempo restante más corto (SRT, shortest-remaining-


timescheduling) es la contraparte apropiativa de SJF y es útil en tiempo
compartido. En SRT, el proceso con el menor tiempo estimado de ejecución para
terminar es el primero en ejecutarse, incluyendo los procesos nuevos. En SJF, una
vez que un trabajo comienza su ejecución continúa hasta terminar. En SRT, un
proceso en ejecución puede ser desposeído por uno nuevo con menor tiempo de
ejecución estimado. SRT también requiere estimaciones efectivas del futuro y el
diseñador debe tener en cuenta el posible abuso por parte del usuario de las
estrategias de planificación del sistema.
SRT implica un mayor gasto extra que SJF. Debe estar al tanto del tiempo
transcurrido de servicio del trabajo en ejecución y debe manejar apropiaciones
ocasionales. Los procesos pequeños que llegan se ejecutarán casi de inmediato.

119 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Los trabajos grandes, empero, tienen un tiempo de espera promedio más largo y
una variación del tiempo de espera mayor que en SJF.
SRT requiere registrar el tiempo de servicio transcurrido y ello con tribuye al gasto
extra del esquema. En teoría, SRT ofrece tiempos mínimo de espera, pero debido
al gasto extra de la apropiación, es posible que SJF tenga mayor rendimiento en
ciertos casos.

4.2.7 PLANIFICACIÓN POR PRIORIDAD DE LA TASA DE RESPUESTA MAS


ALTA (HRN) (no apropiativa)

Brinch Hansen desarrolló la estrategia de prioridad de la tasa de respuesta más


alta (HRN, highest-response-ratio-next) que corrige algunas deficiencias de SJF,
particularmente el retraso excesivo de trabajos largos y el favoritismo excesivo
para los trabajos cortos. HRN es una disciplina de planificación no apropiativa en
la cual la prioridad de cada trabajo no sólo es función del tiempo de servicio, sino
también del tiempo que ha esperado el trabajo para ser atendido. Cuando un
trabajo obtiene el procesador, se ejecuta hasta terminar. Las prioridades
dinámicas en HRN se calculan de acuerdo con la siguiente fórmula:

Como el tiempo de servicio aparece en el denominador, los trabajos cortos


tendrán preferencia. Pero como el tiempo de espera aparece en el numerador, los
trabajos largos que han esperado también tendrán un trato favorable. Obsérvese
que la suma

es el tiempo de respuesta del sistema para el trabajo si éste se inicia de inmediato.

4.2.8 COLAS DE RETROALIMENTACIÓN EN MÚLTIPLES NIVELES


(apropiativa)

Cuando un proceso obtiene la CPU, sobre todo cuando todavía no ha tenido


oportunidad de establecer un patrón de comportamiento, el planificador no tiene
idea de la cantidad de tiempo de CPU que necesitará el proceso. Los procesos
limitados por E/S normal mente usan CPU sólo un momento antes de generar una
solicitud de E/S; los procesos limitados por CPU pueden usar el procesador
durante horas si está disponible en forma no apropiativa.

120 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Un mecanismo de planificación debe:

favorecer los trabajos cortos,


favorecer los trabajos limitados por E/S para lograr un mejor aprovechamiento
de los dispositivos de entrada/salida, y
determinar la naturaleza de un trabajo lo más pronto posible y planificarlo de
acuerdo con su naturaleza.

Las colas de retroalimentación en múltiples niveles (Figura 4.4) ofrecen una


estructura que cumple con estos objetivos. Un proceso nuevo entra en la red de
colas al final de la primera cola. Se desplaza en esa cola por PEPS hasta que
obtiene la CPU. Si el trabajo termina o cede la CPU para esperar la terminación de
una operación de E/S o de algún evento, el trabajo abandona la red de colas. Si el
cuanto expira antes de que el proceso ceda voluntariamente la CPU, el proceso se
colocará al final de la cola del siguiente nivel. El proceso será atendido otra vez
cuando llegue a la cabeza de esa cola si está vacía la primera. Mientras el
proceso utilice todo el cuanto proporcionado en cada nivel, continuará
desplazándose al final de la siguiente cola inferior. Por lo general, existe una cola
en el nivel más bajo en la cual el proceso circula por turno (RR) hasta que termina.

En muchos esquemas de retroalimentación en múltiples niveles, el cuanto


asignado al proceso cuando pasa a una cola de nivel inferior alcanza un valor
mayor. De esta forma, cuanto más tiempo se encuentre un proceso en la red de
colas más grande será el cuanto asignado cada vez que obtenga la CPU, pero tal
vez no obtenga la CPU muy a menudo, porque los procesos de las colas de nivel
superior tienen mayor prioridad. Un proceso en cierta cola no puede ejecutarse a
menos que estén vacías las colas de nivel más alto. Un proceso en ejecución será
desposeído por un proceso que llegue a una cola superior.

Considérese ahora cómo responde un mecanismo de ese tipo a diferentes tipos


de procesos. El mecanismo debe favorecer los procesos limitados por E/S para
lograr un buen aprovechamiento de los dispositivos y una buena respuesta para
los usuarios interactivos; y de hecho lo hace porque los procesos limitados por E/S
entrarán en la red con alta prioridad y rápidamente les será asignada la CPU. El
tamaño del cuanto de la primera cola se elegirá lo bastante grande para que la
gran mayoría de los trabajos limitados por E/S generen una petición de E/S antes
de que expire el primer cuanto. Cuando el proceso solicita entrada /salida,
abandona la red y ha obtenido un tratamiento favorable, tal como se deseaba.

121 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Ahora considérese una tarea limitada por CPU que necesita mucho tiempo de
procesador. Esa tarea entra en la cola más alta de la red con alta prioridad. Recibe
rápidamente su primera asignación de la CPU, pero su cuanto expira y el proceso
se coloca en la cola del siguiente nivel inferior. En ese momento, el proceso tiene
una prioridad menor que la de los procesos que llegan al sistema, en particular los
trabajos limitados por E/S, que obtienen primero la CPU. El proceso limitado por

122 Lily Alejandra Medrano Mendoza


Sistemas Operativos
CPU acaba recibiendo ésta, obtiene un cuanto mayor que en la cola más alta y
vuelve a utilizar la totalidad de su cuanto. Luego es situado al final de la siguiente
cola inferior. El proceso sigue desplazándose a colas inferiores, espera más entre
divisiones de tiempo y utiliza todo su cuanto cada vez que obtiene la CPU (a
menos que ésta sea arrebatada por un proceso entrante). En algún momento, el
proceso limitado por CPU llega a la cola de más bajo nivel en donde entrará en
una planificación por turno hasta terminar.

Las colas de retroalimentación con múltiples niveles son ideales para separar
procesos en categorías basadas en su necesidad de la CPU. En un sistema de
tiempo compartido, cada vez que un proceso abandona 'a red de colas puede
"marcarse" con la identidad de la última cola en donde estuvo, y cuando el
proceso entra de nuevo en la red de colas, puede enviarse directamente a la cola
en la cual terminó su operación por última vez. En este caso, el planificador está
usando un razonamiento heurístico, según el cual el comportamiento anterior del
proceso es un buen indicador de su comportamiento en un futuro inmediato. De
esta forma, un proceso limitado por CPU que regresa a la red de colas no se
coloca en las colas de alto nivel, donde interferiría con el servicio a los procesos
cortos de alta prioridad o con los limitados por E/S.

Si los procesos se colocan siempre dentro de la red en la cola que ocuparon la


última vez, será imposible que el sistema responda a cambios de un proceso, por
ejemplo, de estar limitado por CPU a estar limitado por E/S. El problema puede
resolverse marcando al proceso también con su duración dentro de la red la última
vez que estuvo en ella. Así, cuando el proceso entra de nuevo en la red puede
colocarse en la cola correcta. Entonces, si el proceso entra en una fase nueva en
la cual deja de estar limitado por CPU y empieza a estar limitado por E/S, el
proceso experimentará en principio un tratamiento lento mientras el sistema
determina que la naturaleza del proceso está cambiando. Pero el mecanismo de
planificación responderá con rapidez a este cambio. Otra forma de hacer que el
sistema responda a los cambios en el comportamiento de los procesos es permitir
que un proceso ascienda un nivel en la red de colas cada vez que abandona
voluntariamente la CPU antes de que expire su cuanto.

El mecanismo de colas de retroalimentación en múltiples niveles es un buen


ejemplo de mecanismo adaptativo, que responde a los cambios en el
comportamiento del sistema que controla. Los mecanismos adaptativos implican
en general una carga extra mayor que los no adaptativos pero la sensibilidad ante
los cambios en el sistema da como resultado una mejor capacidad de respuesta y
justifica el aumento en el gasto extra.

Una variante común del mecanismo de colas de retroalimentación en múltiples


niveles consiste en hacer que un proceso circule por turno varias veces en cada
cola antes de pasar a la siguiente cola inferior. El número de ciclos en cada cola
crece por lo regular cuando el proceso pasa a la siguiente cola inferior.

123 Lily Alejandra Medrano Mendoza


Sistemas Operativos
4.2.9 PLANIFICACIÓN DE PORCIÓN JUSTA (APROPIATIVA)

Los sistemas manejan por lo general varios conjuntos de procesos relacionados


entre sí (por ejemplo, un conjunto de procesos pertenecientes a un usuario en
particular); la planificación de porción justa (FSS, fair share scheduling) permite la
planificación de tales conjuntos de procesos. En el ambiente UNIX, FSS se
desarrolló para "proporcionar a un costo fijo una tasa previamente especificada de
los recursos del sistema a un conjunto de usuarios relacionados entre sí.

Normalmente, UNIX aplica parecidas tasas de consumo de recursos a todos los


procesos(figura 4.5), pero con FSS los recursos se reparten a varios grupos de
porción justa (figura 4.6).Los recursos no utilizados por un grupo de porción justa
se distribuyen a otros grupos en proporción a sus necesidades relativas.

124 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Existen mandatos de UNIX para establecer grupos de porción justa y asociar


usuarios específicos a esos grupos. UNIX utiliza un planificador por turno con
prioridad. Cada proceso tiene una prioridad y los procesos con cierta prioridad se
asocian a una cola de prioridad adecuada. El planificador de procesos elige al
proceso listo que está a la cabeza de la cola de más alta prioridad, y los procesos
con una misma prioridad se asignan por turno; un proceso que todavía requiere
servicio después de ceder la CPU tendrá una prioridad menor; las prioridades del
kernel son altas y se aplican a los procesos que se ejecutan dentro de él: los
eventos de disco tienen una prioridad mayor que los de terminal; las prioridades
de usuario son menores que las del kernel. La prioridad del usuario es la razón
entre la utilización reciente del procesador y el tiempo real transcurrido: cuanto
menor sea este valor mayor será la prioridad.

125 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Los grupos de porción justa obtienen prioridades de acuerdo con su proximidad a
la consecución de sus metas en la utilización de recursos. Los grupos que van mal
tienen mayor prioridad; los otros tienen una prioridad menor. Este tipo de esquema
de equilibrio dinámico de cargas fue investigado en el proyecto Multics del
proyecto MAC de M.I.T.

126 Lily Alejandra Medrano Mendoza


Sistemas Operativos

5. ADMINISTRACIÓN DE ENTRADA/SALIDA

5.1 PRINCIPIOS DE HARDWARE Y SOFTWARE DE E/S

El control de las operaciones de E/S es otra de las misiones que debe realizar un
sistema operativo para facilitar el uso de los distintos dispositivos que forman parte
de un sistema informático.
Los dispositivos hardware de la computadora cuya misión es la de intercambiar
datos con el procesador y la memoria principal en un sentido, en otro o en ambos,
comúnmente denominados periféricos, no son fáciles ni cómodos de utilizar
directamente por los procesos. Por otro lado, los procesos no necesitan conocer
las peculiaridades ni características de dichos dispositivos, sino únicamente
intercambiar datos con ellos. Por tanto, estos detalles deben ser ocultados para
que de este modo las operaciones de E/S sean independientes del tipo y modelo
del dispositivo (Figura 5.1).
En general, el software de gestión de las operaciones de E/S que posee un
sistema operativo representa, aproximadamente, el 50 por ciento del total, por lo
que esta parte es de suma importancia, más para el diseñador y programador de
sistemas que para los programadores de aplicaciones y usuarios, los cuales
necesitan, al menos, un conocimiento global de dicha gestión.

127 Lily Alejandra Medrano Mendoza


Sistemas Operativos
5.1.1 DISPOSITIVOS DE HARDWARE

A lo largo de la historia de las computadoras se han desarrollado muchos tipos de


dispositivos que podemos reunir en tres grandes grupos:

Dispositivos de almacenamiento
Terminales
Dispositivos de Comunicaciones

A su vez, los dispositivos se pueden clasificar, atendiendo al tipo de información


que manejan y cómo lo hacen, en los siguientes grupos:

Dirigidos
a bloques. Tratan la información en bloques de tamaño fijo (256 a
1,024 bytes). Su característica principal es que se puede leer cada bloque como
una unidad independiente de las demás (por ejemplo los discos

Dirigidos
a carácter. Entregan o aceptan cadenas de caracteres sin tener en
cuenta ninguna estructura prefijada. No son direccionables ni pueden realizar
operaciones de búsqueda (por ejemplo una terminal).

5.1.2 DISPOSITIVOS DE ALMACENAMIENTO

Discos

Son los dispositivos para almacenamiento secundario más comunes. Aceptan y


recuperan datos a alta velocidad (superior a 2 Mbits/seg.). Los datos son
transferidos entre el disco y la memoria en bloques.

Los discos pueden ser fijos y removibles. Los primeros no se pueden cambiar,
mientras que los segundos pueden ser intercambiados, con los que se consigue
un mayor volumen de almacenamiento.

Pueden reunirse varios discos en un paquete (disk pack)(disco Duro) para


conseguir con ello un mayor almacenamiento en un reducido espacio. Todos los
discos de un disco duro giran a la misma velocidad (aproximadamente 60
vueltas/segundos). Cada disco se divide en pistas concéntricas de tal forma que
todas las homólogas de los distintos discos forman lo que se denomina cilindro.

Cada pista, a su vez, se divide en sectores, y cada sector contiene un bloque de


información. Los discos flexibles (floppy disk) son similares, pero sólo constan de
un disco y son siempre removibles. Estos discos giran a menos velocidad, y sólo
lo hacen cuando necesitan realizar una transferencia de información.

Cada sistema operativo necesitará conocer como es el formato que tiene el disco,
es decir, cuantos sectores tiene cada pista y cuantos bytes pueden ser

128 Lily Alejandra Medrano Mendoza


Sistemas Operativos
almacenados en un sector. Si un sector es detectado como incorrecto, se marca
como tal, y el sistema operativo no vuelve acceder al mismo.

La lectura y escritura en un disco se realiza gracias a una cabeza magnética que


se mueve a lo largo de un radio del disco, hacia el centro o hacia la periferia, en un
movimiento conocido como búsqueda (seeking). Las órdenes de magnitud del
tiempo invertido en esta operación oscilan entre 20 y 80 mseg. En el caso de los
disk pack (discos duros) existe una cabeza por cara de cada disco, de manera que
el movimiento de la misma es simultaneo, recorriendo la misma pista de cada
disco en el mismo instante.

Cinta magnética

Se destinan principalmente al almacenamiento de grandes archivos de datos y a


copias de seguridad periódicas.

Al igual que los discos, se trata de un medio magnético consistente en una cinta
plástica recubierta por una cara de una fina capa de oxido magnetizable.
Generalmente se denomina trama (frame) a un conjunto de nueve bits de los
cuales 8 se destinan para bytes de datos y el noveno se conoce como bit de
paridad, para el control de errores.

El empaquetamiento de datos se realiza a densidades que oscilan entre 800 y


6,250 tramas por pulgada de cinta. La densidad de una cinta es constante en toda
ella.

Las tramas se agrupan en registros separados por huecos (GAPS) y, a su vez los
registros se agrupan en archivos (files) separados por huecos mayores que los
anteriores.

La transferencia de datos a/o desde cinta debe ser realizada a través de buffers de
tamaño adecuado.

Muchos sistemas operativos graban un registro inicial en la cinta incluyendo el


número de serie, propietario y otras informaciones necesarias para el sistema
operativo. Este registro se conoce como etiqueta (Label).

La lectura de las cintas se pueden hacer en dos sentidos: avance y retroceso.

5.1.3 TERMINALES

En general se denomina terminal al conjunto formado por un teclado y una


pantalla conectados a la computadora para introducir datos a través del primero y
recibirlos a través de la segunda.

Los terminales pueden dividirse en dos categorías: los que se conectan a través
del estándar RS-232 y los mapeados en memoria.

129 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Terminales RS-232

Constan de teclado y pantalla que transmiten bit a bit en serie. La velocidad de


transmisión de estos bits viene dada en baudios (bits/seg.), siendo valores
utilizados:

300, 1.200, 2.400, 1.800 y 9.600.

Estos terminales se conectan a la computadora a través de un cable físico. Este


cable en su entrada a la computadora termina en una tarjeta hardware o interfaz y
a subes se conectan al bus de dicha computadora. Se conocen, generalmente,
con el nombre genérico TTY.

Terminales mapeados en memoria

No necesitan línea de conexión a la computadora ya que están directamente


conectados al bus del mismo. En estos terminales, el teclado se conecta
directamente al bus y es independiente a la pantalla.

Líneas de comunicaciones

Son dispositivos cuya misión es la conectar entre si computadoras y estos con sus
terminales cuando la distancia es grande. Suele llevar consigo elementos físicos,
como puede ser la propia línea, los adaptadores a la línea denominados módems,
y lógicos, como puede ser el protocolo de comunicación y el método de control y
detección de errores que se utilice.

Las líneas de comunicaciones pueden ser de varios tipos:

Síncronas o Asíncronas. Según se transmita la información entre dispositivos de


forma sincronizada (reloj) o no.

Según el sentido de la transmisión.

Simplex cuando los datos se transmiten en una sola dirección.

Half-duplex
si los datos pueden transmitirse en ambas direcciones pero no
simultáneamente.

Full-duplexcuando los datos pueden transmitirse en ambas direcciones


simultáneamente.

130 Lily Alejandra Medrano Mendoza


Sistemas Operativos
5.1.4 INTERFAZ PROCESADOR- PERIFÉRICO

La velocidad y complejidad de los periféricos determinan cómo deben ser


conectados al procesador. Estudiaremos tres tipos de conexión:
Registros

Los dispositivos se pueden conectar al procesador por los registros de los


dispositivos que pueden ser accedidos directamente en una zona determinada de
la memoria o, indirectamente, por medio de instrucciones hardware que devuelven
el estado del mismo.

Estos registros tienen cuatro misiones:

Transferir el estado del dispositivo (status).


Transferir instrucciones al dispositivo.
Transferir datos desde el dispositivo.
Transferir datos al dispositivo.

Ahora bien, el procesador sólo puede dar comienzo a las operaciones de E/S sin
poder controlar su terminación, pero para ver cuándo se ha completado una
operación se pueden emplear dos métodos:

Polling. Consiste en leer constantemente el registro de status del dispositivo.


Tiene el inconveniente de ocupar el procesador un tiempo no deseado.

Interrupciones. El procesador continúa con otros trabajos y sólo cuando el


dispositivo concluye la operación llama la atención del procesador,
interrumpiéndole para que trate dicha situación y realice las acciones que
considere necesarias, es decir, sirva la interrupción.

Controladores

Los dispositivos complejos (discos...) no se conectan directamente al procesador,


sino que lo hacen a través de un controlador que contiene el estado del dispositivo
(status), controla el mismo y chequea los datos transferidos. El controlador E/S es
que acepta las órdenes del procesador y se comunica con él a través de registros
como si se tratara de un dispositivo. El controlador, también llamado unidad de
control, puede manejar varios dispositivos del mismo tipo.

Canales

Normalmente los controladores se conectan al procesador a través de un canal o


procesador de E/S(IOP- Input Output Processor). El propósito de un canal es
conseguir que los dispositivos sean tratados como virtuales, abstractos o
transparentes. Los canales son manejados por comandos y cuando terminan la
operación devuelven el status correspondiente e interrumpen al procesador.

131 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Los Canales pueden ser de varios tipos:

Selectores. Pueden manejar varios dispositivos, pero sólo pueden transferir datos
de uno en uno.
Multiplexores. Manejan varios dispositivos y pueden transferir datos
simultáneamente

5.1.5 DISPOSITIVOS DE ENTRADA/SALIDA

Los dispositivos externos que tienen que hacer E/S con los computadores pueden
clasificarse, básicamente, en tres categorías:

Dispositivoslegibles por los humanos apropiados para la comunicación con el


usuario Como ejemplo se tienen los terminales de video, que constan de un
teclado, una pantalla y, quizá, otros dispositivos como un ratón o una impresora.

Dispositivos
legibles por la máquina: adecuados para comunicarse con equipos
electrónicos, como discos, unidades de cinta, sensores, controladores e
impulsores.

Dispositivosde comunicaciones: apropiados para comunicarse con dispositivos


lejanos. Por ejemplo, adaptadores de líneas digitales y módems.

Existen grandes diferencias entre las clases de dispositivos y éstas son, incluso,
sustanciales, dentro de cada clase. Las siguientes son las diferencias principales:

Velocidadde los datos: Puede haber una diferencia de varios órdenes de


magnitud en las velocidades de transmisión de datos. La Tabla 3.1 ofrece varios
ejemplos.

Aplicaciones: La utilidad que se le da a un dispositivo tiene una gran influencia


en el software y en las políticas del sistema operativo y de las utilidades de apoyo.
Por ejemplo, un disco que almacena archivos necesita el soporte de un software
de gestión de archivos. En cambio, un disco usado como almacén de páginas de
un sistema de memoria virtual dependerá del uso que se haga del hardware y el
software de memoria virtual. Además, estas aplicaciones tendrán su impacto en
los algoritmos de planificación del disco. Como ejemplo adicional, un terminal
puede valer para un usuario normal o para el administrador del sistema. El uso
que se le dé exigirá diferentes niveles de privilegio y, quizá, diferentes prioridades
en el sistema operativo.

Complejidad del control: Una impresora necesita una interfaz de control


relativamente simple. En cambio, un disco es mucho más complejo. El efecto de
estas diferencias en el sistema operativo es filtrado, hasta cierto punto, por la
complejidad del módulo de E/S que controla al dispositivo, como se discute en la
sección siguiente.

132 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Unidad de transferencia: Los datos pueden transmitirse como flujos de bytes o
caracteres (por ejemplo, en un terminal) o en bloques mayores (por ejemplo, con
un disco).

Representación de los datos: En diferentes dispositivos se emplean diferentes


esquemas de codificación de datos, incluidas las diferencias en los códigos de
caracteres y los convenios de paridad.

Condiciones de error: la naturaleza de los errores, la manera en que se informa


sobre ellos, sus consecuencias y el rango disponible de respuestas diferentes
ampliamente de un dispositivo a otro.

Esta diversidad conduce hacia un enfoque consistente y uniforme de la E/S, que


es difícil de alcanzar, tanto desde el punto de vista del sistema operativo como de
los procesos de un usuario.

133 Lily Alejandra Medrano Mendoza


Sistemas Operativos
5.1.6 ORGANIZACIÓN DE LAS FUNCIONES DE E/S

E/Sprogramada: el procesador emite una orden de E/S de parte de un proceso


a un módulo de E/S; el proceso espera entonces a que termine la operación, antes
de seguir.

E/S dirigida por interrupciones: El procesador emite una orden de E/S de parte
de un proceso, continua la ejecución de las instrucciones siguientes y es
interrumpido por el modulo de E/S cuando éste ha completado su trabajo. Las
instrucciones siguientes pueden ser del mismo proceso, si no es necesario para
éste esperar la terminación de la E/S. En otro caso, el proceso se ve suspendido a
la espera de la interrupción, mientras se realiza otro trabajo.

Acceso directo a memoria (DMA): Un modulo de DMA controla el intercambio de


datos entre la memoria principal y un modulo de E/S. El procesador envía una
petición de transferencia de un bloque de datos al módulo de DMA y se ve
interrumpido sólo cuando el bloque entero se haya transferido
.
La Tabla 3.2 indica la relación entre estas tres técnicas. En la mayoría de los
sistemas informáticos, el DMA es la forma dominante de transferencia ofrecida por
el sistema operativo.

Evolución de las funciones de la E/S

A medida que los sistemas informáticos han evolucionado, se ha producido una


tendencia creciente en la complejidad y sofisticación de cada componente
individual. En ningún caso se hace esto más evidente que en las funcione de la
E/S. Las etapas de su evolución pueden resumirse como sigue:

1. El procesador controla directamente los dispositivos periféricos. Esto se puede


ver en dispositivos simples controlados por microprocesadores.
2. Se añade un controlador o módulo de E/S. El procesador utiliza E/S
programada sin interrupciones. En este punto el procesador parece aislarse de los
detalles específicos de las interfaces con dispositivos externos.

134 Lily Alejandra Medrano Mendoza


Sistemas Operativos
3. Se considera la misma configuración del punto 2, pero empleándose
interrupciones. Ahora el procesador no tiene que desperdiciar tiempo esperando a
que se realice una operación de E/S, incrementando así la eficiencia.
4. El módulo de E/S recibe control directo de la memoria, a través de DMA. Ahora
puede mover un bloque de datos a la memoria o desde la misma sin que
intervenga el procesador, excepto al principio y al final de la transferencia.
5. El módulo de E/S es mejorado para constituir un procesador separado con un
conjunto de instrucciones especializado para realizar E/S. El procesador central
(CPU) ordena al procesador de E/S la ejecución de los programas de E/S en la
memoria principal. El procesador de E/S va en busca de estas instrucciones y las
ejecuta si la intervención de la CPU. Esto permite a la CPU precisar que una
secuencia de actividades de E/S se vea interrumpida sólo cuando haya terminado
la secuencia entera.
6. El módulo de E/S posee su memoria local y es, de hecho, un computador
independiente. Con esta arquitectura se pueden controlar un gran número de
dispositivos de E/S con una participación mínima de la CPU. Un uso muy común
de tal arquitectura ha sido el control de las comunicaciones con terminales
interactivos. El procesador de E/S se encarga de la mayoría de las tareas
implicadas en el control de los terminales.

A medida que se sigue en esta evolución, una mayor parte de las funciones de
E/S se realiza sin la participación de la CPU. El procesador central se ve liberado
cada vez más de las tareas relacionadas con la E/S, mejorando así el rendimiento.
En las dos últimas etapas (5 y 6) se produce un cambio sustancial con la
introducción del concepto de módulo de E/S capaz de ejecutar programas.

Una indicación sobre la terminología: Para todos los módulos descritos en los
pasos 4, 5 y 6, el término "acceso directo a memoria" (DMA) es apropiado porque
todos contemplan un control directo de la memoria principal por parte del módulo
de E/S. Además, el módulo de E/S de la etapa 5 es a menudo denominado canal
de E/S, mientras que al de la etapa 6 se le llama procesador de E/S. Sin
embargo, cada término se aplica, en algunos casos, a ambas situaciones. En la
parte siguiente de esta sección se empleará el término canal de E/S para referirse
a ambos tipos de módulos.

Acceso Directo a Memoria

La figura 5.2 muestra, en líneas generales, la lógica del DMA. La unidad de DMA
es capaz de imitar a la CPU y, de hecho, es capaz de relevar a la CPU en el
control del sistema para transferir los datos con la memoria por el bus del sistema.
Normalmente, el módulo de DMA debe usar el bus sólo cuando la CPU no lo
necesite, o debe forzar a la CPU a que suspenda temporalmente su operación.
Esta última técnica es más común y se denomina robo de ciclos porque la unidad
de DMA debe robar un ciclo del bus.

135 Lily Alejandra Medrano Mendoza


Sistemas Operativos

La figura 5.3 muestra dónde puede suspenderse a la CPU dentro del ciclo de una
instrucción. En cada caso, la CPU se ve suspendida justo antes de que necesite
usar el bus. Entonces, la unidad de DMA transfiere una palabra de memoria y
devuelve el control a la CPU. Nótese que esto no es una interrupción; la CPU no
tiene que guardar el contexto y hacer otra cosa. Más bien, la CPU espera un ciclo
del bus. El efecto final es que la CPU ejecuta más lentamente. Sin embargo, el
DMA es mucho más eficiente que la E/S programada o dirigida por interrupciones
para una transferencia de varias palabras.

136 Lily Alejandra Medrano Mendoza


Sistemas Operativos

El mecanismo de DMA puede configurarse de muchas formas. Algunas


posibilidades se muestran en la figura 5.4. En el primer ejemplo, todos los módulos
comparten el mismo bus del sistema. El módulo del DMA, actuando como una
CPU suplente, realiza E/S programada para intercambiar datos entre la memoria y
el módulo de E/S a través del módulo del DMA. Esta configuración, aunque puede
ser barata, es claramente ineficiente. Como con la E/S programada, cada
transferencia de una palabra consume dos ciclos de bus.

El número de ciclo de bus requerido puede ser acortado sustancialmente mediante


la integración de las funciones del DMA y de la E/S. Como muestra la figura 5.4b,
esto significa que debe haber un camino entre el módulo del DMA y uno o más
módulo de E/S que no pasen por el bus del sistema. La lógica del DMA puede
formar parte del módulo de E/S, o puede constituir un módulo separado que
controle uno o más módulos de E/S. Esta idea puede llevarse un paso mas allá si
se conectan los módulos de E/S al módulo de DMA mediante un bus de E/S
(figura 5.4c). Esto reduce a una el número de interfaces de E/S en el módulo de
DMA y proporciona una configuración fácilmente ampliable. En todos los casos
(figura 5.4b y 5.4c), el bus del sistema que el módulo de DMA comparte con la
CPU y la memoria principal es utilizado por el módulo de DMA sólo para
intercambiar señales de control con la CPU. El intercambio de datos entre el
módulo del DMA y el de E/S tiene lugar fuera del bus del sistema.

137 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Características de los Canales de E/S

El canal de E/S es una extensión del concepto de DMA. Un canal de E/S tiene la
capacidad de ejecutar instrucciones de E/S, lo que le da un control total sobre las
operaciones de E/S. En un sistema informático que conste de tales dispositivos,
las instrucciones de E/S se almacenan en la memoria principal y serán ejecutadas

138 Lily Alejandra Medrano Mendoza


Sistemas Operativos
por un procesador de propósito específico en el mismo canal de E/S. Así, la CPU
inicia una transferencia de E/S ordenando al canal de E/S que ejecute un
programa en la memoria. El programa designará a el (los) dispositivo(s), la(s)
zona(s) de memoria para lectura o escritura, la prioridad y las acciones a tomar
bajo ciertas condiciones de error.

Hay dos tipos comunes de canales de E/S, como se ilustra en la figura 5.5. Un
canal selector controla varios dispositivos de alta velocidad y se dedica a la
transferencia de datos con estos dispositivos, cada vez con uno. De esta forma, el
canal de E/S elige un dispositivo y realiza la transferencia. Un controlador o
módulo de E/S muy parecido a los antes descritos, maneja un dispositivo o un
pequeño conjunto de dispositivos. Así, el canal de E/S actúa en vez de la CPU
manejando estos controladores. Un canal multiplexor puede manejar la E/S con
varios dispositivos al mismo tiempo. Para dispositivos de baja velocidad, un
multiplexor de bytes recibe o transmite caracteres de/a varios dispositivos tan
rápido como sea posible. Por ejemplo, el flujo de caracteres resultante para tres
dispositivos con velocidades diferentes de datos y con flujos individuales A 1
A2A3A4..., B1 B2 B3B4...,ClC2C3C4... podría ser AlBlClA2C2A3B2C3A4, y así
sucesivamente. Para dispositivos de alta velocidad, un multiplexor de bloques
puede mezclar los bloques de datos de varios dispositivos.

5.1.7 SOFTWARE DE CONTROL DE ENTRADA/SALIDA (Drivers)

Se define a los Drivers como el software formado por un conjunto de rutinas y


tablas que, formando parte del núcleo del sistema operativo, ejecutan y controlan
todas las operaciones de entrada y salida sobre cualquier periférico conectado a la
computadora, siendo particulares para cada dispositivo.

Un Driver no es un proceso o tarea independiente gestionada por el sistema


operativo, sino un conjunto de tablas en las que se aloja la información que
caracteriza a cada periférico conectado a la computadora, y una serie de rutinas
que controlan toda la gestión de los mismos y las informaciones que fluyen en un
sentido o en otro. Se encuentran permanentemente alojados en memoria principal
y requieren una elevada rapidez de ejecución sin formar parte del proceso de
usuario que lo utilice( figura 5.6).

139 Lily Alejandra Medrano Mendoza


Sistemas Operativos

140 Lily Alejandra Medrano Mendoza


Sistemas Operativos

El tratamiento por el núcleo de un sistema operativo de toda la información de E/S


desde, o a un periférico, se puede dividir en dos niveles para su estudio:

Tratamiento independiente de periférico


Esta formado por el conjunto de rutinas que procesan información sin atender a
las características propias del periférico.

Tratamiento dependiente del periférico


Es el conjunto de rutinas que el núcleo del sistema operativo ofrece para controlar
el propio dispositivo periférico.

Funciones de un Driver

Entre las funciones que realiza un Driver podemos citar las siguientes:

Definir las características del periférico al resto del sistema operativo.


Inicializar los registros asociados al periférico en el momento del arranque
(bootstrap) del sistema operativo.
Habilitar y deshabilitar el dispositivo para un proceso.
Procesar todas las operaciones de E/S solicitadas por un proceso.
Cancelar toda operación de E/S en el momento que sea necesario por cualquier
motivo.
Procesar todas las interrupciones hardware generadas por el propio periférico.

141 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Tratar
los errores y estado del dispositivo haciendo la correspondiente
comunicación al usuario.

5.1.8 ASPECTOS DE DISEÑO EN LOS SISTEMAS OPERATIVOS

Objetivos de Diseño

Hay dos objetivos primordiales en el diseño de la E/S: eficiencia y generalidad. La


eficiencia es importante porque las operaciones de E/S constituyen a menudo un
cuello de botella en los sistemas informáticos. Si se puede observar de nuevo la
tabla 3.1 se puede comprobar que la mayoría de los dispositivos de E/S son
extremadamente lentos en comparación con la memoria principal y el procesador.
Una manera de abordar este problema es el uso de la multiprogramación, que,
como se ha visto, hace que algunos procesos esperen en operaciones de E/S
mientras otro proceso se está ejecutando. Sin embargo, a pesar del enorme
tamaño de la memoria principal en los computadores actuales, seguirá dándose el
caso de que la E/S no mantenga el nivel con la actividad del procesador. Se puede
utilizar el intercambio para introducir más procesos listos para ejecución y
mantener así el procesador ocupado, pero ésta es una operación de E/S en sí
misma. De este modo, ha habido un gran esfuerzo en el diseño de esquemas de
E/S para mejorar la eficiencia.

El segundo gran objetivo es la generalidad. En interés de la simplicidad y la


exención de errores, será deseable manejar todos los dispositivos de una manera
uniforme. Esta afirmación se aplica tanto a la manera en que los procesos
contemplan a los dispositivos de E/S como a la forma en que el sistema operativo
gestiona los dispositivos de E/S y las operaciones. Debido a la diversidad de
características de los dispositivos, en la práctica es difícil conseguir una
generalidad verdadera. Lo que puede hacerse es emplear un enfoque jerárquico y
modular para el diseño de las funciones de E/S. Este proceder ocultará la mayoría
de los detalles de la E/S con dispositivos en rutinas de bajo nivel, de forma que los
procesos y los niveles superiores del sistema operativo contemplen a los
dispositivos en términos de funciones generales, como la lectura, escritura,
apertura, cierre, bloqueo y desbloqueo.

Estructura Lógica de las Funciones de E/S

La filosofía jerárquica propone que las funciones del sistema operativo deben
separarse de acuerdo a su complejidad, sus rangos característicos de tiempo y su
nivel de abstracción. Seguir este enfoque conduce a una organización del sistema
operativo en un conjunto de niveles. Cada nivel realiza una parte afín de las
unciones necesarias del sistema operativo. Cada nivel cuenta con el nivel inferior
para realizar funciones más básicas y ocultar los detalles de éstas últimas. Así
mismo, cada nivel ofrece servicios al nivel superior. En el mejor de los casos, los
niveles deben definirse de forma que los cambios en un nivel no provoquen más
cambios en otros niveles. De este modo, el problema se ha descompuesto en una
serie de subproblemas más manejables.

142 Lily Alejandra Medrano Mendoza


Sistemas Operativos

En general, los niveles inferiores hacen frente a un rango de tiempos mucho


menor. Algunas partes del sistema operativo deben interactuar directamente con
el hardware del computador, donde los sucesos pueden ocurrir en una escala de
tiempos del orden de unos pocos nanosegundos. En el otro extremo del espectro,
algunas partes del sistema operativo se comunican con el usuario, que emite
órdenes a un ritmo mucho más pausado, como puede ser una cada pocos
segundos. El empleo de un conjunto de niveles se adapta bien a este entorno.

La aplicación específica de esta filosofía a la E/S conduce a la clase de


organización sugerida por la figura 5.7. Los detalles de la organización dependen
del tipo de dispositivo y de la aplicación. En la figura se presentan las tres
estructuras lógicas más importantes. Por supuesto, puede que un sistema
operativo no se ajuste exactamente a estas estructuras. Sin embargo, los
principios generales son válidos y la mayoría de los sistemas operativos enfocan
la E/S más o menos de esta manera.

Considérese el caso más simple, el primero, de un dispositivo periférico local que


se comunica de una manera sencilla, como un flujo de bytes o de registros (Figura
5.7a). Los niveles implicados son los siguientes:

E/S lógica: El módulo de E/S lógica trata al dispositivo como un recurso lógico y
no se preocupa de los detalles de control real del dispositivo. El módulo de E/S
lógica se ocupa de la gestión de funciones generales de E/S pedidas por los
procesos de usuario, permitiéndoles manejar el dispositivo mediante un
identificador y órdenes simples como Abrir, Cerrar, Leer y Escribir.

E/S con dispositivos: Las operaciones pedidas y los datos (caracteres


almacenados, registros, etc.) se convierten en secuencias adecuadas de
instrucciones de E/S, comandos para el canal y órdenes al controlador. Se pueden
utilizar técnicas de almacenamiento intermedio para mejorar el uso.

Planificación y control: La planificación y encolado de las operaciones de E/S


ocurren en este nivel, así como el control de las operaciones. Las interrupciones
se manejan en este nivel, así como se averigua e informa sobre el estado de la
E/S. Este es el nivel del software que realmente interacciona con el módulo de E/S
y, por tanto, con el hardware del dispositivo.

Para un dispositivo de comunicaciones, la estructura de E/S (Figura 5.16b) se


parece mucho a la ya descrita. La diferencia principal es que el módulo de E/S
lógica se reemplaza por una arquitectura de comunicaciones, que puede constar,
asimismo, de varios niveles. Por ejemplo, la conocida arquitectura de
interconexión de sistemas abiertos (OSI) consta de siete niveles.

143 Lily Alejandra Medrano Mendoza


Sistemas Operativos

144 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Gestión de directorios: En este nivel se traducen los nombres simbólicos de
archivos a identificadores que referencian directamente al archivo o
indirectamente, a través de un descriptor de archivo o índice en una tabla. Este
nivel se ocupa también de las operaciones del usuario que afectan al directorio de
archivos, como Añadir, Borrar y Reorganizar.

Sistema de archivos: Este nivel se encarga de la estructura lógica de los


archivos y las operaciones que pueden especificar los usuarios, como Abrir,
Cerrar, Leer y Escribir. En este nivel también se gestionan los derechos de
acceso.

Organización física: Del mismo modo que las direcciones virtuales de memoria
deben convertirse en direcciones físicas de la memoria principal, teniendo en
cuenta la estructura segmentada y paginada, las referencias lógicas a los archivos
y registros deben convertirse en direcciones físicas del almacenamiento
secundario, teniendo en cuenta la pista física y la estructura en sectores del
archivo. La asignación de espacio de almacenamiento secundario y de buffers de
almacenamiento principal también se trata generalmente en este nivel.

5.1.9 ALMACENAMIENTO INTERMEDIO DE E/S

Supóngase que un proceso de usuario desea leer bloques de datos de una cinta,
uno cada vez, siendo cada bloque de 100 bytes. Los datos van a ser leídos en una
zona de datos del proceso de usuario situada en las direcciones virtuales 1000 a
1009. La forma más sencilla de hacerlo sería emitir una orden de E/S (parecida a
"Leer Bloque [1000, cinta]") a la unidad de cinta y esperar a que los datos estén
disponibles. La espera podría ser activa ( comprobando continuamente el estado
del dispositivo) o, de manera más práctica, suspender al proceso en espera de
una interrupción.

Hay dos problemas con este enfoque. En primer lugar, el programa se queda
colgado esperando a que la relativamente lenta operación de E/S termine. El
segundo problema es que este método de E/S dificulta las decisiones de
intercambio del sistema operativo. Las ubicaciones virtuales 1000 a 1009 deben
permanecer en memoria principal durante el curso de la transferencia del bloque.
De lo contrario, parte de los datos se perderán. Si se está utilizando paginación, la
página que contenga dichas direcciones virtuales, por lo menos, debe permanecer
en memoria principal. De este modo, aunque algunas partes del proceso puedan
ser expulsadas a disco, es imposible expulsar al proceso por completo, aunque el
sistema operativo lo desee. Nótese también que hay riesgo de interbloqueo de un
solo proceso. Si un proceso emite una orden de E/S, queda suspendido a la
espera del resultado, se le expulsa antes de comenzar la operación y se bloquea
esperando a que la operación termine. Mientras tanto, la operación de E/S queda
bloqueada esperando a que el proceso vuelva a memoria. Para evitar este
interbloqueo, la memoria de usuario implicada en la operación de E/S debe quedar
fija en la memoria principal, inmediatamente después de emitir la petición de E/S,

145 Lily Alejandra Medrano Mendoza


Sistemas Operativos
incluso aunque la operación de E/S se encole y pueda no ejecutarse por algún
tiempo.

146 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Las mismas consideraciones pueden aplicarse a las operaciones de salida. Si se
transfiere un bloque desde el área de un proceso de usuario hacia un módulo de
E/S directamente, el proceso se bloqueará durante la transferencia y no puede ser
expulsado.

Para evitar esta carga e incapacidad, a veces es conveniente llevar a cabo las
transferencias de entrada por adelantado a las peticiones y realizar las
transferencias de salida un tiempo después de hacer la petición. Esta técnica se
conoce con el nombre de almacenamiento intermedio (buffering). En esta sección
se van a considerar algunos esquemas de almacenamiento intermedio ofrecidos
por los sistemas operativos para mejorar el rendimiento del sistema.

A la hora de discutir los distintos métodos de almacenamiento intermedio, es a


veces importante hacer una distinción entre dos tipos de dispositivos: dispositivos
de bloques y dispositivos de flujo. Los dispositivos de bloques almacenan la
información en bloques, normalmente de un tamaño fijo, siendo las transferencias
de un bloque cada vez. Generalmente, es posible referirse a los bloques por un
número de bloque. Los discos y las cintas son ejemplos de dispositivos de
bloques. Los dispositivos de flujo transfieren los datos como flujos de bytes; no
poseen estructura de bloques. Terminales, impresoras, puertos de comunicación,
ratones y otros dispositivos apuntadores y la mayoría de los dispositivos restantes
que no son de almacenamiento secundario son dispositivos de flujo.

Buffer Sencillo

La clase de apoyo más simple que el sistema operativo puede ofrecer es el buffer
sencillo (Figura 5.8b). Cuando un proceso de usuario realiza una petición de E/S,
el sistema operativo le asigna a la operación un buffer en la parte del sistema de la
memoria principal.

Para los dispositivos de bloques, el esquema del buffer sencillo puede describirse
como sigue. Las transferencias de entrada se realizan al buffer del sistema.
Cuando se ha completado la transferencia, el proceso mueve el bloque al espacio
del usuario y pide otro bloque inmediatamente. Esta técnica se llama lectura por
adelantado o entrada anticipada, se realiza esperando que el bloque se necesite
más adelante. Para muchos tipos de operaciones, ésta suposición es razonable la
mayoría de las veces. La lectura del bloque será innecesaria sólo al final de una
secuencia de procesamiento.

Generalmente, este método proporciona una mayor velocidad en comparación con


la ausencia de almacenamiento intermedio en el sistema. El proceso de usuario
puede procesar un bloque de datos mientras se está leyendo el siguiente. El
sistema operativo será capaz de expulsar al proceso porque la operación de
entrada tiene lugar dentro de la memoria del sistema en vez de en la memoria de
usuario del proceso. Sin embargo, esta técnica complica la lógica del sistema
operativo. El sistema operativo debe guardar constancia de las asignaciones de
buffers del sistema a los procesos de usuario.

147 Lily Alejandra Medrano Mendoza


Sistemas Operativos
La lógica de intercambio también se ve afectada: Si la operación de E/S implica al
mismo disco que se usa para intercambio, apenas importa encolar las escrituras al
disco necesarias para expulsar al proceso. Este intento de expulsar al proceso y
liberar memoria principal no comenzará hasta que la operación de E/S finalice,
momento en que la expulsión del proceso al disco puede no ser ya apropiada.

Se pueden aplicar consideraciones similares a la salida con dispositivos de


bloque. Cuando se transmiten datos a un dispositivo, deben copiarse primero del
espacio de usuario a un buffer del sistema, desde donde serán finalmente escritos.
El proceso que realizó la petición podrá entonces continuar o ser expulsado si es
necesario.

KNUTH, D. sugiere una tosca pero informativa comparación de rendimiento entre


el buffer sencillo y la ausencia de buffer. Supóngase que T es el tiempo necesario
para realizar la entrada de un bloque y C es el tiempo que dura la operación que
sucede entre dos peticiones de entrada. Sin almacenamiento intermedio, el tiempo
de ejecución por bloque es, esencialmente, T + C. Con un buffer sencillo, el
tiempo es max(C, T) + M donde M es el tiempo necesario para mover los datos del
buffer del sistema a la memoria de usuario. En la mayoría de los casos, esta
última cantidad es sustancialmente menor que la primera.

Para la E/S con dispositivos de flujo, el esquema del buffer sencillo puede
aplicarse por líneas o por bytes. La operación línea a línea es adecuada para
terminales con desplazamiento (scroll) vertical (a veces llamados terminales
"tontos"). Con este tipo de terminales, la entrada del usuario se realiza por líneas,
marcadas con un retorno de carro al final de la misma La salida al terminal es
similar, línea a línea. Las impresoras de línea constituyen otro ejemplo de tales
dispositivos. La operación por bytes se utiliza en terminales de pantalla completa,
donde cada tecla pulsada tiene su significado, así como para otros periféricos
como sensores y controladores.

En el caso de la E/S por líneas, se puede emplear el buffer para guardar una sola
línea. El proceso de usuario quedará suspendido durante la entrada, esperando la
llegada de la línea completa. Para la salida, el proceso de usuario puede colocar
una línea de salida en el buffer y seguir procesando. No será suspendido a menos
que llegue una segunda línea para enviar antes de que se vacíe el buffer de la
primera operación de salida.

Buffer Doble

Se puede realizar una mejora del buffer sencillo asignando dos buffers del sistema
a cada operación (figura 5.8c). De esta forma, un proceso puede transfiere datos
hacia (o desde) un buffer mientras que el sistema operativo vacía (o rellena) el
otro. Esta técnica se conoce como buffer doble o intercambio de buffers.

Para las transferencias de bloques, se puede hacer una estimación aproximada


del tiempo de transferencia como el máximo de C y T. Por tanto, es posible que el

148 Lily Alejandra Medrano Mendoza


Sistemas Operativos
dispositivo de bloques funcione a su máxima velocidad si C < T. Por otro lado, si C
> T, el buffer doble asegura que el proceso no tendrá que esperar en la E/S. En
cualquier caso se consigue una mejora con respecto al buffer sencillo. Sin
embargo, esta mejora sufre el coste del incremento de la complejidad.

En la entrada de flujos, se afronta de nuevo el problema de las dos alternativas de


operación. Para la E/S de líneas, el proceso de usuario no tiene que ser
suspendido para entrada o salida a menos que el proceso se adelante al buffer
doble. Para la operación con bytes, el buffer doble no ofrece ninguna ventaja con
respecto a un buffer sencillo de doble tamaño.

Buffer Circular

El esquema del buffer doble debería solucionar el flujo de datos entre un


dispositivo de E/S y un proceso. Si preocupa el rendimiento de un proceso
determinado, sería deseable que las operaciones de E/S fueran capaces de ir al
ritmo del proceso. El buffer doble puede ser inapropiado si el proceso lleva a cabo
rápidas ráfagas de E/S. En este caso, el problema puede mitigarse usando más de
dos buffers.

Cuando se emplean más de dos, el conjunto de buffers se conoce con el nombre


de buffer circular (figura 5.8d). Cada buffer individual constituye una unidad del
buffer circular.

La Utilidad del Almacenamiento Intermedio

El almacenamiento intermedio es una técnica que soluciona los problemas de


"horas punta" en la demanda de E/S. Sin embargo, no existe un tamaño de los
buffers que asegure a un dispositivo de E/S ir al mismo ritmo que un proceso
cuando la demanda media del proceso es mayor que la que el dispositivo puede
admitir. Incluso si se dispone de varios buffers, al final todos se llenarán y el
proceso tendrá que quedarse esperando tras operar con una determinada
cantidad de datos. Sin embargo, en un entorno de multiprogramación, con la
variedad de actividades de E/S y de procesamiento que hay que realizar, el
almacenamiento intermedio es una herramienta que puede incrementar la
eficiencia del sistema operativo y el rendimiento de los procesos individuales.

149 Lily Alejandra Medrano Mendoza


Sistemas Operativos

5.2 ADMINISTRACIÓN DE DISCOS

En los sistemas de computo multiprogramados, la ineficiencia se debe muchas


veces al uso inapropiado de recursos de almacenamiento rotacional como discos y
tambores.

5.2.1 OPERACIÓN DE UN ALMACENAMIENTO DE DISCO DE CABEZA MÓVIL

La figura 5.9 es una representación esquemática de la vista lateral de un disco de


cabeza móvil. Los datos se graban sobre una serie de discos magnéticos o platos.
Estos discos están conectados por un eje común que gira a una velocidad muy
alta (algunos ejes giran a velocidades de 3600 revoluciones por minuto).

Se obtiene acceso a los datos (es decir, se leen o escriben) mediante una serie de
cabezas de lectura-escritura, una por cada superficie de disco. Una cabeza de
lectura-escritura sólo puede obtener acceso a los datos inmediatamente
adyacentes a ella. Así, antes de que pueda obtenerse acceso a los datos, la
porción de la superficie del disco de la que se leerán los datos (o en la que se
escribirán) debe girar hasta que se encuentre justo abajo (o arriba) de la cabeza
de lectura-escritura. El tiempo que le toma a los datos girar desde la posición en
que se encuentran hasta una posición adyacente a la cabeza de lectura-escritura
se llama tiempo de latencia.

150 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Cada una de las diferentes cabezas de lectura-escritura, mientras están fijas en


una posición, determinan una pista circular de datos sobre la superficie de un
disco. Todas estas cabezas están sujetas a una sola unidad de brazo móvil, la
cual puede moverse hacia adentro o hacia afuera. Cuando el brazo móvil desplaza
las cabezas hacia una nueva posición, puede obtenerse acceso a otro conjunto de
pistas. Para una posición dada del brazo móvil, el conjunto de pistas definido por
todas las cabezas forma un cilindro vertical. El proceso de desplazar el brazo
móvil hacia un nuevo cilindro se conoce como operación de búsqueda.
Así, para obtener acceso a un registro de datos en particular en un disco de
cabeza móvil por lo general son necesarias varias operaciones (figura 5.10).
Primero, el brazo móvil debe desplazarse hacia el cilindro apropiado. Después, la
porción del disco en donde se encuentran los datos debe girar hasta quedar
inmediatamente abajo (o arriba) de la cabeza de lectura-escritura (es decir, el
tiempo de latencia). Después el registro, cuyo tamaño es arbitrario (el máximo es
toda una pista), debe girar para pasar por la cabeza (esto se conoce como tiempo
de transmisión). Como cada una de estas operaciones implica un movimiento
mecánico, el tiempo total de acceso a un registro especifico es a menudo una
fracción apreciable de un segundo (0.01 a 0.1 segundos). Estas velocidades son
muy lentas comparadas con las altas velocidades de procesamiento (millones o
miles de millones de instrucciones por segundo) del sistema central de cómputo.

151 Lily Alejandra Medrano Mendoza


Sistemas Operativos

5.2.2 CARACTERÍSTICAS DESEABLES DE LAS POLÍTICAS DE


PLANIFICACIÓN DE DISCO

Algunos criterios para clasificar las políticas de planificación son:

la productividad
el tiempo promedio de respuesta
la varianza de los tiempos de respuesta (predecibilidad)

Está claro que una política de planificación debe tratar de lograr una productividad
máxima (el mayor número posible de peticiones atendidas por unidad de tiempo).
Como las políticas de planificación pueden reducir el tiempo desperdiciado en
búsquedas muy largas, es indudable que la producción puede ser mejor que con
la atención FCFS. Una política de planificación también debe tratar de reducir el

152 Lily Alejandra Medrano Mendoza


Sistemas Operativos
tiempo promedio de respuesta (es decir, el tiempo promedio de espera más el
tiempo promedio de servicio). Una vez más, como la planificación reduce el tiempo
de espera por búsquedas, debe ser ciertamente capaz de mejorar el tiempo
promedio de respuesta de FCFS.

Los criterios recién señalados tratan de mejorar el rendimiento global, tal vez a
expensas de las peticiones individuales. La planificación mejora a menudo el
rendimiento global pero reduce el nivel de atención para ciertas peticiones.

Una medida importante de este fenómeno es la varianza de los tiempos de


respuesta. La varianza es una medida matemáticas de cuánto se desvían
elementos individuales del promedio de los elementos. Como tal, utilizamos la
varianzas para indicar la predecibilidad: a menor varianza mayor predecibilidad.
Deseamos una política de planificación que reduzca al mínimo la varianzas. De
otra forma, ciertas peticiones recibirían niveles de servicio erráticos, lo que podría
ser intolerable, por ejemplo, un sistema de reservaciones de vuelos donde un
servicio rápido puede ayudar a la venta de un boleto o asegurar que un pasajero
llegue a tiempo para su vuelo. Si una política de planificación sólo trata de
aumentar la producción sin reducir al mínimo la varianza, podría procesar nada
más las peticiones fáciles y hacer caso omiso de las difíciles. El diseñador debe
tener en cuenta esta situación.

5.2.3 OPTIMIZACIÓN DE BÚSQUEDA

La figura 5.11 resume algunas de las estrategias más populares de optimización


de búsqueda.

153 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Planificación FCFS (First Come First Served, el primero que llega, el primero que
se atiende)

En planificación FCFS, la primera solicitud que llega es la primera que se atiende.


FCFS es justa en el sentido de que al llegar una solicitud, su lugar en las
planificación es fijo. Una petición no puede ser desplazada por la llegada de otra
con mayor prioridad; en efecto FCFS realizará una búsqueda larga para atender
una petición en espera aunque llegue una solicitud paras el mismo cilindro donde
está colocada las cabeza de lectura-escrituras (Figura 5.12).

Cuando las peticiones están distribuidas uniformemente en la superficie del disco,


la planificación FCFS da como resultado un patrón de búsquedas aleatorio. Hace
caso omiso de las relaciones de posición entre las solicitudes pendientes. No hace
ningún intento por optimizar el patrón de búsqueda.

FCFS es aceptable cuando la carga del disco es ligera. Pero conforme crece la
carga, FCFS tiende a saturar el dispositivo y aumenta los tiempos de respuesta.
FCFS sí ofrece una varianza pequeña, pero esto no es mucho consuelo para la
petición que espera al final de la cola mientras el brazo móvil se desplaza de un
lado a otro.

154 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Planificación SSTF (Shortest Scanning Time First, primero el de menor tiempo de


búsqueda)

En la planificación SSTF, la petición que implica la menor búsqueda (y por ende el


menor tiempo de búsqueda) es las siguiente en atenderse, aun cuando esta
solicitud no sea la primera de la cola. SSTF es un esquema orientado hacia los
cilindros.

SSTF tiende a favorecer mucho ciertas solicitudes. Los patrones de búsqueda


SSTF tienden a estar muy localizados y, en consecuencia, las pistas más
exteriores e interiores pueden recibir una atención deficiente en comparación con
la que reciben las pistas de la parte media (figura 5.13).

SSTF ofrece mejores tasas de productividad que FCGS, y los tiempos de


respuesta tienden a ser más bajos cuando la carga es moderada. Una desventaja
importante es que aumenta las varianza de los tiempos de respuesta debido a la
discriminación contra las pistas exteriores e interiores. En un caso extremo,
podrías hacer inanición de las solicitudes alejadas de las cabezas de lectura-
escritura. Si se consideran las importantes mejoras en la productividad y en los
tiempos promedio de respuesta, el aumento en la varianza puede parecer
tolerable. SSTF resulta útil en sistemas de procesamiento por lotes, donde la
productividad es la consideración más importante. Pero la elevada varianzas de
los tiempos de respuesta (o sea, su impredecibilidad) lo hace inaceptable en
sistemas interactivos.

155 Lily Alejandra Medrano Mendoza


Sistemas Operativos

Planificación SCAN

Denning desarrolló la estrategia de planificación SCAN para evitar la


discriminación y la alta variación en los tiempos de respuesta de SSTF.

SCAN opera como SSTF, excepto que SCAN elige la solicitud que implica la
menor distancia de búsqueda en una dirección preferida (figura 5.14). Si la
dirección preferida es en un momento dado hacia afuera, la estrategia SCAN elige
la distancia de búsqueda más corta en esa dirección. SCAN no cambia de
dirección hasta que llega al cilindro más exterior o hasta que ya no hay solicitudes
pendientes en la dirección preferida. En este sentido, se denomina a veces
algoritmo del ascensor, porque un ascensor normalmente continúa en una
dirección hasta que no hay más solicitudes pendientes y después cambia de
dirección. SCAN ha sido la base de la mayor parte de las estrategias de
planificación de disco implantadas hasta ahora.

SCAN tiene un comportamiento muy parecido al de SSTF en términos de aumento

156 Lily Alejandra Medrano Mendoza


Sistemas Operativos
de productividad y reducción de los tiempos promedios de espera, pero elimina
gran parte de la discriminación inherente a los esquemas SSTF y ofrece una
varianza mucho menor. SCAN, al igual que SSTF, es una estrategia orientada
hacia los cilindros.

A causa del movimiento oscilante de las cabezas de lectura-escritura en SCAN,


las pistas más exteriores se visitan con menos frecuencia que las de la parte
media, pero ellos no es tan grave como la discriminación de SSTF.

157 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Planificación SCAN de N pasos

Una modificación interesante de la estrategias SCAN básica se denominas SCAN


de N pasos. En esta estrategia, el brazo del disco se mueve en una y otra
dirección como en SCAN, excepto que sólo atiende las solicitudes que ya estaban
esperando cuando se inició un barrido específico. Las solicitudes que llegan
durante un barrido se agrupan y ordenan para darles una atención óptima durante
el barrido de regreso (figura 5.15). En cada barrido se atienden las primeras N
peticiones (en secuencias óptima de acuerdo con la dirección de la cabezas de
lectura-escritura).

SCAN de N pasos ofrece un buen desempeño en cuanto a productividad y tiempo


promedio de respuesta. Su característica más importante es una menor variación
de los tiempos de respuesta que en la planificación SSTF o en las SCAN
convencional. SCAN de N pasos elimina la posibilidad de que ocurra un
aplazamiento indefinido si llega un gran número de peticiones para el cilindro
actual. Éste guardas dichas peticiones para atenderlas en el barrido de regreso.

158 Lily Alejandra Medrano Mendoza


Sistemas Operativos
Planificación C-SCAN

Otra modificación interesante de la estrategia SCAN básicas se denominas SCAN


(SCAN circular). C-SCAN eliminas la discriminación de las estrategias anteriores
contra los cilindros más interiores y exteriores.

En la estrategia C-SCAN el brazo se mueve del cilindro exterior hacia el interior,


atendiendo solicitudes según un criterio de la búsqueda más corta. Cuando el
brazo ha completado su barrido hacia adentro, salta (sin atender peticiones) a la
solicitud más cercana al cilindro más exterior y luego reinicia su barrido hacia
adentro procesando solicitudes. C-SCAN se puede llevar a la práctica de manera
tal que las solicitudes que lleguen durante un barrido sean atendidas en el
siguiente barrido (Figura 16). Así, C-- SCAN elimina por completo la discriminación
contra solicitudes para los cilindros más exteriores o interiores. Presenta una
varianzas muy pequeña de los tiempos de respuesta.

Esquema de Eschenbach

Esta estrategia descrita en la figura 5.11, se desarrolló para un sistema de


reservaciones de una línea aérea diseñado para manejar cargas en extremo
pesadas. El esquema fue uno de los primeros en tratar de optimizar no sólo el
tiempo de búsqueda, sino también el retraso rotacional. La estrategia C-SCAN con

159 Lily Alejandra Medrano Mendoza


Sistemas Operativos
optimización rotacional ha demostrado ser mejor que el esquema de Eschenbach,
sean cuales sean las condiciones de carga.

5.2.4 OPTIMIZACIÓN ROTACIONAL

En condiciones de cargas pesada aumenta la probabilidad de múltiples referencias


a un cilindro específico, por lo que resultas útil tener en cuenta la optimización
rotacional además de la optimización de búsqueda. La optimización rotacional se
ha utilizado durante muchos años con dispositivos de cabeza fija como los
tambores.

La estrategia de primero el tiempo de latencia más corto (SLTF, shortest-


latencytime- first) para la optimización rotacional es análoga a la estrategia SSTF
para la optimización de búsqueda. Una vez que el brazo del disco llega a un
cilindro determinado, puede haber muchas solicitudes pendientes para las
diversas pistas de dicho cilindro. La estrategia SLTF examina todas estas
solicitudes y atiende primero la que tiene el retraso rotacional más corto (Figura
5.17). Se ha demostrado que esta estrategia llega cerca del rendimiento óptimo

160 Lily Alejandra Medrano Mendoza


Sistemas Operativos
teórico y su realización es relativamente sencilla. La optimización rotacional se
denomina a veces puesta en cola de sectores; los sectores se colocan en una cola
según su posición alrededor del disco y se atienden primero los sectores más
cercanos.

5.2.5 MEMORIA CACHÉ DE DISCO

Cuando se realiza una operación de escritura, podría pensarse que el registro se


graba de inmediato en el disco. Esto es así en muchos sistemas, pero en otros
con memoria caché de disco la escritura sólo hace que el registro se almacene en
un buffer en almacenamiento primario; el registro permanece ahí hasta que el
sistema se queda sin espacio de buffer para escrituras subsecuentes, y en ese
momento se graba el registro en el disco. Si es necesario leer un registro escrito
recientemente, se puede obtener del buffer de memoria caché de disco en
almacenamiento primario mucho más rápido que si se tuviera que leer del disco.

Como las operaciones de escritura no siempre se realizan cuando los programas


creen que se realizaron, es probable que en un momento dado el contenido de los
archivos de disco difiera de lo que los programas creen que contienen. Este
problema es crucial sobre todo si se cae el sistema. Para reducir al mínimo la
posibilidad de que los discos estén "en desacuerdo" con lo que los programas
creen que contienen, el sistema operativo UNIX ejecuta periódicamente la llamada
sync al sistema para grabar todos los buffers en disco.

La clave para aprovechar la memoria caché de disco es mantener los registros de


acceso frecuente en el buffer de memoria caché de disco en almacenamiento
primario. Desde luego, esta técnica sólo funciona bien cuando es posible
identificar los registros de acceso frecuente. A menudo se utiliza el razonamiento
heurístico de la localidad: un registro al que se hizo referencia en el pasado
reciente tal vez será requerido en el futuro cercano.

Otro razonamiento heurístico que se usa con frecuencia en los sistemas con
memoria caché de disco es obtener con anticipación los registros adyacentes a los
que se solicitaron recientemente.

161 Lily Alejandra Medrano Mendoza


Sistemas Operativos

162 Lily Alejandra Medrano Mendoza

También podría gustarte