libro de texto. sistemas operativos

311
INSTITUTO TECNOLÓGICO DE CHIHUAHUA II Elaboración de Materiales, Recursos o Auxiliares Didácticos Reporte final de periodo sabático Libro de Texto: SISTEMAS OPERATIVOS

Upload: jared-quezada

Post on 09-Aug-2015

119 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Libro de Texto. Sistemas Operativos

I N S T I T U T O T E C N O L Ó G I C O D E C H I H U A H U A I I

Elaboración de Materiales, Recursos o Auxiliares Didácticos

Reporte final de periodo sabático Libro de Texto:

SISTEMAS OPERATIVOS

ELABORADO POR:GLORIA IRMA GALLARDO MARTÍNEZ

ENERO DE 2010

Page 2: Libro de Texto. Sistemas Operativos

CONTENIDO

Temario oficial V

Introducción. 1

UNIDAD 1. Introducción a los sistemas operativos. 21.1 Definición y concepto. 21.2 Funciones y características. 31.3 Evolución histórica. 41.4 Clasificación. 151.5 Estructura (niveles o estratos de diseño). 211.6 Núcleo. 25

1.6.1 Interrupciones (FLIH). 251.6.2 Despachador(Scheduler). 291.6.3 Primitivas de comunicación(IPC). 31

Resumen 32Problemas 32

UNIDAD 2. Administración de procesos y del procesador. 342.1 Concepto de proceso. 342.2 Estados y transiciones de los procesos. 342.3 Procesos ligeros (Hilos o hebras). 362.4 Concurrencia y secuenciabilidad. 43

2.4.1 Exclusión mutua de secciones criticas. 452.4.2 Sincronización de procesos en S.C. 52

2.4.2.1 Mecanismo de semáforos. 552.4.2.2 Mecanismo de monitores. 59

2.4.3 Interbloqueo (DeadLock). 662.4.3.1 Prevención. 732.4.3.2 Detección. 812.4.3.3 Recuperación. 81

2.5 Niveles, objetivos y criterios de planificación. 842.6 Técnicas de administración del planificador. 90

2.6.1 FIFO. 912.6.2 SJF. 922.6.3 RR. 932.6.4 Queves multi-level. 952.6.5 Multi-level feedback queves. 95

Resumen 99Problemas 99

UNIDAD 3. Administración de memoria. 1013.1 Política y filosofía. 1013.2 Memoria real. 101

II

Page 3: Libro de Texto. Sistemas Operativos

3.2.1 Administración de almacenamiento. 1013.2.2 Jerarquía. 1023.2.3 Estrategia de administración de memoria. 1033.2.4 Asignación contigua vs. no contigua. 1033.2.5 Multiprogramación de partición fija, partición variable, con intercambio de almacenamiento. 106

3.3 Organización de memoria virtual. 1143.3.1 Evaluación de las organizaciones de almacenamiento. 1143.3.2 Paginación. 1213.3.3 Segmentación. 1303.3.4 Sistemas de paginación segmentación. 135

3.4 Administración de memoria virtual. 1403.4.1 Estrategias de administración. 1403.4.2 Técnicas de reemplazo de páginas. 1473.4.3 Paginación por demanda. 1473.4.4 Paginación anticipada. 1483.4.5 Liberación de página. 1483.4.6 Tamaño de página. 148

Resumen 151Problemas 151

UNIDAD 4. Administración de entrada/salida. 1534.1 Dispositivos y manejadores de dispositivos (device drivers). 1534.2 Mecanismos y funciones de los manejadores de dispositivos (device drivers). 1584.3 Estructuras de datos para manejo de dispositivos. 1594.4 Operaciones de Entrada /salida. 162Resumen 176Problemas 176

UNIDAD 5. Sistema de archivos. 1785.1 Concepto. 1785.2 Noción de archivo real y virtual. 1785.3 Componentes de un sistema de archivos. 1795.4 Organización lógica y física. 1805.5 Mecanismos de acceso a los archivos. 1845.6 Manejo de espacio en memoria secundaria. 1865.7 Modelo jerárquico. 1905.8 Mecanismos de recuperación en caso de falla. 201Resumen 205Problemas 205

UNIDAD 6. Protección y seguridad. 2076.1 Concepto y objetivos de protección. 2076.2 Funciones del sistema de protección. 207

III

Page 4: Libro de Texto. Sistemas Operativos

6.3 Implantación de matrices de acceso. 2086.4 Protección basada en el lenguaje. 2126.5 Concepto de seguridad. 2146.6 Clasificaciones de la seguridad. 2146.7 Validación y amenazas al sistema. 2156.8 Cifrado. 221Resumen 229Problemas 229

Bibliografía. 231

IV

Page 5: Libro de Texto. Sistemas Operativos

V

Page 6: Libro de Texto. Sistemas Operativos

VI

Page 7: Libro de Texto. Sistemas Operativos

VII

Page 8: Libro de Texto. Sistemas Operativos

VIII

Page 9: Libro de Texto. Sistemas Operativos

IX

Page 10: Libro de Texto. Sistemas Operativos

X

Page 11: Libro de Texto. Sistemas Operativos

XI

Page 12: Libro de Texto. Sistemas Operativos

XII

Page 13: Libro de Texto. Sistemas Operativos

XIII

Page 14: Libro de Texto. Sistemas Operativos

XIV

Page 15: Libro de Texto. Sistemas Operativos

XV

Page 16: Libro de Texto. Sistemas Operativos

Introducción.

El conjunto de los programas que un equipo de cómputo realiza se relaciona de manera muy estrecha con lo que conocemos como sistema operativo. El desarrollo de las rutinas de trabajo internas, asociadas y de acuerdo a las características de cada equipo requerirá el que el programador o usuario conozca la lógica de operaciones que realizan los diferentes sistemas operativos existentes, a efectos de seleccionar el mas adecuado a utilizar, que cubra los requerimientos específicos de cada usuario para realizar en forma eficiente los procesos informáticos.

Dado el contexto anterior, que se tomo como marco de referencia para la creación de este libro de texto, se plantea analizar el sistema operativo de las computadoras: su estructura, procesos, memoria, dispositivos de entrada/salida, administración de archivos, seguridad y protección. Los cuales establecen en su conjunto el inicio y fin de un proceso computable. El objetivo de la realización de este libro, es cubrir en su totalidad el temario de la asignatura de Sistemas Operativos de la Carrera de Ingeniería en Sistemas Computacionales que se imparte en el Instituto Tecnológico de Chihuahua II y debido a la similitud con la materia de Sistemas Operativos I de la Carrera de Licenciatura en Informática, tiene aplicación simultanea en dos programas educativos, lo cual será de gran utilidad como apoyo didáctico para personal académico y alumnos del área de aplicación. Este texto viene a integrarse como parte del acervo bibliográfico de la Institución, para consulta y referencia especializada.

El contenido del presente libro de texto esta dividido en seis unidades, las cuales corresponden al temario oficial vigente del plan 2004 de la carrera de Ingeniería en Sistemas Computacionales. Al final de cada unidad se proponen problemas que permitan el enriquecimiento de conocimientos de cada tema desarrollado.

En la unidad I se conocerán la historia, funciones, características y clasificación de los sistemas operativos. El concepto de proceso, procesos ligeros y algunos algoritmos de Planificación se abordarán en la unidad II. El objetivo de la unidad IIII es identificar las técnicas de administración de memoria. Los temas a desarrollar en la unidad IV son, las técnicas de uso de periféricos en un sistema de cómputo. En la unidad V se identificará la estructura general de un sistema de archivos. Por ultimo, en la unidad VI se comprenderán los objetivos, funciones y técnicas de protección y seguridad.

1

Page 17: Libro de Texto. Sistemas Operativos

UNIDAD 1. Introducción a los sistemas operativos.

1.1 Definición y concepto.

Existen diversas definiciones de lo que es un Sistema Operativo, pero no hay una definición exacta, es decir una que sea estándar; a continuación se presentan algunas:

1.- Se pueden imaginar un Sistema Operativo como los programas, instalados en el software o firmware, que hacen utilizable el hardware. El hardware proporciona la "capacidad bruta de cómputo"; los sistemas operativos ponen dicha capacidad de cómputo al alcance de los usuarios y administran cuidadosamente el hardware para lograr un buen rendimiento.2.- Los Sistemas Operativos son ante todo administradores de recursos; el principal recurso que administran es el hardware del computador ;además de los procesadores, los medios de almacenamiento, los dispositivos de entrada/salida, los dispositivos de comunicación y los datos. 3.- Un Sistema Operativo es un programa que actúa como intermediario entre el usuario y el hardware del computador y su propósito es proporcionar el entorno en el cual el usuario pueda ejecutar programas. Entonces, el objetivo principal de un Sistema Operativo es, lograr que el sistema de computación se use de manera cómoda, y el objetivo secundario es que el hardware del computador se emplee de manera eficiente. 4.- Un Sistema Operativo es un conjunto de programas que controla la ejecución de programas de aplicación y actúa como una interfaz entre el usuario y el hardware de una computadora, esto es, un Sistema Operativo explota y administra los recursos de hardware de la computadora con el objeto de proporcionar un conjunto de servicios a los usuarios del sistema.

En resumen, se podría decir que los Sistemas Operativos son un conjunto de programas que crean la interfaz del hardware con el usuario, y que tiene dos funciones primordiales, que son:

Gestionar el hardware.- Se refiere al hecho de administrar de una forma más eficiente los recursos de la máquina.

Facilitar el trabajo al usuario.-Permite una comunicación con los dispositivos de la máquina.

El Sistema Operativo se encuentra almacenado en la memoria secundaria. Primero se carga y ejecuta un pedazo de código que se encuentra en el procesador, el cual carga el BIOS, y este a su vez carga el Sistema Operativo que carga todos los programas de aplicación y software variado.

2

Page 18: Libro de Texto. Sistemas Operativos

1.2 Funciones y características.

Características de los Sistemas Operativos.

En general, se puede decir que un Sistema Operativo tiene las siguientes características:

Conveniencia. Un Sistema Operativo hace más conveniente el uso de una computadora.

Eficiencia. Un Sistema Operativo permite que los recursos de la computadora se usen de la manera más eficiente posible.

Habilidad para evolucionar. Un Sistema Operativo deberá construirse de manera que permita el desarrollo, prueba o introducción efectiva de nuevas funciones del sistema sin interferir con el servicio.

Encargado de administrar el hardware. El Sistema Operativo se encarga de manejar de una mejor manera los recursos de la computadora en cuanto a hardware se refiere, esto es, asignar a cada proceso una parte del procesador para poder compartir los recursos.

Relacionar dispositivos (gestionar a través del kernel). El Sistema Operativo se debe encargar de comunicar a los dispositivos periféricos, cuando el usuario así lo requiera.

Organizar datos para acceso rápido y seguro.

Manejar las comunicaciones en red. El Sistema Operativo permite al usuario manejar con alta facilidad todo lo referente a la instalación y uso de las redes de computadoras.

Procesamiento por bytes de flujo a través del bus de datos.

Facilitar las entradas y salidas. Un Sistema Operativo debe hacerle fácil al usuario el acceso y manejo de los dispositivos de Entrada/Salida de la computadora.

Técnicas de recuperación de errores.

Evita que otros usuarios interfieran. El Sistema Operativo evita que los usuarios se bloqueen entre ellos, informándoles si esa aplicación esta siendo ocupada por otro usuario.

3

Page 19: Libro de Texto. Sistemas Operativos

Generación de estadísticas. Permite que se puedan compartir el hardware y los datos entre los usuarios. El software de aplicación son programas que se utilizan para diseñar, tal como el procesador de palabras, lenguajes de programación, hojas de cálculo, etc.

El software de base sirve para interactuar el usuario con la máquina, son un conjunto de programas que facilitan el ambiente plataforma, y permite el diseño del mismo. El Software de base está compuesto por: Cargadores. Compiladores. Ensambladores. Macros.

1.3 Evolución histórica.

Uno de los primeros dispositivos mecánicos para contar fue el ABACO, cuya historia se remonta a 3000 años AC desarrollada por los chinos y utilizado por civilizaciones griegas y romanas. Este dispositivo es muy sencillo, consta de un marco rectangular de madera ensartado de varillas en las que se desplazaban bolas agujereadas de izquierda a derecha. Al desplazar las cuentas (bolas) sobre las varillas, sus posiciones representan valores almacenados, y es mediante estas posiciones que se representa y almacena datos. A este dispositivo no se le puede llamar computadora pues carece de un elemento fundamental llamado programa.

En el siglo XVII, el creciente interés en Europa por las ciencias, tales como la astronomía y la navegación, impulsó a las mentes creativas a simplificar los cálculos, se encontraba en uso "la regla del cálculo", calculadora basada en las invenciones de y Napier, Gunther Bissaker. En 1614, el escocés Napier había anunciado el descubrimiento de los logaritmos permitiendo que los resultados de complicadas multiplicaciones se redujeran a un proceso simple de suma; Edmund Gunther se encarga de enmarcar los logaritmos de Napier en líneas, por su parte Bissaker coloca las líneas de ambos sobre un pedazo de madera, creando de esta manera la regla del cálculo.

Figura 1-1 Maquina para realizar sumas y restas

Blaise Pascal a la edad de 19 años, además de escribir tratados filosóficos, literarios, científicos y matemáticos inventó una máquina para calcular capaz de

4

Page 20: Libro de Texto. Sistemas Operativos

realizar sumas y restas (figura 1-1), parecida a los cuenta kilómetros de los automóviles, el cual utilizaba una serie de ruedas de 10 dientes en las que cada uno de los dientes representaba un dígito del 0 al 9; las ruedas estaban conectadas de tal manera que podían sumarse números haciéndolas avanzar el número de dientes correctos.

Los conceptos de esta máquina se utilizaron durante mucho tiempo, pero estas calculadoras exigían intervención de un operador, pues este debía escribir cada resultado parcial en una hoja de papel. Esto era sumamente largo y por lo tanto produce errores en los informes.En 1670 el filósofo y matemático alemán Gottfried Wilhelm Leibnizf fue el siguiente en avanzar en el diseño de una máquina calculadora mecánica, perfeccionó la anterior inventada además de añadir la función de multiplicar, efectuaba divisiones y raíces cuadradas.

Figura 1-2 Maquina diferencial

Charles Babbage (1792-1781), profesor de matemáticas de la Universidad de Cambridge, Inglaterra, desarrolla en 1823 el concepto de un artefacto, que el denomina "máquina diferencial"(figura 1-2). La máquina estaba concebida para realizar cálculos, almacenar y seleccionar información, resolver problemas y entregar resultados impresos. Babbage imaginó su máquina compuesta de varias otras, todas trabajando armónicamente en conjunto: los receptores recogiendo información; un equipo transfiriéndola; un elemento almacenador de datos y operaciones; y finalmente una impresora entregando resultados. Pese a su increíble concepción, la máquina de Babbage, que se parecía mucho a una computadora, no llegó jamás a construirse. Los planes de Babbage fueron demasiado ambiciosos para su época. Demasiado y demasiado pronto. Este avanzado concepto, con respecto a la simple calculadora, le valió a Babbage ser considerado el precursor de la computadora. La novia de Babbage, Ada Augusta Byron, luego Condesa de Lovelace, hija del poeta inglés Lord Byron, que le

5

Page 21: Libro de Texto. Sistemas Operativos

ayuda en el desarrollo del concepto de la Máquina Diferencial, creando programas para la máquina analítica, es reconocida y respetada, como el primer programador de computadoras.

Joseph Jacquard (1752-1834), industrial francés es el siguiente en aportar algo al moderno concepto de las computadoras, para seguir adelante. Jacquard tuvo la idea de usar tarjetas perforadas (figura 1-3) para manejar agujas de tejer, en telares mecánicos. Un conjunto de tarjetas constituían un programa, el cual creaba diseños textiles.

Figura 1-3 Maquina de Joseph Jacquard

Una ingeniosa combinación de los conceptos de Babbage y Jacquard, dan origen en 1890 a un equipo electromecánico (figura 1-4), que salva del caos a la Oficina de Censo de Estado Unidos. Hermann Hollerith usa una perforadora mecánica para representar letras del alfabeto y dígitos en tarjetas de papel, que tenían 80 columnas y forma rectangular. La máquina de Hollerith usando información perforada en las tarjetas, realiza en corto tiempo la tabulación de muchos datos.

Figura 1-4 Maquina de Hollerith

6

Page 22: Libro de Texto. Sistemas Operativos

En el año 1944 se construyó en la Universidad de Harvard, la MARK I (figura 1-5), diseñada por un equipo encabezada por el Dr. Howard Aiken, es esta la primera máquina procesadora de información. La Mark I funcionaba eléctricamente, tenia 760.000 ruedas y relés y 800 Km. de cable y se basaba en la máquina analítica de Babbage., a pesar de su peso superior a 5 toneladas y su lentitud comparada con los equipos actuales fue la primera máquina en poseer todas las características de una verdadera computadora.

Figura 1-5 La MARK I

La primera computadora electrónica fue terminada de construir en 1946, por J.P.ECKERT y J.W MAUCHLY en la Universidad de Pensilvania y se llamó ENIAC(Electric Numeric Integrator And Calculador); podía multiplicar 10.000 veces más rápido que la máquina de Airen pero tenía problemas pues estaba construida con casi 18.000 válvulas de vacío, era enorme la energía que consumía y el calor que producía; esto hacia que las válvulas se quemaran rápidamente y que las casas vecinas tuviesen cortes de luz. Figura 1-6.

  Figura 1-6 ENIAC

7

Page 23: Libro de Texto. Sistemas Operativos

Considerado como el padre de las computadoras el matemático JOHNN VON NEUMANN propuso almacenar el programa y los datos en la memoria del ordenador, su idea fundamental era permitir que en la memoria coexistan datos con instrucciones, para que entonces la computadora pueda ser programada en un lenguaje, y no por medio de alambres que eléctricamente interconectaban varias secciones de control, a este se le llamó EDVAC (Electronic Discrete Variable Automatic Computer) figura 1-7.

Figura 1-7 EDVAC

Todo este desarrollo de las computadoras suele dividirse por generaciones o etapas, el criterio que se empleo para determinar el cambio de generación no está muy bien definido, pero por lo menos deben cumplirse al menos los siguientes requisitos: La forma en que están construidas y la forma en el ser humano se comunica con ellas.

1a. Etapa (1945-1955): Bulbos y conexiones.

aaaaaaaaaaaaaaaaaaaa  

Después de los infructuosos esfuerzos de Babbage, hubo poco progreso en la construcción de las computadoras digitales, hasta la Segunda Guerra Mundial. A mitad de la década de los 40's, Howard Aiken (Harvard), John Von Newman

8

Page 24: Libro de Texto. Sistemas Operativos

(Instituto de Estudios Avanzados, Princeton), J. Prespe R. Eckert y Williams Mauchley (Universidad de Pennsylvania), así como Conrad Zuse (Alemania), entre otros lograron construir máquinas de cálculo mediante bulbos. Estas máquinas eran enormes y llenaban cuartos completos con decenas de miles de bulbos, pero eran mucho más lentas que la computadora casera más económica en nuestros días.

Toda la programación se llevaba a cabo en lenguaje de máquina absoluto y con frecuencia se utilizaban conexiones para controlar las funciones básicas de la máquina. Los lenguajes de programación eran desconocidos (incluso el lenguaje ensamblador). No se oía de los Sistemas Operativos el modo usual de operación consistía en que el programador reservaba cierto período en una hoja de reservación pegada a la pared, iba al cuarto de la máquina, insertaba su conexión a la computadora y pasaba unas horas esperando que ninguno de los 20,000 o más bulbos se quemara durante la ejecución. La inmensa mayoría de los problemas eran cálculos numéricos directos, por ejemplo, el cálculo de valores para tablas de senos y cosenos.

A principio de la década de los 50's la rutina mejoro un poco con la introducción de las tarjetas perforadas. Fue entonces posible escribir los programas y leerlas en vez de insertar conexiones, por lo demás el proceso era el mismo.

2a. Etapa. (1955-1965): Transistores y Sistemas de Procesamiento por lotes.

La introducción del transistor a mediados de los años 50's modificó en forma radical el panorama. Las computadoras se volvieron confiables de forma que podían fabricarse y venderse a clientes, con la esperanza de que ellas continuaran funcionando lo suficiente como para realizar un trabajo en forma.

Dado el alto costo del equipo, no debe sorprender el hecho de que las personas buscaron en forma por demás rápidas vías para reducir el tiempo invertido. La solución que, por lo general se adoptó, fue la del sistema de procesamiento por lotes.

3ra Etapa (1965-1980): Circuitos integrados y multiprogramación.

9

Page 25: Libro de Texto. Sistemas Operativos

La 360 de IBM fue la primera línea principal de computadoras que utilizó los circuitos integrados, lo que proporcionó una gran ventaja en el precio y desempeño con respecto a las máquinas de la segunda generación, construidas a partir de transistores individuales. Se trabajo con un sistema operativo enorme y extraordinariamente complejo. A pesar de su enorme tamaño y sus problemas el sistema operativo de la línea IBM 360 y los sistemas operativos similares de esta generación producidos por otros fabricantes de computadoras realmente pudieron satisfacer, en forma razonable a la mayoría de sus clientes. También popularizaron varias técnicas fundamentales, ausentes de los sistemas operativos de la segunda generación, de las cuales la más importante era la de multiprogramación.

Otra característica era la capacidad de leer trabajos de las tarjetas al disco, tan pronto como llegara al cuarto de cómputo. Así, siempre que concluyera un trabajo el sistema operativo podía cargar un nuevo trabajo del disco en la partición que quedara desocupada y ejecutarlo.

4ta Etapa (1980-Actualidad): Computadoras personales.

Un interesante desarrollo que comenzó a llevarse a cabo a mediados de la década de los ochenta ha sido el crecimiento de las redes de computadoras personales, con sistemas operativos de red y sistemas operativos distribuidos.

En el sistema operativo de red, los usuarios están conscientes de la existencia de varias computadoras y pueden conectarse con máquinas remotas y copiar archivos de una máquina a otra. Cada máquina ejecuta su propio sistema operativo local y tiene su propio usuario.

Por el contrario, un sistema operativo distribuido es aquel que aparece ante sus usuarios como un sistema tradicional de un solo procesador, aun cuando esté compuesto por varios procesadores. En un sistema distribuido verdadero, los usuarios no deben ser conscientes del lugar donde su programa se ejecute o de lugar donde se encuentren sus archivos; eso debe ser manejado en forma automática y eficaz por el sistema operativo.

Desarrollo de sistemas operativos a futuro

Existen cuatro principios dominantes que deben regir en el diseño de sistemas operativos a futuro. Y se debe contar con metas que hagan que los usuarios no tengan problemas o no deban ser unos súper programadores y conocedores en protocolos de red para manejar los problemas que se desarrollen en la sesión de

10

Page 26: Libro de Texto. Sistemas Operativos

trabajo a continuación se mostraran algunas metas que se deben tener los sistemas operativos a futuro.

Los sistemas operativos deben ser extremadamente robustos. Ninguna acción del usuario debe hacer que el sistema se comporte de una manera extraña o ilógica.

Debe ser imposible que cualquier programa interrumpa el funcionamiento de otros programas, o de la maquina en su totalidad. Es decir sin importar las acciones y las decisiones del usuario y del programador, la computadora nunca debe "colapsarse". Además, cualquier acontecimiento inesperado se debe manejar de una manera práctica. Los problemas que el sistema operativo no puede solucionar se deben señalar al usuario de una manera concisa y clara (tales como un cuadro de dialogo), y se debe explicar de una manera no técnica utilizando un lenguaje dependiendo del modulo de programación.

El sistema debe enumerar claramente las opciones de las cuales el usuario debe elegir.

El Sistema Operativo del Mañana

Se ha progresado mucho en el desarrollo de los sistemas operativos. Estos progresos han sido paralelos a la aparición de nuevas tecnologías y de nuevos algoritmos para las tareas de los sistemas operativos.

Estandarización

Actualmente, hay numerosos sistemas operativos y sistemas de hardware que se comportan de varias maneras. Por lo tanto, la comunicación entre las máquinas de diferente arquitectura es difícil, y esta situación es confusa para cualquier usuario que procure cambiarse de una plataforma a otra. Esta confusión da lugar a un costo significativo debido a la capacitación y al tiempo perdido durante la transición y fase de aprendizaje.

Los sistemas operativos deben ser estandarizados de tal manera que sé útil y fácil para que sigan siendo útiles para los usuarios y no se tengan que cambien y adaptarse a un nuevo sistema operativo. Se debe crecer a la par con la tecnología de cómputo, la visualización, y las tecnologías de interacción, y las preferencias del usuario, para que esta estandarización sea realizada los diversos sistemas operativos deben tener los siguientes puntos.

1. Un conjunto muy bien definido de los estándares públicos disponibles para la comunicación entre las capas y los objetos.

2. Que este conjunto de estándares se desarrolle con un cierto plazo de tiempo pero que siga siendo claro y conciso.

11

Page 27: Libro de Texto. Sistemas Operativos

3. Que los estándares no cambien tan rápidamente como para causar problemas de compatibilidad o altos costos de cambio de hardware.

Rhapsody

Es un sistema diseñado para ser el sistema operativo del futuro: rápido, moderno, altamente estable

¿Qué es Rhapsody?

Un poderoso entorno con multitareas, memoria protegida con integradas capacidades para el simétrico multiprocesamiento.

Las ventajas del Mac OS junto con la integrada y madura tecnología de comunicaciones y una profunda integración de Java.

La tecnología de QuickTime Media Layer será optimizada para Rhapsody, proveyendo a los usuarios con un rico y ventajoso entorno para la creación y reproducción de multimedia.

Rhapsody combina la larga tradición de facilidad de uso y el real "plug and play" establecida por Apple, y el entorno kernel de NeXT. Preservará el familiar "míralo y siéntelo" de la actual interfase Mac OS.

Un particular interés para eficientizar entornos de grandes corporativos, Rhapsody tendrá la tecnología de NeXT: "Objetos Orientados" y el desarrollo de herramientas para incrementar la productividad en aplicaciones.

La parte medular de la arquitectura de Rhapsody es ser nativo al procesador PowerPC. Diseñado para usarse en la mayoría de aplicaciones del Mac OS también la mayoría de las extensiones del sistema trabajarán sin modificaciones. Esta compatibilidad será proveída en una implementación del Mac OS, que incluyen los procesadores 68K y los Power PC, no será una "emulación" para las 68K según ingenieros de Apple, se integrará un nuevo código que aprovechará al poderoso procesador PowerPC desarrollado por IBM, Motorola y Apple, que se encuentra ya en su cuarta generación a velocidades de 300 y 350 Mhz.

El proyecto integrado a Rhapsody referido como "Yellow Box" será enriquecido en las tecnologías lideres de Apple: QuickTime y ColorSync. Es importante resaltar que "Yellow Box" no será limitado a las aplicaciones PowerPC de Macintosh, sino que podrá tener como fuente aplicaciones en el standard de PC corriendo Windows.

Otro de los desarrollos de Rhapsody es un poderoso entorno de aplicaciones de "objetos orientados" iniciado por NeXT (la tecnología de objetos orientados es trabajar por unas llamadas "partes" que consiste en usar varios documentos de varias aplicaciones en uno solo, sin necesidad de tener la aplicación en que fueron creados).

12

Page 28: Libro de Texto. Sistemas Operativos

Los ingenieros de Apple tienen planeado integrar estrechamente a Java en Rhapsody - con las librerías de Java y la Java Virtual Machine (VM) dando a Apple el liderazgo en el desarrollo de Java. Una moderna implementación de Mac, microkernel, desarrollado por la Universidad Carnegie Mellon es una nueva generación de entrada y salida de dispositivos (IO), administrador de archivos, intercambio entre aplicaciones y redes. Apple desarrolla un nuevo dispositivo que sustituirá al actual SCSI: el WireFire que transfiere 4MB por segundo.

Perspectivas de los Sistemas Operativos en las Empresas fabricantes de Hardware y Software

Desde los primeros días de las computadoras modernas, la tecnología del hardware ha progresado lejos más rápidamente que el software que la acompaña. Por ejemplo, existen computadoras que poseen un Hardware con un funcionamiento veloz e increíble, pero el Software (Sistema Operativo) que estas máquinas poseen es tan pobre que son extremadamente difíciles de programar. Debido al estado inmaduro de estos sistemas operativos, estas computadoras funcionan solamente en una fracción pequeña de su velocidad máxima mientras que trabajan bajo cargas de trabajo típicas.

Es por lo anterior que la industria del software debe ahora dedicar más tiempo y energía al desarrollo de este. Una vez que la tecnología del software alcance el nivel de la tecnología del hardware, los sistemas serán no sólo más de gran alcance y prácticos, sino que utilizarán sus recursos de hardware mucho más eficientemente.

Con la llegada de los nuevos Sistemas Operativos el hardware se aprovechará al máximo y se reducirá esa brecha tan grande de rapidez que existe entre el hardware y el software que lo controla. Con estos Sistemas Operativos se llegará a concretar lo que se llama la quinta generación de computadoras, la cual pretende multiplicar la velocidad, disponer procesamientos paralelos, diseñar una arquitectura de hardware-software muy superior y utilizar el lenguaje natural.

La renovación que aportarán los sistemas operativos es múltiple. Ya no viene determinada únicamente por la introducción de cambios material o de hardware, sino por la combinación de novedades en el material y en la programación.

El tipo de trabajo propio que realizarán el hardware y software de la quinta generación no solo en el tratamiento de datos, sino en la adquisición de información y, a partir de los materiales y estructuras de que dispone, en la elaboración de conocimientos, es decir, en la elaboración inteligente del saber. Es decir se anuncia el aprovechamiento de la computadora para adquirir conocimientos artificialmente, a través de las máquinas. A partir de esto, estas ya no solo aportarán fuerza o habilidad, sino que también proveerán al hombre de un conocimiento del mundo.

13

Page 29: Libro de Texto. Sistemas Operativos

Realidad virtual en los sistemas operativos.

La realidad virtual en los últimos tiempos sé a mostrado como una de las herramientas más importante y una de las que más jugo hace falta sacar, en lo que nos concierne la realidad en los sistemas operativos no esta muy alejada la realidad virtual de los sistemas operativos simplemente se debe observar mas detalladamente para darse cuenta que ahora los sistemas operativos tienen una interacción en realidad virtual simplemente observen cuando se mueve el cursor de mouse ese cursor se mueve en la dirección en donde nosotros le ordenamos por medio del mouse, pero hago una pregunta ¿su cursor es real?, Lógicamente no es real pero nosotros interactuamos con ese cursor por eso los sistemas operativos gráficos actuales son en realidad virtual. No se puede imaginar una persona interactuando en realidad virtual con un casco, unos guantes y no sé que tantas chachas mas, no eso es una parte de la realidad virtual al momento que nosotros usamos un sistema operativo grafico estamos interactuando con él en una realidad virtual.

Apple la próxima era.

Nadie de nosotros puede predecir el nuevo milenio, pero es claro que las computadoras y el Internet jugarán un tremendo papel en nuestras vidas. La combinación de Macintosh e Internet ofrecerá más posibilidades que nadie, particularmente en diseño gráfico, edición de video, publicación de páginas Web y en el desarrollo de software.

Apple Computers liberó más de 10,000 programadores, una versión beta del nuevo sistema operativo que tiene como nombre clave Rhapsody, con la intención de que los programadores conozcan y desarrollen aplicaciones para este nuevo sistema operativo.

La compañía de Cupertino, California, espera que Rhapsody sea una combinación de la facilidad de uso y las soluciones en multimedia de Apple con el liderazgo en desarrollo de software y de entornos operativos de NeXT.

1.4 Clasificación de los sistemas operativos.

Con el paso del tiempo, los Sistemas Operativos fueron clasificándose de diferentes maneras, dependiendo del uso o de la aplicación que se les daba. A continuación se mostrarán diversos tipos de Sistemas Operativos que existen en la actualidad, con algunas de sus características:

Sistemas Operativos por lotes.

Los Sistemas Operativos por lotes, procesan una gran cantidad de trabajos con poca o ninguna interacción entre los usuarios y los programas en ejecución. Se reúnen todos los trabajos comunes para realizarlos al mismo tiempo, evitando la

14

Page 30: Libro de Texto. Sistemas Operativos

espera de dos o más trabajos como sucede en el procesamiento en serie. Estos sistemas son de los más tradicionales y antiguos, y fueron introducidos alrededor de 1956 para aumentar la capacidad de procesamiento de los programas.

Cuando estos sistemas son bien planeados, pueden tener un tiempo de ejecución muy alto, porque el procesador es mejor utilizado y los Sistemas Operativos pueden ser simples, debido a la secuenciabilidad de la ejecución de los trabajos.

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.

UNIVAC (Universal Automatic Computer) 1107 apareció en 1962 en la segunda generación sustituyendo los tubos de vacío por los transistores. El UNIVAC 1107 (el “siete”), se hizo famoso cuando su sistema numérico fue considerado en el texto “The Art of Computer Programming”. El sistema operativo de este ordenador era el EXEC II orientado a procesamiento académico.

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

1. Requiere que el programa, datos y órdenes al sistema sean remitidos todos juntos en forma de lote.

2. Permiten poca o ninguna interacción usuario/programa en ejecución. 3. Mayor potencial de utilización de recursos que procesamiento serial simple

en sistemas multiusuarios. 4. No conveniente para desarrollo de programas por bajo tiempo de retorno y

depuración fuera de línea. 5. Conveniente para programas de largos tiempos de ejecución (ej. análisis

estadísticos, nóminas de personal, etc.) 6. Se encuentra en muchos computadores personales combinados con

procesamiento serial. 7. Planificación del procesador sencilla, típicamente procesados en orden de

llegada. 8. Planificación de memoria sencilla,  generalmente se divide en dos: parte

residente del S.O. y programas transitorios. 9. No requieren gestión crítica de dispositivos en el tiempo. 10.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

15

Page 31: Libro de Texto. Sistemas Operativos

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.

Solaris es un sistema operativo de tipo Unix desarrollado por Sun Microsystems desde 1992 como sucesor de SunOS. Es un sistema certificado oficialmente como versión de Unix. Funciona en arquitecturas SPARC y x86 para servidores y estaciones de trabajo.

Aunque Solaris fue desarrollado como software privativo, la mayor parte de su código se ha liberado como proyecto de software libre denominado OpenSolaris. Solaris es conocido por su escalabilidad, especialmente en sistemas SPARC, y por ser origen de innovadoras tecnologías, como DTrace y ZFS.

Los Sistemas Operativos de tiempo real, cuentan con las siguientes características:

1. 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.

2. Se utilizan en control industrial, conmutación telefónica, control de vuelo, simulaciones en tiempo real., aplicaciones militares, etc.

3. Objetivo es proporcionar rápidos tiempos de respuesta. 4. Procesa ráfagas de miles de interrupciones por segundo sin perder un solo

suceso. 5. Proceso se activa tras ocurrencia de suceso, mediante interrupción.

16

Page 32: Libro de Texto. Sistemas Operativos

6. Proceso de mayor  prioridad expropia recursos. 7. Por tanto generalmente se utiliza planificación expropiativa basada en

prioridades. 8. Gestión de memoria menos exigente que tiempo compartido, usualmente

procesos son residentes permanentes en memoria. 9. Población de procesos estática en gran medida. 10.Poco movimiento de programas entre almacenamiento secundario y

memoria. 11.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, MAC-OS, OS/2, soportan la multitarea.

Unix (registrado oficialmente como UNIX®) es un sistema operativo portable, multitarea y multiusuario; desarrollado, en principio, en 1969 por un grupo de empleados de los laboratorios Bell de AT&T, entre los que figuran Ken Thompson, Dennis Ritchie y Douglas McIlroy.1 2

Hasta 2009, el propietario de la marca UNIX® es The Open Group, un consorcio de normalización industrial. Sólo los sistemas totalmente compatibles y que se encuentran certificados por la especificación Single UNIX Specification pueden ser denominados "UNIX®" (otros reciben la denominación "similar a un sistema Unix" o "similar a Unix").

Durante fines de la década de 1970 y principios de la década de 1980, la influencia de Unix en círculos académicos indujo a su adopción en masa (principalmente la variante BSD, que había surgido en la Universidad de California, Berkeley) en varias compañías que se iniciaban por aquel entonces[cita   requerida ], siendo la más destacada Sun Microsystems. Hoy en día, junto a los sistemas Unix certificados, también se pueden encontrar sistemas similares a Unix, como Linux y los derivados de BSD.

En ocasiones, el término "Unix tradicional" suele emplearse para describir a Unix o a un sistema operativo que cuenta con las características de UNIX Versión 7 o UNIX System V.

Las características de un Sistema Operativo de multiprogramación o multitarea son las siguientes:

17

Page 33: Libro de Texto. Sistemas Operativos

1. Mejora productividad del sistema y utilización de recursos. 2. Multiplexa recursos entre varios programas. 3. Generalmente soportan múltiples usuarios (multiusuarios). 4. Proporcionan facilidades para mantener el entorno de usuarios individuales. 5. Requieren validación de usuario para seguridad y protección. 6. Proporcionan contabilidad del uso de los recursos por parte de los usuarios. 7. Multitarea sin soporte multiusuario se encuentra en algunos computadores

personales o en sistemas de tiempo real. 8. Sistemas multiprocesadores son sistemas multitareas por definición  ya que 

soportan la ejecución simultánea de múltiples tareas sobre diferentes procesadores.

9. 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 usuario. 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 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.

En los sistemas operativos antiguos, la idea de multiusuario guarda el significado original de que éste puede utilizarse por varios usuarios al mismo tiempo, permitiendo la ejecución concurrente de programas de usuario. Aunque la idea original de tiempo compartido o el uso de terminales tontas no es ya el más utilizado. Esto debido a que los ordenadores modernos pueden tener múltiples procesadores, o proveer sus interfaces de usuario a través de una red, o en casos especiales, ya ni siquiera existe un solo ordenador físico proveyendo los servicios, sino una federación de ordenadores en red o conectados por un bus de alta velocidad y actuando en concierto para formar un cluster.

Características de los Sistemas Operativos de tiempo compartido:

1. Populares representantes de sistemas multiprogramados multiusuario, ej: sistemas de diseño asistido por computador, procesamiento de texto, etc.

18

Page 34: Libro de Texto. Sistemas Operativos

2. Dan la ilusión de que cada usuario tiene una máquina para  sí. 3. Mayoría utilizan algoritmo de reparto circular. 4. Programas se ejecutan con prioridad rotatoria que se incrementa con la

espera y disminuye después de concedido el servicio. 5. Evitan monopolización del sistema asignando tiempos de procesador (time

slot). 6. Gestión de memoria proporciona protección a programas residentes. 7. Gestión de archivo  debe proporcionar protección y control de acceso debido

a que  pueden existir múltiples usuarios accesando un mismo archivo.

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 trasparente 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.

Amoeba es un sistema operativo distribuido de investigación, basado en una arquitectura de micronúcleo. Fue desarrollado por Andrew S. Tanenbaum y otros en la Universidad Libre de Amsterdam. El objetivo del proyecto Amoeba era construir un sistema de tiempo compartido que hiciera que una red entera de computadores pareciera a los ojos de un usuario como una máquina única.

Los servicios suministrados por el núcleo incluyen threads, segmentos de memoria, mecanismos de IPC (RPCs y mensajes) y E/S [160].

El desarrollo parece detenido, dado que la fecha de la última modificación en el código data de febrero de 2001.

Existen versiones para varias plataformas, incluyendo i386, Sun-3 y SPARC.

El lenguaje de programación Python fue originalmente desarrollado para esta plataforma.

Características de los Sistemas Operativos distribuidos:

1. Colección de sistemas autónomos capaces de comunicación y cooperación mediante interconexiones hardware y software .

2. Gobierna operación de un S.C. y proporciona abstracción de máquina virtual a los usuarios.

19

Page 35: Libro de Texto. Sistemas Operativos

3. Objetivo clave es la transparencia. 4. Generalmente proporcionan medios para la compartición global de recursos. 5. 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 2008 Server, UNIX, LANtastic.

Windows Server 2008

Parte de la familia Microsoft Windows

Lanzamiento: 4 de febrero de 2008

Última versión estable: 6.0 Service Pack 2 (SP2; Compilación 6002)(30 de abril de 2009)

Modelo de desarrollo: Software propietario, Shared Source

Licencia: Microsoft CLUF (EULA)

Núcleo: NT 6.0

Tipo de núcleo: Híbrido

Idiomas: Multilingüe

En español: Sí

Sistemas Operativos paralelos.

En estos tipos de Sistemas Operativos se pretende que cuando existan dos o más procesos que compitan por algún recurso se puedan realizar o ejecutar al mismo tiempo.

En UNIX existe también la posibilidad de ejecutar programas sin tener que atenderlos en forma interactiva, simulando paralelismo (es decir, atender de manera concurrente varios procesos de un mismo usuario). Así, en lugar de esperar a que el proceso termine de ejecutarse (como lo haría normalmente), regresa a atender al usuario inmediatamente después de haber creado el proceso.

20

Page 36: Libro de Texto. Sistemas Operativos

Ejemplos de estos tipos de Sistemas Operativos están: Alpha, PVM, la serie AIX, que es utilizado en los sistemas RS/6000 de IBM.

En UNIX existe también la posibilidad de ejecutar programas sin tener que atenderlos en forma interactiva, simulando paralelismo. Así, en lugar de esperar a que el proceso termine de ejecutarse, regresa a atender al usuario inmediatamente.

1.5 Estructura (niveles o estratos de diseño).

Sistemas monolíticos

Este tipo de organización es, con diferencia, la más común. El sistema operativo se escribe como una colección de procedimientos, cada uno de los cuales puede llamar a los demás cada vez que así lo requiera. Cuando se usa esta técnica, cada procedimiento del sistema tiene una interfaz bien definida en términos de parámetros y resultados, y cada uno de ellos es libre de llamar a cualquier otro, si éste último proporciona un cálculo útil para el primero.

Para construir el programa objeto real del sistema operativo siguiendo este punto de vista, se compilan de forma individual los procedimientos, o los ficheros que contienen los procedimientos, y después se enlazan en un sólo fichero objeto con el enlazador. En términos de ocultación de la información, ésta es prácticamente nula: cada procedimiento es visible a los demás (en contraste con una estructura con módulos o paquetes, en la que la mayoría de la información es local a un módulo, y donde sólo los datos señalados de forma expresa pueden ser llamados desde el exterior del módulo).

Los servicios (mediante llamadas al sistema) que proporciona el sistema operativo se solicitan colocando los parámetros en lugares bien definidos, como los registros o la pila, para después ejecutar una instrucción especial de trampa, a veces referida como llamada al núcleo o llamada al supervisor. Esta instrucción cambia la máquina del modo usuario al modo núcleo (también conocido como modo supervisor), y transfiere el control al sistema operativo, lo que se muestra en el evento (1) de la figura 1-8.

El sistema operativo examina entonces los parámetros de la llamada para determinar cual de ellas se desea realizar, como se muestra en (2) de la figura 1-8. A continuación, el sistema operativo analiza una tabla que contiene en la entrada k un apuntador al procedimiento que implementa la k-ésima llamada al sistema. Esta operación, que se muestra en (3) de la figura 1-8, identifica el procedimiento de servicio, al cual se llama. Por último, la llamada al sistema termina y el control vuelve al programa del usuario.

21

Page 37: Libro de Texto. Sistemas Operativos

Figura 1-8 Sistemas Monolíticos

Esta organización sugiere una estructura básica del sistema operativo:

 Un programa principal que llama al procedimiento del servicio solicitado.

 Un conjunto de procedimientos de servicio que lleva a cabo las llamadas al sistema.

 Un conjunto de procedimientos de utilidades que ayudan a los procedimientos de servicio.

En este modelo, para cada llamada al sistema existe un procedimiento de servicio que se encarga de ella. Los procedimientos de utilidad hacen cosas necesarias para varios procedimientos de servicio, como por ejemplo, buscar los datos del programa del usuario. Esta división de los procedimientos en tres capas se muestra en la figura 1-9.

Figura 1-9 División de procedimientos en tres capas

22

Page 38: Libro de Texto. Sistemas Operativos

Modelo cliente-servidor

Una tendencia de los sistema operativos modernos es la de trasladar el código a capas superiores, y eliminar la mayor parte posible del sistema operativo para mantener un núcleo mínimo. El punto de vista usual es el implantar la mayoría de las funciones del sistema operativo como procesos de usuario. Para solicitar un servicio, como la lectura de un bloque de cierto fichero, un proceso de usuario (denominado en este caso proceso cliente) envía la solicitud a un proceso servidor, que realiza el trabajo y devuelve la respuesta.

Figura 1-10 Modelo Cliente-Servidor

En este modelo, que se muestra en la figura 1-10, lo único que hace el núcleo es controlar la comunicación entre los clientes y los servidores. Al separar el sistema operativo en partes, cada una de ellas controla una faceta del sistema, como el servicio a ficheros, servicio a procesos, servicio a terminales o servicio a la memoria; cada parte es pequeña y controlable. Además, puesto que todos los servidores se ejecutan como procesos en modo usuario, y no en modo núcleo, no tienen acceso directo al hardware. En consecuencia, si hay un error en el servidor de ficheros éste puede fallar, pero esto no afectará en general a toda la máquina.

Otra de las ventajas del modelo cliente-servidor es su capacidad de adaptación para su uso en sistemas distribuidos (véase la figura 1-11). Si un cliente se comunica con un servidor mediante mensajes, el cliente no necesita saber si el mensaje se gestiona de forma local, en su máquina, o si se envía por medio de una red a un servidor en una máquina remota. En lo que respecta al cliente, lo mismo ocurre en ambos casos: se envió una solicitud y se recibió una respuesta.

23

Page 39: Libro de Texto. Sistemas Operativos

Figura 1-11 Modelo Cliente-Servidor

La idea anterior de un núcleo que sólo controla el transporte de mensajes de clientes a servidores, y viceversa, no es totalmente real. Algunas funciones del sistema operativo (como la introducción de órdenes en los registros físicos de los controladores de E/S) son difíciles, si no es que imposible de realizar, a partir de programas de usuario. Existen dos formas de afrontar este problema. Una es hacer que algunos procesos de servidores críticos (por ejemplo, los gestores de los dispositivos de E/S) se ejecuten en realidad en modo núcleo, con acceso total al hardware, pero de forma que se comuniquen con los demás procesos mediante el mecanismo normal de mensajes.

La otra forma es construir una cantidad mínima de mecanismos dentro del núcleo, pero manteniendo las decisiones de política relativos a los usuarios dentro del espacio de los usuarios. Por ejemplo, el núcleo podría reconocer que cierto mensaje enviado a una dirección especial indica que se tome el contenido de ese mensaje y se cargue en los registros del controlador de algún disco, para iniciar la lectura del disco. En este ejemplo, el núcleo ni siquiera inspeccionaría los bytes del mensaje para ver si son válidos o tienen algún sentido; sólo los copiaría ciegamente en los registros del controlador del disco. Es evidente que debe utilizarse cierto esquema para limitar tales mensajes sólo a los procesos autorizados. La separación entre mecanismos y política es un concepto importante, aparece una y otra vez en diversos contextos de los sistemas operativos.

La figura 1-12 muestra la estructura general de un Sistema operativo.

24

Page 40: Libro de Texto. Sistemas Operativos

Figura 1-12 Esquema general de un Sistema Operativo

1.6 Núcleo 1.6.1 Interrupciones (FLIH)

Los Sistemas Operativos proporcionan un número potencialmente grande de servicios accesibles al usuario. Uno de los problemas principales que se encuentran los diseñadores de sistemas operativos es cómo manejar esta complejidad de funciones a muchos niveles de detalle mientras proporcionan un producto fiable y fácil de mantener.

Con la experiencia que se tiene sobre el tema, se está tendiendo a la implantación de sistemas operativos en forma de niveles jerárquicos de abstracción. De esta forma, se obtendrán una serie de módulos que ocultarán los detalles de la estructura de datos y los algoritmos de procesamiento que utilicen. Externamente se conocerá cada módulo por realizar unas funciones específicas que sólo pueden usar las capas superiores, pero los detalles de cómo lo hacen no estarán disponibles.

Como resultado, los módulos tienden a ser pequeños y fáciles de comprender e implementar.

25

Page 41: Libro de Texto. Sistemas Operativos

Con todo esto, el diseño jerárquico ofrece una mayor facilidad en la depuración, modificación y verificación de los sistemas operativos.Programa de aplicaciónPrograma de aplicaciónServicios del sistemaSistema de ArchivosAdministración de dispositivos de memoria y de E/SPlanificación del procesadorHardwareModo usuarioModo kernel

El núcleo del sistema operativo es el nivel más interno del sistema operativo. Actúa de interfaz entre el hardware básico y el resto del sistema operativo. Su finalidad es constituir un entorno adecuado en el que se puedan desarrollar los distintos procesos.

Las funciones básicas del núcleo de un sistema operativo son:

Manipulación de las interrupciones

Creación/Destrucción de procesos

Cambios de estados de procesos

Planificación de los procesadores

Suspensión/Reanudación de procesos

Sincronización de procesos

Comunicación entre procesos

Manipulación de bloques de control de procesos

Soporte de las actividades de entrada/salida

Soporte de la asignación/liberación del almacenamiento

Soporte del sistema de archivos

Soporte de un mecanismo de llamada/regreso al procedimiento

Soporte de ciertas funciones contables del sistema

Características del núcleo:

Se encuentra residente en Memoria Principal Tienden a ser ininterrumpibles Se ejecutan con el máximo privilegio

26

Page 42: Libro de Texto. Sistemas Operativos

El núcleo es la parte más dependiente del hardware. Normalmente se escribe en ensamblador, pero existen otros lenguajes para diseño de sistemas operativos: BCPL (Basic Compiled Programming Language), BLISS (Basic Language for Implementing Systems), C, Pascal Concurrente, PL/2, ...

Requisitos básicos del hardware.

Veamos el hardware básico necesario para soportar un modelo de sistema operativo sencillo.Se requieren las siguientes posibilidades en el hardware:

Un mecanismo de interrupción. Salvará como mínimo el PC (Contador de

Programa) y transferirá el control a una posición de memoria.

Un mecanismo de protección que debe implementarse en el hardware de

direccionamiento de la memoria. Esto se realiza para proteger la memoria

de un proceso del acceso no autorizado por parte de otros procesos.

Repertorio de instrucciones reservadas. Con el fin de que varios procesos

concurrentes no se interfieran entre ellos. Estas instrucciones llevan a

cabo funciones tales como:

o Autorizar e inhibir las interrupciones

o Conmutar un procesador entre distintos procesos

o Acceder a los registros usados por el hardware de protección de memoria

o Llevar a cabo la E/S

o Manejo y control del reloj en tiempo real

o Parar el procesador central

Para establecer cuándo se pueden usar estas instrucciones reservadas, existen dos modos de funcionamiento del computador:

Modo núcleo o supervisor (kernel): Ejecuta todas las instrucciones (tanto

reservadas como de usuario)

Modo usuario: Sólo ejecuta las instrucciones de usuario

Cambio de modos:

Modo usuario a modo supervisor:

o El proceso usuario solicita una llamada al supervisor para usar alguna función

del sistema operativo

27

Page 43: Libro de Texto. Sistemas Operativos

o Ocurre una interrupción

o Error en un proceso de usuario

o Se intenta ejecutar una instrucción reservada en modo usuario (caso especial

de error)

Modo supervisor a modo usuario:

o Instrucción reservada

Gestión de interrupciones.

Una interrupción es una respuesta a un suceso asíncrono o excepcional que automáticamente reserva el estado actual de la CPU para permitir su continuación posterior y provoca una transferencia automática a una rutina específica.

Básicamente, existen seis clases de interrupciones:

1. Interrupciones SVC (SuperVisor Call, llamadas al supervisor). Son iniciadas por un proceso en ejecución para solicitar una operación de E/S, obtener memoria, …2. Interrupciones de E/S. Son iniciadas por el hardware de E/S. Indican a la CPU el cambio de estado de un canal o dispositivo. Se producen cuando finaliza unaoperación de E/S o cuando un dispositivo para a estado de listo.3. Interrupciones externas. Son causadas por diversos sucesos, incluyendo laexpiración del cuantum de reloj, la pulsación de la tecla de interrupción del teclado, …4. Interrupciones de reinicio. Ocurren cuando se pulsa el botón de reinicio de laconsola (Reset), …5. Interrupciones de verificación del programa. Son causadas por varios tipos deerrores experimentados al ejecutar un proceso, como una operación de división por cero, formato de datos erróneo, ejecución de una operación inválida, intento de acceder a una posición de memoria fuera de los límites (violación de memoria), …6. Interrupciones de verificación de la máquina. Son ocasionadas por el mal funcionamiento de la máquina.

La gestión de interrupciones la realiza el manipulador (controlador) de interrupciones (FLIH, First Level Interrupt Handler).El manipulador de interrupciones es la parte del sistema operativo responsable de proporcionar la respuesta adecuada a las señales procedentes tanto del exterior como del interior del sistema (interrupciones externas e internas).

28

Page 44: Libro de Texto. Sistemas Operativos

Misión del FLIH:1. Determinar el origen de las interrupciones.2. Iniciar el servicio de las mismas.

Funcionamiento del FLIH:1. Inhibir las interrupciones (si no lo hace el hardware).2. Guardar la información no salvada por el hardware. Dos posibles formas:

o Salvar los registros que se usen en el tratamiento de la interrupción.o Usar un conjunto de registros suplementarios sólo usados en modo supervisorpara procesar el servicio de la interrupción con lo que no se necesitan salvarlos registros afectados del programa.

3. Identificar la causa de la interrupción (depende del hardware). Podemos distinguir varios casos:

o Con todas las interrupciones se transfiere el control a la misma posición de memoria (caso más sencillo).o El hardware de interrupción es capaz de distinguir las diferentes fuentes de interrupción y transferir el control del programa a una posición de memoria distinta para cada una de ellas, con lo que se reduce el tiempo de identificaciónde la interrupción.o Agrupar las interrupciones por tipos. El hardware es capaz de distinguir las interrupciones según su tipo y transferir el control a posiciones de memoria distintas.

Consideraciones en el tratamiento de las interrupciones: Inhibición de las interrupciones: Si durante el procesamiento de una

interrupción ocurre otra, ésta queda pendiente hasta que el mecanismo de interrupción se reactive. Es decir, cuando se inhiben las interrupciones, la CPU no puede atender a otras interrupciones hasta que se reactive el mecanismo de interrupción.

Prioridades entre las distintas fuentes de interrupción: Una rutina de interrupción puede ser interrumpida por otra fuente de interrupción de más alta prioridad (caso en que un periférico requiera una respuesta mucho más rápida que otro).

Una interrupción puede alterar el estado de los procesos

1.6.2 Despachador (Scheduler).

Se encarga de asignar los procesadores a los diferentes procesos, por lo

tanto debe actuar cuando se debe comprobar si es necesario cambiar el

proceso que está activo.

29

Page 45: Libro de Texto. Sistemas Operativos

Esto involucra:

Cambio de contexto

Cambio a modo usuario

Salto a la dirección de memoria que corresponda al programa de

usuario para continuar su ejecución.

Criterios de Despachador

Utilización de CPU: mantener la CPU ocupada la mayor cantidad del

tiempo posible

Productividad (Throughput): # de procesos por unidad de tiempo

Tiempo de servicio (Turnaround time): tiempo necesario para la

ejecución de un proceso particular

Tiempo de espera (Waiting time): tiempo total que el proceso se

encuentra en la fila ready

Tiempo de respuesta (Response time): tiempo que transcurre desde el

requerimiento hasta que se produce la primera respuesta (en

ambientes de tiempo compartido)

Criterios de Optimización

Máxima utilización de CPU

Máxima productividad

Mínimo tiempo de servicio

Mínimo tiempo de espera

Mínimo tiempo de respuesta

30

Page 46: Libro de Texto. Sistemas Operativos

En el capitulo siguiente se explicarán a profundidad las técnicas para asignar

procesador a los diferentes procesos.

1.6.3 Primitivas de comunicación (IPC).

Es una función básica de los Sistemas operativos.

Los procesos pueden comunicarse entre sí a través de compartir espacios de

memoria, ya sean variables compartidas o buffers, o a través de las

herramientas provistas por las rutinas de IPC.

La IPC provee un mecanismo que permite a los procesos comunicarse y

sincronizarse entre sí. Normalmente a través de un sistema de bajo nivel de

paso de mensajes que ofrece la red subyacente.

La comunicación se establece siguiendo una serie de reglas (protocolos de

comunicación). Los protocolos desarrollados para internet son los mayormente

usados: protocolo de internet (capa de red), protocolo de control de transmisión

(capa de transporte) y protocolo de transferencia de archivos, protocolo de

transferencia de hipertexto (capa de aplicación).

En el capitulo siguiente se explicarán a profundidad las técnicas de

comunicación entre procesos.

31

Page 47: Libro de Texto. Sistemas Operativos

Resumen

Dentro del las muchas definiciones de los sistemas operativos, se podría resumir que son un conjunto de programas que crean la interfaz del hardware con el usuario, y que tiene dos funciones primordiales, que son: Gestionar el hardware.- Se refiere al hecho de administrar de una forma más eficiente los recursos de la máquina. Facilitar el trabajo al usuario.-Permite una comunicación con los dispositivos de la máquina. En general, se puede decir que un Sistema Operativo tiene las siguientes características:Conveniencia, eficiencia, habilidad para evolucionar, encargado de administrar el hardware, organizar datos para acceso rápido y seguro, procesamiento por bytes de flujo a través del bus de datos, técnicas de recuperación de errores y generación de estadísticas. Los sistemas operativos tienen una larga historia, que inicia cuando uno de los primeros dispositivos mecánicos para contar fue el ABACO, cuya historia se remonta a 3000 años AC desarrollada por los chinos y utilizado por civilizaciones griegas y romanas, hasta llegar a los sistemas de multiprogramación modernos.Con el paso del tiempo, los Sistemas Operativos fueron clasificándose de diferentes maneras, dependiendo del uso o de la aplicación que se les daba, ejem. Sistemas operativos por lotes, sistemas operativos de red, etc.Los Sistemas Operativos proporcionan un número potencialmente grande de servicios accesibles al usuario. Uno de los problemas principales que se encuentran los diseñadores de sistemas operativos es cómo manejar esta complejidad de funciones a muchos niveles de detalle mientras proporcionan un producto fiable y fácil de mantener.El núcleo del sistema operativo es el nivel más interno del sistema operativo. Actúa de interfaz entre el hardware básico y el resto del sistema operativo. Su finalidad es constituir un entorno adecuado en el que se puedan desarrollar los distintos procesos.

Problemas

1. Mencione las dos funciones principales de un sistema operativo.

2. Explique que características debe tener un sistema operativo.

3. ¿Por qué no se generalizó uso de tiempo compartido en las computadoras de la segunda generación?

4. Enumere algunas diferencias entre los sistemas operativos de computadora personal y los de mainframe.

32

Page 48: Libro de Texto. Sistemas Operativos

5. Explique las diferencias entre sistema operativo de red y sistema operativo distribuido.

6. Explique el modelo cliente-servidor.

7. Mencione cuales son las funciones básicas del núcleo del sistema operativo.

8. Explique que es una interrupción.

9. Mencione y explique los tipos de interrupciones existentes.

10. ¿Cuál es la diferencia clave entre una interrupción de sistema (TRAP) y una interrupción normal?

33

Page 49: Libro de Texto. Sistemas Operativos

UNIDAD 2. Administración de procesos y del procesador.

2.1 Concepto de proceso.

Un proceso es un programa en ejecución. La diferencia entre proceso y programa es que el primero es activo y el programa pasivo (Tanenbaum, 2003).

Los procesos pueden ser cooperantes o independientes, en el primer caso se entiende que los procesos interactúan entre sí y pertenecen a una misma aplicación. En el caso de procesos independientes en general se debe a que no interactúan y un proceso no requiere información de otros o bien porque son procesos que pertenecen a distintos usuarios.

2.2 Estados y transiciones de los procesos

Un proceso puede estar en cualquiera de los siguientes tres estados: Listo, En ejecución y Bloqueado (Tanenbaum, 2003).

Los procesos en el estado listo son los que pueden pasar a estado de ejecución si el planificador los selecciona. Los procesos en el estado ejecución son los que se están ejecutando en el procesador en ese momento dado. Los procesos que se encuentran en estado bloqueado están esperando la respuesta de algún otro proceso para poder continuar con su ejecución. Por ejemplo operación de E/S. La figura 2-1 muestra los estados y transiciones de procesos.

Figura 2-1 Estados de procesos

34

Page 50: Libro de Texto. Sistemas Operativos

Durante su existencia un proceso pasa por una serie de estados discretos, siendo varias las circunstancias que pueden hacer que el mismo cambie de estado.

Debido a ello se puede establecer una “Lista de Listos” para los procesos “listos” y una “Lista de Bloqueados” para los “bloqueados”.

La “Lista de Listos” se mantiene en orden prioritario y la “Lista de Bloqueados” está desordenada, ya que los procesos se desbloquean en el orden en que tienen lugar los eventos que están esperando.

Al admitirse un trabajo en el sistema se crea un proceso equivalente y es insertado en la última parte de la “Lista de Listos”.

La asignación de la cpu al primer proceso de la “Lista de Listos” se denomina “Despacho”, que es ejecutado por una entidad del Sistema Operativo llamada “Despachador”.

El “Bloqueo” es la única transición de estado iniciada por el propio proceso del usuario, puesto que las otras transiciones son iniciadas por entidades ajenas al proceso.

La manifestación de un proceso en un Sistema Operativo es un “Bloque de Control de Proceso” (PCB) con información que incluye:  

Estado actual del proceso. Identificación única del proceso. Prioridad del proceso. Apuntadores para localizar la memoria del proceso. Apuntadores para asignar recursos. Área para preservar registros.

Cuando el Sistema Operativo cambia la atención de la CPU entre los procesos, utiliza las áreas de preservación del PCB para mantener la información que necesita para reiniciar el proceso cuando consiga de nuevo la CPU., a este cambio se le denomina “cambio de contexto”.Los sistemas que administran los procesos deben poder crear, destruir, suspender, reanudar, cambiar la prioridad, bloquear, despertar y despachar un proceso. La “creación” de un proceso significa: 

Dar nombre al proceso. Insertar un proceso en la lista del sistema de procesos conocidos. Determinar la prioridad inicial del proceso. Crear el bloque de control del proceso.

35

Page 51: Libro de Texto. Sistemas Operativos

Asignar los recursos iniciales del proceso.

Un proceso puede “crear un nuevo proceso”, en cuyo caso el proceso creador se denomina “proceso padre” y el proceso creado “proceso hijo” y se obtiene una “estructura jerárquica de procesos”. La “destrucción” de un proceso implica: 

Borrarlo del sistema. Devolver sus recursos al sistema. Purgarlo de todas las listas o tablas del sistema. Borrar su bloque de control de procesos.

Un proceso “suspendido” no puede proseguir hasta que otro proceso lo reanude. Reanudar (reactivar) un proceso implica reiniciarlo en el punto donde fue suspendido. La “destrucción” de un proceso puede o no significar la destrucción de los procesos hijos, según el Sistema Operativo. Generalmente se denomina “Tabla de Procesos” al conjunto de información de control sobre los distintos procesos.

2.3 Procesos ligeros (Hilos o hebras).

Un hilo de ejecución, es característica que permite a una aplicación realizar varias tareas a la vez (concurrentemente). Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situación de autenticación, etc. Esta técnica permite simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente. Figura 2-2 procesos ligeros.

Figura 2-2 Procesos ligeros

Los hilos de ejecución que comparten los mismos recursos, sumados a estos recursos, son en conjunto conocidos como un proceso. El hecho de que los hilos de ejecución de un mismo proceso compartan los recursos hace que cualquiera de estos hilos pueda modificar éstos. Cuando un hilo modifica un dato en la memoria, los otros hilos acceden a ese dato modificado inmediatamente.

36

Page 52: Libro de Texto. Sistemas Operativos

Lo que es propio de cada hilo es el contador de programa, la pila de ejecución y el estado de la CPU (incluyendo el valor de los registros). Ver figura 2-3.

Figura 2-3 Información compartida y no compartida de hilos de control

El proceso sigue en ejecución mientras al menos uno de sus hilos de ejecución siga activo. Cuando el proceso finaliza, todos sus hilos de ejecución también han terminado. Asimismo en el momento en el que todos los hilos de ejecución finalizan, el proceso no existe más y todos sus recursos son liberados.

Algunos lenguajes de programación tienen características de diseño expresamente creadas para permitir a los programadores lidiar con hilos de ejecución (como Java o Delphi). Otros (la mayoría) desconocen la existencia de hilos de ejecución y éstos deben ser creados mediante llamadas de biblioteca especiales que dependen del sistema operativo en el que estos lenguajes están siendo utilizados (como es el caso del C y del C++).

Un ejemplo de la utilización de hilos es tener un hilo atento a la interfaz gráfica (iconos, botones, ventanas), mientras otro hilo hace una larga operación internamente. De esta manera el programa responde de manera más ágil a la interacción con el usuario. También pueden ser utilizados por una aplicación servidora para dar servicio a múltiples clientes.

Diferencias entre hilos y procesos

Los hilos se distinguen de los tradicionales procesos en que los procesos son –generalmente independientes, llevan bastante información de estados, e interactúan sólo a través de mecanismos de comunicación dados por el sistema. Por otra parte, muchos hilos generalmente comparten otros recursos de forma directa. En muchos de los sistemas operativos que dan facilidades a los hilos, es más rápido cambiar de un hilo a otro dentro del mismo proceso, que cambiar de un proceso a otro. Este fenómeno se debe a que los hilos comparten datos y espacios de direcciones, mientras que los procesos, al ser independientes, no lo hacen. Al cambiar de un proceso a otro el sistema operativo (mediante el dispatcher) genera lo que se conoce como overhead, que es tiempo desperdiciado por el procesador para realizar un cambio de contexto (context switch), en este caso pasar del estado de ejecución (running) al estado de

37

Page 53: Libro de Texto. Sistemas Operativos

espera (waiting) y colocar el nuevo proceso en ejecución. En los hilos, como pertenecen a un mismo proceso, al realizar un cambio de hilo el tiempo perdido es casi despreciable. Figura 2-4 Tareas con uno y varios hilos.

Figura 2-4 Tareas con uno y varios hilos

Funcionalidad de los hilos

Al igual que los procesos, los hilos poseen un estado de ejecución y pueden sincronizarse entre ellos para evitar problemas de compartimiento de recursos. Generalmente, cada hilo tiene una tarea específica y determinada, como forma de aumentar la eficiencia del uso del procesador.

Estados de un hilo

Los principales estados de los hilos son: Ejecución, Activo y Bloqueado (Figura 2-5 [Tanenbaum, 2003]). No tiene sentido asociar estados de suspensión de hilos ya que es un concepto de proceso. En todo caso, si un proceso está expulsado de la memoria principal (ram), todos sus hilos deberán estarlo ya que todos comparten el espacio de direcciones del proceso.

Figura 2-5 Estado de los procesos ligeros

Cambio de estados

38

Page 54: Libro de Texto. Sistemas Operativos

Creación: Cuando se crea un proceso se crea un hilo para ese proceso. Luego, este hilo puede crear otros hilos dentro del mismo proceso, proporcionando un puntero de instrucción y los argumentos del nuevo hilo. El hilo tendrá su propio contexto y su propio espacio de pila, y pasara a la cola de listos.

Bloqueo: Cuando un hilo necesita esperar por un suceso, se bloquea (salvando sus registros de usuario, contador de programa y punteros de pila). Ahora el procesador podrá pasar a ejecutar otro hilo que esté en la cola de Listos mientras el anterior permanece bloqueado.

Desbloqueo: Cuando el suceso por el que el hilo se bloqueó se produce, el mismo pasa a la cola de Listos.

Terminación: Cuando un hilo finaliza se liberan tanto su contexto como sus pilas.

Ventajas de los hilos contra procesos

Si bien los hilos son generados a partir de la creación de un proceso, podemos decir que un proceso es un hilo de ejecución, conocido como Monohilo. Pero las ventajas de los hilos se dan cuando hablamos de Multihilos, que es cuando un proceso tiene múltiples hilos de ejecución los cuales realizan actividades distintas, que pueden o no ser cooperativas entre sí. Los beneficios de los hilos se derivan de las implicaciones de rendimiento.

1. Se tarda mucho menos tiempo en crear un hilo nuevo en un proceso existente que en crear un proceso. Algunas investigaciones llevan al resultado que esto es así en un factor de 10.

2. Se tarda mucho menos en terminar un hilo que un proceso, ya que cuando se elimina un proceso se debe eliminar el BCP del mismo, mientras que un hilo se elimina su contexto y pila.

3. Se tarda mucho menos tiempo en cambiar entre dos hilos de un mismo proceso

4. Los hilos aumentan la eficiencia de la comunicación entre programas en ejecución. En la mayoría de los sistemas en la comunicación entre procesos debe intervenir el núcleo para ofrecer protección de los recursos y realizar la comunicación misma. En cambio, entre hilos pueden comunicarse entre sí sin la invocación al núcleo. Por lo tanto, si hay una aplicación que debe implementarse como un conjunto de unidades de ejecución relacionadas, es más eficiente hacerlo con una colección de hilos que con una colección de procesos separados.

Sincronización de hilos

39

Page 55: Libro de Texto. Sistemas Operativos

Todos los hilos comparten el mismo espacio de direcciones y otros recursos como pueden ser archivos abiertos. Cualquier modificación de un recurso desde un hilo afecta al entorno del resto de los hilos del mismo proceso por lo tanto, es necesario sincronizar la actividad de los distintos hilos para que no interfieran unos con otros o corrompan estructuras de datos.Una ventaja de la programación multihilo es que los programas operan con mayor velocidad en sistemas de computadores con múltiples CPUs (sistemas multiprocesador o a través de grupo de máquinas) ya que los hilos del programa se prestan verdaderamente para la ejecución concurrente. En tal caso el programador necesita ser cuidadoso para evitar condiciones de carrera (problema que sucede cuando diferentes hilos o procesos alteran datos que otros también están usando), y otros comportamientos no intuitivos. Los hilos generalmente requieren reunirse para procesar los datos en el orden correcto. Es posible que los hilos requieran de operaciones atómicas para impedir que los datos comunes sean cambiados o leídos mientras estén siendo modificados, para lo que usualmente se utilizan los semáforos. El descuido de esto puede generar interbloqueo.

Formas de multihilos

Los sistemas operativos generalmente implementan hilos de dos maneras:

Multihilo apropiativo: permite al sistema operativo determinar cuándo debe haber un cambio de contexto. La desventaja de esto es que el sistema puede hacer un cambio de contexto en un momento inadecuado, causando un fenómeno conocido como inversión de prioridades y otros problemas.

Multihilo cooperativo: depende del mismo hilo abandonar el control cuando llega a un punto de detención, lo cual puede traer problemas cuando el hilo espera la disponibilidad de un recurso.

El soporte de hardware para multihilo se encuentra disponible desde hace relativamente poco tiempo. Esta característica fue introducida por Intel en el Pentium 4, bajo el nombre de HyperThreading.

Usos más comunes. Los usos mas comunes son en tecnologías SMPP (short message peer-to-peer protocol, es un protocolo estándar de telecomunicaciones pensado para el intercambio de mensajes) y SMS (Short message service) para la telecomunicaciones aquí hay muchísimos procesos corriendo a la vez y todos requiriendo de un servicio.

Trabajo interactivo y en segundo plano. Por ejemplo, en un programa de hoja de cálculo un hilo puede estar visualizando los menús y leer la entrada del usuario

40

Page 56: Libro de Texto. Sistemas Operativos

mientras que otro hilo ejecuta las órdenes y actualiza la hoja de cálculo. Esta medida suele aumentar la velocidad que se percibe en la aplicación, permitiendo que el programa pida la orden siguiente antes de terminar la anterior.

Procesamiento asíncrono. Los elementos asíncronos de un programa se pueden implementar como hilos. Un ejemplo es como los programas de procesamiento de texto guardan archivos temporales cuando se está trabajando en dicho programa. Se crea un hilo que tiene como función guardar una copia de respaldo mientras se continúa con la operación de escritura por el usuario sin interferir en la misma.

Aceleración de la ejecución. Se pueden ejecutar, por ejemplo, un lote mientras otro hilo lee el lote siguiente de un dispositivo.

Estructuración modular de los programas. Puede ser un mecanismo eficiente para un programa que ejecuta una gran variedad de actividades, teniendo las mismas bien separadas mediante a hilos que realizan cada una de ellas.

Implementaciones. Hay dos grandes categorías en la implementación de hilos:

Hilos a nivel de usuario. Hilos a nivel de Kernel.

También conocidos como ULT (User Level Thread) y KLT (Kernel Level Thread)

Hilos a nivel de usuario (ULT)

En una aplicación ULT pura, todo el trabajo de gestión de hilos lo realiza la aplicación y el núcleo o kernel no es consciente de la existencia de hilos. Es posible programar una aplicación como multihilo mediante una biblioteca de hilos. La misma contiene el código para crear y destruir hilos, intercambiar mensajes y datos entre hilos, para planificar la ejecución de hilos y para salvar y restaurar el contexto de los hilos.Todas las operaciones descritas se llevan a cabo en el espacio de usuario de un mismo proceso. El kernel continua planificando el proceso como una unidad y asignándole un único estado (Listo, bloqueado, etc.).

Ventajas de los ULT

El intercambio de los hilos no necesita los privilegios del modo kernel, porque todas las estructuras de datos están en el espacio de direcciones de usuario de un mismo proceso. Por lo tanto, el proceso no debe cambiar a modo kernel para gestionar hilos. Se evita la sobrecarga de cambio de modo y con esto el sobrecoste u overhead.

41

Page 57: Libro de Texto. Sistemas Operativos

Se puede realizar una planificación específica. Dependiendo de que aplicación sea, se puede decidir por una u otra planificación según sus ventajas.

Los ULT pueden ejecutar en cualquier sistema operativo. La biblioteca de hilos es un conjunto compartido.

Desventajas de los ULT

En la mayoría de los sistemas operativos las llamadas al sistema (System calls) son bloqueantes. Cuando un hilo realiza una llamada al sistema, se bloquea el mismo y también el resto de los hilos del proceso.

En una estrategia ULT pura, una aplicación multihilo no puede aprovechar las ventajas de los multiprocesadores. El núcleo asigna un solo proceso a un solo procesador, ya que como el núcleo no interviene, ve al conjunto de hilos como un solo proceso.

Una solución al bloqueo mediante a llamadas al sistema es usando la técnica de jacketing, que es convertir una llamada bloqueante en no bloqueante.

Hilos a nivel de núcleo (KLT)

En una aplicación KLT pura, todo el trabajo de gestión de hilos lo realiza el kernel. En el área de la aplicación no hay código de gestión de hilos, únicamente un API (interfaz de programas de aplicación) para la gestión de hilos en el núcleo. Windows 2000, Linux y OS/2 utilizan este método. Linux utiliza un método muy particular en que no hace diferencia entre procesos e hilos, para linux si varios procesos creados con la llamada al sistema "clone" comparten el mismo espacio de direcciones virtuales el sistema operativo los trata como hilos y lógicamente son manejados por el kernel.

Ventajas de los KLT

El kernel puede planificar simultáneamente múltiples hilos del mismo proceso en múltiples procesadores.

Si se bloquea un hilo, puede planificar otro del mismo proceso. Las propias funciones del kernel pueden ser multihilo

Desventajas de los KLT

El paso de control de un hilo a otro precisa de un cambio de modo.

42

Page 58: Libro de Texto. Sistemas Operativos

Combinaciones ULT y KLT

Algunos sistemas operativos ofrecen la combinación de ULT y KLT, como Solaris.La creación de hilos, así como la mayor parte de la planificación y sincronización de los hilos de una aplicación se realiza por completo en el espacio de usuario. Los múltiples ULT de una sola aplicación se asocian con varios KLT. El programador puede ajustar el número de KLT para cada aplicación y máquina para obtener el mejor resultado global.En un método combinado, los múltiples hilos de una aplicación se pueden ejecutar en paralelo en múltiples procesadores y las llamadas al sistema bloqueadoras no necesitan bloquear todo el proceso.

2.4 Concurrencia y secuenciabilidad.

La concurrencia comprende un gran número de cuestiones de diseño, incluyendo la comunicación entre procesos, comparición y competencia por los recursos, sincronización de la ejecución de varios procesos y asignación del tiempo de procesador a los procesos y es fundamental para que existan diseños como Multiprogramación, Multiproceso y Proceso distribuido. Los procesos son concurrentes si existen simultáneamente. Cuando dos o más procesos llegan al mismo tiempo a ejecutarse, se dice que se ha presentado una concurrencia de procesos. Es importante mencionar que para que dos o más procesos sean concurrentes, es necesario que tengan alguna relación entre ellos.La concurrencia puede presentarse en tres contextos diferentes: 1. Varias aplicaciones: La multiprogramación se creó para permitir que el tiempo de procesador de la máquina fuese compartido dinámicamente entre varios trabajos o aplicaciones activas.

2. Aplicaciones estructuradas: Como ampliación de los principios del diseño modular y la programación estructurada, algunas aplicaciones pueden implementarse eficazmente como un conjunto de procesos concurrentes.

3. Estructura del sistema operativo: Las mismas ventajas de estructuración son aplicables a los programadores de sistemas y se ha comprobado que algunos sistemas operativos están implementados como un conjunto de procesos. Existen tres modelos de computadora en los que se pueden ejecutar procesos concurrentes: a) Multiprogramación con un único procesador. El sistema operativo se encarga de ir repartiendo el tiempo del procesador entre los distintos procesos, intercalando la ejecución de los mismos para dar así una apariencia de ejecución simultánea.b) Multiprocesador. Es una maquina formada por un conjunto de procesadores que comparten memoria principal. En este tipo de arquitecturas, los procesos concurrentes no sólo pueden intercalar su ejecución sino también superponerla.

43

Page 59: Libro de Texto. Sistemas Operativos

c) Multicomputadora. Es una maquina de memoria distribuida, que está formada por una serie de computadoras. En este tipo de arquitecturas también es posible la ejecución simultánea de los procesos sobre los diferentes procesadores.

En general, la concurrencia será aparente siempre que el número de procesos sea mayor que el de procesadores disponibles, es decir, cuando haya más de un proceso por procesador. La concurrencia será real cuando haya un proceso por procesador. Aunque puede parecer que la intercalación y la superposición de la ejecución de procesos presentan formas de ejecución distintas, se verá que ambas pueden contemplase como ejemplos de procesos concurrentes

Existen diversas razones que motivan la ejecución de procesos concurrentes en un sistema:

• Facilita la programación de aplicaciones al permitir que éstas se estructuren como un conjunto de procesos que cooperan entre sí para alcanzar un objetivo común.

• Acelera los cálculos. Si se quiere que una tarea se ejecute con mayor rapidez, lo que se puede hacer es dividirla en procesos, cada uno de los cuales se ejecuta en paralelo con los demás.

• Posibilita el uso interactivo a múltiples usuarios que trabajan de forma simultánea.

• Permite un mejor aprovechamiento de los recursos, en especial de la CPU, ya que pueden aprovechar las fases de entrada-salida de unos procesos para realizar las fases de procesamiento de otros.

Así como existen las razones que motivan la ejecución de procesos concurrentes, también existen sus contras: • Inanición e interrupción de procesos• Ocurrencia de bloqueos• Que dos o más procesos requieran el mismo recurso (No apropiativo)

Tipos de procesos concurrentes.

Los procesos que ejecutan de forma concurrente en un sistema se pueden clasificar como:

Proceso independiente: Es aquel que ejecuta sin requerir la ayuda o cooperación de otros procesos. Un claro ejemplo de procesos independientes son los diferentes shells que se ejecutan de forma simultánea en un sistema.

44

Page 60: Libro de Texto. Sistemas Operativos

Procesos son cooperantes: Son aquellos que están diseñados para trabajar conjuntamente en alguna actividad, para lo que deben ser capaces de comunicarse e interactuar entre ellos.

En ambos tipos de procesos (independientes y cooperantes), puede producirse una serie de interacciones entre ellos y pueden ser de dos tipos:

• Interacciones motivadas porque los procesos comparten o compiten por el acceso a recursos físicos o lógicos. Por ejemplo, dos procesos independientes compiten por el acceso a disco o para modificar una base de datos.

• Interacción motivada porque los procesos se comunican y sincronizan entre sí para alcanzar un objetivo común, Por ejemplo, un compilador que tiene varios procesos que trabajan conjuntamente para obtener un solo archivo de salida.Elementos a gestionar y diseñar a causa de la concurrencia.

Se pueden enumerar los siguientes: 1. El sistema operativo debe ser capaz de seguir la pista de los distintos procesos activos. Esto lo hace por medio de PBC’s (Bloque de Control de Procesos)

2. El sistema operativo debe asignar y quitar los distintos recursos a cada proceso activo. Entre estos recursos se incluyen: • Tiempo de procesador: Es función de la planificación. • Memoria: La mayoría de los sistemas operativos emplean esquemas de memoria virtual.• Dispositivos de E/S:

3. El sistema operativo debe proteger los datos y los recursos físicos de cada proceso contra injerencias no intencionadas de otros procesos.

4. Los resultados de un proceso deben ser independientes de la velocidad relativa a la que se realiza la ejecución con respecto a otros procesos concurrentes.

2.4.1 Exclusión mutua de secciones criticas.

Como se menciono en la sección anterior, la concurrencia comprende un gran número de cuestiones de diseño, incluyendo la comunicación entre procesos, acción vital, ya que con frecuencia los procesos necesitan comunicarse con otros procesos.

Hay tres aspectos que se deben cuidar en la comunicación entre procesos. El primero, como puede un proceso pasar información a otro. El segundo tiene que ver con asegurarse de que dos o más procesos no se estorben al realizar actividades cruciales. El tercero tiene que ver con el ordenamiento correcto

45

Page 61: Libro de Texto. Sistemas Operativos

cuando existen dependencias: si el proceso A produce datos y el proceso B los imprime, B tendrá que esperar hasta que A haya producido algunos datos antes de comenzar a imprimir. Estos tres aspectos son los que se analizaran en esta sección.

Condiciones de competencia.

En algunos sistemas operativos, los procesos que trabajan juntos, comparten con frecuencia un espacio común para almacenamiento en cada uno puede leer o escribir este espacio compartido puede estar en la ram o un spooler (especie de almacén de datos). Por ejemplo: Cundo un proceso desea imprimir un archivo escribe el nombre del archivo o en un directorio spooler particular. Otro proceso llamado demonio de paginación verifica de forma periódica si existen archivos para imprimir y en caso afirmativo, los imprime para después eliminar los nombres de dicho directorio. Suponga que se tiene un directorio spooler con entradas infinitas 0, 1, 2, 3, ... cada entrada almacena el nombre de un archivo utilizando dos variables out e in. out apunta hacia el siguiente archivo a imprimir e in apunta a un archivo en el directorio. Estas variables están disponibles para todos los procesos en cierto instante, out del 0 al 3 están vacías (ya fueron impresas) y out del 4 al 6 están ocupadas (esperando turno para imprimir) en ese momento los procesos A y B colocan cada uno un archivo en la fila de impresión. Podría ocurrir que A lee out y almacena su valor (siete), en una variable llamada siguiente ranura libre. En ese instante ocurre una interrupción de valor y la CPU alterna al proceso B, B lee out, y obtiene siete, y actualiza in a 8 . Luego se pone a hacer otras cosas. Secciones Críticas Para evitar condiciones de competencia es necesario determinar una forma de prohibir que más de un proceso lea o escriba en los datos que se comparten, se requiere de una exclusión mutua como una forma de garantizar que si un proceso utiliza una variable o archivo compartido los demás procesos no podrán hacer lo mismo. La parte donde el programa en la que se tiene acceso a la memoria compartida se denomina región critica o sección critica. Si pudiéramos organizar las cosas de modo que dos procesos nunca estuvieran en sus regiones criticas al mismo tiempo, podríamos evitar condiciones de competencia.Aunque este requisito evita las condiciones de competencia, no basta para que procesos paralelos cooperen de forma correcta y eficiente empleado datos compartidos. Necesitamos que se cumplan cuatro condiciones para tener una buena solución (Tanenbaum, 2003):

1. Dos procesos no deben de encontrase al mismo tiempo dentro de sus secciones criticas. 2. No hacer hipótesis sobre la velocidad o número de la CPUs. 3. Ningún proceso en ejecución fuera de su sección critica puede bloquear otros procesos.

46

Page 62: Libro de Texto. Sistemas Operativos

4. Ningún proceso deberá tener que esperar de manera indefinida para entra a su sección critica.

Ejemplo de exclusión mutua empleando regiones criticas. Figura 2-6.

Exclusión Mutua en Espera Activa

Las soluciones con espera activa funcionan de la siguiente manera, cuando un proceso intenta ingresar a su región crítica, verifica si esta permitida la entrada. Si no, el proceso se queda esperando hasta obtener el permiso.

Desactivación de interrupciones

El método más simple para evitar las condiciones de competencia es hacer que cada proceso desactive todas sus interrupciones antes de entrar a su sección crítica y las active una vez que salio de la misma. Este modelo como se puede observar, tiene un gran problema y es que si se produce una falla mientras que el proceso esta en la región crítica no se puede salir de la misma y el sistema operativo no recuperaría el control.

Cerrojos de espera activa

Un mecanismo más general que la desactivación de interrupciones es la utilización de una variable cerrojo para proteger la sección crítica. El proceso que quiere entrar a la sección crítica consulta el cerrojo. Si está libre (cerrojo==0), el proceso lo echa (cerrojo=1) y entra a la sección crítica. Si está echado, ejecuta una espera activa consultando su valor hasta que esté libre. Cuando un proceso deja la sección crítica, libera el cerrojo (cerrojo=0). Este esquema tan sencillo presenta importantes problemas de implementación. Como se puede comprobar, la operación de consulta y modificación del cerrojo constituye a su vez una sección crítica que hay que resolver previamente; si no

Figura 2-6 Exclusión mutua empleando regiones críticas

47

Page 63: Libro de Texto. Sistemas Operativos

dos procesos podrían leer simultáneamente un valor cero y ambos entrar a la sección crítica, violando la condición exclusión mutua. Existen algoritmos bastante sofisticados que permiten una implementación software (Decker y Lamport, véase el siguiente ejemplo), pero los procesadores actuales integran mecanismos a nivel de lenguaje máquina que permiten implementar consulta y modificación atómica sobre variables en memoria.

Algoritmo de Dekker (1965)

Para 2 procesos {Pi, Pj}.

int pet[2]; /* inicialmente pet[i]=0 para todo i */

int turno;

Entrar_SC (para un proceso Pi):

pet[i]= 1;

while (pet[j])

if (turno==j) {

pet[i]= 0;

while (turno==j) NOP; /* espera activa */

pet[i]= 1;

}

Dejar_SC (para un proceso Pi):

turno= j;

pet[i]= 0;

a. Proporciona exclusión mutua: Pi sólo entra si pet[i]. Si también pet[j], entonces uno de los dos procesos espera por turno.

b. No interbloqueo y no inanición: Sólo un proceso quedará esperando por turno, y en este caso el otro estará en la SC, por lo que el primero entrará cuando el segundo cambie el turno al salir.

c. No garantiza un orden FIFO.

48

Page 64: Libro de Texto. Sistemas Operativos

Algoritmo de la panadería de Lamport (1974)

El algoritmo de la panadería toma su nombre de la costumbre de las panaderías y tiendas en general, donde las personas al entrar al local obtienen un número de turno (único) y lo utilizan para el dependiente les vaya atendiendo en orden de llegada. El cliente obtiene su número de turno usando una cinta de papel que ofrece boletos con números consecutivos.

Para n procesos {P0, P1, ..., Pn-1}.

int num[n]; /* inicialmente num[i]=0 para todo i */

int mirando[n]; /* inicialmente mirando[i]=0 para todo i */

Entrar_SC (para un proceso Pi):

mirando[i]= 1;

num[i]= maximo(num) + 1; /* coger numero */

mirando[i]= 0;

for (j=0; j<n; j++) {

while (mirando[j]) NOP; /* esperar */

while (num[j] && esta_antes(j, i)) NOP; /* esperar */

}

Dejar_SC (para un proceso Pi):

num[i]= 0;

a. Proporciona exclusión mutua: Si Pi está esperando para entrar y existe algún Pk que

b. ha mirado el número, entonces esta_antes(i, k). c. No interbloqueo y no inanición: Se sigue una disciplina FIFO. d. Dos procesos pueden haber cogido el mismo número. Entonces

esta_antes() debe resolver. Por ejemplo, si num[i]==num[j], si i<j entonces esta_antes(i, j). Nótese que i y j no pueden ser iguales.

Las instrucciones máquina de consulta y modificación atómica (read-modify-write) proporcionan acceso exclusivo a memoria en una operación atómica de consulta y modificación que bloquea el acceso al bus. El ejemplo más simple es la instrucción máquina Test&Set, que ejecuta atómicamente la secuencia:

49

Page 65: Libro de Texto. Sistemas Operativos

R <- cerrojo

cerrojo <- 1

Dejando en el registro R el valor previo de cerrojo. Representaremos esta instrucción como una función que devuelve el valor de cerrojo:

BOOL test_and_set(cerrojo)

El acceso a una sección crítica se implementa haciendo una espera activa (spin-lock) sobre el cerrojo, mediante primitivas de echar el cerrojo (lock) y liberar el cerrojo

(unlock):

lock (tipo_cerrojo cerrojo)

{

while (test_and_set(cerrojo)) NOP;4

}

unlock (tipo_cerrojo cerrojo)

{

cerrojo= 0;

}

Una sección crítica se protege de la siguiente forma:

lock(cerrojo);

/* Sección crítica */

unlock(cerrojo);

Los procesadores modernos cuentan con instrucciones máquina análogas a Test&Set que permiten implementar la espera activa más eficientemente, reduciendo la contención en el acceso al bus de memoria.

Algunos sistemas operativos utilizan cerrojos condicionales, proporcionando una primitiva de echar el cerrojo condicionalmente (cond_lock()) que, en vez de dejar

50

Page 66: Libro de Texto. Sistemas Operativos

al proceso esperando, devuelve un código de estado si el cerrojo está ocupado, lo que es útil para tratar de evitar interbloqueos, como se verá más adelante.

La espera activa es un mecanismo adecuado para multiprocesadores. En monoprocesadores, sin embargo, una espera activa por entrar a la sección crítica podría impedir, dependiendo de la política de planificación, que el proceso que ocupa la sección crítica acceda al procesador para liberarla, y en el mejor de los casos retardaría su entrada6. En cualquier caso, aún en multiprocesadores, es adecuado combinar el mecanismo de espera activa con una planificación que incremente la prioridad del proceso que ejecuta la sección crítica.

Variables de bloqueo

En éste caso se genera una variable la cual puede tener dos valores o bien 0 (no hay ningún proceso en su sección crítica) o bien 1 (indicando que la sección crítica está ocupada) entonces cada proceso antes de ingresar a la sección crítica verifica el estado de la variable de cerradura y en caso de que la misma este en 0, le cambia el valor e ingresa a la misma y en caso de que la misma sea 1 el proceso se queda verificando el estado de la misma hasta que el mismo sea 0.

El problema aquí se presenta si dos procesos verifican al mismo tiempo que la variable cerradura esta en 0 e ingresan a la región crítica.

Alternancia estricta

El algoritmo de alternancia estricta como su nombre lo indica alterna a los procesos que quieren ingresar a la región critica. El problema de ésta solución es que cuando un proceso (proceso 0) no esta en la sección crítica y es su turno de entrar, y no la hace porque esta ocupado fuera de la región critica, le quita la oportunidad de entrar a otro proceso (proceso 1) que esta listo para entrar a la región critica.

Esta situación viola la condición 3 de una buena solución: el proceso 1 esta siendo bloqueado por un proceso que no esta en su región critica.

Instrucción TSL

Esta solución requiere ayuda del hardware y es debido a que en general las computadoras diseñadas para tener más de un procesador tienen una instrucción

TSL RX,BLOQUEO

(TEST AND SET LOCK, probar y establecer bloqueo) que funciona de la siguiente manera: lee el contenido de la palabra de memoria bloqueo, lo coloca

51

Page 67: Libro de Texto. Sistemas Operativos

en la región RX y luego guarda un valor distinto de cero en la dirección de memoria bloqueo. Se garantiza que las operaciones de leer la palabra y escribir en ella son indivisibles: ningún otro procesador puede tener acceso a la palabra de memoria antes de que haya terminado de ejecutarse la instrucción. La CPU que ejecuta la instrucción TSL cierra el bus de memoria para impedir que las otras CPUs tengan acceso a la memoria antes de que termine.

2.4.2 Sincronización de procesos en S.C.

Los mecanismos de comunicación y sincronización son dinámicos. Es decir, cuando se necesita un mecanismo de este estilo, se crea, usa y destruye, de forma que no se establezca de forma definitiva ningún mecanismo de comunicación, ya que ellos podrían producir efectos indeseados. Es decir, la comunicación es algo puntual.

Los servicios básicos de comunicación son:

crear: el proceso solicita la creación del mecanismo.enviar o escribir: el proceso emisor envía información al proceso receptor. recibir o leer: el proceso receptor recibe información. destruir: el proceso solicita la destrucción del mecanismo de comunicación. La comunicación puede ser síncrona y asíncrona:

síncrona: los dos procesos han de ejecutar servicios de forma simultánea. El emisor ha de ejecutar el servicio enviar mientras el receptor ejecuta recibir. asíncrona: el emisor hace el envío y prosigue su ejecución. El SO ofrece un almacenamiento intermedio para guardar la información enviada, hasta que el receptor la solicite.

Figura 2-7 ejemplo de Sincronización Síncrona

Figura 2-7 Esquema de Sincronización Síncrona

52

Page 68: Libro de Texto. Sistemas Operativos

En un sistema operativo multiprogramado los procesos compiten por el acceso a los recursos compartidos o cooperan dentro de una misma aplicación para comunicar información. Ambas situaciones son tratadas por el sistema operativo mediante mecanismos de sincronización que permiten el acceso exclusivo de forma coordinada a los recursos y a los elementos de comunicación compartidos. Según el modelo de sistema operativo descrito anteriormente, basado en colas de procesos y transiciones de estados, los procesos abandonan la CPU para pasar a estado bloqueado cuando requieren el acceso a algún dispositivo, generalmente en una operación de E/S, pasando a estado preparado cuando la operación ha concluido y eventualmente volver a ejecución. La gestión de estos cambios de estado, es decir, los cambios de contexto, es un ejemplo de sección crítica de código dentro del sistema operativo que debe ser ejecutada por éste en exclusión mutua. Otros ejemplos de código que debe protegerse como sección crítica incluyen la programación de los dispositivos de E/S y el acceso a estructuras de datos y buffers compartidos.

Dentro del núcleo del sistema operativo, el espacio de direcciones es único, por lo que la comunicación se resuelve mediante el uso de variables de memoria compartida. Como contrapartida a la agilidad de este esquema, es necesario utilizar mecanismos explícitos de sincronización para garantizar acceso exclusivo a las variables compartidas. Si se definen buffers o colas compartidas a las que se proporciona acceso exclusivo, se pueden utilizar esquemas de comunicación más elaborados, como es el caso del productor-consumidor (mas adelante se analizara este caso). El esquema cliente-servidor es un caso particular del productor-consumidor donde los clientes producen peticiones que son consumidas por el servidor de un determinado recurso. Un sistema operativo con estructura cliente-servidor resulta atractivo por la claridad de su diseño. Cuando los procesos que se comunican mediante estos esquemas no comparten el espacio de direcciones, lo que sucede en particular en sistemas basados en micro núcleo, se requieren primitivas de comunicación por paso de mensajes (send y recive), que en la siguiente sección se explicará como funciona, que, al gestionar implícitamente la sincronización, simplifican la programación de la comunicación.

Para lograr una comunicación y sincronización eficientes de los procesos se requieren de mecanismos adecuados al diseño de los diferentes sistemas operativos., mismos que con anterioridad algunos de ellos ya se explicaron en una sección anterior: Instrucción TSL, variables de alternancia, etc. Los cuales son correctos pero tiene el defecto de que requieren espera activa. En esencia lo que estas soluciones hacen es lo siguiente: cuando un proceso quiere entrar en su región crítica, verifica si tal ingreso está permitido. Si no está permitido el proceso entra en un ciclo corto para esperar hasta que lo esté.Este enfoque no sólo desperdicia tiempo de CPU, sino que puede tener efectos inesperados.

53

Page 69: Libro de Texto. Sistemas Operativos

Ahora en esta sección analizaremos primitivas de comunicación entre procesos que se bloquean, en lugar de desperdiciar tiempo de CPU, cuando no se les permite entrar en su región crítica. Una de las más sencillas es el par sleep y wakeup. Sleep es una llamada al sistema que hace que el invocador se bloquee, es decir, queda suspendido hasta que otro proceso lo active. La llamada wakeup tiene un parámetro, el proceso por activar. De manera alternativa, tanto sleep como wakeup tiene un parámetro: una dirección de memoria que sirve para relacionar llamadas sleep como llamadas wakeup.

El problema productor-consumidor

Como ejemplo del uso de estas primitivas, que se bloquean en lugar de desperdiciar tiempo de CPU, consideremos el problema del productor-consumidor (también conocido como buffer limitado).

El problema del productor- consumidor consiste en la situación que de una parte se produce algún producto (datos en nuestro caso) que se posiciona en algún lugar (una cola en nuestro caso) para que sea consumido por otra parte. Como algoritmo obtenemos:

producer: consumer: forever forever produce(item) take(item) place(item) consume(item)Queremos garantizar que el consumidor no coja los datos más rápido que les está produciendo el productor. Más concreto:

1. el productor puede generar sus datos en cualquier momento 2. el consumidor puede coger un dato solamente cuando hay alguno 3. para el intercambio de datos se usa una cola a la cual ambos tienen

acceso, asi se garantiza el orden correcto 4. ningún dato no está consumido una vez siendo producido

Si la cola puede crecer a una longitud infinita (siendo el caso cuando el consumidor consume más lento que el productor produzca), basta con la siguiente solución:

producer: consumer: forever forever produce(item) itemsReady.wait() place(item) take(item) itemsReady.signal() consume(item)

donde itemsReady es un semáforo general que se ha inicializado al principio con el valor 0.

54

Page 70: Libro de Texto. Sistemas Operativos

El algoritmo es correcto que se ve con la siguiente prueba. Asumimos que el consumidor adelanta el productor. Entonces el número de wait()s tiene que ser más grande que el número de signals():

#waits > #signals ==> #signals - #waits < 0 ==> itemsReady < 0

y la última línea es una contradicción a la invariante del semáforo. Si queremos ampliar el problema introduciendo más productores y más consumidores que trabajan todos con la misma cola para asegurar que todos los datos estén consumidos lo más rápido posible por algún consumidor disponible tenemos que proteger el acceso a la cola con un semáforo binario (llamado mutex abajo):

producer: consumer: forever forever produce(item) itemsReady.wait() mutex.wait() mutex.wait() place(item) take(item) mutex.signal() mutex.signal() itemsReady.signal() consume(item)

Normalmente no se puede permitir que la cola crezca infinitamente, es decir, hay que evitar producción en exceso también. Como posible solución introducimos otro semáforo general (llamado spacesLeft) que cuenta cuantos espacios quedan libre en la cola. Se inicializa el semáforo con la longitud máxima permitida de la cola.

producer: consumer: forever forever spacesLeft.wait() itemsReady.wait() produce(item) mutex.wait() mutex.wait() take(item) place(item) mutex.signal() mutex.signal() consume(item) itemsReady.signal() spacesLeft.signal()

2.4.2.1 Mecanismo de semáforos.

Dijkstra dio en 1968 una solución al problema de la exclusión mutua con la introducción del concepto de semáforo binario. Está técnica permite resolver la mayoría de los problemas de sincronización entre procesos y forma parte del diseño de muchos sistemas operativos y de lenguajes de programación concurrentes.

55

Page 71: Libro de Texto. Sistemas Operativos

Un semáforo binario es un indicador (S) de condición que registra si un recurso está disponible o no. Un semáforo binario sólo puede tomar dos valores: 0 y 1. Si, para un semáforo binario, S = 1 entonces el recurso está disponible y la tarea lo puede utilizar; si S = 0 el recurso no está disponible y el proceso debe esperar.

Los semáforos se implementan con una cola de tareas o de condición a la cual se añaden los procesos que están en espera del recurso.

Sólo se permiten tres operaciones sobre un semáforo

- Inicializar

- Espera (wait)

- Señal (signal)

En algunos textos, se utilizan las notaciones P y V para las operaciones de espera y señal respectivamente, ya que ésta fue la notación empleada originalmente por Dijkstra para referirse a las operaciones. Así pues, un semáforo binario se puede definir como un tipo de datos especial que sólo puede tomar los valores 0 y 1, con una cola de tareas asociada y con sólo tres operaciones para actuar sobre él.

Las operaciones pueden describirse como sigue:

• inicializa (S: SemaforoBinario; v: integer)

Poner el valor del semáforo S al valor de v (0 o 1)

• espera (S)

if S = 1 then S := 0

else suspender la tarea que hace la llamada y ponerla

en la cola de tareas

• señal (S)

if la cola de tareas está vacía then S := 1

else reanudar la primera tarea de la cola de tareas

Las operaciones son procedimientos que se implementan como acciones indivisibles y por ello la comprobación y cambio de valor del indicador se efectúa

56

Page 72: Libro de Texto. Sistemas Operativos

de manera real como una sola operación, lo cual hay que tener presente a la hora de diseñar el planificador de tareas. En sistemas con un único procesador bastará simplemente con inhibir las interrupciones durante la ejecución de las operaciones del semáforo. En los sistemas multiprocesador, sin embargo, este método no resulta ya que las instrucciones de los procesadores se pueden entrelazar de cualquier forma. La solución está en utilizar instrucciones hardware especiales, si se dispone de ellas, o en introducir soluciones software como las vistas anteriormente, que ya indicamos, que servían tanto para sistemas uniprocesador como para sistemas multiprocesador.

La operación inicializa se debe llevar a cabo antes de que comience la ejecución concurrente de los procesos ya que su función exclusiva es dar un valor inicial al semáforo.

Un proceso que corre la operación espera y encuentra el semáforo a 1, lo pone a 0 y prosigue su ejecución. Si el semáforo está a 0 el proceso queda en estado de espera hasta que el semáforo se libera. Dicho estado se debe considerar como uno más de los posibles de un proceso. Esto es así debido a que un proceso en espera de un semáforo no está en ejecución ni listo para pasar a dicho estado puesto que no tiene la CPU ni puede pasar a tenerla mientras que no se lo indique el semáforo. Tampoco es válido el estado suspendido, ya que este estado está pensado para que lo utilicen llamadas al sistema operativo para suspender o reactivar un proceso que no tiene por qué tener una conexión con los semáforos. El diagrama de transición de estados de la figura se puede ampliar con un nuevo estado que denominamos de espera, figura 2-8.

Figura 2-8 Transiciones para el estado de espera

Cuando se ejecuta la operación señal puede haber varios procesos en la lista o cola, el proceso que la dejará para pasar al estado listo dependerá del esquema de gestión de la cola de tareas suspendidas que se haya implementado en el

57

Page 73: Libro de Texto. Sistemas Operativos

diseño del semáforo, por ejemplo: prioridades, FIFO, etc. Si no hay ningún proceso en espera del semáforo este se deja libre (S := 1) para el primero que lo requiera.

Modelo de Sincronización de Exclusión Mutua Con Semáforos

La exclusión mutua se realiza fácilmente utilizando semáforos. La operación de espera se usará como procedimiento de bloqueo antes de acceder a una sección crítica y la operación señal como procedimiento de desbloqueo. Se utilizarán tantos semáforos como clases de secciones críticas se establezcan.

El proceso P1 de la sección anterior ahora toma la forma:

process P1

begin

loop

espera (S) ;

Sección Crítica

señal (S) ;

Suspendido

Durmiente

Listo

Espera Ejecución

Espera

Señal

(* resto del proceso *)

end

end P1;

2.4.2.2 Mecanismo de monitores.

58

Page 74: Libro de Texto. Sistemas Operativos

Un monitor es una colección de procedimientos, variables y estructuras de datos que se agrupan en un tipo de modulo especia (Tanenbaum, 2003)l. Tienen una propiedad importante: solo un proceso puede estar activo en un monitor en un instante de tiempo.

Los monitores proveen un nuevo tipo de variables de condición con dos operaciones que operan sobre el (solo se usan dentro del procedimiento de el monitor).

Wait -> wait(a) : hace que el proceso que ejecuta la instrucción sea interrumpido y removido de la cola de ready hasta que otro proceso lo habilite ejecutando la instrucción signal( )con la misma variable de condición.

Signal -> signal(a) : Habilita la ejecución de algún proceso en espera por la ejecución de la instrucción wait con la misma variable de condición.

Los monitores son una construcción de lenguaje de programación, así que el compilador sabe que son especiales y puede manejar las llamadas a los procedimientos de monitor, de manera distinta de cómo maneja las otras llamadas a procedimientos. Por lo regular, cuando un proceso llama a un procedimiento de monitor, las primeras instrucciones de éste verifican si algún otro proceso esta activado dentro del monitor. Si ningún otro proceso lo está usando, el proceso invocador puede entrar.

El compilador debe implementar la exclusión mutua en los ingresos a un monitor, pero es posible utilizar un mutex o un semáforo binario. Puesto que es el compilador, no el programador, quien tramita la exclusión mutua, es mucho menos probable que algo salga mal. En todo caso, quien escribe el monitor no tiene que saber la manera en que el compilador maneja la exclusión mutua. Basta con saber que convirtiendo todas las regiones criticas en procedimientos de monitor, dos procesos nunca podrán ejecutar sus regiones criticas al mismo tiempo.

A continuación se presenta un bosquejo del problema del productor-consumidor con monitores, propuesto por el modelo de Hoare/Brinch Hansen.

condition lleno vacio;integer cuenta;procedure insertar(elem: integer);begin

if cuenta=N then wait(lleno)insertar_elem(elem);cuenta:=cuenta + 1;if cuenta=1 then signal(vacio)

59

Page 75: Libro de Texto. Sistemas Operativos

end;function quitar:integer;begin

if cuenta=0 then wait(vacio);quitar=quitar_elem;cuenta:=cuenta-1;if cuenta=N-1 then signal(lleno)

end;

cuenta:=0;

end monitor;

procedure productor;begin

while true dobegin

elem=producir_elem;productorConsumidor.insertar(elem)

end

end;

procedure consumidor;begin

while true dobegin

elem=ProductorConsumidor.quitar;consumir_elem(elem)

endend;

Transferencia de mensajes

Los mensajes proporcionan una solución al problema de la concurrencia de procesos que integra la sincronización y la comunicación entre ellos y resulta adecuado tanto para sistemas centralizados como distribuidos. Esto hace que se incluyan en prácticamente todos los sistemas operativos modernos y que en muchos de ellos se utilicen como base para todas las comunicaciones del sistema, tanto dentro del computador como en la comunicación entre computadores.

La comunicación mediante mensajes necesita siempre de un proceso emisor y de uno receptor así como de información que intercambiarse. Por ello,

60

Page 76: Libro de Texto. Sistemas Operativos

las operaciones básicas para comunicación mediante mensajes que proporciona todo sistema operativo son:

Enviar (mensaje) y recibir (mensaje). Las acciones de transmisión de información y de sincronización se ven como actividades inseparables.

La comunicación por mensajes requiere que se establezca un enlace entre el receptor y el emisor, la forma del cual puede variar grandemente de sistema a sistema. Aspectos importantes a tener en cuenta en los enlaces son: como y cuantos enlaces se pueden establecer entre los procesos, la capacidad de mensajes del enlace y tipo de los mensajes.

Su implementación varía dependiendo de tres aspectos:1- El modo de nombrar los procesos.2- El modelo de sincronización.3- Almacenamiento y estructura del mensaje.

Modos de nombrar los mensajes

El proceso de denominación de las tareas para la comunicación por mensajes se puede realizar de dos formas distintas: directa e indirectamente. En la comunicación directa ambos procesos, el que envía y el que recibe, nombran de forma explícita al proceso con el que se comunican. Las operaciones de enviar y recibir toman la forma:

enviar(Q, mensaje): envía un mensaje al proceso Qrecibir(P, mensaje): recibe un mensaje del proceso P

Este método de comunicación establece un enlace entre dos procesos que desean comunicar, proporcionando seguridad en el intercambio de mensajes, ya que cada proceso debe conocer la identidad de su pareja en la comunicación, pero, por lo mismo, no resulta muy adecuado para implementar rutinas de servicio de un sistema operativo.

En la comunicación indirecta los mensajes se envían y reciben a través de una entidad intermedia que recibe el nombre de buzón o puerto. Como su nombre indica, un buzón es un objeto en el que los procesos dejan mensajes y del cual pueden ser tomados por otros procesos. Ofrecen una mayor versatilidad que en el caso de nombramiento directo, ya que permiten comunicación de uno a uno, de uno a muchos, de muchos a uno y de muchos a muchos.

Cada buzón tiene un identificador que lo distingue. En este caso las operaciones básicas de comunicación toman la forma:

enviar (buzónA, mensaje): envía un mensaje al buzón Arecibir (buzónA, mensaje): recibe un mensaje del buzón A.El buzón establece un enlace que puede ser utilizado por más de dos

procesos y permite que la comunicación de un proceso con otro se pueda realizar mediante distintos buzones.

En el caso de que haya varios procesos que recogen información del mismo buzón se plantea el problema de quien debe recoger un mensaje. Se pueden dar distintas soluciones: permitir que un buzón sólo pueda ser compartido por dos

61

Page 77: Libro de Texto. Sistemas Operativos

procesos, permitir que cada vez sólo un proceso pueda ejecutar una operación de recibir y, por último, que el sistema identifique al receptor del mensaje.

Además de las operaciones básica mencionadas, los sistemas operativos suelen proporcionar operaciones adicionales como las de crear y eliminar buzones.

Modelos de sincronización

Las diferencias en los modelos usados para la sincronización de los procesos se debe a las distintas formas que puede adoptar la operación de envío del mensaje.

a) Síncrona. El proceso que envía sólo prosigue su tarea cuando el mensaje ha sido recibido.

b) Asíncrona. El proceso que envía un mensaje sigue su ejecución sin preocuparse de si el mensaje se recibe o no.

Invocación remota. El proceso que envía el mensaje sólo prosigue su ejecución cuando ha recibido una respuesta del receptor.

El método síncrono necesita de que ambos procesos, el emisor y el receptor, se "junten" para realizar una comunicación, por lo que se suele denominar encuentro( "rendezvous"). Si no se ha emitido una señal de recibir cuando se ejecuta la operación de enviar, el proceso emisor se suspende hasta que la ejecución de una operación de recibir le saca de ese estado. Cuando el proceso que envía el mensaje continúa sabe que su mensaje ha sido recibido. De este modo una pareja emisor-receptor no puede tener más de un mensaje pendiente en cada momento.

En el modelo asíncrono el sistema operativo se encarga de recoger el mensaje del emisor y almacenarlo en espera de que una operación de recibir lo recoja. Normalmente este tipo de comunicación tiene limitado la cantidad de memoria que puede utilizar una pareja en comunicación directa o un buzón en comunicación indirecta, para evitar así

que un uso descontrolado pudiera agotar la cantidad de almacenamiento temporal del sistema.

A la invocación remota también se le conoce como encuentro extendido, ya que el receptor puede realizar un número arbitrario de cómputos antes de enviar la respuesta. La operación de recibir, tanto en los métodos de nominación directa como indirecta, se suele implementar de modo que el proceso que ejecuta la operación toma un mensaje si este está presente y se suspende si no lo está. Sin embargo, este modo de funcionamiento plantea el problema de una espera indefinida en el caso de que un fallo impida que llegue un mensaje. Una solución consiste en proporcionar una operación de recibir sin bloqueo, que en algunos sistemas se denomina aceptar, de modo que si el mensaje está presente se devuelve, y si no lo está se devuelve un código de error. Otra solución más adecuada consiste en especificar en la sentencia de recibir un tiempo máximo de espera del mensaje. Si transcurre el tiempo especificado el sistema operativo desbloquea al proceso suspendido y le envía un mensaje o código de error indicando el agotamiento del tiempo de espera. Por ejemplo, en

62

Page 78: Libro de Texto. Sistemas Operativos

un sistema con nominación indirecta la operación de recibir puede tener la forma:

recibir (buzón, mensaje, tiempo_espera).Aunque la especificación del tiempo de espera se podría realizar también en

la operación de envío, resulta suficiente implementarla en la operación de recibir, por lo que es esto lo habitual en la mayoría de los sistemas operativos. Se pueden relacionar las distintas formas de enviar un mensaje. Dos operaciones asíncronas pueden constituir una relación síncrona si se envía una señal de reconocimiento. Así, si dos procesos, P y Q, se comunican de forma directa asíncrona se puede establecer la sincronización entre ellos mediante las operaciones:

Penviar(Q, mensaje)recibir(P, reconocimiento)Qrecibir(P, mensaje)enviar(P,reconocimiento)

El proceso P envía el mensaje a Q y después se suspende en espera de un mensaje de reconocimiento por parte de Q. Cuando el mensaje Q recibe el mensaje envía un mensaje de reconocimiento a P que hace que este pueda proseguir su ejecución.

La operación de envío con buzón también puede ser síncrona si se implementa de modo que el remitente se suspende hasta que el mensaje ha sido recibido.

La invocación remota se puede construir a partir de dos comunicaciones síncronas:

Penviar(Q, mensaje)recibir(P, respuesta)Qrecibir(P, mensaje).......construye respuesta.......enviar(P,respuesta)

Como una señal de envío asíncrona se puede utilizar para construir los otros dos modos se podría argumentar que este método es más flexible y es el que debería implementarse en todos los casos. Sin embargo adolece del inconveniente de que al no saberse cuando se recibe el mensaje la mayoría se programan para recibir un mensaje de reconocimiento, es decir, se hacen síncronas; también son más difíciles de depurar.

Almacenamiento y estructura del mensaje

63

Page 79: Libro de Texto. Sistemas Operativos

En la transferencia de información en un enlace se deben tener en cuenta la forma en la que esta se produce y la capacidad o número de mensajes que admite el enlace. A su vez, el intercambio de información se puede realizar de dos formas: por valor o por referencia.

En la transferencia por valor se realiza una copia del mensaje del espacio de direcciones del emisor al espacio de direcciones del receptor, mientras que en la transferencia por referencia se pasa un puntero al mensaje. La transferencia por valor tiene la ventaja de que mantiene el desacoplo en la información que maneja el emisor y el receptor, lo que proporciona mayor seguridad en la integridad de la información. Tiene el inconveniente del gasto de memoria y tiempo que implica la copia, que además se suelen ver incrementados por el uso de una memoria intermedia. Estos inconvenientes son justamente los convenientes de la transmisión por referencia que tiene como aspecto negativo el necesitar mecanismos adicionales de seguridad para compartir la información entre los procesos. El método de sincronización de la invocación remota utiliza necesariamente la transferencia por valor, mientras que los métodos síncrono y asíncrono pueden utilizar ambos modos.

Los sistemas operativos tienen asociado a cada enlace una cola en la cual mantienen los mensajes pendientes de ser recibidos. En la comunicación síncrona la cola se puede considerar que tiene una longitud nula ya que, como se ha indicado, los dos procesos deben encontrarse para proceder al intercambio del mensaje. En este caso se dice también que la transferencia se realiza sin utilización de una memoria intermedia. Sin embargo, en la comunicación asíncrona y en la invocación remota la implementación de la cola se realiza normalmente con una capacidad de mensajes finita mayor que cero, m.

Cuando el proceso emisor envía un mensaje, si la cola no está llena, se copia el mensaje y el proceso continúa su ejecución. Si la cola está llena el proceso se suspende hasta que queda espacio libre en la cola. Si el mensaje se pasa por referencia la cola guarda los punteros a los mensajes y los valores de esto si el paso es por valor. En algunos casos se considera que la capacidad de la cola es ilimitada, de manera que un proceso nunca se suspende cuando envía un mensaje.

Atendiendo a la estructura de los mensajes estos se pueden considerar divididos en tres tipos:

a) Longitud fijab) Longitud variablec) De tipo definidoEl primer tipo resulta en una implementación física que permite una

asignación sencilla y eficaz principalmente en las transferencias por valor. Por el contrario dificulta la tarea de la programación. Los mensajes de longitud variable son más adecuados en los sistemas donde la transferencia se realiza por punteros, ya que la longitud del mensaje puede formar parte de la propia información transmitida. La programación en este caso resulta más sencilla a expensas de una mayor dificultad en la implementación física.

64

Page 80: Libro de Texto. Sistemas Operativos

Por último, los mensajes con definición del tipo son adecuados en la comunicación con buzones. A cada buzón que utilice un proceso se le puede asignar el tipo de dato adecuado para dicho mensaje y sólo mensajes con esa estructura pueden ser enviados por ese enlace.

Por ejemplo, en un lenguaje de programación con declaración explícita de buzones se podría tener la sentencia

buzónA: mailbox[p] of dato; para declarar un buzón con el identificador buzónA con una capacidad de p elementos del tipo dato.

Ejemplo:

Este ejemplo muestra como se puede utilizar la comunicación por mensajes para implementar un semáforo binario. Se supone que se utiliza un buzón asíncrono con una cola ilimitada conocido tanto por el procedimiento de espera como por el de señal.

module semáforo;typemensaje = record .... ;constnulo = ....;procedure espera(var S:integer);vartemp: mensaje;beginrecibir(Sbuzon,temp);S := 0;end espera;procedure señal(var S: integer);beginenviar(Sbuzon,nulo);end señal;procedure inicializa(var S:integer; valor:boolean);beginif valor = 1 thenenviar(Sbuzon,nulo);end;S := valor;end inicializa;begincrear_buzon(Sbuzon);end {semaforo}

El buzón creado se identifica de forma exclusiva con el semáforo. El mensaje que se transmite es irrelevante ya que el paso de mensajes tiene la única misión de sincronizar tareas, por ello se utiliza un mensaje nulo. El

65

Page 81: Libro de Texto. Sistemas Operativos

semáforo está libre cuando hay un mensaje en la cola. En este caso, si un proceso ejecuta una señal de espera (lo que equivale a una operación de recibir) puede proseguir su ejecución. Cualquier otro proceso que ejecute una operación de espera no podrá leer ningún mensaje ya que la cola está vacía y, por lo tanto, se suspenderá hasta que es señalado (enviado un mensaje) por otro proceso. El comportamiento del primer proceso que emita la señal de espera dependerá de la inicialización que se haya hecho del semáforo.

Si se inicializa con un valor de 1 se envía un mensaje al buzón y el primer proceso en acceder al semáforo podrá leer el mensaje y pondrá, por lo tanto, al semáforo en ocupado. Si se inicializa a 0, el buzón esta inicialmente vacío y el semáforo aparece como ocupado, luego un proceso que ejecute la operación de espera se suspende hasta que se ejecute una operación de señal por otro proceso.

Para que el semáforo pueda funcionar es necesario suponer que sólo hay un mensaje circulando a la vez y que este sólo puede ser conseguido por uno de los procesos que están en la espera.

2.4.3 Interbloqueo (DeadLock).

Cuando un proceso de un sistema de multiprogramación espera en balde a que se presente un evento específico, se dice que se encuentra en un estado de interbloqueo o bloqueo mutuo. Los procesos que pueden encontrase en esta situación pueden ser uno o varios.

En los sistemas de multiprogramación, compartir recursos es uno de los principales objetivos del sistema operativo. Cuando se comparten recursos entre una población de usuarios o procesos, cada uno de los cuales mantiene un control exclusivo sobre ciertos recursos asignados a él, es posible que se produzcan bloqueos mutuos que impedirán la terminación de algunos de los procesos del sistema.

Todos los interbloqueos suponen demandas contradictorias de recursos por parte de dos o más procesos. La figura 2-9 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.

66

Page 82: Libro de Texto. Sistemas Operativos

Figura 2-9 Procesos compitiendo por recursos

En éste tema se analizará el problema del interbloqueo y las distintas alternativas de solución que se pueden adoptar clasificadas en las siguientes cuatro áreas : prevención, evitación, detección y recuperación del bloqueo mutuo. Para cada una de las estrategias adoptadas, se analizará el equilibrio entre la sobrecarga debida a los mecanismos de corrección del interbloqueo y los beneficios que reportan. En algunos casos es excesivo el precio (gasto extra) que hay que pagar para conseguir a toda costa que no se produzcan interbloqueos. Sin embargo, en algunos casos, como en los sistemas de tiempo real, no hay más alternativa que pagar el precio, ya que puede resultar catastrófico permitir la posibilidad de un bloqueo mutuo.

Un problema afín: el 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 el interbloqueo.

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 de forma indefinida un recurso porque siguen llegando otros procesos con mayor prioridad. 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

67

Page 83: Libro de Texto. Sistemas Operativos

espera (técnica de envejecimiento). En algún momento la prioridad de ése proceso superará la prioridad de los entrantes y el proceso en espera será atendido.

Casos de Interbloqueos

El caso más simple de interbloqueo sería el de un sólo proceso que espera la ocurrencia de un evento y, sin embargo, el sistema no incluye la posibilidad de señalar dicha ocurrencia. Es muy difícil detectar los bloqueos mutuos de esta naturaleza. La mayor parte de los bloqueos mutuos implican una competencia entre varios procesos por varios recursos.

Holt (1972) utilizó grafos dirigidos para representar situaciones de interbloqueo. Estos grafos tienen dos tipos de nodos : procesos, que se representan con círculos, y recursos, representados por cuadrados. Si in proceso está utilizando un recurso, previamente solicitado y concedido, se traza un arco desde el nodo del recurso (cuadrado) hasta el proceso (círculo). En la figura 2-10, el recurso R está en ese momento asignado al proceso A. En b), el proceso B está solicitando el recurso s. Por último en c) se representa un situación de interbloqueo : el proceso C está a la espera del recurso T, que está asignado al proceso D. El proceso D no ha dejado T, porque está esperando a que quede libre el recurso U, que, a su vez, está siendo utilizado por C. Ambos esperarán indefinidamente.

Figura 2-10 Grafos de asignación de recursos

  El siguiente ejemplo servirá para ilustrar el empleo de grafos de recursos. Supongamos que tenemos tres procesos, A, B y C, y tres recursos, R, S, y T. La figura 2-11 representa las secuencias de petición y liberación que realizan los tres procesos. El sistema operativo tiene en todo momento completa libertad para ejecutar cualquiera de los procesos que no estén bloqueados, así que, por ejemplo, podría decidirse a ejecutar A hasta que éste terminara su trabajo, después B hasta que acabe y, finalmente C.

Este secuenciamiento no produce interbloqueo, ( ya que no se compite por los recursos), pero suprime completamente el paralelismo. Además de pedir y

68

Page 84: Libro de Texto. Sistemas Operativos

liberar recursos, los procesos también realizan E/S y procesamiento de datos. Si se ejecutan uno tras otro, se elimina completamente la posibilidad de que, mientras uno de ellos está esperando que acabe una E/S, otro pueda utilizar el procesador.

Supongamos, sin embargo, que los procesos realizan tanto E/S como procesamiento de datos, de forma que la planificación por turno rotatorio es la más adecuada. En este caso, la secuencia de petición de recursos podría ser la representada en la figura 2-10 (d). Si las seis peticiones se llevan a cabo en ese orden, se producirían los seis grafos de los casos (e)-(j). Después de la petición 4, A está bloqueado en espera de captar S, como se muestra en (h). Los procesos B y C se bloquean en las dos etapas siguientes, lo que conduce finalmente a un bucle cerrado y al correspondiente interbloqueo representado en (j).

 

  

69

Page 85: Libro de Texto. Sistemas Operativos

Figura 2-11 Ejemplo de Interbloqueo y como evitarlo.

El sistema operativo no está obligado a ejecutar los procesos en ningún orden en particular. En concreto, si la concesión de un recurso a un proceso determinado puede provocar interbloqueo, el sistema operativo es muy libre de

70

Page 86: Libro de Texto. Sistemas Operativos

suspender al proceso y no atender su petición hasta que esté seguro de que esto no conduce a una situación problemática. En la figura 5.3, por ejemplo, si el sistema operativo supiera que se avecinaba un interbloqueo, podría decidir suspender al proceso B antes de concederle el recurso S. La ejecución sólo de los procesos A y C produciría las secuencias de petición y liberación de la figura 5.3 (k), en lugar de las de la figura 5.3 (d). Esta secuencia de ejecución produce los grafos de recursos (l)-(q), y no produce interbloqueo.

Después de la etapa (q), no hay ningún problema en conceder S a B, ya que A ha terminado y C tiene todo lo que necesita. Aunque B se bloqueara al solicitar T, no se produciría interbloqueo; B simplemente esperaría hasta que terminara C.

Condiciones Necesarias para Producir un Interbloqueo.

Coffman, Elphick y Shoshani establecen que deben darse las siguientes cuatro condiciones necesarias para que ocurra un bloqueo mutuo.

 Condición de exclusión mutua : los procesos exigen un control exclusivo de los recursos que necesitan.

 Condición de espera : los procesos mantienen la posesión de los recursos ya asignados a ellos mientras esperan recursos adicionales.

 Condición de no apropiación : los recursos no pueden arrebatarse a los procesos a los cuales están asignados hasta que termine su utilización.

 Condición de espera circular : existe una cadena circular de procesos en la que cada proceso tiene uno o más recursos que son requeridos por el siguiente proceso en la cadena.

Como dichas condiciones son necesarias para que se presente un interbloqueo, la existencia de un bloqueo mutuo implica que se han dado todas y cada una de las cuatro condiciones. Como se verá más adelante, tener en mente semejante observación será de gran ayuda para desarrollar esquemas que eviten los interbloqueos.

Estrategias para Resolver Interbloqueos.

Los resultados de la investigación sobre el bloqueo mutuo han sido satisfactorios en cuanto a que se han encontrado métodos limpios y rápidos para manejar la mayoría de los problemas más comunes. Existen cuatro áreas de interés relacionadas con los interbloqueos que pueden resumirse como prevención, técnicas para evitarlos, detección y recuperación de los mismos.

71

Page 87: Libro de Texto. Sistemas Operativos

En la prevención del interbloqueo interesa ajustar el sistema para eliminar toda posibilidad de que ocurra un bloqueo mutuo. La prevención suele funcionar pero sus métodos ocasionan, en general, un aprovechamiento pobre de los recursos. No obstante, estos métodos se utilizan con frecuencia.

Las técnicas que tienen como objetivo evitar el interbloqueo imponen condiciones menos atractivas que en la prevención, para tratar de obtener un aprovechamiento de los recursos. No elimina como las técnicas de prevención todas las posibilidades de que se produzca un bloqueo mutuo, pero se esquiva cuanto está a punto de suceder (algoritmo del banquero de Dijkstra).

Los métodos de detección del interbloqueo es utilizan en sistemas que permiten la ocurrencia de los mismos, ya sea de manera voluntaria o involuntaria. Su objetivo es determinar si ha ocurrido un bloqueo mutuo y saber exactamente cuáles son los procesos y recursos implicados en él.

Los métodos de recuperación están íntimamente ligados a los de detección. Sirven para eliminar los interbloqueos detectados en un sistema para poder seguir trabajando y para que los procesos implicados puedan terminar su ejecución y liberen sus recursos. La recuperación es un problema complejo, en el mejor de los casos, los sistemas se recuperan de un bloqueo mutuo eliminando completamente uno o varios de los procesos implicados. Después, se inician de nuevo los procesos eliminados, perdiéndose la mayor parte o todo el trabajo previo realizado por el proceso.

Desentenderse. El Algoritmo de la Avestruz

La estrategia más sencilla es el algoritmo del avestruz : esconder la cabeza bajo tierra y pretender que el problema no existe. La gente reacciona a esta estrategia de distintos modos según su formación. Los matemáticos consideran que es inaceptable y argumentan que los interbloqueos se deben evitar a toda costa. Los ingenieros se interrogan sobre la frecuencia del problema, la frecuencia con el que el sistema se para por otras causas y la importancia de los interbloqueos. Si éstos se presentan de una vez cada cinco años, y los sistemas se paran una vez al mes por errores en el hardware, en el compilador o en el sistema operativo, a casi ningún ingeniero le gustaría tener que sufrir una degradación seria de las prestaciones del sistema para garantizar la eliminación de los interbloqueos.

Por ejemplo, Unix pude sufrir interbloqueos que ni siquiera se detectan, y que, por supuesto, no se eliminan automáticamente. El número total de procesos en el sistema viene determinado por el número de posiciones de la tabla de procesos, que, en definitiva, constituye un recurso limitado. Supongamos ahora que un sistema Unix con 100 posiciones en la tabla de procesos tiene ejecutándose diez programas, cada uno de los cuales ha de crear 12 subprocesos. Después de que cada proceso haya creado otros 9, los 10

72

Page 88: Libro de Texto. Sistemas Operativos

procesos originales y los 90 nuevos llenarán por completo la tabla. Los 10 procesos originales se encontrarán ahora en un bucle infinito intentando crear un nuevo proceso sin poder : se ha producido un interbloqueo. Otros ejemplos de recursos que suelen ser limitados son : el número máximo de ficheros que pueden estar abiertos está limitado, el área en el disco para intercambio con memoria principal. En realidad, casi todas las tablas del sistema operativo representan recursos limitados, ¿deberíamos, por tanto, limitar estos recursos para no producir un interbloqueo?

La estrategia UNIX es simplemente desentenderse del problema, suponiendo que la mayoría de los usuarios preferirán un interbloqueo ocasional antes que la imposición de que cada usuario pueda crear un solo proceso, abrir un solo fichero y usar sólo una unidad de lo que sea. Veremos a continuación que se puede adoptar alguna estrategia adecuada que nos permitirá prevenir, evitar o detectar y recuperar situaciones de interbloqueo.

2.4.3.1 Prevención.

La estrategia empleada con más frecuencia por los diseñadores para tratar el bloqueo mutuo es la prevención. En esta sección se examinan los métodos de prevención, junto con los efectos que tienen sobre los usuarios y los sistemas, sobre todo desde la perspectiva del rendimiento.

Havender (68) llegó a la conclusión de que si falta alguna de las cuatro condiciones necesarias no puede haber un interbloqueo. Este autor sugiere las siguientes estrategias para negar varias de esas condiciones :

 Cada proceso deberá pedir todos sus recursos al mismo tiempo y no podrá seguir la ejecución hasta haberlos recibido todos.

 Si a un proceso que tiene recursos se le niegan los demás, ese proceso deberá liberar sus recursos y, en caso necesario, pedirlos de nuevo junto con los recursos adicionales.

 Se impondrá un ordenamiento lineal de los tipos de recursos en todos los procesos ; es decir, si a un proceso le han sido asignados recursos de un tipo específico, en lo sucesivo sólo podrá pedir aquellos recursos que siguen en el ordenamiento.

Como vemos Havender presenta tres estrategias y no cuatro. Cada una de ellas, está diseñada para negar una de las condiciones necesarias. La primera de estas condiciones, esto es, que los procesos exijan el uso exclusivo de los recursos que requieren, es una condición que no es deseable impedir, porque específicamente queremos permitir la existencia de recursos no compartibles o dedicados.

73

Page 89: Libro de Texto. Sistemas Operativos

Negación de la condición de espera

La primera de las estrategias requiere que los recursos que necesita un proceso sean pedidos de una sola vez. El sistema debe proporcionarlos según el principio de todo o nada. Si está disponible el conjunto de los recursos que necesita un proceso, entonces el sistema puede asignarle todos los recursos y éste seguir su ejecución. Si no está disponible alguno de ellos, el proceso debe esperar. Mientras espera no puede tener ningún recurso. Con esto se elimina la condición de espera y no puede ocurrir un interbloqueo. Todo esto suena bien, pero puede llevar a un grave desperdicio de recursos. Supongamos que un proceso necesita diez unidades de un determinado recurso para su ejecución. Como debe solicitarlas todas antes de comenzar, los mantendrá en su poder durante toda su ejecución. Pudiera suceder, que el programa únicamente utilice estos recursos al principio de su ejecución, por tanto, los recursos están ociosos el resto del tiempo.

Dividir el programa en varios pasos que se ejecuten de manera relativamente independiente es una técnica empleada con frecuencia para conseguir una mejor utilización de los recursos en estas circunstancias. La asignación de recursos se controla por etapas. Esta solución reduce el desperdicio pero implica mucho trabajo extra tanto en el diseño de las aplicaciones como en al ejecución. Por otro lado, esta estrategia puede provocar un aplazamiento indefinido, pues los recursos requeridos pueden no estar disponibles todos al tiempo. El sistema podría, entonces, permitir que se fueran acumulando recursos hasta conseguir todos los que necesita un proceso. Pero mientras se acumulan no se pueden asignar a otros procesos y volvemos a infrautilizarlos.

Negación de la condición de no apropiación

La segunda estrategia de Havender consiste en liberar los recursos que un proceso tiene asignados cuando se le niegan peticiones de recursos adicionales. De esta forma, se anula la condición de no apropiación. Los recursos se pueden quitar al proceso que los tiene antes de que termine su ejecución.

En este caso también existe un costo excesivo. Cuando un proceso libera recursos puede perder todo el trabajo realizado hasta ese momento. El costo puede parecer muy alto, pero la pregunta es : ¿con qué frecuencia ha de pagarse ese precio ? Si ocurre de tarde en tarde, entonces éste parece ser un buen método para prevenir el interbloqueo. Si, por el contrario, es muy frecuente, entonces el costo es sustancial y sus efectos demasiado perjudiciales (por ejemplo, para procesos de alta prioridad o plazo fijo).

Esta estrategia también adolece de aplazamiento indefinido. Un proceso puede aplazarse continuamente mientras pide y libera muchas veces los mismo recursos. Si esto ocurre, el sistema puede verse obligado a eliminar el proceso para que otros puedan ejecutarse.

74

Page 90: Libro de Texto. Sistemas Operativos

Negación de la condición de espera circular

La tercera estrategia de Havender anula la posibilidad de un espera circular. Como todos los recursos tienen una numeración única y como los procesos deben pedir los recursos en un orden lineal ascendente, es imposible que se presente una espera circular (figura 2-12). Esta estrategia presenta las siguientes dificultades :

 Los recursos deben pedirse en un orden ascendente por número de recursos. El número de recurso es asignado por la instalación y debe tener un tiempo de vida largo (meses o años) . Si se agregan nuevos tipos de recursos, puede ser necesario reescribir los programas y los sistemas.

 Lógicamente, cuando se asignan los números de recursos, éstos deben reflejar el orden normal en que los usan la mayoría de las tareas. Pero los procesos que necesiten los recursos en un orden diferente que el previsto por el sistema, los deberán adquirir y conservar, quizá durante tiempo antes de utilizarlos realmente, lo que significa un desperdicio considerable.

 Una de las metas más importantes de los sistemas operativos actuales es crear ambientes amables con el usuario. Los usuarios deben ser capaces de desarrollar sus aplicaciones sin tener en cuenta molestas restricciones de hardware y software. El ordenamiento lineal impide al usuario escribir sus códigos libremente.

Figura 2-12 Ordenación lineal de Harvender para prevenir el interbloqueo

75

Page 91: Libro de Texto. Sistemas Operativos

Evitación de Interbloqueos

Aún presentándose las condiciones para un interbloqueo, todavía es posible evitarlo mediante una asignación cuidadosa de los recursos. Tal vez el algoritmo más famoso para evitar el interbloqueo sea el algoritmo del banquero de Dijkstra (73), cuyo interesante nombre se debe a que atañe a un banquero que otorga préstamos y recibe pagos a partir de una determinada fuente de capital.

Algoritmo del Banquero

En principio, estudiaremos este algoritmo suponiendo que todos los recursos del mismo tipo. Considérese la asignación de una cantidad t, de unidades de cintas idénticas.

Un sistema operativo comparte un número fijo, t, de unidades de cinta entre un número fijo de, p, de procesos. Cada proceso especifica por adelantado el número máximo de unidades de cinta que necesitará durante su ejecución. El sistema operativo aceptará la petición de un usuario si la necesidad máxima de ese proceso no es mayor que t. Un proceso puede obtener o liberar unidades de cinta una a una. Algunas veces un usuario puede verse obligado a esperar para obtener una unidad adicional, pero el sistema operativo garantiza una espera finita. El número real de unidades asignadas a un proceso nunca será superior a la necesidad máxima declarada por ese usuario. Si el sistema operativo es capaz de satisfacer la necesidad máxima del proceso, entonces éste debe garantizar al sistema operativo que las unidades de cinta serán utilizadas y liberadas en un tiempo finito.

Se dice que el estado del sistema es seguro si el sistema operativo puede garantizar que todos los procesos terminan en un tiempo finito. En otro caso, el sistema está en un estado inseguro.

Sea préstamo (i) la representación del préstamo actual de unidades de cinta para el proceso i. Sea máx(i) la necesidad máxima de cintas de un proceso y, por último, sea petición (i) la petición actual del usuario, que es igual a su necesidad máxima menos el préstamo actual. Por ejemplo, el proceso 7 tiene una necesidad máxima de 6 unidades y un préstamo actual de 5, entonces tiene

   petición(7) = máx(7) - préstamo(7) = 6 - 5 = 2

El sistema operativo controla t unidades de cinta. Sea a el número de unidades de cinta todavía disponibles para asignar. Entonces a es igual a t menos la suma de los préstamos de los usuarios.

El algoritmo del banquero permite la asignación de unidades de cinta a los usuarios solamente cuando la asignación conduzca a estados seguros, y no a estados inseguros. Un estado seguro es una situación tal en la que todos los

76

Page 92: Libro de Texto. Sistemas Operativos

procesos son capaces de terminar en algún momento. Un estado inseguro es aquel en el cual puede presentarse un bloqueo mutuo.

Ejemplo de estado seguro

Supóngase que un sistema tiene doce unidades de cinta y tres procesos que las comparten.

La tabla anterior representa un estado seguro porque el proceso 2 tiene un préstamo de 4 unidades y necesita como máximo 6, o sea, 2 más. El sistema tiene 12 de las cuales 10 están en uso y mantiene 2 disponibles. Si las que están disponible se asignan al proceso 2, cubriendo su demanda máxima, este proceso podrá terminar. Al acabar, devolverá todos los recursos, 6 unidades de cinta, y el sistema podrá asignarlas al proceso 1 y al 3. De esta forma, la clave de un estado seguro es que exista al menos una forma en la que terminen todos los procesos.

Ejemplo de estado inseguro

 

Ahora 11 de las 12 unidades de cinta están asignadas y solamente hay una disponible. En este momento, no se puede garantizar que terminen los tres procesos. Si el proceso 1 pide y obtiene la última unidad de cinta y los tres vuelven a solicitar una unidad de cinta más se produciría un bloqueo triple.

Es importante señalar, que un estado inseguro no implica la existencia, ni siquiera eventual, de un interbloqueo. Lo que sí implica un estado inseguro es la posibilidad de que ocurra por una desafortunada secuencia de eventos.

77

Page 93: Libro de Texto. Sistemas Operativos

Ejemplo de transición de estado seguro a estado inseguro

Saber que un estado es seguro no implica que serán seguros todos los estados futuros. La política de asignación de recursos debe considerar cuidadosamente todas las peticiones antes de satisfacerlas. Por ejemplo supongamos la situación que se muestra en la siguiente tabla.

Ahora supóngase que el proceso 3 pide un recurso más. Si el sistema satisface esta petición, el nuevo estado será el que se muestra en la tabla de abajo.

 

Según vemos, aunque, en principio el sistema no estaba bloqueado, ha pasado de un estado seguro a uno inseguro. La última de las tablas caracteriza un sistema en el cual no puede garantizarse la terminación de todos los procesos. Solamente hay un recurso disponible, pero deben estarlo al menos dos para asegurar que el proceso 2 o el 3 puedan terminar, devolver sus recursos al sistema y permitir que los otros procesos acaben.

Algoritmo del banquero para múltiples recursos

Figura 2-13 Algoritmo del banquero para múltiples recursos

78

Page 94: Libro de Texto. Sistemas Operativos

 La figura 2-13 representa dos matrices. La de la izquierda muestra el número de recursos asignados en ese instante (préstamo actual) a cada uno de los cinco procesos. En la derecha aparece el número de recursos que todavía necesita cada proceso para llevar a cabo su función (petición). Al igual que el caso de un único recurso, los procesos deben comunicar sus necesidades máximas antes de empezar a ejecutarse, de forma que en todo momento el sistema pueda calcular la matriz de la derecha.

Para describir los recursos existentes en el sistema, los que están en posesión y los que están disponibles, emplearemos tres vectores como los siguientes : E =(6342), P=(5322) y D=(1020). E indica que el sistema tiene 6 unidades de cinta, 3 trazadores, 4 impresoras y 2 cdrom. De ellos se están utilizando 5 unidades de cinta, tres trazadores gráficos, dos impresoras y dos cdrom. Esto se puede deducir sin más que sumar las cuatro columnas de recursos en préstamo de la matriz izquierda. El vector de recursos disponibles es simplemente la diferencia ente lo que el sistema tiene y lo que está usando en ese momento.

Ahora estamos en condiciones de describir en qué consiste el algoritmo de comprobación de estado seguro :

  1.-Buscar una fila, F, cuyas necesidades de recursos sean menores o iguales a D. Si no existe tal fila, el sistema puede interbloquearse, ya que ningún proceso puede ejecutarse hasta el final.

  2.-Suponer que el proceso de la fila seleccionada solicita todos los recursos que necesita, y termina. Marcar el proceso como terminado y añadir sus recursos al vector D.

  3.-Repetir las etapas 1 y 2 hasta que se vayan marcando todos los procesos como terminados (en cuyo caso el estado inicial era seguro) o hasta que se llegue a una situación de interbloqueo (en cuyo caso no lo era).

En el caso de que se pueda seleccionar más de un proceso en el paso 1, la elección sería indiferente: en cualquier caso, el conjunto de recursos disponibles aumenta o, en el peor de los casos, se queda igual.

Volviendo al ejemplo de la figura 5.5 . El estado actual es seguro. Supongamos que el proceso B solicita la impresora. Dado que el estado resultante es todavía seguro, esta petición puede concederse (el proceso D puede terminar, seguido por los procesos A o E y a continuación el resto).

Imaginemos ahora que, después de que B obtiene una de las dos impresoras restantes, E solicita la última impresora. Si se le concede esta petición, el vector de recursos disponibles se reduciría a (1 0 0 0), situación que produce interbloqueo. Por lo tanto, la petición de E debe posponerse de momento.

79

Page 95: Libro de Texto. Sistemas Operativos

Ahora debe estar claro cómo opera el algoritmo del banquero de Dijkstra cuando asigna recursos. Están permitidas las condiciones de espera circular, espera y no apropiación, pero los procesos sí exigen el uso exclusivo de los recursos que requieren. Los procesos pueden conservar recursos mientras piden y esperan recursos adicionales y los recursos no pueden arrebatarse a los procesos que los tienen. Los procesos facilitan el trabajo al sistema pidiendo un solo recurso a la vez. El sistema puede satisfacer o rechazar cada petición. Si una petición es rechazada, el proceso conserva los recursos que ya tiene asignados y espera un tiempo finito a que se satisfaga la petición. El sistema sólo satisface peticiones que llevan a estados seguros. Una petición que condujese a un estado inseguro se rechazaría repetidamente hasta que pueda quedar satisfecha. Como el sistema se mantiene en un estado seguro, tarde o temprano (en un tiempo finito) todas las peticiones podrán ser atendidas y los procesos terminarán.

 Defectos del algoritmo del banquero

El algoritmo del banquero es interesante porque ofrece una forma de asignar los recursos que evita el interbloqueo. Permite ejecutar procesos que tendrían que esperar seguramente con alguna de las estrategias de prevención. Sin embargo, tiene varios defectos importantes :

 El algoritmo requiere un número fijo de recursos asignables. Como los recursos a menudo requieren servicio, ya sea por algún fallo o por mantenimiento preventivo, no se puede contar con que será siempre constante.

 El algoritmo requiere una población de usuarios constantes. En los sistemas multiprogramables y más en los de tiempo compartido, la población de usuarios cambia constantemente, incluso en cuestión de segundos.

 El algoritmo requiere que el banquero satisfaga todas las peticiones en un tiempo finito. Es evidente que en los sistemas reales esto no es una garantía suficiente.

 De manera similar, el algoritmo requiere que los procesos salden sus préstamos (es decir, devuelvan sus recursos) en un tiempo finito. Una vez más, esto es insuficiente para un sistema de tiempo real.

 El algoritmo requiere que los usuarios declaren por anticipado sus necesidades máximas. A medida que la asignación de recursos se hace más dinámica, conocer las necesidades máximas de un usuario presenta mayor dificultad. De hecho, ahora que los sistemas ofrecen interfaces gráficas, cada vez es más común que los usuarios no tengan la menor idea de los recursos que necesitan.

80

Page 96: Libro de Texto. Sistemas Operativos

2.4.3.2 Detección.2.4.3.3 Recuperación.

La detección del bloqueo mutuo es el proceso de determinar si realmente existe un interbloqueo e identificar los procesos y recursos implicados en él. Los algoritmos de detección determinan por lo general si existe una espera circular.

El empleo de algoritmos de detección del interbloqueo implica cierto gasto extra durante la ejecución. Así pues, se presenta de nuevo la cuestión de costeabilidad, tan habitual en los sistemas operativos, ¿el gasto extra debido a los algoritmos de detección del bloqueo mutuo se justifica con los ahorros potenciales debidos a la localización y solución de los interbloqueos?

Para facilitar la detección de interbloqueos, se utilizará una notación en la que un grafo dirigido indica las asignaciones y peticiones de recursos. Los cuadrados representan procesos; los círculos grandes, clases de dispositivos idénticos; los círculos pequeños de color rojo en el interior de los grandes indican el número de dispositivos de cada clase. Por ejemplo, si un círculo grande etiquetado como R1 contiene tres círculos pequeños, significa que ya tres recursos del tipo R1 disponibles para asignación en este sistema.

Figura 2-14 Gráfica de Asignación y Petición de recursos.

La figura 2-14 muestra las relaciones que pueden indicarse en una gráfica de asignación y petición de recursos. Por ejemplo, en (a) el proceso P1 está pidiendo un recurso del tipo R1. La flecha que parte de P1 toca solamente el

81

Page 97: Libro de Texto. Sistemas Operativos

extremo del círculo grande, lo cual implica que se está estudiando la petición. En (b), el proceso P2 tiene asignado un recurso del tipo R2 (del cual existen dos unidades). La flecha va del círculo pequeño que se encuentra dentro del círculo grande R2 al cuadrado P2. En (c), el recurso R3 ha sido solicitado por el proceso P3, pero ya se ha asignado al proceso P4. Por último, en (d), se representa un interbloqueo. El proceso P5 tiene el recurso R5 que está siendo solicitado por el proceso P6, que tiene el recurso R4 que está siendo solicitado por el proceso P5 (una espera circular).

 Reducción de las gráficas de asignación de recursos

Una técnica útil para detectar los interbloqueos consiste en ir reduciendo una gráfica determinando los procesos que pueden completar su ejecución. Si pueden atenderse las peticiones de recursos de un proceso, se dice que la gráfica puede ser reducida por ese proceso. Esta reducción es equivalente a mostrar la gráfica como si el proceso hubiese acabado y hubiera devuelto los recursos al sistema. Si una gráfica puede ser reducida por todos sus procesos, entonces no hay interbloqueo. Si una gráfica no puede ser reducida por todos sus procesos, los procesos irreductibles constituyen el conjunto de procesos en bloqueo mutuo de la gráfica (figura 2-15).

Cuando se ha bloqueado un sistema, el interbloqueo debe romperse mediante la eliminación de una o más de las condiciones necesarias. Por lo general, varios procesos perderán una parte o la totalidad del trabajo efectuado, pero el precio pagado puede ser pequeño, en comparación con las consecuencias de permitir que el sistema siga bloqueado. La recuperación después de un bloqueo mutuo se complica por varias razones :

   Puede no estar claro que el sistema se haya bloqueado.

 La mayor parte de los sistemas tienen medios muy deficientes para suspender indefinidamente un proceso, eliminarlo del sistema y reanudarlo más tarde. De hecho, algunos procesos como los de tiempo real, que deben funcionar continuamente, sencillamente no se pueden suspender y reanudar.

 Aún cuando existieran medios efectivos de suspensión/reanudación, con toda seguridad implicarían un gasto extra considerable.

 La recuperación después de un bloqueo mutuo de dimensiones modestas puede significar una cantidad razonable de trabajo, un interbloqueo a gran escala puede requerir una cantidad enorme de trabajo.

 

82

Page 98: Libro de Texto. Sistemas Operativos

Figura 2-15 Reducción de gráficas

En los sistemas actuales la recuperación se suele realizar eliminado un proceso y arrebatándole sus recursos. Por lo general, el proceso eliminado se pierde pero ahora es posible concluir los procesos restantes. Algunas veces es necesario eliminar varios procesos hasta que se hayan liberado los recursos suficientes para que terminen los procesos restantes.

Los procesos pueden eliminarse de acuerdo con algún orden de prioridad. También existen dificultades para ello :

 Es posible que no existan prioridades entre los procesos bloqueados, de modo que se tiene que adoptar una decisión arbitraria.

 Las prioridades pueden ser incorrectas o un poco confusas debido a consideraciones especiales, como la planificación a plazo fijo, en la cual un proceso de prioridad relativamente baja tiene una prioridad temporal alta a causa de un fin de plazo inminente.

 La determinación de una decisión óptima sobre los procesos que se deben eliminar puede requerir un esfuerzo considerable.

83

Page 99: Libro de Texto. Sistemas Operativos

Parece ser que el enfoque más deseable para la recuperación después de un bloqueo mutuo sería un mecanismo efectivo de suspensión/reanudación. Ello implicaría suspender temporalmente los procesos y reanudarlos después sin pérdida de trabajo productivo. Para ello sería deseable la posibilidad de especificar puntos de verificación/reinicio. De este modo, se facilita la suspensión/reanudación, que se hará desde el último punto de verificación (es decir, la última grabación del estado del sistema). Pero muchos sistemas de aplicación se diseñan sin aprovechar las ventajas de las funciones de punto de verificación/reinicio. Por lo general, se requiere un esfuerzo consciente por parte de los diseñadores para incorporar la verificación/reinicio, y a menos que las tareas requieran muchas horas de ejecución, su uso es poco común.

2.5 Niveles, objetivos y criterios de planificación.

La planificación de la CPU, en el sentido de conmutarla entre los distintos procesos, es una de las funciones del sistema operativo. Este despacho es llevado a cabo por un pequeño programa llamado planificador a corto plazo o dispatcher (despachador). La misión del dispatcher consiste en asignar la CPU a uno de los procesos ejecutables del sistema, para ello sigue un determinado algoritmo. En la figura 2-16 se muestran los niveles de planificación. En secciones posteriores estudiaremos algunos algoritmos posibles. Para que el dispatcher conmute el procesador entre dos procesos es necesario realizar un cambio de proceso.

Los acontecimientos que pueden provocar la llamada al dispatcher dependen del sistema (son un subconjunto de las interrupciones), pero son alguno de estos:

 El proceso en ejecución acaba su ejecución o no puede seguir ejecutándose (por una E/S, operación WAIT, etc).

 Un elemento del sistema operativo ordena el bloqueo del proceso en ejecución (ver estados de un proceso).

 El proceso en ejecución agota su cuantum o cuanto de estancia en la CPU.

 Un proceso pasa a estado listo.

Hay que destacar el hecho de que cuanto menos se llame al dispatcher menos tiempo ocupa la CPU un programa del sistema operativo, y, por tanto, se dedica más tiempo a los procesos del usuario (un cambio de proceso lleva bastante tiempo).

Así, si sólo se activa el dispatcher como consecuencia de los 2 primeros acontecimientos se estará haciendo un buen uso del procesador. Este criterio es acertado en sistemas por lotes en los que los programas no son interactivos. Sin embargo, en un sistema de tiempo compartido no es adecuado, pues un proceso

84

Page 100: Libro de Texto. Sistemas Operativos

que se dedicara a realizar cálculos, y no realizara E/S, monopolizaría el uso de la CPU. En estos sistemas hay que tener en cuenta el conjunto de todos los procesos, activándose el dispatcher con la circunstancia tercera y, posiblemente, la cuarta. Los sistema operativos en que las dos siguientes circunstancias no provocan la activación del dispatcher muestran preferencia por el proceso en ejecución, si no ocurre esto se tiene más en cuenta el conjunto de todos los procesos.

 

Figura 2-16 Niveles de planificación.

Se puede definir el scheduling -algunas veces traducido como -planificación- como el conjunto de políticas y mecanismos construidos dentro del sistema operativo que gobiernan la forma de conseguir que los procesos a ejecutar lleguen a ejecutarse.

El scheduling está asociado a las cuestiones de:

 Cuándo introducir un nuevo proceso en el Sistema.

85

Page 101: Libro de Texto. Sistemas Operativos

 Determinar el orden de ejecución de los procesos del sistema.

El scheduling está muy relacionado con la gestión de los recursos. Existen tres niveles de scheduling, como se ilustra en la figura 1.1, estos niveles son:

 Planificador de la CPU o a corto plazo.

 Planificador a medio plazo.

 Planificador a largo plazo.

 Ya hemos hablado del planificador de la CPU, y en los subapartados posteriores se comentan los dos restantes:

Planificación a largo plazo

Este planificador está presente en algunos sistemas que admiten además de procesos interactivos trabajos por lotes. Usualmente, se les asigna una prioridad baja a los trabajos por lotes, utilizándose estos para mantener ocupados a los recursos del sistema durante períodos de baja actividad de los procesos interactivos. Normalmente, los trabajos por lotes realizan tareas rutinarias como el cálculo de nóminas; en este tipo de tareas el programador puede estimar su gasto en recursos, indicándoselo al sistema. Esto facilita el funcionamiento del planificador a largo plazo.

El objetivo primordial del planificador a largo plazo es el de dar al planificador de la CPU una mezcla equilibrada de trabajos, tales como los limitados por la CPU (utilizan mucho la CPU) o la E/S. Así, por ejemplo, cuando la utilización de la CPU es baja, el planificador puede admitir más trabajos para aumentar el número de procesos listos y, con ello, la probabilidad de tener algún trabajo útil en espera de que se le asigne la CPU. A la inversa, cuando la utilización de la CPU llega a ser alta, y el tiempo de respuesta comienza a reflejarlo, el planificador a largo plazo puede optar por reducir la frecuencia de admisión de trabajos.

Normalmente, se invoca al planificador a largo plazo siempre que un proceso termina. La frecuencia de invocación depende, pues, de la carga del sistema, pero generalmente es mucho menor que la de los otros dos planificadores. Esta baja frecuencia de uso hace que este planificador pueda permitirse utilizar algoritmos complejos, basados en las estimaciones de los nuevos trabajos.

Planificación a Medio Plazo

En los sistemas de multiprogramación y tiempo compartido varios procesos residen en la memoria principal. El tamaño limitado de ésta hace que el número de procesos que residen en ella sea finito. Puede ocurrir que todos los procesos

86

Page 102: Libro de Texto. Sistemas Operativos

en memoria estén bloqueados, desperdiciándose así la CPU. En algunos sistemas se intercambian procesos enteros (swap) entre memoria principal y memoria secundaria (normalmente discos), con esto se aumenta el número de procesos, y, por tanto, la probabilidad de una mayor utilización de la CPU.

El planificador a medio plazo es el encargado de regir las transiciones de procesos entre memoria principal y secundaria, actúa intentando maximizar la utilización de los recursos. Por ejemplo, transfiriendo siempre a memoria secundaria procesos bloqueados, o transfiriendo a memoria principal procesos bloqueados únicamente por no tener memoria.

Objetivos y Criterios de Planificación

El principal objetivo de la planificación a corto plazo es repartir el tiempo del procesador de forma que se optimicen algunos puntos del comportamiento del sistema. Generalmente se fija un conjunto de criterios con los que evaluar las diversas estrategias de planificación. El criterio más empleado establece dos clasificaciones. En primer lugar, se puede hacer una distinción entre los criterios orientados a los usuarios y los orientados al sistema. Los criterios orientados al usuario se refieren al comportamiento del sistema tal y como lo perciben los usuarios o los procesos. Uno de los parámetros es el tiempo de respuesta. El tiempo de respuesta es el periodo de tiempo transcurrido desde que se emite una solicitud hasta que la respuesta aparece en la salida. Sería conveniente disponer de una política de planificación que ofrezca un buen servicio a diversos usuarios.

Otros criterios están orientados al sistema, esto es, se centran en el uso efectivo y eficiente del procesador. Un ejemplo puede ser la productividad, es decir, el ritmo con el que los procesos terminan. La productividad es una medida muy válida del rendimiento de un sistema y que sería deseable maximizar.

 Otra forma de clasificación es considerar los criterios relativos al rendimiento del sistema y los que no lo son. Los criterios relativos al rendimiento son cuantitativos y, en general, pueden evaluarse o ser analizados fácilmente. Algunos ejemplos son el tiempo de respuesta y la productividad. Los criterios no relativos al rendimiento son, en cambio cualitativos y no pueden ser evaluados fácilmente. Un ejemplo de estos criterios es la previsibilidad. Sería conveniente que el servicio ofrecido a los usuarios tenga las mismas características en todo momento, independientemente de la existencia de otros trabajos ejecutados por el sistema.

 En particular, una disciplina de planificación debe:

  Ser equitativa: debe intentar hacer una planificación justa, esto es, se debe tratar a todos los procesos de la misma forma y no aplazar indefinidamente ningún proceso. La mejor forma de evitarlo es emplear alguna técnica de

87

Page 103: Libro de Texto. Sistemas Operativos

envejecimiento; es decir, mientras un proceso espera un recurso, su prioridad debe crecer.

  Ser eficiente: debe maximizar el uso de los recursos tales como intentar que la ocupación de la CPU sea máxima. Al mismo tiempo se debe intentar reducir el gasto extra por considerar que es trabajo no productivo. Normalmente el idear algoritmos eficientes supone invertir recursos en gestión del propio sistema.

  Lograr un tiempo bueno de respuesta, es decir, que los usuarios interactivos reciban respuesta en tiempos aceptables.

  Lograr un tiempo de proceso global predecible. Esto quiere decir que un proceso debe ejecutarse aproximadamente en el mismo tiempo y casi al mismo costo con independencia de la carga del sistema.

  Elevar al máximo la productividad o el rendimiento, esto es, maximizar el número de trabajos procesados por unidad de tiempo. Eso supone, por un lado, dar preferencia a los procesos que ocupan recursos decisivos y, por otro, favorecer a los procesos que muestran un comportamiento deseable. En el primer caso conseguimos liberar el recurso cuanto antes para que esté disponible para un proceso de mayor prioridad. Con el segundo criterio escogemos a los procesos que no consumen muchos recursos dejándole al sistema mayor capacidad de actuación.

 Estos criterios son dependientes entre sí y es imposible optimizar todos de forma simultánea. Por ejemplo, obtener un buen tiempo de respuesta puede exigir un algoritmo de planificación que alterne entre los procesos con frecuencia, lo que incrementa la sobrecarga del sistema y reduce la productividad. Por tanto, en el diseño de un política de planificación entran en juego compromisos entre requisitos opuestos; el peso relativo que reciben los distintos requisitos dependerá de la naturaleza y empleo del sistema.

 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. Y por el contrario, es apropiativa, si se le puede quitar 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 de tiempo real, por ejemplo, las consecuencias de perder una interrupción pueden ser desastrosas. En los sistemas de tiempo compartido, la planificación apropiativa es importante para garantizar tiempos de respuesta aceptables.

 La apropiación tiene un precio. El cambio de proceso implica gasto extra. Para que la técnica de apropiación sea efectiva deben mantenerse muchos procesos

88

Page 104: Libro de Texto. Sistemas Operativos

en memoria principal de manera que el siguiente proceso se encuentre listo cuando quede disponible la CPU. Conservar en memoria principal procesos que no están en ejecución implica gasto extra.

 En los sistema 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 mecanismos 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 prioridades de forma coherente.

El Reloj de Interrupciones

Se dice que un proceso está en ejecución cuando tiene asignada la CPU. Si el proceso pertenece al sistema operativo, se dice que el sistema operativo está en ejecución y que puede tomar decisiones que afectan al sistema. Para evitar que los usuarios monopolicen el sistema (deliberadamente o accidentalmente), el sistema operativo tiene mecanismos para arrebatar la CPU al usuario.

El sistema operativo gestiona un reloj de interrupciones que genera interrupciones cada cierto tiempo. Un proceso mantiene el control de la CPU hasta que la libera voluntariamente (acaba su ejecución, o se bloquea), 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 para comprobar, por ejemplo, si ha pasado el cuanto de tiempo del proceso que estaba en ejecución.

El reloj de interrupciones asegura que ningún proceso acapare la utilización del procesador. El sistema operativo, apoyándose en él, intenta distribuir el tiempo de CPU entre los distintos procesos ya sean de E/S o de cálculo. Por tanto, ayuda a garantizar tiempos de respuesta para los usuarios interactivos, evitando 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.

No se debe confundir en ningún caso al reloj de interrupciones con el reloj de la máquina o reloj hardware. Veamos con un pequeño ejemplo como esto es imposible.

 Como sabemos, todas las tareas de una computadora están sincronizadas por un reloj hardware. La velocidad de un procesador determina la rapidez con la que ejecuta un paso elemental o cambio en el sistema. Por ejemplo, si decimos

89

Page 105: Libro de Texto. Sistemas Operativos

de una máquina que tienen un microprocesador que va a una frecuencia de 100 MHz eso quiere decir que produce alrededor de 100 millones de pasos elementales o cambios en el sistema en un segundo. Pero una instrucción consume algunos de estos pasos mínimos. Supongamos que en media una instrucción consume alrededor de 100 pasos elementales. No podemos interrumpir al procesador a la misma velocidad a la que opera porque entonces no se podría llegar nunca a ejecutar ninguna instrucción. Parece razonable que se elija una frecuencia menor para el reloj de interrupciones. Por ejemplo, se podría generar una interrupción cada 0'02 segundos (tener una frecuencia de 50 Hz) esto significa que se estaría interrumpiendo al procesador cada dos millones de ciclos. En ese tiempo bajo la suposición de que una instrucción consume 100 pasos se habría ejecutado unas 20000 instrucciones. Esto sí es mucho más razonable. En resumen el reloj de interrupciones tiene una frecuencia inferior al reloj hardware y superior al cuanto de tiempo o intervalos de tiempo en que se quiera controlar en el sistema.

Uso de Prioridades  

La mayoría de los algoritmos de planificación apropiativos emplean el uso de prioridades de acuerdo con algún criterio. Cada proceso tiene una prioridad asignada y el planificador seleccionará siempre un proceso de mayor prioridad antes que otro de menor prioridad.

Las prioridades pueden ser asignadas de 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 de 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.

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 entorno que podrían hacer necesario un ajuste de prioridades.

Las prioridades dinámicas responden a los cambios. La prioridad inicial asignada a un proceso tiene una corta duración, después se ajusta a un valor más apropiado, a veces deducido de su comportamiento. Los esquemas de prioridad dinámica son más complejos e implican un mayor gasto extra que puede quedar justificado por el aumento en la sensibilidad del sistema.

2.6 Técnicas de administración del planificador.

En la siguiente sección vamos a estudiar ciertos algoritmos utilizados para planificar la CPU, la elección de uno (o de una mezcla de varios) depende de decisiones de diseño. Antes de exponer los algoritmos vamos a explicar ciertas medidas que se utilizan para evaluarlos.

90

Page 106: Libro de Texto. Sistemas Operativos

    Porcentaje de utilización de la CPU por procesos de usuario. La CPU es un recurso caro que necesita ser explotado, los valores reales suelen estar entre un 40% y un 90%.

   Rendimiento (throughput) = nº de ráfagas por unidad de tiempo. Se define una ráfaga como el período de tiempo en que un proceso necesita la CPU; un proceso, durante su vida, alterna ráfagas con bloqueos. Por extensión, también se define como el nº de trabajos por unidad de tiempo.

   Tiempo de espera (E) = tiempo que una ráfaga ha permanecido en estado listo.

   Tiempo de finalización (F) = tiempo transcurrido desde que una ráfaga comienza a existir hasta que finaliza. F = E + t (t = tiempo de CPU de la ráfaga).

   Penalización (P) = E + t / t = F / t, es una medida adimensional que se puede aplicar homogéneamente a las ráfagas independientemente de su longitud.

 En general, hay que maximizar los dos primeros parámetros y minimizar los tres últimos. Sin embargo, estos objetivos son contradictorios, el dedicar más tiempo de CPU a los usuarios se hace a costa de llamar menos al algoritmo de planificación (menos cambios de proceso), y de simplificarlo. Esto provoca que la CPU se reparta menos equitativamente entre los procesos, en detrimento de los últimos tres parámetros.

  Así pues, dependiendo de los objetivos se elegirá cierto algoritmo. En los sistemas por lotes suele primar el rendimiento del sistema, mientras que en los sistemas interactivos es preferible minimizar, por ejemplo, el tiempo de espera.

2.6.1 FIFO Primero en Entrar-Primero en Salir

Cuando se tiene que elegir a qué proceso asignar la CPU se escoge al que llevara más tiempo listo. El proceso se mantiene en la CPU hasta que se bloquea voluntariamente.

La ventaja de este algoritmo es su fácil implementación, sin embargo, no es válido para entornos interactivos ya que un proceso de mucho cálculo de CPU hace aumentar el tiempo de espera de los demás procesos . Para implementar el algoritmo (ver figura 2-17) sólo se necesita mantener una cola con los procesos listos ordenada por tiempo de llegada. Cuando un proceso pasa de bloqueado a listo se sitúa el último de la cola.

En a) el proceso P7 ocupa la CPU, los procesos P2, P4 y P8 se mantienen en la lista de preparados. En b) P7 se bloquea (ya sea al realizar una E/S, una operación WAIT sobre un semáforo a cero u otra causa) y P2 pasa a ocupar la CPU. En c) ocurre un evento (finalización de la operación de E/S, operación

91

Page 107: Libro de Texto. Sistemas Operativos

SIGNAL, ...) que desbloquea a P7, esto lo vuelve listo, pasando al final de la cola de procesos listos.

Figura 2-17 Lista de procesos preparados en FIFO

Algunas de las características de este algoritmo es que es no apropiativo y justo en el sentido formal, aunque injusto en el sentido de que: los trabajos largos hacen esperar a los cortos y los trabajos sin importancia hacen esperar a los importantes. Por otro lado es predecible pero no garantiza buenos tiempos de respuesta y por ello se emplea como esquema secundario.

2.6.2 SJF Planificación por Prioridad al más corto ( Short Job First).

Al igual que en el algoritmo FIFO las ráfagas se ejecutan sin interrupción, por tanto, sólo es útil para entornos batch. Su característica es que cuando se activa el planificador, éste elige la ráfaga de menor duración. Es decir, introduce una noción de prioridad entre ráfagas. Hay que recordar que en los entornos batch se pueden hacer estimaciones del tiempo de ejecución de los procesos.

  La ventaja que presenta este algoritmo sobre el algoritmo FIFO es que minimiza el tiempo de finalización promedio, como puede verse en el siguiente ejemplo:

Ej: Supongamos que en un momento dado existen tres ráfagas listos R1, R2 y R3, sus tiempos de ejecución respectivos son 24, 3 y 3 ms. El proceso al que pertenece la ráfaga R1 es la que lleva más tiempo ejecutable, seguido del proceso al que pertenece R2 y del de R3. Veamos el tiempo medio de finalización (F) de las ráfagas aplicando FIFO y SJF:

    FIFO F = (24 + 27 + 30) / 3 = 27 ms.

  SJF F = (3 + 6 + 30) / 3 = 13 ms.

Se puede demostrar que este algoritmo es el óptimo. Para ello, consideremos el caso de cuatro ráfagas, con tiempos de ejecución de a, b, c y d. La primera

92

Page 108: Libro de Texto. Sistemas Operativos

ráfaga termina en el tiempo a, la segunda termina en el tiempo a+b, etc. El tiempo promedio de finalización es (4a+3b+2c+d)/4. Es evidente que a contribuye más al promedio que los demás tiempos, por lo que debe ser la ráfaga más corta, b la siguiente, y así sucesivamente. El mismo razonamiento se aplica a un número arbitrario de ráfagas.

No obstante, este algoritmo sólo es óptimo cuando se tienen simultáneamente todas las ráfagas. Como ejercicio, considérense cinco ráfagas desde A hasta E, con tiempo se ejecución de 2, 4, 1, 1 y 1 respectivamente. Sus tiempos de llegada son 0, 0, 3, 3 y 3. Primero se dispone de A y B, puesto que las demás ráfagas no han llegado aún. Con el algoritmo SJF las ejecutaríamos en orden A, B, C, D, y E con un tiempo de finalización promedio de 4.6. Sin embargo, al ejecutarlas en orden B, C, D, E y A se tiene un promedio de finalización de 4.4.

2.6.3 RR Planificación por Turno Rotatorio (Round Robin).

Este es uno de los algoritmos más antiguos, sencillos y equitativos en el reparto de la CPU entre los procesos, muy válido para entornos de tiempo compartido. Cada proceso tiene asignado un intervalo de tiempo de ejecución, llamado cuantum o cuanto. Si el proceso agota su cuantum de tiempo, se elige a otro proceso para ocupar la CPU. Si el proceso se bloquea o termina antes de agotar su cuantum también se alterna el uso de la CPU. El round robin es muy fácil de implementar. Todo lo que necesita el planificador es mantener una lista de los procesos listos, como se muestra en la figura 2-18. En esta figura en a) el proceso P7 ocupa la CPU. En b) P7 se bloquea pasando P2 a ocupar la CPU. En c) P2 agota su cuantum con lo que pasa al final de la lista y P4 ocupa la CPU. La figura 4 representa un ejemplo más largo de la ocupación de la CPU utilizando el algoritmo round robin.

Figura 2-18 Lista de procesos preparados en Round Robin

Este algoritmo presupone la existencia de un reloj en el sistema. Un reloj es un dispositivo que genera periódicamente interrupciones. Esto es muy importante, pues garantiza que el sistema operativo (en concreto la rutina de servicio de interrupción del reloj) coge el mando de la CPU periódicamente. El cuantum de un proceso equivale a un número fijo de pulsos o ciclos de reloj. Al ocurrir una

93

Page 109: Libro de Texto. Sistemas Operativos

interrupción de reloj que coincide con la agotación del cuantum se llama al dispatcher. Figura 2-19 ejemplo de Round Robin.

Figura 2-19 Ejemplo de Round Robin

Tamaño del Cuanto

 La determinación del tamaño del cuanto es vital para la operación efectiva de un sistema de cómputo. ¿Debe el cuanto ser pequeño o grande?, ¿fijo o variable?, ¿el mismo para todos los usuarios o debe determinarse por separado para cada uno?

 Si el cuanto de tiempo es muy grande, cada proceso tendrá el tiempo necesario para terminar, de manera que el esquema de planificación por turno rotatorio degenera en uno de primero-en-entrar-primero-en-salir. Si el cuanto es muy pequeño, el gasto extra por cambio de proceso se convierte en el factor dominante y el rendimiento del sistema se degradará hasta el punto en que la mayor parte del tiempo se invierte en la conmutación del procesador, con muy poco o ningún tiempo para ejecutar los programas de los usuarios.

¿Exactamente dónde, entre cero e infinito, debe fijarse el tamaño del cuanto? La respuesta es, lo bastante grande como para que la mayoría de las peticiones interactivas requieran menos tiempo que la duración del cuanto.

 Pongamos un ejemplo, supongamos que el cambio de proceso tarda 5 mseg., y la duración del cuantum es de 20 mseg.. Con estos parámetros, se utiliza un mínimo del 20% del tiempo de la CPU en la ejecución del sistema operativo. Para incrementar la utilización de la CPU por parte de los procesos de usuario podríamos establecer un cuantum de 500 mseg., el tiempo desperdiciado con este parámetro sería del 1%. Pero consideremos lo que ocurriría si diez usuarios interactivos oprimieran la tecla enter casi al mismo tiempo. Diez procesos se colocarían en la lista de procesos listos. Si la CPU está inactiva, el primero de los procesos comenzaría de inmediato, el segundo comenzaría medio segundo

94

Page 110: Libro de Texto. Sistemas Operativos

después, etc. Partiendo de la hipótesis de que todos los procesos agoten su cuantum, el último proceso deberá de esperar 4'5 seg. para poder ejecutarse. Esperar 4'5 seg. para la ejecución de una orden sencilla como pwd parece excesivo.  En conclusión, un cuantum pequeño disminuye el rendimiento de la CPU, mientras que un cuantum muy largo empobrece los tiempos de respuesta y degenera en el algoritmo FIFO. La solución es adoptar un término medio como 100 mseg.

2.6.4 Queves multi-level.

Este algoritmo pertenece a una clase de algoritmos de planificación para situaciones en las que es fácil clasificar los procesos en diferentes grupos.

Un algoritmo de planificación con colas de múltiples niveles divide la cola de procesos listos en varias colas distintas. Los procesos se asignan permanentemente a una cola, casi siempre con base en alguna propiedad del proceso, como ser tamaño de memoria, prioridad y tipo de proceso. Cada cola tiene su propio algoritmo de planificación.

Además debe haber planificación entre las colas, lo cual por lo regular se implementa como una planificación expropiativa de prioridades fijas. Por ejemplo, la cola de primer plano podría tener prioridad absoluta sobre la cola de segundo plano, por lo tanto mientras no se vacía la cola de prioridad superior, los procesos de la cola inferior no se ejecutan.

Otra posibilidad es dividir el tiempo entre las colas. Cada cola obtiene cierta proporción del tiempo de CPU, que entonces puede repartir entre los diversos procesos en su cola.

Este algoritmo tiene la ventaja de que el gasto por planificación es bajo y la desventaja de ser inflexible.

2.6.5 Multi-level feedback queves. (Colas de Retroalimentación de Múltiples Nivel)

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 la E/S normalmente usan la CPU sólo un momento antes de generar una solicitud de E/S; los procesos limitados por la CPU pueden usar el procesador durante horas si está disponible en forma no apropiativa.

Un mecanismo de planificación debe:

 Favorecer a los trabajos cortos.

95

Page 111: Libro de Texto. Sistemas Operativos

  Favorecer a los trabajos limitados por la E/S para lograr un mejor aprovechamiento de los dispositivos de E/S.

  Determinar la naturaleza de un trabajo lo más pronto posible y planificarlo de acuerdo con su naturaleza.

Figura 2-20 Colas de retroalimentación de Múltiples Niveles

Las colas de retroalimentación de niveles múltiples (figura 2-20) 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 mediante Round Robin 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 rotatorio hasta que termina.

 En muchos esquemas de retroalimentación de múltiples niveles, el cuanto asignado a un 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

96

Page 112: Libro de Texto. Sistemas Operativos

nivel superior tienen mayor prioridad. Un proceso situado en una cola no puede ejecutarse a menos que estén vacías las colas de nivel superior. 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 este tipo a diferentes tipos de procesos. El mecanismo debe favorecer a los procesos limitados por la E/S para lograr un buen aprovechamiento de los dispositivos y una respuesta buena para los usuarios interactivos; y de hecho lo hace porque los procesos limitados por la E/S entrarán en la red con prioridad alta y se les asignará rápidamente la CPU. El tamaño del cuanto de la primera cola se elegirá lo suficientemente grande para que la gran mayoría de los trabajos limitados por la E/S generen una petición de E/S antes de que expire el primer cuanto. Cuando el proceso solicita E/S, abandona la red y ha obtenido un tratamiento favorable, tal como se deseaba.

 Ahora considérese una tarea limitada por la CPU que necesita mucho tiempo de procesador. Esa tarea entra en la cola más alta de la red con prioridad alta. 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 la E/S, que obtienen primero la CPU. El proceso limitado por la 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 sea arrebatada por un proceso entrante). En algún momento, el proceso limitado por la CPU llega a la cola de nivel inferior, en donde entrará en una planificación por turno hasta terminar.

 Las colas de retroalimentación de niveles múltiples 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 la 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 la CPU que regresa a la red de colas no se coloca en las colas de nivel alto donde interferiría con el servicio a los procesos cortos de prioridad alta o con los limitados por la 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 la CPU, a estar limitado por la 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

97

Page 113: Libro de Texto. Sistemas Operativos

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 la CPU y empieza a estar limitado por la 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 de 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 de niveles múltiples 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 de 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. 

98

Page 114: Libro de Texto. Sistemas Operativos

Resumen

Un proceso es un programa en ejecución. La diferencia entre proceso y programa es que el primero es activo y el programa pasivo.Un proceso puede estar en cualquiera de los siguientes tres estados: Listo, En ejecución y Bloqueado.Los hilos se distinguen de los tradicionales procesos en que los procesos son generalmente independientes, llevan bastante información de estados, e interactúan sólo a través de mecanismos de comunicación dados por el sistema. Por otra parte, muchos hilos generalmente comparten otros recursos de forma directa. Los procesos pueden comunicarse entre si empleando primitivas de comunicación, como semáforos, monitores o mensajes, que sirven para garantizar que nunca haya dos procesos en sus regiones críticas al mismo tiempo, situaciones que conducen al caos.Cuando un proceso de un sistema de multiprogramación espera en balde a que se presente un evento específico, se dice que se encuentra en un estado de interbloqueo o bloqueo mutuo. Los procesos que pueden encontrase en esta situación pueden ser uno o varios.Se conocen muchos algoritmos de calendarización. Algunos se usan primordialmente en sistemas por lotes, como el de trabajo mas corto primero. Otros son comunes en sistemas tanto por lotes como interactivos, e incluyen la calendarización por turno circular, Planificación con múltiples colas dinámicas y colas de retroalimentación de múltiples niveles.

Problemas

1. Cuando una interrupción o una llamada al sistema transfiere el control al sistema operativo, por lo general se usa un área de la pila del kernel distinta de la pila del proceso interrumpido. ¿Por que?

2. ¿Un subproceso puede ser expropiado por una interrupción de reloj? En tal caso, ¿en que circunstancias? Si no puede ser expropiado, explique la razón.

3. Considere un sistema en que los subprocesos se implementan por completo en el espacio de usuario, y el sistema de tiempo de ejecución recibe una interrupción de reloj una vez por segundo. Supongamos que se da una interrupción de reloj mientras algún subproceso se está ejecutando en el sistema de tiempo de ejecución. ¿Que problema podría presentarse? ¿Puede sugerir una forma de resolverlo?

4. ¿Que es una condición de competencia?

5. Cuando se esta desarrollando una computadora, lo común es simularla con un programa que ejecuta una instrucción a la vez. Incluso los multiprocesadores se simulan de forma estrictamente secuencial. Es posible que se presente una

99

Page 115: Libro de Texto. Sistemas Operativos

condición de competencia cuando no hay procesos simultáneos, como en la simulación?

6. Si un sistema sólo tiene dos procesos, ¿tiene sentido usar un barrera para sincronizarlos? ¿Por qué sí o por qué no?

7. Suponga que se tiene un sistema de transferencia de mensajes que usa buzones. Si un proceso envía a un buzón lleno o trata de recibir de un buzón vacío, no se bloquea; simplemente recibe un código de error. El proceso responde al código con un nuevo intento, una y otra vez hasta tener éxito. ¿Este esquema puede llevar a condiciones de competencia?

8. Cinco trabajadores están esperando ejecución. Sus primeros tiempos de ejecución esperados son 9,6,3,5 y X. ¿En qué orden deben ejecutarse para reducir al mínimo el tiempo de respuesta?

9. Un sistema tiene dos procesos y tres recursos idénticos. Cada proceso necesita un máximo de dos recursos. Es posible caer en un interbloqueo? Explique su respuesta.

10. Cada uno de los procesos A y B necesitan tres registros, 1,2 y 3, de una base de datos. Si A los pide en el orden 1,2,3, y B los solicita en le mismo orden, no es posible caer en u interbloqueo. En cambio, si B los pide en el orden 3,2,1, puede haber interbloqueo. Con tres recursos, hay 3 o 6 posibles combinaciones en las que cada proceso puede solicitar los recursos. ¿Qué fracción de las combinaciones garantiza la ausencia de interbloqueos?

100

Page 116: Libro de Texto. Sistemas Operativos

UNIDAD 3. Administración de memoria.3.1 Política y filosofía.

Concepto:

La memoria principal puede ser considerada como un arreglo lineal de localidades de almacenamiento de un byte de tamaño. Cada localidad de almacenamiento tiene asignada una dirección que la identifica(Deitel, 1993).

Políticas y filosofía de la administración de la memoria.

La parte del sistema operativo que administra la memoria se llama administrador de memoria y su labor consiste en llevar un registro de las partes de memoria que se estén utilizando y aquellas que no, con el fin de asignar espacio en memoria a los procesos cuando éstos la necesiten y liberándola cuando terminen, así como administrar el intercambio entre la memoria principal y el disco en los casos en los que la memoria principal no le pueda dar capacidad a todos los procesos que tienen necesidad de ella.

Los sistemas de administración de memoria se pueden clasificar en dos tipos: los que desplazan los procesos de la memoria principal al disco y viceversa durante la ejecución y los que no.

El propósito principal de una computadora es el de ejecutar programas, estos programas, junto con la información que accesan deben de estar en la memoria principal (al menos parcialmente) durante la ejecución.

Para optimizar el uso del CPU y de la memoria, el sistema operativo debe de tener varios procesos a la vez en la memoria principal, para lo cual dispone de varias opciones de administración tanto del procesador como de la memoria. La selección de uno de ellos depende principalmente del diseño del hardware para el sistema. A continuación se observarán los puntos correspondientes a la administración de la memoria.

3.2Memoria real.

La memoria real o principal es en donde son ejecutados los programas y procesos de una computadora y es el espacio real que existe en memoria para que se ejecuten los procesos. Por lo general esta memoria es de mayor costo que la memoria secundaria, pero el acceso a la información contenida en ella es de más rápido acceso. Solo la memoria cache es más rápida que la principal, pero su costo es a su vez mayor.

3.2.1 Administración de almacenamiento.

Las “estrategias de administración” deben considerar:

¿ cuándo se consigue un nuevo programa para colocar en la memoria ?:

101

Page 117: Libro de Texto. Sistemas Operativos

o ¿ cuando el sistema lo pide específicamente o se intenta anticiparse a las peticiones ?.

¿ dónde se colocará el programa que se ejecutará a continuación ?: o ¿ se prioriza el tiempo de carga o la optimización en el uso del

almacenamiento ?. ¿ con qué criterio se desplazarán programas ?.

3.2.2 Jerarquía.

Los programas y datos tienen que estar en la memoria principal para poder ejecutarse o ser referenciados. (Deitel, 1993).

Los programas y datos que no son necesarios de inmediato pueden mantenerse en el almacenamiento secundario.

El almacenamiento principal es más costoso y menor que el secundario pero de acceso más rápido.

Los sistemas con varios niveles de almacenamiento requieren destinar recursos para administrar el movimiento de programas y datos entre niveles (ver Figura 3.1).

Un nivel adicional es el “caché” o memoria de alta velocidad, que posee las siguientes características:

102

Page 118: Libro de Texto. Sistemas Operativos

Es más rápida y costosa que la memoria principal. Impone al sistema un nivel más de traspaso:

o Los programas son traspasados de la memoria principal al caché antes de su ejecución.

Los programas en la memoria caché ejecutan mucho más rápido que en la memoria principal.

Al utilizar memoria caché se espera que: o La sobrecarga que supone el traspaso de programas de un nivel

de memoria a otro sea mucho menor que la mejora en el rendimiento obtenida por la posibilidad de una ejecución mucho más rápida en la caché.

3.2.3 Estrategia de administración de memoria.

Están dirigidas a la obtención del mejor uso posible del recurso del almacenamiento principal. (Deitel, 1993).

Se dividen en las siguientes categorías:

Estrategias de búsqueda: o Estrategias de búsqueda por demanda. o Estrategias de búsqueda anticipada.

Estrategias de colocación. Estrategias de reposición.

Las “estrategias de búsqueda” están relacionadas con el hecho de cuándo obtener el siguiente fragmento de programa o de datos para su inserción en la memoria principal. En la “búsqueda por demanda” el siguiente fragmento de programa o de datos se carga al almacenamiento principal cuando algún programa en ejecución lo referencia. Se considera que la “búsqueda anticipada” puede producir un mejor rendimiento del sistema. Las “estrategias de colocación” están relacionadas con la determinación del lugar de la memoria donde se colocará (cargará) un programa nuevo. Las “estrategias de reposición” están relacionadas con la determinación de qué fragmento de programa o de datos desplazar para dar lugar a los programas nuevos.

3.2.4 Asignación contigua vs. no contigua.

En la “asignación contigua” cada programa ocupa un bloque contiguo y sencillo de localizaciones de almacenamiento.

En la “asignación no contigua” un programa se divide en varios bloques o “segmentos” que pueden almacenarse en direcciones que no tienen que ser

103

Page 119: Libro de Texto. Sistemas Operativos

necesariamente adyacentes, por lo que es más compleja pero más eficiente que la asignación continua.

Asignación Contigua de Almacenamiento de Un Solo Usuario

Se consideran S. O. que ya poseen desarrollado el “sistema de control de entrada / salida”: IOCS: input / output control system (ver Figura 3.2).

El tamaño de los programas está limitado por la cantidad de memoria principal, pero se puede superar este límite con técnicas de “recubrimientos”, con las siguientes características (ver Figura 3.3):

Si una sección particular del programa ya no es necesaria, se carga otra sección desde el almacenamiento secundario ocupando las áreas de memoria liberadas por la sección que ya no se necesita.

La administración manual por programa del recubrimiento es complicada y dificulta el desarrollo y el mantenimiento.

104

Page 120: Libro de Texto. Sistemas Operativos

Protección en los sistemas de un solo usuario El usuario tiene un completo control sobre la totalidad del almacenamiento principal:

El almacenamiento se divide en porciones que contienen el S. O., el programa del usuario y una porción sin usar.

El programa del usuario podría destruir áreas del S. O. que podrían: o Detener el sistema. o Producir salidas erróneas.

El S. O. debe estar protegido contra el proceso usuario: o La protección se instrumenta mediante un “registro de límites”

incorporado a la cpu: Contiene la dirección de la instrucción más alta utilizada por

el S. O. Si se intenta ingresar al S. O. la instrucción es interceptada

y el proceso finaliza.

Procesamiento por lotes de flujo único Los sistemas de un solo usuario se dedican a un trabajo durante más tiempo del que toma su ejecución. Los trabajos requieren de:

“tiempo de instalación”: el necesario para preparar el entorno operativo requerido.

“tiempo de descarga”: el necesario para desmontar el entorno operativo que fue requerido.

105

Page 121: Libro de Texto. Sistemas Operativos

Durante la instalación y descarga de los trabajos la cpu no está ejecutando dichos trabajos requeridos, por lo cual:

Automatizar la “transición de trabajo a trabajo” reduce la cantidad de tiempo perdido entre trabajos.

Surgieron los sistemas de “procesamiento por lotes”.

En el “procesamiento por lotes de flujo único” los trabajos se agrupan en “lotes” encolándose para su ejecución. El “procesador de flujos de trabajos”:

Lee las instrucciones del “lenguaje de control de trabajos”. Facilita la preparación del trabajo siguiente. Emite instrucciones al operador del sistema. Automatiza funciones anteriormente manuales. Cuando finaliza un trabajo efectúa las “operaciones de mantenimiento”

apropiadas para facilitar la transición del siguiente trabajo. 3.2.5 Multiprogramación de partición fija, partición variable, con intercambio de

almacenamiento.

Multiprogramación de Partición Fija.

Los sistemas de un solo usuario desperdician gran cantidad de recursos computacionales debido a que (Deitel, 1993) (ver Figura 3.4[Deitel, 1993]):

Cuando ocurre una petición de e / s la cpu normalmente no puede continuar el proceso hasta que concluya la operación de e / s requerida.

Los periféricos de e / s frenan la ejecución de los procesos ya que comparativamente la cpu es varios órdenes de magnitud más rápida que los dispositivos de e / s.

106

Page 122: Libro de Texto. Sistemas Operativos

Los sistemas de “multiprogramación” permiten que varios procesos usuarios compitan al mismo tiempo por los recursos del sistema:

Un trabajo en espera de e / s cederá la cpu a otro trabajo que esté listo para efectuar cómputos.

Existe paralelismo entre el procesamiento y la e / s. Se incrementa la utilización de la cpu y la capacidad global de ejecución

del sistema. Es necesario que varios trabajos residan a la vez en la memoria principal.

Multiprogramación de Partición Fija: Traducción y Carga Absolutas.

Las “particiones” del almacenamiento principal:

Son de tamaño fijo. Alojan un proceso cada una. La cpu se cambia rápidamente entre los procesos creando la ilusión de

simultaneidad.

Los trabajos se traducían con ensambladores y compiladores absolutos para ser ejecutados solo dentro de una partición específica (ver Figura 3.5).

107

Page 123: Libro de Texto. Sistemas Operativos

El S. O. resulta de implementación relativamente sencilla pero no se optimiza la utilización de la memoria.

Multiprogramación de Partición Fija: Traducción y Carga Relocalizables.

Los compiladores, ensambladores y cargadores de relocalización:

Se usan para producir programas relocalizables que puedan ser ejecutados en cualquier partición disponible de tamaño suficiente para aceptarlos (ver Figura 3.6).

Son más complejos que los absolutos. Mejoran la utilización del almacenamiento. Confieren más flexibilidad en el armado de la carga de procesos.

108

Page 124: Libro de Texto. Sistemas Operativos

Protección en los Sistemas de Multiprogramación

Si se utiliza asignación contigua de memoria la protección suele implementarse con varios “registros de límites” (ver Figura 3.7 y Figura 3.8[Deitel, 1993]).

Los extremos superior e inferior de una partición pueden ser:

Delineados con dos registros. Indicados el límite inferior o superior y el tamaño de la partición o región.

109

Page 125: Libro de Texto. Sistemas Operativos

Fragmentación en la Multiprogramación de Partición Fija

La “fragmentación de almacenamiento” ocurre en todos los sistemas independientemente de su organización de memoria.

En los S. O. de multiprogramación de partición fija la fragmentación se produce cuando:

Los trabajos del usuario no llenan completamente sus particiones designadas.

Una partición permanece sin usar porque es demasiado pequeña para alojar un trabajo que está en espera.

Multiprogramación de Partición Variable.

Los procesos ocupan tanto espacio como necesitan, pero obviamente no deben superar el espacio disponible de memoria (ver Figura 3.9[Deitel, 1993]).

No hay límites fijos de memoria, es decir que la partición de un trabajo es su propio tamaño.

Se consideran “esquemas de asignación contigua”, dado que un programa debe ocupar posiciones adyacentes de almacenamiento.

110

Page 126: Libro de Texto. Sistemas Operativos

Los procesos que terminan dejan disponibles espacios de memoria principal llamados “agujeros”:

Pueden ser usados por otros trabajos que cuando finalizan dejan otros “agujeros” menores.

En sucesivos pasos los “agujeros” son cada vez más numerosos pero más pequeños, por lo que se genera un desperdicio de memoria principal.

Combinación de agujeros (áreas libres) Consiste en fusionar agujeros adyacentes para formar uno sencillo más grande. Se puede hacer cuando un trabajo termina y el almacenamiento que libera tiene límites con otros agujeros.

Compresión o Compactación de Almacenamiento.

Puede ocurrir que los agujeros (áreas libres) separados distribuidos por todo el almacenamiento principal constituyan una cantidad importante de memoria:

Podría ser suficiente (el total global disponible) para alojar a procesos encolados en espera de memoria.

Podría no ser suficiente ningún área libre individual (ver Figura 3.10[Deitel, 1993]).

La técnica de compresión de memoria implica pasar todas las áreas ocupadas del almacenamiento a uno de los extremos de la memoria principal:

Deja un solo agujero grande de memoria libre contigua. Esta técnica se denomina “recogida de residuos” (ver Figura 3.11[Deitel,

1993]).

111

Page 127: Libro de Texto. Sistemas Operativos

Principales desventajas de la compresión

Consume recursos del sistema (ver Figura 3.12[Deitel, 1993]).

El sistema debe detener todo mientras efectúa la compresión, lo que puede afectar los tiempos de respuesta.

112

Page 128: Libro de Texto. Sistemas Operativos

Implica la relocalización (reubicación) de los procesos que se encuentran en la memoria:

La información de relocalización debe ser de accesibilidad inmediata.

Una alta carga de trabajo significa mayor frecuencia de compresión que incrementa el uso de recursos.

Estrategias de Colocación del Almacenamiento Se utilizan para determinar el lugar de la memoria donde serán colocados los programas y datos que van llegando y se las clasifica de la siguiente manera:

“Estrategia de mejor ajuste”: o Un trabajo nuevo es colocado en el agujero en el cual quepa de

forma más ajustada: Debe dejarse el menor espacio sin usar.

“Estrategia de primer ajuste”: o Un trabajo nuevo es colocado en el primer agujero disponible con

tamaño suficiente para alojarlo. “Estrategia de peor ajuste”:

o Consiste en colocar un programa en el agujero en el que quepa de la peor manera, es decir en el más grande posible:

El agujero restante es también grande para poder alojar a un nuevo programa relativamente grande.

Multiprogramación con Intercambio de Almacenamiento.

En el esquema de “intercambio” los programas del usuario no requieren permanecer en la memoria principal hasta su terminación (Deitel, 1993).

Una variante consiste en que un trabajo se ejecuta hasta que ya no puede continuar:

Cede el almacenamiento y la cpu al siguiente trabajo. La totalidad del almacenamiento se dedica a un trabajo durante un breve

período de tiempo. Los trabajos son “intercambiados”, dándose que un trabajo puede ser

intercambiado varias veces antes de llegar a su terminación.

Es un esquema razonable y eficiente para un número relativamente reducido de procesos de usuarios. Los sistemas de intercambio fueron los predecesores de los sistemas de paginación. El rendimiento de los sistemas de intercambio mejora al reducir el tiempo de intercambio:

Manteniendo al mismo tiempo varias “imágenes de usuario o imágenes de memoria” en la memoria principal.

113

Page 129: Libro de Texto. Sistemas Operativos

Retirando una imagen de usuario de la memoria principal solo cuando es necesario su almacenamiento para una nueva imagen.

Incrementando la cantidad de memoria principal disponible en el sistema.

Las imágenes de usuario (imágenes de memoria) retiradas del almacenamiento principal se graban en el almacenamiento secundario (discos).

3.3Organización de memoria virtual.3.3.1 Evaluación de las organizaciones de almacenamiento.

“Almacenamiento virtual” significa la capacidad de direccionar un espacio de almacenamiento mucho mayor que el disponible en el almacenamiento primario de determinado sistema de computación (Deitel, 1993).

Esta tecnología apareció en 1960 en la Universidad de Manchester (Inglaterra), en el sistema “Atlas”.

Los métodos más comunes de implementación son mediante:

Técnicas de “paginación”. Técnicas de “segmentación”. Una combinación de ambas técnicas.

Las direcciones generadas por los programas en su ejecución no son, necesariamente, aquellas contenidas en el almacenamiento primario (memoria real), ya que las direcciones virtuales suelen seleccionarse dentro de un número mucho mayor de direcciones que las disponibles dentro del almacenamiento primario. La evolución en las organizaciones de almacenamiento puede resumirse como sigue:

Real: o Sistemas dedicados a un solo usuario.

Real: o Sistemas de multiprogramación en memoria real:

Multiprogramación en partición fija: Absoluta. Relocalizable (reubicable).

Multiprogramación en partición variable. Virtual:

o Multiprogramación en almacenamiento virtual: Paginación pura. Segmentación pura. Combinación paginación / segmentación.

Conceptos Básicos de Almacenamiento Virtual

114

Page 130: Libro de Texto. Sistemas Operativos

La clave del concepto de memoria (almacenamiento) virtual esta en la disociación:

De las direcciones a las que hace referencia un programa. De las direcciones disponibles en la memoria real (almacenamiento

primario).

Los principales conceptos son los siguientes: “Direcciones virtuales”:

o Son las referidas por un proceso en ejecución. “Direcciones reales”:

o Son las disponibles dentro del almacenamiento primario. “Espacio de direcciones virtuales (v)” de un proceso:

o Es el número de direcciones virtuales a que puede hacer referencia el proceso.

“Espacio de direcciones reales (r)” de un computador: o Es el número de direcciones reales disponibles en el ordenador.

Los procesos hacen referencia a direcciones virtuales pero éstas deben ejecutarse en el almacenamiento real:

Las direcciones virtuales deben ser transformadas dentro de las direcciones reales, mientras el proceso está en ejecución.

La traducción de direcciones deberá hacerse rápidamente para no degradar al sistema.

Existen varios medios para asociar las direcciones virtuales con las reales (ver Figura 3.13[Deitel, 1993]).

Los mecanismos de “traducción dinámica de direcciones” (dat) convierten las direcciones virtuales en reales al ejecutarse el proceso. Las direcciones contiguas dentro del espacio de direcciones virtuales de un proceso no tienen por qué ser contiguas dentro del almacenamiento real, a esto se denomina “contigüidad artificial ” (ver Figura 3.14[Deitel, 1993]).

115

Page 131: Libro de Texto. Sistemas Operativos

Organización del Almacenamiento de Niveles Múltiples

Se deben proporcionar los medios para retener programas y datos en un gran almacenamiento auxiliar para:

Permitir que el espacio de direcciones virtuales de un usuario sea mayor que el espacio de direcciones reales.

Soportar multiprogramación de forma efectiva en un sistema con muchos usuarios que compartan el almacenamiento real.

Se utiliza un esquema de almacenamiento de dos niveles (ver Figura 3.15): Primer nivel: “almacenamiento real ”:

o En él se ejecutan los procesos y en él deben estar los datos para que un proceso pueda referirse a ellos.

116

Page 132: Libro de Texto. Sistemas Operativos

Segundo nivel: “almacenamiento auxiliar, secundario o adicional ”: o Generalmente consta de discos de gran capacidad que pueden

mantener los programas y datos que no caben al mismo tiempo en el más limitado almacenamiento real.

117

Page 133: Libro de Texto. Sistemas Operativos

Cuando se va a ejecutar un proceso su código y datos se pasan al almacenamiento principal. El almacenamiento real es compartido por varios procesos:

Cada proceso puede tener un espacio de direcciones virtuales mucho mayor que el almacenamiento real.

Solo se mantiene al mismo tiempo una pequeña parte de los programas y datos de cada proceso en el almacenamiento real.

Transformación de Bloques

Los mecanismos de traducción dinámica de direcciones deben mantener “mapas” que ilustren qué direcciones del almacenamiento virtual se encuentran en el almacenamiento real y dónde se encuentran (Deitel, 1993).

La información se agrupa en “bloques”:

El sistema está informado del lugar del almacenamiento real donde han sido colocados los bloques de almacenamiento virtual.

Cuanto mayor sea el bloque menor será la fracción del almacenamiento real que debe dedicarse a contener la información del mapa.

Con bloques grandes: o Se reduce la sobrecarga de almacenamiento del mecanismo de

transformación. o Se incrementa el tiempo de transferencia entre los

almacenamientos secundario y primario. o Consumen más almacenamiento real pudiendo limitar el número

de procesos que pueden compartirlo. Los bloques pueden ser de tamaño:

o Igual : se denominan “páginas” y la organización de almacenamiento virtual asociada se denomina “paginación”.

o Diferente: se denominan “segmentos” y la organización de almacenamiento virtual asociada se denomina “segmentación”.

Se pueden combinar ambas técnicas: segmentos de tamaño variable compuestos de páginas de tamaño fijo.

Las direcciones son “bidimensionales”, es decir que una dirección virtual “v” se indica por un par ordenado “(b,d)”, donde:

“b”: número del bloque donde reside. “d”: desplazamiento a partir del inicio del bloque.

La traducción de una dirección virtual “v = (b,d)” a la dirección real “r” considera lo siguiente (ver Figura 3.16 y Figura 3.17):

Cada proceso tiene su “tabla de mapa de bloques” mantenida por el sistema en el almacenamiento real.

118

Page 134: Libro de Texto. Sistemas Operativos

Un registro especial del procesador llamado “registro origen de la tabla de bloques” se carga con la dirección real “a” de la “tabla de mapa de bloques”:

o Contiene una entrada para cada bloque del proceso. o Las entradas se mantienen en orden secuencial para el bloque 0,

bloque 1, etc. o Se añade el bloque número “b” a la dirección base “a” de la “tabla

de bloques” para formar la dirección real de la entrada de la “tabla de mapa de bloques” para el bloque “b”:

Contiene la dirección real “b ’ ” para el bloque “b”. El desplazamiento “d” se añade a la dirección de inicio del

bloque, “b ’ ”, para formar la “dirección real” deseada: “r = b ’ + d”.

La transformación de bloques se efectúa en forma dinámica mientras se ejecuta un proceso, por lo cual, si la implementación no es eficiente, su sobrecarga puede causar una degradación del rendimiento que podría eliminar en parte las ventajas de la utilización del almacenamiento virtual.

119

Page 135: Libro de Texto. Sistemas Operativos

3.3.2 Paginación.

Conceptos Básicos de Paginación

Frecuentemente se diferencia entre la “paginación pura” y la “combinación de paginación y segmentación”(Deitel, 1993).

Las páginas se transfieren del almacenamiento secundario al primario en bloques llamados “marcos de páginas”:

Tienen el mismo tamaño que las páginas. Comienzan en direcciones del almacenamiento real que son múltiplos

enteros del tamaño fijo de la página. Podrá colocarse una nueva página dentro de cualquier “marco de página”

o “celda de página” disponible.

120

Page 136: Libro de Texto. Sistemas Operativos

La “traducción dinámica de direcciones” incluye: Un proceso en ejecución hace referencia a una dirección virtual “v = (p,d)”

(ver Figura 3.18 [7, Deitel]). Un mecanismo de transformación de páginas busca la página “p” en la

“tabla de páginas” y determina si la página “p” se encuentra en el marco de página “p ’ ”.

La dirección de almacenamiento real se forma por la concatenación de “p ’ ” y “d”.

La tabla de “mapa de páginas” debe indicar si se encuentra o no en el almacenamiento primario la página referenciada:

En caso afirmativo dónde está en la memoria real. En caso negativo dónde puede estar en el almacenamiento secundario.

La dirección de almacenamiento primario “a”, donde comienza el marco de pagina “p ’ ” (suponiendo un tamaño de página “p”), está dada por: “a = (p) (p ’)”; se supone marcos de página numerados 0, 1, 2, etc. (ver Figura 3.19, Figura 3.20 y Figura 3.21).

121

Page 137: Libro de Texto. Sistemas Operativos

122

Page 138: Libro de Texto. Sistemas Operativos

Traducción de Direcciones de Paginación por Transformación Directa

Un proceso en ejecución hace referencia a la dirección virtual v = (p,d). Antes que un proceso comience su ejecución, el S. O. carga la dirección de almacenamiento primario de la “tabla de mapa de páginas” en el “registro origen de la tabla de mapa de páginas” (Ver Figura 3.22).

123

Page 139: Libro de Texto. Sistemas Operativos

La dirección base de la tabla de mapa de páginas es “b”.

El número de página es “p”.

La dirección en el almacenamiento primario de la entrada en la tabla de mapa de páginas para la página “p” es “b + p”:

Indica que el marco de página “p ’ ” corresponde a la página virtual. “p ’ ” se concatena con el desplazamiento “d” par formar la dirección real

“r”.

“Esto es un ejemplo de transformación directa debido a que la tabla de mapa de páginas contiene una entrada por cada una de las páginas del almacenamiento virtual de este proceso”. La dirección virtual que se está traduciendo y la dirección base de la tabla de mapa de páginas son mantenidas en un registro de alta velocidad del control del procesador. La tabla de mapa de páginas transformada directamente suele mantenerse en el almacenamiento primario:

124

Page 140: Libro de Texto. Sistemas Operativos

Las referencias a esta tabla requieren un ciclo completo de almacenamiento primario, que generalmente es la parte más larga de un ciclo de ejecución de instrucciones.

Se requiere otro ciclo de ejecución de almacenamiento primario para la transformación de páginas, lo que puede ocasionar degradación equivalente a un 50%, para lo cual una solución sería tener la tabla completa de mapa de páginas de transformación directa en la “caché” de muy alta velocidad.

Traducción de Direcciones de Paginación por Transformación Asociativa

Una forma de acelerar la traducción dinámica de páginas consiste en colocar la tabla completa de mapa de páginas en un “almacenamiento asociativo” que tenga un tiempo de ciclo mucho más rápido que el almacenamiento primario. Una variante es la “transformación asociativa pura” (ver Figura 3.23).

Un programa en ejecución hace referencia a la dirección virtual v = (p,d). Cada entrada en el almacenamiento asociativo se busca de forma simultánea para la página “p”:

Se obtiene “p ’ ” como el marco de página correspondiente a la página “p”. Se concatena “p ’ ” con “d” formando la dirección real “r”.

Cada una de las células del almacenamiento asociativo se registra de manera simultánea:

Hace costoso el almacenamiento asociativo. Implementar la transformación asociativa pura resulta demasiado costoso,

tal lo ocurrido con la implementación de la transformación directa pura utilizando “caché”.

Traducción de Direcciones de Paginación por Combinación de Transformación Asociativa / Directa

125

Page 141: Libro de Texto. Sistemas Operativos

Se utiliza un almacenamiento asociativo capaz de mantener solo un pequeño porcentaje del mapa completo de páginas para un proceso (ver Figura 3.24).

Las entradas de página contenidas en este mapa reducido corresponden solo a las páginas referenciadas recientemente:

Se presupone que una página recientemente referenciada tendrá posibilidades de serlo de nuevo próximamente.

Los rendimientos obtenidos con este esquema de mapa asociativo parcial superan aproximadamente en un 100 % a los rendimientos obtenidos con esquemas de mapa asociativo de página completo.

Un programa hace referencia a la dirección virtual v = (p,d). El mecanismo de traducción de direcciones intenta encontrar la página “p” en el mapa de página asociativo parcial:

Si “p” se encuentra allí: o El mapa asociativo devuelve “p ’ ” como el número de marco de

página correspondiente a la página virtual “p”.

126

Page 142: Libro de Texto. Sistemas Operativos

o “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 “p” no se encuentra en el mapa de pagina parcial: o Se utiliza un mapa directo convencional. o La dirección “b” del registro de origen de la tabla de páginas se

añade a “p” para localizar la entrada apropiada a la página “p” en la tabla de mapa de páginas de transformación directa del almacenamiento primario.

o La tabla indica que “p ’ ” es el marco de página correspondiente a la página virtual “p”.

o “p ’ ” se concatena con el desplazamiento “d” para formar la dirección real “r” correspondiente a la dirección virtual v = (p,d).

Compartimiento de Recursos en un Sistema de Paginación

En sistemas multiprogramados, especialmente en los de tiempo compartido, es común que más de un usuario estén ejecutando los mismos programas:

Para optimizar el uso de la memoria real se comparten las páginas que pueden ser compartidas:

o El compartimiento debe ser cuidadosamente controlado para evitar que un proceso modifique datos que otro proceso esta leyendo (ver Figura 3.25 [7, Deitel]).

o Los programas se encuentran divididos en áreas separadas de “procedimiento” y “datos”.

o Los procedimientos no modificables se llaman “procedimientos puros reentrantes”.

o Los datos y procedimientos modificables no pueden ser compartidos.

o Los datos no modificables (ej.: tablas fijas) son compartibles. Se debe identificar cada página como compartible o no. Habrá marcos (celdas) de páginas compartidos por varios procesos.

127

Page 143: Libro de Texto. Sistemas Operativos

El compartimiento: Reduce la cantidad de almacenamiento primario necesario para la

ejecución eficaz de un grupo de procesos. Puede hacer posible que un sistema determinado mantenga una cantidad

mayor de usuarios (procesos).

128

Page 144: Libro de Texto. Sistemas Operativos

3.3.3 Segmentación.

Segmentación

En los sistemas de “segmentación” un programa y sus datos pueden ocupar varios bloques separados de almacenamiento real (ver Figura 3.26[Deitel, 1993]).

Los bloques:

No necesitan ser de igual tamaño. Los bloques separados no necesitan ser adyacentes. Deben estar compuestos de posiciones contiguas de almacenamiento.

Se complica la protección de bloques de memoria de un proceso de usuario. Es más difícil limitar el rango de acceso de cualquier programa [7, Deitel]. Un esquema posible de protección es el uso de claves de protección del almacenamiento (ver Figura 3.27):

Las claves están bajo el control estricto del S. O. Un programa de usuario, a quien corresponde una cierta clave en la cpu,

solo puede hacer referencia a los otros bloques del almacenamiento con igual clave de protección.

129

Page 145: Libro de Texto. Sistemas Operativos

Una dirección virtual es un par ordenado v=(s,d) (ver Figura 3.28): “s” es el número del segmento del almacenamiento virtual en el cual

residen los elementos referidos. “d” es el desplazamiento en el segmento “s” en el cual se encuentra el

elemento referido.

130

Page 146: Libro de Texto. Sistemas Operativos

Un proceso solo puede ejecutarse si su segmento actual (como mínimo) está en el almacenamiento primario. Los segmentos se transfieren del almacenamiento secundario al primario como unidades completas. Un nuevo segmento puede ser colocado en una serie disponible de posiciones contiguas del almacenamiento primario de tamaño suficiente para alojar al segmento. La traducción dinámica de direcciones utiliza una “tabla de mapa de segmentos”.

Control de Acceso en Sistemas de Segmentación

Se le otorga a cada proceso ciertos derechos de acceso a todos los segmentos y se le niega completamente el acceso a muchos otros. Si un proceso tiene “acceso de lectura” a un segmento, puede obtener cualquier elemento de información contenido en ese segmento. Si un proceso tiene “acceso de escritura” a un segmento, puede modificar cualquier contenido del segmento y puede introducirle información adicional, incluso destruir toda la información del segmento. Un proceso con “acceso de ejecución” de un segmento puede ejecutarlo como si fuera un programa. Un proceso con “acceso de adición” puede escribir información adicional al final del segmento, pero no puede modificar la información existente. En base a los “tipos de control de acceso” indicados pueden crearse distintos “modos de control de acceso”. Ejemplos de combinación de los accesos de lectura, escritura y ejecución para producir modos de protección útiles se dan en la Tabla 3.1 y en la Tabla 3.2.  

Modo Lectura Escritura Ejecución Explicación

0 N N NNo hay permiso de acceso

1 N N S Solo ejecución

2 S N N Solo lectura

3 S N S Lectura / ejecución

4 S S NLectura / escritura pero no ejecución

5 S S S Acceso no limitado

Tabla 3.1: Ejemplo de combinación de accesos.

 

Modo Aplicación

131

Page 147: Libro de Texto. Sistemas Operativos

0 Seguridad

1Un programa disponible a los usuarios, que no pueden copiarlo ni modificarlo, pero sí ejecutarlo

2 Recuperación de información

3Un programa puede ser copiado o ejecutado, pero no puede ser modificado

4Protege los datos contra un intento erróneo de ejecutarlos

5Este acceso se concede a los usuarios de confianza

Tabla 3.2: Ejemplo de aplicaciones de la combinación de accesos.

Traducción de Direcciones de Segmentación por Transformación Directa

Existen varias estrategias para la implementación de la traducción de direcciones de segmentación:

Por transformación directa, asociativa o combinación de asociativa / directa.

Con caché suficiente para alojar la tabla completa de mapa de segmentos o caché parciales que contengan solo las entradas de los segmentos de referencia más reciente (ver Figura 3.29).

Se considerará la traducción de direcciones de segmentación con la tabla completa de mapa de segmentos en la caché.

132

Page 148: Libro de Texto. Sistemas Operativos

Un proceso en ejecución hace referencia a la dirección virtual v = (s,d): El segmento número “s” se añade a la dirección base “b” en el registro

origen de la tabla de mapa de segmentos formando la dirección de memoria real “b + s”, de la entrada para el segmento “s” de la tabla de mapa de segmentos, que contiene la dirección del almacenamiento primario “s ’ ”, donde comienza el segmento.

El desplazamiento “d” se añade a “s ’ ” formando la dirección real “r = d + s ’ ”, correspondiente a la dirección virtual “v = (s,d)”.

Un “bit de residencia”, “r”, indica si en la actualidad el segmento se encuentra o no en el almacenamiento primario. Si el segmento se encuentra en el almacenamiento primario “s ’ ” es la dirección en este almacenamiento donde comienza el segmento. Si el segmento no se encuentra en el almacenamiento primario “a” es la dirección en el almacenamiento secundario de donde debe recuperarse antes que el proceso pueda continuar. Se compara cada referencia a un segmento con los bits de protección para determinar si se permite la operación que se está intentando. Si el segmento buscado no está en el almacenamiento primario se genera un “fallo de pérdida de segmento”:

El S. O. obtiene el control y carga el segmento referido desde la dirección “a” del almacenamiento secundario.

Se comprueba si el desplazamiento “d” es menor o igual a la longitud del segmento “l ”:

o Si no es así se genera un “fallo de desbordamiento de segmento” y el S. O. obtiene el control y termina la ejecución del proceso.

o Si el desplazamiento está en el rango del segmento se comprueban los bits de protección para asegurarse si se permite la operación que se está intentando:

Si es así entonces la dirección base del segmento, “s ’ ”, en el almacenamiento primario se añade al desplazamiento “d” formando la dirección de memoria real “r = s ’ + d”, que corresponde a la dirección del almacenamiento virtual “v = (s,d)”.

Si la operación intentada no se permite se genera un “fallo de protección de segmento” y el S. O. obtiene el control y termina la ejecución del proceso.

Compartimiento en un Sistema de Segmentación

Una de las ventajas de la segmentación sobre la paginación es que se trata más de un hecho lógico que físico:

En un sistema de segmentación, una vez que un segmento ha sido declarado como compartido, entonces las estructuras que lo integran pueden cambiar de tamaño.

133

Page 149: Libro de Texto. Sistemas Operativos

Lo anterior no cambia el hecho lógico de que residen en un segmento compartido.

Dos procesos pueden compartir un segmento con solo tener entradas en sus tablas generales que apunten al mismo segmento del almacenamiento primario (ver Figura 3.30).

3.3.4 Sistemas de paginación segmentación.

Sistemas de Paginación / Segmentación

Ofrecen las ventajas de las dos técnicas de organización del almacenamiento virtual (Deitel, 1993). El tamaño de los segmentos es múltiplo del de las páginas.

No es necesario que todas las páginas de un segmento se encuentren al mismo tiempo en el almacenamiento primario.

Las páginas de almacenamiento virtual, que son contiguas en este almacenamiento, no necesitan ser contiguas en el almacenamiento real.

El direccionamiento es tridimensional con una dirección de almacenamiento virtual “v = (s,p,d)”:

“s” es el número del segmento. “p” es el número de página. “d” es el desplazamiento en la página donde se encuentra asignado el

elemento deseado.

Traducción Dinámica de Direcciones en Sistemas de Paginación / Segmentación

Se considera la traducción dinámica de direcciones de virtuales a reales en un sistema de paginación / segmentación utilizando la combinación de transformación asociativa / directa (ver Figura 3.31).

134

Page 150: Libro de Texto. Sistemas Operativos

El proceso en ejecución hace referencia a la dirección virtual v = (s,p,d) (ver Figura 3.32).

135

Page 151: Libro de Texto. Sistemas Operativos

Las páginas de referencia más reciente tienen entradas en un almacenamiento asociativo. Se realiza una búsqueda asociativa para intentar localizar (s,p) en el almacenamiento asociativo:

Si se encuentra (s,p), entonces el marco de página “p ’ ” en el cual reside dicha página en la memoria real, se concatena al desplazamiento “d” para formar la dirección de memoria real “r” correspondiente a la dirección virtual v= (s,p,d).

Si no se encuentra (s,p), entonces: o La dirección base “b” de la tabla de segmentos se añade al número

de segmento “s” formando la dirección “b + s” de la entrada de la

136

Page 152: Libro de Texto. Sistemas Operativos

tabla de mapa de segmentos para el segmento “s” de la memoria real.

o La entrada de la tabla de mapa de segmentos indica la dirección base “s ’ ” de la tabla de páginas para el segmento “s”.

o El número de página “p” se añade a “s ’ ” formando la dirección “p + s ’ ” de la entrada en la tabla de páginas para la página “p” del segmento “s”:

Indica que “p ’ ” es el número del marco correspondiente a la página virtual “p”.

“p ’ ” se concatena con el desplazamiento “d” formando la dirección real “r ” que corresponde a la dirección virtual v = (s,p,d).

Si el segmento “s” no se encuentra en el almacenamiento primario se produce un “fallo de pérdida de segmento”, cuyo caso el S. O. localiza el segmento en el almacenamiento secundario, crea una tabla de páginas para el segmento y carga la página apropiada en el almacenamiento primario, pudiendo producir reemplazos de páginas. Si el segmento “s” está en el almacenamiento primario y si la referencia a la tabla de mapa de páginas indica que la página deseada no se encuentra en el almacenamiento primario, se produce un “fallo de pérdida de página”, en tal caso el S. O. obtiene el control, localiza la página en el almacenamiento secundario y la carga, pudiendo reemplazar otra página. Si una dirección de almacenamiento virtual está más allá del final del segmento se genera un “fallo de desbordamiento de segmento”, el que debe ser atendido por el S. O. Si los bits de protección indican que la operación que se va a ejecutar en la dirección virtual referida no se permite, se genera un “fallo de protección de segmento”, el que también debe ser atendido por el S. O. Si se utiliza un mecanismo de transformación directa pura, manteniendo el mapa completo dentro del almacenamiento primario, la referencia promedio de almacenamiento virtual requeriría:

Un ciclo de almacenamiento para acceder a la tabla de mapa de segmentos.

Un segundo ciclo de almacenamiento para hacer referencia a la tabla de mapa de páginas.

Un tercer ciclo de almacenamiento para referenciar al elemento deseado del almacenamiento real.

Cada referencia a un elemento comprende tres ciclos de almacenamiento: El sistema correría casi a 1 / 3 de su velocidad nominal. La traducción de direcciones insumiría 2 / 3 del tiempo.

Con la utilización de registros asociativos (por ej. 16 registros), se logran velocidades de ejecución del 90 % o más de la velocidad total de procesamiento de sus procesadores de control.

137

Page 153: Libro de Texto. Sistemas Operativos

La estructura de tablas de procesos, de mapas de segmentos y de mapas de páginas puede consumir un porcentaje importante del almacenamiento primario cuando se ejecutan un gran número de procesos. La traducción procede mucho más rápido si todas las tablas están en el almacenamiento primario, lo que resta espacio para los procesos.

Compartimiento en un Sistema de Paginación / Segmentación

Se implementa disponiendo entradas en tablas de mapa de segmentos para diferentes procesos que apunten a la misma tabla de mapa de páginas (ver Figura 3.33).

El compartimiento requiere una administración cuidadosa por parte del S. O., ya sea en sistemas de paginación, segmentación o paginación / segmentación, pues se debe considerar qué sucedería si una nueva página reemplazara a otra página compartida por muchos procesos.

3.4 Administración de memoria virtual.3.4.1 Estrategias de administración.

138

Page 154: Libro de Texto. Sistemas Operativos

Las diferentes organizaciones de almacenamiento virtual generalmente implementadas son (Deitel, 1993):

Paginación. Segmentación. Segmentación y paginación.

Las estrategias para la administración de sistemas de almacenamiento virtual condicionan la conducta de los sistemas de almacenamiento virtual que operan según esas estrategias. Se consideran las siguientes estrategias:

“Estrategias de búsqueda”: o Tratan de los casos en que una página o segmento deben ser

traídos del almacenamiento secundario al primario. o Las estrategias de “búsqueda por demanda” esperan a que se

haga referencia a una página o segmento por un proceso antes de traerlos al almacenamiento primario.

o Los esquemas de “búsqueda anticipada” intentan determinar por adelantado a qué páginas o segmentos hará referencia un proceso para traerlos al almacenamiento primario antes de ser explícitamente referenciados.

“Estrategias de colocación”: o Tratan del lugar del almacenamiento primario donde se colocará

una nueva página o segmento. o Los sistemas toman las decisiones de colocación de una forma

trivial ya que una nueva página puede ser colocada dentro de cualquier marco de página disponible.

“Estrategias de reposición”: o Tratan de la decisión de cuál página o segmento desplazar para

hacer sitio a una nueva página o segmento cuando el almacenamiento primario está completamente comprometido.

Estrategias de Reposición de Página

Las principales son:

1. El principio de optimización. 2. Reposición de páginas al azar. 3. Primero en entrar - primero en salir. 4. Menos recientemente usada. 5. Menos frecuentemente usada. 6. No usada recientemente. 7. Conjuntos de trabajo.

139

Page 155: Libro de Texto. Sistemas Operativos

El Principio de Optimización. El “principio de optimización” indica que para obtener un rendimiento óptimo, la página que se va a reponer es una que no se va a utilizar en el futuro durante el período de tiempo más largo.

El problema es que no es factible predecir el futuro.

Reposición de Página al Azar. Consiste en escoger al azar la página que va a ser reemplazada. Todas las páginas del almacenamiento principal deben tener la misma probabilidad de ser reemplazadas. Debe poder seleccionar cualquier página, incluyendo la que va a ser referenciada a continuación (peor selección). Este esquema es raramente usado.

Reposición de Página por el Sistema de Primero en Entrar -Primero en Salir (FIFO). Se registra el momento en que cada página ingresa al almacenamiento primario. Para reemplazar una página, se selecciona aquella que ha estado más tiempo almacenada. Se presenta el inconveniente de que se pueden reemplazar páginas muy usadas, que serán llamadas de nuevo al almacenamiento primario casi de inmediato. Se puede presentar la llamada “anomalía FIFO”: Belady, Nelson y Shedler descubrieron que con la reposición FIFO, ciertos patrones de referencias de páginas causan más fallos de páginas cuando se aumenta el número de marcos (celdas) de páginas asignados a un proceso: en esto consiste la “anomalía FIFO”.

Esta anomalía contradice a la intuición (ver Figura 3.34).

140

Page 156: Libro de Texto. Sistemas Operativos

Reposición de Página Menos - Recientemente - Usada (LRU). Esta estrategia selecciona para ser reemplazada la página que no ha sido usada durante el mayor período de tiempo. Se basa en la heurística de que el pasado reciente es un buen indicador del futuro próximo. Requiere que cada página reciba un “sello de tiempo” cada vez que se referencia:

Puede significar una sobrecarga adicional importante. No se implementa frecuentemente.

La página seleccionada para reemplazo podría ser la próxima en ser requerida, por lo que habría que paginarla de nuevo al almacenamiento principal casi de inmediato.

Reposición de Página Menos - Frecuentemente - Usada (LFU). Interesa la intensidad de uso que haya tenido cada página. La página que será reemplazada es aquella que ha sido usada con menos frecuencia o que ha sido referida con menos intensidad. El inconveniente es que se puede seleccionar fácilmente para su reposición la página equivocada:

Ej.: La página de uso menos frecuente puede ser la página de entrada más reciente al almacenamiento principal, y por lo tanto existe una alta probabilidad de que sea usada de inmediato.

Reposición de Página No Usada - Recientemente (NUR). Presupone que las páginas que no han tenido uso reciente tienen poca probabilidad de ser usadas en el futuro próximo y pueden ser reemplazadas por otras nuevas. Es deseable reemplazar una página que no ha sido cambiada mientras estaba en el almacenamiento primario. La estrategia NUR se implementa con la adición de dos bits de hardware por página:

“Bit referenciado”: o = 0 si la página no ha sido referenciada. o = 1 si la página ha sido referenciada.

“Bit modificado” (también llamado “bit sucio”): o = 0 si la página no ha sido modificada. o = 1 si la página ha sido modificada.

La selección de la página que será reemplazada comienza buscando una página que no ha sido referenciada, pero si no la encuentra habrá que reemplazar una página que ha sido referenciada. Si una página ha sido referenciada se comprueba si ha sido modificada o no:

Si no ha sido modificada se la reemplaza: o Su reposición representa menos sobrecarga que la de una página

modificada, ya que debería grabarse de nuevo en el almacenamiento secundario.

141

Page 157: Libro de Texto. Sistemas Operativos

Si no se encuentra una página que no ha sido modificada será reemplazada una página modificada.

Con el transcurso del tiempo la mayoría de los “bits referenciados” serán activados:

Se pierde la capacidad para distinguir las páginas más deseables para ser reemplazadas.

Para evitarlo se ajustan periódicamente todos los “bits referenciados” a “0”:

o Se logra un nuevo inicio. o Se vuelve vulnerable al reemplazo aún a las páginas activas, pero

solo brevemente, mientras se reajustan los bits.

Los “bits modificados” no se ajustan periódicamente según esta estrategia.

Localidad

El concepto de “localidad” expresa (Deitel, 1993):

“Los procesos tienden a hacer referencia al almacenamiento en patrones no uniformes y muy localizados”.

La “localidad” se manifiesta en el “tiempo” y en el “espacio”: Es una propiedad empírica (observada). Nunca está garantizada pero es altamente probable. Ej.: Los procesos tienden a favorecer ciertos subconjuntos de páginas, las

que tienden a ser adyacentes entre sí en el espacio de direcciones virtuales del proceso.

Está relacionada con la forma en que se escriben los programas y se organizan los datos.

“Localidad temporal”: significa que las localidades de almacenamiento referenciadas recientemente tienen una alta probabilidad de ser referenciadas en un futuro próximo:

Se apoya en la utilización de: o Formación de ciclos (loops). o Subrutinas. o Pilas. o Variables usadas para contar y totalizar.

“Localidad en el espacio”: significa que las referencias de almacenamiento tienden a acumularse de manera tal que, una vez que se hace referencia a una localidad, es muy probable que las localidades cercanas sean también referenciadas:

Se apoya en la utilización de: o Recorrido de arreglos.

142

Page 158: Libro de Texto. Sistemas Operativos

o Ejecución secuencial de código. o Tendencia de los programadores a colocar definiciones de

variables relacionadas, próximas entre sí.

Un programa puede ejecutar eficientemente mientras su subconjunto de páginas preferido se encuentre en el almacenamiento primario. El número de fallos de páginas de un proceso depende de la cantidad de almacenamiento primario disponible para sus páginas. Generalmente los procesos no muestran patrones de referencias aleatorios uniformemente distribuidos por sus diferentes páginas. Al reducir el número de marcos (celdas) de páginas disponibles para un proceso existe un intervalo durante el cual la razón de fallos de páginas no se afecta excesivamente. En determinado punto, cuando se reduce más el número de marcos de páginas, el número de fallos de páginas aumenta drásticamente. Mientras el subconjunto de páginas favorecidas por un proceso permanezca en el almacenamiento primario, el número de fallos de páginas no aumenta mucho. Tan pronto como las páginas del subconjunto favorecido son retiradas del almacenamiento primario, la actividad de paginación del proceso aumenta en gran medida al referenciar y traer de nuevo estas páginas al almacenamiento primario. Los “subconjuntos favorecidos” también son llamados “conjuntos de trabajo” o “working sets” (ver Figura 3.35).

Conjuntos de Trabajo

Denning desarrolló un punto de vista de la actividad de paginación de un programa llamado la “teoría de conjunto de trabajo del comportamiento de un programa” (Deitel, 1993). Un “conjunto de trabajo” es una colección de páginas a las cuales un proceso hace activamente referencia.

143

Page 159: Libro de Texto. Sistemas Operativos

Denning sostenía que para que un programa se ejecutara eficientemente, su conjunto de trabajo debe ser mantenido en el almacenamiento primario, para evitar la “hiperpaginación”. Una “política de administración de almacenamiento por conjunto de trabajo” trata de mantener el conjunto de trabajo de los programas activos en el almacenamiento primario. La decisión de añadir un nuevo proceso al conjunto activo de procesos (aumentar el nivel de multiprogramación):

Se basa en si hay suficiente espacio disponible en el almacenamiento primario como para acomodar el conjunto de trabajo del nuevo proceso.

Se toma generalmente de forma heurística ya que es imposible para el sistema conocer por anticipado el tamaño del conjunto de trabajo de un proceso dado.

El conjunto de trabajo de páginas de un proceso “w(t,w)” en el momento “t” es el conjunto de páginas referidas por un proceso durante el intervalo de tiempo del proceso “t - w” a “t ” (ver Figura 3.36).

El “tiempo del proceso” es el tiempo durante el cual este proceso tiene la cpu. La variable “w” se denomina “tamaño de la ventana del conjunto de trabajo”:

La determinación del tamaño de “w” es muy importante. Al aumentar el tamaño de la ventana “w” aumenta el tamaño del conjunto

de trabajo (ver Figura 3.37).

144

Page 160: Libro de Texto. Sistemas Operativos

“El verdadero conjunto de trabajo de un proceso es el conjunto de páginas que deben estar en el almacenamiento primario para la ejecución eficaz de este proceso”. Los conjuntos de trabajo cambian mientras un proceso está en ejecución:

Complica la administración precisa del almacenamiento primario en base a esta estrategia.

“Los conjuntos de trabajo son transitorios y el siguiente conjunto de trabajo del proceso puede diferir substancialmente de su conjunto de trabajo anterior”.

Se debe evitar un exceso de compromiso del almacenamiento primario y la consecuente hiperpaginación.

3.4.2 Técnicas de reemplazo de páginas.3.4.3 Paginación por demanda.

Las páginas son cargadas por demanda (Deitel, 1993).

No se llevan páginas del almacenamiento secundario al primario hasta que son referenciadas explícitamente por un proceso en ejecución.

Las razones del atractivo de esta estrategia son:

Los resultados de computabilidad, en especial el “problema de parada”, indican que el camino que tomará la ejecución de un programa no se puede predecir con exactitud.

Garantiza que solo las páginas que necesita el proceso sean traídas al almacenamiento principal.

La sobrecarga de proceso para decidir qué página traer al almacenamiento principal es mínima.

El principal inconveniente está en los procesos que requieren acumular sus páginas una por una:

Los tiempos de espera de páginas son considerables.

145

Page 161: Libro de Texto. Sistemas Operativos

Es creciente la cantidad de almacenamiento primario afectada al proceso que espera páginas, por lo que el “producto espacio - tiempo” se incrementa.

El “producto espacio - tiempo” indica la cantidad de almacenamiento que usa un proceso y la cantidad de tiempo que lo usa. “La reducción del producto espacio - tiempo de las esperas de páginas de un proceso es una meta importante de las estrategias de administración del almacenamiento” (ver Figura 3.38).

3.4.4 Paginación anticipada.

El S. O. intenta predecir las páginas que un proceso va a necesitar y a continuación precarga estas páginas cuando hay espacio disponible (Deitel, 1993).

Mientras el proceso ejecuta sus páginas actuales, el sistema carga páginas nuevas que estarán disponibles cuando el proceso las pida, debido a ello, el tiempo de ejecución de un proceso se puede reducir.

3.4.5 Liberación de página.

Un proceso usuario puede emitir una “liberación voluntaria de página” para liberar el marco de página cuando ya no necesitara esa página (Deietl, 1993).

Se puede eliminar el “desperdicio” y acelerar la ejecución.

El inconveniente es que la incorporación de mandatos de liberación de páginas dentro de los programas de usuarios puede ser peligroso y retrasar el desarrollo de aplicaciones.

146

Page 162: Libro de Texto. Sistemas Operativos

“Los compiladores y S. O. deberían detectar automáticamente situaciones de liberación de página mucho antes de lo que es posible con estrategias de conjuntos de trabajo”.

3.4.6 Tamaño de página.

Generalmente el almacenamiento real se divide en marcos o celdas de página de tamaño fijo (Deitel, 1993).

Los interrogantes tienen que ver con el tamaño de las páginas, si todas las páginas tendrán igual tamaño, si en caso de utilizar páginas de diferente tamaño las páginas mayores deben ser o no múltiplos enteros de las menores, etc.

Algunas consideraciones para determinar el tamaño de página son las siguientes:

Cuanto más pequeño sea el tamaño de una página, más páginas y marcos de páginas habrá y mayores serán las tablas de páginas:

o El desperdicio de almacenamiento debido al tamaño excesivo de las tablas de página se llama “fragmentación de tablas”.

o Esto indica la necesidad de páginas más grandes. Con páginas grandes, grandes cantidades de información que nunca

llegaría a ser referenciada, se paginarán hacia el almacenamiento primario:

o Esto indica la necesidad de páginas más pequeñas. Debido a que las transferencias de e / s del disco (paginación) consumen

bastante tiempo, se debe minimizar la paginación que un proceso requiera:

o Esto indica la necesidad de páginas grandes. Los programas tienden a mostrar la propiedad de localidad de referencia

y esta localidad tiende a ser pequeña: o Esto indica la necesidad de páginas pequeñas.

Los procedimientos y datos rara vez comprenden un número entero de páginas, por lo que los sistemas de paginación experimentan una “fragmentación interna”:

o El desperdicio promedio es de 1 / 2 página no usada por segmento (grupo) de páginas, que estará en la última página del segmento.

o Esto indica la necesidad de páginas pequeñas.

Los tamaños de página mas utilizados son: 512 b, 1 kb, 2 kb, 4 kb.

Comportamiento de un Programa en la Paginación

Respecto del porcentaje de las páginas de un proceso típico referenciadas desde el momento de iniciarse su ejecución:

147

Page 163: Libro de Texto. Sistemas Operativos

Un proceso tiende a hacer referencia a una parte significativa de sus páginas inmediatamente después de iniciar su ejecución.

El proceso puede concluir sin haber referenciado a algunas de sus páginas, correspondientes a rutinas que atienden errores que no se produjeron.

Respecto de variar el tamaño de la página manteniendo constante la cantidad de almacenamiento primario:

El número de fallos de páginas experimentados por un proceso en ejecución tiende a aumentar con el tamaño de la página, debido a que se traen al almacenamiento primario un mayor número de procedimientos y datos que no serán referenciados, restando lugar para los que sí lo serán.

Respecto de cómo el promedio de tiempo interfallos (tiempo entre fallos de página) varía al aumentar el número de marcos de página asignados al proceso:

Cuantos más marcos de página tenga un proceso, mayor será el tiempo entre los fallos de páginas.

El punto de inflexión se da cuando el proceso tiene todo su conjunto de trabajo en el almacenamiento primario.

Asignar marcos de página adicionales más allá del punto de inflexión no produce efectos significativos sobre el tiempo interfallos.

Respecto del porcentaje de instrucciones de una página que son ejecutadas antes de transferirse el control a otra página, los valores experimentales obtenidos indican un máximo de 200 instrucciones por página de 1 kb (ver Figura 3.39).

148

Page 164: Libro de Texto. Sistemas Operativos

149

Page 165: Libro de Texto. Sistemas Operativos

Resumen

La memoria principal puede ser considerada como un arreglo lineal de localidades de almacenamiento de un byte de tamaño. Cada localidad de almacenamiento tiene asignada una dirección que la identifica.La parte del sistema operativo que administra la memoria se llama administrador de memoria y su labor consiste en llevar un registro de las partes de memoria que se estén utilizando y aquellas que no, con el fin de asignar espacio en memoria a los procesos cuando éstos la necesiten y liberándola cuando terminen, así como administrar el intercambio entre la memoria principal y el disco en los casos en los que la memoria principal no le pueda dar capacidad a todos los procesos que tienen necesidad de ella.Los sistemas de un solo usuario desperdician gran cantidad de recursos computacionales debido a que: Cuando ocurre una petición de e / s la cpu normalmente no puede continuar el proceso hasta que concluya la operación de e / s requerida.Una vez que un programa se carga en memoria, permanece ahí hasta terminar.En el esquema de “intercambio” los programas del usuario no requieren permanecer en la memoria principal hasta su terminación. Las computadoras modernas tienen alguna forma de memoria virtual. “Almacenamiento virtual” significa la capacidad de direccionar un espacio de almacenamiento mucho mayor que el disponible en el almacenamiento primario de determinado sistema de computación. Con memoria virtual una de las técnicas de administración de memoria es la paginación. Las páginas se transfieren del almacenamiento secundario al primario en bloques llamados “marcos de páginas”. Otra técnica de administración de memoria es la segmentación: En los sistemas de “segmentación” un programa y sus datos pueden ocupar varios bloques separados de almacenamiento real.

Problemas

1. Un sistema de cómputo tiene espacio para cuatro programas en su memoria principal. Estos programas están inactivos la mitad del tiempo esperando E/S. ¿Que fracción del tiempo de CPU se desperdicia?

2. Considere un sistema de intercambio en le que la memoria contiene los siguientes huecos en orden según su posición de la memoria: 10KB, 4Kb, 20KB, 18KB, 7KB, 9B, 12KB y 15B. Cual hueco se usara si se reciben solicitudes sucesivas pidiendo: 2) 12KB b) 10KB c) 9KB.

Si se usa primer ajuste? Repita el problema usando mejor ajuste, peor ajuste y siguiente ajuste.

3. ¿Que diferencia hay entre dirección física y dirección virtual?

150

Page 166: Libro de Texto. Sistemas Operativos

4. Si una instrucción tarda 10 nanosegundos y un fallo de página tarda otros n nanosegundos, dé una formula para el tiempo de instrucción efectivo si se presenta un fallo de página cada k instrucciones.

5. ¿Si se usa reemplazo de páginas FIFO con cuatro marcos de página y ocho páginas, cuantos fallos de página se presentan con la cadena de referencias 0172327103 si los cuatro marcos están vacíos al principio? Repita el problema empleando LRU.

6. ¿Una página puede estar en dos conjuntos de trabajo el mismo tiempo? Explique.

7. ¿Si dos procesos comparten una misma página, es posible que la página sea de sólo lectura para un proceso y de lectura-escritura para el otro? ¿Por qué sí o por qué no?

8. Explique la diferencia entre fragmentación interna y fragmentación externa. ¿Cuál se presenta en los sistemas de paginación? ¿Cuál se presenta en los sistemas que usan segmentación pura?

9. Explique la técnica de administración de memoria llamada segmentación.

10. Explique las técnicas de reemplazo de páginas.

151

Page 167: Libro de Texto. Sistemas Operativos

UNIDAD 4. Administración de entrada/salida.

4.1 Dispositivos y manejadores de dispositivos (device drivers).

Una de las funciones principales de un S. O. es el control de todos los dispositivos de e / s de la computadora (Tanenbaum, 2003).

Las principales funciones relacionadas son:

Enviar comandos a los dispositivos. Detectar las interrupciones. Controlar los errores. Proporcionar una interfaz entre los dispositivos y el resto del sistema:

o Debe ser sencilla y fácil de usar. o Debe ser la misma (preferentemente) para todos los dispositivos

(independencia del dispositivo).

El código de e / s representa una fracción significativa del S. O. El uso inapropiado de los dispositivos de e/s frecuentemente genera ineficiencias del sistema, lo que afecta la performance global

Dispositivos de E / S

Se pueden clasificar en dos grandes categorías (Tanenbaum, 2003):

Dispositivos de bloque. Dispositivos de carácter.

Las principales características de los dispositivos de bloque son: La información se almacena en bloques de tamaño fijo. Cada bloque tiene su propia dirección. Los tamaños más comunes de los bloques van desde los 128 bytes hasta

los 1.024 bytes. Se puede leer o escribir en un bloque de forma independiente de los

demás, en cualquier momento. Un ejemplo típico de dispositivos de bloque son los discos.

Las principales características de los dispositivos de carácter son: La información se transfiere como un flujo de caracteres, sin sujetarse a

una estructura de bloques. No se pueden utilizar direcciones. No tienen una operación de búsqueda. Un ejemplo típico de dispositivos de carácter son las impresoras de línea,

terminales, interfaces de una red, ratones, etc.

152

Page 168: Libro de Texto. Sistemas Operativos

Algunos dispositivos no se ajustan a este esquema de clasificación, por ejemplo los relojes, que no tienen direcciones por medio de bloques y no generan o aceptan flujos de caracteres. El sistema de archivos solo trabaja con dispositivos de bloque abstractos, por lo que encarga la parte dependiente del dispositivo a un software de menor nivel, el software manejador del dispositivo.

Controladores de Dispositivos

Las unidades de e/s generalmente constan de (Tanenbaum, 2003):

Un componente mecánico. Un componente electrónico, el controlador del dispositivo o adaptador.

Muchos controladores pueden manejar más de un dispositivo. El S. O. generalmente trabaja con el controlador y no con el dispositivo. Los modelos más frecuentes de comunicación entre la cpu y los controladores son:

Para la mayoría de las micro y mini computadoras: o Modelo de bus del sistema.

Para la mayoría de los mainframes: o Modelo de varios buses y computadoras especializadas en e/s

llamadas canales de e/s.

La interfaz entre el controlador y el dispositivo es con frecuencia de muy bajo nivel:

La comunicación es mediante un flujo de bits en serie que: o Comienza con un preámbulo. o Sigue con una serie de bits (de un sector de disco, por ej.). o Concluye con una suma para verificación o un código corrector de

errores. El preámbulo:

o Se escribe al dar formato al disco. o Contiene el número de cilindro y sector, el tamaño de sector y otros

datos similares.

El controlador debe: Convertir el flujo de bits en serie en un bloque de bytes. Efectuar cualquier corrección de errores necesaria. Copiar el bloque en la memoria principal.

Cada controlador posee registros que utiliza para comunicarse con la cpu: Pueden ser parte del espacio normal de direcciones de la memoria: e/s

mapeada a memoria. Pueden utilizar un espacio de direcciones especial para la e/s, asignando

a cada controlador una parte de él.

153

Page 169: Libro de Texto. Sistemas Operativos

El S. O. realiza la e/s al escribir comandos en los registros de los controladores; los parámetros de los comandos también se cargan en los registros de los controladores. Al aceptar el comando, la CPU puede dejar al controlador y dedicarse a otro trabajo. Al terminar el comando, el controlador provoca una interrupción para permitir que el S. O.:

Obtenga el control de la CPU. Verifique los resultados de la operación.

La CPU obtiene los resultados y el estado del dispositivo al leer uno o más bytes de información de los registros del controlador. Ejemplos de controladores, sus direcciones de e/s y sus vectores de interrupción en la PC IBM pueden verse en la Tabla 4.1

 

Controlador de e / s Dirección de e / s Vector de interrupciones

Reloj 040 - 043 8

Teclado 060 - 063 9

Disco duro 320 - 32f  13

Impresora 378 - 37f  15

Disco flexible 3f0 - 3f7 14

Rs232 primario 3f8 - 3ff  12

Rs232 secundario 2f8 - 2ff  11

Tabla 4.1: Controladores de e/s, direcciones de e/s y vector de interrupciones.

Acceso Directo a Memoria (DMA)

Muchos controladores, especialmente los correspondientes a dispositivos de bloque, permiten el DMA.

Si se lee el disco sin DMA:

El controlador lee en serie el bloque (uno o más sectores) de la unidad: o La lectura es bit por bit. o Los bits del bloque se graban en el buffer interno del controlador.

Se calcula la suma de verificación para corroborar que no existen errores de lectura.

El controlador provoca una interrupción. El S. O. lee el bloque del disco por medio del buffer del controlador:

o La lectura es por byte o palabra a la vez.

154

Page 170: Libro de Texto. Sistemas Operativos

o En cada iteración de este ciclo se lee un byte o una palabra del registro del controlador y se almacena en memoria.

Se desperdicia tiempo de la CPU.

DMA se ideó para liberar a la CPU de este trabajo de bajo nivel. La CPU le proporciona al controlador:

La dirección del bloque en el disco. La dirección en memoria adonde debe ir el bloque. El número de bytes por transferir.

Luego de que el controlador leyó todo el bloque del dispositivo a su buffer y de que corroboró la suma de verificación:

Copia el primer byte o palabra a la memoria principal. Lo hace en la dirección especificada por medio de la dirección de

memoria de DMA. Incrementa la dirección DMA y decrementa el contador DMA en el

número de bytes que acaba de transferir. Se repite este proceso hasta que el contador se anula y por lo tanto el

controlador provoca una interrupción. Al iniciar su ejecución el S. O. luego de la interrupción provocada, no

debe copiar el bloque en la memoria, porque ya se encuentra ahí (ver Figura 4.1).

Fig. 4.1 Un controlador realiza completamente una transferencia DMA

El controlador necesita un buffer interno porque una vez iniciada una transferencia del disco:

Los bits siguen llegando del disco constantemente. No interesa si el controlador está listo o no para recibirlos. Si el controlador intentara escribir los datos en la memoria directamente:

o Tendría que recurrir al bus del sistema para c / u de las palabras (o bytes) transferidas.

o El bus podría estar ocupado por otro dispositivo y el controlador debería esperar.

155

Page 171: Libro de Texto. Sistemas Operativos

o Si la siguiente palabra llegara antes de que la anterior hubiera sido almacenada, el controlador la tendría que almacenar en alguna parte.

Si el bloque se guarda en un buffer interno: El bus no se necesita sino hasta que el DMA comienza. La transferencia DMA a la memoria ya no es un aspecto crítico del

tiempo.

Los controladores simples no pueden atender la e / s simultánea: Mientras transfieren a la memoria, el sector que pasa debajo de la cabeza

del disco se pierde; es decir que el bloque siguiente al recién leído se pierde.

La lectura de una pista completa se hará en dos rotaciones completas, una para los bloques pares y otra para los impares.

Si el tiempo necesario para una transferencia de un bloque del controlador a la memoria por medio del bus es mayor que el tiempo necesario para leer un bloque del disco:

o Sería necesario leer un bloque y luego saltar dos o más bloques. o El salto de bloques:

Se ejecuta para darle tiempo al controlador para la transferencia de los datos a la memoria.

Se llama separación. Al formatear el disco, los bloques se numeran tomando en

cuenta el factor de separación (ver Figura 4.2). Esto permite al S. O.:

Leer los bloques con numeración consecutiva. Conservar la máxima velocidad posible del hardware.

Fig. 4.2 Factores de separación: sin separación, separación simple y separación doble.

4.2 Mecanismos y funciones de los manejadores de dispositivos (device drivers).

La labor de un manejador de dispositivos es la de (Tanenbaum, 2003):

156

Page 172: Libro de Texto. Sistemas Operativos

Aceptar las solicitudes abstractas que le hace el software independiente del dispositivo.

Verificar la ejecución de dichas solicitudes.

Si al recibir una solicitud el manejador está ocupado con otra solicitud, agregara la nueva solicitud a una cola de solicitudes pendientes. La solicitud de e/s, por ej. para un disco, se debe traducir de términos abstractos a términos concretos:

El manejador de disco debe: o Estimar el lugar donde se encuentra en realidad el bloque

solicitado. o Verificar si el motor de la unidad funciona. o Verificar si el brazo está colocado en el cilindro adecuado, etc. o Resumiendo: debe decidir cuáles son las operaciones necesarias

del controlador y su orden. o Envía los comandos al controlador al escribir en los registros de

dispositivo del mismo. o Frecuentemente el manejador del dispositivo se bloquea hasta que

el controlador realiza cierto trabajo; una interrupción lo libera de este bloqueo.

o Al finalizar la operación debe verificar los errores. o Si todo esta o.k. transferirá los datos al software independiente del

dispositivo. o Regresa información de estado sobre los errores a quien lo llamó. o Inicia otra solicitud pendiente o queda en espera.

4.3 Estructuras de datos para manejo de dispositivos.

Los procesos de usuario emiten peticiones de entrada/salida al sistema operativo. Cuando un proceso solicita una operación de E/S, el sistema operativo prepara dicha operación y bloquea al proceso hasta que se recibe una interrupción del controlador del dispositivo indicando que la operación está completa. Las peticiones se procesan de forma estructurada en las siguientes capas:

• Manejadores de interrupción.

• Manejadores de dispositivos o drivers.

•Software de EIS independiente de los dispositivos. Este software está formado por la parte de alto nivel de los manejadores, el gestor de cache, el gestor de bloques y el servidor de archivos.

157

Page 173: Libro de Texto. Sistemas Operativos

• Interfaz del sistema operativo. Llamadas al sistema que usan las aplicaciones de usuario.

El sistema operativo estructura el software de gestión de E/S de esta forma para ofrecer a los usuarios una serie de servicios de E/S independientes de los dispositivos. Esta independencia implica que deben emplearse los mismos servicios y operaciones de E/S para leer datos de un disquete, de un disco duro, de un CD-ROM o de un teclado.

Manejadores de interrupción

Los manejadores de interrupción se encargan de tratar las interrupciones que generan los controladores de dispositivos una vez que éstos están listos para la transferencia de datos o bien han leído o escrito los datos de memoria principal en caso de acceso directo a memoria. Para tratar dicha interrupción se ejecuta el correspondiente manejador de interrupción cuyo efecto es el de salvar los registros, comunicar el evento al manejador del dispositivo y restaurar la ejecución de un proceso (que no tiene por qué ser el interrumpido).

Los manejadores de interrupción suelen hacer algo más que comunicar el evento al manejador de dispositivo. Cuando una interrupción ocurre muy frecuentemente, caso del reloj, o cuando la cantidad de información a transferir es muy pequeña, caso del teclado, sería muy costoso comunicar siempre el evento al manejador de dispositivo asociado. En estos casos, el propio manejador de interrupción registra la ocurrencia del evento, bien mediante el incremento de una variable global para el reloj o la acumulación de caracteres en un buffer del teclado. La notificación al manejador se hace únicamente cada cierto número de ocurrencias del evento, en el caso del reloj, o activando un flag que indica que hay datos en el buffer del teclado.

Manejadores de Dispositivos

Todo el código que depende de los dispositivos aparece en los manejadores de dispositivos.

Cada controlador posee uno o más registros de dispositivos:

1. Se utilizan para darle los comandos. 2. Los manejadores de dispositivos proveen estos comandos y verifican su

ejecución adecuada.

Software de E/S Independiente del Dispositivo

Funciones generalmente realizadas por el software independiente del dispositivo:

158

Page 174: Libro de Texto. Sistemas Operativos

Interfaz uniforme para los manejadores de dispositivos. Nombres de los dispositivos. Protección del dispositivo. Proporcionar un tamaño de bloque independiente del dispositivo. Uso de buffers. Asignación de espacio en los dispositivos por bloques. Asignación y liberación de los dispositivos de uso exclusivo. Informe de errores.

Las funciones básicas del software independiente del dispositivo son: Efectuar las funciones de e/s comunes a todos los dispositivos. Proporcionar una interfaz uniforme del software a nivel usuario.

El software independiente del dispositivo asocia los nombres simbólicos de los dispositivos con el nombre adecuado. Un nombre de dispositivo determina de manera única el nodo-i de un archivo especial:

Este nodo-i contiene el número principal del dispositivo, que se utiliza para localizar el manejador apropiado.

El nodo-i contiene también el número secundario de dispositivo, que se transfiere como parámetro al manejador para determinar la unidad por leer o escribir.

El software independiente del dispositivo debe: 1. Ocultar a los niveles superiores los diferentes tamaños de sector de los

distintos discos. 2. Proporcionar un tamaño uniforme de los bloques, por ej.: considerar

varios sectores físicos como un solo bloque lógico.

Software de E/S en el Espacio del Usuario

La mayoría del software de e/s está dentro del S. O.

Una pequeña parte consta de bibliotecas ligadas entre sí con los programas del usuario.

La biblioteca estándar de e/s contiene varios procedimientos relacionados con e/s y todos se ejecutan como parte de los programas del usuario.

Otra categoría importante de software de e/s a nivel usuario es el sistema de spooling.

El spooling es una forma de trabajar con los dispositivos de e /s de uso exclusivo en un sistema de multiprogramación:

159

Page 175: Libro de Texto. Sistemas Operativos

El ejemplo típico lo constituye la impresora de líneas. Los procesos de usuario no abren el archivo correspondiente a la

impresora. Se crea un proceso especial, llamado demonio en algunos sistemas. Se crea un directorio de spooling.

Para imprimir un archivo: Un proceso genera todo el archivo por imprimir y lo coloca en el directorio

de spooling. El proceso especial, único con permiso para utilizar el archivo especial de

la impresora, debe imprimir los archivos en el directorio. Se evita el posible problema de tener un proceso de usuario que

mantenga un recurso tomado largo tiempo.

Un esquema similar también es aplicable para la transferencia de archivos entre equipos conectados:

Un usuario coloca un archivo en un directorio de spooling de la red. Posteriormente, el proceso especial lo toma y transmite. Un ej. son los

sistemas de correo electrónico.

4.4 Operaciones de Entrada /salida.

Discos

Las siguientes son las principales ventajas con respecto del uso de la memoria principal como almacenamiento (Tanenbaum, 2003):

Mucha mayor capacidad de espacio de almacenamiento. Menor precio por bit. La información no se pierde al apagar la computadora.

Un uso inapropiado de los discos puede generar ineficiencia, en especial en sistemas con multiprogramación

Hardware Para Discos.

Los discos están organizados en cilindros, pistas y sectores. El número típico de sectores por pista varía entre 8 y 32 (o más). Todos los sectores tienen igual número de bytes. Los sectores cercanos a la orilla del disco serán mayores físicamente que los cercanos al anillo.

Un controlador puede realizar búsquedas en una o más unidades al mismo tiempo:

Son las búsquedas traslapadas.

160

Page 176: Libro de Texto. Sistemas Operativos

Mientras el controlador y el software esperan el fin de una búsqueda en una unidad, el controlador puede iniciar una búsqueda en otra.

Muchos controladores pueden: Leer o escribir en una unidad. Buscar en otra.

Los controladores no pueden leer o escribir en dos unidades al mismo tiempo. La capacidad de búsquedas traslapadas puede reducir considerablemente el tiempo promedio de acceso.

Operación de Almacenamiento de Disco de Cabeza Móvil.

Los datos se graban en una serie de discos magnéticos o platos (Deitel, 1993) . El eje común de los discos gira a una velocidad del orden de las 4.000 o más revoluciones por minuto.

Fig 4.3 Esquema de un disco de cabeza móvil

Se lee o escribe mediante una serie de cabezas de lectura - escritura (ver Figura 4.3:

Se dispone de una por cada superficie de disco. Solo puede acceder a datos inmediatamente adyacentes a ella:

o La parte de la superficie del disco de donde se leerá (o sobre la que se grabará) debe rotar hasta situarse inmediatamente debajo (o arriba) de la cabeza de lectura - escritura.

o El tiempo de rotación desde la posición actual hasta la adyacente al cabezal se llama tiempo de latencia.

161

Page 177: Libro de Texto. Sistemas Operativos

Todas las cabezas de lectura - escritura están montadas sobre una barra o conjunto de brazo móvil:

Puede moverse hacia adentro o hacia afuera, en lo que se denomina operación de búsqueda.

Para una posición dada, la serie de pistas accesibles forman un cilindro vertical.

A los tiempos de búsqueda y de latencia se debe agregar el tiempo de transmisión propiamente dicha (ver Figura 4.4).

Fig. 4.4 Componentes del acceso a un disco

El tiempo total de acceso a un registro particular: Involucra movimientos mecánicos. Generalmente es del orden de centésimas de segundo, aunque el tiempo

de latencia sea de algunas milésimas de segundo (7 a 12 aproximadamente).

Algoritmos de Programación del Brazo del Disco.

En la mayoría de los discos, el tiempo de búsqueda supera al de retraso rotacional y al de transferencia (Tanenbaum, 2003), debido a ello, la reducción del tiempo promedio de búsqueda puede mejorar en gran medida el rendimiento del sistema.

Si el manejador del disco utiliza el algoritmo primero en llegar primero en ser atendido (FCFS), poco se puede hacer para mejorar el tiempo de búsqueda.

Es posible que mientras el brazo realiza una búsqueda para una solicitud, otros procesos generen otras solicitudes.

162

Page 178: Libro de Texto. Sistemas Operativos

Muchos manejadores tienen una tabla:

El índice es el número de cilindro. Incluye las solicitudes pendientes para cada cilindro enlazadas entre sí en

una lista ligada. Cuando concluye una búsqueda, el manejador del disco tiene la opción

de elegir la siguiente solicitud a dar paso: o Se atiende primero la solicitud más cercana, para minimizar el

tiempo de búsqueda. o Este algoritmo se denomina primero la búsqueda más corta (SSF:

shor-test seek first). o Reduce a la mitad el número de movimientos del brazo en

comparación con FCFS.

Ej. de SSF: Consideramos un disco de 40 cilindros. Se presenta una solicitud de lectura de un bloque en el cilindro 11. Durante la búsqueda, llegan solicitudes para los cilindros 1, 36, 16, 34, 9 y

12, en ese orden. La secuencia de búsqueda SSF será: 12, 9, 16, 1, 34, 36. Habrá un número de movimientos del brazo para un total de:

o 111 cilindros según FCFS. o 61 cilindros según SSF.

El algoritmo SSF tiene el siguiente problema: El ingreso de nuevas solicitudes puede demorar la atención de las más

antiguas. Con un disco muy cargado, el brazo tenderá a permanecer a la mitad del

disco la mayoría del tiempo, como consecuencia de ello las solicitudes lejanas a la mitad del disco tendrán un mal servicio.

Entran en conflicto los objetivos de: o Tiempo mínimo de respuesta. o Justicia en la atención.

La solución a este problema la brinda el algoritmo del elevador (por su analogía con el ascensor o elevador):

Se mantiene el movimiento del brazo en la misma dirección, hasta que no tiene más solicitudes pendientes en esa dirección; entonces cambia de dirección.

El software debe conservar el bit de dirección actual.

Ej. del algoritmo del elevador para el caso anterior, con el valor inicial arriba del bit de dirección:

El orden de servicio a los cilindros es: 12, 16, 34, 36, 9 y 1. El número de movimientos del brazo corresponde a 60 cilindros.

163

Page 179: Libro de Texto. Sistemas Operativos

El algoritmo del elevador: Ocasionalmente es mejor que el algoritmo SSF. Generalmente es peor que SSF. Dada cualquier colección de solicitudes, la cuota máxima del total de

movimientos está fija, siendo el doble del número de cilindros.

Una variante consiste en rastrear siempre en la misma dirección: Luego de servir al cilindro con el número mayor:

o El brazo pasa al cilindro de número menor con una solicitud pendiente.

o Continúa su movimiento hacia arriba.

Algunos controladores de disco permiten que el software inspeccione el número del sector activo debajo del cabezal:

Si dos o más solicitudes para el mismo cilindro están pendientes: o El manejador puede enviar una solicitud para el sector que pasará

debajo del cabezal. o Se pueden hacer solicitudes consecutivas de distintas pistas de un

mismo cilindro, sin generar un movimiento del brazo.

Cuando existen varias unidades, se debe tener una tabla de solicitudes pendientes para cada unidad. Si una unidad está inactiva, deberá buscarse el cilindro siguiente necesario, si el controlador permite búsquedas traslapadas. Cuando termina la transferencia actual se verifica si las unidades están en la posición del cilindro correcto:

Si una o más unidades lo están, se puede iniciar la siguiente transferencia en una unidad ya posicionada.

Si ninguno de los brazos está posicionado, el manejador: o Debe realizar una nueva búsqueda en la unidad que terminó la

transferencia. o Debe esperar hasta la siguiente interrupción para ver cuál brazo se

posiciona primero.

Generalmente, las mejoras tecnológicas de los discos: Acortan los tiempos de búsqueda (seek). No acortan los tiempos de demora rotacional (search). En algunos discos, el tiempo promedio de búsqueda ya es menor que el

retraso rotacional. El factor dominante será el retraso rotacional, por lo tanto, los algoritmos

que optimizan los tiempos de búsqueda (como el algoritmo del elevador) perderán importancia frente a los algoritmos que optimicen el retraso rotacional.

Una tecnología importante es la que permite el trabajo conjunto de varios discos.

164

Page 180: Libro de Texto. Sistemas Operativos

Una configuración interesante es la de treinta y ocho (38) unidades ejecutándose en paralelo. Cuando se realiza una operación de lectura:

Ingresan a la cpu 38 bit a la vez, uno por cada unidad. Los 38 bits conforman una palabra de 32 bits junto con 6 bits para

verificación. Los bits 1, 2, 4, 8, 16 y 32 se utilizan como bits de paridad. La palabra de 38 bits se puede codificar mediante el código Hamming,

que es un código corrector de errores. Si una unidad sale de servicio:

o Se pierde un bit de cada palabra. o El sistema puede continuar trabajando; se debe a que los códigos

Hamming se pueden recuperar de un bit perdido.

Este diseño se conoce como RAID; siglas en inglés de “arreglo redundante de discos no costosos”.

Porqué es Necesaria la Planificación de Discos.

En los sistemas de multiprogramación muchos procesos pueden estar generando peticiones de e/s sobre discos:

La generación de peticiones puede ser mucho más rápida que la atención de las mismas:

o Se construyen líneas de espera o colas para cada dispositivo. o Para reducir el tiempo de búsqueda de registros se ordena la cola

de peticiones: esto se denomina planificación de disco.

La planificación de disco implica: Un examen cuidadoso de las peticiones pendientes para determinar la

forma más eficiente de servirlas. Un análisis de las relaciones posicionales entre las peticiones en espera. Un reordenamiento de la cola de peticiones para servirlas minimizando

los movimientos mecánicos.

Los tipos más comunes de planificación son: Optimización de la búsqueda. Optimización rotacional (latencia).

Generalmente los tiempos de búsqueda superan a los de latencia, aunque la diferencia disminuye:

Muchos algoritmos de planificación se concentran en la reducción de los tiempos de búsqueda para un conjunto de peticiones.

Generalmente la reducción de la latencia recién tiene efectos bajo cargas de trabajo muy pesadas.

165

Page 181: Libro de Texto. Sistemas Operativos

Bajo condiciones de carga ligera (promedio bajo de longitud de la cola), es aceptable el desempeño del método FCFS (primero en llegar, primero en ser servido). Bajo condiciones de carga media o pesada, es recomendable un algoritmo de planificación de las colas de requerimientos.

Características Deseables de las Políticas de Planificación de Discos.

Los principales criterios de categorización de las políticas de planificación son: Capacidad de ejecución. Media del tiempo de respuesta. Varianza de los tiempos de respuesta (predecibilidad).

Una política de planificación debe intentar maximizar la capacidad de ejecución: Maximizar el número de peticiones servidas por unidad de tiempo. Minimizar la media del tiempo de respuesta. Mejorar el rendimiento global, quizás a costa de las peticiones

individuales.

La planificación suele mejorar la imagen total al tiempo que reduce los niveles de servicio de ciertas peticiones:

Se mide utilizando la varianza de los tiempos de respuesta. La varianza es un término estadístico que indica hasta qué punto tienden

a desviarse del promedio de todos los elementos los elementos individuales.

A menor varianza mayor predecibilidad. Se desea una política de planificación que minimice la varianza, es decir

que maximice la predecibilidad. No debe haber peticiones que puedan experimentar niveles de servicio

erráticos.

Optimización de la Búsqueda en Discos.

Las estrategias más comunes de optimización de la búsqueda son las siguientes (Deitel, 1993):

1. FCFS. 2. SSTF. 3. SCAN. 4. SCAN de N - Pasos. 5. C - SCAN. 6. Esquema Eschenbach.

Planificación FCFS (Primero en Llegar, Primero en Ser Servido)

166

Page 182: Libro de Texto. Sistemas Operativos

Una petición no puede ser desplazada por la llegada de una petición con prioridad más alta. No hay reordenamiento de la cola de peticiones pendientes. Se ignoran las relaciones posicionales entre las peticiones pendientes. Ofrece una varianza pequeña aunque perjudica a las peticiones situadas al final de la cola.

Planificación SSTF (Menor Tiempo de Búsqueda Primero)

El brazo del disco se sitúa en la siguiente petición que minimice el movimiento del brazo. No respeta el orden de llegada de las peticiones a la cola. Tiende a favorecer a las pistas del centro del disco. La media de tiempos de respuesta tiende a ser más baja que con FCFS, para cargas moderadas. Las varianzas tienden a ser mayores que con FCFS por el efecto de las pistas interiores y exteriores.

Planificación SCAN

El brazo del disco se desplaza sirviendo a todas las peticiones que encuentra a su paso. Cambia de dirección cuando ya no hay peticiones pendientes en la dirección actual. Ha sido la base de la mayoría de las estrategias de planificación implementadas. Elimina las discriminaciones de SSTF y tiene menor varianza. Las pistas exteriores son menos visitadas que las intermedias, pero no es tan grave como con SSTF.

Planificación SCAN de N - Pasos

La estrategia de movimiento del brazo es como en SCAN; solo da servicio a las peticiones que se encuentran en espera cuando comienza un recorrido particular. Las peticiones que llegan durante un recorrido son agrupadas y ordenadas y serán atendidas durante el recorrido de regreso. Posee menor varianza de los tiempos de respuesta si se compara con las planificaciones SSTF y SCAN convencionales.

Planificación C - SCAN (Búsqueda Circular)

El brazo se mueve del cilindro exterior al interior, sirviendo a las peticiones sobre una base de búsqueda más corta. Finalizado el recorrido hacia el interior, salta a la petición más cercana al cilindro exterior y reanuda su desplazamiento hacia el interior.

167

Page 183: Libro de Texto. Sistemas Operativos

No discrimina a los cilindros exterior e interior. La varianza de los tiempos de respuesta es muy pequeña.

Esquema Eschenbach.

El brazo del disco se mueve como en C - SCAN, pero: Las peticiones se reordenan para ser servidas dentro de un cilindro para

tomar ventaja de la posición rotacional. Si dos peticiones trasladan posiciones de sectores dentro de un cilindro,

solo se sirve una en el movimiento actual del brazo del disco.

Esta estrategia tiene en cuenta el retraso rotacional.

Manejo de Errores en Discos.

Algunos de los errores más comunes en discos son:

Error de programación: o Ej.: Solicitar un sector no existente.

Error temporal en la suma de verificación: o Ej.: Provocado por polvo en la cabeza.

Error permanente en la suma de verificación: o Ej.: Un bloque del disco dañado físicamente.

Error de búsqueda: o Ej.: El brazo se envía al cilindro 6 pero va al 7.

Error del controlador: o Ej.: El controlador no acepta los comandos.

El manejador del disco debe controlar los errores de la mejor manera posible. La mayoría de los controladores:

Verifican los parámetros que se les proporcionan. Informan si no son válidos.

Respecto de los errores temporales en la suma de verificación: Generalmente se eliminan al repetir la operación. Si persisten, el bloque debe ser marcado como un bloque defectuoso,

para que el software lo evite.

Otra posibilidad es que controladores “inteligentes” reserven cierta cantidad de pistas:

Serán asignadas en reemplazo de pistas defectuosas. Una tabla asocia las pistas defectuosas con las pistas de repuesto:

o Está alojada en la memoria interna del controlador y en el disco. o La sustitución es transparente para el manejador.

168

Page 184: Libro de Texto. Sistemas Operativos

o Puede afectarse el desempeño de los algoritmos de búsqueda, como el del elevador, ya que el controlador utiliza pistas físicamente distintas de las solicitadas

Ocultamiento de Una Pista a la Vez en Discos.

Generalmente el tiempo de búsqueda supera al de rotación y transferencia (aunque esto se está equilibrando).

Una vez resuelta la búsqueda del cilindro correspondiente, no es muy importante si se lee un sector o toda la pista:

Especialmente en dispositivos con sensibilidad rotacional (RPS): o El manejador puede ver que sector se encuentra debajo de la

cabeza y puede enviar una solicitud del siguiente sector: Permite leer una pista en un tiempo de rotación. De lo contrario se tardaría, en promedio, un tiempo de

rotación más un tiempo de sector, para leer un solo sector. Algunos manejadores aprovechan esto mediante un caché secreto de una

pista a la vez : o Es desconocido por el software independiente del dispositivo. o Si se necesita un sector del caché, no es necesaria una

transferencia del disco. o Las principales desventajas de este ocultamiento de una pista a la

vez son: Complejidad del software. Requerimientos de espacio para buffers. Las transferencias del caché al programa que hace la

llamada: Las debe realizar la cpu mediante un ciclo

programado. No las puede hacer el hardware DMA.

o Algunos controladores realizan el ocultamiento de una pista a la vez en su propia memoria interna:

Resulta transparente al manejador. Las transferencias entre el controlador y la memoria pueden

utilizar DMA.

Discos en RAM

Utilizan una parte de la memoria principal asignada con anterioridad para almacenar los bloques (Tanenbaum, 2003). Tienen la ventaja del acceso instantáneo:

No hay demora rotacional o debida a las búsquedas.

169

Page 185: Libro de Texto. Sistemas Operativos

Son adecuados para el almacenamiento de programas o datos con accesos muy frecuentes.

Los bloques de almacenamiento tienen el mismo tamaño que en los discos reales. Cuando el manejador debe leer de o escribir en un bloque de un disco en RAM, calcula el lugar de la memoria donde se encuentra el bloque solicitado y lee o escribe en el mismo.

Relojes

Los relojes o cronómetros son esenciales para la operación de sistemas de tiempo compartido (Tanenbaum, 2003). Registran la hora del día. Evitan que un proceso monopolice la cpu. El software para reloj toma generalmente la forma de un manejador de dispositivo, aunque no es un dispositivo de bloque ni de caracter. Los relojes más sencillo trabajan con la línea de corriente eléctrica de 110 o 220 voltios y provocan una interrupción por cada ciclo de voltaje, a 50 o 60 hz.

Otro tipo de relojes consta de tres componentes:

Un oscilador de cristal, un contador y un registro. Una pieza de cristal de cuarzo se monta en una estructura bajo tensión:

o Genera una señal periódica de muy alta precisión, generalmente entre 5 y 100 mhz.

o La señal se alimenta en el contador para que cuente en forma descendente hasta cero.

o Cuando el contador llega a cero, provoca una interrupción de la cpu.

Los relojes programables tienen varios modos de operación: Modo de una instancia:

o Cuando el reloj se inicializa, copia el valor del registro en el contador.

o Decrementa el contador en cada pulso del cristal. o Cuando el contador llega a cero provoca una interrupción y se

detiene hasta ser nuevamente inicializado por el software. Modo de onda cuadrada:

o Luego de llegar a cero y provocar la interrupción, el registro se copia de manera automática en el contador.

o Todo el programa se repite en forma indefinida. o Las interrupciones periódicas se llaman marcas del reloj.

La ventaja del reloj programable es que su frecuencia de interrupción puede ser controlada por el software. Las principales funciones del software manejador del reloj son:

170

Page 186: Libro de Texto. Sistemas Operativos

Mantener la hora del día o tiempo real. Evitar que los procesos se ejecuten durante más tiempo del permitido. Mantener un registro del uso de la cpu. Controlar llamadas al sistema tipo “alarm” por parte de los procesos del

usuario. Proporcionar cronómetros guardianes de partes del propio sistema. Realizar resúmenes, monitoreo y recolección de estadísticas.

El software manejador del reloj puede tener que simular varios relojes virtuales con un único reloj físico.

Terminales

Las terminales tienen gran número de formas distintas (Tanenbaum, 2003): El manejador de la terminal debe ocultar estas diferencias. La parte independiente del dispositivo en el S. O. y los programas del

usuario no se tienen que reescribir para cada tipo de terminal.

Desde el punto de vista del S.O. se las puede clasificar en: Interfaz RS-232:

o Hardcopy (terminales de impresión). o TTY “de vidrio” (terminales de video). o Inteligente (computadoras con cpu y memoria).

Interfaz mapeada a memoria: o Orientada a caracteres. o Orientada a bits.

Las terminales RS-232 poseen un teclado y un monitor que se comunican mediante una interfaz serial, un bit a la vez; las conversiones de bits a bytes y viceversa las efectúan los chips uart (transmisores - receptores asíncronos universales). Las terminales mapeadas a memoria:

No se comunican mediante una línea serial. Poseen una interfaz mediante una memoria especial llamada video RAM:

o Forma parte del espacio de direcciones de la computadora. o La cpu se dirige a ella como al resto de la memoria. o En la tarjeta de video RAM hay un chip llamado controlador de

video: Extrae bytes del video RAM y genera la señal de video

utilizada para manejar la pantalla. El monitor genera un rayo de electrones que recorre la

pantalla pintando líneas. Cada línea está constituida por un cierto número de puntos

o pixeles. La señal del controlador de video modula el rayo de

electrones y determina si un pixel debe estar o no iluminado.

171

Page 187: Libro de Texto. Sistemas Operativos

Los monitores de color poseen tres rayos (rojo, verde y azul) que se modulan independientemente.

En las pantallas mapeadas a caracteres: Cada carácter en la pantalla equivale a dos caracteres de RAM:

o Uno aloja al código (ASCII) del carácter por exhibir. o Otro es el byte de atributo, necesario para determinar el color, el

video inverso, el parpadeo, etc.

En las terminales mapeadas a bits: Se utiliza el mismo principio. Cada bit en el video RAM controla en forma directa un solo pixel de la

pantalla. Permite una completa flexibilidad en los tipos y tamaños de caracteres,

varias ventanas y gráficos arbitrarios.

Con las pantallas mapeadas a memoria, el teclado se desacopla totalmente de la pantalla:

El teclado dispone de su propio manejador. El manejador del teclado puede operar en modo carácter o en modo

línea.

Las terminales pueden operar con una estructura central de buffers o con buffers exclusivos para cada terminal. Frecuentemente los manejadores de terminales soportan operaciones tales como:

Mover el cursor hacia arriba, abajo, a la izquierda o a la derecha una posición.

Mover el cursor a x,y. Insertar un carácter o una línea en el cursor. Eliminar un carácter o una línea en el cursor. Recorrer la pantalla hacia arriba o hacia abajo “n” líneas. Limpiar la pantalla desde el cursor hacia el final de la línea o hasta el final

de la pantalla. Trabajar en modo de video inverso, subrayado, parpadeo o normal. Crear, construir, mover o controlar las ventanas.

172

Page 188: Libro de Texto. Sistemas Operativos

Resumen

Una de las funciones principales de un S. O. es el control de todos los dispositivos de e / s de la computadora.

Los dispositivos de E/S se pueden clasificar en dos grandes categorías: dispositivos de bloque y dispositivos de carácter.

El S. O. realiza la e/s al escribir comandos en los registros de los controladores; los parámetros de los comandos también se cargan en los registros de los controladores. Al aceptar el comando, la CPU puede dejar al controlador y dedicarse a otro trabajo.

Todo el código que depende de los dispositivos aparece en los manejadores de dispositivos.

Los manejadores de dispositivos se encargan de los pormenores de la operación de los dispositivos y de presentar interfaces estándar al resto del sistema operativo. El software de E/S independiente del dispositivo se encarga de cosas como el uso de búferes y la producción de informes de error.

Hay diversos tipos de discos. En muchos casos es posible utilizar algoritmos de calendarización del brazo del disco para mejorar su desempeño.

Los relojes sirven para llevar la cuenta del tiempo real, limitar el tiempo de ejecución de los procesos, manejar temporizadores vigilantes y llevar la contabilidad.

Las terminales orientadas a caracteres tienen varios aspectos relacionados con los caracteres especiales que pueden introducirse y las secuencias de escape especiales que pueden generarse.

Problemas

1. ¿Por qué los archivos de salida para la impresora se colocan generalmente en spooling en disco antes de imprimirse?

2. Llegan al controlador de un disco solicitudes para los cilindros 10,22,20,2,40,6 y 38, en ese orden. Un desplazamiento de brazo tarda 6ms por cilindro. Cuanto tiempo de desplazamiento se necesita en cada uno de los siguientes casos:a) Primero en llegar, primero en ser atendido.b) Cilindro más cercano a continuación.c) Algoritmo del elevador.En todos los casos, en un principio el brazo está en el cilindro 20.

173

Page 189: Libro de Texto. Sistemas Operativos

3. El manejador de interrupciones de reloj de cierta computadora requiere 2ms (incluido el gasto adicional por conmutación de procesos) por tic del reloj. El reloj opera a 60Hz. ¿Que fracción de la CPU se dedica al reloj?

4. Explique cual es la labor del manejador de dispositivos.

5. Explique las funciones que realiza el software de E/S independiente del dispositivo.

6. Explique que parte del software de E/S esta en el espacio de usuario.

7. Muchas terminales RS-232 tiene secuencias de escape para borrar la línea actual y desplazar hacia arriba todas las líneas que están abajo. Como cree que se implemente esta función dentro de la terminal?

8. Los colores aditivos primarios son rojo, verde y azul, lo que implica que cualquier color puede formarse con una superposición lineal de éstos. ¿Puede suceder que alguien tenga una fotografía a color que no pueda representarse empleando color de 24 bits?

9. ¿Por qué las terminales RS-232 son controladas por interrupciones, pero las terminales con correspondencia a memoria no?

10. Explique que operaciones realizan los manejadores de terminales.

174

Page 190: Libro de Texto. Sistemas Operativos

UNDAD 5. Sistema de archivos.

5.1 Concepto.

Todas las aplicaciones computarizadas necesitan almacenar y recuperar la información (Deitel,1993):

Superando las limitaciones del almacenamiento real. Trascendiendo a la duración de los procesos que las utilizan o generan. Independizando a la información de los procesos permitiendo el acceso a

la misma a través de varios procesos.

Las condiciones esenciales para el almacenamiento de la información a largo plazo son:

Debe ser posible almacenar una cantidad muy grande de información. La información debe sobrevivir a la conclusión del proceso que la utiliza. Debe ser posible que varios procesos tengan acceso concurrente a la

información.

La solución es el almacenamiento de la información en discos y otros medios externos en unidades llamadas archivos:

Los archivos deben ser persistentes, es decir que no deben verse afectados por la creación o terminación de un proceso.

Los archivos son una colección de datos con nombre. Pueden ser manipulados como una unidad por operaciones como: open,

close, create, destroy, copy, rename, list. Los elementos de datos individuales dentro del archivo pueden ser

manipulados por operaciones como: read, write, update, insert, delete.

Un “Archivo” es un conjunto de registros relacionados (Tanenbaum, 2003).

5.2 Noción de archivo real y virtual.

Un archivo virtual (Fig.5.1), es un archivo de uso temporal que es utilizado por los procesos del sistema mientras se están ejecutando dichos procesos. Estos archivos se crean durante la ejecución de un sistema y los utiliza para el almacenamiento de información, intercambio y organización mientras se ejecuta el sistema (Fig. 5.2), su tamaño es muy variable y terminan al detener la ejecución del sistema, muchos de ellos son borrados, por ejemplo, los archivos *.tmp (Fig. 5.3).

Se le conoce como archivo virtual, aquel que contiene los datos generados por el usuario.

175

Page 191: Libro de Texto. Sistemas Operativos

Fig.5.1 Archivo virtual

Fig. 5.2 Ejecución del proceso

Fig. 5.3 Archivos temporales(*.tmp)

Archivo Real (Fig. 5.4): Es un objeto que contiene programas, datos o cualquier otro elemento. Un archivo se muestra de manera real, en la información del espacio que ocupa en un disco duro o sistema de almacenamiento, en otras palabras su tamaño en bytes. 

            

             

            Fig. 5.4 Ejemplos de archivos reales

5.3 Componentes de un sistema de archivos.

El “Sistema de Archivos” es la parte del sistema de administración del almacenamiento responsable, principalmente, de la administración de los archivos del almacenamiento secundario.

176

Page 192: Libro de Texto. Sistemas Operativos

Es la parte del S. O. responsable de permitir “compartir controladamente” la información de los archivos.

El “Sistema de Archivos” suele contener(Deitel, 1993):

“Métodos de acceso” relacionados con la manera de acceder a los datos almacenados en archivos.

“Administración de archivos” referida a la provisión de mecanismos para que los archivos sean almacenados, referenciados, compartidos y asegurados.

“Administración del almacenamiento auxiliar” para la asignación de espacio a los archivos en los dispositivos de almacenamiento secundario.

“Integridad del archivo” para garantizar la integridad de la información del archivo.

El sistema de archivos está relacionado especialmente con la administración del espacio de almacenamiento secundario, fundamentalmente con el almacenamiento de disco. Una forma de organización de un sistema de archivos puede ser la siguiente:

Se utiliza una “raíz” para indicar en qué parte del disco comienza el “directorio raíz”.

El “directorio raíz” apunta a los “directorios de usuarios”. Un “directorio de usuario” contiene una entrada para cada uno de los

archivos del usuario. Cada entrada de archivo apunta al lugar del disco donde está

almacenado el archivo referenciado.

Los nombres de archivos solo necesitan ser únicos dentro de un directorio de usuario dado. El nombre del sistema para un archivo dado debe ser único para el sistema de archivos. En sistemas de archivo “jerárquicos” el nombre del sistema para un archivo suele estar formado como el “nombre de la trayectoria” del directorio raíz al archivo.

5.4 Organización lógica y física.

Se refiere a las diferentes maneras en las que puede ser organizada la información de los archivos, así como las diferentes maneras en que ésta puede ser accesada. Dado que hay 2 niveles de visión de los archivos (físico y lógico), se puede hablar también de 2 aspectos de organización de archivos: Organización de archivos lógicos y de archivos físicos.

Archivos lógicos. Contempla la organización desde el punto de vista lógico. Por ejemplo, secuencial, directo, etc.

177

Page 193: Libro de Texto. Sistemas Operativos

Archivos físicos. Contempla la administración de archivos desde la perspectiva física, particularmente la organización del almacenamiento en disco a nivel de pistas y sectores.

Este tipo de organización muestra a su vez, 2 aspectos importantes: Métodos De Asignación De Espacio Libre y Asignación De Espacio De Almacenamiento Del Archivo.

Métodos de asignación de espacio libre.

Un método de asignación de espacio libre determina la manera en que un Sistema Operativo controla los lugares del disco que no están siendo ocupados. Para el control del espacio libre se puede utilizar como base alguno de los métodos teóricos: Vector de Bits, Lista Ligada, Por Agrupación y por Contador.

Vector de bits

Se tiene un arreglo de bits, el número de bits que tiene, representa cada sector del disco, o sea que si los sectores 10 y 11  están ocupados su representación será (fig. 5.5):

Fig. 5.5 Vector de bits

Lista ligada

Existe una cabecera en la que se tiene la dirección del primer sector vacío, ese sector a su vez, tiene un apuntador al siguiente bloque, y así sucesivamente hasta que se encuentre una marca indicando que ya no hay espacio libre. (Fig 5.6).

178

Page 194: Libro de Texto. Sistemas Operativos

Fig. 5.6 Lista ligada

Por agrupación

Es similar a la lista ligada, solo que en este se tiene por cada sector, un grupo de apuntadores a varios espacios vacíos, al final de cada bloque se tiene un apuntador a otro grupo de apuntadores. (Fig. 5.7).

179

Page 195: Libro de Texto. Sistemas Operativos

Fig.5.7 Por agrupación

Por contador

Aquí, por cada conjunto de bloques contiguos que estén vacíos, se tiene por cada apuntador, un número de inicio y el tamaño del grupo de sectores vacíos. (Fig. 5.8).

180

Page 196: Libro de Texto. Sistemas Operativos

Fig. 5.8 Por contador

5.5 Mecanismos de acceso a los archivos.

Los tipos de acceso más conocidos son:

Acceso Secuencial: el proceso lee en orden todos los registros del archivo comenzando por el principio, sin poder:

o Saltar registros. o Leer en otro orden.

Acceso Aleatorio: el proceso puede leer los registros en cualquier orden utilizando dos métodos para determinar el punto de inicio de la lectura:

o Cada operación de lectura (read) da la posición en el archivo con la cual iniciar.

o Una operación especial (seek) establece la posición de trabajo pudiendo luego leerse el archivo secuencialmente.

Atributos de Archivo. Cada archivo tiene:

Su nombre y datos. Elementos adicionales llamados atributos, que varían considerablemente

de sistema a sistema.

181

Page 197: Libro de Texto. Sistemas Operativos

Algunos de los posibles atributos de archivo son: “Protección”: quién debe tener acceso y de qué forma. “Contraseña”: contraseña necesaria para acceder al archivo. “Creador”: identificador de la persona que creó el archivo. “Propietario”: propietario actual. “Bandera exclusivo - para - lectura”: 0 lectura / escritura, 1 para lectura

exclusivamente. “Bandera de ocultamiento”: 0 normal, 1 para no exhibirse en listas. “Bandera de sistema”: 0 archivo normal, 1 archivo de sistema. “Bandera de biblioteca”: 0 ya se ha respaldado, 1 necesita respaldo. “Bandera ascii / binario”: 0 archivo en ascii, 1 archivo en binario. “Bandera de acceso aleatorio”: 0 solo acceso secuencial, 1 acceso

aleatorio. “Bandera temporal”: 0 normal, 1 eliminar al salir del proceso. “Banderas de cerradura”: 0 no bloqueado, distinto de 0 bloqueado. “Longitud del registro”: número de bytes en un registro. “Posición de la llave”: ajuste de la llave dentro de cada registro. “Longitud de la llave”: número de bytes en el campo llave. “Tiempo de creación”: fecha y hora de creación del archivo. “Tiempo del último acceso”: fecha y hora del último acceso al archivo. “Tiempo de la última modificación”: fecha y hora de la última modificación

al archivo. “Tamaño actual”: número de bytes en el archivo. “Tamaño máximo”: tamaño máximo al que puede crecer el archivo.

Las llamadas más comunes al sistema relacionadas con los archivos son:

Create (crear): el archivo se crea sin datos. Delete (eliminar): si el archivo ya no es necesario debe eliminarse para

liberar espacio en disco. Ciertos S. O. eliminan automáticamente un archivo no utilizado durante “n” días.

Open (abrir): antes de utilizar un archivo, un proceso debe abrirlo. La finalidad es permitir que el sistema traslade los atributos y la lista de direcciones en disco a la memoria principal para un rápido acceso en llamadas posteriores.

Close (cerrar): cuando concluyen los accesos, los atributos y direcciones del disco ya no son necesarios, por lo que el archivo debe cerrarse y liberar la tabla de espacio interno.

Read (leer): los datos se leen del archivo; quien hace la llamada debe especificar la cantidad de datos necesarios y proporcionar un buffer para colocarlos.

Write (escribir): los datos se escriben en el archivo, en la posición actual. El tamaño del archivo puede aumentar (agregado de registros) o no (actualización de registros).

Append (añadir): es una forma restringida de “write”. Solo puede añadir datos al final del archivo.

182

Page 198: Libro de Texto. Sistemas Operativos

Seek (buscar): especifica el punto donde posicionarse. Cambia la posición del apuntador a la posición activa en cierto lugar del archivo.

Get attributes (obtener atributos): permite a los procesos obtener los atributos del archivo.

Set attributes (establecer atributos): algunos atributos pueden ser determinados por el usuario y modificados luego de la creación del archivo. La información relativa al modo de protección y la mayoría de las banderas son un ejemplo obvio.

Rename (cambiar de nombre): permite modificar el nombre de un archivo ya existente.

Archivos Mapeados a Memoria.

Algunos S. O. permiten asociar los archivos con un espacio de direcciones de un proceso en ejecución. Se utilizan las llamadas al sistema “map” y “unmap”:

“Map”: utiliza un nombre de archivo y una dirección virtual y hace que el S. O. asocie al archivo con la dirección virtual en el espacio de direcciones, por lo cual las lecturas o escrituras de las áreas de memoria asociadas al archivo se efectúan también sobre el archivo mapeado.

“Unmap”: elimina los archivos del espacio de direcciones y concluye la operación de asociación.

El mapeo de archivos elimina la necesidad de programar la e/s directamente, facilitando la programación. Los principales problemas relacionados son:

Imposibilidad de conocer a priori la longitud del archivo de salida, el que podría superar a la memoria.

Dificultad para compartir los archivos mapeados evitando inconsistencias, ya que las modificaciones hechas en las páginas no se verán reflejadas en el disco hasta que dichas páginas sean eliminadas de la memoria.

5.6 Manejo de espacio en memoria secundaria.

Un método de asignación de espacio en disco determina la manera en que un Sistema Operativo controla los lugares del disco ocupados por cada archivo de datos. Se debe controlar básicamente la identificación del archivo, sector de inicio y sector final.

Para el control del espacio ocupado en disco se puede utilizar como base alguno de los métodos teóricos: Asignación Contigua, Asignación Ligada, Asignación Indexada.  

Asignación contigua.

183

Page 199: Libro de Texto. Sistemas Operativos

Este método consiste en asignar el espacio en disco de tal manera que las direcciones de todos los bloques correspondientes a un archivo definen un orden lineal. Por ejemplo: (Fig. 5.9) 

    Fig. 5.9 Asignación contigua

VENTAJAS DESVENTAJAS

- La cabeza de lectura no se mueve demasiado en la lectura de un archivo.

- Produce fragmentación externa.

Asignación ligada

En este método, cada archivo es una lista ligada de bloques de disco. En el directorio hay un apuntador al bloque de inicio y un apuntador al bloque final para cada archivo. En cada uno de los bloques donde se encuentra un archivo hay un apuntador al siguiente bloque de la lista. Por ejemplo: (Fig. 5.10)

184

Page 200: Libro de Texto. Sistemas Operativos

  Fig. 5.10 Asignación ligada

VENTAJAS DESVENTAJAS

- No produce fragmentación externa.

 

La cabeza de lectura se puede mover demasiado en la lectura de un archivo. 

- Si una liga se pierde, se perderá el archivo completo. 

Es ineficiente para la implementación de archivos directos. 

Se necesita un campo extra para el apuntador.

Asignación indexada

Como ya se vio, la asignación ligada resuelve problemas de fragmentación externa, sin embargo, la asignación ligada no soporta eficientemente el acceso directo a los archivos. La asignación indexada resuelve este problema poniendo todos los apuntadores en una sola localidad: El bloque índice.

Cada archivo tiene su bloque índice, El cual es un arreglo de direcciones de bloques de disco.

185

Page 201: Libro de Texto. Sistemas Operativos

La i-ésima entrada en el bloque índice apunta al i-ésimo bloque que conforma el archivo. En el directorio se controla la dirección del bloque índice de cada archivo, por ejemplo: (Fig. 5.11) 

Fig. 5.11 Asignación indexada

VENTAJAS DESVENTAJAS

No produce fragmentación externa.  Eficiente para la implementación de

archivos directos.

 

Existe desperdicio cuando hay archivos muy chicos. 

Desbordamiento de bloque índice. (Solución: creación de un esquema ligado; el ultimo bloque índice apunta a otro índice)

5.7 Modelo jerárquico.

186

Page 202: Libro de Texto. Sistemas Operativos

Directorios

Generalmente son utilizados por los S.O. para llevar un registro de los archivos (Tanenbaum, 2003). En muchos sistemas son a su vez también archivos.

Sistemas Jerárquicos de Directorios.

El directorio contiene un conjunto de datos por cada archivo referenciado. Una posibilidad es que el directorio contenga por cada archivo referenciado (Deitel, 1993):

El nombre. Sus atributos. Las direcciones en disco donde se almacenan los datos.

Otra posibilidad es que cada entrada del directorio contenga: El nombre del archivo. Un apuntador a otra estructura de datos donde se encuentran los

atributos y las direcciones en disco.

Al abrir un archivo el S. O.: Busca en su directorio el nombre del archivo. Extrae los atributos y direcciones en disco. Graba esta información en una tabla de memoria real. Todas las referencias subsecuentes al archivo utilizarán la información de

la memoria principal.

El número y organización de directorios varía de sistema en sistema: Directorio único: el sistema tiene un solo directorio con todos los archivos

de todos los usuarios (ver Figura 5.12). Un directorio por usuario: el sistema habilita un solo directorio por cada

usuario (ver Figura 5.13). Un árbol de directorios por usuario: el sistema permite que cada usuario

tenga tantos directorios como necesite, respetando una jerarquía general (ver Figura 5.14).

187

Page 203: Libro de Texto. Sistemas Operativos

Fig. 5.12 Un solo directorio compartido por todos los usuarios

Fig. 5.13 Un directorio por usuario

188

Page 204: Libro de Texto. Sistemas Operativos

Fig. 5.14 Un árbol arbitrario por usuario

Nombre de las Rutas de Acceso.

Cuando el sistema de archivos está organizado como un árbol de directorios se necesita una forma de determinar los nombres de los archivos. Los principales métodos para nombres de los archivos son:

Ruta de Acceso Absoluta: Cada archivo tiene una ruta de acceso absoluta. Consta de la ruta de acceso desde el directorio raíz hasta el archivo. Los componentes de la ruta de acceso se separan mediante algún carácter llamado “separador”.

Ruta de Acceso Relativa: Se utiliza junto con el concepto de directorio de trabajo o directorio activo. Todos los nombres que no comiencen en el directorio raíz se toman en relación con el directorio de trabajo. El nombre absoluto de la ruta de acceso siempre funciona, sin importar cual sea el directorio de trabajo.

189

Page 205: Libro de Texto. Sistemas Operativos

Operaciones con Directorios

Las llamadas al sistema permitidas para el manejo de los directorios tienen variación de sistema a sistema. Las más comunes son las siguientes:

Create (crear): se crea un directorio vacío. Delete (eliminar): se elimina un directorio, que debe estar vacío. Opendir (abrir directorio): se pueden leer los directorios:

o Antes de poder leer un directorio, éste debe ser abierto. Closedir (cerrar directorio): cuando se ha leído un directorio, éste debe

ser cerrado para liberar el espacio correspondiente de la tabla interna. Readdir (leer directorio): regresa la siguiente entrada en un directorio

abierto, sin importar el tipo de estructura de directorios que se utilice. Rename (cambiar de nombre): cambia el nombre de un directorio de

manera similar al cambio para archivos. Link (ligar): es una técnica que permite que un archivo aparezca en más

de un directorio: o Especifica un archivo existente y el nombre de una ruta de acceso. o Crea un enlace del archivo ya existente con el nombre especificado

en la ruta de acceso. Unlink (desligar): se elimina una entrada del directorio:

o Si el archivo que se desea desligar aparece solo en un directorio (el caso normal):

Se elimina del sistema de archivos. o Si el archivo que se desea desligar, está presente en varios

directorios: Solo se elimina la ruta de acceso especificada. Las demás rutas permanecen.

Implantación del Sistema de Archivos y sus Relaciones con la Asignación y Liberación de Espacio.

Se consideran aspectos tales como:

La forma de almacenamiento de archivos y directorios. La administración del espacio en disco. La forma de hacerlo de manera eficiente y confiable.

Se deben tener presentes problemas tales como la “fragmentación” creciente del espacio en disco:

Ocasiona problemas de performance al hacer que los archivos se desperdiguen a través de bloques muy dispersos.

Una técnica para aliviar el problema de la “fragmentación” consiste en realizar periódicamente:

o “Condensación”: se pueden “reorganizar” los archivos expresamente o automáticamente según algún criterio predefinido.

190

Page 206: Libro de Texto. Sistemas Operativos

o “Recolección de basura o residuos”: se puede hacer fuera de línea o en línea, con el sistema activo, según la implementación

Implantación de Archivos.

El aspecto clave de la implantación del almacenamiento de archivos es el registro de los bloques asociados a cada archivo.

Algunos de los métodos utilizados son los siguientes:

Asignación contigua o adyacente: o Los archivos son asignados a áreas contiguas de almacenamiento

secundario. o Las principales ventajas son:

Facilidad de implantación, ya que solo se precisa el número del bloque de inicio para localizar un archivo.

Rendimiento excelente respecto de la e / s. o Los principales defectos son:

Se debe conocer el tamaño máximo del archivo al crearlo. Produce una gran fragmentación de los discos.

Asignación no contigua: o Son esquemas de almacenamiento más dinámicos, destacándose

los siguientes: o Asignación encadenada orientada hacia el sector:

El disco se considera compuesto de sectores individuales. Los archivos constan de varios sectores que pueden estar

dispersos por todo el disco. Los sectores que pertenecen a un archivo común

contienen apuntadores de uno a otro formando una “lista encadenada”.

Una “lista de espacio libre” contiene entradas para todos los sectores libres del disco.

Las ampliaciones o reducciones en el tamaño de los archivos se resuelven actualizando la “lista de espacio libre” y no hay necesidad de condensación.

Las principales desventajas son: Debido a la posible dispersión en el disco, la

recuperación de registros lógicamente contiguos puede significar largas búsquedas.

El mantenimiento de la estructura de “listas encadenadas” significa una sobrecarga en tiempo de ejecución.

Los apuntadores de la estructura de lista consumen espacio en disco.

o Asignación por bloques: Es más eficiente y reduce la sobrecarga en ejecución.

191

Page 207: Libro de Texto. Sistemas Operativos

Es una mezcla de los métodos de asignación contigua y no contigua.

Se asignan bloques de sectores contiguos en vez de sectores individuales.

El sistema trata de asignar nuevos bloques a un archivo eligiendo bloques libres lo más próximos posible a los bloques del archivo existentes.

Las formas más comunes de implementar la asignación por bloques son:

Encadenamiento de bloques. Encadenamiento de bloques de índice. Transformación de archivos orientada hacia bloques.

o Encadenamiento de bloques o lista ligada: Las entradas en el directorio de usuarios apuntan al primer

bloque de cada archivo. Cada uno de los bloques de longitud fija que forman un

archivo contiene dos partes: Un bloque de datos. Un apuntador al bloque siguiente.

Cada bloque contiene varios sectores. Frecuentemente el tamaño de un bloque se corresponde

con el de una pista completa del disco. Localizar un registro determinado requiere:

Buscar en la cadena de bloques hasta encontrar el bloque apropiado.

Buscar en el bloque hasta encontrar el registro. El examen de la cadena desde el principio puede ser lento

ya que debe realizarse de bloque en bloque, y pueden estar dispersos por todo el disco.

La inserción y el retiro son inmediatos, dado que se deben modificar los apuntadores del bloque precedente.

Se pueden usar “listas de encadenamiento doble”, hacia adelante y hacia atrás, con lo que se facilita la búsqueda (ver Figura 5.15)

192

Page 208: Libro de Texto. Sistemas Operativos

Fig. 5.15 Encadenamiento de bloques o lista ligada de bloqueso Encadenamiento de bloques de índices:

Los apuntadores son colocados en varios bloques de índices separados:

Cada bloque de índices contiene un número fijo de elementos.

Cada entrada contiene un identificador de registros y un apuntador a ese registro.

Si es necesario utilizar más de un bloque de índices para describir un archivo, se encadena una serie de bloques de índices.

La gran ventaja es que la búsqueda puede realizarse en los propios bloques de índices.

Los bloques de índices pueden mantenerse juntos en el almacenamiento secundario para acortar la búsqueda, pero para mejor performance podrían mantenerse en el almacenamiento primario.

La principal desventaja es que las inserciones pueden requerir la reconstrucción completa de los bloques de índices:

Una posibilidad es dejar vacía una parte de los bloques de índices para facilitar inserciones futuras y retardar las reconstrucciones.

193

Page 209: Libro de Texto. Sistemas Operativos

Es suficiente que el dato del directorio contenga el número de bloque inicial para localizar todos los bloques restantes, sin importar el tamaño del archivo (ver Figura 5.16).

Fig. 5.16 Encadenamiento de bloques de índiceso Transformación de archivos orientada hacia bloques:

Se utilizan números de bloques en vez de apuntadores. Los números de bloques se convierten fácilmente a

direcciones de bloques gracias a la geometría del disco. Se conserva un mapa del archivo, conteniendo una entrada

para cada bloque del disco. Las entradas en el directorio del usuario apuntan a la

primera entrada al mapa del archivo para cada archivo. Cada entrada al mapa del archivo contiene el número del

bloque siguiente de ese archivo.

194

Page 210: Libro de Texto. Sistemas Operativos

La entrada al mapa del archivo correspondiente a la última entrada de un archivo determinado se ajusta a algún valor “centinela” (“nil”) para indicar que se alcanzó el último bloque de un archivo.

El sistema puede mantener una lista de bloques libres. La principal ventaja es que las cercanías físicas del disco se

reflejan en el mapa del archivo (ver Figura 5.17).

Fig. 5.17 Transformación de archivos orientada hacia bloqueso Nodos-i (nodos índices):

Se asocia a cada archivo una pequeña tabla, llamada nodo-i (nodo índice):

Contiene los atributos y direcciones en disco de los bloques del archivo.

195

Page 211: Libro de Texto. Sistemas Operativos

Se traslada del disco a la memoria principal al abrir el archivo.

En rigor, almacena solo las primeras direcciones en disco:

o Si el archivo es pequeño, toda la información está en el nodo-i.

o Si el archivo es grande, una de las direcciones en el nodo-i es la dirección de un bloque en el disco llamado bloque simplemente indirecto:

Contiene las direcciones en disco adicionales. Si resulta insuficiente, otra dirección en el

nodo-i, el bloque doblemente indirecto, contiene la dirección de un bloque que presenta una lista de los bloques simplemente indirectos:

Cada bloque simplemente indirecto apunta a un grupo de bloques de datos.

De ser necesario se pueden utilizar bloques triplemente indirectos (ver Figura 5.18).

196

Page 212: Libro de Texto. Sistemas Operativos

Fig. 5.18 Esquema de un nodo-i

Implantación de Directorios.

Para abrir un archivo el S. O. utiliza información del directorio:

El directorio contiene la información necesaria para encontrar los bloques en el disco.

El tipo de información varía según el sistema.

La principal función del sistema de directorios es asociar el nombre del archivo con la información necesaria para localizar los datos. Un aspecto íntimamente ligado con esto es la posición de almacenamiento de los atributos:

197

Page 213: Libro de Texto. Sistemas Operativos

Una posibilidad es almacenarlos en forma directa dentro del dato del directorio.

Otra posibilidad es almacenar los atributos en el nodo-i en vez de utilizar la entrada del directorio.

5.8 Mecanismos de recuperación en caso de falla.

Es necesario proteger la información alojada en el sistema de archivos, efectuando los resguardos correspondientes. De esta manera se evitan las consecuencias generalmente catastróficas de la pérdida de los sistemas de archivos. Las pérdidas se pueden deber a problemas de hardware, software, hechos externos, etc. Manejo de un bloque defectuoso:

Se utilizan soluciones por hardware y por software.

La solución en hardware:

Consiste en dedicar un sector del disco a la lista de bloques defectuosos. Al inicializar el controlador por primera vez:

o Lee la “lista de bloques defectuosos”. o Elige un bloque (o pista) de reserva para reemplazar los

defectuosos. o Registra la asociación en la lista de bloques defectuosos. o En lo sucesivo, las solicitudes del bloque defectuoso utilizarán el

de repuesto.

La solución en software: Requiere que el usuario o el sistema de archivos construyan un archivo

con todos los bloques defectuosos. Se los elimina de la “lista de bloques libres”. Se crea un “archivo de bloques defectuosos”:

o Esta constituido por los bloques defectuosos. o No debe ser leído ni escrito. o No se debe intentar obtener copias de respaldo de este archivo.

Respaldos (copias de seguridad o de back-up):

Es muy importante respaldar los archivos con frecuencia. Los respaldos pueden consistir en efectuar copias completas del contenido de los discos (flexibles o rígidos). Una estrategia de respaldo consiste en dividir los discos en áreas de datos y áreas de respaldo, utilizándolas de a pares:

Se desperdicia la mitad del almacenamiento de datos en disco para respaldo.

Cada noche (o en el momento que se establezca), la parte de datos de la unidad 0 se copia a la parte de respaldo de la unidad 1 y viceversa.

198

Page 214: Libro de Texto. Sistemas Operativos

Otra estrategia es el vaciado por incrementos o respaldo incremental: Se obtiene una copia de respaldo periódicamente (por ej.: una vez por

mes o por semana), llamada copia total. Se obtiene una copia diaria solo de aquellos archivos modificados desde

la última copia total; en estrategias mejoradas, se copian solo aquellos archivos modificados desde la última vez que dichos archivos fueron copiados.

Se debe mantener en el disco información de control como una “lista de los tiempos de copiado” de cada archivo, la que debe ser actualizada cada vez que se obtienen copias de los archivos y cada vez que los archivos son modificados.

Puede requerir una gran cantidad de cintas de respaldo dedicadas a los respaldos diarios entre respaldos completos.

Consistencia del sistema de archivos:

Muchos sistemas de archivos leen bloques, los modifican y escriben en ellos después. Si el sistema falla antes de escribir en los bloques modificados, el sistema de archivos puede quedar en un “estado inconsistente”. La inconsistencia es particularmente crítica si alguno de los bloques afectados son:

Bloques de nodos-i. Bloques de directorios. Bloques de la lista de bloques libres.

La mayoría de los sistemas dispone de un programa utilitario que verifica la consistencia del sistema de archivos:

Se pueden ejecutar al arrancar el sistema o a pedido. Pueden actuar sobre todos o algunos de los discos. Pueden efectuar verificaciones a nivel de bloques y a nivel de archivos. La consistencia del sistema de archivos no asegura la consistencia

interna de cada archivo, respecto de su contenido. Generalmente pueden verificar también el sistema de directorios y / o de

bibliotecas.

Generalmente los utilitarios utilizan dos tablas: Tabla de bloques en uso. Tabla de bloques libres. Cada bloque debe estar referenciado en una de ellas.

Si un bloque no aparece en ninguna de las tablas se trata de una falla llamada bloque faltante:

No produce daños pero desperdicia espacio en disco. Se soluciona añadiendo el bloque a la tabla de bloques libres.

199

Page 215: Libro de Texto. Sistemas Operativos

También podría detectarse la situación de falla debida a un bloque referenciado dos veces en la tabla de bloques libres:

Esta falla no se produce en los sistemas de archivos basados en mapas de bits, sí en los basados en tablas o listas.

La solución consiste en depurar la tabla de bloques libres.

Una falla muy grave es que el mismo bloque de datos aparezca referenciado dos o más veces en la tabla de bloques en uso:

Como parte del mismo o de distintos archivos. Si uno de los archivos se borra, el bloque aparecería en la tabla de

bloques libres y también en la de bloques en uso. Una solución es que el verificador del sistema de archivos:

o Asigne un bloque libre. o Copie en el bloque libre el contenido del bloque conflictivo. o Actualice las tablas afectando el bloque copia a alguno de los

archivos. o Agregue el bloque conflictivo a la tabla de bloques libres. o Informe al usuario para que verifique el daño detectado y la

solución dada.

Otro error posible es que un bloque esté en la tabla de bloques en uso y en la tabla de bloques libres:

Se soluciona eliminándolo de la tabla de bloques libres.

Las verificaciones de directorios incluyen controles como: Número de directorios que apuntan a un nodo-i con los contadores de

enlaces almacenados en los propios nodos-i; en un sistema consistente de archivos deben coincidir.

Una posible falla es que el contador de enlaces sea mayor que el número de entradas del directorio:

Aunque se eliminaran todos los archivos de los directorios el contador sería distinto de cero y no se podría eliminar el nodo-i.

No se trata de un error serio pero produce desperdicio de espacio en disco con archivos que no se encuentran en ningún directorio.

Se soluciona haciendo que el contador de enlaces en el nodo-i tome el valor correcto; si el valor correcto es 0, el archivo debe eliminarse.

Otro tipo de error es potencialmente catastrófico: Si dos entradas de un directorio se enlazan a un archivo, pero el nodo-i

indica que solo existe un enlace, entonces, al eliminar cualquiera de estas entradas de directorio, el contador del nodo-i tomará el valor 0.

Debido al valor 0 el sistema de archivos lo señala como no utilizado y libera todos sus bloques.

Uno de los directorios apunta hacia un nodo-i no utilizado, cuyos bloques se podrían asignar entonces a otros archivos.

200

Page 216: Libro de Texto. Sistemas Operativos

La solución es forzar que el contador de enlaces del nodo-i sea igual al número de entradas del directorio.

También se pueden hacer verificaciones heurísticas, por ejemplo.: Cada nodo-i tiene un modo, pero algunos modos son válidos aunque

extraños: o Ej.: Se prohíbe el acceso al propietario y todo su grupo, pero se

permite a los extraños leer, escribir y ejecutar el archivo. o La verificación debería detectar e informar de estas situaciones.

Se debería informar como sospechosos aquellos directorios con excesivas entradas, por ej. más de mil.

201

Page 217: Libro de Texto. Sistemas Operativos

Resumen

Todas las aplicaciones computarizadas necesitan almacenar y recuperar la información. La solución es el almacenamiento de la información en discos y otros medios externos en unidades llamadas archivos.Hay archivos virtuales y reales. Un archivo virtual, es un archivo de uso temporal que es utilizado por los procesos del sistema mientras se están ejecutando dichos procesos. Archivo Real es un objeto que contiene programas, datos o cualquier otro elemento. Un archivo se muestra de manera real, en la información del espacio que ocupa en un disco duro o sistema de almacenamiento, en otras palabras su tamaño en bytes. El sistema de archivos es la parte del S. O. responsable de permitir “compartir controladamente” la información de los archivos. La organización lógica y física se refiere a las diferentes maneras en las que puede ser organizada la información de los archivos, así como las diferentes maneras en que ésta puede ser accesada.Los tipos de acceso a los archivos más comunes son: acceso aleatorio y acceso secuencial.Un método de asignación de espacio en disco determina la manera en que un Sistema Operativo controla los lugares del disco ocupados por cada archivo de datos. Se debe controlar básicamente la identificación del archivo, sector de inicio y sector final. Los directorios generalmente son utilizados por los S.O. para llevar un registro de los archivos. Es necesario proteger la información alojada en el sistema de archivos, efectuando los resguardos correspondientes. De esta manera se evitan las consecuencias generalmente catastróficas de la pérdida de los sistemas de archivos. Las pérdidas se pueden deber a problemas de hardware, software, hechos externos, etc.

Problemas

1. Explique que es un archivo

2. Como se llama a la parte del sistema operativo que es el encargado de permitir compartir controladamente la información de los archivos.

3. Explique que es un directorio.

4. Los sistemas que manejan archivos secuenciales siempre tiene una operación para rebobinar archivos. Los sistemas que manejan archivos de acceso aleatorio también lo necesitan?

202

Page 218: Libro de Texto. Sistemas Operativos

5. Algunos sistemas operativos proporcionan una llamada al sistema rename para asignar un nuevo nombre a un archivo. ¿Hay alguna diferencia entre usar esta llamada para cambiar el nombre de un archivo y simplemente copiar el viejo?

6. En algunos sistemas es posible mapear una parte de un archivo en la memoria. ¿Qué restricciones deben imponer tales sistemas? ¿Cómo se implementa este mapeo parcial?

7. Un sistema operativo sencillo solo maneja un directorio pero le permite contener un número arbitrariamente grande de archivos con nombres arbitrariamente largos. ¿Puede simularse aquí algo parecido a un sistema de archivos jerárquico? ¿Cómo?

8. Mencione 5 causas en las que se produzca perdida de información de los archivos.

9. Algunos dispositivos digitales para consumidor necesitan almacenar datos, por ejemplo como archivos. Mencione un dispositivo moderno que requiera almacenar archivos y para el cual la asignación contigua sería una magnifica idea.

10. Explique en que consiste la falla llamada bloque faltante.

203

Page 219: Libro de Texto. Sistemas Operativos

UNIDAD 6. Protección y seguridad.

6.1 Concepto y objetivos de protección.

Se consideraran mecanismos de protección a los mecanismos específicos del sistema operativo utilizados para resguardar la información de la computadora (Tanenbaum, 2003).

6.2 Funciones del sistema de protección.

Dado que los sistemas de cómputo se han venido haciendo cada vez más sofisticados en sus aplicaciones, la necesidad de proteger su integridad, también ha crecido. Los aspectos principales de protección en un Sistema Operativo son:

1. Protección de los procesos del sistema contra los procesos de usuario. 2. Protección de los procesos de usuario contra los de otros procesos usuario. 3. Protección de Memoria. 4. Protección de los dispositivos.

Políticas de protección.

La función de la protección en un sistema computacional es la de proveer un mecanismo para la aplicación de políticas que gobiernen el uso de los recursos. Estas políticas pueden ser establecidas de varias maneras. Algunas son fijadas durante el diseño del sistema, mientras que otras son formuladas como parte de la administración en la ejecución del sistema. Algunas otras son definidas por usuarios individuales para proteger sus archivos y programas. Un sistema de protección debe tener la flexibilidad para aplicar las políticas que sean declaradas para ello.

Las políticas para el uso de recursos pueden variar, dependiendo de la aplicación y pueden estar sujetas a cambios. Por estas razones, la protección no puede ser considerada como un problema que solamente concierne al diseñador de un Sistema Operativo, sino que debe considerarse, como una herramienta para los programadores de aplicaciones, de manera que los recursos creados y soportados por un subsistema de aplicación, puedan ser protegidos contra el mal uso.

Un principio importante es la separación entre política y mecanismo. Los mecanismos determinan como será realizado algo. En contraste, las políticas deciden que es lo que se realizará. Es posible que las políticas cambien de lugar en lugar o de tiempo en tiempo. En el peor de los casos, cada cambio en la política requerirá un cambio en el subyacente mecanismo.

204

Page 220: Libro de Texto. Sistemas Operativos

6.3 Implantación de matrices de acceso.

Un sistema computacional es una colección de procesos y objetos. Los objetos involucran tanto objetos hardware (como CPU, segmentos de memoria, impresoras, etc.) y objetos software (como archivos, programas, semáforos, etc.). Cada objeto tiene un nombre único que lo diferencía de los demás objetos del sistema y cada una puede ser accesado solamente mediante operaciones bien definidas. Los objetos son esencialmente tipos de datos abstractos. Las posibles operaciones que realice un objeto, dependen de él mismo y sus características.

Por ejemplo, un CPU se utiliza solo para ejecución; en los segmentos de memoria se puede leer o escribir; los archivos de datos pueden ser creados, abiertos, escritos, leídos, cerrados y borrados; un archivo de programa puede ser leído, escrito, ejecutado y borrado.

Obviamente, un proceso tendrá permitido accesar solamente a aquellos recursos que está autorizado a accesar solamente a aquellos recursos que está autorizado a accesar. Además, en un momento dado podrá accesar a aquellos recursos que requiera para realizar su tarea. Este requerimiento comúnmente llamado el principio "Need_To_Know" es útil en la limitación de la cantidad de daño que un proceso defectuoso pueda causar al sistema.

Por ejemplo, cuando un proceso "P" invoque al procedimiento "A", al procedimiento le será permitido accesar solamente sus propias variables y los parámetros actuales pasados a él; no podrá accesar todas las variables del proceso "P". Similarmente considérese el caso de que el proceso "P" invoque algún compilador para compilar algún archivo. El compilador no podrá accesar cualquier archivo arbitrariamente, sino a un subconjunto bien definido de archivos (tales como: archivos fuente, archivos de listado, etc.) relacionados al archivo que será compilado. De manera inversa, el compilador no puede tener archivos privados que utilice para propósitos de conteo y optimización, los cuales no podrán ser accesados por el proceso "P".

Para facilitar este esquema se introduce el concepto de dominio de protección. Un proceso opera dentro de un dominio de protección, el cual especifica los recursos que el proceso puede accesar. Cada dominio define un conjunto de objetos y los tipos de operaciones que pueden ser realizadas sobre cada objeto.

La capacidad de ejecutar una operación sobre un objeto es un derecho de acceso. Un dominio es una colección de derechos de acceso, cada uno de los cuales es un par ordenado <Nombre_Objeto, Conjunto_de_Operaciones>.

Por ejemplo, si el dominio "D" tiene derecho de acceso <Archivo F, {Leer, Escribir}>, entonces un proceso que se está ejecutando en el dominio "D" puede

205

Page 221: Libro de Texto. Sistemas Operativos

tanto leer como escribir en el archivo F; no podrá realizar alguna otra operación sobre este objeto.

Los dominios de protección no necesitan ser distintos; por el contrario, pueden compartir derechos de acceso. Por el contrario, pueden compartir derechos de acceso. Por ejemplo; en la siguiente figura 6.1: 

D1 D2 D3

<O3, {Leer, Escribir}> <O2, {Escribir}> <01, {Ejecutar}>

<O1, {Leer, Escribir}> <O4, {Imprimir}> <O3, {Leer}>

<O4, {Imprimir}>

Fig. 6.1 Dominios de protección con derechos de acceso

Se tienen 3 dominios de protección: D1, D2 y D3. El derecho de acceso <O4, Imprimir> está compartido por los dominios "D2" y "D3". Esto implica que un proceso ejecutándose en el dominio "D1" puede tanto leer como escribir sobre el objeto "O1"; mientras que ejecutándose en el dominio "D3", el proceso podrá solamente ejecutar ese mismo objeto.

Implantación de matrices con derechos de acceso.

Un modelo de protección puede ser visto abstractamente como una matriz, llamada matriz de derecho. Los renglones de la matriz representan dominios y las columnas representan objetos. Cada entrada en la matriz contiene un conjunto de derechos de acceso. Dado que los objetos son definidos explícitamente por la columna, se puede omitir el nombre del objeto en el derecho de acceso. La entrada "Matriz[i, j]" define el conjunto de operaciones que un proceso ejecutándose en el dominio "Dj" puede realizar sobre el objeto "Oj".  

Considérese la siguiente matriz de acceso (figura 6.2): 

Dominio \ Objeto A1 A2 A3 COM1 LPT1

D1 Leer   Leer    

D2       Leer Imprimir

D3   Leer Ejecutar    

D4 Leer Escribir

  Leer Escribir    

Fig. 6.2 Matriz de acceso

206

Page 222: Libro de Texto. Sistemas Operativos

Hay 4 dominios y 5 objetos: 3 Archivos ("A1", "A2", "A3") 1 Puerto Serial y 1 impresora. Cuando un proceso se ejecuta en O1, puede leer los archivos "A1" y "A3".

Un proceso ejecutándose en el dominio "D4" tiene los mismos privilegios que en "D1", pero además puede escribir en los archivos. Nótese que en el puerto serial y la impresora solo se pueden ser ejecutados por procesos del dominio "D2".

Estructuras de protección dinámicas.

Las matrices de acceso vistas hasta el momento, en las que no cambian los derechos en cada dominio durante su ejecución, son un ejemplo de Estructuras de Protección Estáticas. Con el fin de ofrecer flexibilidad y de implementar eficientemente la protección, un Sistema Operativo debe soportar cambios en los derechos de acceso. Para esto se requiere implementar alguna estructura de protección dinámica.

En este caso continuaremos considerando las matrices de acceso, aunque en su versión dinámica. Básicamente se requieren cuatro nuevos derechos de acceso: Copia, Cambio, Propietario y Control. 

Derecho de acceso copia.

Este derecho de acceso da la facultad a un proceso de copiar derechos existentes en un dominio hacia otro dominio para el objeto en cuestión. O sea, este derecho genera copias en columnas.

Por ejemplo, considérese la siguiente matriz de acceso (Figura 6.3): 

  Archivo 1 Archivo 1 COM1 Impresora

D1 Escribir   Enviar+  

D2   Leer+ Escribir

   

D3     Recibir  

D4 Leer     Imprimir

Fig. 6.3 Matriz con derecho de acceso de copia

En este caso estará indicado el derecho copia añadiendo el signo (+) al nombre de los derechos que pueden ser copiados.

En la tabla se indica que un proceso ejecutándose en el dominio 1 podrá copiar hacia cualquier otro dominio, el derecho enviar sobre el objeto "COM1" y que un

207

Page 223: Libro de Texto. Sistemas Operativos

proceso ejecutándose en el dominio "D2" podrá copiar el derecho "Leer" hacia cualquier otro dominio sobre el objeto "Archivo2".

De esta manera, en algún momento posterior, la situación de la tabla podría ser la siguiente (Figura 6.4):

 

  Archivo 1  Archivo 2  COM 1 Impresora

D1 Escribir Leer Enviar+  

D2   Leer+

Escribir

   

D3     Recibir  

D4 Leer   Enviar Imprimir

Fig. 6.4 Matriz posterior al acceso de copia

En la que se ha copiado el derecho "Enviar" del dominio "D1" al dominio "D4" sobre el objeto "COM1" y se ha copiado el derecho "Leer" del dominio "D2" al dominio "D1" sobre el objeto "Archivo 2".

Puede observarse que los derechos "copiados" no contienen el signo (+), o sea, se ha realizado una copia limitada. En general se podría hablar de 3 variantes del derecho "copia": Copia Limitada, Copia Completa, Translación.

COPIA LIMITADA. La copia no incluye el derecho "Copia", con lo que no se podrán hacer copias sucesivas del derecho. Se puede indicar con el signo (+).

COPIA COMPLETA. La copia incluye el derecho "Copia", por lo que se pueden realizar copias sucesivas del derecho. Se puede indicar con el signo (*).

TRANSLACIÓN. El derecho en cuestión junto con el derecho copia se eliminan del dominio original y se coloca en el nuevo dominio. Esta es una forma básica de retirar derechos de un dominio para asignarlo a otro. Se puede indicar con el signo (?).

Derecho de acceso cambio.

Este derecho de acceso indica la posibilidad de un proceso para cambiarse de un dominio a otro. La operación cambio actúa sobre dominios, o sea, en este caso los dominios son los objetos. Entonces, para considerar este derecho de acceso se deberán incluir los dominios como objetos adicionales en la matriz de acceso. Considérese la siguiente matriz de acceso (Figura 6.5): 

208

Page 224: Libro de Texto. Sistemas Operativos

  Arch1 Arch2 COM1 Impresora D1 D2 D3 D4

D1 Escribir

Leer Enviar+         Cambio(a)

D2   Leer

Escribir

        Cambio(b)  

D3     Recibir          

D4 Leer   Enviar Imprimir Cambio(c)      

Fig. 6.5 Matriz con derecho de acceso de cambio

Esta tabla indica que un proceso ejecutándose en "D1" puede cambiarse al dominio "D4" (a); un proceso ejecutándose en "D2" puede cambiarse a "D3"(b) y un proceso ejecutándose en el dominio "D4" puede cambiarse a "D1"(c).

6.4 Protección basada en el lenguaje.

La protección que se ofrece en los sistemas de computación existentes casi siempre se ha logrado con la ayuda del núcleo de un sistema operativo, que actúa como agente de seguridad que inspecciona y valida cada intento por acceder a un recurso protegido. Puesto que la validación de todos los accesos puede dar pie a un gasto extra considerable, debemos apoyarla con hardware para reducir el costo de cada validación o bien debemos aceptar que el diseñador del sistema podría inclinarse por sacrificar los objetivos de la protección. Es difícil satisfacer todos estos objetivos si los mecanismos de soporte con que se cuenta restringen la flexibilidad para implementar diversas políticas de protección.

A medida que ha aumentado la complejidad de los sistemas operativos, sobre todo al trata de ofrecer interfaces de más alto nivel con el usuario, lo objetivos de la protección se han vuelto mucho más refinados. En esta refinación observamos que los diseñadores de los diseñadores de los sistemas de protección se han apoyado mucho en ideas que se originaron en los lenguajes de programación y especialmente en los conceptos de tipos de datos abstractos y objetos. Los sistemas de protección ahora se ocupan no sólo de la identidad de un recurso al cual se intenta acceder, sino también de la naturaleza funcional de ese acceso. En los sistemas de protección más nuevos, el interés en la función que se invocará se extiende más allá de un conjunto de funciones definidas por el sistema, como los métodos de acceso a archivos estándar, para incluir funciones que también podrían ser definidas por el usuario.

Las políticas para el uso de recursos también podrían variar, dependiendo de la aplicación, y podrían cambiar con el tiempo. Por estas razones, la protección ya no puede considerarse como un asunto que sólo concierne al diseñador de un

209

Page 225: Libro de Texto. Sistemas Operativos

sistema operativo; también debe estar disponible como herramienta que el diseñador de aplicaciones pueda usar para proteger los recursos de un subsistema de aplicación contra intervenciones o errores.

Aquí es donde los lenguajes de programación entran en escena. Especificar el control de acceso deseado a un recurso compartido en un sistema es hacer una declaración acerca del recurso. Este tipo de declaración se puede integrar en un lenguaje mediante una extensión de su mecanismo de tipificación. Si se declara la protección junto con la tipificación de los datos, el diseñado de cada subsistema puede especificar sus necesidades de protección así debería darse directamente durante la redacción del programa, y en el lenguaje en el que el programa mismo se expresa. Este enfoque tiene varias ventajas importantes:

1. Las necesidades de protección se declaran de forma sencilla en vez de programarse como una secuencia de llamadas a procedimientos de un sistema operativo. 2. Las necesidades de protección pueden expresarse independientemente de los recursos que ofrezca un sistema operativo en particular. 3. El diseñador de un subsistema no tiene que proporcionar los mecanismos para hacer cumplir la protección. 4. Una notación declarativa es natural porque los privilegios de acceso están íntimamente relacionados con el concepto lingüístico de tipo de datos.

Hay diversas técnicas que una implementación de lenguaje de programación puede utilizar para hacer cumplir la protección, pero cualquiera de ellas deberá depender hasta cierto punto del grado de soporte de una máquina subyacente y su sistema operativo.

¿Qué ventajas relativas tiene entonces el cumplimiento basado exclusivamente en un núcleo, en comparación con el cumplimiento forzado en gran medida por un compilador?

• Seguridad: La obligación del cumplimiento por un núcleo ofrece un mayor grado de seguridad del sistema de protección mismo, que el que ofrece la generación de código de verificación de protección por un compilador. En un esquema apoyado por compilador, la seguridad depende de lo correcto que sea el traductor, de algún mecanismo subyacente de gestión de almacenamiento que proteja los segmentos desde los cuales se ejecuta el código compilador y, en última instancia, de la seguridad de los archivos desde los que se carga el programa. • Flexibilidad: Hay límites a la flexibilidad de un núcleo de protección para implementar una política definida por el usuario, aunque podría proporcionar recursos suficientes para que el sistema haga cumplir sus propias políticas. Con un lenguaje de programación, se puede declarar la política de protección y hacerse cumplir según sea necesario en una implementación- • Eficiencia: Se logra la eficiencia máxima cuando hardware apoya directamente el cumplimiento de la protección. En la medida en que se requiera soporte de software, el cumplimiento basado en el lenguaje tiene la ventaja de que es

210

Page 226: Libro de Texto. Sistemas Operativos

posible verificar el cumplimiento del acceso estático fuera de línea en el momento de la compilación.

En síntesis, la especificación de la protección en un lenguaje de programación permite describir un alto nivel de políticas de asignación y uso de recursos.

6.5 Concepto de seguridad.

Se entenderá por seguridad a los problemas generales relativos a la garantía de que los archivos no sean leídos o modificados por personal no autorizado; esto incluye aspectos técnicos, de administración, legales y políticos (Tanenbaum, 2003).

Se consideran mecanismos de protección a los mecanismos específicos del sistema operativo utilizados para resguardar la información de la computadora.

La frontera entre seguridad y mecanismos de protección no está bien definida.

6.6 Clasificaciones de la seguridad.

Dos de las más importantes facetas de la seguridad son (Tanenbaum, 2003):

La pérdida de datos. Los intrusos.

Algunas de las causas más comunes de la pérdida de datos son: Actos y hechos diversos, como incendios, inundaciones, terremotos,

guerras, revoluciones, roedores, etc. Errores de hardware o de software, como fallas en la CPU, discos o cintas

ilegibles, errores de telecomunicación, errores en los programas, etc. Errores humanos, por ej., entrada incorrecta de datos, mal montaje de

cintas o discos, ejecución incorrecta de programas, pérdida de cintas o discos, etc.

La mayoría de estas causas se pueden enfrentar con el mantenimiento de los respaldos (back-ups) adecuados; debería haber copias en un lugar alejado de los datos originales. Respecto del problema de los intrusos, se los puede clasificar como:

Pasivos: solo desean leer archivos que no están autorizados a leer. Activos: desean hacer cambios no autorizados a los datos.

Para diseñar un sistema seguro contra intrusos: Hay que tener en cuenta el tipo de intrusos contra los que se desea tener

protección.

211

Page 227: Libro de Texto. Sistemas Operativos

Hay que ser consciente de que la cantidad de esfuerzo que se pone en la seguridad y la protección depende claramente de quién se piensa sea el enemigo.

Algunos tipos de intrusos son los siguientes: Curiosidad casual de usuarios no técnicos. Conocidos (técnicamente capacitados) husmeando. Intentos deliberados por hacer dinero. Espionaje comercial o militar.

Otro aspecto del problema de la seguridad es la privacía: Protección de las personas respecto del mal uso de la información en

contra de uno mismo. Implica aspectos legales y morales.

6.7 Validación y amenazas al sistema.

La validación tiene que ver con:

La verificación y la auditoría del sistema. La autentificación de los usuarios.

Los sistemas sofisticados de autentificación de usuarios resultan muy difíciles de evitar por parte de los intrusos. Un problema existente es la posibilidad de que el sistema rechace a usuarios legítimos:

Un sistema de reconocimiento de voz podría rechazar a un usuario legítimo resfriado.

Un sistema de huellas digitales podría rechazar a un usuario legítimo que tenga una cortadura o una quemadura.

Verificación de Amenazas .Es una técnica según la cual los usuarios no pueden tener acceso directo a un recurso:

Solo lo tienen las rutinas del S.O. llamadas programas de vigilancia. El usuario solicita el acceso al S.O. El S O. niega o permite el acceso. El acceso lo hace un programa de vigilancia que luego pasa los

resultados al programa del usuario. Permite:

o Detectar los intentos de penetración en el momento en que se producen.

o Advertir en consecuencia.

Amplificación.

212

Page 228: Libro de Texto. Sistemas Operativos

La amplificación se produce cuando:

Un programa de vigilancia necesita para cumplir su cometido mayores derechos de acceso de los que disponen los usuarios:

o Ej.: se requiere calcular un promedio para lo cual es necesario leer un conjunto de registros a los que el usuario no tiene acceso individualmente.

Protección por Contraseña.

Las clases de elementos de autentificación para establecer la identidad de una persona son:

Algo sobre la persona: o Ej.: huellas digitales, registro de la voz, fotografía, firma, etc.

Algo poseído por la persona: o Ej.: insignias especiales, tarjetas de identificación, llaves, etc.

Algo conocido por la persona: o Ej.: contraseñas, combinaciones de cerraduras, etc.

El esquema más común de autentificación es la protección por contraseña: El usuario elige una palabra clave, la memoriza, la teclea para ser

admitido en el sistema computarizado: o La clave no debe desplegarse en pantalla ni aparecer impresa.

La protección por contraseñas tiene ciertas desventajas si no se utilizan criterios adecuados para:

Elegir las contraseñas. Comunicarlas fehacientemente en caso de que sea necesario. Destruir las contraseñas luego de que han sido comunicadas. Modificarlas luego de algún tiempo.

Los usuarios tienden a elegir contraseñas fáciles de recordar: Nombre de un amigo, pariente, perro, gato, etc. Número de documento, domicilio, patente del auto, etc.

Estos datos podrían ser conocidos por quien intente una violación a la seguridad mediante intentos repetidos, por lo tanto debe limitarse la cantidad de intentos fallidos de acierto para el ingreso de la contraseña. La contraseña no debe ser muy corta para no facilitar la probabilidad de acierto. Tampoco debe ser muy larga para que no se dificulte su memorización, ya que los usuarios la anotarían por miedo a no recordarla y ello incrementaría los riesgos de que trascienda.

Auditoría y Controles de Acceso.

213

Page 229: Libro de Texto. Sistemas Operativos

Auditoría. La auditoría suele realizarse a posteriori en sistemas manuales, es decir que se examinan las recientes transacciones de una organización para determinar si hubo ilícitos. La auditoría en un sistema informático puede implicar un procesamiento inmediato, pues se verifican las transacciones que se acaban de producir. Un registro de auditoría es un registro permanente de acontecimientos importantes acaecidos en el sistema informático:

Se realiza automáticamente cada vez que ocurre tal evento. Se almacena en un área altamente protegida del sistema. Es un mecanismo importante de detección.

El registro de auditoría debe ser revisado cuidadosamente y con frecuencia: Las revisiones deben hacerse:

o Periódicamente: Se presta atención regularmente a los problemas de

seguridad. o Al azar:

Se intenta atrapar a los intrusos desprevenidos.

Controles de Acceso. Lo fundamental para la seguridad interna es controlar el acceso a los datos almacenados. Los derechos de acceso definen qué acceso tienen varios sujetos o varios objetos. Los sujetos acceden a los objetos. Los objetos son entidades que contienen información. Los objetos pueden ser:

Concretos: o Ej.: discos, cintas, procesadores, almacenamiento, etc.

Abstractos: o Ej.: estructuras de datos, de procesos, etc.

Los objetos están protegidos contra los sujetos. Las autorizaciones a un sistema se conceden a los sujetos. Los sujetos pueden ser varios tipos de entidades:

Ej.: usuarios, procesos, programas, otras entidades, etc.

Los derechos de acceso más comunes son: Acceso de lectura. Acceso de escritura. Acceso de ejecución.

Una forma de implementación es mediante una matriz de control de acceso con: Filas para los sujetos. Columnas para los objetos. Celdas de la matriz para los derechos de acceso que un usuario tiene a

un objeto.

214

Page 230: Libro de Texto. Sistemas Operativos

Una matriz de control de acceso debe ser muy celosamente protegida por el S. O.

Ataques Genéricos a Sistemas Operativos.

Los principales ataques genéricos a los S. O. son los siguientes:

Asincronismo:

Se tienen procesos múltiples que progresan asincrónicamente. Un proceso podría modificar los parámetros ya validados por otro proceso

pero aún no utilizados. Un proceso podría pasar valores malos a otro aún cuando el segundo

realice una verificación extensa.

Rastreo: Un usuario revisa el sistema intentando localizar información privilegiada.

Entre líneas: Se utiliza una línea de comunicaciones mantenida por un usuario

habilitado que está inactivo.

Código clandestino: Se modifica el S. O. bajo una presunta depuración pero se incorpora

código que permite ingresos no autorizados.

Prohibición de acceso: Un usuario escribe un programa que bloquea el acceso o servicio a los

usuarios legítimos mediante: o Caídas del sistema, ciclos infinitos, monopolio de recursos, etc.

Procesos sincronizados interactivos: Se utilizan las primitivas de sincronización del sistema para compartir y

pasarse información entre sí.

Desconexión de línea: El intruso intenta acceder al trabajo de un usuario desconectado:

o Luego de una desconexión de línea. o Antes de que el sistema reconozca la desconexión.

Disfraz:

215

Page 231: Libro de Texto. Sistemas Operativos

El intruso asume la identidad de un usuario legítimo luego de haber obtenido la identificación apropiada por medios clandestinos.

Ataque “nak”: Si el S. O. permite a un usuario:

o Interrumpir un proceso en ejecución mediante una “tecla” de “reconocimiento negativo”.

o Realizar otra operación. o Reanudar el proceso interrumpido.

Un intruso podría “encontrar” al sistema en un estado no protegido y hacerse con el control.

Engaño al operador: Con un engaño se hace realizar al operador una acción que comprometa

la seguridad del sistema.

Parásito: Mediante equipamiento especial el intruso:

o Intercepta los mensajes entre un usuario habilitado y el procesador.

o Los modifica o reemplaza totalmente.

Caballo de Troya: El intruso coloca un código dentro del sistema que luego le permita

accesos no autorizados. Puede permanecer en el sistema. Puede borrar todo rastro de sí mismo luego de la penetración.

Parámetros inesperados: El intruso suministra valores inesperados a una llamada al núcleo. Intenta aprovechar una debilidad de los mecanismos de verificación de la

legalidad del S. O.

Virus computacionales:

Constituyen una categoría especial de ataque. Son un enorme problema para muchos usuarios.

o Son fragmentos de programas que se añaden a programas legítimos con la intención de infectar a otros.

Un virus difiere de un gusano en lo siguiente: o Un virus está a cuestas de un programa existente. o Un gusano es un programa completo en sí mismo.

Los virus y los gusanos intentan diseminarse y pueden crear un daño severo.

216

Page 232: Libro de Texto. Sistemas Operativos

Generalmente se propagan a través de copias ilegítimas de programas. Comúnmente los virus se ejecutan e intentan reproducirse cada vez que

se ejecuta el programa que los aloja. Frecuentemente los problemas con los virus son más fáciles de evitar que

de curar: o Utilizar software original adquirido en comercios respetables. o No utilizar copias “piratas”. o Efectuar controles rigurosos y frecuentes con programas antivirus

actualizados.

Una forma de probar la seguridad de un sistema es contratar un grupo de expertos en seguridad, conocido como el equipo tigre o equipo de penetración, cuyo objetivo es intentar penetrar el sistema de seguridad para descubrir sus falencias y proponer soluciones. Otro aspecto importante de la seguridad consiste en no subestimar los problemas que puede causar el personal.

6.8 Cifrado.

La criptografía es el arte o ciencia de cifrar y descifrar información mediante técnicas especiales y se emplea frecuentemente para permitir un intercambio de mensajes que sólo puedan ser leídos por personas a las que van dirigidos y que poseen los medios para descifrarlos.

Con más precisión, cuando se habla de esta área de conocimiento como ciencia, se debería hablar de criptología, que a su vez engloba tanto las técnicas de cifrado, es decir, la criptografía propiamente dicha, como sus técnicas complementarias, entre las cuales se incluye el criptoanálisis, que estudia métodos empleados para romper textos cifrados con objeto de recuperar la información original en ausencia de las claves.

En criptografía, la información original que debe protegerse se denomina texto en claro o texto plano. El cifrado es el proceso de convertir el texto plano en un galimatías ilegible, denominado texto cifrado o criptograma. Por lo general, la aplicación concreta del algoritmo de cifrado (también llamado cifra) se basa en la existencia de una clave: información secreta que adapta el algoritmo de cifrado para cada uso distinto. Cifra es una antigua palabra arábiga para designar el número cero; en la Antigüedad, cuando Europa empezaba a cambiar del sistema de numeración romano al arábigo, se desconocía el cero, por lo que este resultaba misterioso, de ahí probablemente que cifrado signifique misterioso.

217

Page 233: Libro de Texto. Sistemas Operativos

Las dos técnicas más sencillas de cifrado, en la criptografía clásica, son la sustitución (que supone el cambio de significado de los elementos básicos del mensaje -las letras, los dígitos o los símbolos-) y la transposición (que supone una reordenación de los mismos); la gran mayoría de las cifras clásicas son combinaciones de estas dos operaciones básicas.

El descifrado es el proceso inverso que recupera el texto plano a partir del criptograma y la clave. El protocolo criptográfico especifica los detalles de cómo se utilizan los algoritmos y las claves (y otras operaciones primitivas) para conseguir el efecto deseado. El conjunto de protocolos, algoritmos de cifrado, procesos de gestión de claves y actuaciones de los usuarios, es lo que constituyen en conjunto un criptosistema, que es con lo que el usuario final trabaja e interactúa.

Existen dos grandes grupos de cifras: los algoritmos que usan una única clave tanto en el proceso de cifrado como en el de descifrado, y los que emplean una clave para cifrar mensajes y una clave distinta para descifrarlos. Los primeros se denominan cifras simétricas, de clave simétrica o de clave privada, y son la base de los algoritmos de cifrado clásico. Los segundos se denominan cifras asimétricas, de clave asimétrica o de clave pública y forman el núcleo de las técnicas de cifrado modernas.

En el lenguaje cotidiano, la palabra código se usa de forma indistinta con cifra. En la criptografía, sin embargo, el término tiene un uso técnico especializado: los códigos son un método de criptografía clásica que consiste en sustituir unidades textuales más o menos largas o complejas, habitualmente palabras o frases, para ocultar el mensaje; por ejemplo, "cielo azul" podría significar «atacar al amanecer». Por el contrario, las cifras clásicas normalmente sustituyen o reordenan los elementos básicos del mensaje -letras, dígitos o símbolos-; en el ejemplo anterior, «rcnm arcteeaal aaa» sería un criptograma obtenido por transposición. Cuando se usa una técnica de códigos, la información secreta suele recopilarse en un libro de códigos.

Con frecuencia los procesos de cifrado y descifrado se encuentran en la literatura como encriptado y desencriptado, aunque ambos son neologismos erróneos —anglicismos de los términos ingleses encrypt y decrypt— todavía sin reconocimiento académico. Hay quien hace distinción entre cifrado/descifrado y encriptado/desencriptado según estén hablando de criptografía simétrica o asimétrica, pero la realidad es que la mayoría de los expertos hispanohablantes prefieren evitar ambos neologismos hasta el punto de que el uso de los mismos llega incluso a discernir a los aficionados y novatos en la materia de aquellos que han adquirido más experiencia y profundidad en la misma. Ideológicamente cifrar equivale a escribir y descifrar a leer lo escrito.

Historia de la criptografía.

218

Page 234: Libro de Texto. Sistemas Operativos

La historia de la criptografía es larga y abunda en anécdotas. Ya las primeras civilizaciones desarrollaron técnicas para enviar mensajes durante las campañas militares, de forma que si el mensajero era interceptado la información que portaba no corriera el peligro de caer en manos del enemigo. Posiblemente, el primer criptosistema que se conoce fuera documentado por el historiador griego Polibio: un sistema de sustitución basado en la posición de las letras en una tabla. También los romanos utilizaron sistemas de sustitución, siendo el método actualmente conocido como César, porque supuestamente Julio César lo empleó en sus campañas, uno de los más conocidos en la literatura (según algunos autores, en realidad Julio César no usaba este sistema de sustitución, pero la atribución tiene tanto arraigo que el nombre de este método de sustitución ha quedado para los anales de la historia). Otro de los métodos criptográficos utilizados por los griegos fue la escítala espartana, un método de trasposición basado en un cilindro que servía como clave en el que se enrollaba el mensaje para poder cifrar y descifrar.

En 1465 el italiano Leon Battista Alberti inventó un nuevo sistema de sustitución polialfabética que supuso un gran avance de la época. Otro de los criptógrafos más importantes del siglo XVI fue el francés Blaise de Vigenère que escribió un importante tratado sobre "la escritura secreta" y que diseñó una cifra que ha llegado a nuestros días asociada a su nombre. A Selenus se le debe la obra criptográfica "Cryptomenytices et Cryptographiae" (Luneburgo, 1624). Durante los siglos XVII, XVIII y XIX, el interés de los monarcas por la criptografía fue notable. Las tropas de Felipe II emplearon durante mucho tiempo una cifra con un alfabeto de más de 500 símbolos que los matemáticos del rey consideraban inexpugnable. Cuando el matemático francés François Viète consiguió criptoanalizar aquel sistema para el rey de Francia, a la sazón Enrique IV, el conocimiento mostrado por el rey francés impulsó una queja de la corte española ante del papa Pío V acusando a Enrique IV de utilizar magia negra para vencer a sus ejércitos. Por su parte, la reina María Estuardo, reina de Escocia, fue ejecutada por su prima Isabel I de Inglaterra al descubrirse un complot de aquella tras un criptoanálisis exitoso por parte de los matemáticos de Isabel.

Durante la Primera Guerra Mundial, los Alemanes usaron el cifrado ADFGVX. Este método de cifrado es similar a la del tablero de ajedrez Polibio. Consistía en una matriz de 6 x 6 utilizado para sustituir cualquier letra del alfabeto y los números 0 a 9 con un par de letras que consiste de A, D, F, G, V, o X.

Desde el siglo XIX y hasta la Segunda Guerra Mundial, las figuras más importantes fueron la del holandés Auguste Kerckhoffs y la del prusiano Friedrich Kasiski. Pero es en el siglo XX cuando la historia de la criptografía vuelve a experimentar importantes avances. En especial durante las dos contiendas bélicas que marcaron al siglo: la Gran Guerra y la Segunda Guerra Mundial. A partir del siglo XX, la criptografía usa una nueva herramienta que permitirá conseguir mejores y más seguras cifras: las máquinas de cálculo. La

219

Page 235: Libro de Texto. Sistemas Operativos

más conocida de las máquinas de cifrado posiblemente sea la máquina alemana Enigma: una máquina de rotores que automatizaba considerablemente los cálculos que era necesario realizar para las operaciones de cifrado y descifrado de mensajes. Para vencer al ingenio alemán, fue necesario el concurso de los mejores matemáticos de la época y un gran esfuerzo computacional. No en vano, los mayores avances tanto en el campo de la criptografía como en el del criptoanálisis no empezaron hasta entonces.

Tras la conclusión de la Segunda Guerra Mundial, la criptografía tiene un desarrollo teórico importante, siendo Claude Shannon y sus investigaciones sobre teoría de la información esenciales hitos en dicho desarrollo. Además, los avances en computación automática suponen tanto una amenaza para los sistemas existentes como una oportunidad para el desarrollo de nuevos sistemas. A mediados de los años 70, el Departamento de Normas y Estándares norteamericano publica el primer diseño lógico de un cifrador que estaría llamado a ser el principal sistema criptográfico de finales de siglo: el Estándar de Cifrado de Datos o DES. En esas mismas fechas ya se empezaba a gestar lo que sería la, hasta ahora, última revolución de la criptografía teórica y práctica: los sistemas asimétricos. Estos sistemas supusieron un salto cualitativo importante, ya que permitieron introducir la criptografía en otros campos que hoy día son esenciales, como el de la firma digital.

Un Sistema de Intimidad Criptográfica. El remitente desea transmitir cierto mensaje no cifrado (texto simple) a un receptor legítimo:

La transmisión se producirá a través de un canal inseguro: o Se supone que podrá ser verificado o conectado mediante un

espía.

El remitente pasa el texto simple a una unidad de codificación que lo transforma en un texto cifrado o criptograma:

No es comprensible para el espía. Se transmite en forma segura por un canal inseguro. El receptor pasa el texto cifrado por una unidad de descifrado para

regenerar el texto simple.

Criptoanálisis. Es el proceso de intentar regenerar el texto simple a partir del texto cifrado, pero desconociendo la clave de ciframiento:

Es la tarea del espía o criptoanalista: o Si no lo logra, el sistema criptográfico es seguro.

Sistemas de Clave Pública. La distribución de claves de un sistema criptográfico debe hacerse por canales muy seguros.

220

Page 236: Libro de Texto. Sistemas Operativos

Los sistemas de clave pública rodean el problema de distribución de claves: Las funciones de cifrado y descifrado están separadas y utilizan distintas

claves. No es computacionalmente posible (en un tiempo “razonable”) determinar

la clave de desciframiento “D” a partir de la clave de ciframiento “C”. “C” puede hacerse pública sin comprometer la seguridad de “D”, que

permanece privada: o Se simplifica el problema de la distribución de claves.

Firmas Digitales. Para que una firma digital sea aceptada como sustituta de una firma escrita debe ser:

Fácil de autentificar (reconocer) por cualquiera. Producible únicamente por su autor.

En los criptosistemas de clave pública el procedimiento es: El remitente usa la clave privada para crear un mensaje firmado. El receptor:

o Usa la clave pública del remitente para descifrar el mensaje. o Guarda el mensaje firmado para usarlo en caso de disputas.

Para mayor seguridad se podría actuar como sigue: El remitente puede codificar el mensaje ya cifrado utilizando la clave

pública del receptor. La clave privada del receptor permite recuperar el mensaje cifrado

firmado. La clave pública del remitente permite recuperar el texto simple original.

Aplicaciones.

La criptografía es especialmente útil en los sistemas multiusuario y en las redes de computadoras. Se debe utilizar para proteger a las contraseñas, almacenándolas cifradas. Se puede utilizar también para proteger todos los datos almacenados en un sistema de computación; se debe considerar el tiempo de cifrado / descifrado. También es aplicable en los protocolos de redes de capas, que ofrecen varios niveles de cifrado. En el cifrado de enlace la red asume la responsabilidad de cifrado / descifrado de cada nodo:

Los datos se transmiten cifrados entre los nodos. En cada nodo se descifran, se determina a dónde transmitirlos y se los

vuelve a cifrar.

En el cifrado punto a punto un mensaje se cifra en su fuente y se descifra solo una vez, en su destino:

221

Page 237: Libro de Texto. Sistemas Operativos

Existen ciertas limitaciones tales como la legibilidad de la dirección de destino en cada nodo:

o Debe ser legible para el encaminamiento del mensaje. o Ej.: sistemas de conmutación de paquetes de almacenamiento y

reenvío con cifrado punto a punto; en este caso la dirección de destino asociada a un paquete no puede ser cifrada.

Penetración al Sistema Operativo.

La penetración definitiva puede consistir en cambiar el bit de estado de la máquina del estado problema al estado supervisor; el intruso podrá así ejecutar instrucciones privilegiadas para obtener acceso a los recursos protegidos por el S. O..

Los estudios de penetración están diseñados para:

Determinar si las defensas de un sistema contra ataques de usuarios no privilegiados son adecuadas.

Descubrir deficiencias de diseño para corregirlas.

El control de entrada / salida es un área favorita para intentar la penetración a un sistema, ya que los canales de entrada / salida tienen acceso al almacenamiento primario y por consiguiente pueden modificar información importante. Una de las metas de las pruebas de penetración consiste en estimar el factor de trabajo de penetración:

Indicación de cuánto esfuerzo y recursos son necesarios para conseguir un acceso no autorizado a los recursos del sistema:

o Debería ser tan grande que resulte disuasivo.

Principales Fallos Genéricos Funcionales de los Sistemas.

Los principales fallos genéricos funcionales de los sistemas son los siguientes:

Autentificación:

Los usuarios no pueden determinar si el hardware y el software con que funcionan son los que deben ser.

Un intruso podría reemplazar un programa sin conocimiento del usuario. Un usuario puede inadvertidamente teclear una contraseña en un

programa de entrada falso.

Cifrado: No se almacena cifrada en la lista maestra de contraseñas.

Implementación: Implementación improcedente de un buen diseño de seguridad.

222

Page 238: Libro de Texto. Sistemas Operativos

Confianza implícita: Una rutina supone que otra está funcionando correctamente cuando, de

hecho, debería examinar los parámetros suministrados por la otra rutina.

Compartimiento implícito: El S. O. deposita inadvertidamente información importante del sistema en

un espacio de direcciones del usuario.

Comunicación entre procesos: Usos inadecuados de los mecanismos de send / receive que pueden ser

aprovechados por los intrusos.

Verificación de la legalidad: Validación insuficiente de los parámetros del usuario.

Desconexión de línea: Ante una desconexión de línea el S. O. debería:

o Dar de baja al usuario (o los usuarios) de la línea. o Colocarlos en un estado tal que requieran la re - autorización para

obtener nuevamente el control.

Descuido del operador: Un intruso podría engañar a un operador y hacer que le habilite

determinados recursos.

Paso de parámetros por referencia en función de su valor: Es más seguro pasar los parámetros directamente en registros que tener

los registros apuntando a las áreas que contienen los parámetros. El paso por referencia puede permitir que los parámetros, estando aún en

el área del usuario, puedan ser modificados antes de ser usados por el sistema.

Contraseñas: No deben ser fácilmente deducibles u obtenibles mediante ensayos

repetidos.

Entrampamiento al intruso: Los S. O. deben tener mecanismos de entrampamiento para atraer al

intruso inexperto.

Privilegio: Cuando hay demasiados programas con demasiados privilegios se viola

el principio del menor privilegio.

Confinamiento del programa:

223

Page 239: Libro de Texto. Sistemas Operativos

Un programa “prestado” de otro usuario puede actuar como un “Caballo de Troya”.

Prohibiciones: Se advierte a los usuarios que no utilicen ciertas opciones porque los

resultados podrían ser “indeterminados”, pero no se bloquea su uso, con lo que puede robar o alterar datos.

Residuos: Un intruso podría encontrar una lista de contraseñas con solo buscar en

lugares tales como una “papelera”: o Del sistema o física. o La información delicada debe ser sobrescrita o destruida antes de

liberar o descartar el medio que ocupa.

Blindaje: Los intrusos pueden conectarse a una línea de transmisión sin hacer

contacto físico: o Utilizan el campo inducido por la circulación de corriente en un

cable. o Se previene con un adecuado blindaje eléctrico.

Valores de umbral: Si no se dispone de valores umbral, no habrá:

o Límites al número de intentos fallidos de ingreso. o Bloqueos a nuevos intentos. o Comunicaciones al supervisor o administrador del sistema.

Resumen

224

Page 240: Libro de Texto. Sistemas Operativos

Se consideraran mecanismos de protección a los mecanismos específicos del sistema operativo utilizados para resguardar la información de la computadora.

Se entiende por seguridad a los problemas generales relativos a la garantía de que los archivos no sean leídos o modificados por personal no autorizado; esto incluye aspectos técnicos, de administración, legales y políticos.

La frontera entre seguridad y mecanismos de protección no está bien definida.

Dado que los sistemas de cómputo se han venido haciendo cada vez más sofisticados en sus aplicaciones, la necesidad de proteger su integridad, también ha crecido.

Un sistema computacional es una colección de procesos y objetos. Los objetos involucran tanto objetos hardware (como CPU, segmentos de memoria, impresoras, etc.) y objetos software (como archivos, programas, semáforos, etc.). Cada objeto tiene un nombre único que lo diferencía de los demás objetos. Para facilitar este esquema se introduce el concepto de dominio de protección. Un proceso opera dentro de un dominio de protección, el cual especifica los recursos que el proceso puede accesar. Cada dominio define un conjunto de objetos y los tipos de operaciones que pueden ser realizadas sobre cada objeto.

Un modelo de protección puede ser visto abstractamente como una matriz, llamada matriz de derecho.

Dos de las más importantes facetas de la seguridad son: la pérdida de datos y los intrusos.

La validación tiene que ver con: La verificación y la auditoría del sistema y la autentificación de los usuarios.

Problemas

1. Explique en que consiste la protección y la seguridad en los sistemas operativos.

2. Mencione las políticas de protección que regulan el uso de los sistemas operativos.

3. Algunos sistemas operativos exigen que las particiones de discos comiencen al principio de una pista. ¿Como facilita esto la labor de un virus de sector de arranque?

4. ¿Como podría un virus parasito a) asegurarse de ser ejecutado antes de su programa anfitrión, y b) devolver el control a su anfitrión después de realizar sus actividades?

225

Page 241: Libro de Texto. Sistemas Operativos

5. Cuando se elimina un archivo, sus bloques por lo general se devuelven a la lista libre, pero no se borran. ¿Cree que seria recomendable que el sistema operativo borre todos los bloques antes de liberarlos? Considere factores tanto de seguridad como de desempeño de respuesta, y explique el efecto de cada uno.

6. ¿Cuál es la diferencia entre un virus y un gusano? Como se reproduce cada uno?

7. El ataque por caballo de Troya puede funcionar como un sistema protegido por capacidades?

8. Hacer que la computadora no repita la contraseña es mas seguro que hacer que exhiba un asterisco por cada carácter tecleado, pues esto último revela la longitud a cualquier persona que pueda ver la pantalla. Suponiendo que las contraseñas solo contienen letras mayúsculas y minúsculas y dígitos, y que deben tener por lo menos cinco y cuando mucho ocho caracteres. ¿Qué tan seguro es no exhibir nada?

9. La criptografía de clave secreta es más eficiente que la de clave pública, pero requiere que el transmisor y el receptor se pongan previamente de acuerdo a la clave. Supongamos que el transmisor y el receptor no se conocen en persona, pero que existe un tercero de confianza que comparte una clave secreta con el transmisor y también comparte una clave secreta (distinta) son el receptor. ¿Cómo pueden establecer el transmisor y el receptor una nueva clave secreta compartida en estas circunstancias?

10. Es común ver las sig. Instrucciones para recuperarse de un ataque de virus:

Arranque el sistema infectado.

Respalde todos los archivos en un medio externo.

Ejecute fdisk para formatear el disco.

Reinstale el sistema operativo desde el CD-ROM original

Vuelva a cargar los archivos

Mencione dos errores graves en estas instrucciones.

Bibliografía

Carretero, P. J. (2007). Sistemas Operativos: Una visión aplicada. Mc. Graw-Hill.

226

Page 242: Libro de Texto. Sistemas Operativos

Deitel, H. M. (2002). Introduccion a los Sistemas Operativos. Addisson-Wesley Iberoamericana.

Deitel, H. M. (1993). Sistemas Operativos. Addisson-Wesley Iberoamericana.

Norton, P. (2000). Introducción a la computación. McGraw-Hill

Silberschatz, A. P. (1994). Sistemas Operativos. Conceptos fundamentales. Addison Wesley Iberoamericana.

Stallings, W. (2006). Sistemas Operativos. Quinta Edición. Prentice Hall.

Tanenbaum, A. S. (2003). Sistemas Operativos Modernos. Segunda Edición. Prentice Hall.

Tanenbaum, A. S. (1998). Sistemas operativos. Diseño e implementación. Segunda Edición. Prentice-Hall.

exa.unne.edu.ar. (2001, 17 de diciembre). Extraído el 13 de Octubre de 2009 desde http://exa.unne.edu.ar/depar/areas/informatica/SistemasOperativos

227