Images

UNIDAD 1: Introducción a los sistemas operativos

1.1 Definición y concepto
1.2 Funciones y características
1.3 Evolución histórica
1.4 Clasificación
1.5 Estructura (niveles o estratos de diseño)
1.6 Núcleo
1.6.1 Interrupciones (FLIH). 
1.6.2 Despachador(Scheduler). 
1.6.3 Primitivas de comunicación(IPC). 

1.1 Definicion y Concepto 
Colección de mecanismos de software destinados a servir de interface entre un sistema informático y sus usuarios, el cual ofrece herramientas y facilidades para simplificar las tareas de diseño, codificación, depuración, actualización, etc. Administra los recursos hardware y software que constituyen el sistema informático a explotar. Nació con la necesidad de llevar el control de quién utiliza los recursos software (usuario(s)). Componentes principales: manejo de procesos, entrada/salida, manejo de memoria y del sistema de archivos. Un sistema de computación consta de hardware, programas del sistema y programas de aplicación.


1.2 Funciones y características.
Las funciones básicas de un sistema operativo son: 
  • soporte para la ejecución de sw(software) de aplicación 
  • elemento de diagnóstico de hw(hardware) 
  • elemento de una red de computadoras 
  • elemento que optimiza el aprovechamiento de los recursos lógicos y físicos de un sistema de cómputo}

1.3 Evolución histórica.
Los primeros sistemas.
En un principio sólo existía el hardware de la computadora. Las primeras computadoras eran (físicamente) grandes máquinas que se operaban desde una consola. Una sola persona programaba y operaba el equipo.
Accesos por operador
En 1955 se separaron las funciones informáticas: Programación, operación y mantenimiento. El operador se encarga del manejo de la máquina (cargar programas, obtener resultados, hacer respaldos, etc.) y el programador dejó de tener acceso a la computadora.
Los programadores daban al operador los trabajos, éste los reunía y los ejecutaba uno tras otro y recogía los resultados entregándolos a los programadores.
Otra solución: El operador agrupaba los trabajos similares en requerimientos y los ejecutaba como si fueran un bloque (todos los de cobol, todos los de fortran), así se cargaba sólo una vez el compilador.

Secuencia automática de trabajos
El trabajo del operador era muy rutinario y podía automatizarse. Se diseñó un programa que transfería automáticamente el control de un trabajo a otro, el monitor residente (1er sistema operativo). Al encender el equipo el control se daba al programa monitor, este lo pasaba al 1er trabajo, el cual al terminar regresaba el control al monitor, y así sucesivamente. El monitor constaba de:

Mejora del rendimiento
Aun quedaba mucho tiempo del cpu ocioso debido a la diferencia de velocidad entre este y los dispositivos entrada/salida que eran mecánicos.

Off-Line
Aparecieron las cintas magnéticas, más rápidas que las tarjetas perforadas, pero secuenciales. Entonces se perforaban los programas en tarjetas y de ahí se pasaban a una cinta, esta cinta en bloque se pasaba a
drivers
secuenciador
Intérprete de tarjetas de control
Programa de usuario
Memoria
ejecución y los resultados en una nueva cinta y de ahí a la impresora. Las operaciones se hacían en dispositivos distintos lo que aumentaba la velocidad

On line
Lector de tarjetas->CPU->Impresora
Off Line

Lector de tarjetas->Unidad de Cinta->CPU->unidad de cinta->Impresora
Se podían tener varias lectoras de tarjetas y unidades de cinta y mantener ocupado al CPU, la desventaja era que el usuario debía esperar a que se llenara la cinta para ser atendido.

Buffering
Trata de mantener ocupados tanto el CPU como los dispositivos de E/S. Los datos se leen y se almacenan en un buffer (memoria intermedia), una vez que los datos se han leído y el CPU va a iniciar la operación, el dispositivo de entrada es instruido para iniciar inmediatamente la siguiente lectura. El CPU y el dispositivo de entrada permanecen ocupados. Cuando el CPU esté libre para el siguiente grupo de datos, el dispositivo de entrada habrá terminado de leerlos. El CPU podrá empezar el siguiente proceso y el dispositivo de entrada iniciará la lectura de los datos siguientes.
Para la salida, los resultados se descargan en otro buffer hasta que el dispositivo de salida pueda procesarlos.
Todo depende del tamaño del buffer y de la velocidad de procesamiento CPU y los E/S.

Spooling (SPOOL Simultaneous Peripheral Operation On Line)
El problema con los sistemas de cintas es que una lectora de tarjetas no podía escribir sobre un extremo de la cinta mientras el CPU leía el otro. Los sistemas de disco eliminaron esa dificultad, por su acceso directo. Las tarjetas se cargan directamente desde la lectora sobre el disco. Cuando se ejecuta un trabajo sus peticiones de entrada se satisfacen leyendo el disco. Cuando el trabajo solicita la salida, ésta se escribe en el disco. Cuando la tarea se ha completado se escribe en la salida realmente.
Se usa el disco como un buffer muy grande para leer por anticipado como sea posible de los dispositivos de entrada y para almacenar los archivos hasta que los dispositivos de salida sean capaces de aceptarlos.
La ventaja sobre el buffering es que el spooling traslapa la E/S de un trabajo con el procesamiento de otro.
Además mantiene una estructura de datos llama job spooling, que hace que los trabajos ya cargados permanezcan en el disco y el sistema operativo puede seleccionar cual ejecutar, por lo tanto se hace posible la planificación de trabajos mediante una cola por turno, tamaño o prioridad.

1.4 Clasificación.
Sistemas Operativos por Servicios
Esta clasificación es la más comúnmente usada y conocida desde el punto de vista del usuario final.




Monousuarios: un usuario a la vez, no importa el número de cpu’s, número de procesos que pueda ejecutar en un mismo instante de tiempo. PC’s.

Multiusuarios: más de un usuario a la vez, por varias terminales conectadas a la computadora o por sesiones remotas en una red de comunicaciones. No importa el número de cpu’s ni el número de procesos que cada usuario puede ejecutar simultáneamente.

Monotareas: sólo una tarea a la vez por usuario. Puede darse el caso de un sistema multiusuario y monotarea, varios usuarios al mismo tiempo pero cada uno de ellos puede estar haciendo solo una tarea a la vez.

Multitareas: realiza varias labores al mismo tiempo. interfases gráficas orientadas al uso lo cual permite un rápido intercambio entre las tareas para el usuario,

Monoprocesador: solamente un CPU, de manera que si la computadora tuviese más de uno le sería inútil. MS-DOS y MacOS.

1.5 Estructura (niveles o estratos de diseño).
Estructura monolítica.
Primeros sistemas operativos constituidos fundamentalmente por un sólo programa compuesto de un conjunto de rutinas entrelazadas de tal forma que cada una puede llamar a cualquier otra.

Características:
  1. Construcción del programa final a base de módulos compilados separadamente que se unen a través del encadenador (linker)
  2. Buena definición de parámetros de enlace entre las distintas rutinas existentes
  3. Carecen de protecciones y privilegios al entrar a rutinasque manejan diferentes aspectos de los recursos de la computadora
  4. Generalmente hechos a la medida, eficientes y rápidos en ejecución y gestión
  5. Poco flexibles para soportar diferentes ambientes de trabajo o aplicaciones.
Estructura jerárquica.
Mayores necesidades de los usuarios, mayor organización del software. Se dividió el sistema operativo en pequeñas partes, cada una bien definida y con una clara interfase con el resto de elementos.
Se constituyó una estructura jerárquica, el primero de los cuales fue denominado THE (Technische Hogeschool, Eindhoven)
Capa 5 – Control de programas de usuario
Capa 4 – Gestión de Archivos
Capa 3 – Control de operaciones entrada/salida
Capa 2 – Control de la Consola de operación
Capa 1 – Gestión de memoria
Capa 0 – Planificación de CPU

Otra forma es la de anillos.
Cada uno tiene una apertura por donde pueden entrar las llamadas de las capas inferiores. Las zonas más internas del sistema operativo o núcleo estarán más protegidas de accesos indeseados desde las capas más externas. Las internas serán más privilegiadas que las externas.

Cliente-servidor
El más reciente, puede ser ejecutado en la mayoría de las computadoras, para toda clase de aplicaciones, es de propósito general.
El núcleo establece la comunicación entre los clientes y los servidores. Los procesos pueden ser tanto servidores como clientes. Por ejemplo, un programa de aplicación normal es un cliente que llama al servidor correspondiente para acceder a un archivo o realizar una operación de entrada/salida sobre un dispositivo concreto. A su vez, un proceso cliente puede actuar como servidor para otro.


1.6 Núcleo.
El Núcleo.- Componente que interactúa directamente con el hardware. Contiene un conjunto de rutinas que hacen posible la ejecución de los programas y la comunicación entre ellos y el Hardware, es el que gestiona la entrada y salida del sistema, adaptándolas al hardware del sistema.


Núcleo (Kernel) y Niveles de un Sistema Operativo
Definición. 
Es el software que constituye el núcleo del sistema operativo, dónde se realizan las funcionalidades básicas como la gestión de procesos, la gestión de memoria y de entrada salida.
El “kernel” del sistema operativo controla todas las operaciones que implican procesos y representa sólo una pequeña porción del código de todo el Sistema Operativo pero es de amplio uso.

Concepto de Kernel
Para que una computadora pueda arrancar y funcionar, no es necesario que tenga un núcleo para poder usarse. Los programas pueden cargarse y ejecutarse directamente en una computadora «vacía», siempre que sus autores quieran desarrollarlos sin usar ninguna abstracción del hardware ni ninguna ayuda del sistema operativo. Ésta era la forma normal de usar muchas de las primeras computadoras: para usar distintos programas se tenía que reiniciar y reconfigurar la computadora cada vez. Con el tiempo, se empezó a dejar en memoria (aún entre distintas ejecuciones) pequeños programas auxiliares, como el cargador y el depurador, o se cargaban desde memoria de sólo lectura. A medida que se fueron desarrollando, se convirtieron en los fundamentos de lo que llegarían a ser los primeros núcleos de sistema operativo.
El kernel presenta al usuario o los programas de aplicación una interfaz de programación de alto nivel, implementando la mayoría de las facilidades requeridas por éstos. Reúne el manejo de una serie de siguientes conceptos ligados al hardware de nivel más bajo:

  • Procesos (tiempo compartido, espacios de direccionamiento protegidos); 
  • Señales y Semáforos; 
  • Memoria Virtual ("swapping", paginado); 
  • Sistema de Archivos; Tubos ("pipes") y Conexiones de red.
1.6.1 Interrupciones (FLIH).
La interrupción es el mecanismo mediante el cual otros módulos pueden interrumpir una secuencia normal de procesamiento. Ejemplos: 
  • Programa: división por cero 
  • Temporizador: cuando se cumple un tiempo específico 
  • E/S: cuando hay algo que comunicar 
  • Hardware: cuando ocurre una falla.

La gestión de interrupciones la realiza el manipulador (controlador) de interrupciones (FLIH, First Level Interrupt Handler) que 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).

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.
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
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 (Interprocess Communication).
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).
Images

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

2.1 Concepto de proceso.
2.2 Estados y transiciones de los procesos
2.3 Procesos ligeros (Hilos o hebras).
2.4 Concurrencia y secuenciabilidad.
2.4.1 Exclusión mutua de secciones criticas.
2.4.2 Sincronización de procesos en S.C.
2.4.2.1 Mecanismo de semáforos.
2.4.2.2 Mecanismo de monitores.
2.4.3 Interbloqueo (DeadLock).
2.4.3.1 Prevención.
2.4.3.2 Detección.
2.4.3.3 Recuperación.
2.5 Niveles, objetivos y criterios de planificación.
2.6 Técnicas de administración del planificador.
2.6.1 FIFO
2.6.2 SJF
2.6.3 RR
2.6.4 Queves multi-level.
2.6.5 Multi-level feedback queves.

2.1 Concepto de proceso.



Programas
Colección de instrucciones que el procesador interpreta y ejecuta, se almacenan en sistemas no volátiles necesitando ser cargados en memoria principal para poder ser ejecutados, se considera un ente estático.
Procesos
Programa en ejecución, el sistema operativo les asigna recursos, Se consideran un ente dinámico. El proceso es una abstracción creada por el SO, que se compone de: 
  • Código de Programa: sección texto 
  • Contexto de Ejecución: PC, registros del procesador y una pila para invocación de procedimientos 
  • Sección de Datos, que contiene variables globales 
  • Recursos del sistema.

Características 
  • Permite modularizar y aislar errores de programas durante su ejecución 
  • Soporta concurrencia de actividades, lo que permite un mejor aprovechamiento de los recursos 
  • Denominaremos como procesos tanto a los trabajos (jobs) en sistemas de lotes, como a las tareas (task) en sistemas de tiempo compartido.

Modelo

La diferencia entre un programa (conjunto de instrucciones) y un proceso (instrucciones ejecutándose) es obvia y crucial para entender el funcionamiento de los SO.
Imaginemos un mecánico de autos en un taller donde se reparan carros con averías complejas en las que se hace necesario consultar el manual de cada modelo, que contiene las instrucciones para reparar cada posible avería. Además, se permiten reparaciones rápidas a las que se les da mayor prioridad. Existe un almacén de refacciones y herramientas suficientes para las reparaciones. Comparando esta situación con un sistema de cómputo se pueden establecer las siguientes analogías: 
  • El mecánico sería el CPU (procesador) que realizará el trabajo. 
  • El manual de cada reparación sería el programa. 
  • Las herramientas serían los recursos disponibles 
  • Las refacciones serían los datos. 
  • La actividad de usar las herramientas para desmontar las piezas defectuosas sustituyéndolas por otras nuevas siguiendo las instrucciones del manual equivaldría al proceso.
Suponiendo que en un momento dado el mecánico está realizando una reparación compleja (de las que llevan tiempo) y aparece un carro que solicita una reparación de las rápidas (ha aparecido una interrupción). El mecánico suspende momentáneamente la reparación compleja anotando en qué situación se queda dicha reparación y qué operación estaba realizando en ese momento (guarda el estado del proceso). Asimismo, sustituye el manual que estaba realizando por el de la nueva reparación que se dispone a realizar (cambio de programa). Comienza la nueva reparación (cambio de proceso), en la que las herramientas no serán las mismas que antes (distintos recursos); las indicaciones del usuario, las refacciones (datos) y las indicaciones del manual (programa) llevarán a feliz término la reparación para que el mecánico regrese a la reparación inicial.

2.2 Estados y transiciones de los procesos
Los PCB’s se almacenan en listas, una para cada posible estado:


Los estados se pueden dividir en: Activos e inactivos
Activos los que compiten por el procesador. Tipos: 
  • Ejecución Cuando el proceso tiene el control del cpu 
  • Preparado (Listo).- Tienen las condiciones para ser ejecutados pero no están en ejecución por alguna causa. 
  • Bloqueado No pueden ejecutarse porque necesitan algún recurso no disponible.

2.3 Procesos ligeros (Hilos o hebras).


Un hilo de ejecución, en sistemas operativos, es similar a un proceso en que ambos representan una secuencia simple de instrucciones ejecutada en paralelo con otras secuencias. Los hilos permiten dividir un programa en dos o más tareas que corren simultáneamente, por medio de la multiprogramación. En realidad, este método permite incrementar el rendimiento de un procesador de manera considerable. En todos los sistemas de hoy en día los hilos son utilizados para simplificar la estructura de un programa que lleva a cabo diferentes funciones.
Todos los hilos de un proceso comparten los recursos del proceso. Residen en el mismo espacio de direcciones y tienen acceso a los mismos datos. Cuando un hilo modifica un dato en la memoria, los otros hilos utilizan el resultado cuando acceden al dato. Cada hilo tiene su propio estado, su propio contador, su propia pila y su propia copia de los registros de la CPU. Los valores comunes se guardan en el bloque de control de proceso (PCB), y los valores propios en el bloque de control de hilo (TCB).
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 más ágilmente a la interacción con el usuario.
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 directamente. En sistemas operativos que proveen facilidades para 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 modo (mode switch), en este caso pasar del estado de Running al estado de Waiting o Bloqueado y colocar el nuevo proceso en Running. En los hilos como pertenecen a un mismo proceso al realizar un cambio de hilo este overhead es casi despreciable.

2.4 Concurrencia y secuenciabilidad.
Concurrencia y secuenciabilidad
La concurrencia comprende un gran número de cuestiones de diseño, incluyendo la comunicación entre procesos, 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 2 o más y llegan al mismo tiempo a ejecutarse. La concurrencia puede presentarse en tres contextos diferentes:
• Varias aplicaciones: (multiprogramación) para permitir que el cpu sea compartido entre varios trabajos
• Aplicaciones estructuradas: Como ampliación del diseño modular y la programación estructurada, algunas aplicaciones pueden implementarse eficazmente como un conjunto de procesos concurrentes.
• Estructura del sistema operativo: Las mismas ventajas de estructuración son aplicables a los sistemas operativos que están implementados como un conjunto de procesos.
Tipos de computadora en los que puede haber concurrencia:
• Multiprogramación con un CPU. El sistema operativo se encarga de repartir el CPU entre los procesos, intercalando su ejecución para dar una apariencia de ejecución simultánea.
• Multiprocesador. Máquina formada por más de un CPU que comparten memoria principal. Los procesos no sólo intercalan su ejecución sino también la superponer.
• Multicomputadora. Es una máquina de memoria distribuida formada por una serie de computadoras, es posible la ejecución simultánea de los procesos en los diferentes CPU’s.
La concurrencia será aparente siempre que el número de procesos sea mayor que el de procesadores disponibles y será real cuando haya un proceso por procesador (Paralelismo).
Pros:
• Facilita la programación de aplicaciones: permite que se estructuren como un conjunto de procesos que cooperan entre sí para alcanzar un objetivo común.
•Acelera los cálculos: Dividiendo una tarea en varios procesos, ejecutándolos en “paralelo”.
• Posibilita el uso interactivo a múltiples usuarios que trabajan de forma simultánea. • Permite un mejor aprovechamiento de los recursos, en especial del CPU, ya que pueden aprovechar las fases de entrada-salida de unos procesos para realizar las fases de procesamiento de otros.
Contras:
• Inanición e interrupción de procesos
• Ocurrencia de bloqueos
• Que 2 o más procesos requieran el mismo recurso

2.4.1 Exclusión mutua de secciones criticas.
Regiones críticas
Parte de un programa, en la cual se intenta el acceso a recursos compartidos
Tipos de procesos
• Los procesos no conocen a los demás, son independientes, no trabajan juntos. • Los procesos conocen indirectamente a otros: no los conocen necesariamente, pero comparten algunos recursos.
Los procesos conocen a otros: se comunican y trabajan conjuntamente en una misma actividad.
Competencia de procesos por los recursos
Hay conflicto cuando los procesos compiten por el mismo recurso al mismo tiempo y el sistema operativo asignará el recurso a uno y el resto tendrá que esperar, el que quede esperando se retrasará, se bloqueará y en el peor de los casos nunca terminará bien
Ejemplo: Un Sistema Operativo debe asignar un identificador de proceso (PID) a dos procesos en un sistema multiprocesador. Si se realiza esta acción en dos procesadores a la vez sin control, se puede asignar el mismo PID a dos procesos distintos. Este problema se debe a que la asignación de PID es una sección crítica que debe ejecutarse en forma atómica, de forma completa e indivisible y ningún otro proceso podrá ejecutar dicho código mientras el primero no haya acabado su sección.
Debe haber sincronización que permita a los procesos cooperar entre ellos sin problemas protegiendo el código de la región crítica:
• Cada proceso debe solicitar permiso para entrar en la sección crítica mediante código.
• Cuando un proceso sale de la sección crítica debe indicarlo mediante código. Esto permitirá que otros procesos entren a ejecutar la sección crítica.
Requisitos:
• Exclusión mutua: Si un proceso está ejecutando código de la sección crítica, ningún otro proceso lo podrá hacer. • Progreso: Si ningún proceso está ejecutando dentro de la sección crítica, se elegirá alguno de los que desean entrar. • Espera acotada: Debe haber un límite en el número de veces que se permite que los demás procesos entren a ejecutar código de la sección crítica después de que un proceso haya efectuado una solicitud de entrada y antes de que se conceda la suya.

2.4.2 Sincronización de procesos en S.C.
2.4.2.1 Mecanismo de semáforos. 2.4.2.2 Mecanismo de monitores.
Sincronización
Coordinación para llevar a cabo el trabajo de un grupo de procesos cooperantes asegurando el acceso a recursos compartidos. Previene y/o corrige errores debidos a estos accesos. Para que los procesos puedan sincronizarse debe disponerse de servicios que permitan bloquear o suspender la ejecución de un proceso.

2.4.3 Interbloqueo (DeadLock).
Análisis
En un conjunto de procesos, cada uno está esperando un evento que sólo otro proceso del conjunto puede causar. Puesto que todos los procesos están esperando, ninguno de ellos puede causar ninguno de los eventos que podrían despertar a cualquiera de los demás miembros del conjunto, y todos los procesos continúan esperando indefinidamente.
Ejemplo: Una carretera en 2 direcciones tiene un puente que sólo deja pasar vehículos en un sentido, con las siguientes situaciones:
Un auto llega al puente y en sentido contrario no hay nadie y puede cruzar
Si el paso es controlado por un semáforo en cada lado y 100 m antes de cada uno hay detectores de autos para encender el semáforo opuesto en rojo, pude pasar que 2 autos lleguen al mismo tiempo en ambos sentidos y ambos estén detenidos por el semáforo (interbloqueo)
Si no hay semáforos, un conductor cede el paso, pero antes de que termine el otro, aparece un 3º y así sucesivamente, puede hacer que el conductor educado no cruce mientras haya carros en sentido contrario (postergación indefinida).

2.4.3.1 Prevención. 2.4.3.2 Detección. 2.4.3.3 Recuperación.
Prevención
A grandes rasgos, se debe diseñar un sistema de manera que esté excluida, a priori, la posibilidad de interbloqueo. Los métodos para prevenir el interbloqueo son de dos tipos.
Indirectos.- Consisten en impedir la aparición de alguna de las tres primeras condiciones necesarias
Directos.- Consisten en evitar la aparición de la condición 4.
Exclusión Mutua.- En general, no puede anularse. Si el acceso a un recurso necesita exclusión mutua, el sistema operativo debe soportar la exclusión mutua.

2.5 Niveles, objetivos y criterios de planificación.

  • Planificación de largo plazo (Planificación de trabajos), determina a qué trabajos se les permite entrar al sistema, cuál es el próximo trabajo que se va a ejecutar. Existe en los sistemas por lotes donde la decisión se basa en las necesidades de recursos y su disponibilidad. En los sistemas de tiempo compartido tiene como misión cargar los programas que se desea ejecutar en memoria, es por tanto el encargado de crear los procesos. 
  • Planificación de mediano plazon (Planificación de Swapping), determina a qué proceso se le permite competir por el CPU. Suspende y/o activa temporalmente procesos para mantener una operación uniforme en el sistema y ayuda a realizar algunas funciones para optimizar el rendimiento del sistema. 
  • Planificación de corto plazo (Planificación de CPU), determina a qué proceso deberá asignarse el CPU (despachar). Esta operación se realiza muchas veces por segundo, por lo que el despachador debe estar permanente en memoria.

2.6 Técnicas de administración del planificador.
Planificación del CPU
Ciclo de ráfaga del CPU y de E/S.

El éxito de la planificación del CPU depende de la siguiente prioridad observada de los procesos: la ejecución de un proceso consiste en un ciclo de ejecución del CPU y de E/S, y los procesos se alternan entre estos dos estados. La ejecución del proceso se hace alternando una ráfaga de CPU y una ráfaga de E/S. La última ráfaga de CPU terminará con una solicitud al sistema para que concluya la ejecución.
Planificador del CPU.
Siempre que el CPU queda inactivo, el sistema operativo debe seleccionar para su ejecución uno de sus procesos de la lista de listos. La selección es revisada por el planificador a corto plazo,
Estructura de planificación.
Las decisiones de planificación del CPU pueden efectuarse cuando un proceso cambia:
  • De ejecución a bloqueado 
  • De ejecución a listo 
  • De bloqueado a listo 
  • Cuando termina.
Algoritmos de planificación
Los procesos que se asignan al cpu son tomados de la lista de listos. Esta lista se alimenta de 2 puntos: 
  • Cuando un usuario inicia la ejecución de un programa, el planificador a largo plazo recibe la orden de ejecución, crea el proceso y lo pasa al planificador a corto plazo.
  • Cuando un proceso deja de estar en ejecución y no hay causas de bloqueo, o deja de estar bloqueado.
Políticas de planificación
  • Apropiativas Producen un cambio de proceso con cada cambio de contexto; el proceso que usa el cpu puede ser suspendido y permitir el acceso al cpu a otro proceso. (Tiempo compartido y tiempo real) 
  • No apropiativas.- Un proceso no abandona nunca el procesador desde su comienzo hasta su fin. (Por lotes).
2.6.1 FIFO
Primero en llegar primero en ser servido (FCFS)
EL cpu ejecuta cada proceso hasta que termina, los procesos que entran a la lista de listos estarán formados en el orden en que llegan hasta que les toque turno (FIFO).
El tiempo de espera de cada proceso depende del número de procesos que están en la lista de listos al momento de su ejecución y del tiempo que cada uno tenga en uso el cpu, y es independiente de las necesidades de ejecución del propio proceso.

2.6.2 SJF
Siguiente proceso el más corto (SJN)
Toma de la lista de listos el proceso que necesite menos tiempo de ejecución para realizar su trabajo. Debe saberse el tiempo de cpu que necesita cada proceso por medio de: información suministrada por el usuario, por el programa, por experiencia.
El tiempo de servicio T es bueno para procesos cortos y malo para procesos largos.

2.6.3 RR
Round Robin (RR)
Asignación cíclica, es una mejora de FCFS. A cada proceso se le da un determinado tiempo q (quantum), si no termina, se forma en la lista de listos, el cpu es para el siguiente proceso y así hasta que termine la ejecución.
La administración de la lista de listos puede ser FIFO o por prioridades. Variando q se tienen diferentes comportamientos. Si q>tiempo de ejecución se convertiría en FCFS, si q tiende a 0, la sobrecarga sería muy grande, la mayor parte del tiempo se usaría en cambios de contexto.

2.6.4 Queves multi-level. Colas múltiples
Cuando los procesos que van a ser ejecutados se pueden agrupar en distintos grupos, podemos asignarlos a diferentes colas, cada una con distinta planificación, para darle la que realmente necesite.
Esta política divide la cola de procesos preparados (listos) en varias colas separadas, de forma que los procesos se asignan a una cola específica según sus necesidades y tipo.
Para determinar en cada caso qué cola es la que suministrará un proceso para que acceda al cpu cuando éste deje a otro anterior, será controlada por un algoritmo de planificación entre las colas, que normalmente es apropiativo de prioridad fija.

2.6.5 Multi-level feedback queves. (Colas múltiples con retroalimentación)
Para dar un trato justo a los procesos, es necesario conocer previamente todos sus parámetros característicos: longitud, si son limitados por e/s o por cpu, memoria requerida, etc. Como estos datos no suelen ser conocidos, es difícil determinar el trato que debe recibir cada proceso. Después de analizar las políticas anteriores, es fácil concluir que se deben adoptar las siguientes cuestiones: 
  • Favorecer los procesos cortos 
  • Favorecer los procesos limitados por e/s 
  • Determinar la naturaleza del trabajo a realizar
El método de colas múltiples con retroalimentación divide los procesos en varias colas de procesos preparados (listos): cola 0, cola 1, cola 2, y así sucesivamente, de forma que las de numeración más baja tendrán una mayor prioridad.
Images

Unidad 3: Administración de Memoria


3.1 Política y filosofía.
3.2 Memoria real.
3.2.1 Administración de almacenamiento.
3.2.2 Jerarquía.
3.2.3 Estrategia de administración de memoria.
3.2.4 Asignación contigua v.s. no contigua.
3.2.5 Multiprogramación de partición fija, partición variable, con intercambio de almacenamiento.
3.3 Organización de memoria virtual.
3.3.1 Evaluación de las organizaciones de almacenamiento.
3.3.2 Paginación.
3.3.3 Segmentación.
3.3.4 Sistemas de paginación segmentación.
3.4 Administración de memoria virtual.
3.4.1 Estrategias de administración.
3.4.2 Técnicas de reemplazo de páginas.
3.4.3 Paginación por demanda.
3.4.4 Paginación anticipada.
3.4.5 Liberación de página.
3.4.6 Tamaño de página.

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 tamaño. Cada localidad de almacenamiento tiene asignada una dirección que la identifica.
Una de las funciones básicas que debe implementar un SO es la Administración de la Memoria para tener un control sobre los lugares donde están almacenados los procesos y datos que actualmente se están utilizando.

Sea cual sea el esquema de organización del almacenamiento que se adopte para un sistema específico, es necesario decidir qué estrategias se deben utilizar para obtener un rendimiento óptimo. Las estrategias de administración del almacenamiento determinan el comportamiento de la administración de memoria cuando se siguen ciertas políticas:

  • ¿Cuándo se toma un nuevo programa para colocarlo en memoria? 
  • ¿Se toma el programa cuando el sistema lo solicita específicamente o intenta anticiparse a las peticiones del sistema? 
  • ¿En qué lugar del almacenamiento principal se coloca el programa por ejecutar? 
  • ¿Se colocan los programas lo más cerca unos de otros en los espacios disponibles de la memoria principal para reducir al mínimo el desperdicio de espacio, o se colocan los programas lo más rápido posible para reducir al mínimo el tiempo de ejecución? 
  • Si se necesita colocar un nuevo programa en el almacenamiento principal y éste está lleno, ¿Cuál de los otros programas se desaloja?

POLÍTICAS.



Organización de la memoria
Forma de considerar este almacenamiento: ¿se coloca un solo programa de usuario o varios? Si se encuentran varios programas de usuario:
  • ¿se les concede la misma cantidad de espacio o particiones de diferente tamaño?
  • ¿se usa un esquema rígido de número y tamaño de particiones o un esquema dinámico y adaptable?
  • ¿se requiere que los trabajos funcionen en una partición específica o en cualquiera donde quepan?
  • ¿se requerirá o no que cada trabajo sea colocado en un bloque contiguo de memoria?
Independiente del esquema de organización hay que decidir las estrategias que se usarán para optimizar el rendimiento.

Las “estrategias de administración” deben considerar:
  • ¿cómo se consigue un nuevo programa para colocar en la memoria: cuando el sistema lo pide o intenta anticiparse a las peticiones?
  • ¿dónde se colocará el programa que se ejecutará a continuación: se prioriza el tiempo de carga o la optimización en el uso de la memoria? 
  • ¿con qué criterio se desplazarán programas?
3.2 Memoria real.

Cantidad de memoria principal con que cuenta un equipo
Memoria secundaria auxiliar.- la soportada generalmente en discos.
Para que un programa pueda ser ejecutado, él y sus datos deben estar en memoria principal. Para mejorar el rendimiento del cpu se pueden repartir sus servicios entre varios programas que necesitan estar cargados simultáneamente en memoria “compartiéndola”.
La memoria real o principal se considera el recurso central, ya que tanto el cpu como los dispositivos e/s la acceden para leer o grabar.

Hay 2 parámetros relacionados con la velocidad de r/w en memoria real: 
  • Tiempo de acceso.- Tiempo que transcurre del inicio al fin de una operación r/w.
  • Tiempo de ciclo de memoria.- Retraso que impone el hardware entre una operación y otra.

3.2.1 Administración de almacenamiento.

Direccionamiento

La memoria se puede ver como una sucesión de bytes, cada uno con su dirección y se puede acceder a ellos indicando dicha dirección.

3.2.2 Jerarquía.

  • Registro.- memoria de alta velocidad y poca capacidad, integrada en el cpu, que permite guardar y acceder a valores muy usados, generalmente en operaciones matemáticas. Están en la cumbre de la jerarquía de memoria, y son la manera más rápida que tiene el sistema de almacenar datos. Se miden generalmente por el número de bits que almacenan; "registro de 8 bits" o "registro de 32 bits". Se implementan en un banco de registros Los CPU’s tienen además otros registros usados con un propósito especifico, como el contador de programa. 
  • Memoria caché.- tipo especial de memoria que se sitúa entre el cpu y la RAM para almacenar datos que se usan frecuentemente. Agiliza la transmisión de datos entre el CPU y la memoria principal. Es de acceso directo y mucho más rápida que la RAM.
  • Memoria principal.- Son circuitos integrados capaces de almacenar información digital, a los que tiene acceso el CPU. Poseen una menor capacidad de almacenamiento que la memoria secundaria, pero una velocidad millones de veces superior. Hay dos tipos:
  • El CPU direcciona las posiciones de la RAM para poder acceder a los datos almacenados en ellas y para colocar los resultados de las operaciones. Memoria secundaria.- dispositivo encargado de almacenar información de forma permanente.
3.2.3 Estrategia de administración de memoria.

Están dirigidas a la obtención del mejor uso posible del recurso de la memoria principal.
Se dividen en las siguientes categorías:
  • “estrategias de búsqueda”.- establecen cuándo obtener el siguiente fragmento de programa o de datos para su inserción en la memoria principal.
  • “búsqueda por demanda”.- el siguiente fragmento de programa o de datos se carga a memoria principal cuando algún programa en ejecución lo referencia.
  • “búsqueda anticipada”.- puede producir un mejor rendimiento del sistema ya que no espera a que se efectúe la petición, sino que trata de anticiparse a ésta. 
  • “estrategias de colocación”.- determinan el lugar de la memoria dónde se colocará (cargará) un programa nuevo. “estrategias de reposición”.- determinan cuál fragmento de programa o datos liberar para dar lugar a los programas nuevos.
3.2.4 Asignación contigua vs no contigua.
“asignación contigua”.- cada programa ocupa un bloque contiguo de localidades de memoria.
“asignación no contigua”.- un programa se divide en varios bloques o “segmentos” que pueden almacenarse en direcciones que no tienen que ser necesariamente adyacentes, por lo que es más compleja pero más eficiente que la asignación continua.

Asignación Contigua de Memoria de Un Solo Usuario

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.
  • Si una sección particular del programa ya no es necesaria, se carga otra sección desde la memoria secundaria 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.

Protección en los sistemas de un solo usuario
El usuario tiene un completo control sobre la totalidad de la memoria principal: 
  • La memoria 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: bloquear el sistema o producir salidas erróneas. 
  • El S. O. debe estar protegido contra el proceso usuario por medio de un “registro de límites o registro frontera”:
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 usuario desperdician gran cantidad de recursos computacionales debido a que: 
  • Cuando ocurre una petición de e/s el 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 el cpu es más rápido que los dispositivos de e/s.
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á el cpu a otro trabajo que esté listo para efectuar cómputos. 
  • Existe paralelismo entre el procesamiento y la e/s. 
  • Se incrementa el uso del 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” de la memoria principal: 
  • Son de tamaño fijo. 
  • Se maneja una lista para cada partición. 
  • Alojan un proceso cada una. 
  • El cpu se cambia rápidamente entre los procesos creando la ilusión de simultaneidad.

Multiprogramación de Partición Fija: Traducción y Carga Relocalizables
  • Se usa una sola lista para todas las particiones y el sistema operativo determinará qué programa cargar y en qué partición. 
  • Se producen programas relocalizables que puedan ser ejecutados en cualquier partición disponible de tamaño suficiente para aceptarlos.
  • Mejoran el uso de la memoria. 
  • Confieren más flexibilidad en el armado de la carga de procesos.
Protección en los Sistemas de Multiprogramación
Si se usa asignación contigua de memoria la protección suele implementarse con varios “registros de límites”
Los extremos superior e inferior de una partición pueden ser: 
  • Delineados con dos registros. 
  • Indicando el límite inferior o superior y el tamaño de la partición o región.
Fragmentación en la Multiprogramación de Partición Fija
La “fragmentación de memoria” 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. Considerando una memoria dividida en 3 particiones de 128 K, 128 K y 256 K respectivamente: 
  • Fragmentación interna.- si un programa necesita 100 K de memoria y hay una partición de 128K se desaprovechan 28 K al interior de la partición. 
  • Fragmentación externa.- Puede haber un programa de 130 K en una partición de 256 y otro de 100k en una de 128 K, presentándose una petición de un programa de 140K que no podrá ser cargado en la partición libre, habiendo en total, suficiente memoria.
Multiprogramación de Partición Variable
Los procesos ocupan tanto espacio como necesitan, pero obviamente no deben superar el espacio disponible de memoria.

Images

Unidad 4: Administración de entrada/salida

4.1 Dispositivos y manejadores de dispositivos (device drivers).  

Dispositivos de E/S  

Se pueden clasificar en dos grandes categorías según el tipo de transmisión de información:   
  • Dispositivos de bloque.   
  • Dispositivos de caracter.  
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 caracter 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 caracter son las impresoras de línea, terminales, interfaces de una red, ratones, etc.  
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.  
Los dispositivos de E/S también se pueden agrupar en tres grandes grupos según su función:  
  • Dispositivos de interfaz de usuario. Se llama así a los dispositivos que permiten la comunicación entre los usuarios y la computadora. Dentro de este grupo se incluyen todos los dispositivos que sirven para proporcionar interfaz con el usuario, tanto para entrada (ratón, teclado, etc.) como para salida (impresoras, pantalla, etc.). Existen periféricos menos habituales, pero más sofisticados, tales como un escáner, lectores de huella digital, lectores de cinta magnética, instrumentos musicales digitales (MIDI), etc.  
  • Dispositivos de almacenamiento. Se usan para proporcionar almacenamiento no volátil de datos y memoria. Su función primordial es abastecer de datos y almacenamiento a los programas que se ejecutan en el CPU. Según su capacidad y la inmediatez con que se puede acceder a los datos almacenados en estos dispositivos, se pueden dividir en almacenamiento secundario (discos y memorias flash) y terciario (cintas)  
  • Dispositivos de comunicaciones. Permiten conectar a la computadora con otras computadoras a través de una red. Los dos tipos de dispositivos más comunes de esta clase son los módems, para comunicación vía red telefónica, y las tarjetas de interfaz a la red, para conectar la computadora a una red de área local.  

Controladores o manejadores de Dispositivos  

Las unidades de e/s generalmente constan de:   
  • Un componente mecánico.  
  • Un componente electrónico: el controlador del dispositivo o tarjeta.  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 el CPU y los controladores son:   
  • Para la mayoría de las micro y mini computadoras:  Modelo de bus del sistema.   
  • Para la mayoría de los mainframes:  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 en el que 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 el 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.  
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, el 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 del CPU.   
  • Verifique los resultados de la operación.  
El cpu obtiene los resultados y el estado del dispositivo al leer uno o más bytes de información de los registros del controlador.  

Drivers de E/S 

Un controlador de dispositivo (llamado normalmente controlador, o, en inglés, driver) es un programa informático que permite al sistema operativo interactuar con un periférico, haciendo una abstracción del hardware y proporcionando una interfaz -posiblemente estandarizada- para usarlo. Se puede esquematizar como un manual de instrucciones que le indica cómo debe controlar y comunicarse con un dispositivo en particular. Por tanto, es una pieza esencial, sin la cual no se podría usar el hardware.  Existen tantos tipos de controladores como tipos de periféricos, y es frecuente encontrar más de un controlador posible para el mismo dispositivo, cada uno ofreciendo un nivel distinto de funcionalidades. Por ejemplo, aparte de los oficiales (normalmente disponibles en la página web del fabricante), se pueden encontrar también los proporcionados por el sistema operativo, o también versiones no oficiales hechas por terceros. Estos controladores pueden ser genéricos (válidos para más de un modelo del mismo periférico) o específicos para cada modelo. También se distribuyen actualizaciones a nuevas versiones, que pueden dar un mejor funcionamiento. Normalmente son los fabricantes del hardware quienes escriben sus controladores, ya que conocen mejor el funcionamiento interno de cada aparato, pero también se encuentran controladores libres, por ejemplo en los sistemas operativos libres. En este caso, los creadores no son de la empresa fabricante, aunque a veces hay una cooperación con ellos, cosa que facilita el desarrollo. Si no la hay, el procedimiento necesita de ingeniería inversa y otros métodos difíciles o con riesgos legales. 
 Los controladores de dispositivo se suelen agrupar en alguna de las siguientes categorías o clases: 
  • Adaptadores de audio (tarjetas de sonido).  
  • Dispositivos de comunicación (infrarrojos, módems, etc).  
  • Dispositivos de visualización; pantallas (displays).  
  • Teclados.  
  • Ratón (“mouse” y otros señaladores gráficos).  
  • Dispositivos multimedia.  
  • Dispositivos de Red.  
  • Impresoras.  
  • Almacenamiento 
4.2 Mecanismos y funciones de los manejadores de dispositivos (device drivers).
El controlador es el componente más importante desde el punto de vista del sistema operativo, ya que constituye la interfaz del dispositivo con el bus de la computadora y es el componente que se ve desde el CPU. El S. O. generalmente trabaja con el controlador y no con el dispositivo.  
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:   
  • Comienza con un preámbulo.   
  • Sigue con una serie de bits (de un sector de disco, por ejemplo).   
  • Concluye con una suma para verificación o un código corrector de errores.  
El preámbulo:   
  • Se escribe al dar formato al disco.   
  • 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 el 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. 
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 E/S 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.  
  • Interfaz del sistema operativo. Llamadas al sistema que usan las aplicaciones de usuario.
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 una bandera que indica que hay datos en el buffer del teclado.   


Las interrupciones deben ocultarse en el S. O.:  
  • Cada proceso que inicie una operación de e / s se bloquea hasta que termina la e / s y ocurra la interrupción.   
  • El procedimiento de interrupción realiza lo necesario para desbloquear el proceso que lo inició. 
Manejadores de dispositivos  
Cada dispositivo de E/S, o cada clase de dispositivos, tiene un manejador asociado en el sistema operativo.  Dicho manejador incluye: código independiente del dispositivo para proporcionar al nivel superior del sistema operativo una interfaz de alto nivel y el código dependiente del dispositivo necesario para programar el controlador del dispositivo a través de sus registros y datos. La tarea de un manejador de dispositivo es aceptar peticiones en formato abstracto, de la parte del código de E/S independiente del dispositivo, traducir dichas peticiones a términos que entienda el controlador, enviar al mismo las órdenes adecuadas en la secuencia correcta y esperar a que se cumplan. 

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 está ocupado con otra solicitud, agregará la nueva solicitud a una cola de solicitudes pendientes.

Software de E/S independiente del dispositivo  

La mayor parte del sistema de E/S es software independiente de dispositivo. Este nivel incluye el sistema de archivos y el de gestión de red, el gestor de bloques, la cache de bloques y una parte de los manejadores de dispositivo. La principal función de esta capa de software es ejecutar las funciones de E/S que son comunes a todos los dispositivos a través de una interfaz uniforme.  Internamente, en este nivel se proporciona acceso a nivel de bloques o caracteres, almacenamiento intermedio, gestión de los dispositivos, planificación de la E/S y control de errores.  El tamaño de acceso a nivel de bloques se hace usando tamaños de bloque de acceso comunes para todo un sistema de archivos, lo que permite ocultar que cada dispositivo puede tener distinto tamaño de sector y distinta geometría. Estos detalles quedan ocultos por la capa de software independiente del dispositivo que ofrece una interfaz sobre la base de bloques lógicos del sistema de archivos. Lo mismo ocurre con los dispositivos de caracteres, algunos de los cuales trabajan con un carácter cada vez, como el teclado, mientras otros trabajan con flujos de caracteres, como el modem o las redes.  Para optimizar la E/S y para armonizar las peticiones de usuario, que pueden ser de cualquier tamaño, con los bloques que maneja el sistema de archivos, el software de E/S proporciona almacenamiento intermedio en memoria del sistema operativo. Esta facilidad se usa para tres cosas:  
  • Optimizar la E/S evitando accesos a los dispositivos.  
  • Ocultar las diferencias de velocidad con que cada dispositivo y usuario manejan los datos.  
  • Facilitar la implementación de la semántica de compartición, al existir una copia única de los datos en memoria.  
Espacio de usuario para software de E/S  
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.

Instrucciones máquina que el CPU puede utilizar para E/S 
  • START I/O Inicia una operación de E/S. El campo de dirección de la instrucción se emplea para especificar el canal y el dispositivo de E/S que participa en la operación.
  • HALT I/O Finaliza la operación del canal.  
  • TEST CHANNEL Prueba el estado del canal.  
  • TEST I/O Prueba el estado del canal, el subcanal y el dispositivo de E/S.  
Estructuras de datos de un driver 
Las rutinas de un driver para dar un correcto servicio a las peticiones de entrada / salida necesitan para cada dispositivo una serie de datos que se encuentran en estructuras de datos en forma de tabla de manera que su composición depende del sistema operativo, aunque tienen forma y nombres similares a los siguientes:  

Bloque de control del driver (BCD) Es la representación del driver desde el punto de vista del sistema operativo. Contiene aquellos parámetros que son susceptibles de ser variados dinámicamente y aquellos que definen el tipo de dispositivo que puede ser atendido por el driver. Los datos que suele contener son:  
  • Dirección del siguiente BCD.  
  • Nombre del driver.  
  • Dirección de comienzo de los bloques de control de unidades (BCU) que controle el driver.  
  • Número de unidades a servir.  
  • Dirección de comienzo de la rutina de inicialización del driver.  
  • Estado del driver (On/off line).  
  • Dirección de comienzo de la cola de bloques de entrada / salida (BES).  
  • Dirección del BES que está siendo servido.  
  • Variables particulares del driver.  
Paquete de petición de entrada/salida (PES) 
Cuando un proceso de usuario intenta hacer una operación de entrada/salida, el sistema operativo crea un paquete asociado a dicho proceso y a dicha petición para ser tratado por el driver. Este paquete se coloca en una cola prioritaria para ser atendido por el driver al que va dirigido. 






Los datos que normalmente contiene son:  
  • Dirección del siguiente PES en la cola.  
  • Prioridad de la petición de entrada/salida.  
  • Proceso que ha lanzado la petición.  
  • Dirección dónde devolver el resultado de la petición.  
  • Función a realizar (entrada o salida).  
  • Identificador del dispositivo.  
  • Identificador de la unidad.  
  • Dirección de la lista de parámetros de entrada de la llamada al sistema operativo.