viernes, 8 de noviembre de 2013

SISTEMAS OPERATIVOS

OBJETIVO GENERAL: Aplicar los paradigmas de diseño de los sistemas operativos actuales y emerjentes, para el manejo de los recursos del sistema.
UNIDAD 1: Introducción a los Sistemas Operativo

    1.1. Definición y Concepto

Un Sistema Operativo es una parte importante de cualquier sistema de computacion. Un sistema de computacion puede dividirse en cuatro componentes: el hardware, el Sistema Operativo, los programas de aplicacion y los usuarios. El hardware (Unidad Central de Procesamiento (UCP), memoria y dispositivos de entrada/salida (E/S)) proporciona los recursos de computacion basicos. Los programas de aplicacion (compiladores, sistemas de bases de datos, juegos de video y programas para negocios) definen la forma en que estos recursos se emplean para resolver los problemas de computacion de los usuarios.

Recursos administrados por el Sistema Operativo

Existen diversas definiciones de lo que es un Sistema Operativo, pero no hay una definicion exacta, es decir una que sea estandar; a continuacion 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 computo "; los sistemas operativos ponen dicha capacidad de a.C. 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; ademas de los procesadores, los medios de almacenamiento, los dispositivos de entrada/salida, los dispositivos de comunicacion y los datos.

3.- Un Sistema Operativo es un programa que actua como intermediario entre el usuario y el hardware del computador y su proposito 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 computacion se use de manera comoda, 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 ejecucion de programas de aplicacion y actua 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 podria 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 mas eficiente los recursos de la maquina.

Facilitar el trabajo al usuario.- Permite una comunicacion con los dispositivos de la maquina.

El Sistema Operativo se encuentra almacenado en la memoria secundaria. Primero se carga y ejecuta un pedazo de codigo 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 aplicacion y software variado.

    1.2. Funciones y características

En general, se puede decir que un Sistema Operativo tiene las siguientes caracteristicas:

Conveniencia. Un Sistema Operativo hace mas conveniente el uso de una computadora.

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

Habilidad para evolucionar. Un Sistema Operativo debera construirse de manera que permita el desarrollo, prueba o introduccion 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 traves del kernel). El Sistema Operativo se debe encargar de comunicar a los dispositivos perifericos, cuando el usuario asi lo requiera.

Organizar datos para acceso rapido 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.

     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. Evolucion e Historia

Para tratar de comprender los requisitos de un Sistema Operativo y el significado de las principales caracteristicas de un Sistema Operativo contemporaneo, es util considerar como han ido evolucionando estos con el tiempo.

Existen diferentes enfoques o versiones de como han ido evolucionando los Sistemas Operativos     La primera de estas versiones podria ser esta:

En los 40's, se introducen los programas bit a bit, por medio de interruptores mecanicos y despues se introdujo el lenguaje maquina que trabajaba por tarjetas perforadas.

    Con las primeras computadoras, desde finales de los años 40 hasta la mitad de los años 50, el programador interactuaba de manera directa con el hardware de la computadora, no existia realmente un Sistema Operativo; las primeras computadoras utilizaban bulbos, la entrada de datos y los programas se realizaban a traves del lenguaje maquina (bits) o a traves de interruptores.

Durante los años 50's y 60's.- A principio de los 50's, la compania General's Motors implanto el primer sistema operativo para su IBM 170. Empiezan a surgir las tarjetas perforadas las cuales permiten que los usuarios (que en ese tiempo eran programadores, disenadores, capturistas, etc.), se encarguen de modificar sus programas. Establecian o apartaban tiempo, metian o introducian sus programas, corregian y depuraban sus programas en su tiempo. A esto se le llamaba trabajo en serie. Todo esto se traducia en perdida de tiempo y tiempos de programas excesivos.

En los años 60's y 70's se genera el circuito integrado, se organizan los trabajos y se generan los procesos Batch (por lotes), lo cual consiste en determinar los trabajos comunes y realizarlos todos juntos de una sola vez. En esta epoca surgen las unidades de cinta y el cargador de programas, el cual se considera como el primer tipo de Sistema Operativo.

En los 80's, inicio el auge de la INTERNET en los Estados Unidos de America. A finales de los años 80's comienza el gran auge y evolucion de los Sistemas Operativos. Se descubre el concepto de multiprogramacion que consiste en tener cargados en memoria a varios trabajos al mismo tiempo, tema principal de los Sistemas Operativos actuales.

   

Los 90's y el futuro, entramos a la era de la computacion distribuida y del multiprocesamiento a traves de multiples redes de computadoras, aprovechando el ciclo del procesador.

Se tendra una configuracion dinamica con un reconocimiento inmediato de dispositivos y software que se anada o elimine de las redes a traves de procesos de registro y localizadores.

La conectividad se facilita gracias a estandares y protocolos de sistemas abiertos por organizaciones como la Organizacion Internacional de normas, fundacion de software abierto, todo estara mas controlado por los protocolos de comunicacion OSI y por la red de servicios digital ISDN.

     Se ha desarrollado otra version, la cual se ha hecho en base a etapas o generaciones:

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

Despues de los infructuosos esfuerzos de Babbage, hubo poco progreso en la construccion de las computadoras digitales, hasta la Segunda Guerra Mundial. A mitad de la decada de los 40's, Howard Aiken (Harvard), John Von Newman (Instituto de Estudios Avanzados, Princeton), J. Prespe R. Eckert y Williams Mauchley (Universidad de Pennsylvania), asi como Conrad Zuse (Alemania), entre otros lograron construir maquinas de calculo mediante bulbos. Estas maquinas eran enormes y llenaban cuartos completos con decenas de miles de bulbos, pero eran mucho mas lentas que la computadora casera mas economica en nuestros dias.

Toda la programacion se llevaba a cabo en lenguaje de maquina absoluto y con frecuencia se utilizaban conexiones para controlar las funciones basicas de la maquina. Los lenguajes de programacion eran desconocidos (incluso el lenguaje ensamblador). No se oia de los Sistemas Operativos el modo usual de operacion consistia en que el programador reservaba cierto periodo en una hoja de reservacion pegada a la pared, iba al cuarto de la maquina, insertaba su conexion a la computadora y pasaba unas horas esperando que ninguno de los 20,000 o mas bulbos se quemara durante la ejecucion. La inmensa mayoria de los problemas eran calculos numericos directos, por ejemplo, el calculo de valores para tablas de senos y cosenos.

A principio de la decada de los 50's la rutina mejoro un poco con la introduccion de las tarjetas perforadas. Fue entonces posible escribir los programas y leerlas en vez de insertar conexiones, por lo demas el proceso era el mismo.

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

La introduccion del transistor a mediados de los años 50's modifico en forma radical el panorama. Las computadoras se volvieron confiables de forma que podian 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 demas rapidas vias para reducir el tiempo invertido. La solucion que, por lo general se adopto, fue la del sistema de procesamiento por lotes.

    3ra Etapa (1965-1980): Circuitos integrados y multiprogramacion.

  
   

La 360 de IBM fue la primera linea principal de computadoras que utilizo los circuitos integrados, lo que proporciono una gran ventaja en el precio y desempeno con respecto a las maquinas de la segunda generacion, construidas a partir de transistores individuales. Se trabajo con un sistema operativo enorme y extraordinariamente complejo. A pesar de su enorme tamano y sus problemas el sistema operativo de la linea IBM 360 y los sistemas operativos similares de esta generacion producidos por otros fabricantes de computadoras realmente pudieron satisfacer, en forma razonable a la mayoria de sus clientes. Tambien popularizaron varias tecnicas fundamentales, ausentes de los sistemas operativos de la segunda generacion, de las cuales la mas importante era la de multiprogramacion.

Otra caracteristica era la capacidad de leer trabajos de las tarjetas al disco, tan pronto como llegara al cuarto de computo. Asi, siempre que concluyera un trabajo el sistema operativo podia cargar un nuevo trabajo del disco en la particion que quedara desocupada y ejecutarlo.

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

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

En los sistemas operativos de red, los usuarios estan conscientes de la existencia de varias computadoras y pueden conectarse con maquinas remotas y copiar archivos de una maquina a otra. Cada maquina 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 esta 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 automatica y eficaz por el sistema operativo.

    1.4. Clasificacion

Con el paso del tiempo, los Sistemas Operativos fueron clasificandose de diferentes maneras, dependiendo del uso o de la aplicacion que se les daba. A continuacion se mostraran diversos tipos de Sistemas Operativos que existen en la actualidad, con algunas de sus caracteristicas:

    1.4.1. Sistemas Operativos por Lotes.

 Los Sistemas Operativos por lotes, procesan una gran cantidad de trabajos con poca o ninguna interaccion entre los usuarios y los programas en ejecucion. Se reunen todos los trabajos comunes para realizarlos al mismo tiempo, evitando la espera de dos o mas trabajos como sucede en el procesamiento en serie. Estos sistemas son de los mas 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 ejecucion muy alto, porque el procesador es mejor utilizado y los Sistemas Operativos pueden ser simples, debido a la secuenciabilidad de la ejecucion de los trabajos.

Algunos ejemplos de Sistemas Operativos por lotes exitosos son el SCOPE, del DC6600, el cual esta orientado a procesamiento cientifico pesado, y el EXEC II para el UNIVAC 1107, orientado a procesamiento academico.

Algunas otras caracteristicas con que cuentan los Sistemas Operativos por lotes son:

    Requiere que el programa, datos y ordenes al sistema sean remitidos todos juntos en forma de lote.
    Permiten poca o ninguna interaccion usuario/programa en ejecucion.
    Mayor potencial de utilizacion de recursos que procesamiento serial simple en sistemas multiusuarios.
    No conveniente para desarrollo de programas por bajo tiempo de retorno y depuracion fuera de linea.
    Conveniente para programas de largos tiempos de ejecucion (Ej., analisis estadisticos, nominas de personal, etc.).
    Se encuentra en muchos computadores personales combinados con procesamiento serial.
    Planificacion del procesador sencilla, tipicamente procesados en orden de llegada.
    Planificacion de memoria sencilla,  generalmente se divide en dos: parte residente del S.O. y programas transitorios.
    No requieren gestion critica de dispositivos en el tiempo.
    Suelen proporcionar gestion sencilla de manejo de archivos: se requiere poca proteccion y ningun control de concurrencia para el acceso.

Figura. Trabajos mas comunes que realiza el Sistema Operativo por lotes.

    1.4.2. 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, estan subutilizados sus recursos con la finalidad de prestar atencion a los procesos en el momento que lo requieran. se utilizan en entornos donde son procesados un gran numero de sucesos o eventos.

    Muchos Sistemas Operativos de tiempo real son construidos para aplicaciones muy especificas como control de trafico aereo, bolsas de valores, control de refinerias, control de laminadores. Tambien en el ramo automovilistico y de la electronica de consumo, las aplicaciones de tiempo real estan creciendo muy rapidamente. Otros campos de aplicacion de los Sistemas Operativos de tiempo real son los siguientes:

        Control de trenes.
        Telecomunicaciones.
        Sistemas de fabricacion integrada.
        Produccion y distribucion de energia electrica.
        Control de edificios.
        Sistemas multimedia.

    Algunos ejemplos de Sistemas Operativos de tiempo real son: VxWorks, Solaris, Lyns OS y Spectra. Los Sistemas Operativos de tiempo real, cuentan con las siguientes caracteristicas:

        Se dan en entornos en donde deben ser aceptados y procesados gran cantidad de sucesos, la mayoria externos al sistema computacional, en breve tiempo o dentro de ciertos plazos.
        Se utilizan en control industrial, conmutacion telefonica, control de vuelo, simulaciones en tiempo real., aplicaciones militares, etc.
        Objetivo es proporcionar rapidos tiempos de respuesta.
        Procesa rafagas de miles de interrupciones por segundo sin perder un solo suceso.
        Proceso se activa tras ocurrencia de suceso, mediante interrupcion.
        Proceso de mayor  prioridad expropia recursos.
        Por tanto generalmente se utiliza planificacion expropiativa basada en prioridades.
        Gestion de memoria menos exigente que tiempo compartido, usualmente procesos son residentes permanentes en memoria.
        Poblacion de procesos estatica en gran medida.
        Poco movimiento de programas entre almacenamiento secundario y memoria.
        Gestion de archivos se orienta  mas a velocidad de acceso que a utilizacion eficiente del recurso.

    1.4.3. Sistemas Operativo de Multiprogramacion.

Se distinguen por sus habilidades para poder soportar la ejecucion de dos o mas trabajos activos (que se estan ejecutado) al mismo tiempo. Esto trae como resultado que la Unidad Central de Procesamiento (UCP) siempre tenga alguna tarea que ejecutar, aprovechando al maximo su utilizacion.

Su objetivo es tener a varias tareas en la memoria principal, de manera que cada uno esta usando el procesador, o un procesador distinto, es decir, involucra maquinas con mas de una UCP.

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

Las caracteristicas de un Sistema Operativo de multiprogramacion o multitarea son las siguientes:

        Mejora productividad del sistema y utilizacion de recursos.
        Multiplexa recursos entre varios programas.
        Generalmente soportan multiples usuarios (multiusuarios).
        Proporcionan facilidades para mantener el entorno de usuarios individuales.
        Requieren validacion de usuario para seguridad y proteccion.
        Proporcionan contabilidad del uso de los recursos por parte de los usuarios.
        Multitarea sin soporte multiusuario se encuentra en algunos computadores personales o en sistemas de tiempo real.
        Sistemas multiprocesadores son sistemas multitareas por definicion  ya que  soportan la ejecucion simultanea de multiples tareas sobre diferentes procesadores.
        En general, los sistemas de multiprogramacion se caracterizan por tener multiples programas activos compitiendo por los recursos del sistema: procesador, memoria, dispositivos perifericos.

    1.5. Estructura: Niveles o Estratos de Diseño

El nucleo o kernel se divide en 5 capas o niveles:

    Nivel 1. Gestion de Memoria:Proporciona las facilidades de bajo nivel para la gestion de memoria secundaria necesaria para la ejecucion de procesos.

    Nivel 2. Procesador:  Se encarga de activar los cuantums de tiempo para cada uno de los procesos, creando interrupciones de hardware cuando no son respetadas.

    Nivel 3. Entrada/Salida: Proporciona las facilidades para poder utilizar los dispositivos de E/S requeridos por los procesos.

    Nivel 4. Informacion o Aplicacion o Interprete  de Lenguajes: Facilita la comunicacion con los lenguajes y el sistema operativo para aceptar las ordenes en cada una de las aplicaciones. Ejecutando un programa el software de este nivel crea el ambiente de trabajo e invoca a los procesos correspondientes.

    Nivel 5. Control de Archivos: Proporciona la facilidad para el almacenamiento a largo plazo y manipulacion de archivos con nombre, va asignando espacio y acceso de datos en memoria.

El nucleo o kernel realiza diferentes funciones tales como:

    Manejo de interrupciones.
    Creacion y destruccion de procesos.
    Cambio de estado de los procesos.
    Despacho
    Suspension y reanudacion de procesos.
    Sincronizacion de procesos.
    Comunicacion entre procesos.
    Manipulacion de los bloques de control de procesos.
    Apoyo para las actividades de entrada/salida.
    Apoyo para asignacion y liberacion de memoria.
    Apoyo para el sistema de archivos.
    Apoyo para el mecanismo de llamada y retorno de un procedimiento.
    Apoyo para ciertas funciones de contabilidad del sistema.

    El nucleo y los procesos

    Una definicion mas especifica de lo que es el nucleo ( Kernel ) de un sistema operativo es: un conjunto de rutinas cuya mision es la de gestionar el procesador, la memoria, la entrada/salida y el resto de procesos disponibles en la instalacion. Toda esta gestion la realiza para atender al funcionamiento y peticiones de los trabajos que se ejecutan en el sistema.

    El esquema general de la gestion del procesador, es el siguiente:

    Definicion y concepto de proceso.
    El Bloque de Control de Proceso (PCB) como imagen donde el sistema operativo ve el estado del proceso.
    Estados por los que pasa un proceso a lo largo de su existencia en la computadora.
    Operaciones que se pueden realizar sobre un proceso.
    Clasificacion de los procesos segun su forma de ejecucion, de carga, etc.

    Por proceso debe entenderse: un programa en ejecucion junto con el entorno asociado (registros, variables ,etc.).

    1.6. Núcleo

El Kernel consiste en la parte principal del codigo del sistema operativo, el cual se encargan de controlar y administrar los servicios y peticiones de recursos y de hardware con respecto a uno o varios procesos, en otras palabras, el kernel es el corazon del sistema operativo.

Cada sistema operativo tiene un tipo distinto de kernel: asi los Unix mas tradicionales como FreeBSD usan un kernel " monolitico" en el que esta todo compilado dentro, otros usan los llamados "microkernels" como el Darwin, Hurd e incluso Windows (krnl32.dll). GNU/Linux usa un kernel "modular" (vmlinuz); un nucleo bastante grande comparado con un microkernel, pero que es capaz de delegar funciones en los llamados " modulos" , partes independientes del nucleo que pueden ser incorporadas dinamicamente si hacen falta y luego descargadas si molestan. Asi se pueden cargar "drivers" para hardware, firewall o funciones especiales de red (ppp, rdsi, etc) cuando se necesiten y cuando por ejemplo, se cierre la conexion a internet, liberar la memoria que usaba ese modulo.
UNIDAD 2: Administracion de procesos y del procesador

    2.1. Concepto de Proceso

Todos los programas cuya ejecucion solicitan los usuarios, se ejecutan en forma de procesos, de ahi la importancia para le informatico de conocerlos en detalle. El proceso se puede definir como un programa de gestion por el sistema operativo. Durante su eleccion el proceso va modificando en ejecucion y, de una forma un poco mas precisa, como la unidad de procesamiento los registro del modelo de programacion de la computadora, de acuerdo a las intrusiones de maquina involucradas.

El sistema operativo mantiene por cada proceso una serie de estructuras de informacion que permiten identificar las caracteristicas de este, asi como los recursos que tiene asignados. En esta ultima categoria entran los descriptores de los segmentos de memoria asignados, los descriptores de los archivos abiertos, los descriptores de los puertos de comunicaciones, etc.

Una parte muy importante de esta informacion se encuentra normalmente como en el llamado bloque de control de procesos (BCP). El sistema operativo mantiene una tabla de procesos con todos los BCP de los procesos. Por razones de eficiencia, la tabla de procesos se construyen normalmente como una estructura estatica, que tiene un determinado numero de BCP, todos ellos del mismo tamano. La informacion que compone un proceso es la siguiente:

    Contenido de los segmentos de memoria en los que residen el codigo y los datos del proceso. A esta informacion se le denomina imagen de memoria o core image.
    Contenido de los registros del modelo de programacion
    Contenido del BCP.

    2.2. Estados y Tranciciones de los Procesos

Como se indico anteriormente, el proceso es la unidad de procesamiento gestionada por el sistema operativo. Para poder realizar este cometido, el proceso tiene asociado una serie de elementos de informacion, que se resumen en la Figura 3.8, que se analizan seguidamente. Estos elementos se organizan en tres grupos: estado del procesador, imagen de memoria y tablas del sistema operativo.

Estado del procesador

El estado del procesador esta formado por el contenido de todos sus registros, que se enumeran seguidamente:

    Registros generales. De existir registros especificos de coma flotante tambien se incluyen aqui.

    Contador de programa.

Informacion del proceso

    Puntero de pila.

    Registro o registros de estado.

    Registros especiales. Como puede ser el RIED (registro identificador de espacio de direccionamiento).

El estado del procesador de un proceso reside en los registros del procesador, cuando el proceso esta en ejecucion, o en el bloque de control de proceso (BCP), cuando el proceso no esta en ejecucion.

Cuando el proceso esta ejecutando, el estado del procesador varia de acuerdo al flujo de instrucciones maquina ejecutado. En este caso, la copia del estado del procesador que reside en el BCP no esta actualizada. Tengase en cuenta que los registros de la maquina se utilizan para no tener que acceder a la informacion de memoria, dado que es mucho mas lenta. Por tanto, no tiene sentido plantear que, en cada modificacion de un registro, se actualice su valor en el BCP, puesto que esta en memoria.

Sin embargo, cuando se detiene la ejecucion de un proceso, como consecuencia de la ejecucion de una interrupcion, es muy importante que el sistema operativo actualice la copia del estado del procesador en su BCP. En terminos concretos, la rutina del sistema operativo que trata las Interrupciones lo primero que ha de hacer es salvar el estado del procesador en el BCP del proceso interrumpido.

    2.3. Procesos ligeros: Hilos o Hebras.


Un proceso ligero, o thread, es un programa en ejecucion (flujo de ejecucion) que comparte la imagen de memoria y otras informaciones con otros procesos ligeros. Como muestra la Figura , un proceso puede contener un solo flujo de ejecucion, como ocurre en los procesos clasicos, o mas de un flujo de ejecucion (procesos ligeros).

Desde el punto de vista de la programacion, un proceso ligero se define como una funcion cuya ejecucion se puede lanzar en paralelo con otras. El hilo de ejecucion primario, o proceso ligero primario, corresponde a la funcion main.

Cada proceso ligero tiene informaciones que le son propias y que no comparte con otros procesos ligeros. Las informaciones propias se refieren fundamentalmente al contexto de ejecucion, pudiendose destacar las siguientes:

    Contador de programa.
    Pila.
    Registros.
    Estado del proceso ligero (ejecutando, listo o bloqueado).

Todos los procesos ligeros de un mismo proceso comparten la informacion del mismo. En concreto, comparten:

    Espacio de memoria.
    Variables globales.
    Archivos abiertos.
    Procesos hijos.
    Temporizadores.
    Senales y semaforos.
    Contabilidad.

Es importante destacar que todos los procesos ligeros de un mismo proceso comparten el mismo espacio de direcciones de memoria, que incluye el codigo, los datos y las pilas de los diferentes procesos ligeros. Esto hace que no exista proteccion de memoria entre los procesos ligeros de un mismo proceso, algo que si ocurre con los procesos convencionales.

El proceso ligero constituye la unidad ejecutable en Windows NT. La Figura representa de forma esquematica la estructura de un proceso de Windows NT con sus procesos ligeros.



 2.4. Concurrencia y Secuensiabilidad


 Los procesos son concurrentes si existen simultaneamente. Los procesos concurrentes pueden funcionar en forma totalmente independiente unos de otros, o pueden ser asincronos, lo cual significa que en ocasiones requieren cierta sincronizacion o cooperacion.

Cuando dos o mas 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 mas procesos sean concurrentes , es necesario que tengan alguna relacion entre ellos como puede ser la cooperacion para un determinado trabajo o el uso de informacion o recursos compartidos, por ejemplo: en un sistema de un procesador , la multiprogramacion es una condicion necesaria pero no suficiente para que exista concurrencia, ya que los procesos pueden ejecutarse de forma totalmente independiente.

Por otro lado en un sistema de varios procesos se puede presentar la concurrencia siempre y cuando las actividades necesiten actuar entre si ya sea para utilizar informacion en comun o para cualquier otra cosa.

Existen tres formas modelos de computadora en los que se puede pueden ejecutar procesos concurrentes:

Multiprogramacion con un unico procesador.

En este modelo todos los procesos concurrentes ejecutan sobre un unico procesador. El sistema operativo se encarga de ir repartiendo el tiempo del procesador entre los distintos procesos, intercalando la ejecucion de los mismos para dar asi una apariencia de ejecucion simultanea.

Multiprocesador.

Un multiprocesador es una maquina formada por un conjunto de procesadores que comparten memoria principal. En este tipo de arquitecturas, los procesos concurrentes no solo pueden intercalar su ejecucion sino tambien superponerla. En este caso si existe una verdadera ejecucion simultanea de procesos, al coincidir las fases de procesamiento de distintos procesos. En un instante dado se pueden ejecutar de forma simultanea tantos procesos como procesadores haya.

Multicomputadora.

Una multicomputadora es una maquina de memoria distribuida, en contraposicion con el multiprocesador que es de memoria compartida. Esta formada por una serie de computadoras completas con su UCP, memoria principal y, en su caso, periferia. Cada uno de estos procesadores completo se denomina nodo. Los nodos se encuentran conectados y se comunican entre si a traves de una red de interconexion, empleando el metodo de paso de mensajes. En este tipo de arquitecturas tambien es posible la ejecucion simultanea de los procesos sobre los distintos procesadores.

En general la concurrencia sera aparente siempre que el numero de procesos sea mayor que el de procesadores disponibles, es decir, cuando haya mas de un proceso por procesador. La concurrencia sera real cuando haya un proceso por procesado.

    2.4.1.  Exclusion Mutua de Seccion Critica

El metodo mas sencillo de comunicacion entre los procesos de un programa concurrente es el uso comun de unas variables de datos. Esta forma tan sencilla de comunicacion puede llevar, no obstante, a errores en el programa ya que el acceso concurrente puede hacer que la accion de un proceso interfiera en las acciones de otro de una forma no adecuada. Aunque nos vamos a fijar en variables de datos, todo lo que sigue seria valido con cualquier otro recurso del sistema que solo pueda ser utilizado por un proceso a la vez.

Por ejemplo una variable x compartida entre dos procesos A y B que pueden incrementar o decrementar la variable dependiendo de un determinado suceso. Este situacion se plantea, por ejemplo, en un problema tipico de la programacion concurrente conocido como el Problema de los Jardines. En este problema se supone que se desea controlar el numero de visitantes a unos jardines. La entrada y la salida a los jardines se puede realizar por dos puntos que disponen de puertas giratorias. Se desea poder conocer en cualquier momento el numero de visitantes a los jardines, por lo que se dispone de un computador con conexion en cada uno de los dos puntos de entrada que le informan cada vez que se produce una entrada o una salida.

Asociamos el proceso P1 a un punto de entrada y el proceso P2 al otro punto de entrada. Ambos procesos se ejecutan de forma concurrente y utilizan una unica variable x para llevar la cuenta del numero de visitantes.

El incremento o decremento de la variable se produce cada vez que un visitante entra o sale por una de las puertas. Asi, la entrada de un visitante por una de las puertas hace que se ejecute la instruccion

x:=x+1

    mientras que la salida de un visitante hace que se ejecute la instruccion

    x:=x-1

Si ambas instrucciones se realizaran como una unica instruccion hardware, no se plantearia ningun problema y el programa podria funcionar siempre correctamente. Esto es asi por que en un sistema con un unico procesador solo se puede realizar una instruccion cada vez y en un sistema multiprocesador se arbitran mecanismos que impiden que varios procesadores accedan a la vez a una misma posicion de memoria. El resultado seria que el incremento o decremento de la variable se produciria de forma secuencial pero sin interferencia de un proceso en la accion del otro. Sin embargo, si se produce interferencia de un proceso en el otro si la actualizacion de la variable se realiza mediante la ejecucion de otras instrucciones mas sencillas, como son las usuales de:

    copiar el valor de x en un registro del procesador
    incrementar el valor del registro
    almacenar el resultado en la direccion donde se guarda x

Aunque el proceso P1 y el P2 se suponen ejecutados en distintos procesadores (lo que no tiene porque ser cierto en la realidad) ambos usan la misma posicion de memoria para guardar el valor de x. Se puede dar la situacion de que el planificador de procesos permita el entrelazado de las operaciones elementales anteriores de cada uno de los procesos, lo que inevitablemente producira errores. Si, por ejemplo, se produce el siguiente orden de operaciones:

    P1 carga el valor de x en un registro de su procesador
    P2 carga el valor de x en un registro de su procesador
    P2 incrementa el valor de su registro
    P1 incrementa el valor de su registro
    P1 almacena el valor de su registro en la direccion de memoria de x
    P2 almacena el valor de su registro en la direccion de memoria de x se perdera un incremento de la variable x.

Este tipo de errores son muy dificiles de detectar mediante test del programa ya que el que se produzcan depende de la temporizacion de dos procesos independientes.

El ejemplo muestra de forma clara la necesidad de sincronizar la actuacion de ambos procesos de forma que no se produzcan interferencias entre ellos.

Para evitar este tipo de errores se pueden identificar aquellas regiones de los procesos que acceden a variables compartidas y dotarlas de la posibilidad de ejecucion como si fueran una unica instruccion. Se denomina Seccion Critica a aquellas partes de los procesos concurrentes que no pueden ejecutarse de forma concurrente o, tambien, que desde otro proceso se ven como si fueran una unica instruccion. Esto quiere decir que si un proceso entra a ejecutar una seccion critica en la que se accede a unas variables compartidas, entonces otro proceso no puede entrar a ejecutar una region critica en la que acceda a variables compartidas con el anterior.

Las secciones criticas se pueden agrupar en clases, siendo mutuamente exclusivas las secciones criticas de cada clase. Para conseguir dicha exclusion se deben implementar protocolos software que impidan o bloqueen (lock) el acceso a una seccion critica mientras esta siendo utilizada por un proceso.

     Requisistos para la exclusion mutua

        Solo un proceso, de todos los que poseen secciones criticas por el mismo recurso compartido, debe tener permiso para entrar en ella en un momento dado.
        Un proceso que se interrumpe en una seccion no critica debe hacerlo sin interferir con los otros procesos.
        Un proceso no debe poder solicitar acceso a una seccion critica para despues ser demorado indefinidamente, no puede permitirse el interbloqueo o la inanicion.
        Si ningun proceso esta en su seccion critica, cualquier proceso que solicite entrar en la suya debe poder hacerlo sin demora.
        No se debe suponer sobre la velocidad relativa de los procesos o el numero de procesadores.
        Un proceso permanece en su seccion critica por un tiempo finito.

     Una manera de satisfacer los requisitos de exclusion mutua es dejar la responsabilidad a los procesos que deseen ejecutar concurrentemente. Tanto si son programas del sistema como de aplicacion, los procesos deben coordinarse unos con otros para cumplir la exclusion mutua, sin ayuda del lenguaje de programacion o del sistema operativo. Estos metodos se conocen como soluciones por software.

    2.4.2. Sincronizaicon de Procesos

En muchos casos, los procesos se reunen para realizar tareas en conjunto, a este tipo de relacion se le llama procesos cooperativos. Para lograr la comunicacion, los procesos deben sincronizarse, de no ser asi pueden ocurrir problemas no deseados. La sincronizacion es la transmision y recepcion de senales que tiene por objeto llevar a cabo el trabajo de un grupo de procesos cooperativos.

Es la coordinacion y cooperacion de un conjunto de procesos para asegurar la comparacion de recursos de computo. La sincronizacion entre procesos es necesaria para prevenir y/o corregir errores de sincronizacion debidos al acceso concurrente a recursos compartidos, tales como estructuras de datos o dispositivos de E/S, de procesos contendientes. La sincronizacion entre procesos tambien permite intercambiar senales de tiempo (ARRANQUE/PARADA) entre procesos cooperantes para garantizar las relaciones especificas de precedencia impuestas por el problema que se resuelve.

Sin una sincronizacion adecuada entre procesos, la actualizacion de variables compartidas puede inducir a errores de tiempo relacionados con la concurrencia que son con frecuencia dificiles de depurar. Una de las causas principales de este problema es que procesos concurrentes puedan observar valores temporalmente inconsistentes de una variable compartida mientras se actualizan. una aproximacion para resolver este problema es realizar actualizaciones de variables compartidas de manera mutuamente exclusiva. Se pueden mejorar permitiendo que a lo mas un proceso entre a la vez en la seccion critica de codigo en la que se actualiza una variable compartida o estructura de datos en particular.

Para que los procesos puedan sincronizarse es necesario disponer de servicios que permitan bloquear o suspender bajo determinadas circunstancias la ejecucion de un proceso. Los principales mecanismos de sincronizacion que ofrecen los sistemas operativos son:

    Senales
    Tuberias
    Semaforos
    Mutex y variables condicionales
    Paso de mensajes

    2.4.3 .Interbloqueo (DeadLock)

El estancamiento se puede definir formalmente como sigue: "Un conjunto de procesos se estancan si cada proceso del conjunto esta esperando un evento que solo otro proceso del conjunto puede provocar". Puesto que todos los procesos estan en espera, ninguno de ellos podra ocasionar nuca ninguno de los eventos que podrian desbloquear a algunos de los otros miembros del conjunto y todos los procesos seguiran esperando indefinidamente.

Definicion de Abrazo Mortal

Un conjunto de procesos esta en un abrazo mortal cuando todos los procesos en ese conjunto estan esperando un evento que solo puede ser causado por otro proceso en el conjunto. Los eventos a los cuales nos estamos refiriendo son concernientes con la asignacion y liberacion de recursos principalmente. Sin embargo, otro tipo de eventos pueden llevar a la existencia de abrazos mortales.

Para ejemplificar un estado de abrazo mortal, considere un sistema con tres unidades de disco. Suponga que existen tres procesos, cada uno de ellos tiene asignada una de las unidades de disco. Si ahora cada proceso pide otra unidad de disco, los tres procesos se encuentran ahora en un estado de abrazo mortal. Cada uno esta esperando el evento "unidad de disco liberada", lo cual solo puede ser causada por alguno de los otros procesos en espera. Este ejemplo ilustra un abrazo mortal involucrando procesos compitiendo por el mismo tipo de recurso.

Los abrazos mortales pueden tambien involucrar diferentes tipos de recursos. Por ejemplo, considere un sistema con una impresora y una unidad de disco. Suponga que el proceso A tiene asignada la unidad de disco y que el proceso B tiene asignada la impresora. Ahora, si A pide la impresora y B pide la unidad de disco, ocurre un abrazo mortal.

Ejemplo de un abrazo mortal.

Debe ser obvio que un abrazo mortal es una condicion indeseable. En un abrazo mortal, los procesos nunca terminan de ejecutarse y los recursos del sistema esta amarrados, evitando que otros procesos puedan siquiera empezar.? Antes de discutir varios metodos para manejar el problema de los abrazos mortales, seria util describir algunas de las propiedades que los caracterizan.

Condiciones Necesarias

Segun Coffman (1971), existen cuatro condiciones que deben cumplirse para que haya estancamiento. Una situacion de abrazo mortal puede surgir si y solo si las siguientes cuatro condiciones ocurren simultaneamente en un sistema:

        Exclusion Mutua.     Cada recurso se asigna por lo regular exactamente a un proceso o bien esta disponible. Al menos un recurso es mantenido en un modo no-compartible; esto es, solo un proceso a la vez puede usar el recurso. Si otro proceso solicita ese recurso, tiene que ser retardado hasta que el recurso haya sido liberado.

        Retener y Esperar.     Los procesos que regularmente contienen recursos otorgados antes pueden solicitar nuevos recursos. Debe existir un proceso que retenga al menos un recurso y este esperando para adquirir recursos adicionales que estan siendo retenidos por otros procesos.

        No existe el derecho de desasignar (No preemtion). Los recursos previamente otorgados no pueden extraerse por la fuerza de un proceso. Deben ser liberados explicitamente por el proceso que los contiene. Los recursos no pueden ser desasignados (preempted); esto es, un recurso solo puede ser liberado voluntariamente por el proceso que lo retiene, despues de que el proceso ha terminado su tarea.

        Espera Circular    . Debe haber una cadena de dos o mas procesos, cada uno d los cuales este esperando u recurso contenido en el siguiente miembro de la cadena. Debe existir un conjunto {p0, p1, ...,pn} de procesos en espera tal que p0 este esperando por un recurso que esta siendo retenido por p1, p1 esta esperando por un recurso que esta siendo retenido por p2, ..., pn-1 esta esperando por un recurso que esta siendo retenido por pn y pn esta esperando por un recurso que esta siendo retenido por p0.

Enfatizamos que las cuatro condiciones deben de cumplirse para que pueda ocurrir un abrazo mortal. La condicion de espera circular implica la condicion de retener y esperar, de tal manera que las cuatro condiciones no son totalmente independientes. Sin embargo, puede ser util el considerar cada condicion por separado.

Una forma de modelar estas condiciones es usando un grafo de recursos: los circulos representan procesos, los cuadrados recursos. Una arista desde un recurso a un proceso indica que el recurso ha sido asignado al proceso. Una arista desde un proceso a un recurso indica que el proceso ha solicitado el recurso, y esta bloqueado esperandolo. Entonces, si hacemos el grafo con todos lo procesos y todos los recursos del sistema y encontramos un ciclo, los procesos en el ciclo estan bajo bloqueo mutuo.

Ejemplo de un grafo de recursos.

    Metodos para manejar los abrazos mortales

Principalmente, existen dos metodos para manejar el problema de los abrazos mortales. Podemos usar algun protocolo para asegurar que el sistema nunca entrara en un estado de abrazo mortal. Alternativamente, podemos permitir que el sistema entre en un estado de abrazo mortal y despues recuperarnos. Como podremos ver posteriormente, el recuperarse de un abrazo mortal puede ser muy dificil y muy caro. Por ello, primeramente consideraremos los metodos para asegurar que no ocurran

los abrazos mortales. Comunmente, existen dos metodos: El de PREVENCION de abrazos mortales (Deadlock Prevention) y el de EVASION de abrazos mortales (Deadlock Avoidance).

    2.5. Niveles, Objetivos y Criterios del Planificador

En epocas pasadas de los sistemas de procesamiento por lotes, con una entrada en forma de imagenes de tarjetas en una cinta magnetica, el algoritmo de planificacion era sencillo: solo habia que ejecutar el siguiente trabajo en la cinta.

En los sistemas de multiusuario de tiempo compartido, que se combinaban con un fondo de trabajos procesados en lote, el algoritmo era mas complejo. En forma invariable, existian varios usuarios en espera de servicio y podian existir tambien otros trabajos para ser procesados en lote. Incluso en los sistemas puros de tiempo compartido existen con frecuencia los trabajos colaterales, como el sistema de correo electronico, que a menudo se ejecuta todo el tiempo para enviar o recibir correo o noticias.

Cuando mas de un proceso es ejecutable, el Sistema Operativo debe decidir cual de ellos debera ejecutarse primero. Hay que tener una planificacion de los procesos que quieren ejecutarse en el sistema.La planificacion es una funcion primordial del Sistema Operativo. La mayoria de los recursos, si no es que todos, se planifican antes de que se utilicen. La asignacion de procesadores fisicos a los procesos hace posible que estos realicen su trabajo, y tal asignacion es un problema complejo manejado por el Sistema Operativo.

Concepto de Planificacion

La planificacion hace referencia a un conjunto de politicas y mecanismos incorporados al sistema operativo que gobiernan el orden en que se ejecutan los trabajos que deben ser cumplimentados por el sistema informatico.

Objetivo de la Planificacion

El objetivo principal de la planificacion es optimizar el rendimiento del sistema y proporcionar un buen servicio a todos los procesos que se encuentren en el. En general, la planificacion trata de cubrir los siguientes objetivos:

    Justicia. La planificacion debe ser lo mas justa posible con todos los procesos, sin favorecer a unos y perjudicar a otros.
    Maxima capacidad de ejecucion. Debe dar un servicio eficiente para que todos los trabajos se realicen lo mas rapidamente posible. Esto se puede lograr disminuyendo el numero de cambios de proceso.
    Maximo numero de usuarios interactivos. En los sistemas de tiempo compartido se tratara de que puedan estar trabajando el mayor numero de usuarios al mismo tiempo.
    Predecibilidad. La planificacion debe realizarse de tal forma que en todo momento pueda saberse como sera su ejecucion.
    Minimizacion de la sobrecarga. La computadora debe tener poca sobrecarga ya que esta afecta directamente al rendimiento final del sistema: a menor sobrecarga mayor velocidad de proceso.
    Equilibrio en el uso de recursos. Para obtener un mayor rendimiento en el uso de los recursos y que estos esten ocupados equitativamente el mayor tiempo posible.
    Seguridad de las prioridades. Si un proceso tiene mayor prioridad que otro, este debe ejecutarse mas rapidamente.
    Evitar la postergacion indefinida. Esto se logra aumentando la prioridad de un proceso mientras espere por un recurso. La prioridad llegara a ser tan alta que al proceso le sera asignado el recurso que pidio.

Criterios de planificacion

Para realizar los objetivos de la planificacion, un mecanismo de planificacion debe considerar lo siguiente:

    La limitacion de un proceso a las operaciones de Entrada / Salida: cuando un proceso consigue la cpu, ?la utiliza solo brevemente antes de generar una peticion de Entrada / Salida?
    La limitacion de un proceso a la cpu: cuando un proceso obtiene la cpu, ?tiende a usarla hasta que expira su tiempo?
    Si un proceso es por lote (batch) o interactivo: los usuarios interactivos deben recibir inmediato servicio para garantizar buenos tiempos de respuesta.
    ?Que urgencia tiene una respuesta rapida?: por ejemplo, un proceso de tiempo real de un sistema de control que supervise una refineria de combustible requiere una respuesta rapida, mas rapida que la respuesta requerida por un proceso en lotes (batch) que debera entregarse al dia siguiente.
    La prioridad de un proceso: a mayor prioridad mejor tratamiento.
    Frecuentemente un proceso genera fallos (carencias) de pagina:
        Probablemente los procesos que generan pocos fallos de pagina hayan acumulado sus “conjuntos de trabajo” en el almacenamiento principal.
        Los procesos que experimentan gran cantidad de fallos de pagina aun no han establecido sus conjuntos de trabajo.
        Un criterio indica favorecer a los procesos que han establecido sus conjuntos de trabajo.
        Otro criterio indica favorecer a los procesos con una tasa alta de fallos de pagina ya que rapidamente generaran una peticion de Entrada / Salida.
    Frecuentemente un proceso ha sido apropiado por otro de mas alta prioridad, lo cual significa lo siguiente:
        A menudo los procesos apropiados deben recibir un tratamiento menos favorable.
        Cada vez que el Sistema Operativo asume la sobrecarga para hacer ejecutar este proceso, el corto tiempo de ejecucion antes de la apropiacion no justifica la sobrecarga de hacer ejecutar al proceso en primer lugar.
    Cuanto tiempo de ejecucion real ha recibido el proceso?: un criterio considera que debe ser favorecido un proceso que ha recibido muy poco tiempo de cpu.

Cuanto tiempo adicional va a necesitar el proceso para terminar?: los tiempos promedio de espera pueden reducirse priorizando los procesos que requieren de un tiempo de ejecucion minimo para su terminacion, pero pocas veces es posible conocer la cantidad de tiempo adicional que cada proceso necesita para terminar.

    2.6. Tecnicas de Administracion del Planificador

    2.6.1 FIFO

Algoritmo de planificacion de FIFO

Tal vez la disciplina mas simple de planificacion sea la de primeras entradas ? primeras salidas (PEPS). Los procesos se despachan de acuerdo con su tiempo de llegada a la cola de procesos listos. Cuando un proceso tiene la CPU, se ejecuta hasta terminar. Es junto en el sentido formal, pero algo injusta en cuanto a que los trabajos largos hacen esperar a los cortos y los trabajos sin importancia hacen esperar a los importantes. FIFO ofrece variaciones relativamente pequenas en los tiempos de respuesta y por lo tanto es mas predecible que los otros esquemas. No es util en la planificacion para los usuarios interactivos porque no puede garantizar buenos tiempos de respuesta.

El esquema FIFO rara vez se usa como esquema principal en los sistemas actuales, pero a menudo esta incorporado en otros sistemas. Por ejemplo, muchos esquemas de planificacion despachan los procesos de acuerdo con la prioridad, pero los procesos con la misma prioridad se despachan de acuerdo con el esquema FIFO.

Este es un algoritmo que no usa apropiacion, y que consiste en atender a los procesos por estricto orden de llegada a la lista de procesos listos. Cada proceso se ejecuta hasta que termina, o hasta que hace una llamada bloqueante (de E/S). Se trata de una politica muy simple y sencilla de llevar a la practica, pero muy pobre en cuanto a su comportamiento.
Las caracteristicas principales de este algoritmo son las siguientes:

    No es apropiativa.
    Es justa, aunque los procesos largos hacen esperar mucho a los cortos.
    Es una politica predecible.
    El tiempo promedio de servicio es muy variable ya que esta en funcion del numero de procesos y la duracion promedio que tenga.

EJEMPLO

Proceso
   

Tiempo de UCP

P1

P2

P3
   

24

3

3

Media del tiempo de espera:

Caso 1) ( 0 + 24 + 27 ) / 3 =17

Caso 2) ( 6 + 0 + 3 ) / 3 = 3

En este esquema se tienen tres procesos (P1, P2, P3) listos para ejecutarse, con un tiempo de ejecucion de 24, 3 y 3 unidades de tiempo (para facilidad tomaremos milisegundos como unidad de tiempo) respectivamente. Los procesos se ejecutan en ese mismo orden. El primer proceso se ejecuta de inmediato y no espera nada.

El segundo proceso espera todo lo que dura en ejecutarse el primer proceso que son 24 milisegundos. Por ultimo el tercer proceso esperara la suma de lo que duran en ejecutarse los dos procesos anteriores, o sea, 27 segundos. Todo esto da como resultado un tiempo promedio de espera de 17 milisegundos. Si en cambio, el orden en que se ejecuten los procesos es como el caso 2), entonces el proceso P2 se ejecutaria de inmediato, P3 esperaria lo que tarde en ejecutarse P2 (3 milisegundos) y P1 esperaria lo que duran los dos procesos anteriores, obteniendo un tiempo promedio de espera de 3 milisegundos.

Como puede verse el tiempo promedio de espera que tengan los procesos depende por completo del orden en que llegan los procesos a ejecutarse.

    2.6.2 SJR

Otro metodo de planificacion de la CPU es el algoritmo de planificacion con seleccion del trabajo mas corto (SJF, shortest job-first). Este algoritmo asocia con cada proceso la duracion de la siguiente rafaga de CPU del proceso. Cuando la CPU esta disponible, se asigna al proceso que tiene la siguiente rafaga de CPU mas corta. Si las siguientes rafagas de CPU de dos procesos son iguales, se usa la planificacion FCFS para romper el empate. Observe que un termino mas apropiado para este metodo de planificacion seria el de algoritmo de la siguiente rafaga de CPU mas corta, ya que la planificacion depende de la duracion de la siguiente rafaga de CPU de un proceso, en lugar de depender de su duracion total. Usamos el termino SJF porque casi todo el mundo y gran parte de los libros de texto emplean este termino para referirse a este tipo de planificacion.

Como ejemplo de planificacion SJF, considere el siguiente conjunto de procesos, estando especificada la duracion de la rafaga de CPU en milisegundos:

                    Proceso         Tiempo de rafaga

                    P1                             6

                    P2                             8

                    P3                             7

                    P4                             3

Usando la planificacion SJF, planificariamos estos procesos de acuerdo con el siguiente diagrama de Gantt:

P4
   

P1
   

P3
   

P2

0
   

3
   

9
   

16                                         24

El tiempo de espera es de 3 milisegundos para el proceso P1, de 16 milisegundos para el proceso P2, de 9 milisegundos para P3 y de 0 milisegundos para P4. Por tanto, el tiempo medio de espera es de (3 + 16 + 9 + 0)/4 = 7 milisegundos. Por comparacion, si estuvieramos usando el esquema de planificacion FCFS, el tiempo medio de espera seria de 10,25 milisegundos.

El algoritmo de planificacion SJF es probablemente optimo, en el sentido de que proporciona el tiempo medio de espera minimo para un conjunto de procesos dado. Anteponer un proceso corto a uno largo disminuye el tiempo de espera del proceso corto en mayor medida de lo que incrementa el tiempo de espera del proceso largo. Consecuentemente, el tiempo medio de espera disminuye.

La dificultad real del algoritmo SJF es conocer la duracion de la siguiente solicitud de CPU. En una planificacion a largo plazo de trabajos en un sistema de procesamiento por lotes, podemos usar como duracion el limite de tiempo del proceso que el usuario especifique en el momento de enviar el trabajo. Con este mecanismo, los usuarios estan motivados para estimar el limite de tiempo del proceso de forma precisa, dado que un valor menor puede significar una respuesta mas rapida. (Un valor demasiado bajo producira un error de limite de tiempo excedido y sera necesario reenviar el proceso.) La planificacion SJF se usa frecuentemente como mecanismo de planificacion a largo plazo.

Aunque el algoritmo SJF es optimo, no se puede implementar en el nivel de la planificacion de la CPU a corto plazo, ya que no hay forma de conocer la duracion de la siguiente rafaga de CPU. Un metodo consiste en intentar aproximar la planificacion SJF: podemos no conocer la duracion de la siguiente rafaga de CPU, pero podemos predecir su valor, por el procedimiento de confiar en que la siguiente rafaga de CPU sera similar en duracion a las anteriores. De este modo, calculando una aproximacion de la duracion de la siguiente rafaga de CPU, podemos tomar el proceso que tenga la rafaga de CPU predicha mas corta.

Generalmente, la siguiente rafaga de CPU se predice como la media exponencial de las duraciones medidas de las anteriores rafagas de CPU. Sea tn la duracion de la n-esima rafaga de CPU y sea Tn+l el valor predicho para la siguiente rafaga de CPU. Entonces, para a, 0? α ? 1, se define

tn+1 = α tn + (1 - α) tn

Esta formula define un promedio exponencial. El valor de tn contiene la informacion mas reciente; tn almacena el historial pasado. El parametro a controla el peso relativo del historial reciente y pasado de nuestra prediccion. Si α = 0, entonces tn1 = tn’, y el historial reciente no tiene ningun efecto (se supone que las condiciones actuales van a ser transitorias); si α = 1, entonces tn+1 = tn’ y solo la rafaga de CPU mas reciente importa (se supone que el historial es obsoleto y, por tanto, irrelevante). Frecuentemente, α = 1/2, en cuyo caso, el historial reciente y pasado tienen el mis peso. El valor inicial t0 puede definirse como una constante o como un promedio global para todo el sistema. La Figura 5.3 muestra un promedio exponencial con α = 1/2 y t0 = 10.

Para comprender el comportamiento del promedio exponencial, podemos desarrollar la formula para tn+l sustituyendo el valor de tn y de los terminos sucesivos, obteniendo

Tn+1 = αtn+(1-a)atn-1 +???+(1- α)j αtn-j +???+(1-(X)n+1t0

Dado que tanto a como 1-a son menores o iguales a 1, cada termino sucesivo tiene menor peso que su predecesor.

El algoritmo SJF puede ser cooperativo o apropiativo. La necesidad de elegir surge cuando un proceso llega a la cola de procesos preparados mientras que un proceso anterior esta todavia en ejecucion. La siguiente rafaga de CPU del proceso que acaba de llegar puede ser mas corta que lo que quede del proceso actualmente en ejecucion. Un algoritmo SJF apropiativo detendra el proceso actualmente en ejecucion, mientras que un algoritmo sin desalojo permitira que dicho proceso termine su rafaga de CPU. La planificacion SJF apropiativa a veces se denomina planificacion con seleccion del proceso con tiempo restante mas corto.

Como ejemplo, considere los cuatro procesos siguientes, estando especificada la duracion de la rafaga de CPU en milisegundos:

                Proceso         Tiempo de llegada         Tiempo de rafaga

                P1                            0                                 8

                P2                            1                                 4

                P3                            2                                 9

                P4                            3                                 5

Si los procesos llegan a la cola de procesos preparados en los instantes que se muestran y necesitan los tiempos de rafaga indicados, entonces la planificacion SJF apropiativa es la que se muestra en el siguiente diagrama de Gantt:

P1
   

P2
   

P4
   

P1
   

P3

    0
   

        1
   

        5
   

                    10
   

    17                                         26

El proceso Pl se inicia en el instante 0, dado que es el unico proceso que hay en la cola. El proceso P2llega en el instante 1. El tiempo que le queda al proceso P1 (7 milisegundos) es mayor que el tiempo requerido por el proceso P2 (4 milisegundos), por lo que el proceso Pl se desaloja y se planifica el proceso P2. El tiempo medio de espera en este ejemplo es de ((10 - 1) + (1- 1) + (17 - 2) + (5 - 3) )/4 = 26/4 = 6,5 milisegundos. La planificacion SJF cooperativa proporcionaria un tiempo medio de espera de 7,75 milisegundos.

    2.6.3 Planificacion de Asignacion en Rueda (RR-Round Robin)

Es un sistema apropiativo. Cada proceso recibe una fraccion de tiempo de procesamiento o quanto para su ejecucion, de manera que cuando se esta ejecutando y excede el tiempo que se le ha concedido, se genera una interrupcion de reloj, mediante la cual la ejecucion del proceso se detiene y se coloca al proceso al final de la cola de procesos ‘listos’ para su posterior ejecucion, seleccionandose a continuacion un nuevo proceso de la cola para su ejecucion. Si un proceso finaliza su ejecucion antes de que termine el tiempo que se le ha asignado, este cede el control, seleccionandose un nuevo proceso de la cola para su ejecucion. Con el Round Robind, cuando un proceso inicia una operacion de E/S, este es penalizado respecto de los procesos que no realizan E/S.

Los procesos se despachan en “FIFO” y disponen de una cantidad limitada de tiempo de cpu, llamada “division de tiempo” o “cuanto”. Si un proceso no termina antes de expirar su tiempo de cpu ocurren las siguientes acciones:

    La cpu es apropiada.
    La cpu es otorgada al siguiente proceso en espera.
    El proceso apropiado es situado al final de la lista de listos.

Es efectiva en ambientes de tiempo compartido. La sobrecarga de la apropiacion se mantiene baja mediante mecanismos eficientes de intercambio de contexto y con suficiente memoria principal para los procesos.
Tamano del Cuanto o Quantum

La determinacion del tamano del cuanto es decisiva para la operacion efectiva de un sistema computacional. Los interrogantes son: ?cuanto pequeno o grande?, ?cuanto fijo o variable? y ?cuanto igual para todos los procesos de usuarios o determinado por separado para cada uno de ellos? Si el cuanto se hace muy grande, cada proceso recibe todo el tiempo necesario para llegar a su terminacion, por lo cual la asignacion en rueda (“RR”) degenera en “FIFO”. Si el cuanto se hace muy pequeno, la sobrecarga del intercambio de contexto se convierte en un factor dominante y el rendimiento del sistema se degrada, puesto que la mayor parte del tiempo de cpu se invierte en el intercambio del procesador (cambio de contexto) y los procesos de usuario disponen de muy poco tiempo de cpu.

El cuanto debe ser lo suficientemente grande como para permitir que la gran mayoria de las peticiones interactivas requieran de menos tiempo que la duracion del cuanto, es decir que el tiempo transcurrido desde el otorgamiento de la cpu a un proceso hasta que genera una peticion de Entrada / Salida debe ser menor que el cuanto establecido, de esta forma, ocurrida la peticion la cpu pasa a otro proceso y como el cuanto es mayor que el tiempo transcurrido hasta la peticion de Entrada / Salida, los procesos trabajan al maximo de velocidad, se minimiza la sobrecarga de apropiacion y se maximiza la utilizacion de la Entrada / Salida. El cuanto optimo varia de un sistema a otro y con la carga, siendo un valor de referencia 100 mseg (cien milisegundos).
Caracteristicas de RR

    Baja sobrecarga si el cambio entre un proceso y otro es eficiente y los procesos siempre estan en la memoria principal
    El tamano optimo del quantum depende de:

El tipo de sistema.

Las cargas que vaya a soportar el sistema.

El numero de procesos en el sistema y su tipo.

    Es la politica mas usada para tiempo compartido.
    Ofrece un servicio igual para todos los procesos.
    Es una politica apropiativa.
    Mantiene mas equilibradas las colas de procesos listos y bloqueados.

Virtual Round Robind (vrr)

Este sistema va a permitir solucionar el problema del RoundRobind en relacion al favorecimiento que este realiza con los procesos orientados a la CPU frente a los procesos orientados a las operaciones de E/S. El vrr utiliza una cola auxiliar de espera que incluye aquellos procesos que no hayan consumido completamente el quanto que tenian asignados al verse detenidos por una operacion de E/S. Esta cola tiene prioridad respecto a la principal y a los procesos almacenados en ella se les asigna temporalmente (hasta que se ejecuten de nuevo) un nuevo quanto, que es el tiempo del quanto principal que no llegaron a consumir antes de ser bloqueados (el 2o quanto es el quanto principal menos el tiempo del mismo que ya haya sido consumido por el proceso).

    2.6.4 Queues Multinivel

Otra clase de algoritmos de planificacion es la que se ha desarrollado para aquellas situaciones en las que los procesos pueden clasificarse facilmente en grupos diferentes. Por ejemplo, una clasificacion habitual consiste en diferenciar entre procesos de primer plano (interactivos) y procesos de segundo plano (por lotes). Estos dos tipos de procesos tienen requisitos diferentes de tiempo de respuesta y, por tanto, pueden tener distintas necesidades de planificacion. Ademas, los procesos de primer plano pueden tener prioridad (definida externamente) sobre los procesos de segundo plano.

Un algoritmo de planificacion mediante colas multinivel divide la cola de procesos prepados en varias colas distintas (Figura 5.6). Los procesos se asignan permanentemente a una cola, generalmente en funcion de alguna propiedad del proceso, como por ejemplo el tamano memoria, la prioridad del proceso o el tipo de proceso. Cada cola tiene su propio algoritmo de planificacion. Por ejemplo, pueden emplearse colas distintas para los procesos de primer plano y de segundo plano. La cola de primer plano puede planificarse mediante un algoritmo por turnos, mientras que para la cola de segundo plano puede emplearse un algoritmo FCFS.

Ademas , debe definirse una planificaciion entre las colas, la cual suele implementarse como una planificacion apropiada y prioridad fija. po ejemplo, la cola de procesos de primer plano puede tener velocidad absoluta sobre la cola de procesos de segundo plano.

Veamos un ejemplo de algoritmo de planificacion mediante colas multinivel con las cinco colas que se enumeran a continuacion, segun su orden de prioridad:

        1. Procesos del sistema.

        2. Procesos interactivos.

        3. Procesos de edicion interactivos.

        4. Procesos por lotes.

        5. Procesos de estudiantes.

Cada cola tiene prioridad absoluta sobre las colas de prioridad mas baja. Por ejemplo, ningun proceso de la cola por lotes podra ejecutarse hasta que se hayan vaciado completamente las colas de los procesos del sistema, los procesos interactivos y los procesos de edicion interactivos. Si un proceso de edicion interactivo llega a la cola de procesos preparados mientras se esta ejecutando un proceso por lotes, el proceso por lotes sera desalojado.

Otra posibilidad consiste en repartir el tiempo entre las colas. En este caso, cada cola obtiene una cierta porcion del tiempo de CPU, con la que puede entonces planificar sus distintos procesos Por ejemplo, en el caso de la colas de procesos de primer plano y segundo plano, la cola de primer plano puede disponer del 80 por ciento del tiempo de CPU para planificar por turnos sus procesos, mientras que la cola de procesos de segundo plano recibe el 20 por ciento del tiempo de CPU para gestionar sus procesos mediante el metodo FCFS.

     2.6.5 Multi-Level FreedBack Queues

Normalmente, cuando se usa el algoritmo de planificacion mediante colas multinivel, los procesos se asignan de forma permanente a una cola cuando entran en el sistema. Por ejemplo, si hay colas diferentes para los procesos de primer y segundo plano, los procesos no se mueven de una cola a otra, dado que no pueden cambiar su naturaleza de proceso de primer o segundo plano. Esta configuracion presenta la ventaja de una baja carga de trabajo de planificacion, pero resulta poco flexible.

Por el contrario, el algoritmo de planificacion mediante colas multinivel realimentadas permite mover un proceso de una cola a otra. La idea es separar los procesos en funcion de las caracteristicas de sus rafagas de CPU. Si un proceso utiliza demasiado tiempo de CPU, se pasa a una a de prioridad mas baja. Este esquema deja los procesos limitados por E/S y los procesos interactivos en las colas de prioridad mas alta. Ademas, un proceso que este esperando demasiado tiempo en una cola de baja prioridad puede pasarse a una cola de prioridad mas alta. Este mecanismo de envejecimiento evita el bloqueo indefinido.

Por ejemplo, considere un planificador de colas multinivel realimentadas con tres colas, numeradas de 0 a 2 (Figura 5.7). En primer lugar, el planificador ejecuta todos los procesos de la cola 0. Solo cuando la cola 0 este vacia ejecutara procesos de la cola 1. De forma similar, los procesos de la cola 2 solo se ejecutaran si las colas 0 y 1 estan vacias. Un proceso que llegue a la cola 1 desalojara a un proceso de la cola 2 y ese proceso de la cola 1 sera, a su vez, desalojado por un proceso que llegue a la cola 0.

Un proceso que entre en la cola de procesos preparados se coloca en la cola 0 y a cada uno de los procesos de esa cola se le proporciona un cuanto de tiempo de 8 milisegundos. Si el proceso no termina en ese tiempo, se pasa al final de la cola 1. Si la cola 0 esta vacia, al proceso que se encuentra al principio de la cola 1 se le asigna un cuanto de 16 milisegundos. Si no se completa en ese tiempo, se lo desaloja y se lo incluye en la cola 2. Los procesos de la cola 2 se ejecutan basandose en una planificacion FCFS, pero solo cuando las colas 0 y 1 estan vacias.

Este algoritmo de planificacion proporciona la prioridad mas alta a todo proceso que tenga una rafaga de CPU de 8 milisegundos o menos. Tales procesos acceden rapidamente a la CPU, concluyen su rafaga de CPU y pasan a su siguiente rafaga de E/S. Los procesos que necesitan mas de 8 milisegundos y menos de 24 milisegundos tambien son servidor rapidamente, aunque con una prioridad mas baja que los procesos mas cortos. Los procesos largos terminan yendo automaticamente a la cola 2 y se sirven, siguiendo el orden FCFS, con los ciclos de CPU no utilizados por las colas 0 y 1.

En general, un planificador mediante colas multinivel realimentadas se define mediante los parametros siguientes:
  •  El numero de colas.
  •  El algoritmo de planificacion de cada cola.
  •  El metodo usado para determinar cuando pasar un proceso a una cola de prioridad mas alta.
  •  El metodo usado para determinar cuando pasar un proceso a una cola de prioridad mas baja.
  •  El metodo usado para determinar en que cola se introducira un proceso cuando haya que darle servicio.

La definicion del planificador mediante colas multinivel realimentadas le convierte en el algoritmo de planificacion de la CPU mas general. Puede configurarse este algoritmo para adaptarlo a cualquier sistema especifico que se quiera disenar. Lamentablemente, tambien es el algoritmo mas complejo, puesto que definir el mejor planificador requiere disponer de algun mecanismo para seleccionar los valores de todos los parametros.
UNIDAD 3: Adminitracion deMemoria
3.1 Política y Filosofía

Filosofía
La memoria principal puede ser considerada como un arreglo lineal de localidades de almacenamiento de un byte de tamano. Cada localidad de almacenamiento tiene asignada una direccion que la identifica.
Una de las funciones basicas que debe implementar un SO es la Administracion de la Memoria para tener un control sobre los lugares donde estan almacenados los datos y procesos que actualmente se estan utilizando.
Sea cual sea es esquema de organizacion del almacenamiento que se adopte para un sistema especifico es necesario decidir que estrategias se deben utilizar para obtener un rendimiento optimo.

Políticas
 
FIFO: Los procesos se despachan de acuerdo a su tiempo de llega a la cola de procesos listos, si un proceso llega al procesador sale hasta que termine. La politica FIFO actualmente no se usa como el esquema principal de un sistema, pero si por ejemplo cuando se usa una politica de prioridades y hay procesos con la misma prioridad, a estos se les podria aplicar FIFO. (Ver figura (1))
Round Robin: Los procesos se despachan en la forma que lo hace el FIFO, pero se les asigna una cantidad limitada de tiempo (CUANTUM) en el procesador, si no termina en ese lapso se manda al final de la lista de procesos listos. (Ver figura(2))

SJF (Shortest job first - Prioridad del trabajo mas corto): Se ejecuta primero el proceso en espera que tiene el menor tiempo estimado. SJF favorece a los procesos cortos, ya que los largos podrian llegar a rezagarse mucho tiempo e incluso nunca ejecutarse. (Ver Figura(3))


SRT (Sortest remaining time scheduling ? Tiempo restante mas corto. En SJF una vez que un proceso comienza su ejecucion continua hasta terminar. En SRT, un proceso en ejecucion puede ser desposeido por uno nuevo de menor tiempo de ejecucion. (Ver Figura(4))



HRN: (highest response ratio next ? Prioridad de la tasa de respuesta mas alta): Politica no apropiativa que corrige el retraso excesivo de procesos grandes que produce el SJF, para asi no caer en un favoritismo excesivo por los procesos cortos, lo logra usando una formula basada en el tiempo de espera y el tiempo de servicio, con lo cual la prioridad de cada trabajo no solo esta en funcion del tiempo de servicio sino tambien del tiempo que ha esperado para ser atendido.(Ver Figura(5))



    3.2. Memoria 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 informacion contenida en ella es de mas rapido acceso.
       
 Solo la memoria cache es mas rapida que la principal, pero su costo es a su vez mayor.
Cuando no existe memoria virtual no hay diferenciacion entre el espacio de direcciones y la memoria real; el espacio de direcciones que puede ser usado en los programas tiene identico tamano al espacio de memoria real posible. Si se utiliza memoria virtual, el espacio de direcciones disponibles para los programas es aquel determinado por el tamano de la memoria virtual implementada y no el espacio de direcciones provisto por la memoria real disponible (el espacio de la memoria virtual sera mayor que el de la memoria real).
La organización y administración de la “memoria principal”, “memoria primaria” o “memoria real” de un sistema ha sido y es uno de los factores mas importantes en el diseño de los S. O. (Ver la figura 3.2.1)
        Los términos “memoria” y “almacenamiento” se consideran equivalentes.
        Los programas y datos deben estar en el almacenamiento principal para:
  • Poderlos ejecutar.
  • Referenciarlos directamente
    3.3. Organizacion de Memoria Virtual
 
La memoria virtual es una técnica para proporcionar la simulación de un espacio de memoria mucho mayor que la memoria física de una maquina.Esta ilusión permite que los programas se hagan sin tener en cuenta el tamaño exacto de la memoria física.
La memoria virtual ha llegado a ser un componente esencial de la mayoría de los S.O actuales. Y como en un instante dado, en la memoria solo se tienen unos pocos fragmentos de un proceso dado, se pueden mantener mas procesos en la memoria.
La memoria virtual también simplifica la carga del programa para su ejecución llamado reubicación, este procedimiento permite que el mismo programa se ejecute en cualquier posición de la memoria física.
    
 3.4. Administracion de Memoria Virtual
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).
Mientras el proceso se ejecuta con sus páginas actuales, el sistema carga las demás páginas que estarán disponibles cuando las requiera el proceso.
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 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.

UNIDAD 4: Administracion de Entrada/Salida


    4.1. Dispositivos y Manejadores de Dispositivo: Devise Drivers


Se pueden clasificar en dos grandes categorías:
1. Dispositivos de bloque
2. 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 busqueda.
- Unos ejemplos típicos de dispositivos de carácter son las impresoras de línea, terminales, interfaces de una red, ratones, etc.
Manejadores de Dispositivos  
Todo el código que depende de los dispositivos aparece en los manejadores de dispositivos. (Ver figura 4.1.1)

Figura 4.1.1
Cada controlador posee uno o más registros de dispositivos:
  • Se utilizan para darle los comandos.
  • Los manejadores de dispositivos proveen estos comandos y verifican su ejecución adecuada.
La labor de un manejador de dispositivos es la de:
  • 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 esta 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: (ver figura 4.1.2)
    • Estimar el lugar donde se encuentra en realidad el bloque solicitado.
    • Verificar si el motor de la unidad funciona.
    • Verificar si el brazo esta colocado en el cilindro adecuado, etc.
    • Resumiendo: debe decidir cuales son las operaciones necesarias del controlador y su orden.
    • Envía los comandos al controlador al escribir en los registros de dispositivo del mismo.
    • Frecuentemente el manejador del dispositivo se bloquea hasta que el controlador realiza cierto trabajo; una interrupción lo libera de este bloqueo.
    • Al finalizar la operación debe verificar los errores.
    • Si todo esta o.k. transferirá los datos al software independiente del dispositivo.
    • Regresa información de estado sobre los errores a quien lo llamo.
    • Inicia otra solicitud pendiente o queda en espera.

Figura 4.1.2

    4.2. Mecanismos y Funciones de los MAnejadores de Dispositivos: Device Drivers
Funciones de los manejadores de dispositivos
Funciones generalmente realizadas por el software independiente del dispositivo:
  • 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 buffer.
  • 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:
  • Ocultar a los niveles superiores los diferentes tamaños de sector de los distintos discos.
  • Proporcionar un tamaño uniforme de los bloques, por ej.: considerar varios sectores físicos como un solo bloque lógico. 
    4.3. Estructura de Datos para Manejo de Dispositivos
¿Qué es una estructura?     
        Los sistemas operativos actuales son grandes y complejos, estos deben poseer una ingeniería correcta para su fácil actualización y para que puedan cumplir su función correctamente. La estructura es generalmente modular, cada modulo cumple una función determinada e interactúa con los demás módulos.
Estructura simple
        El sistema MS-DOS es, sin duda, el mejor sistema operativo para microcomputadoras. Sin embargo, sus interfaces y niveles de funcionalidad no están bien definidos. Los programas de aplicación pueden acceder a operaciones básicas de entrada / salida para escribir directamente en pantalla o discos. Este libre acceso, hace que el sistema sea vulnerable, ya que un programa de aplicación puede eliminar por completo un disco rígido por alguna falla. Además este sistema, también esta limitado al hardware sobre el que corre.
        Otra estructura simple es la utilizada por la versión original de UNIX, esta consiste de dos partes separadas, el kernel y los programas de sistemas . El kernel fue posteriormente separado en manejadores (drivers) de dispositivos y una serie de interfaces. El kernel provee el sistema de archivos, la programación de CPU, el administrador de memoria y otras funciones del sistema operativo que responden a las llamadas del sistema enunciadas anteriormente.
Estructura por capas (layers)
        Las nuevas versiones de UNIX se diseñaron para hardware mas avanzado. Para dar mayor soporte al hardware, los sistemas operativos se dividieron en pequeñas partes. Ahora los sistemas operativos tienen mayor control sobre el hardware y las aplicaciones que se ejecutan sobre este.
        La modularizacion de un sistema se puede presentar de varias formas, la mas utilizada es la de capas, la cual consiste en dividir al sistema operativo en un numero de capas. La capa de menor nivel es el hardware y la de mayor nivel es la interfaz con el usuario.
        La principal ventaja es que cada capa cumple con una serie de funciones y servicios que brinda a las otras capas, esto permite una mejor organización del sistema operativo y una depuración mas fácil de este.
        Cada capa se implementa solo utilizando las operaciones provistas por la capa de nivel inferior. Una capa no necesita saber como se implementan estas funciones, solo necesita saber que operaciones puede realizar.
     4.4. Operaciones de Entrada/Salida
Funciones que realizan      

Vamos a señalar las funciones que debe realizar un computador para ejecutar trabajos de entrada/salida:

     - Direccionamiento o selección del dispositivo que debe llevar a cabo la operación de E/S.
     - Transferencia de los datos entre el procesador y el dispositivo (en uno u otro sentido).
     - Sincronización y coordinación de las operaciones.
Esta ultima función es necesaria debido a la deferencia de velocidades entre los dispositivos y la CPU y a la independencia que debe existir entre los periféricos y la CPU (por ejemplo, suelen tener relojes diferentes).
Se define una transferencia elemental de información como la transmisión de una sola unidad de información (normalmente un byte) entre el procesador y el periférico o viceversa. Para efectuar una transferencia elemental de información son precisas las siguientes funciones:

    - Establecimiento de una comunicación física entre el procesador y el periférico para la transmisión de la unidad de         información.
    - Control de los periféricos, en que se incluyen operaciones como prueba y modificación del estado del periférico. Para         realizar estas funciones la CPU gestionara las líneas de control necesarias.
Definiremos una operación de E/S como el conjunto de acciones necesarias para la transferencia de un conjunto de datos (es decir, una transferencia completa de datos). Para la realización de una operación de E/S se deben efectuar las siguientes funciones:

    - Recuento de las unidades de información transferidas (normalmente bytes) para reconocer el fin de operación.
    - Sincronización de velocidad entre la CPU y el periférico.
    - Detección de errores (e incluso corrección) mediante la utilización de los códigos necesarios (bits de paridad, códigos de        redundancia cíclica, etc.)
    - Almacenamiento temporal de la información. Es más eficiente utilizar un buffer temporal específico para las operaciones        de E/S que utilizan el área de datos del programa.
    - Conversión de códigos , conversión serie/paralelo, etc.