SISTEMAS
OPERATIVOS Y ENTORNOS AMIGABLES
1-FUNCIONES DEL SISTEMA OPERATIVO
Casi sin excepción, toda computadora tiene un sistema
operativo. Varían mucho según los distintos modelos de computadora, pero el
sistema operativo siempre esta ahí.
Para la mayoría de los usuarios el sistema operativo
es la máquina. nunca ven una máquina ‘en bruto’; en vez de esto ven y utilizan
la interfaz que presenta el sistema
operativo.
Una máquina en bruto es un dispositivo poco agradable.
Para que realice una determinada tarea, requiere un programa en una
representación binaria específica del código particular de máquina.
En especial, necesita programas más o menos
complicados para manejar sus periféricos antes de que pudiera siquiera
comunicarse con el mundo exterior.
En computadoras personales grandes, en
minicomputadoras y en macrocomputadoras, es posible identificar cierto número
de partes individuales de software del sistema, la mayor parte, destinadas a la
preparación de programas: editores, ensambladores, compiladores, editores de
enlace, etc.
Abarcando todo esto se encuentra el sistema operativo.
Dicho sistema se ha descripto como el pegamento que mantiene juntos a todos los
otros componentes. También se le puede considerar lo que proporciona una infraestructura: un medio común en el
cual los diferentes programas de sistemas pueden operar, incluyendo los
mecanismos para comunicarse con los dispositivos periféricos.
Hace muchos año, quedó claro que debía determinarse
una forma de proteger a los programadores de la complejidad del hardware. La
forma en que esto ha evolucionado de manera gradual es colocando un nivel de
software por arriba del simple hardware, con el fin de controlar todas las
partes del sistema y presentar al usuario una interfaz o máquina virtual que
facilite la comprensión del programa. Este nivel de software es el sistema
operativo.
es posible definir la función de un sistema operativo
como aquella que proporciona un medio para el usuario de un sistema de
computación, cualesquiera que sean sus necesidades: desarrollo de programas,
control de procesos en tiempo real, manejo de base de datos, nómina, etc.; En
el caso de una computadora personal sólo hay un usuario, y la función única del
sistema operativo es implantar la interfaz con el usuario. en el caso de un
sistema con múltiples usuarios el sistema operativo debe compartir los recursos
a fin de proporcionar la interfaz del usuario a cada uno de éstos.
2- CATEGORIAS DEL SISTEMA OPERATIVO
* Un solo
usuario y múltiples usuarios: se explican por sí mismos.
* Un sistema de multiprogramación es aquel en el cual
el procesador(es) disponible (s) (s) comparten (por el sistema operativo)
varios programas corresidentes en la memoria
principal, a fin de mejorar la utilización de la C.P.U.
* Un sistema de alta prioridad - baja prioridad es un
sistema de un solo usuario en el cual dos programas están multiprogramados. Uno
(el de alta prioridad) interactúa con la terminal y corre tanto como sea
posible; el programa de baja prioridad se asigna al procesador siempre que el
programa de alta prioridad no pueda continuar. En cuanto el trabajo de alta
prioridad esté libre para continuar, lo hace.
Un sistema de alta prioridad - baja prioridad en un
caso particular de sistema de un solo usuario y procesos múltiples.
Un sistema concurrente o de tareas múltiples es una
generalización del sistema de alta prioridad - baja prioridad en la cual la
persona que utiliza el sistema de un sólo usuario puede iniciar cierto número
de trabajos concurrentes, asignando el exhibidor de la terminal a cualquiera de
los trabajos, según se necesite.
Un sistema de tiempo compartido, es aquel que comparte
el procesador y la memoria entre cierto número de programas, asociado cada uno
con una terminal interactiva remota, de manera tal que cada usuario considera
que tiene una máquina para el solo.
* Un sistema de procesamiento de transacciones se parece a un sistema de tiempo compartido
ya que da servicio a cierto número de terminales remotas. Sin embargo, mientras
que en un sistema de tiempo compartido cada usuario remoto está asociado con un
programa distinto, y es independiente por completo de las otras terminales y
programas, en un sistema. En un sistema Tiempo Compartido todas las
terminales están conectadas al mismo
programa. Este programa acepta transacciones provenientes de sus terminales,
las procesa y envía respuestas.
* Un sistema de aplicación general es un sistema de múltiple usuarios que combinan
procesamientos por lotes, tiempo compartido y tal vez procesamiento de transacciones
en un sólo sistema( generalmente, grande y complejo)
3- HISTORIA
DE LOS SISTEMAS OPERATIVOS
La primera computadora digital real fue diseñada por el primer matemático inglés
Charles
Babbage (1792 - 1871). Nunca logró que funcionara de manera adecuada, ya que
ésta era un diseño puramente mecánico y la tecnología de su época no podía
producir las ruedas, engranes, levas y demás partes mecánicas con la
precisión que él necesitaba. No tenía Sistema Operativo.
1945 - 1955: la primera generación,
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. Se logró construir máquinas de cálculo mediante bulbos.
Éstas máquinas eran enormes y llenaban cuartos complejos con decenas de miles
de bulbos, y eran mucho más lentas que la computadora casera más económica en
nuestros días.
Un solo grupo de personas diseñaba, construía,
programaba, operaba y daba mantenimiento a cada máquina.
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 en la computadora y pasaba unas horas esperando que ninguno de los
20.000 o más bulbos se quemara durante la ejecución.
1955 - 1965: La
segunda generación: Transistores y sistemas de procesamiento por lotes.
Ésta introducción del transistor a mediados de los
años cincuenta modificó en forma radical el panorama. Las computadores se
volvieron confiables. Por primera vez, hubo una clara separación entre los
diseñadores, constructores, operadores, programadores y personal de
mantenimiento.
Para ejecutar un trabajo, el programador debía primero
escribir el programa en hojas de papel para después perforar las tarjetas.
Después debía llevar el paquete de tarjetas perforadas al cuarto de lectura y
dárselas a uno de los programadores.
Dado el alto costo del equipo, no debe sorprender el
hecho de que las personas buscaron en forma por demás, rápida, vías para
reducir el tiempo invertido. La solución que, por lo general se adoptó, fue la
de sistema de procesamiento por lotes.
1965 - 1980: La
tercera generación: Circuitos Inttegrados y Multiprogramación
A principios de la década de los sesenta, estaban las
computadoras científicas de gran escala,
orientadas a palabras como la 7094, la cual se utilizaba en cálculos
científicos y de ingeniería. Por otro lados, estaban las computadoras
comerciales, orientadas a caracteres, como la 1401, de uso común para el
ordenamiento de cintas a impresión por
los bancos y las compañías aseguradoras.
El desarrollo y mantenimiento de dos líneas de
productor completamente distintas era una propuesta cara para los fabricantes.
I.B.M. intentó resolver ambos problemas a la vez; para ello, introdujo el sistema 360. El 360
era una serie de máquinas con software compatible, con un rango desde la 1401
hasta máquinas más poderosas que la 7094.
La 360 fue la
primera línea principal de computadoras que utilizo los circuitos integrados (
a pequeña escala), lo que proporciono una gran ventaja de precio y desempeño
con respecto de las maquinas de la segunda generación, construidas a partir de
transistores individuales.
No había forma de que IBM (o cualquier otra
empresa) pudiera escribir un pedazo de
software que cumpliera con todos los requisitos en conflicto. El resultado fue
un sistema operativo enorme y extraordinariamente complejo. También popularizaron
varias técnicas fundamentales, ausentes de los sistemas operativos de la
segunda generación, de las cuales la mas importante tal vez sea la
multiprogramación .
Otra de las
características principales de los
sistemas operativos de la tercera generación era la capacidad de leer trabajos de
las tarjetas de discos, tan pronto como llegaron al cuarto de computo,
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. Esta técnica se llama SPOOLiING y también se utilizo
para las salidas. Con el spooling, las 1401 ya no fueron necesarias y
desapareció el transporte de las cintas de un lado al otro,
Aunque los sistemas operativos de la tercera
generación eran adecuados para los
grandes cálculos científicos y la ejecución de un procesamiento por lotes.
Con los sistemas de tercera generación, el tiempo
transcurrido entre el envío de un trabajo y la obtención de la salida era a
menudo de varias horas.
Este deseo de una rápida respuesta preparo el camino
para el tiempo compartido, variante de la multiprogramación en la que cada
usuario tenia una terminal en línea.
Otro desarrollo fundamental durante la tercera
generación fue el crecimiento fenomenal de las minicomputadoras.
Ken Thompson, se encontró una pequeña minicomputadora
PDP-7 que nadie utilizaba e intento escribir una versión desprotegida de
multics para un solo usuario.
Este trabajo desemboco en el sistema operativo UNIX, que en la actualidad domina los
mercados de las minicomputadoras y estaciones de trabajo.
3-d 1980-1990: La cuarta generación: Computadoras
personales
Con el desarrollo de los circuitos LCI (Large Scale
Integracion) , chips con miles de transistores en un centímetro cuadrado de
silicio, se inicio la era de la computadora. Las computadoras personales no
eran muy distintas de las minicomputadoras del tipo de la PDP-11, pero en
términos del precio si eran distintas.
Las computadoras personales mas poderosas utilizadas
por empresas, universidades e instalaciones de gobierno reciben el nombre de
ESTACIONES DE TRABAJO, pero en realidad solo son computadoras personales
grandes.
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 un sistema operativo de red, los usuarios
están conscientes de la existencia de varias computadoras y pueden conectarse con maquinas remotas y copiar
archivos de una maquina a otra. Cada maquina ejecuta su propio sistema
operativo local y tiene su propio usuario.
Por el contrario, un sistema operativo distribuido es
aquel que aparece ante sus usuarios
como un sistema tradicional de un solo procesado, aun cuando este compuesto por
varios procesadores. En un sistema distribuido verdadero, los usuarios no deben
ser conscientes del lugar donde su programa se ejecute o del lugar donde se
encuentran sus archivos; eso debe ser manejado en forma eficaz y
automática por el sistema operativo.
Estructura de
los sistemas operativos
Examinaremos cuatro estructuras distintas.
Sistemas
monolíticos
Este tipo de organización es la mas común: La
estructura consiste en que no existe estructura alguna.
El sistema operativo se escribe como una educación de
procedimientos, cada uno de los cuales puede llamar a los demás cada vez que
así lo requiera cuando se usa esta técnica, cada procedimiento del sistema
tiene una interfaz bien definida en términos de parámetros y resultados y cada
uno de ellos es libre de llamar a cualquier otro si estos últimos proporciona
cierto calculo útil para el primero.
Para construir el programa objeto real del sistema
operativo mediante este punto de vista uno compila en forma individual los
procedimientos o los archivos que contienen los procedimientos y después los
enlaza en un solo archivo objeto con el ligador. En términos del ocultamiento
de la información, esta es prácticamente nula: Cada procedimiento es visible a
los demás.
Los servicios que proporcionan el sistema operativo se
solicita colocando los parámetros bien definidos, como en los registros o en la
pila, para después ejecutar una instrucción especial de trampa de nombre llamada al núcleo o llamada al supervisor.
Esta instrucción cambia la maquina del modo usuario al
modo núcleo y transfiere el control al sistema operativo.
El sistema operativo examina entonces los parámetros
de la llamada para determinar cual de ellos se desea realizar; A continuación,
el sistema operativo analiza una tabla que contiene en la entrada un
apuntador al procedimiento que realiza
la k-esima llamada al sistema. Esta operación identifica el procedimiento de
servicio, al cual se llama. Por ultimo, la llamada al sistema termina y el
control regresa al programa del usuario.
Esta organización sugiere una estructura básica del
sistema operativo:
1- Un programa
principal se llama al procedimiento del servicio solicitado.
2- Un conjunto
de procedimiento de servicios que lleva a cabo las llamadas al sistema.
3- Un conjunto
de procedimientos utilitarios que ayudan al procedimiento de servicio.
Sistemas con
capas
Consiste en organizar el sistema operativo como una
jerarquía de capas, cada una construida sobre la inmediata inferior. El mismo
sistema construido de esta manera fue el sistema THE desarrollado en Holanda.
El sistema tenia seis capas como se muestra en la
figura. La capa 0 con la asignación del proceso t alterna entre los procesos
cuando ocurren las interrupciones o expiran los cronómetros sobre la capa 0, el
sistema consta de procesos secuenciales, cada uno de los cuales se podía
programar sin tener que preocuparse por el hecho de que varios procesos
estuvieran en ejecución en el mismo procesador. En otras palabras la capa 0
proporcionaba la multiprogramacion basica de la CPU.
La capa 1 realizaba la administración de la memoria.
Por encima de la capa 1, los procesos no debían preocuparse se estaban en la
memoria o en el recipiente; el software
de la capa 1 se encargaba de garantizar que las paginas llegaran a la memoria
cundo fueran necesarias
CAPAS
---------------------------------------------------------------------------------------------------
5 El procesador
---------------------------------------------------------------------------------------------------
4 Programas del usuario
---------------------------------------------------------------------------------------------------
3 Control de entrada/ salida
--------------------------------------------------------------------------------------------------
2 Comunicación operador - proceso
--------------------------------------------------------------------------------------------------
1 Administración de la
memoria y del disco
--------------------------------------------------------------------------------------------------
0 Asignación del procesador y
multiprogramación
--------------------------------------------------------------------------------------------------
La capa 2 se encarga de la comunicación entre cada proceso y la consola del operador
. La capa 3 controla los dispositivos E/S y guarda en almacenes (buffers) los
flujos de información entre ellos. Por
encima de la capa tres cada proceso puede trabajar con dispositivos de E/S con
propiedades adecuadas, en vez de dispositivos reales con muchas peculiaridades.
La capa 4 es donde estaban los programas del usuario. Estos no tenían que
preocuparse por el proceso, memoria,
consola o control de E/S . El proceso operador del sistema se localizaba
en la capa 5.
Una generalización mas avanzada del concepto de capas
se presento en el sistema MULTICS. En lugar de capas, MULTICS estaba organizado como una serie de anillos
concéntricos, siendo los anillos interiores los privilegiados, cuando un
procedimiento de un anillo exterior
deseaba llamar a un procedimiento de un anillo exterior debía hacer el
equivalente a una llamada al sistema; es decir; una instrucción TRAP
cuyos parámetros eran validadas con cuidado antes de permitir que
procediese la llamada. Aunque todo el sistema operativo era parte del espacio
de direcciones de cada proceso del
usuario en MULTICS, el hardware posibilito el diseño de procedimientos
individuales (segmentos de memoria, en realidad) de forma protegida contra la lectura , escritura o ejecución.
Maquinas
virtuales
Son versiones iniciales de OS/360 eran, en sentido
estricto, sistemas de procesamiento por lotes. Sin embargo, muchos de los
usuarios de 360 deseaban tener tiempo compartido.
El sistema de tiempo compartido oficial de IBM,
tSS/360, tuvo una entrada retrasada y cuando finalmente apareció era tan grande
y lento que pocos lugares lo adoptaron
Este sistema cuyo nombre original era CP/CMS y que
ahora se llama VM/370 se baso en una observación astuta: un sistema de tiempo compartido proporciona
multiprogramación y una maquina extendida
con una interfaz mas conveniente que el mero hardware. La esencia de
Vm/370 es la total separación entre estas dos funciones.
El corazón del sistema, llamado monitor de la maquina
virtual se ejecuta en el hardware simple y realiza la multiprogramación ,
proporcionando no una, sino varias maquinas virtuales a la siguiente capa
superior; Sin embargo, la diferencia de los demás sistemas operativos, estas maquinas virtuales no son maquinas
extendidas con archivos u otras características adecuadas. En lugar de esto,
son copias exactas de hardware simple, con su modo núcleo/usuario, interrupciones
y todo lo demás que posee la maquina real.
Puesto que cada maquina virtual es idéntica al hardware real , cada una puede ejecutar
cualquier sistema operativo que se ejecute en forma directa sobre el hardware.
Las distinta maquinas virtuales pueden, y por lo
general lo hacen , ejecutar distintos sistemas operativos.
Cuando un programa CMS ejecuta una llamada al sistema,
la llamada es atrapada por el sistema operativo en su propia maquina virtual,
no a VM/370, de la misma forma en que lo haría si se ejecutar en una maquina
real en vez de una virtual. CMS
proporciona entonces las instrucciones normales de E/S en hardware para la lectura de disco virtual lo
necesario para llevar adelante la llamada. Estas instrucciones de E/S son
atrapadas por VM/370, que entonces las lleva
a cabo como parte de al simulación del hardware verdadero. Al hacer una
separación total de las funciones de multiprogramación y proporcionar una
maquina extendida , cada una de las
partes puede ser mas sencilla, flexible y tener un fácil mantenimiento.
Modelo cliente - servidor
VM/370 gano mucho en sencillez al trasladar gran parte
del código tradicional del sistema operativo (al implantar la maquina
extendida) en una capa superior, CMS.
Sin embargo, VM/370 sigue siendo un programa complejo,
puesto que la simulación de varios 370 virtuales no es tan simple (en especial
si usted desea que todo sea eficaz).
Una tendencia de los sistemas operativos modernos es
la de explorar mas esta idea de mover el codigo a capas superiores y eliminar
la mayor parte posible del sistema operativo para mantener un nucleo mínimo. El
punto de vista usual es el de implantar la mayoría de las funciones del
sistema operativo en los procesos del
usuario.
Para solicitar un servicio, como la lectura de un bloque
de cierto archivo, un proceso del usuario (denominado en este caso proceso
cliente) envía la solicitud a un proceso servidor, que realiza entonces el
trabajo y regresa la respuesta.
Otra de las ventajas del modelo cliente- servidor es
su capacidad de adaptación para su uso en los sistemas distribuidos.
Algunas funciones del sistema operativo (como el
cargado de comandos en los registros
físicos del dispositivo de E/S) son difíciles, si no es que imposibles de realizar a partir de programas del
usuario. Existen dos formas de enfrentar
este problema. Una es la de hacer que algunos procesos de servidores críticos se ejecuten en realidad en modo
núcleo, con acceso total al hardware pero de forma que se comuniquen con los
demás procesos mediante el mecanismo normal de mensajes.
La otra forma es la
de construir una cantidad mínima
de mecanismos dentro del núcleo, pero manteniendo las decisiones de política
relativas a los usuarios dentro del espacio del usuario
4 -PROCESOS
La CPU ejecuta una elevada cantidad de programas, y
aunque su principal ocupación es la ejecución de los programas, también se
requiere para otras actividades del sistema. A estas actividades se las
denomina procesos.
Un proceso es la unidad de trabajo dentro de un
sistema.
Proceso secuencial
Es un programa en ejecución. La ejecución de un
proceso debe proceder en forma secuencial, en cualquier momento se ejecuta como
máximo una instrucción en nombre del proceso. Un proceso es más que el código
del programa aunado a la actividad que se desarrolle, por lo general, incluye
tambien la pila
del proceso que contiene datos
temporales y una sección de datos con variables globales.
Un proceso es una entidad activa.
Estado de un
proceso
El estado de un proceso se define en parte por la
actividad de este proceso y cada proceso secuencial puede encontrarse en uno de
los siguientes estados
·
En ejecución: las
instrucciones se están ejecutando.
·
En espera: el proceso
está esperando a que ocurra algún suceso.
·
Listo: el proceso está
esperando que se le asegure a un procesador.
Bloque de control
de procesos
Un bloque de control de procesos, es un registro de
datos que contiene diversa información relacionada con un proceso concreto que
incluye
·
Estado del proceso
·
Contador del programa
·
Registros de la CPU
·
Información de la
planificación de la CPU
·
Información de la
administración de memoria.
·
Información contable.
·
Información del estado
de la E/S.
Procesos
concurrentes
Los procesos pueden ejecutarse concurrentemente.
Existen varias razones para permitir la ejecución
concurrente
·
Compartir recursos
físicos.
·
Compartir recursos
lógicos.
·
Acelerar los cálculos.
·
Modularidad.
·
Comodidad.
Creación de
procesos
Un proceso puede crear varios procesos nuevos a través
de una llamada al sistema para la creación de procesos.
El proceso que crea se lo llama padre y al creado hijo.
Si un proceso crea otro nuevo, hay dos alternativas
habituales de implantarlo.
·
El padre
continua su ejecución concurrentemente con los hijos.
·
El padre espera
o que sus hijos
hayan terminado. En general el proceso necesitará recursos (memoria
o archivos) cuando crea un subproceso, este último puede obtener recursos
directamente del sistema operativo que queda restringido a su padre.
4.2 TERMINACION DE PROCESOS
El proceso termina cuando concluye la ejecución de su
último enunciado y solicita al sistema operativo que elimine el proceso.
Un proceso puede provocar la terminación de otro a
través de la llamada al sistema apropiado.
Varios sistemas no permiten que los hijos
existan si los padres han terminado. En estos sistemas cuando el padre
termina, también deben terminar los hijos A éste fenómeno se lo denomina
terminación en cascada.
RELACION ENTRE
PROCESOS
Un proceso
puede ser independiente si no puede afectar o ser afectado por los otros
procesos que se ejecutan. Tiene las siguientes características:
·
Su estado no es
compartido de ninguna manera por otro proceso.
·
Su ejecución es
determinista, es decir, el resultado de la ejecución depende en exclusiva del
estado de entrada.
·
Su ejecución es
reproducible, es decir, el resultado de la ejecución será el mismo para una
misma entrada.
·
Su ejecución puede
detenerse o renunciarse sin ocasionar efectos adversos.
Un proceso es cooperativo cuando:
·
Su estado es
compartido por otros procesos.
·
El resultado de su
ejecución depende de una secuencia de ejecución relativa.
·
El resultado de su
ejecución no
es determinista.
4.3 PLANIFICACION
Los beneficios de la multiprogramación son un aumento
de la utilización de la CPU. La productividad es la cantidad de trabajo
desarrollado en intervalo de tiempo.
Colas de
planificación
Conforme los procesos entran en el sistema, se colocan
en una cola de trabajos formada por todos los procesos que residen en
almacenamiento secundario esperando la aseguración de la memoria principal.
Planificadores
En un sistema por lotes se presentan mas procesos que
los que se pueden ejecutar de inmediato, estos procesos se envian a un
“spooler” en un dispositivo de almacenamiento masivo. El planificador a corto plazo
selecciona uno de los procesos de éste depósito y los carga en memoria para su
ejecución. El planificador a corto plazo selecciona uno de los procesos
listos para la ejecución y le asegura la cpu.
La diferencia entre los planificadores es la
frecuencia de su ejecución.
El planificador a largo plazo controla el grado de
multiprogramación si, éste es estable, entonces la tasa promedio de creación de
promedios debe ser igual a la tasa promedio de salida de procesos. En algunos
sistemas es posible que no existan planificadores a largo plazo o que su
función sea mínima.
Planificación de la
CPU
Es una función fundamental del sistema operativo. Casi
todos los recursos de un computador se planifican antes de usarse.
Siempre que la CPU queda inactiva, el sistema operativo
debe seleccionar para su ejecución uno de los procesos de la cola de procesos
listos y le asegura la CPU. Esta cola no es necesariamente “primero que entra,
primero que sale”.
Las decisiones de planificación pueden efectuarse en 4
circunstancias.
1.
Cuando un proceso
cambia del estado de ejecución, al estado de espera.
2.
Cuando un proceso
cambia del estado de ejecución al estado de listo.
3.
Cuando un proceso
cambia del estado de espera al estado de listo.
4.
Cuando termina el
proceso.
Algoritmos de
planificación
Los criterios que se emplean para la utilización de
los algoritmos son los siguientes:
·
Utilización de la CPU,
queremos que la CPU se mantenga tan ocupado como sea posible (entre un %40 y
%90).
·
Productividad, una
medida del trabajo es el número de procesos que se completan por unidad de
tiempo.
·
Tiempo de retorno, el
tiempo de retorno es el intervalo entre el momento de ofrecer el proceso y el
momento de aceptarlo.
·
Tiempo de espera, es
el tiempo de espera para cada proceso.
·
Tiempo de respuesta,
es la calidad de tiempo para comenzar a responder.
Es deseable maximizar la utilización de la CPU y la
productividad, y minimizar los tiempos de respuesta, retorno y espera.
Hay varios algoritmos para la planificación de la CPU:
·
Planificación servicio por orden de
llegada
Es definitivamente el más sencillo. Con este esquema
el proceso que primero solicita la CPU es al primero que se le asegura.
El código para la planificación es sencillo de
escribir y comprender.
El tiempo de espera promedio es bastante largo. Es especialmente
conflictivo en los sistemas de tiempo compartido.
·
Planificación “Primero el trabajo mas
breve”
Asocia a cada proceso la longitud de su siguiente
ráfaga de CPU. Cuando la CPU está disponible, se le asegura al proceso que
tiene la ráfaga más corta. Si dos procesos tienen la misma longitud se utiliza
el orden de llegada.
Este tipo de planificación se utiliza frecuentemente.
No puede usarse en planificación a corto plazo.
·
Planificación por prioridades
Se asocia una prioridad a cada proceso y la CPU se
asegura al de mayor prioridad. Los de igual prioridad se ordena por orden de
llegada.
Las prioridades pueden definirse interna o
externamente.
El serio problema de este tipo de algoritmos es el
bloqueo indefinido o inanición. Un proceso de baja prioridad puede quedar
esperando indefinidamente.
·
Planificación circular
Está diseñada
especialmente para sistemas de tiempo compartido.
Se define una pequeña unidad de tiempo. La cola de
procesos listos se trata como una cola circular, el planificador la recorre
asegurando la UCP o cada proceso por intervalo de hasta un cuanto tiempo.
Mantenemos la cola de procesos listos, como una cola.
Primero entrada primero salida. El planificador toma el primer proceso de la
cola programa un cronometro para que interrumpa después de un tiempo y despache
el proceso.
·
Planificación de múltiples niveles
Este algoritmo divide la cola de procesos listos en
diversa colas. Los procesos se aseguran a una cola. Cada cola tiene su propio
algoritmo de planificación. Debe existir planificación entre las colas. Cada
cola tiene prioridad absoluta sobre las colas de menor prioridad.
4.4 COORDINACION DE PROCESOS
Un proceso productor genera información que será
aprovechada por un proceso consumidor. Para permitir que se genere concurrentemente,
debemos crear un depósito (pool) de buffers que puede llenar el productor y
vaciar el consumidor.
El problema del productor - consumidor con buffers
ilimitado, no establece limite en el número de buffers: el consumidor puede
tener que esperar nuevos elementos, pero el productor siempre puede producirlos
por que siempre hay buffers vacios. El problema de buffers limitado, supone un
número fijo de buffers y el productor puede tener que esperar si están llenos y
el consumidor si están vacios.
EL PROBLEMA DE LA SECCION CRITICA
Cada proceso tiene un segmento de código llamado
sección crítica en el cual el proceso puede estar modificando variables
comunes, actualizando una tabla, escribiendo en un archivo,etc. La ejecución de
las secciones críticas de los procesos es mutuamente excluyente en el tiempo.
Una solución para la sección crítica debe cumplir con
tres requisitos:
1.
EXCLUSION MUTUA: Si un
proceso se está ejecutando en su sección crítica ningún otro proceso se puede
estar ejecutando en la suya.
2.
PROGRESO: Si ningún
proceso se está ejecutando en su sección y hay otros procesos que desean entrar
en las suyas, entonces sólo aquellos procesos que no se están ejecutando en su
sección restante pueden participar en la decisión de cuál será el siguiente en
entrar en la sección crítica, y esta selección no puede postergarse
indefinidamente.
3.
ESPERA LIMITADA: Debe
haber un límite en el número de veces que se permite que los demás procesos
entren en su sección crítica después de que un proceso haya efectuado una
solicitud para entrar en la suya y antes de que se conceda esa solicitud.
HARDWARE DE SINCRONIZACION
Como resolver el problema de la sección crítica?
El problema de la sección crítica puede solucionarse
simplemente evitando que ocurran interrupciones mientras se modifica una
variable compartida, pero por desgracia no siempre es factible esta solución.
Por esto, muchas máquinas ofrecen instrucciones de hardware especiales que
permiten evaluar y modificar el contenido de una palabra o intercambiar
automáticamente el contenido de dos palabras.
Semáforos
Las soluciones al problema de la sección crítica a
veces no son tan sencillos de generalizar es por eso que se puede utilizar una
herramienta de sincronización llamada semáforo.Un semáforo S es una variable
entera a la que, salvo por la asignación de valores iniciales, sólo puede
accederse mediante dos operaciones atómicas comunes: espera y señal. Las modificaciones al
valor entero del semáforo en las operaciones espera y señal se ejecutan indivisiblemente.
Es decir, cuando un proceso modifica el valor del semáforo, ningún otro proceso
puede modificar simultáneamente ese mismo valor.
Implantación
La principal desventaja de las soluciones para el
problema de la sección crítica es que todas requieren una espera activa.
Mientras un proceso se encuentra en su sección crítica, cualquier otro proceso
que intente entrar en esa sección deberá ejecutar un ciclo continuo en la
sección de entrada. La espera activa desperdicia ciclos de CPU que otros procesos
podrían usar productivamente. A éste tipo de semáforos se los llama cerradura
giratoria. La ventaja de una cerradura giratoria es que no es
necesario efectuar un cambio de contexto cuando el proceso debe esperar a una
cerradura. Por esto, cuando se espera que las cerraduras tengan una duración
muy breve, las cerraduras giratorias son bastante útiles.
Para superar la necesidad de la espera activa, podemos
modificar la definición de las operaciones espera y señal del semáforo. Cuando
un proceso ejecuta la operación espera y encuentra que el valor del
semáforo no es positivo, debe esperar, pero puede bloquearse a si mismo para no
esperar activamente.Un proceso bloqueado debe reiniciarse con la ejecución de
una señal
de otro proceso. La operación bloquear suspende al proceso que la
invoca. La operación despertar reanuda la ejecución de un
proceso bloqueado.
Debemos garantizar que dos procesos no pueden ejecutar
operaciones espera
y señal al mismo tiempo en el mismo semáforo.
Bloqueos mutuos y bloqueos indefinidos
La implantación de un semáforo con cola de espera
puede dar como resultado una situación donde dos o más procesos esperen
indefinidamente un suceso que solo puede ocasionar uno de los procesos de
espera. Cuando se llega a este estado, se dice que los procesos están el
bloqueo mutuo.
Decimos que un conjunto de procesos está en bloqueo
mutuo cuando uno de los procesos del conjunto está esperando un suceso que
solamente puede ser provocado por otro proceso del conjunto.
PROBLEMAS CLASICOS DE SINCRONIZACION