Tema 5. Sistemas operativos:
Conceptos generales.
Componentes funcionales y estructura.
Gestión de procesos.
Algoritmos de planificación de procesos.
Concurrencia.
Multitarea.
Multiprogramación.
1. CONCEPTO BÁSICO DE SISTEMA OPERATIVO.
Un sistema operativo (SO) se puede ver como una colección organizada de software
que entiende al hardware y que consta de rutinas de control para operar una computadora y
proporcionar un entorno para la ejecución de programas. Los programas confían en las
facilidades proporcionadas por el sistema operativo, e invocan sus servicios mediante las
llamadas delsistema operativo para conseguir acceder a los recursos del sistema, tales como
archivos y dispositivos de entrada/salida (E/S). Además, los usuarios pueden interactuar
directamente con el sistema operativo mediante las órdenes delsistema operativo. En ambos
casos, el sistema operativo actúa como un interfaz entre los usuarios y el hardware de un
sistema de computadoras.
Las funciones de un sistema operativo vienen determinadas en gran medida por las
necesidades y características del entorno que el SO pretende soportar. Internamente, un
sistema operativo actúa como un gestor de los recursos del sistema, tales como el procesador,
la memoria y los dispositivos de E/S. En este papel el SO:
– Mantiene la traza del estado de cada recurso y decide quién toma un recurso, cuándo
y por cuánto tiempo.
– Resuelve los conflictos en las demandas de los recursos, preservando así la integridad
del sistema y optimizando el rendimiento resultante.
En general, el objetivo primario de un sistema operativo es incrementar la
productividad de los recursos como el hardware o los usuarios de un sistema de
computadoras.
2. COMPONENTES FUNCIONALES Y ESTRUCTURA
El sistema operativo y sus funciones es un elemento fundamental en cualquier sistema
de computación para desarrollar de forma exitosa las tareas de cómputo cotidianas.
El sistema operativo y sus componentes funcionan de forma sincronizada para permitir la
eficiente operación y el rendimiento esperado de un sistema de computación.
Antes de explicar los diferentes componentes de un sistema operativo debemos conocer
cuáles son las funciones básicas de un sistema operativo.
2.1 Principales funciones del sistema operativo
Las funciones principales de un sistema operativo son: el control de acceso al hardware, la
administración de archivos y carpetas, la proporción de una interfaz de usuario y la
administración de aplicaciones.
El control de acceso al hardware es una de las funciones básicas del sistema operativo. El
sistema operativo utiliza un programa llamado controlador de dispositivo para acceder al
hardware.
La administración de archivos y carpetas es otra de las funciones que realiza el sistema
operativo. El sistema operativo crea una estructura de archivos y carpetas en la unidad de
disco duro.
Proporcionar una interfaz de usuario está entre las principales funciones de un sistema
operativo. Las dos interfaces de usuario que incluyen los sistemas operativos son CLI (interfaz de línea de comandos) y GUI (interfaz gráfica de usuario).
Como otra de las funciones de los sistemas operativos tenemos la administración de
aplicaciones. El sistema operativo localiza una aplicación y la carga en la RAM de la PC.
2.2 Componentes de un sistema operativo
Los diferentes elementos del sistema operativo están estrechamente relacionados. Las partes
de un sistema operativo comprende un conjunto de acciones que se llevan a cabo en una
computadora. Los componentes del sistema operativo de los que estaremos hablando son:
– Los procesos
– La memoria principal
– El almacenamiento secundario
– El sistema de entrada/salida
– El sistema de archivos
– Los sistemas de protección
– El sistema de comunicaciones
– Los programas del sistema
– El gestor de recursos
2.2.1 Gestión de procesos
Entre los componentes de un sistema operativo están los procesos. Cuando se habla de un
proceso se hace referencia a un programa en ejecución. Un proceso es un conjunto de
instrucciones que corresponden a un programa y que son ejecutadas por la CPU. En un
programa se pueden ejecutar uno o varios procesos diferentes. La ejecución de un programa
necesita recursos del sistema como tiempo de CPU, memoria, archivos y dispositivos de E/S.
Un proceso puede pasar por los estados nuevo, preparado, ejecución, bloqueado y terminado
cuando su ciclo de vida es de 5 estados. Si el proceso solo se ejecuta y termina el ciclo de vida es de 2 estados. Los procesos para su ejecución se planifican siguiendo algoritmos. Dos de los algoritmos de planificación más comunes son el algoritmo Round Robín y el algoritmo FIFO.
2.2.2 Gestión de la memoria principal
Otro de los componentes del sistema operativo es la memoria principal. La memoria principal es un recurso muy importante que se ha de gestionar cuidadosamente para agilizar la ejecución de los procesos. Ante un fallo de energía eléctrica, como la memoria principal es volátil se pierde su contenido.
La memoria principal se optimiza para asignar espacio a los diferentes programas a ejecutar.
Entre los diferentes procesos a ejecutar se comparte la memoria principal. El espacio de
memoria asignado se protege para que no se use estando concedido.
El sistema operativo es el responsable de gestionar la memoria principal conociendo qué
espacios de la memoria está siendo utilizada y por qué procesos, decidiendo qué procesos se cargarán en memoria cuando haya espacio disponible, asignando y reclamando espacio de
memoria cuando sea necesario, administrar el intercambio entre la memoria principal y la
memoria virtual (espacio en el disco usado para los procesos cuando la memoria principal no es suficiente).
2.2.3 Gestión del almacenamiento secundario
La memoria principal no es suficiente para almacenar los programas y los datos, además de ser volátil porque los datos se pierden ante un fallo de la energía eléctrica. Por tal motivo es necesario un sistema de almacenamiento secundario también denominado memoria virtual.
El sistema de almacenamiento secundario representa otro de los componentes de un sistema
operativo y no es más que un espacio reservado en los discos con el objetivo de almacenar los programas que no necesitan estar en la memoria principal y para el intercambio de los
programas desde y hacia la memoria principal.
El sistema operativo se encarga de planificar los discos, gestionar el espacio libre, asignar el almacenamiento y verificar que los datos se guarden en orden.
2.2.4 Sistema de entrada/salida
El sistema de entrada/salida, otro de los componentes del sistema operativo, representa el
intercambio de información entre el procesador y los dispositivos periféricos (teclado, mouse, pantalla, impresora y otros). Los dispositivos periféricos solicitan recursos del sistema por medio de interrupciones.
El sistema de E/S está compuesto por un sistema de almacenamiento temporal (caché), una
interfaz de controladores de dispositivos y otra interfaz para dispositivos específicos.
El sistema operativo gestiona el almacenamiento temporal de entrada/salida y las
interrupciones de los dispositivos de entrada/salida.
2.2.5 Sistema de archivos
Los archivos representan un conjunto de información almacenada en los discos de una PC.
Dicha información se almacena de forma relacionada y organizada. Los archivos almacenan
tanto los programas como los datos.
El sistema de archivos forma parte de los componentes de un sistema operativo y son la forma en que se organiza la información. Los sistemas de archivos más comunes son FAT, FAT32, ext3, NTFS, XFS.
El sistema operativo es responsable de construir y eliminar archivos y directorios, manipular archivos y directorios, establecer la correspondencia entre archivos y unidades de almacenamiento, realizar copias de seguridad de archivos.
2.2.6 Sistemas de protección
En un sistema operativo varios usuarios pueden ejecutar simultáneamente sus programas,
varios procesos se pueden ejecutar simultáneamente, varios programas se pueden ejecutar al
mismo tiempo, varios procesos se pueden intercalar para su ejecución simulando una
ejecución simultánea.
Normalmente estos sistemas operativos utilizan métodos de protección de datos, por ejemplo
para que un programa no pueda usar o cambiar los datos de otro usuario. El sistema de
protección es uno de los componentes del sistema operativo que proporciona el mecanismo
que controla el acceso de los programas o los usuarios a los recursos del sistema.
El sistema operativo se encarga de distinguir entre uso autorizado y no autorizado, especificar los controles de seguridad a realizar y forzar el uso de los mecanismos de protección.
2.2.7 Sistema de comunicaciones
El sistema de comunicaciones es uno de los componentes de un sistema operativo que
permite el intercambio de información entre procesos y programas que se ejecutan
localmente con procesos y programas que se ejecutan de forma remota.
Las tareas de envío y recepción de información las ejecuta el sistema de comunicaciones a
través de las interfaces de red.
El sistema operativo es el responsable de controlar el envío y recepción de la información, crear y mantener la comunicación para que las aplicaciones envíen y reciban información, y crear y mantener conexiones virtuales entre aplicaciones locales y aplicaciones remotas.
2.2.8 Programas del sistema
Los programas del sistema forman parte de los componentes del sistema operativo y son
aplicaciones que se instalan con el sistema operativo pero que no forman parte de él. Los
programas del sistema son útiles para el desarrollo y ejecución de los programas de usuario.
Las tareas que realizan los programas del sistema son: manipulación y modificación de
archivos, información del estado del sistema, soporte a lenguajes de programación y
comunicaciones.
El sistema operativo es el encargado de gestionar las tareas que realizan los diferentes
programas del sistema.
2.2.9 Gestión de recursos
Un PC está formado por el hardware y el software. El hardware se relaciona con los
componentes físicos y el software con los programas y el sistema operativo.
Para que un PC pueda realizar las tareas solicitadas por el usuario requiere de la asignación de recursos para cada una de esas tareas. El sistema operativo administra los recursos que se deben asignar a los programas en ejecución.
El sistema operativo administra la unidad central de procesamiento, los dispositivos de
entrada y salida, la memoria principal o memoria RAM, los discos o memoria virtual, los
procesos o programas en ejecución y en general todos los recursos del sistema.
3. GESTIÓN DE PROCESOS
Un proceso se puede definir simplemente como un programa en ejecución con una serie de
variables, registros y contadores activos.
La diferencia entre un programa y un proceso es sutil pero también crítica. Por ejemplo,
cuando una persona está cocinando tiene una receta y una cocina abastecida con los
ingredientes necesarios para preparar su plato. En esta analogía, la receta es el programa, la persona que cocina es la CPU y los ingredientes son los datos de entrada. El proceso es la actividad en la que la persona lee la receta, busca los ingredientes y cocina.
La idea clave es que un proceso es una entidad dinámica.
En este tema se verán las características de los procesos y las acciones que debe llevar a cabo el Sistema Operativo para realizar su gestión.
CONCEPTOS BÁSICOS
Ya se ha comentado que el Sistema Operativo realiza la gestión de los procesos y para ello, almacena información sobre los mismos en el Bloque de Control de Proceso (PCB) o Process Control Block y está formada por:
– Estado en que está el proceso.
– Un apuntador a la siguiente instrucción del programa a ejecutar.
– El estado de todos los registros de la CPU.
– Un identificador de proceso.
– Un apuntador que sirve para ubicar el proceso de las diferentes colas de estado.
– Estadísticas como el uso que se ha hecho de la CPU, el tiempo,etc.
ESTADOS DE UN PROCESO
Los estados en que podemos encontrar un proceso son los siguientes:
• En ejecución (usando el procesador)
• Bloqueado (sin poder hacer nada hasta que ocurra un evento externo)
• Listo (ejecutable, se detiene temporalmente para que pueda ejecutarse otro proceso)
Hay cuatro transiciones posibles entre los diversos estados. La transición 1 ocurre cuando un proceso descubre que no puede continuar. Esto suele deberse a que ha de esperar datos de entrada todavía no disponibles.
El planificador de procesos lleva a cabo las transiciones 2 y 3. La transición 2 sucede cuando el planificador considera que el proceso en ejecución ya ha dispuesto del procesador durante suficiente tiempo, y decide que es el momento de asignarlo a otro proceso. Estando en el estado listo, un proceso es candidato para lograr el uso del procesador. Cuando esto ocurre, el planificador lo selecciona y le asigna el procesador. Esto corresponde a la transición 3.
Cuando sucede el evento externo que el proceso estaba esperando tiene lugar la transición 4.
Si no hay en ese momento ningún proceso en ejecución, se llevará a cabo inmediatamente la
transición 3 y el proceso comenzará a ejecutarse.
4. ALGORITMOS DE PLANIFICACIÓN
Cuando un proceso en ejecución abandona tal estado pasa a Espera o Preparado, dependiendo
si deja el procesador voluntaria o involuntariamente.
Si los procesos de un sistema nunca dejan la CPU de forma involuntaria, se dice que la política de planificación de CPU es no expulsora o no expropiativa.
Por el contrario, si pueden perder la posesión del procesador sin solicitarlo, nos encontramos con una planificación expulsora o expropiativa.
Las políticas no expulsoras suelen aplicarse en sistemas batch o en pequeños entornos
monousuario, como el sistema operativo MS-DOS o el entorno Windows. Algunos algoritmos
que se emplean en esta planificación son: primero en llegar – primero en servir, el más cortó primero y por prioridades.
Por otra parte, los algoritmos expropiativos se utilizan en sistemas de control industrial y entornos multiusuario. Los algoritmos más utilizados aquí incluyen: Round-Robín, por
prioridades, de múltiples colas, y de múltiples colas realimentadas.
PRIMERO EN LLEGAR, PRIMERO EN SERVIR (FCFS)
Es de tipo no expulsivo. Los procesos se almacenan en una cola FIFO y son atendidos por orden de llegada. El primer proceso que accede a la CPU se mantiene en ella hasta que se bloquea (por espera de E/S u otro motivo) o termina. Es el tipo de planificación usada en Windows 3.x.
Presenta el problema de que los procesos largos hacen esperar a los cortos con lo cual la
capacidad de concurrencia del sistema disminuye.
POR TURNO. ROUND ROBIN (RR)
Es una de las más sencillas y utilizadas. Los procesos entran en la CPU siguiendo un esquema FIFO, pero con una cantidad de tiempo de CPU limitada denominada quantum. Si el proceso activo sigue en ejecución al final de su quantum es extraído de la CPU por el planificador y el siguiente proceso se apropia del procesador. También se asigna la CPU al siguiente proceso si el proceso activo termina o se bloquea antes del fin del quantum.
Es fundamental el tamaño del quantum. Si es muy pequeño se dedica demasiada CPU al
cambio de contexto y si es demasiado grande degenera en FCFS.
PLANIFICACIÓN CON PRIORIDAD
La prioridad es la precedencia de un proceso respecto a los otros procesos que puedan ocupar la CPU. Cada proceso tendrá un nivel de prioridad asignada y el proceso listo con máxima prioridad es el que consigue la CPU.
Las prioridades pueden ser asignadas dinámicamente por el sistema y modificadas a lo largo
de la vida del sistema.
PRIMERO EL MÁS CORTO (SJF)
Es un sistema no expulsivo. Concede la CPU de forma ininterrumpida al proceso que necesita
la CPU durante menos tiempo. Si dos procesos tienen la misma duración se elije uno mediante FCFS.
Se comporta bien en la planificación a largo plazo de los procesos batch, en los que se conocen los requisitos de tiempo total de CPU. El problema es conocer la estimación de tiempo del resto de procesos (se puede hacer una estimación estadística basada en ejecuciones anteriores).
Una variante denominada prioridad con tasa de respuesta alta, highest response-ratio next
(HRN) considera además del tiempo de ejecución el tiempo que el proceso lleva esperando
para ser atendido para no hacer esperar indefinidamente a los procesos largos.
MENOR TIEMPO RESTANTE (SRT)
Es la versión expulsiva del método SJT. Como en general no es posible conocer
anticipadamente el tiempo de ejecución de un proceso se acude a estimaciones del tiempo
restante de ejecución, en función de las ejecuciones anteriores del proceso, asignándole la prioridad de manera inversamente proporcional a este valor.
COLAS CON DIFERENTE NIVEL DE PRIORIDAD
Un esquema usual es agrupar procesos en clases de prioridad y utilizar la planificación por prioridad entre las clases y otros modos de planificación (round robin, SJT, SRT) entre los procesos listos de cada clase.
Por ejemplo podríamos tener un sistema con cuatro colas de prioridad. Mientras hubiera
procesos ejecutables en la cola de mayor prioridad, se ejecutaría cada uno un quantum
siguiendo un sistema round robin, y no se ejecutarían de las otras colas. Las otras colas podrían usar el algoritmo RR u otro.
COLAS DE DIFERENTE NIVEL DE PRIORIDAD REALIMENTADAS
Es una variación de la anterior en la que los procesos no tienen por qué mantenerse en la
misma cola hasta que se ejecutan, si no que si llevan mucho tiempo en una cola pueden ir
subiendo a las colas de más prioridad.
PLANIFICACIÓN GARANTIZADA
Consiste en llegar a un compromiso con el usuario sobre el rendimiento del sistema que se va a poner a su disposición. Por ejemplo si hay n usuarios conectados dar 1/n del tiempo del procesador a cada usuario.
HILOS
Los hilos son en realidad subprocesos. Cada hilo se ejecuta secuencialmente y tiene su propio contador de programa y una pila para llevar un registro de posición pero comparte el resto de recursos asignados al proceso (archivos abiertos, procesos hijos, cronómetros, etc..) con los otros hilos del proceso.
Una ventaja del uso de hilos es que la comunicación entre los hilos es muy rápida. Además es más rápido crear otro hilo que otro proceso.
5. PROCESOS CONCURRENTES
Se dice que dos o más procesos son concurrentes si se están ejecutando simultáneamente. En
un sistema monoprocesador, sólo se podrá dar la concurrencia aparente puesto que en el
mismo instante de tiempo, solo un proceso podrá ocupar la CPU.
Las CPU’s que soportan la ejecución de más de un proceso de forma simultánea reciben el
nombre de CPU’s multiprogramables.
Las razones para permitir la ejecución concurrente son principalmente la compartición de
recursos y acelerar los cálculos.
SINCRONIZACIÓN ENTRE PROCESOS
Cuando los procesos pueden acceder a recursos compartidos como variables, BBDD o
dispositivos, pueden producirse resultados inesperados y errores.
La solución a estos problemas de acceso a recursos compartidos es relativamente sencilla:
prohibir que más de un proceso lea o escriba simultáneamente datos compartidos, es decir,
establecer una exclusión mutua.
La sección crítica será aquella parte del programa en la cual se accede al recurso compartido.
De este modo, si se puede evitar que dos procesos entren simultáneamente en una sección
crítica, se evitarán las condiciones de competencia.
EXCLUSIÓN MUTUA
Los métodos de exclusión mutua pretenden evitar que dos o más procesos se solapen en sus
secciones críticas.
DESACTIVACIÓN DE INTERRUPCIONES
Dado que incluso la alternancia entre procesos es controlada por interrupciones, un posible método para llevar a cabo la exclusión mutua podría ser que el proceso que entra en una región crítica las desactive todas. Este método no es admisible ya que no es correcto que un proceso desactive todas las interrupciones ya que tendría el control completo del sistema y además si el sistema tuviera más de una CPU la desactivación correspondería sólo a una de ellas.
CERROJOS
Podría pensarse que consultar el valor de una variable cerrojo antes de acceder a una sección crítica y modificar su valor para indicar que está ocupada solucionaría el problema. Pero no es así ya que el propio cerrojo presentaría condiciones de competencia.
ALGORITMO DE PETERSON
Antes de acceder a su región crítica los procesos tienen que llamar al procedimiento
entrar EnSeccionCritica pasando como parámetro su número de proceso.
Si el otro proceso está en su sección crítica esperará hasta que la abandone para entrar, en caso contrario entrará inmediatamente. Al final de su sección crítica, cada proceso debe llamar a salir RegionCritica.
Esta solución funciona pero presenta el problema de realizar espera activa.
DORMIR Y DESPERTAR
Intenta solucionar el problema de la espera activa ampliando el número de estados de un
proceso. Para ello se definen dos primitivas, dormir (sleep) y despertar (wakeUp).
La primera es una llamada al sistema que provoca la suspensión de quien efectúa la llamada. La segunda requiere de un parámetro que es el identificador del proceso que se desea despertar.
Este sistema puede dar lugar a condiciones de competencia. El problema radica en la pérdida de una llamada a la primitiva despertar cuando el proceso destinatario no está dormido.
SEMÁFOROS
El mecanismo por excelencia utilizado para manejar la exclusión mutua son los semáforos.
Básicamente, un semáforo es una variable de tipo entero no negativo sobre la que se definen dos funciones que se ejecutan de forma atómica: p y v. P se puede asociar con la función reservar y V, con la función liberar.
Por ejemplo, si se desea controlar el acceso a una impresora, se inicializaría la variable
semáforo a 1 indicando que la impresora, inicialmente, se encuentra libre y cuando un proceso necesite utilizar la impresora, el procedimiento reservar impresora, se reduciría a ejecutar sobre dicho semáforo y reservar impresora, sería ejecutar v sobre el semáforo.
Este tipo de semáforos son los llamados semáforos binarios, que únicamente pueden tomar el
valor 0 o 1.
MONITORES
Un monitor es una construcción de un lenguaje de programación que contiene tanto los datos
como los procedimientos necesarios para asignar un recurso compartido.
Para ejecutar una función de asignación de recursos, un proceso debe llamar a una entrada del monitor específica, pero no tiene acceso a sus estructuras internas.
Los procesos que desean usar el monitor cuando ya hay un proceso activo deben esperar, el monitor controla automáticamente esta espera. Como la exclusión mutua está garantizada, se evitan los problemas de competencia.
COMUNICACIÓN ENTRE PROCESOS
El problema más general que debe resolverse en el tratamiento de los procesos concurrentes,
es el de la comunicación, que consiste en proporcionarles mecanismos que les permitan
intercambiar información.
MEMORIA COMPARTIDA
Los procesos comparten algunas variables para el intercambio de información. La
responsabilidad de proporcionar la comunicación recae sobre los programadores de
aplicaciones, el sistema operativo únicamente tiene que ofrecer la memoria compartida.
INTERCAMBIO DE MENSAJES
CONCEPTO
La forma general de enviar y recibir mensajes es usando las siguientes primitivas del sistema
operativo: enviar (destinatario, mensaje); recibir(origen, mensaje);
Se trata de llamadas al sistema y no comandos del lenguaje por lo que son accesibles desde
muchos entornos de lenguajes de programación.
Un envío con bloqueo debe esperar hasta que el receptor reciba el mensaje constituyendo un
ejemplo de comunicación síncrona. Un envío sin bloqueo permite al transmisor continuar con
otras tareas aunque el receptor no haya recibido aún el mensaje permitiendo pues que ambos
interlocutores se comuniquen asincronamente. El envío sin bloqueo requiere de buffers para
almacenar los mensajes hasta que los reciba el receptor. La comunicación asincrona aumenta
la posibilidad de paralelismo.
En la transmisión de mensajes pueden darse errores en la comunicación y es necesario un
protocolo que permita solucionar este problema. También es necesario poder identificar
mediante un nombre de forma no ambigua a los procesos destinos y origen. Estos y otros
aspectos relativos a la comunicación son tratados en otros temas del temario por lo que no
nos extendemos más sobre ellos.
BUZONES Y PUERTOS
Un buzón consiste en un buffer en el que se almacenan los mensajes enviados antes de ser
extraídos por el receptor. En este caso, el transmisor y el receptor especifican el buzón, en
lugar del proceso, con el que se van a comunicar.
Un puerto se define como un buzón utilizado por múltiples transmisores y un único receptor.
En los sistemas cliente/servidor, cada servidor tiene un puerto asignado por el cual recibe los
mensajes de multitud de clientes.
CONDUCTOS (PIPES)
UNIX introdujo la noción de conductos como un esquema para manejar comunicaciones entre
procesos. Un conducto es en esencia un buzón que permite extraer un número específico de
bytes a la vez. El conducto no mantiene las fronteras entre mensajes. Si los procesos convienen
en leer y escribir mensajes con un tamaño determinado o terminar cada mensaje con un
señalador especial la utilización de los conductos no presenta ningún problema.
LLAMADAS A PROCEDIMIENTOS REMOTOS (RPC)
Son un mecanismo estructurado de alto nivel para realizar la comunicación entre procesos en
sistemas distribuidos. Con una llamada a un procedimiento remoto, un proceso de un sistema
A llama a un procedimiento de un proceso de otro sistema B. El proceso A se bloquea
esperando el retorno desde el procedimiento llamado en el sistema remoto y después
continúa su ejecución desde el punto que sigue inmediatamente a la llamada.
El procedimiento llamado y el que llama residen en procesos distintos, con espacios de
direcciones distintos, por lo cual no existe la noción de variables globales compartidas, por lo
que las RPC transfieren la información estrictamente a través de los parámetros de la llamada.
Un problema de las RPC es que las llamadas por referencia son difíciles de implementar ya que
una RPC comunica espacios de direcciones diferentes.
INTERBLOQUEOS
Un sistema está interbloqueado o deadlock cuando dos o más procesos esperan por un evento
que no va a ocurrir. Por ejemplo, supongamos que existen dos procesos Pl y P2 que
comparten dos recursos R1 y R2. P1 solicita el recurso R2 mientras tiene asignado R1 y
simultáneamente P2 solicita R1 mientras tiene asignado R2. En este caso se presenta
interbloqueo.
La situación de interbloqueo es indeseable porque los procesos nunca terminan su ejecución,
los recursos del sistema se paralizarán impidiendo que se inicien otros procesos.
Las soluciones al interbloqueo son evitar que ocurra o permitir que ocurra, detectarlo y
corregirlo.
PLANIFICACIÓN DE PROCESOS
Existen varios niveles de planificación, sin embargo, la más utilizada es la planificación de bajo
nivel, en la que se determina a qué proceso en estado listo se le va a asignar la CPU,
convirtiéndose en proceso en ejecución.
El encargado de realizar esta tarea es el planificador (scheduler) que utiliza para ello un
algoritmo de planificación.
Un buen planificador debe cumplir con ciertos criterios:
Equidad: garantizar que cada proceso obtiene una proporción justa de CPU.
Eficacia: mantener ocupada la CPU al 100%.
Tiempo de respuesta: minimizar el tiempo de respuesta para los usuarios interactivos.
Tiempo de proceso global: minimizar el tiempo que deben esperar los usuarios por lotes para
obtener resultados.
Rendimiento: maximizar el número de tareas procesadas por unidad de tiempo.
Hay que tener en cuenta que algunos de estos objetivos son contradictorios.
Un buen planificador además debe tener en cuenta que el comportamiento de cada proceso
es impredecible. Algunos utilizan una gran cantidad de tiempo en espera de operaciones de E/S, mientras otros utilizan varias horas la CPU, en forma ininterrumpida, si tienen la
posibilidad.
Cuando el planificador deja que un proceso se comience a ejecutar, no está en capacidad de
saber cuanto tiempo transcurrirá hasta que el proceso se bloquee ya sea para E/S, por un
semáforo, o por alguna otra razón. Para garantizar que ningún proceso se ejecute en un
tiempo excesivo, los ordenadores recurren a interrupciones generadas por el reloj y en cada
una de ellas el sistema operativo decide si el proceso que se ejecuta en ese momento tiene
permiso para continuar o si debe suspenderlo para dar el control a otro proceso.
6. MULTIPROGRAMACIÓN
1 Definición.
Se denomina multiprogramación a una técnica por la que dos o más procesos pueden alojarse
en la memoria principal y ser ejecutados concurrentemente por el procesador o CPU
En un sistema de este tipo, varios programas están presentes en la memoria central
simultáneamente. Uno solo de estos programas tiene, en un momento determinado, el control de
la U.C.P., pero su ejecución puede ser interrumpida en beneficio de otro programa con retorno
posterior al programa interrumpido (esto evita los tiempos muertos de la U.C.P.), en función de
una serie de criterios. Generalmente se produce cuando el programa que se ejecuta solicita una
operación de E/S, en cuyo caso el sistema operativo lo descarga de la unidad central y carga un
programa de la cola de espera, generalmente el de mayor prioridad.
2 Características.
La multiprogramación se caracteriza por dos aspectos fundamentales:
a. Mejor aprovechamiento de los recursos del sistema. Un programa emplea en un momento
determinado parte de estos recursos, como la U.C.P., parte de la memoria, la impresora,
etc. Si este programa se ejecutase solo, los demás recursos estarían inactivos, pero al
haber otros programas ejecutándose concurrentemente, estos podrán usar estos otros
recursos libres para las operaciones de E/S. En general cuanto mayor sea el número de
programas en ejecución mejor se utilizaran los recursos, si bien no se puede aumentar
indefinidamente el número de aquellos por razones de saturación de la memoria de
almacenamiento.
b. Mejor calidad de servicio ya que la multiprogramación interrumpe la ejecución de un
programa para que se ejecute otro de mayor prioridad.
3 Protección de memoria.
Como en multiprogramación existen varios usuarios que al mismo tiempo comparten la memoria
central, hay que prever todas las protecciones necesarias para que un usuario no pueda voluntaria
o involuntariamente:
• Destruir información en el sistema operativo o en los programas y datos de otros usuarios .
• Perturbar el funcionamiento de la máquina, como puede ser inhibir las interrupciones del
reloj en un sistema de tiempo compartido.
A este tipo de protección, indispensable para el buen funcionamiento del ordenador en
multiprogramación, se añaden a veces problemas de conservación del secreto; un usuario no deba
tener acceso a las informaciones confidenciales de otro usuario.
Una determinada información en la memoria central o auxiliar podrá tener tres niveles posibles de
protección:
1. Ninguna: podrá ser leída y modificada por cualquier usuario.
2. Protección de escritura: podrá ser leída por cualquier usuario, pero no modificada.
3. Protección de lectura: podrá se leída y modificada solamente por los usuarios autorizados.
4 Gestión de memoria.
La gestión de la memoria central en multiprogramación la asume siempre el sistema operativo, que
asigna la zona necesaria a los diferentes programas.
Como esta zona es limitada, existen restricciones, tanto acerca del número de programas que
pueden estar a la vez en la memoria central como sobre las dimensiones de dichos programas.
Las restricciones del número de programas se soluciona por medio del intercambio de programas
entre el disco y la memoria central, remplazándose unos a otros según las necesidades. A este
proceso se le conoce como paginación, swaping o roll-in roll-out.
La restricción debida a las dimensiones de los programas puede evitarse mediante la
segmentación.
En general, el programa es fraccionado en segmentos de los que, en un determinado momento de
la ejecución del mismo, solo uno o un número reducido de ellos estará implantado en memoria.
Esto reduce el tiempo de carga y descarga del programa en memoria, ya que no tendrá que copiar
el programa completo, tan solo la parte del mismo que se vaya a ejecutar en ese instante.
Cada segmento es una parte del programa independiente de las demás. Así cada programa o
segmento del programa se carga en una partición (pagina) que tiene los mecanismos de protección
necesarios.
5 Prioridad.
Un concepto importante en la multiprogramación es la «prioridad», que se puede definir como la
facilidad que tiene un programa para hacerse con la U.C.P. Un programa con mayor prioridad que
otro será procesado preferentemente y además será introducido en memoria para ser procesado
antes que el otro en caso de que estuvieran esperando.
En multiprogramación solo un programa tendrá la U.C.P. mientras que los otros pueden realizar
operaciones de E/S. Otros programas estarán a la espera de poder usar la U.C.P. Cuando el que
está cargado solicita realizar una operación de E/S, otro programa es cargado en su lugar, será el
que tenga mayor prioridad.
Igualmente los resultados serán transferidos al usuario según su prioridad, por lo que no se ve
obligado a esperar a que sea procesado todo el lote para obtener los resultados, los obtiene en
cuanto el programa se ha ejecutado.
6 Formas de realizar la multiprogramación.
a. MULTIPROGRAMACIÓN SIN INTERRUPCIÓN DE PROGRAMA.
Cuando un programa posee
el control, lo conserva hasta que termina o hasta que se ve obligado a realizar una
operación de E/S (entonces se carga el primero almacenado en la cola).El mayor
inconveniente de esta solución es que un programa de baja prioridad puede conservar el
control absoluto tanto tiempo como lo desee.
b. MULTIPROGRAMACIÓN CON INTERRUPCIÓN DE PROGRAMA.
El sistema operativo
recupera el control a través de mecanismos de interrupción, sobre todo, cada vez que
finaliza una operación de E/S, en ese momento busca el programa de mayor prioridad
entre los que esperan un resultado de E/S para cederle el control.
c. MULTIPROGRAMACIÓN A TIEMPO COMPARTIDO.
Su característica fundamental es la
distribución del tiempo de U.C.P. de forma planificada y cíclica entre los distintos usuarios.
A las interrupciones de E/S se superponen las interrupciones de reloj, que permiten
fraccionar el tiempo en porciones ¡guales cíclicamente atribuibles a los diversos usuarios.
La duración de los intervalos se calcula de tal forma que cada usuario tiene la impresión de
que el ordenador trabaja exclusivamente para el. En general, los programas no tendrán la
misma prioridad, por lo que el sistema tendrá que tenerlo en cuenta a la hora de repartir el tiempo de trabajo.
MULTIPROCESO.
La multiprogramación implica la ejecución de varias tareas por una sola U.C.P., por lo que
la ejecución es «concurrente». Un aprovechamiento muy grande de la U.C.P. puede
llevarnos a que al tener concurrentemente en memoria varios programas que pugnen por
utilizar la U.C.P. puede llegar a sobrecargarse la unidad de control, provocando una
ralentización en el proceso de los trabajos.
Cuando en una instalación informática aparece este problema, se hace necesario el
«multiproceso».
El multiproceso consiste en la ejecución simultáneamente de dos o más programas por
dos o más U.C.P.’s que comparten la misma memoria central, los mismos periféricos,
operando bajo el mismo programa de control (sistema operativo) y pudiendo cada uno de
ellos comunicarse con los otros, sin que exista ninguna intervención manual.
En general, se define multiproceso como técnica de utilización de un ordenador que posee
más de una U.C.P.
En un sistema multiproceso los periféricos son accesibles desde cualquier U.C.P. mediante
el empleo de conmutadores de canales que permiten conectar en cada caso un canal
concreto con la U.C.P. que lo solicita.
1 Ventajas del multiproceso.
a. Aumento de la eficacia.- Por un lado, esto se puede conseguir aumentando el
número de procesadores centrales (U.C.P.’s), lo que permite ejecutar mayor
número de trabajos simultáneamente (habrá que tener en cuenta en todo
momento la carga de trabajo de los periféricos y de la memoria).
De otro lado el aumento de la eficacia viene dado por la posibilidad de ejecutar ciertos
trabajos en procesadores periféricos ( especializados en labores específicas, como
gestión de E/S, control de periféricos, etc.) que permiten liberar de grandes cargas
de trabajo al procesador central. Es de observar que duplicar el procesador central
no hace duplicar la potencia del ordenador, ya que existen ciertas unidades
comunes que deben ser compartidas.
b. Aumento de la disponibilidad.- En un sistema con una sola U.C.P., el fallo de la
misma significa que no se tendrá disponible ninguna función hasta que se arregle
el fallo.
Con varios sistemas monoprocesadores independientes, cuando falla una de las
U.C.P.’s, la explotación se puede seguir realizando por las otras, pero al ser los
recursos exclusivos de cada U.C.P. baja el rendimiento de la flexibilidad.
En cambio, en un sistema multiprocesador todos los recursos están asignados a
todos los procesadores, por lo que ante el fallo de uno de ellos, el sistema no
pierde flexibilidad, ni implica una parada en la ejecución de la aplicación.
2 Inconvenientes del multiproceso.
A. Dificultades de comunicación.- Hay dos motivos por los que se producen estos
problemas, por un lado con ciertos acontecimientos pueden darse interrupciones
de procesador a procesador y por otro es posible que los distintos procesadores
del ordenador necesiten comunicarse a través de la memoria principal, a la cual
solo puede acceder uno en cada instante, debiéndose delimitar perfectamente el
momento en el que debe acceder cada uno.
B. Dificultades de interconexión.- Estos problemas surgen de la utilización conjunta
de una única memoria principal por más de un procesador. Algunas soluciones
son:
• Interconexión por líneas ómnibus: las líneas salen de los procesadores y
transmiten simultáneamente la información a los bloques de memoria.
• Interconexión matricial: en este caso es una matriz celular la encargada de realizar
la interconexión y que permite relacionar cada procesador con cada bloque de
memoria, cuando esto no cause un conflicto.
3 Tipos de multiprocesadores.
1. Multiprocesadores idénticos.- A este sistema también se llama «multiunidad
central». Está compuesto por varias U.C.P.’s idénticas compartiendo la misma
memoria central y los periféricos. Es la definición propia de «multiprocesador».
2. Multiprocesadores periféricos.- En este caso la memoria central es compartida por
uno o varios procesadores centrales que se encargan del procesamiento por lote
de los trabajos y por otros procesadores dedicados a trabajos concretos, como
control de periféricos, gestión de E/S …
3. Multiprocesadores descompuestos o virtuales.- Son aquellos equipos en los que
los distintos procesadores comparten entre si, no solo la memoria central sino
también alguna o todas de sus otras unidades (UAL y UC)
MULTIPROCESO SIMÉTRICO (SMP).
Consiste en unir varios procesadores en un mismo sistema, compartiendo la memoria, los
canales, unidades de E/S, te. En una arquitectura SMP existen varios programas (tareas)
ejecutándose físicamente a la vez, de forma que cada porción de un programa puede ser
ejecutado por diferentes procesadores. En las soluciones SMP, la CPU es un recurso más
del S.O., que se gestiona a base de colas como cualquier recurso más (memoria, unidades
de E/S, etc.). Para poder implementarse esta solución por parte del S.O. la arquitectura del
procesador tiene que tener instrucciones de control de la CPU, y el concepto de identidad
y propiedad del procesador, de tal modo que el S.O. pueda asignar el recurso a una tarea.
Las soluciones SMP están muy de actualidad hoy en día. Las limitaciones se encuentran
cuando se trata de interconectar un gran número de CPUs dentro de un sistema, y los
problemas vienen esencialmente por dos vías: el control de recursos y la coherencia de los
cachés.
El primer problema se refiere al hecho de que los recursos que son comunes a todas las
CPUs, hay que protegerlos cuando se actualizan. Si hay muchas CPUs, se produce un cuello
de botella a la hora de su uso.
El segundo problema es la coherencia de las cachés, el hecho de que una página de
memoria esté en el caché de una CPU (porque la está usando) plantea un problema de
coherencia cuando otra CPU intenta usar esa página de memoria, para solucionar este
problema, los multiprocesadores implementan algún mecanismo para mantener la
coherencia de esos caches, lo que constituye otro cuello de botella de los sistemas SMP.
El límite práctico de nivel de multiproceso de los SMP están en unos 16 procesadores por
sistema.
PROCESO MASIVAMENTE PARALELO (MPP).
Consiste en unir varios procesadores a través de un bus común, constituyendo cada uno
de ellos un sistema independiente con su propia CPU, su propia memoria, sus propias
unidades de E/S, etc., residiendo en cada procesador una copia del S.O. y manteniendo la
independencia los unos de los otros. Con esta arquitectura no se producen los cuellos de
botella que existen en los sistemas SMP. El cuello de botella radica en la capacidad de ese
bus común que comunica todas las CPUs, ahora bien, en general, puede conectarse un
mayor número de procesadores en un sistema MPP que en un sistema SMP. Los sistemas
MPP están empezando a aparecer de modo comercial y se tiene el sentimiento de que
serán el futuro de los grandes sistemas, aunque hoy en día existe muy poco software que
sea capaz de usarlos de un modo apropiado.
7. MULTITAREA
Un sistema operativo multitarea es aquél que le permite al usuario estar realizando varias
labores al mismo tiempo. Por ejemplo, puede estar editando el código fuente de un programa durante su depuración mientras compila otro programa, a la vez que está recibiendo correo
electrónico en un proceso en background.