Está en la página 1de 50

INTRODUCCIÓN:

Sin el software una computadora es en esencia una masa metálica sin utilidad. Con el software, una
computadora puede almacenar, procesar y recuperar información, encontrar errores de ortografía e
intervenir en muchas otras valiosas actividades para ganar el sustento. El software para
computadoras puede clasificarse en general, en 2 clases: los programas de sistema, que controlan
la operación de la computadora en sí y los programas de aplicación, los cuales resuelven problemas
para sus usuarios. El programa fundamental de todos los programas de sistema, es el Sistema
Operativo, que controla todos los recursos de la computadora y proporciona la base sobre la cual
pueden escribirse los programas de aplicación.

Un Sistema Operativo es un programa que actúa como intermediario entre el usuario y el hardware
de un computador y su propósito es proporcionar un entorno en el cual el usuario pueda ejecutar
programas. El objetivo principal de un Sistema Operativo es, entonces, lograr que el Sistema de
computación se use de manera cómoda, y el objetivo secundario es que el hardware del computador
se emplee de manera eficiente.

Esta pagina fue elaborada con el fin de brindar información acerca de los sistemas operativos,
debido a que el auge de la INTERNET cada día crece más, y se considera que esta información es
de gran ayuda para próximas generaciones.

 1.1 Concepto y definición de Sistemas Operativos.


 

Un Sistema Operativo es una parte importante de cualquier sistema de computación. Un sistema


de computación puede dividirse en cuatro componentes: el hardware, el Sistema Operativo, los
programas de aplicación y los usuarios. El hardware (Unidad Central de Procesamiento (UCP),
memoria y dispositivos de entrada/salida (E/S)) proporciona los recursos de computación básicos.
Los programas de aplicación (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 computación de los usuarios.

 
Figura. Algunos recursos que
administra el Sistema Operativo

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

1.- Se pueden imaginar un Sistema Operativo como los programas, instalados en el software o
firmware, que hacen utilizable el hardware. El hardware proporciona la "capacidad bruta de
cómputo"; los sistemas operativos ponen dicha capacidad de cómputo al alcance de los usuarios y
administran cuidadosamente el hardware para lograr un buen rendimiento.

2.- Los Sistemas Operativos son ante todo administradores de recursos; el principal recurso que
administran es el hardware del computador ;además de los procesadores, los medios de
almacenamiento, los dispositivos de entrada/salida, los dispositivos de comunicación y los datos.

3.- Un Sistema Operativo es un programa que actúa como intermediario entre el usuario y el
hardware del computador y su propósito es proporcionar el entorno en el cual el usuario pueda
ejecutar programas. Entonces, el objetivo principal de un Sistema Operativo es, lograr que el
sistema de computación se use de manera cómoda, y el objetivo secundario es que el hardware
del computador se emplee de manera eficiente.

4.- Un Sistema Operativo es un conjunto de programas que controla la ejecución de programas de


aplicación y actúa como una interfaz entre el usuario y el hardware de una computadora, esto es,
un Sistema Operativo explota y administra los recursos de hardware de la computadora con el
objeto de proporcionar un conjunto de servicios a los usuarios del sistema.

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

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

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

El Sistema Operativo se encuentra almacenado en la memoria secundaria. Primero se carga y


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

 
 

1.2 Características de los Sistemas Operativos.


 

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

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

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

           Habilidad para evolucionar. Un Sistema Operativo deberá construirse de manera que
permita el desarrollo, prueba o introducción efectiva de nuevas funciones del sistema sin interferir
con el servicio.
           Encargado de administrar el hardware. El Sistema Operativo se encarga de manejar de
una mejor manera los recursos de la computadora en cuanto a hardware se refiere, esto es,
asignar a cada proceso una parte del procesador para poder compartir los recursos.
           Relacionar dispositivos (gestionar a través del kernel). El Sistema Operativo se debe
encargar de comunicar a los dispositivos periféricos, cuando el usuario así lo requiera.
           Organizar datos para acceso rápido y seguro.
           Manejar las comunicaciones en red. El Sistema Operativo permite al usuario manejar con
alta facilidad todo lo referente a la instalación y uso de las redes de computadoras.
            
           Procesamiento por bytes de flujo a través del bus de datos.
           Facilitar las entradas y salidas. Un Sistema Operativo debe hacerle fácil al usuario el
acceso y manejo de los dispositivos de Entrada/Salida de la computadora.
           Técnicas de recuperación de errores.
           Evita que otros usuarios interfieran. El Sistema Operativo evita que los usuarios se
bloqueen entre ellos, informándoles si esa aplicación esta siendo ocupada por otro usuario.
           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 Clasificación de los sistemas operativos.


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

Los Sistemas Operativos por lotes, procesan una gran cantidad de trabajos con poca o ninguna
interacción entre los usuarios y los programas en ejecución. Se reúnen todos los trabajos comunes
para realizarlos al mismo tiempo, evitando la espera de dos o más trabajos como sucede en el
procesamiento en serie. Estos sistemas son de los más tradicionales y antiguos, y fueron
introducidos alrededor de 1956 para aumentar la capacidad de procesamiento de los programas.

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

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

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

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

Figura. Trabajos más comunes que realiza el


Sistema Operativo por lotes.

  Sistemas Operativos de tiempo real.

Los Sistemas Operativos de tiempo real son aquellos en los cuales no tiene importancia el usuario,
sino los procesos. Por lo general, están subutilizados sus recursos con la finalidad de prestar
atención a los procesos en el momento que lo requieran. se utilizan en entornos donde son
procesados un gran número de sucesos o eventos.
Muchos Sistemas Operativos de tiempo real son construidos para aplicaciones muy específicas
como control de tráfico aéreo, bolsas de valores, control de refinerías, control de laminadores.
También en el ramo automovilístico y de la electrónica de consumo, las aplicaciones de tiempo
real están creciendo muy rápidamente. Otros campos de aplicación de los Sistemas Operativos de
tiempo real son los siguientes:

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

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

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


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

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

Su objetivo es tener a varias tareas en la memoria principal, de manera que cada uno está usando
el procesador, o un procesador distinto, es decir, involucra máquinas con más de una UCP.

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

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

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


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

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

Los principales recursos del sistema, el procesador, la memoria, dispositivos de E/S, son
continuamente utilizados entre los diversos usuarios, dando a cada usuario la ilusión de que tiene
el sistema dedicado para sí mismo. Esto trae como consecuencia una gran carga de trabajo al
Sistema Operativo, principalmente en la administración de memoria principal y secundaria.

Ejemplos de Sistemas Operativos de tiempo compartido son Multics, OS/360 y DEC-10.

Características de los Sistemas Operativos de tiempo compartido:

Populares representantes de sistemas multiprogramados multiusuario, ej: sistemas de diseño


asistido por computador, procesamiento de texto, etc.

Dan la ilusión de que cada usuario tiene una máquina para  sí.

         Mayoría utilizan algoritmo de reparto circular.


         Programas se ejecutan con prioridad rotatoria que se incrementa con la espera
y disminuye después de concedido el servicio.
         Evitan monopolización del sistema asignando tiempos de procesador (time
slot).
         Gestión de memoria proporciona protección a programas residentes.
         Gestión de archivo  debe proporcionar protección y control de acceso debido a
que  pueden existir múltiples usuarios accesando un mismo archivos.
Sistemas Operativos distribuidos.

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

Los sistemas distribuidos deben de ser muy confiables, ya que si un componente del sistema se
compone otro componente debe de ser capaz de reemplazarlo.

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

Características de los Sistemas Operativos distribuidos:

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


mediante interconexiones hardware y software .
         Gobierna operación de un S.C. y proporciona abstracción de máquina virtual a
los usuarios.
         Objetivo clave es la transparencia.
         Generalmente proporcionan medios para la compartición global de recursos.
         Servicios añadidos: denominación global, sistemas de archivos distribuidos,
facilidades para distribución de cálculos (a través de comunicación de procesos
internodos, llamadas a procedimientos remotos, etc.).

 
Sistemas Operativos de red.

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

El primer Sistema Operativo de red estaba enfocado a equipos con un procesador Motorola 68000,
pasando posteriormente a procesadores Intel como Novell Netware.

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

Figura. Se muestra un Sistema Operativo en red.

Sistemas Operativos paralelos.

En estos tipos de Sistemas Operativos se pretende que cuando existan dos o más procesos que
compitan por algún recurso se puedan realizar o ejecutar al mismo tiempo.
En UNIX existe también la posibilidad de ejecutar programas sin tener que atenderlos en forma
interactiva, simulando paralelismo (es decir, atender de manera concurrente varios procesos de un
mismo usuario). Así, en lugar de esperar a que el proceso termine de ejecutarse (como lo haría
normalmente), regresa a atender al usuario inmediatamente después de haber creado el proceso.

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

 
1.4 Historia de los Sistemas Operativos.
 

Para tratar de comprender los requisitos de un Sistema Operativo y el significado de las principales
características de un Sistema Operativo contemporáneo, es útil considerar como han ido
evolucionando éstos con el tiempo.

Existen diferentes enfoques o versiones de como han ido evolucionando los Sistemas Operativos

La primera de estas versiones podría ser esta:

En los 40's, se introducen los programas bit a bit, por medio de interruptores mecánicos y después
se introdujo el leng. máquina 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 existía
realmente un Sistema Operativo; las primeras computadoras utilizaban bulbos, la entrada de datos
y los programas se realizaban a través del lenguaje máquina (bits) o a través de interruptores.

Durante los años 50's y 60's.- A principio de los 50's, la compañía 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, diseñadores, capturistas, etc.),
se encarguen de modificar sus programas. Establecían o apartaban tiempo, metían o introducían
sus programas, corregían y depuraban sus programas en su tiempo. A esto se le llamaba trabajo
en serie. Todo esto se traducía en pérdida 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 época 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, inició el auge de la INTERNET en los Estados Unidos de América. A finales de los
años 80's comienza el gran auge y evolución de los Sistemas Operativos. Se descubre el concepto
de multiprogramación 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 computación distribuida y del multiprocesamiento a


través de múltiples redes de computadoras, aprovechando el ciclo del procesador.

Se tendrá una configuración dinámica con un reconocimiento inmediato de dispositivos y software


que se añada o elimine de las redes a través de procesos de registro y localizadores.

La conectividad se facilita gracias a estándares y protocolos de sistemas abiertos por


organizaciones como la Org. Intern. de normas, fundación de software abierto, todo estará mas
controlado por los protocolos de comunicación OSI y por la red de servicios digital ISDN.

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

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

   

Después de los infructuosos esfuerzos de Babbage,


hubo poco progreso en la construcción de las computadoras digitales, hasta la
Segunda Guerra Mundial. A mitad de la década de los 40's, Howard Aiken (Harvard), John Von
Newman (Instituto de Estudios Avanzados, Princeton), J. Prespe R. Eckert y Williams Mauchley
(Universidad de Pennsylvania), así como Conrad Zuse (Alemania), entre otros lograron construir
máquinas de cálculo mediante bulbos. Estas máquinas eran enormes y llenaban cuartos
completos con decenas de miles de bulbos, pero eran mucho más lentas que la computadora
casera más económica en nuestros días.

Toda la programación se llevaba a cabo en lenguaje de máquina absoluto y con frecuencia se


utilizaban conexiones para controlar las funciones básicas de la máquina. Los lenguajes de
programación eran desconocidos (incluso el lenguaje ensamblador). No se oía de los Sistemas
Operativos el modo usual de operación consistía en que el programador reservaba cierto período
en una hoja de reservación pegada a la pared, iba al cuarto de la máquina, insertaba su conexión
a la computadora y pasaba unas horas esperando que ninguno de los 20,000 o más bulbos se
quemara durante la ejecución. La inmensa mayoría de los problemas eran cálculos numéricos
directos, por ejemplo, el cálculo de valores para tablas de senos y cosenos.
A principio de la década de los 50's la rutina mejoro un poco con la introducción de
las tarjetas perforadas. Fue entonces posible escribir los programas y leerlas en
vez de insertar conexiones, por lo demás el proceso era el mismo.

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

La introducción del transistor a mediados de los años 50's modificó en forma


radical el panorama. Las computadoras se volvieron confiables de forma que
podían fabricarse y venderse a clientes, con la esperanza de que ellas continuaran
funcionando lo suficiente como para realizar un trabajo en forma.

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

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

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

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

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

Un interesante desarrollo que comenzó a llevarse a cabo a mediados de la década


de los ochenta ha sido el crecimiento de las redes de computadoras personales,
con sistemas operativos de red y sistemas operativos distribuidos.
En los sistema operativo de red, los usuarios están conscientes de la existencia de
varias computadoras y pueden conectarse con máquinas remotas y copiar
archivos de una máquina a otra. Cada máquina ejecuta su propio sistema
operativo local y tiene su propio usuario.

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

2.1 Metodología de diseño


Existen autores que son partidarios de un enfoque jerárquico para el diseño de sistemas
operativos. En la base de la jerarquía se encuentra el hardware del computador, a veces
denominado simplemente “máquina pura” o los “hierros desnudos”. En el siguiente nivel de la
jerarquía (o en varios de los siguientes niveles en algunos diseños) están las diferentes funciones
del núcleo, las cuales se ven como si formaran una máquina ampliada, es decir, un computador
que ofrece no sólo su lenguaje de máquina como apoyo al sistema operativo y a sus usuarios, sino
también un grupo de funciones adicionales proporcionadas por el núcleo. Estas posibilidades
adicionales se denominan a menudo primitivas.

Arriba del núcleo, en jerarquía, se encuentran los diferentes procesos del sistema operativo que
trabajan en apoyo de los procesos de usuario; por ejemplo, los procesos de administración de los
dispositivos, que se encargan en la práctica de supervisar las operaciones de entrada/salida de los
dispositivos del sistema para beneficio de los diversos usuarios. En la cima de la jerarquía se
encuentran los procesos de usuario.

Se ha visto que los diseños jerárquicos son más fáciles de depurar, modificar y verificar. En los
diseños en que el núcleo está distribuido en varios niveles de jerarquía, elegir qué función colocar
en cada nivel requiere un análisis cuidadoso. En tales diseños, con frecuencia sólo se permite
hacer llamadas a funciones situadas jerárquicamente por debajo de quién hace la llamada; es
decir, cada nivel sólo puede llamar a las funciones que están colocadas en el nivel inmediato
inferior.

En los sistemas más recientes existe la tendencia de colocar gran parte del núcleo en micro
código. Ésta es una técnica de seguridad efectiva, pues impide la alteración del núcleo y con una
cuidadosa codificación se puede lograr que se ejecuten más eficientemente las funciones del
núcleo.

2.2 Núcleo o Kernel y niveles de un sistema operativo


El Kernel consiste en la parte principal del código 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, este se divide en 5 capas:

Nivel 1. Gestión de Memoria: que proporciona las facilidades de bajo nivel para la gestión de
memoria secundaria necesaria para la ejecución 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 procesos.

Nivel 4. Información o Aplicación o Interprete  de Lenguajes: Facilita la comunicación con los


lenguajes y el sistema operativo para aceptar las ordenes en cada una de las aplicaciones.
Cuando se solicitan 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
manipulación de archivos con nombre, va asignando espacio y acceso de datos en memoria.

 
El núcleo y los procesos  
El núcleo (Kernel) de un sistema operativo es un conjunto de rutinas cuya misión es la de
gestionar el procesador, la memoria, la entrada/salida y el resto de procesos disponibles en la
instalación. Toda esta gestión la realiza para atender al funcionamiento y peticiones de los trabajos
que se ejecutan en el sistema.

Los procesos relacionados con la entidad básica de los sistemas operativos actuales: Los
procesos.

El esquema general del mismo es el siguiente:

 
       Definición 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.

 
       Clasificación de los procesos según su forma de ejecución, de carga, etc.

Procesos  
Uno de los conceptos mas importantes que gira entorno a un sistema operativo es el de proceso.
Un proceso es un programa en ejecución junto con el entorno asociado (registros, variables ,etc.).
El corazón de un sistema operativo es el núcleo, un programa de control que reacciona ante
cualquier interrupción de eventos externos y que da servicio a los procesos, creándolos,
terminándolos y respondiendo a cualquier petición de servicio por parte de los mismos.
 
Un proceso es una actividad que se apoya en datos, recursos, un estado en cada momento y un
programa.
 
 
 
El Bloque de Control de Procesos (PCB)  
Un proceso se representa desde el punto de vista del sistema operativo, por un conjunto de datos
donde se incluyen el estado en cada momento, recursos utilizados, registros, etc., denominado
Bloque de Control de Procesos (PCB).
 
Los objetivos del bloque de control de procesos son los siguientes:
 

 
       Localización de la información sobre el proceso por parte del sistema operativo.

        Mantener registrados los datos del proceso en caso de tener que suspender
temporalmente su ejecución o reanudarla.

La información contenida en el bloque de control es la siguiente:


 

        Estado del proceso. Información relativa al contenido del controlador del programa
(Program Counter, PC), estado de procesador en cuanto a prioridad del proceso, modo
de ejecución, etc., y por ultimo el estado de los registros internos de la computadora.

 
       Estadísticas de tiempo y ocupación de recursos para la gestión de la
planificación del procesador.

 
       Ocupación de memoria interna y externa para el intercambio (swapping).

 
       Recursos en uso (normalmente unidades de entrada/salida).

 
       Archivos en uso.

 
       Privilegios.

 
Estas informaciones se encuentran en memoria principal en disco y se accede a ellas en los
momentos en que se hace necesaria su actualización o consulta. Los datos relativos al estado del
proceso siempre se encuentran en memoria principal.
Existe un Bloque de Control de Sistema (SCB) con objetivos similares al anterior y entre los que
se encuentra el enlazado de los bloques de control de procesos existentes en el sistema.
El cambio de contexto se producirá en caso de ejecución de una instrucción privilegiada, una
llamada al sistema operativo o una interrupción, es decir, siempre que se requiera la atención de
algún servicio del sistema operativo.
 

Estado de los procesos  


Los bloques de control de los procesos se almacenan en colas, cada una de las cuales representa
un estado particular de los procesos, existiendo en cada bloque, entre otras informaciones. Los
estados de los procesos son internos del sistema operativo y transparentes al usuario.
 
Los estados de los procesos se pueden dividir en dos tipos: activos e inactivos.
 
1.- Estados activos:  Son aquellos que compiten con el procesador o están en condiciones de
hacerlo. Se dividen en:

 
         Ejecución.  Estado en el que se encuentra un proceso cuando tiene el control
del procesador. En un sistema monoprocesador este estado sólo lo puede tener un
proceso.

 
         Preparado. Aquellos procesos que están dispuestos para ser ejecutados, pero
no están en ejecución por alguna causa (Interrupción, haber entrado en cola
estando otro proceso en ejecución, etc.).

 
         Bloqueado. Son los procesos que no pueden ejecutarse de momento por
necesitar algún recurso no disponible (generalmente recursos de entrada/salida).

 
 2.- Estados inactivos: Son aquellos que no pueden competir por el procesador, pero que pueden
volver a hacerlo por medio de ciertas operaciones. En estos estados se mantiene el bloque de
control de proceso aparcado hasta que vuelva a ser activado. Se trata de procesos que no han
terminado su trabajo que lo han impedido y que pueden volver a activarse desde el punto en que
se quedaron sin que tengan que volver a ejecutarse desde el principio.
 
Son de dos tipos:
 

 
         Suspendido bloqueado.  Es el proceso que fue suspendido en espera de un
evento, sin que hayan desaparecido las causas de su bloqueo.

          Suspendido programado. Es el proceso que han sido suspendido, pero no tiene
causa parta estar bloqueado.

 
Transacciones de estado
 
Todo proceso a lo largo de su existencia puede cambiar de estado varias veces. Cada uno de
estos cambios se denomina transacción de estado. Estas transacciones son las siguientes:
 

 
       Comienzo de la ejecución.  Todo proceso comienza al ser dada la orden de
ejecución del programa insertándose en la cola de preparados. El encolamiento
dependerá de la política de gestión de dicha cola.

        Paso de estado de ejecución.  Cuando el procesador se encuentra inactivo y en la


cola de preparados exista algún proceso en espera de ser ejecutado, se pondrá en
ejecución el primero de ellos.

        Paso a estado bloqueado.  Un proceso que se encuentre en ejecución y que


solicite una operación a un dispositivo externo, teniendo que esperar a que dicha
operación finalice, será pasado de estado de ejecución a estado bloqueado
insertándose su PCB en la cola correspondientes de bloqueado. A partir de este
momento el procesador pone en ejecución el siguiente proceso, que será el primero de
la cola de preparados.
        Paso a estado preparado. Este paso puede ser producido por alguna de las
siguientes causas.

Orden de ejecución de un programa, con la cual, ya se ha mencionado, el


proceso pasa a la cola de preparados.

Si un proceso está en estado bloqueado por causa de una operación de


entrada/salida y está finaliza, pasará de la cola de bloqueados a la de
preparados.

Si un proceso está en ejecución y aparece una interrupción que fuerza al sistema


operativo a ejecutar otro proceso, el primero pasará al estado de preparado y su
PCB a la cola de preparados.

Activación. Un proceso suspendido previamente sin estar bloqueado pasará al


estado preparado al ser activado nuevamente.

        Paso a estado suspendido bloqueado. Si un proceso está bloqueado y el sistema


operativo recibe la orden de suspenderlo, su PCB entrará en la cola de procesos
suspendidos bloqueados.

        Paso a estado suspendido preparado.  Este paso se puede producir bajo tres
circunstancias:

Suspensión de un proceso preparado pasando éste de la cola de procesos preparados


a la de suspendidos preparados.
Suspensión de un proceso en ejecución, con lo cual el proceso pasa a la cola de
suspendidos preparados.
Desbloqueo de un proceso suspendido bloqueado por desaparecer la causa que
impedía el ser activado de nuevo.
 

Operaciones sobre procesos  


Los sistemas operativos actuales poseen una serie de funciones cuyo objetivo es el de la
manipulación de los procesos. Las operaciones que se pueden hacer sobre un proceso son las
siguientes:
 

 
         Crear el proceso.  Se produce con la orden de ejecución del programa y suele
necesitar varios argumentos, como el nombre y la prioridad del proceso. Aparece en
este momento el PCB, que será insertado en la cola de procesos preparados.

La creación de un proceso puede ser de dos tipos:


 
          Jerárquica. En ella, cada proceso que se crea es hijo del proceso creador y hereda el
entorno de ejecución de su padre. El primer proceso que ejecuta un usuario será hijo del
intérprete de comandos con el que interactúa.

           No jerárquica.  Cada proceso creado por otro proceso se ejecuta independientemente de
su creador con un entorno diferente. Es un tipo de creación que no suele darse en los sistemas
operativos actuales.

        Destruir un proceso. Se trata de la orden de eliminación del proceso con la cual el
sistema operativo destruye su PCB.

        Suspender un proceso. Es un proceso de alta prioridad que paraliza un proceso


que puede ser reanudado posteriormente. Suele utilizarse en ocasiones de mal
funcionamiento o sobrecarga del sistema.

        Reanudar un proceso. Trata de activar un proceso que a sido previamente


suspendido.

 
       Cambiar la prioridad de un proceso.

 
       Temporizar la ejecución de un proceso. Hace que un determinado proceso se
ejecute cada cierto tiempo (segundos, minutos, horas...) por etapas de una sola vez,
pero transcurrido un periodo de tiempo fijo.

 
       Despertar un proceso.  Es una forma de desbloquear un proceso que habrá sido
bloqueado previamente por temporización o cualquier otra causa.

Prioridades  
Todo proceso por sus características e importancia lleva aparejadas unas determinadas
necesidades de ejecución en cuanto a urgencia y asignación de recursos.
Las prioridades según los sistemas operativos se pueden clasificar del siguiente modo:
 

 
         Asignadas por el sistema operativo. Se trata de prioridades que son asignadas a
un proceso en el momento de comenzar su ejecución y dependen fundamentalmente
de los privilegios de su propietario y del modo de ejecución.

 
         Asignadas por el propietario.

 
         Estáticas.

 
         Dinámicas.

 
El Núcleo del Sistema Operativo  
Todas las operaciones en las que participan procesos son controladas por la parte del sistema
operativo denominada núcleo (nucleus, core o kernel, en inglés). El núcleo normalmente
representa sólo una pequeña parte de lo que por lo general se piensa que es todo el sistema
operativo, pero es tal vez el código que más se utiliza. Por esta razón, el núcleo reside por lo
regular en la memoria principal, mientras que otras partes del sistema operativo son cargadas en la
memoria principal sólo cuando se necesitan.
 
Los núcleos se diseñan para realizar “el mínimo” posible de procesamiento en cada interrupción y
dejar que el resto lo realice el proceso apropiado del sistema, que puede operar mientras el núcleo
se habilita para atender otras interrupciones.
 
 

Resumen de las Funciones del Núcleo  


El núcleo de un sistema operativo normalmente contiene el código necesario para realizar las
siguientes funciones:

 
         Manejo de interrupciones.
 
         Creación y destrucción de procesos.
 
         Cambio de estado de los procesos.
 
         Despacho.
 
         Suspensión y reanudación de procesos.
 
         Sincronización de procesos.
 
         Comunicación entre procesos.
 
         Manipulación de los bloques de control de procesos.
 
         Apoyo para las actividades de entrada/salida.
 
         Apoyo para asignación y liberación 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.

Estructura Jerárquica del Sistema  

Un computador que ofrece no sólo su lenguaje de máquina como apoyo al sistema operativo y a
sus usuarios, sino también un grupo de funciones adicionales proporcionadas por el núcleo.
 
Arriba del núcleo, en jerarquía, se encuentran los diferentes procesos del sistema operativo que
trabajan en apoyo de los procesos de usuario, que se encargan en la práctica de supervisar las
operaciones de entrada/salida de los dispositivos del sistema para beneficio de los diversos
usuarios.
 
En los diseños en que el núcleo está distribuido en varios niveles de jerarquía, elegir qué función
colocar en cada nivel requiere un análisis cuidadoso. En tales diseños, con frecuencia sólo se
permite hacer llamadas a funciones situadas jerárquicamente por debajo de quien hace la llamada;
es decir, cada nivel sólo puede llamar a las funciones que están colocadas en el nivel inmediato
inferior.
 
Migración del núcleo a micro código  
 
En los sistemas más recientes existe la tendencia de colocar gran parte del núcleo en micro
código. Esta es una técnica de seguridad efectiva, pues impide la alteración del núcleo y con una
cuidadosa codificación se puede lograr que se ejecuten más eficientemente las funciones del
núcleo.
El bloque de control de proceso (PCB) es una estructura de datos que contiene la información que
permite al sistema operativo localizar toda la información importante sobre un proceso, incluyendo
su estado actual, identificación, prioridad, memoria, recursos, valores de los registros, etcétera. El
PCB define el proceso al sistema operativo.

Los sistemas operativos contienen mecanismos para realizar diversas operaciones sobre los
procesos, como crear, destruir, reanudar, cambiar la prioridad, bloquear, despertar y despachar.
 
 
 

El kernel de UNIX  
UNIX es el kernel (núcleo) de un sistema operativo de tiempo compartido. El núcleo del sistema es
un programa que siempre está residente en memoria y entre otros, brinda los siguientes servicios:
 

          Controla los recursos del hardware


          Controla los dispositivos periféricos (discos, terminales, impresoras, etc.)
          Permite a distintos usuarios compartir recursos y ejecutar sus programas.
          Proporciona un sistema de archivos que administra el almacenamiento de
información (programas, datos, documentos, etc.)
En un sentido más amplio, UNIX abarca también un conjunto de programas estándar, como
pueden ser:
 
           Compilador de lenguaje C (cc).
           Editor de texto (vi).
           Intérprete de órdenes (sh, ksh, csh)
           Programas de gestión de archivos y directorios (cp, rm, mv, mkdir, rmdir, etc. )
 
 

Los niveles dentro de la arquitectura de


UNIX  
 
El nivel más interno no pertenece realmente al sistema operativo, si no que es el hardware, la
máquina sobre la que está implementado el sistema y cuyos recursos queremos gestionar.
Directamente en contacto con el hardware se encuentra el kernel del sistema. Este kernel está
escrito el lenguaje C en su mayor parte, aunque coexistiendo con código ensamblador.
En el tercer nivel de nuestra estructura se encuentran programas estándar de cualquier sistema
UNIX (vi, grep, sh, who, etc.) y programas generados por el usuario (a.out programa ejecutable
estándar creado por defecto por el compilador cc, o cualquier otro programa ejecutable). Hay que
hacer notar que estos programas del tercer nivel nunca van a actuar sobre el hardware de forma
directa. Por lo tanto, debe existir algún mecanismo que nos permita indicarle al kernel que
necesitamos operar sobre un determinado recurso hardware. Este mecanismo es lo que se conoce
como llamadas al sistema (system calls).
Por encima del tercer nivel tenemos aplicaciones que se sirven de otros programas ya creados
para llevar a cabo su función. Estas aplicaciones no se comunican directamente con el kernel.

 
 
 

Los bloques funcionales básicos de que consta el kernel de UNIX  


Las llamadas al sistema y su librería asociada representan la frontera entre los programas del
usuario y el kernel. La librería asociada a las system calls es el mecanismo mediante el cual
podemos invocar una system call desde un programa C y se encuentra en el fichero /usr/lib/libc.a.

Las llamadas al sistema se ejecutan en modo kernel (para muchos microprocesadores, modo
supervisor) y para entar en este modo hay que ejecutar una sentencia en código máquina conocida
como trap (o interrupción software)

 El kernel  está dividido en dos subsistemas principales: subsistema de ficheros y subsistema de
control de procesos.

El subsistema de ficheros controla los recursos del sistema de archivos y tiene funciones como
reservar espacio para los archivos, administrar el espacio libre, controlar el acceso a los archivos,
permitir el intercambio de datos entre los archivos y el usuario, etc.

El subsistema de control de procesos es el responsable de la planificación de los procesos


(scheduler), su sincronización, comunicación entre los mismos (IPC – inter process comunication) y
del control de la memoria principal.

Al módulo gestor de memoria (swapping) se le conoce también como swapper.

El planificador o scheduler se encarga de gestionar el tiempo de CPU que tiene asignado cada
proceso. El  scheduler entra en ejecución cada cuanto de tiempo y decide si el proceso actual tiene
derecho a seguir ejecutándose (esto depende de la prioridad y de sus privilegios).
La comunicación entre procesos puede realizarse de forma asíncrona (señales) o síncrona (colas
de mensajes, semáforos).

Por último, el módulo de control del hardware es la parte del kernel encargada del manejo de las
interrupciones y de la comunicación con la máquina. Los dispositivos pueden interrumpir a la CPU
mientras está ejecutando un proceso. Si esto ocurre, el kernel debe reanudar la ejecución del
proceso después de atender a la interrupción. Las interrupciones no son atendidas por procesos,
sino por funciones especiales, codificadas en el kernel, que son invocadas durante la ejecución de
cualquier proceso.

2.3 Interrupciones de Entrada y Salida  


Son iniciadas por hardware de entrada y salida. Estas interrupciones indican a la UCP el
cambio de estado de un canal o dispositivo. Las interrupciones de E/S se producen cuando
finaliza una operación de E/S o cuando un dispositivo pasa al estado listo.
 

2.4 Interrupciones del procesador  

 
Una interrupción es un evento que altera la secuencia en que el procesador ejecuta las
instrucciones. La interrupción es generada por el hardware del sistema de cómputo. Cuando ocurre
una interrupción:
 

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

          El sistema operativo guarda el estado del proceso interrumpido. En muchos


sistemas esta información se guarda en el bloque de control de proceso interrumpido.

 
         El sistema operativo analiza la interrupción y transfiere el control a la rutina
apropiada para atenderla; en muchos sistemas actuales el hardware se encarga de
esto automáticamente.

 
         La rutina del manejador de interrupciones procesa la interrupción.

 
         Se restablece el estado del proceso interrumpido (o del “siguiente proceso”).

 
         Se ejecuta el proceso interrumpido (o el “siguiente proceso”).

Una interrupción puede ser iniciada específicamente por un proceso en ejecución (en cuyo caso se
suele denominar trampa (trap), y se dice que está sincronizada con la operación del proceso) o
puede ser causada por algún evento que puede estar relacionado o no con el proceso en ejecución
(en cuyo caso se dice que es asíncrona con la operación del proceso).
Los sistemas orientados hacia las interrupciones pueden sobrecargarse. Si estás llegan con mucha
frecuencia, el sistema no será capaz de atenderlas. En algunos sistemas orientados hacia el
teclado, cada tecla presionada almacena en la memoria un código de un byte y genera un
interrupción para informar a la UCP que un carácter está listo para ser procesado. Si la UCP no
puede procesar el dato antes de que se presione la siguiente tecla, se pierde el primer carácter.

Clases de Interrupciones  
Existen seis clases de interrupciones:
 

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

          Interrupciones de E/S.  Son iniciadas por hardware de entrada y salida. Estas
interrupciones indican a la UCP el cambio de estado de un canal o dispositivo. Las
interrupciones de E/S se producen cuando finaliza una operación de E/S o cuando un
dispositivo pasa al estado listo.

          Interrupciones externas. Son causadas por diversos eventos, incluyendo la


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

 
         Interrupciones de Reinicio. Se produce cuando se presiona el botón de reinicio
de la PC o cuando llega de otro procesador una instrucción de reinicio en un sistema
de multiprocesamiento

          Interrupciones de verificación del programa. Son causadas por una amplia
clase de problemas que pueden ocurrir cuando se ejecutan las instrucciones en
lenguaje máquina de un programa. Dichos problemas incluyen la división entre cero, el
exceso o defecto de los números que pueden ser manejados por las operaciones
aritmeticas, el intento de hacer referencia a una localidad de memoria que esté fuera
de los límites de la memoria real. Muchos sistemas ofrecen a los usuarios la opción de
especificar las rutinas que deben ejecutarse cuando ocurra una interrupción de
verificación del programa.

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


funcionamiento del hardware.

<![endif]>

3. INTRODUCCIÓN A LOS PROCESOS


Todas las computadoras modernas hacen varias cosas al mismo tiempo. A la vez que
ejecuta un programa del usuario, una computadora puede leer de un disco e imprimir en
una terminal o impresora. En un sistema de multiprogramación, la CPU también alterna de
programa en programa, ejecutando cada uno de ellos por decenas o cientos de
milisegundos. Aunque, en sentido estricto, la CPU ejecuta en cierto instante un solo
programa, durante un segundo puede trabajar con varios de ellos, lo que da una apariencia
de paralelismo. A veces, las personas hablan de pseudoparalelismo para indicar este
rápido intercambio de los programas en la CPU, para distinguirlo del paralelismo real del
hardware, donde se hacen cálculos en la CPU a la vez que operan uno o más dispositivos
de entrada/salida. Es difícil mantener un registro de las distintas actividades paralelas. Por
lo tanto, los diseñadores del sistema operativo han desarrollado con el tiempo un modelo
que facilita el uso del paralelismo.

3.1 CONCEPTO DE PROCESO.

El término "PROCESO", fue utilizado por primera vez por los diseñadores del
sistema Multics en los años 60’s. Desde entonces, el término proceso , utilizado a
veces como sinónimo de tarea, ha tenido muchas definiciones . A continuación se
presentan algunas:
Un programa en ejecución

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

Aunque se han dado muchas otras definiciones, no hay una definición universalmente aceptada,
pero el concepto de "Programa en ejecución" parece ser el que se utiliza con mas frecuencia. Un
programa es una entidad inanimada; sólo cuando un procesador le "infunde vida" se convierte
en la entidad "activa" que se denomina proceso.
Un proceso pasa por una serie de datos discretos. Se dice que  un proceso se está ejecutando
(estado de ejecución), si tiene asignada la UCP.Se dice que un proceso está listo (estado listo)si
pudiera utilizar una UCP en caso de haber una disponible. Un proceso está bloqueado (estado
bloqueado) si está esperando que suceda algún evento antes de poder seguir la ejecución.

 
3.2 Concurrencia y Secuenciabilidad

3.2.1 Concepto de Concurrencia

3.2.1.1 Beneficios del uso de la concurrencia

3.2.1.2 Desventajas de la concurrencia

3.2.2 La Sincronización

3.2.1 CONCEPTO DE CONCURRENCIA.

Los procesos son concurrentes si existen simultáneamente. Los procesos concurrentes pueden
funcionar en forma totalmente independiente unos de otros, o pueden ser asíncronos, lo cual
significa que en ocasiones requieren cierta sincronización o cooperación.

Cuando dos o más procesos llegan al mismo tiempo a ejecutarse, se dice que se ha presentado
una concurrencia de procesos. Es importante mencionar que para que dos o más procesos sean
concurrentes , es necesario que tengan alguna relación entre ellos como puede ser la
cooperación para un determinado trabajo o el uso de información o recursos compartidos, por
ejemplo: en un sistema de un procesador , la multiprogramación es una condición 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 sí ya sea para utilizar información en común o
para cualquier otra cosa.

3.2.1.1 BENEFICIOS DE LA CONCURRENCIA

 
        Trata de evitar los tiempos muertos de la UCP
 
        Comparte y optimiza el uso de recursos
 
        Permite la modularidad en las diferentes etapas del proceso
 
        Acelera los cálculos
 
        ·        Da mayor comodidad

3.2.1.2 DESVENTAJAS DE LA CONCURRENCIA

Inanición e interrupción de procesos


Ocurrencia de bloqueos
Que dos o más procesos requieran el mismo recurso (no apropiativo)
 

3.2.2 LA SINCRONIZACION

En muchos casos, los procesos se reúnen para realizar tareas en conjunto, a este tipo de relación se
le llama procesos cooperativos. Para lograr la comunicación, los procesos deben sincronizarse, de
no ser así pueden ocurrir problemas no deseados. La sincronización es la transmisión y recepción
de señales que tiene por objeto llevar a cabo el trabajo de un grupo de procesos cooperativos. Es la
coordinación y cooperación de un conjunto de procesos para asegurar la comparación de recursos
de cómputo. La sincronización entre procesos es necesaria para prevenir y/o corregir errores de
sincronización debidos al acceso concurrente a recursos compartidos, tales como estructuras de
datos o dispositivos de E/S, de procesos contendientes. La sincronización entre procesos también
permite intercambiar señales de tiempo (ARRANQUE/PARADA) entre procesos cooperantes para
garantizar las relaciones específicas de precedencia impuestas por el problema que se resuelve. Sin
una sincronización adecuada entre procesos, la actualización de variables compartidas puede
inducir a errores de tiempo relacionados con la concurrencia que son con frecuencia difíciles 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 aproximación para resolver este problema es realizar actualizaciones de variables compartidas
de manera mutuamente exclusiva. Se pueden mejorar permitiendo que a lo más un proceso entre a
la vez en la sección crítica de código en la que se actualiza una variable compartida o estructura de
datos en particular.

3.3 REGIONES CRITICAS.

¿Cómo evitar las condiciones de competencia? La clave para evitar los problemas en ésta y otras
situaciones relacionadas con la memoria compartida, archivos compartidos y cualquier otra cosa
compartida, es determinar una forma de prohibir que más de algún proceso lea o escriba en los
datos compartidos a la vez. En otras palabras, lo que necesitamos es la exclusión mutua (una forma
de garantizar que si un proceso utiliza una variable o archivos compartidos, los demás procesos no
puedan utilizarlos).
El problema de evitar las condiciones de competencia también se puede formular de manera
abstracta. Durante cierta parte del tiempo, un proceso está ocupado realizando cálculos internos y
otras labores que no conducen a condiciones de competencia. Sin embargo, en algunas ocasiones
un proceso puede tener acceso a la memoria compartida de archivos o realizando labores críticas
que pueden llevar a conflictos. Esa parte del programa, en la cual se tiene acceso a la memoria
compartida se llama la Sección o Región Crítica.
Aunque esta condición evita los conflictos, no es suficiente para que los procesos paralelos
cooperen en forma correcta y usen de modo eficaz los datos compartidos.
La exclusión mutua debe ponerse en práctica, sólo cuando los procesos obtienen acceso a datos
compartidos modificables; cuando los procesos realizan operaciones que no entran en conflictos con
otras, deben permitirse que procedan concurrentemente.
Cuando un proceso obtiene acceso a datos compartidos modificables, se dice que se encuentra en
una sección crítica. Para evitar alguna clase de problemas se debe asegurar que cuando un proceso
se encuentre en una sección crítica, los demás procesos no pueden entrar a sus propias secciones
críticas.
 
 
 
 
 
 
 
 
Sección Critica
Archivo De Datos
Proceso A
Proceso B
 

 
 
Si un proceso se encuentra en su sección crítica, otros procesos pueden seguir ejecutándose
fuera de sus secciones críticas. Cuando un proceso abandona su región, otro proceso que
esperaba entrar en su propia sección podrá hacerlo. El problema de la programación concurrente
está en que se cumpla la exclusión mutua.
Cuando se encuentra en una región crítica se está hablando de un estado especial que se
concede a un proceso. El proceso tiene acceso exclusivo a los datos compartidos y los demás
procesos que requieren acceso a esos datos y en ese momento deben esperar; por esto las
secciones críticas deben ejecutarse tan rápido como sea posible. Un proceso no se debe bloquear
dentro de su propia sección crítica y estas deben codificarse con mucho cuidado.
Si un proceso de una sección crítica termina, el S.O. al realizar su mantenimiento de
terminaciones, debe liberar la exclusión mutua para que otros procesos puedan entrar en sus
regiones críticas.
Necesitamos 4 condiciones para poder obtener una buena solución:

1. 1.  Dos procesos no deben encontrarse al mismo tiempo dentro de sus secciones críticas .
2. 2.  No se deben hacer hipótesis sobre la velocidad o el número de UCP.
3. 3.  Ninguno de los procesos que estén en ejecución fuera de su sección crítica puede bloquear a
otros procesos.
4. 4.  Ningún proceso debe esperar eternamente para entrar a su sección crítica

3.4 EXCLUSIÓN MUTUA

Considérese un sistema con muchas terminales en tiempo compartido. Supóngase que los
usuarios terminan con un retorno del carro cada línea que introducen en el sistema, que es
necesario vigilar continuamente el número total de líneas introducidas por los usuarios desde que
comenzó el día y que cada terminal de usuario está vigilada por un proceso diferente. Cada vez
que uno de estos procesos recibe una línea desde una terminal de usuario, suma a una variable
global compartida por todo el sistema, LÍNEAS_INTRO. Considérese que sucedería si dos
procesos tratan de incrementar LÍNEAS_INTRO simultáneamente. Supóngase que cada proceso
tiene su propia copia de código
CARGAR LÍNEAS_INTRO
SUMAR 1
ALMACENAR LÍNEAS_INTRO
Supóngase que LÍNEAS_INTRO tiene en este momento el valor 21687. Ahora supóngase que el
primer proceso ejecuta las instrucciones CARGAR y SUMAR, dejando por tanto el valor 21688 en
un acumulador. Después el proceso pierde el procesador (por haber expirado un cuanto) y el
segundo proceso se apropia de él. El segundo proceso ejecuta las tres instrucciones y deja el
valor de 21688 en LINEAS_INTRO. Debido al acceso no controlado a la variable compartida
LINEAS_INTRO, el sistema ha perdido de hecho el rastro de una de las líneas; el total correcto
debería ser 21689. ¿Comó evitar las condiciones de competencia?
 

3.5 SINCRONIZACIÓN POR SEMÁFOROS

En 1965, E.W. Dijkstra sugirió el uso de una variable entera para contar el número de despertares
almacenados para su uso posterior.
En su propuesta se presentó un nuevo tipo de variable, llamada Semáforo. Un semáforo puede
tener el valor 0, lo que indica que no existen despertares almacenados; o bien algún valor positivo
si están pendientes uno o más despertares.
Dijkstra, propuso dos operaciones, DOWN y UP (generalizaciones de SLEEP y WAKEUP,
respectivamente). La operación Down verifica si el valor de un semáforo es mayor que 0. En este
caso, decrementa el valor (es decir, utiliza un despertar almacenado) y continúa. Si el valor es
cero, el proceso se va a dormir. La verificación y modificación del valor, así como la posibilidad de
irse a dormir se realiza en conjunto, como una sola e indivisible acción atómica. Se garantiza que
al iniciar una operación con un semáforo, ningún otro proceso puede tener acceso a semáforo
hasta que la operación termine o se bloquee. Esta atomicidad es absolutamente esencial para
resolver los problemas de sincronización y evitar condiciones de competencia.
La operación UP incrementa el valor del semáforo correspondiente. Si uno o más procesos
dormían en ese semáforo y no podían completar una operación Down anterior, el sistema elige
alguno de ellos (por ejemplo, en forma aleatoria) y se le permite terminar Down. Así, después de
un UP en un semáforo con procesos durmiendo, el semáforo seguirá con valor cero, pero habrá un
menor número de procesos durmiendo. La operación de incremento del semáforo y despertar de
un proceso también es indivisible. Ningún proceso llega a bloquear mediante un UP.
Un semáforo es una variable protegida, cuyo valor sólo puede ser leído y alterado mediante las
operaciones P y V, y una operación de asignación de valores iniciales y (Inicia semáforo).
 

 
 
 
 
 
 
TIPOS DE SEMÁFOROS
SEMÁFOROS BINARIOS (VALORES DE 1,0)
SEMÁFOROS CONTADORES (Valores enteros no negativos)
 
Operación P (Sobre el semáforo S)
si S>0
entonces S:=S-1;
sino (esperar S)
 
Operación V (Sobre el semáforo S)
si (Uno o más procesos esperan S)
entonces (dejar que prosiga uno de esos procesos)
sino S:=S+1
La exclusión mutua sobre el semáforo S se implanta dentro de P(S) y V(S). Si
varios procesos desean ejecutar una operación P(S) de manera simultánea , sólo
se podrá ejecutar uno de ellos, pero esto no quiere decir que se aplazarán en
forma indefinida.

 
  5.1 Planificación
    En épocas pasadas de los sistemas de procesamiento por lotes, con una entrada en forma de
imágenes de tarjetas en una cinta magnética, el algoritmo de planificación era sencillo: sólo había
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 más complejo.
En forma invariable, existían varios usuarios en espera de servicio y podían existir también 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 electrónico, que a menudo se
ejecuta todo el tiempo para enviar o recibir correo o noticias.
Cuando más de un proceso es ejecutable, el Sistema Operativo debe decidir cual de ellos deberá
ejecutarse primero. Hay que tener una planificación de los procesos que quieren ejecutarse en el
sistema. La planificación es una función primordial del Sistema Operativo. La mayoría de los
recursos, si no es que todos, se planifican antes de que se utilicen.
 
La asignación de procesadores físicos a los procesos hace posible que éstos realicen su trabajo, y
tal asignación es un problema complejo manejado por el Sistema Operativo.
 
En este trabajo se describe el concepto de planificación, así como sus principales objetivos.
 

 CONCEPTO DE PLANIFICACIÓN

 
La planificación es una función fundamental del Sistema Operativo. La mayor parte de los recursos
se planifican antes de que se usen. Desde luego, la UCP es uno de los principales recursos de la
computadora, por lo que su planificación es importante para el diseño de los Sistemas Operativos.
 
 
Se conoce como planificación al estudio de los problemas: ¿cuándo asignar procesadores? y ¿a
cuáles procesos asignarlos?.
 
La planificación se refiere a un conjunto de políticas y mecanismos que poseen los actuales
Sistemas Operativos y por los que se rige el orden en que se completa el trabajo que hay que
realizar por los procesos.
 
En Windows NT los subprocesos tienen asignadas prioridades. El rango de prioridades va de 1 a
31, siendo 31 la prioridad mayor. La UCP trata de manera idéntica a todos los subprocesos de la
misma prioridad. Esto es simplemente asigna el primer subproceso de prioridad 31 a una UCP, y
una vez que su intervalo de tiempo ha finalizado asigna el siguiente subproceso de prioridad 31 a
la UCP. Cuando todos los subprocesos de prioridad 31 han tenido un intervalo de tiempo de la
UCP, el kernel de Windows NT asigna de nuevo el primer subproceso de prioridad 31 a la UCP.
Como se ve, si siempre existe un subproceso de prioridad inferior de 31 nunca se ejecutará.
 

 OBJETIVOS DE LA PLANIFICACIÓN

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

          Justicia. La planificación debe ser lo más justa posible con todos los procesos, sin
favorecer a unos y perjudicar a otros.  

          Máxima capacidad de ejecución. Debe dar un servicio eficiente para que todos los
trabajos se realicen lo más rápidamente posible. Esto se puede lograr disminuyendo el
número de cambios de proceso.  

          Máximo número de usuarios interactivos. En los sistemas de tiempo compartido se


tratará de que puedan estar trabajando el mayor número de usuarios al mismo tiempo.  
 
         Predecibilidad. La planificación debe realizarse de tal forma que en todo momento
pueda saberse como será su ejecución.  

          Minimización de la sobrecarga. La computadora debe tener poca sobrecarga ya que


ésta 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 estén ocupados equitativamente el mayor tiempo posible.  

 
         Seguridad de las prioridades. Si un proceso tiene mayor prioridad que otro, éste debe
ejecutarse más rápidamente.  

 
         Evitar la postergación indefinida. Esto se logra aumentando la prioridad de un proceso
mientras espere por un recurso. La prioridad llegará a ser tan alta que al proceso le será
asignado el recurso que pidió.

 5.2 Planificadores

 
    El planificador o scheduler es un componente del Sistema Operativo que se encarga de elegirla
tarea siguiente que hay que admitir en el sistema y el proceso siguiente que hay que ejecutar.
 
La finalidad del planificador es asignar procesos para que sean ejecutados por el procesador o
procesadores con el fin de obtener mejores tiempos de respuesta, mayor productividad o
rendimiento y eficiencia del procesador. En la mayoría de los sistemas esta actividad de
planificación se realiza en tres tipos de planificadores que se explican a continuación.
 
En UNÍX, las tareas de planificación las resuelve el scheduler (planificador) mediante un
mecanismo de prioridades. Cada proceso tiene asignada una prioridad. Las prioridades de los
procesos de los usuarios son siempre menores que la prioridad más pequeña de un proceso del
sistema.
 
El componente que se encarga de administrar los procesos de Windows 95 trabaja con dos
modelos de Multitarea:

 
         Multitarea Cooperativa

 
         La Multitarea con Derecho Preferente

 Mediante el método de Multitarea Cooperativa, el Sistema Operativo deja que sea el proceso
quien compruebe la cola de procesos que quieren ejecutarse y que cada proceso, deje tiempo de
UCP al resto de aplicaciones que se están ejecutando. Puede ocurrir que el programa que esta en
ejecución, no compruebe periódicamente la cola y se apodere completamente de la UCP, con lo
cual ningún proceso responderá hasta que termine el que está en ejecución.
 
En la Multitarea con Derecho Preferente, es el Planificador de Procesos quien quita o da el control
a un proceso y además determina el tiempo que dicho proceso va a ocupar la UCP. El cambio de
un proceso a otro, generalmente está dado a un suceso o evento (un clic del ratón, minimizar una
ventana). En la Multitarea con Derecho, el Planificador asigna unas prioridades a los procesos que
determinan la forma de ejecución, sin embargo estas prioridades varían según avanza la ejecución,
ya que, en caso contrario, cuando un proceso de máxima prioridad tomase la UCP nunca la
soltaría.
 
Windows 95 solo utiliza la Multitarea Cooperativa, con las aplicaciones de 16 bits. Todas las
aplicaciones de 32 bits se ejecutan en Multitarea con Derecho Preferente.
Planificador a largo plazo (Planificador de trabajos)
 
Cada vez que un usuario inicia la ejecución de un programa, el planificador a largo plazo recibe la
orden de ejecución, crea el proceso correspondiente y lo pasa al planificador a corto plazo,
colocándose en la cola de procesos listos. Este planificador es, por tanto, el encargado de crear los
procesos. Cada vez que termina un trabajo, el planificador tomara la decisión de añadir uno o mas
trabajos nuevos.
 
Planificador a mediano plazo (planificador de intercambio)
 
Este planificador decide si un proceso que esta en estado bloqueado o suspendido debe ser
retirado de la memoria temporalmente. Posteriormente, cuando el sistema se encuentra mas
descargado, devolverá dicho proceso a la memoria y al estado de ejecución. Esta técnica se
conoce con el nombre de intercambio (swapping). Este nivel, por tanto, gestiona los procesos
suspendidos en espera de algún recurso no disponible en el momento de la suspensión.
 
Planificador a corto plazo (Planificador del procesador)
 
El planificador acorto plazo también conocido como despachador, es el encargado de decidir como
y cuando tendrá acceso al procesador un proceso que esta listo para utilizarlo. Solo considera losa
procesos que están en memoria. Ha de ser rápido y eficiente ya que se ejecuta muy a menudo.
Este nivel, es donde se debe de dar un buen servicio a los procesos para que el usuario no
perciba, o lo haga un pequeño grado, que esta compitiendo por el procesador junto con otros
usuarios.
 
Planificación de Procesos
Cuando más de un proceso es ejecutable, el Sistema Operativo debe decidir cual de ellos debe
ejecutarse en primer termino. Esa parte del sistema operativo que debe de llevar a cabo esa
decisión se llama planificador y el algoritmo que utiliza se llama algoritmo de planificación.
 
El planificador intenta conseguir con su administración de procesos lo siguiente:
 
Equidad: Garantizar que cada proceso obtenga su proporción justa de la CPU. Es decir, que
ningún proceso llegue a apoderarse por completo de la CPU.
 
Eficiencia: Mantener ocupada la CPU al 100 %, esto con el fin de evitar los tiempos ociosos que
pueda tener el CPU.
 
Rendimiento: Maximizar el número de tareas procesadas por hora, es decir, que el CPU pueda
atender todos y cada una de las peticiones que le fueron hechas.
Para garantizar que ningún proceso se ejecute un tiempo excesivo, casi todas las computadoras
tienen un cronómetro electrónico o un reloj incluido, que provoca una interrupción en forma
periódica. En cada interrupción del reloj, el sistema operativo logra ejecutarse y decidir si el
proceso que se ejecuta en ese momento tiene permiso de continuar o si tiene el tiempo suficiente
en la CPU por el momento, para después suspenderlo para que otro proceso utilice la CPU.
 

 
         Algunos algoritmos específicos de planificación
 
Planificación Round Robin
 
Uno de los más antiguos, sencillo, justo y de uso más amplio es el round robin. Cada proceso tiene
asignado un intervalo de tiempo de ejecución, llamado su quantum. Si el proceso en ejecución al
final de su quantum, otro proceso se apropia de la CPU. Si el proceso esta bloqueado o a
terminado antes de consumir su quantum, se altera el uso de la CPU. El Roun Robin es muy fácil
de implantar. Todo lo que necesita el planificador es mantener una lista de procesos ejecutables.
Cuando el quantum de un proceso se consume, se le coloca al final de la lista, como se muestra a
continuación.

 
         Planificación Round Robin.

 
(a) La lista de procesos ejecutables.
(b) La lista de procesos ejecutables después de agotarse el quantum B.
 
El único aspecto interesante del round robin es la longitud del quantum. La alternancia entre un
proceso y otro necesita cierta cantidad de tiempo para administración.

 
         Planificación por prioridades

 
La idea fundamental es directa: cada proceso tiene asociada una prioridad y el proceso ejecutable
con máxima prioridad es el que tiene el permiso de ejecución.
 
Para evitar que los procesos de alta prioridad se ejecuten en forma indefinida, el planificador puede
disminuir la prioridad del proceso en ejecución en cada interrupción de reloj. Si la prioridad del
siguiente proceso con alta prioridad es mayor, se alternan los procesos.
Las prioridades se pueden asignar en forma estática o dinámica.

  
 5.3 ALGORITMO DE PLANIFICACIÓN FIFO (First Input – First Output)

Este algoritmo a su vez es llamado First Come - First Served (Primero en llegar- Primero en servir).
 
Tal vez la disciplina más simple de planificación 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 UCP, 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 pequeñas en
los tiempos de respuesta y por lo tanto es más predecible que los otros esquemas. No es útil en la
planificación 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 está incorporado en otros sistemas. Por ejemplo, muchos esquemas de planificación
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 apropiación, y que consiste en atender a los procesos por estricto
orden de llegada a la lista de procesos listos. Cada procesos se ejecuta hasta que termina, o hasta
que hace una llamada bloqueante (de E/S). Se trata de una política muy simple y sencilla de llevar
a la práctica, pero muy pobre en cuanto a su comportamiento.
 
Las características principales de este algoritmo son las siguientes:
 

 
         No es apropiativa
 
         Es justa, aunque los procesos largos hacen esperar mucho a los cortos.
 
         Es una política predecible
 
         El tiempo promedio de servicio es muy variable ya que está en función del número de
procesos y la duración promedio que tenga

 
Proceso Tiempo de
UCP
P1 24

P2 3

P3 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
ejecución 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 último el tercer proceso esperará 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 ejecutaría de inmediato, P3 esperaría lo que tarde en
ejecutarse P2 (3 milisegundos) y P1 esperaría 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.
 
5.4 EL TRABAJO MAS CORTO PRIMERO
Llamado también SJF (Shortest Job First). Este algoritmo de planificación reduce la preferencia en
favor de los procesos más largos dando más importancia a los procesos cortos, como se muestra
en la figura.
 
Esta política funciona otorgándole el procesador al proceso más corto. En general, esta política
mejora el funcionamiento del sistema en términos del tiempo de respuesta, pero gran cambia
demasiado cuando se trata de procesos largos.
  PROCESO DURACIÓN  
  P1 7  

P2 4

P3 1

P4 4
 
P3 0

P2 1

P4 5

P1 9

Total 16

 
Media del tiempo de espera: (9+1+0+5)/4=3.75
 
En la figura anterior tenemos cuatro procesos (P1, P2, P3, y P4) que quieren ejecutarse. Los
procesos tienen una duración de 7, 4, 1 y 4 milisegundos respectivamente. Como P3 es el proceso
más corto, será el primero ejecutarse. Como P2 y P4 tienen la misma duración, el que se ejecutará
será el que llegó primero, en este caso será P2 el que se ejecute primero y después P4. Por último
se ejecutará el proceso P1. Cada uno de los procesos esperará lo que duren en ejecutarse
anteriores a él, con excepción del primer proceso. El tiempo promedio de espera es de 3.75
milisegundos, lo que representa un promedio de espera aceptable.
Una de las dificultades con este método es que debe saber el tiempo que cada proceso va a utilizar
el procesador para realizar su trabajo, lo cual es una tarea difícil, pero es posible a través de
diversos métodos como pueden ser la información dada por el propio usuario, por el propio
programa.
 
Las características de este algoritmo son las siguientes:  

 El tiempo de espera aumenta de acuerdo con el tamaño de los procesos, pero el tiempo
promedio de espera con respecto a otros algoritmos es óptimo.
 Es poco predecible.
 No es justo con los procesos largos.
 Tiene buen tiempo de servicio.
 Resulta difícil de llevarse a la práctica por los datos que necesita para realizarse la
planificación.

 
Su característica principal es que cuando se activa el planificador, éste elige el proceso de menor
duración. Es decir, introduce una noción de prioridad entre procesos.
La ventaja que presenta este algoritmo sobre el algoritmo FIFO es que minimiza el tiempo de
finalización promedio, como puede verse en el siguiente ejemplo:
 
Ejemplo: Supongamos que en un momento dado existen tres procesos listos R1, R2 y R3, sus
tiempos de ejecución respectivos son 24, 3 y 3 ms. El proceso R1 es la que lleva más tiempo
ejecutable, seguido del proceso al que pertenece R2 y del de R3. Veamos el tiempo medio de
finalización (F) de los procesos aplicando FIFO y SJF: 

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

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

 
Se puede demostrar que este algoritmo es el óptimo. Para ello, consideremos el caso de cuatro
procesos, con tiempos de ejecución de a, b, c y d. El primer procesos termina en el tiempo a, la
segunda termina en el tiempo a+b, etc. El tiempo promedio de finalización es (4a+3b+2c+d)/4. Es
evidente que a contribuye más al promedio que los demás tiempos, por lo que debe ser el proceso
más corto, b la siguiente, y así sucesivamente. El mismo razonamiento se aplica a un número
arbitrario de procesos.
 
No obstante, este algoritmo sólo es óptimo cuando se tienen simultáneamente todos los procesos.
Como contraejemplo, considérense cinco procesos desde A hasta E, con tiempo se ejecución de 2,
4, 1, 1 y 1 respectivamente. Sus tiempos de llegada son 0, 0, 3, 3 y 3. Primero se dispone de A y
B, puesto que los demás procesos no han llegado aún. Con el algoritmo SJF las ejecutaríamos en
orden A, B, C, D, y E con un tiempo de finalización promedio de 4.6. Sin embargo, al ejecutarlas en
orden B, C, D, E y A se tiene un promedio de finalización de 4.4.
 

 5.5 PLANIFICACIÓN POR PRIORIDAD


A cada proceso se le asigna una prioridad, de manera que el procesador se le asignará al proceso
que tenga la mayor prioridad.
 
Las prioridades pueden ser definidas interna o externamente. En el primer caso, el Sistema
Operativo se basa en una serie de informaciones medibles para el cálculo y asignación de dichas
prioridades (tiempo necesitado del procesador, necesidad de memoria, etc ). En las externas la
asignación de prioridades se basa en la categoría que tenga el usuario.
 
PROCESO PRIORIDAD TIEMPO UCP
P1 2 7
P2 4 4
P3 1 1
P4 3 4
 
Media del tiempo de espera (1 + 12 +0 +8)/4=5.25
 
El ejemplo de la figura cuenta con los mismos datos que el de la figura, solo que ahora se le
agrego la prioridad de cada proceso que será de 2, 4, 1, 3, respectivamente (el número menor
indica la mayor prioridad). Como este algoritmo se basa en las prioridades de los procesos, el
primero en ejecutarse será el proceso p3 por ser el de mayor prioridad.
Después vendrán a ejecutarse los procesos P1, P4 y p2 en ese orden. Este orden de ejecución de
los procesos nos da un tiempo promedio de espera de 5.25 milisegundos. Como podrá observarse
el tiempo de espera es mayor que el del algoritmo anterior, ocasionado por darle mas importancia a
los procesos que tiene mayor prioridad.
 
El principal problema de este algoritmo es el bloqueo o postergación indefinida, ya que un proceso
de baja prioridad puede estar esperando su turno al grado de no ejecutarse nunca. Para evitar esta
postergación se aumenta poco a poco las prioridades de los procesos que están, a la espera de
utilizar el procesador.
 
Cualquier algoritmo que se base en esta política puede ser apropiativo o no apropiativo. En el
primer caso, un proceso puede ser retirado de! procesador si aparece otro de mayor prioridad.
 
El algoritmo SJF es un caso especial de planificación por prioridad, donde la prioridad es el tamaño
del proceso.
 

5.6 ROUND-ROBIN (RR)

 
    Volviendo a FCFS, una forma de mejorarlo es agregando apropiación de tal forma que cada
proceso no retenga el procesador por mas de un quantum o periodo de tiempo predefinido.
Consiste en darle a cada proceso en ejecución un cierto periodo de tiempo, y una vez finalizado el
tiempo, si el proceso no ha terminado, es colocado al final de la cola de procesos listo, otorgándose
el procesador al siguiente proceso. Trata de ser mas justo en cuanto a tiempos de respuesta tanto
de los procesos cortos como de los procesos largos.
 
El punto interesante es encontrar el quantum adecuado. Si es muy grande, puede caer en un
algoritmo FCFS, pero tampoco puede ser demasiado pequeño, porque entonces el costo de
cambiar de un proceso a otro es muy alto. Los valores del quantum varían entre 10 y 100
milisegundos, siendo recomendable que el 80% de los tiempos de respuesta de los procesos sean
menores que el quantum.
 
PROCESO DURACIÓN
P1 7
P2 4
P3 1
P4 4
 
Media del tiempo de espera: (9 + 7 + 4 + 9)/4 = 7.25
 
Ahora explicaremos el ejemplo de la figura 6-4. Como primer punto establecemos el quantum que
tendrán los procesos para ejecutarse que será de 2 milisegundos. Primero se ejecuta el proceso
P1 durante los 2 milisegundos que están permitidos. Como este tiempo no es suficiente para que
se ejecute por completo, pasa al final de la lista de procesos para su posterior ejecución. Luego
viene el proceso P2, al cual le sucede lo mismo que al proceso anterior, por lo que se va al final de
la lista.
 
Ahora le toca el turno al proceso P3, pero a éste si le alcanza el tiempo para ejecutarse totalmente.
Posteriormente se ejecuta P4 obteniendo los mismos resultados que los dos primeros procesos.
Ahora el turno le corresponde de nuevo al primer proceso que se ejecutó. De nuevo le sucede lo
mismo que la primera vez que se ejecutó. Le corresponde ahora el turno al segundo proceso, el
cual, en esta ocasión ya se ejecuta por completo. Lo mismo le pasa al siguiente proceso que se
ejecuta (P2).
 
Otra vez le toca ejecutarse al proceso Pi y de nuevo no se puede ejecutar por completo. Como
ahora es el único proceso que queda en el sistema, se vuelve a ejecutar de nuevo, terminando esta
vez su ejecución.
 
Las características de este algoritmo de planificación son:
 

          Baja sobrecarga si el cambio entre un proceso y otro es eficiente y los procesos
siempre están en la memoria principal
          El tamaño óptimo del quantum depende de:
o o        El tipo de sistema.
o o        Las cargas que vaya a soportar el sistema.
o o        El número de procesos en el sistema y su tipo.
          Es la política mas usada para tiempo compartido.
          Ofrece un servicio igual para todos los procesos.
          Es una política apropiativa.
          Mantiene más equilibradas las colas de procesos listos y bloqueados.

5.7 MÉTODOS DE ASIGNACIÓN


      La naturaleza de acceso directo de los discos nos brinda flexibilidad en la implementación de
los archivos. En casi todos los casos, muchos archivos se almacenan en el mismo disco. El
problema principal es cómo asignar espacio a esos archivos de modo que el espacio se aproveche
de forma eficaz y se pueda acceder rápidamente a los archivos. Hay tres métodos de asignación
de espacio en disco que se usan ampliamente: contigua, enlazada e indizada. Cada método tiene
sus ventajas y desventajas, y es por ello que algunos sistemas (como el RDOS de Data General
para su línea de computadores Nova) manejan los tres, aunque es más común que un sistema
utilice un método en particular para todos los archivos.
 
ASIGNACIÓN CONTIGUA
El método de asignación contigua requiere que cada archivo ocupe un conjunto de bloques
contiguos en el disco. Las direcciones de disco definen un ordenamiento lineal en él. Con este
ordenamiento, suponiendo que sólo un trabajo está accediendo al disco, el acceso al bloque b + 1
después del bloque b normalmente no requiere movimiento de la cabeza. Si es preciso mover la
cabeza (del ultimo sector de un cilindro al primero del siguiente), sólo es una pista. Así, el número
de búsquedas de disco necesarias para acceder a archivos asignados contiguamente es mínimo,
lo mismo que el tiempo de búsqueda cuando finalmente se necesita una búsqueda. El sistema
operativo VM/CMS de IBM utiliza asignación contigua por el buen desempeño que provee.
                                 

La asignación contigua de un archivo está definida por la dirección en disco y la longitud (en
unidades de bloque) del primer bloque. Si el archivo tiene n bloques, y comienza en la posición b,
ocupará los bloques b, b + 1, b + 2, ... , b + n – 1. La entrada de directorio para cada archivo indica
la dirección del bloque inicial y la longitud del área asignada a este archivo.
 
El acceso a un archivo que se asignó de forma contigua es fácil. Si el acceso es secuencial, el
sistema de archivos recuerda la dirección en disco del ultimo bloque al que se hizo referencia y,
cuando llega el momento, lee el siguiente bloque. Si el acceso es directo al bloque i de un archivo
que comienza en el bloque b, podemos acceder de inmediato al bloque b + i. Así, la asignación
contigua permite manejar acceso tanto secuencial como directo.
 
Una dificultad de la asignación contigua es encontrar espacio para un archivo nuevo. La
implementación del sistema de administración de espacio libre, que veremos en la fig., determina la
forma de efectuar esto. Se puede usar cualquier sistema de administración, pero algunos son más
lentos que otros.
 
Es evidente que el problema de asignación de espacio contiguo en disco es una aplicación
específica del problema general de asignación dinámica de almacenamiento, a saber, cómo
satisfacer una solicitud de tamaño n a partir de una lista de huecos libres. Las estrategias de primer
ajuste y mejor ajuste son las que más comúnmente se usan para seleccionar un hueco libre del
conjunto de huecos disponibles. Se ha demostrado mediante simulaciones que tanto el primer
ajuste como el mejor ajuste son más eficientes que el peor ajuste en términos tanto de tiempo
como de utilización de espacio. No se ha determinado claramente si el primer ajuste es mejor que
el mejor ajuste en términos de aprovechamiento del espacio, pero generalmente es más rápido.
 
Estos algoritmos padecen el problema de fragmentación externa. Conforme los archivos se
asignan y borran, el espacio libre en disco se divide en trozos pequeños. Hay fragmentación
externa siempre que el espacio libre se divide en trozos, y se convierte en un problema cuando el
trozo contiguo más grande es insuficiente para una solicitud; el almacenamiento se fragmenta en
varios huecos, ninguno de los cuales es lo bastante grande como para contener los datos.
Dependiendo de la cantidad total de espacio en disco y del tamaño promedio de los archivos, la
fragmentación externa podría ser un problema menor o mayor.
 
Algunos sistemas de microcomputador viejos usaban asignación contigua en discos flexibles. Para
evitar la pérdida de cantidades importantes de espacio en disco por fragmentación externa, el
usuario tenía que ejecutar una rutina de reempacado que copiaba todo el sistema de archivos en
otro disquete o en cinta. Así, el disquete original se desocupaba y se creaba un espacio libre
contiguo grande. A continuación, la rutina copiaba los archivos otra vez en el disquete asignando
espacio contiguo de este hueco grande único. Tal esquema compacta efectivamente todo el
espacio libre en un solo hueco contiguo y resuelve el problema de la fragmentación. El costo de
esta compactación es el tiempo, y es especialmente severo en el caso de discos grandes que usan
asignación contigua, en los que la compactación de todo el espacio podría tomar horas y por fuerza
se tendría que llevar a cabo bajo un régimen semanal. Durante este tiempo de inactividad,
generalmente no puede permitirse el funcionamiento normal del sistema, así que en las máquinas
de producción una compactación semejante se evita a toda costa.
 
La asignación contigua tiene otros problemas. Uno de los más importantes es determinar cuánto
espacio se necesita para un archivo. Cuando se crea un archivo, es preciso encontrar la cantidad
total de espacio que necesitará, y asignarla. ¿Cómo sabe el creador (programa o persona) qué
tamaño tendrá el archivo creado? En algunos casos tal determinación podría ser sencilla (cuando
se copia un archivo existente, por ejemplo), pero en general puede ser difícil estimar el tamaño de
un archivo de salida.
 
Si asignamos un espacio demasiado pequeño a un archivo, podríamos encontrarnos con que ya no
podemos extender ese archivo. Sobre todo si se usa una estrategia de mejor ajuste, el espacio a
ambos lados del archivo podría estar ya en uso, y no podríamos hacer crecer el archivo en su
lugar. En tal caso hay dos posibilidades. Primera, podríamos terminar el programa de usuario, con
un mensaje de error apropiado. El usuario tendrá entonces que asignar más espacio y ejecutar de
nuevo el programa. Tales ejecuciones repetidas podrían ser costosas. Para evitarlas, el usuario
normalmente sobreestimará la cantidad de espacio requerida, y el resultado será un desperdicio
considerable de espacio.
 
La otra posibilidad es encontrar un hueco más grande, copiar el contenido del archivo en el nuevo
espacio, y liberar el espacio anterior. Esta serie de acciones podría repetirse mientras haya espacio
disponible, aunque también podría consumir mucho tiempo. La ventaja en este caso es que no es
necesario informar al usuario explícitamente de lo que está sucediendo; el sistema continúa a
pesar del problema, aunque cada vez con mayor lentitud.
 
Incluso si se conoce con anticipación la cantidad total del espacio requerido para un archivo, la
preasignación podría ser ineficiente. Un archivo que crece lentamente durante un periodo largo
(meses o años) tendría que recibir inicialmente suficiente espacio para su tamaño final, aunque
gran parte de ese espacio no se ocupe durante largo tiempo. En este caso el archivo tiene una
gran cantidad de fragmentación interna.
 
Para evitar varias de estas desventajas, algunos sistemas operativos utilizan un esquema de
asignación contigua modificado, en el que inicialmente se asigna un trozo contiguo de espacio y
luego, cuando ese espacio deja de ser suficiente, se añade otro trozo de espacio contiguo, una
extensión, a la asignación inicial. La ubicación de los bloques de un archivo se registra entonces
como una posición y una cuenta de bloques, más un enlace al primer bloque de la siguiente
extensión. En algunos sistemas, el propietario del archivo puede establecer el tamaño de las
extensiones, pero esto puede dar lugar a ineficiencias si el propietario no actúa correctamente. La
fragmentación interna puede seguir siendo un problema si las extensiones son demasiado grandes,
y la fragmentación externa puede ser también problemática cuando se asignan y liberan
extensiones de diferentes tamaños.
 
ASIGNACIÓN ENLAZADA
        La asignación enlazada resuelve todos los problemas de la asignación contigua. Con este
esquema, cada archivo es una lista enlazada de bloques de disco, los cuales pueden estar
dispersos en cualquier parte del disco. El directorio contiene un puntero al primer y al último
bloques del archivo. Por ejemplo, un archivo de cinco bloques podría comenzar en el bloque 9,
continuar en el bloque 16, luego el 1, el 10 y por último el bloque 25 (Fig. ). Cada bloque contiene
un puntero al siguiente bloque. Estos punteros no se proporcionan al usuario. Así, si cada bloque
tiene 512 bytes, y una dirección de disco (el puntero) requiere cuatro bytes, el usuario verá bloques
de 508 bytes.
 
Para crear un archivo nuevo, simplemente creamos una nueva entrada en el directorio. Con la
asignación enlazada, cada entrada de directorio tiene un puntero al primer bloque de disco del
archivo. Inicialmente el puntero recibe el valor nil (el valor del puntero de fin de lista) para indicar un
archivo vacío, y también se asigna cero al campo de tamaño. Una escritura en el archivo hace que
se encuentre un bloque libre a través del sistema de administración del espacio libre, y luego se
escribe en ese bloque, enlazándolo al final del archivo. Para leer un archivo, basta con leer los
bloques siguiendo los punteros de un bloque al siguiente.
 
Cuando se usa asignación enlazada no hay fragmentación externa, pues cualquier bloque libre de
la lista de espacio libre se puede usar para satisfacer una solicitud. Además, no hay necesidad de
declarar el tamaño de un archivo en el momento de crearlo. Un archivo puede continuar creciendo
en tanto haya bloques libres. Por ello, nunca es necesario compactar el disco.
 
La asignación enlazada no carece de problemas. El principal de ellos es que sólo puede usarse
efectivamente para archivos de acceso secuencial. Para encontrar el i-ésimo bloque de un archivo,
es necesario partir del principio del archivo y seguir los punteros hasta llegar al i-ésimo bloque.
Cada acceso a un puntero requiere una lectura del disco/ y a veces una búsqueda de disco. Por
consiguiente, no resulta eficiente proveer una capacidad de acceso directo para archivos de
asignación enlazada.
                  
Otra desventaja de la asignación enlazada es el espacio que ocupan los punteros. Si un puntero
requiere cuatro bytes de un bloque de 512 bytes, el 0.78% del disco se usará para punteros, no
para información. Cada archivo requiere un poco más de espacio del que requeriría en otro caso.
 
La solución usual a este problema es juntar bloques en múltiplos, llamados cúmulos (clusters), y
asignar los cúmulos en lugar de los bloques. Por ejemplo, el sistema de archivos podría definir un
cúmulo como cuatro bloques, y operar con el disco sólo en unidades de cúmulos. Entonces, los
punteros ocuparán un porcentaje mucho más pequeño del espacio en disco del archivo. Este
método permite que la correspondencia entre bloques lógicos y físicos siga siendo sencilla, mejora
el rendimiento del disco (menos búsquedas de disco) y reduce el espacio necesario para la
asignación de bloques y la administración de la lista de espacio libre. El costo de la estrategia es
un aumento en la fragmentación interna, ya que se desperdicia más espacio cuando un cúmulo
está parcialmente lleno que cuando un bloque está parcialmente lleno. Los cúmulos pueden servir
para mejorar el tiempo de acceso a disco con muchos otros algoritmos, y es por ello que se usan
en casi todos los sistemas operativos.
 
Un problema adicional es la confiabilidad. Dado que los archivos se enlazan mediante punteros
que están dispersos por todo el disco, consideremos lo que sucedería si un puntero se perdiera o
dañara. Un error en el software del sistema operativo o un fallo en el hardware del disco podría
hacer que se obtuviera un puntero equivocado.
 
Esto podría hacer que un archivo se enlazara con la lista de espacio libre o con i archivo. Dos
soluciones parciales serían usar listas doblemente enlazadas o almacenar el nombre del archivo y
el número de bloque relativo en cada bloque; sin embargo, tales esquemas requieren un gasto
extra aún mayor para cada archivo.
 
Una variación importante del método de asignación enlazada es usar una tabla de asignación de
archivos (FAT, file-allocation table). Este sencillo pero eficiente método asignación de espacio en
disco se emplea en los sistemas operativos MS-DOS y OS/2. Se aparta una sección del disco al
principio de cada partición para guardar en ella la tabla, la cual tiene una entrada para cada bloque
del disco y está indizada por número de bloque. La FAT se usa de manera similar a una lista
enlazada. La entrada de directorio contiene el número de bloque del primer bloque del archivo.
entrada de la tabla indizada por ese número de bloque contiene el número del siguiente bloque del
archivo. Esta cadena continúa hasta el último bloque, que tiene un valor especial de fín-de-archivo
(end of file) como entrada de tabla. Los bloques desocupados se indican con un valor de cero en la
tabla. Para asignar un bloc nuevo a un archivo, basta con encontrar la primera entrada de la tabla
que valga cero y sustituir el valor de fin-de-archivo anterior por la dirección del nuevo bloque. A
continuación, el cero se sustituye por el valor de fin-de-archivo. Un ejemplo ilustrativo es la
estructura de FAT de la figura para un archivo que consiste en bloques de disco 217, 618 y 339.

              
Cabe señalar que el esquema de asignación por FAT puede dar pie a un número significativo de
movimientos de la cabeza del disco, a menos que la FAT se mantenga caché. La cabeza del disco
debe moverse al principio de la partición para leer la FA1 encontrar la ubicación del bloque en
cuestión, luego moverse a la posición del bloque en sí. En el peor caso, ocurrirán ambos
movimientos para cada uno de los bloques. Un beneficio es que se mejora el tiempo de acceso
aleatorio, porque la cabeza del disco puede encontrar la posición de cualquier bloque leyendo la
información en la FAT.
 
ASIGNACIÓN INDIZADA
        La asignación enlazada resuelve los problemas de fragmentación externa y declaración de
tamaño de la asignación contigua, pero, si no se usa una FAT, no puede apoyar un acceso directo
eficiente, ya que los punteros a los bloques están dispersos junto con los bloques mismos por todo
el disco y necesitan recuperarse en orden. La asignación indizada resuelve este problema al reunir
todos los punteros en un mismo lugar: el bloque índice.
 
Cada archivo tiene su propio bloque índice, que es una matriz de direcciones de bloques de disco.
La i-ésima entrada del bloque índice apunta al i-ésimo bloque del archivo. El directorio contiene la
dirección del bloque índice. Para leer el i-ésimo bloque, usamos el puntero de la i-ésima entrada
del bloque índice para encontrar y leer el bloque deseado.
                           
Cuando se crea el archivo, se asigna nil a todos los apuntadores del bloque índice. La primera vez
que se escribe el í-ésimo bloque, se obtiene un bloque del administrador de espacio libre y su
dirección se coloca en la I-ésima entrada del bloque índice.
 
La asignación indizada apoya el acceso directo sin sufrir fragmentación externa, porque cualquier
bloque libre del disco puede satisfacer una solicitud de espacio adicional. La asignación indizada sí
desperdicia espacio. El gasto extra de los punteros del bloque índice generalmente es mayor que
el de los punteros de la asignación enlazada. Consideremos un caso común en el que tenemos un
archivo que sólo ocupa uno o dos bloques. Con la asignación enlazada, sólo perdemos el espacio
de un puntero por bloque (uno o dos punteros). Con la asignación indizada, es preciso asignar un
bloque índice entero, aun si sólo uno o dos punteros son diferentes de nil.
 
Esto hace surgir la pregunta de qué tan grande debe ser el bloque índice. Cada archivo debe tener
un bloque índice, así que nos conviene que el bloque sea lo más pequeño posible. Sin embargo, si
el bloque índice es demasiado pequeño no podrá contener suficientes punteros para un archivo
grande, y se necesitará un mecanismo para resolver este problema:
 

• Esquema enlazado. Un bloque índice normalmente ocupa un bloque de disco;


por tanto, se puede leer y escribir directamente por sí solo. Para manejar archivos
grandes, podríamos enlazar varios bloques índice. Por ejemplo, un bloque índice
podría contener una cabecera pequeña con el nombre del archivo y las primeras
100 direcciones de bloques de disco. La siguiente dirección (la última palabra del
bloque índice) es nil (si el archivo es pequeño) o un puntero a otro bloque índice (si
el archivo es grande).

• Índice multinivel. Una variante de la representación enlazada es usar un bloque


índice de primer nivel que apunte a un conjunto de bloques índice de segundo
nivel, que a su vez apuntan a los bloques de disco. Para acceder a un bloque, el
sistema operativo usa el índice de primer nivel para encontrar un bloque índice de
segundo nivel, y ese bloque para hallar el bloque de datos deseado. Este enfoque
podría extenderse a un tercer o cuarto nivel, dependiendo del tamaño máximo de
archivo deseado. Con bloques de 4096 bytes, podríamos guardar 1024 punteros
de cuatro bytes en un bloque índice. Dos niveles de índices permitirían apuntar a
1,048/576 bloques de datos, con lo que un archivo podría tener hasta cuatro
gigabytes.

• Esquema combinado. Otra alternativa, que se usa en el sistema BSD UNIX, es


guardar los primeros, digamos, 15 punteros del bloque índice en el bloque índice
(o i-nodo) del archivo. (La entrada de directorio apunta al i-nodo). Los primeros 12
de estos punteros apuntan a bloques directos; es decir, contienen direcciones de
bloques que contienen datos del archivo. Así, los datos de archivos pequeños (de
no más de 12 bloques) no necesitan un bloque índice aparte. Si el tamaño de
bloque es de 4K, es posible acceder directamente a hasta 48K de datos. Los
siguientes tres punteros apuntan a bloques indirectos. El primer puntero de bloque
indirecto es la dirección de un bloque indirecto simple: un bloque índice que no
contiene datos, sino las direcciones de bloques que sí contienen datos. Luego
viene un puntero a un bloque indirecto doble, que contiene la dirección de un
bloque que contiene las direcciones de bloques que contienen punteros a los
bloques de datos reales. El último puntero contendría la dirección de un bloque
indirecto triple. Con este método, el número de bloques que es posible asignar a
un archivo excede la cantidad de espacio que puede direccionarse con los
punteros de archivo de cuatro bytes que usan muchos sistemas operativos.

Un puntero de archivo de 32 bits sólo alcanza para 2 Exp.32 bytes, o 4 gigabytes.

En la figura se muestra un i-nodo.

Los esquemas de asignación indizada exhiben algunos de los mismos problemas de desempeño
que la asignación enlazada. En términos específicos, los bloques índice se pueden colocar en un
caché en la memoria, pero los bloques de datos podrían estar dispersos por toda una partición.
5.8 INTRODUCCIÓN Y PROCESOS DE E/S
        Los dispositivos que se conectan a un computador varían en muchas dimensiones: transfieren
un carácter o un bloque de caracteres a la vez; se puede acceder a ellos sólo secuencialmente, o
de forma aleatoria; transfieren datos sincrónica o asincrónicamente; son dedicados o compartidos;
pueden ser sólo de lectura o de lectura y escritura. Además, los dispositivos varían mucho en
cuanto a su velocidad. En muchos sentidos, estos dispositivos también son los más lentos de los
componentes principales del computador.
 
A causa de toda esta variación en los dispositivos, el sistema operativo necesita ofrecer una gama
muy amplia de funcionalidad a las aplicaciones para que ellas puedan controlar todos los aspectos
de los dispositivos. Uno de los objetivos clave del subsistema de E / S de un sistema operativo es
proporcionar la interfaz más sencilla posible al resto del sistema. Dado que los dispositivos son un
cuello de botella del desempeño, otra clave es optimizar la E/S de modo que la concurrencia sea
máxima.
 
Las dos tareas principales de un computador son E/S y procesamiento. En muchos casos, la tarea
principal es la E/S, y el procesamiento es meramente incidental. Por ejemplo, cuando navegamos
en una página de Web o editamos un archivo, nuestro interés inmediato es leer o escribir algo de
información, no calcular una respuesta.
El papel del sistema operativo en la E/S de un computador es administrar y controlar las
operaciones de E/S y los dispositivos de E/S. Aquí reuniremos todas las piezas para presentar una
imagen completa.
 
GENERALIDADES
 
El control de los dispositivos conectados al computador es una preocupación importante de los
diseñadores de sistemas operativos. Dada la amplia variación en la función y velocidad de los
dispositivos de E/S (consideremos un ratón, un disco duro y un jukebox de CD-ROM), se requieren
diversos métodos para controlarlos. Estos métodos constituyen el subsistema de E/S del núcleo,
que aísla el resto del núcleo de la complejidad de administrar los dispositivos de E/S.
 
La tecnología de dispositivos de E / S exhibe dos tendencias que están en conflicto. Por un lado/
vemos una creciente estandarización de las interfaces de software y hardware. Esta tendencia nos
ayuda a incorporar generaciones de dispositivos mejorados a computadores y sistemas operativos
existentes. Por otro lado, vemos una variedad cada vez más amplia de dispositivos de E/S.
Algunos dispositivos nuevos son tan distintos de los anteriores que es un reto incorporarlos en
nuestros computadores y sistemas operativos. Este reto se enfrenta con una combinación de
técnicas de hardware y software. Los elementos básicos de hardware de E/S, como puertos, buses
y controladores de dispositivos, dan cabida a una amplia variedad de dispositivos de E/S. Para
encapsular los detalles y peculiaridades de los diferentes dispositivos, el núcleo de un sistema
operativo se estructura a modo de usar módulos controladores de dispositivos (en software) o
drivers. Los drivers presentan al subsistema de E/S una interfaz de acceso a dispositivos uniforme,
así como las llamadas al sistema proporcionan una interfaz estándar entre la aplicación y el
sistema operativo
 

5.9 DESPACHADOR
Otro componente que interviene en la función de planificación de la CPU es el despachador
(dispatcher). Este es el módulo que cede el control de la CPU al proceso seleccionado por el
planificador a corto plazo. Esta función implica:
 
o Cambiar de contexto
o Cambiar a modo de usuario
o Saltar al punto apropiado del programa del usuario para reiniciar ese programa

 
El despachador debe ser lo más rápido posible, porque se invoca en cada conmutación de
proceso. El tiempo que el despachador tarda en detener un proceso y poner otro en ejecución se
denomina latencia del despachador.
 

También podría gustarte