Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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.
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
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.
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.
Estructura monolítica.
Estructura jerárquica.
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.
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.
Cliente-servidor ( Microkernel)
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.
Monousuarios
Multiusuarios
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
Multitareas
Uniproceso
Multiproceso
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.
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.
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
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:
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.
Control de trenes.
Telecomunicaciones.
Sistemas de fabricación integrada.
Producción y distribución de energía eléctrica.
Control de edificios.
Sistemas multimedia.
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.
Sistemas Operativos como UNIX, Windows 95, Windows 98, Windows NT, MAC-
OS, OS/2, soportan la multitarea.
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.
Entre los diferentes Sistemas Operativos distribuidos que existen tenemos los
siguientes: Sprite, Solaris-MC, Mach, Chorus, Spring, Amoeba, Taos, etc.
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.
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 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.
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.
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
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.
Microsoft Windows NT, usado en todos los sistemas que usan el código
base de Windows NT
EXONÚCLEOS
2. ADMINISTRACIÓN DE 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 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.
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.
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
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.
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.
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).
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.
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.
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.
El sistema operativo toma el control (es decir, el hardware pasa el control al
sistema operativo).
Clases de interrupciones
SEMÁFORO
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:
MONITORES
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:
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.
Recursos Reutilizables
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;
Recursos Consumibles
P1
...
Recibir (P2, M);
...
Enviar (P2,N);
P2
...
Recibir (P1, Q);
...
Enviar (P1, R);
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.
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
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:
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.
3. ADMINISTRACIÓN DE MEMORIA
Las estrategias de colocación tienen que ver con la determinación de la parte del
almacenamiento principal donde se colocará un programa entrante.
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.
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í.
Condensación de Huecos
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).
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.
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
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
3.2.4 SEGMENTACIÓN
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.
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á
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
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.
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 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.
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.
La paginación por demanda garantiza que las únicas páginas que se transfieren
al almacenamiento principal son aquellas que requieren los procesos.
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.
TAMAÑO DE PAGINAS
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.
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
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.
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.
Muchas de estas metas están en conflicto unas con otras, por lo que la
planificación se torna un problema complejo.
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 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 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.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.
El sistema debe ejecutar la tarea a plazo fijo sin degradar demasiado el servicio
a los otros usuarios.
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.
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.
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.
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
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.
5. ADMINISTRACIÓN DE ENTRADA/SALIDA
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.
Dispositivos de almacenamiento
Terminales
Dispositivos de Comunicaciones
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).
Discos
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.
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
Cinta magnética
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.
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.
5.1.3 TERMINALES
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.
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.
Half-duplex
si los datos pueden transmitirse en ambas direcciones pero no
simultáneamente.
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:
Controladores
Canales
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
Los dispositivos externos que tienen que hacer E/S con los computadores pueden
clasificarse, básicamente, en tres categorías:
Dispositivos
legibles por la máquina: adecuados para comunicarse con equipos
electrónicos, como discos, unidades de cinta, sensores, controladores e
impulsores.
Existen grandes diferencias entre las clases de dispositivos y éstas son, incluso,
sustanciales, dentro de cada clase. Las siguientes son las diferencias principales:
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.
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.
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.
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.
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
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.
Funciones de un Driver
Entre las funciones que realiza un Driver podemos citar las siguientes:
Objetivos de Diseño
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.
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.
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.
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,
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.
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.
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.
Buffer Circular
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.
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
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.
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.
Planificación SCAN
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.
Esquema de Eschenbach
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.