0% encontró este documento útil (0 votos)
48 vistas40 páginas

2 Procesos

Este documento describe los conceptos fundamentales de procesos y ejecución concurrente de programas. Explica que un proceso es una instancia de un programa en ejecución y que la creación de procesos requiere la intervención del sistema operativo. También describe cómo la multiprogramación permitió la ejecución concurrente de varios programas compartiendo el mismo procesador, y cómo los sistemas multiproceso actuales permiten la ejecución paralela mediante múltiples núcleos en una CPU. Finalmente, resume las ventajas e inconvenientes de la ejec

Cargado por

mardaf8264
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
48 vistas40 páginas

2 Procesos

Este documento describe los conceptos fundamentales de procesos y ejecución concurrente de programas. Explica que un proceso es una instancia de un programa en ejecución y que la creación de procesos requiere la intervención del sistema operativo. También describe cómo la multiprogramación permitió la ejecución concurrente de varios programas compartiendo el mismo procesador, y cómo los sistemas multiproceso actuales permiten la ejecución paralela mediante múltiples núcleos en una CPU. Finalmente, resume las ventajas e inconvenientes de la ejec

Cargado por

mardaf8264
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc.

2-1

ADMINISTRACIÓN DE PROCESOS Y DEL PROCESADOR

PROCESOS

CONCEPTO DE PROCESO

En principio, un proceso es un programa en ejecución. Sin embargo, con más precisión, podemos decir
que:

Un proceso es una instancia de un programa, o de una parte de él en el trámite de ejecución en una


computadora, que el sistema operativo establece como un proceso. Puede haber dos o más procesos
que representen, cada uno, una instancia de la ejecución del mismo programa, o de una de las partes
de ese programa, en esa computadora; por otra parte, diferentes partes de un programa pueden, cada
una, dar lugar a un proceso diferente. Un programa en el trámite de ejecución es atendido por un
procesador (siendo ejecutado) en ciertos momentos; en otros tiempos puede estar inactivo.

La creación de un proceso requiere la intervención del sistema operativo, constituyéndose en una


entidad de ejecución relativamente aislada de otros procesos.

LA EJECUCIÓN DE LOS PROGRAMAS

Hasta a mediados del siglo pasado una computadora ejecutaba un programa y, al terminar, ejecutaba
el siguiente; las computadoras tenían una CPU o procesador que podía atender un sólo proceso a la
vez. Se formaba una línea de espera en la que cada retraso en la ejecución de un proceso afectaba al
resto de los procesos en la fila. Podemos hacer las siguientes observaciones:

• Cuando un proceso era atendido, si en ese momento se realizaban actividades de E/S, el


procesador estaría inactivo; tomemos en cuenta la lentitud de los dispositivos de E/S.
• Un proceso podría, a su vez, estar bloqueado por la necesidad de un recurso no disponible por
el momento, desperdiciando al procesador.
• Se producía una notable desatención a los últimos procesos en la fila de espera.

Se cambió la ejecución en serie de los programas por la multiprogramación, en la que varios


programas coexistían en la memoria para el trámite de su ejecución por el mismo procesador; eso
representó una mejora respecto a los 3 puntos mencionados. Incluso parecía que cada proceso tenía
una CPU a su disposición, por lo que la ejecución de los procesos se realizaba en un paralelismo
aparente, puesto que sólo había procesador. Notemos que concurrir significa "Reunirse o coincidir en
un lugar", por lo que se habla de ejecución concurrente cuando en la memoria principal hay más de
una tarea que puede ser ejecutada. La multiprogramación representó el primer origen de la
concurrencia, debido a que:

• Programas diferentes eran puestos en la memoria para el trámite de su ejecución.


Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-2

Aclaremos que el tiempo en que un proceso está en trámite de ejecución consta de los lapsos en que
el proceso está en ejecución y de los lapsos en que está en espera. En la figura siguiente se representa
la ejecución (concurrente) de 4 procesos en un procesador, los cuales pueden ser atendidos uno a
vez. En cada momento sólo un proceso usa al procesador.

Un programa puede tener más de una ejecución en un momento dado, con lo que se tiene el
segundo origen de la concurrencia:

 Varias copias de un programa están en la memoria, en el trámite de su ejecución.

Por otra parte, como hay programas que generan más de un proceso en la misma instancia de
ejecución, eso podría ser considerado como el tercer origen de la concurrencia:

 Una instancia de la ejecución de un programa genera más de un proceso.

EL MULTIPROCESO

Por algún tiempo, las computadoras tuvieron una CPU o procesador capaz de atender un solo proceso;
eran los monoprocesadores. La capacidad de cómputo se aumentaba con una creciente rapidez en
sus relojes, pero recientemente ha sido difícil aumentar esa rapidez, debido a dificultades físicas,
como la mayor generación de calor a mayor rapidez del reloj.

Por eso, se ha optado por colocar varios núcleos o procesadores en una CPU para lograr más
capacidad de cómputo; otra opción hubiera sido conectar varios procesadores separados, pero esto
no es muy común. Con las CPUs multinúcleo se obtiene el multiproceso o multiprocesamiento. La
figura muestra el esquema del chip de una CPU con un núcleo y de otra con dos núcleos; en esta
última se puede lograr la ejecución en paralelo (paralelismo efectivo).
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-3

El núcleo, en este caso, es un dispositivo; en inglés se dice core y significa algo interno. Por otra parte,
el núcleo, como sinónimo de sistema operativo, en inglés se dice kernel y significa una pepita o grano;
esto alude a una estructura del sistema operativo en capas.

Internamente, la CPU decide qué núcleo ejecuta un determinado proceso; también se pueden
establecer por el usuario o en el mismo proceso los núcleos que podrá usar ese proceso. A esto se le
ha llamado establecer la afinidad de un proceso a los núcleos. Por otra parte, si un proceso ha estado
usando un procesador, se produce una afinidad a ese procesador debido a los datos almacenados los
registros y en alguna memoria asociada a ese núcleo (que el sistema operativo detecta como un
procesador).

Aunque haya dos o más núcleos, puede también ser conveniente atender a los procesos, sólo por
lapsos de tiempo, siempre que el número de procesos sea mayor que el de los núcleos.

En la figura siguiente se representa una posible ejecución paralela de 4 procesos en una CPU con 2
núcleos. En cada momento, sólo 2 de los 4 procesos usan algún núcleo.

El tiempo de actividad de un proceso es, en principio, asignado por el sistema operativo; sin embargo,
puede ser que, antes de que concluya el tiempo de un proceso, éste sea desactivado para iniciar la
ejecución una rutina de servicio de una interrupción o porque el proceso, de momento, no esté
usando el procesador, sino otro dispositivo, como alguno de E/S.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-4

DIAGRAMA DE FLUJO EN LA MULTIPROGRAMACIÓN

Un diagrama de flujo, también llamado flujograma de procesos o diagrama de procesos, es una


representación gráfica de una secuencia de actividades mediante símbolos unidos con flechas; cada
símbolo representa cada una de las actividades involucradas. Enseguida se muestra un diagrama de
proceso representativo de la atención de los procesos involucrados en la multiprogramación por un
procesador; cada acción es representada por el lugar en donde se realiza.

Si el procesador tiene N núcleos, puede sustituirse en el diagrama el bloque del procesador por un
bloque con los núcleos, de modo que pueden ejecutarse, al mismo tiempo, el mismo número de
procesos (multiproceso). El diagrama mostrado también puede extenderse de otras formas:

1. El diagrama contiene una cola para los procesos bloqueados, pero puede extenderse si hay
varios tipos de recursos por los que los procesos esperen; se usaría una cola para cada tipo de
bloqueo. También se puede extender el diagrama por la espera de una condición, sin que haya
una cola.
2. Un proceso puede ser suspendido por solicitud del usuario u otro proceso. En este caso estaría
inactivo y en espera de ser reanudado.

También, tomemos en cuenta que, en cualquier momento, un proceso puede ser terminado.

ESTADOS DE LOS PROCESOS

Los diagramas de estado son una técnica conocida para describir el comportamiento de un sistema.
Describen todos los estados posibles en los que puede entrar un objeto particular y la manera en que
cambia el estado del objeto, como resultado de los eventos que lo involucran. Podemos representar
el diagrama anterior usando los siguientes estados:

- En ejecución (utilizando la CPU en ese instante).


- Listo (para ejecutarse, pero en espera de un núcleo disponible).
- Bloqueado (incapaz de ejecutarse hasta que obtenga el recurso necesario).
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-5

Podemos añadir, sólo como referencia, el estado de un proceso nuevo antes de su ejecución, o el
del proceso que ya terminó su actividad. La siguiente figura muestra un diagrama de estado para los
procesos.

Este diagrama se puede aumentar, como se mencionó en el diagrama de proceso, para expresar el
bloqueo por diferentes razones y el estado de Suspendido (a la espera de una señal). También pudiera
ser que un proceso debe ejecutarse por un procesador de un conjunto previamente designado de
procesadores; en ese caso, deberían añadirse estados de Listo diferentes, para cada conjunto de
procesadores autorizados para la ejecución.

VALORACIÓN DE LA EJECUCIÓN CONCURRENTE

La ejecución concurrente tiene las siguientes ventajas:


• Permite aprovechar los tiempos en que un proceso no utiliza el procesador que lo está
atendiendo; el procesador puede asignarse a otro proceso.
• Mejora el tiempo de respuesta a cualquier proceso, al no tener que esperar que los procesos
anteriores ejecuten completamente.
• La ejecución puede realizarse en paralelismo efectivo para tantos procesos como
procesadores; el resto de los procesos ejecutarán en paralelismo aparente.
• Puede facilitar la programación cuando se dividen las aplicaciones en varios procesos, que es
el objetivo de la modularidad.
• Permite una mejor utilización de la memoria, cuando ésta es de suficiente tamaño y puede
albergar varios procesos.

Pero también hay desventajas:


• Aumenta la complejidad en la operación de la computadora, por lo que la administración de
los procesos se complica, según se mostrará de diferentes formas en este capítulo y en los
siguientes.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-6

• También se debe tomar en cuenta la mayor complejidad de los programas, tanto para dividir
el trabajo en una aplicación como para integrar finalmente las partes resultantes.
• El cambio de la atención de un proceso a otro representa una sobrecarga de trabajo, puesto
que se debe desalojar un proceso de la CPU, antes de terminar, para incorporar a otro, el cual
también podrá ser desalojado antes de terminar. Ese trabajo extra no era necesario cuando
se ejecutaba un proceso ininterrumpidamente hasta terminar.
• Un proceso puede requerir la ejecución en serie, esto es, el código puede impedir que la
ejecución sea en paralelo.

Todo lo anterior aplica también a los hilos de un mismo proceso, los cuales se describen más adelante.

IMPLEMENTACIÓN DE LOS PROCESOS

El sistema operativo puede construir una tabla de procesos en la memoria; contiene una lista de los
procesos admitidos para ejecución y una referencia a la imagen de cada proceso, la cual contiene lo
necesario para la ejecución. En la siguiente figura se muestra un modelo de la implementación de los
procesos; nótese que cada proceso es relativamente independiente de los demás. Como ejemplo, el
denominado Proceso 2 está en ejecución.

La imagen de cada proceso consta de lo siguiente:

• El código del proceso (programa).


• Los datos usados por el proceso, incluyendo las variables globales.
• La pila de ejecución.
• El bloque de control de proceso (BCP):
a) Datos de identificación del proceso. Incluye el identificador del proceso (PID: Process ID) y
el identificador del proceso que lo generó (PPID: Parent Process ID).
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-7

b) Datos del estado del procesador. Incluye el contenido de los registros cuando el proceso
fue desalojado de una CPU. Si el proceso está ejecutando, el procesador contiene su estado
actual.
c) Datos de control del proceso. El estado del proceso y, si está bloqueado, datos referentes
al evento que el proceso espera, identificación de los hijos y de otros procesos relacionados
con el proceso en cuestión; además, los recursos a los que el proceso tiene acceso.

Cada proceso ejecuta por el tiempo preasignado (o hasta que haya una interrupción o le falte un
recurso necesario); luego, si no ha terminado de ejecutar, es desalojado de la CPU, cuyo contenido es
respaldado en el bloque de control de proceso hasta que ese proceso sea reinstalado en la CPU.

Cuando un proceso continúa su ejecución, el contenido de los registros es copiado a la CPU; junto con
el contenido de la pila y los demás valores almacenados en la RAM, el proceso recupera las
condiciones en las que se encontraba cuando fue desalojado.

VIDA DE LOS PROCESOS

Brevemente, podemos decir que un proceso es creado, se ejecuta hasta completarse (aunque sea en
diferentes lapsos de tiempo) o hasta que sea terminado porque se detecte algún error o por alguna
otra razón.

Un proceso puede crearse en los siguientes casos:

1. Inicialización del sistema operativo.


2. Ejecución de una llamada al sistema para crear procesos por parte de un proceso existente, como
parte del propósito de este proceso o a instancias de un usuario.

Daremos más detalles entre la creación de un proceso y su terminación. Primeramente, es posible


que un proceso inicie otros procesos, llamados procesos hijos; estos, a su vez, podrían iniciar otros
procesos, describiendo un árbol de procesos. Vea la figura.

En Windows, un proceso padre recibe una referencia (handle) con la cual puede controlar al hijo; sin
embargo, puede pasar esa referencia a otro proceso, con lo cual se pierde la jerarquía original. Los
procesos System y System Idle Process no tienen padre; un usuario puede encargarle a [Link]
que se ejecuten diversos programas, por lo que puede tener muchos hijos. Algún proceso puede ser
hijo de un padre identificado pero desaparecido.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-8

La siguiente figura muestra cómo el padre da lugar al hijo; puede ser que ambos continúan por su
parte, como se muestra en la primera figura, o que el padre espere la terminación del hijo, según se
muestra en la segunda figura. En este último caso, el proceso padre incluye, en algún lenguaje el inicio
(tal vez start()) y la espera (tal vez join()) de la terminación del hijo.

Un proceso será creado para realizar alguna de las siguientes tareas:

• Un nuevo proceso puede hacer el mismo tipo de actividad que el padre, pero de forma
"simultánea" con la del padre; puede "extender al padre". Por ejemplo, en un esquema
cliente-servidor cuando se desea monitorear posibles conexiones mientras se trabaja con las
conexiones que ya se tienen. Se genera un conjunto de procesos (el padre y los hijos); si alguno
de ellos es bloqueado o suspendido, algún otro puede ejecutar, mejorando el rendimiento.
Sin embargo, la creación de varios procesos puede sobrecargar el uso de recursos, como la
memoria.
• Un nuevo proceso puede hacer cosas diferentes a las que hace el padre. Un ejemplo en
Windows el proceso [Link], el cual gestiona la interfaz gráfica de usuario y permite abrir
diversos programas; estos últimos tendrán tareas generalmente diferentes.

Un proceso padre puede terminar, aunque el proceso hijo siga en ejecución; por ejemplo, podemos
terminar [Link] y sus descendientes seguirán ejecutando.

PRÁCTICA

1. Use Autoruns (de Sysinternals) para determinar los procesos que se inician cuando Windows
arranca, con lo que se aumenta la carga de trabajo. Puede optar por ejecutarlo como administrador
y desmarcar algún proceso para que no se ejecute cuando inicia Windows.

2. Administrador de tareas. Observe la lista de procesos y su PID.


Elija Detalles y determine en qué procesadores puede ejecutar algún proceso.

3. Use procexp para examinar los procesos en ejecución:


Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-9

Determine el PID de algún proceso y el de su padre. Verifique la relación padre-hijo examinando el


árbol de procesos y aplicando Propiedades al presunto hijo.
Examine el listado de procesos ordenado por el PID.
Determine en qué procesadores puede ejecutar algún proceso.
Suspenda la ejecución de un proceso y reanúdela.
Termine la ejecución de algún proceso no indispensable.
Verifique algunos aspectos del Administrador de tareas también están contenidos en procexp.
*Elija un proceso de cómputo intensivo, asígnele afinidad con un procesador y monitoree el
desempeño de ese procesador en Monitor de recursos-CPU del Administrador de tareas.

4. Intente verificar, para programas existentes, la definición de proceso con sus variantes, según
aparece en la página 1.
* Repita lo anterior pero primero elabore las aplicaciones necesarias.

5. Use [Link] para examinar la captura (anotación) de la actividad de los procesos: Permita
que la pantalla se desplace hacia abajo.
Borre las capturas existentes.
Interrumpa la captura de la actividad.
Guarde las anotaciones en un archivo de texto en forma de tabla (CSV).

6*. Elabore aplicaciones, separadamente, que actúen sobre otro proceso: que soliciten la creación de
otro proceso con el código de un programa aparte, que lo suspendan y reanuden, que establezcan su
afinidad con los procesadores y que lo terminen.

LOS PROCESOS MULTIHILO

Un hilo es una instancia de la ejecución de ciertas instrucciones de un programa como parte de un


proceso; un hilo se establece como tal por el sistema operativo. También se le llama hilo de ejecución,
hebra (thread), subproceso o proceso ligero. Un hilo puede representarse de las siguientes formas; la
última muestra la secuencia de instrucciones ejecutadas.

Un proceso puede llegar a tener más de un hilo; ese proceso sería multihilo. Un hilo es la secuencia
básica de instrucciones que el sistema operativo puede programar para su ejecución. Incluye un
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-10

identificador (thread ID), el contenido de los registros (el contador del programa, entre otros). Un
proceso puede tener uno o más hilos, pero cada hilo está incluido en un solo proceso.

Los hilos dentro de un proceso pueden compartir, si se requiere, recursos del proceso tales como el
código, datos y los archivos abiertos. La siguiente figura muestra, en forma simplificada, la ejecución
de un proceso con un hilo y de otro con dos hilos; en este último, muestra que los hilos podrían
compartir código, datos y archivos, pero no pueden compartir la pila y los registros. Cada hilo tiene
asignado para sí un bloque de la memoria dentro del espacio asignado al proceso correspondiente.

El proceso sigue en ejecución mientras al menos uno de sus hilos de ejecución siga activo. El proceso
finaliza si, y sólo si, todos sus hilos de ejecución también han terminado.

En un proceso multihilo podemos identificar un hilo primario o principal, el cual se inicia cuando se
inicia el proceso; ese hilo inicia la ejecución de uno o más hilos (secundarios), los cuales, a su vez,
podrían iniciar otros hilos. En algún lenguaje, se inicia otro hilo llamando a start(); vea la figura.

A su vez, los hilos 2 y 3 arriba mostrados podrían generar otros hilos; se produce una estructura
jerárquica (árbol), similar a la figura de la página 7. Tomemos en cuenta las figuras de la página 2, en
relación a que los hilos se encuentran en el trámite de ejecución aunque, en un momento dado,
solamente están en ejecución aquellos que disponen, cada uno, de un procesador.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-11

Puede establecerse que el hilo primario espere a que el hilo secundario termine para que se una con
el hilo primario; en algún lenguaje, eso se obtiene cuando el primer hilo llama a join(). En algún
lenguaje esto se considera una terminación normal de los hilos. Vea la figura.

Las figuras anteriores muestran que más de una actividad podría realizarse al mismo tiempo,
dependiendo de la disponibilidad de los procesadores y de otros factores.

La multiplicidad de hilos de un proceso sería el cuarto origen de la concurrencia:

• En la memoria residen diversos hilos de un mismo proceso, cada uno de los cuales demanda que
un núcleo lo atienda para que pueda ejecutarse.

Adicionalmente, algunos núcleos pueden ejecutar dos hilos del mismo proceso, aunque tal vez el
desempeño no sea el doble del caso de núcleos con un hilo; esto se conoce como Hyper Threading
(Intel) o Simultáneos Multi Threading (SMT en AMD). En Windows, si el núcleo maneja un hilo es
detectado como un procesador lógico; si maneja dos hilos es detectado como dos procesadores
lógicos.

Por ahora, no parece útil la construcción de núcleos que manejen más de dos hilos, debido a la
complejidad involucrada en el diseño.

UTILIDAD DE LA PROGRAMACIÓN MULTIHILO

La multiplicidad de los hilos tiene las mismas ventajas (y desventajas) que la multiplicidad de procesos
expuestas en las páginas 5. Un hilo es creado para realizar uno de los tipos de tarea según se explicó
en la página 8 para los procesos.

Debemos tomar en cuenta que los procesos usan espacios separados en la memoria, mientras que los
hilos de un mismo proceso se encuentran en el espacio asignado al proceso; parte de ese espacio es
usado separadamente por cada hilo, aunque los hilos podrían compartir algún código o datos. Por
eso, la creación de nuevos hilos tiene las siguientes ventajas respecto a la creación de nuevos
procesos:
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-12

• Los hilos de un proceso se comunican más fácilmente entre sí que los procesos, por lo que en
algunos programas, como los juegos, puede preferirse crear más hilos en un proceso que crear
nuevos procesos.

• Al ser más ligeros que un proceso, es más fácil crearlos, ponerlos en ejecución o suspenderlos;
también es más fácil terminar los hilos.

Sin embargo, la existencia de procesos multihilo complica aún más la administración de los procesos.

EJEMPLO DE PARALELISMO

Supongamos que se desea obtener el producto interno x · y para los vectores

Podemos partir la tarea en 2 partes y encomendar una parte a cada uno de dos hilos H1 y H2, según
se muestra:
H1: s1 = 5(6)+3(9); H2: s2 = 12(1)+4(2).

Finalmente, debemos integrar los resultados parciales para el resultado final


x · y = s1+s2

PRÁCTICA

1. Desarrolle aplicaciones multihilo e inspeccione su ejecución:


Investigue si la ejecución de los hilos se desarrolla en paralelo.
Note los procesos que requieren al hilo primario esperar la terminación de los demás.
2. Verifique el número de núcleos que están siendo usados y si pueden manejar dos hilos cada uno.
Utilice el Administrador de tareas y alguna utilería como CPU-Z.
3. * Utilice el comando msconfig y elija Arranque-Opciones Avanzadas para fijar el número de
procesadores que serán usados a partir del próximo inicio del sistema operativo.

VARIANTES DE MULTIPLICIDAD DE PROCESOS E HILOS

Enseguida se muestran ejemplos de diferentes entornos de ejecución de los sistemas operativos;


puede apreciarse que la evolución de los sistemas operativos da lugar a la correspondiente evolución
en la programación.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-13

Respecto a los lenguajes de programación, algunos tienen características de diseño expresamente


creadas para permitir a los programadores lidiar con hilos de ejecución (como Java o C#). Otros
desconocían originalmente la existencia de hilos de ejecución; los hilos adicionales deben ser
creados mediante llamadas de alguna biblioteca creada posteriormente.

COMPLEJIDAD DE LA ADMINISTRACIÓN DE PROCESOS

La ejecución concurrente de los procesos complica la administración de los procesos puesto que
permite diversas situaciones que no se presentaban en los sistemas operativos monotarea. Surgen las
necesidades siguientes:

• Sincronización. La ejecución concurrente puede requerir que los hilos sean sincronizados.
• Comunicación. Se debe permitir a los hilos comunicarse entre sí; la comunicación es necesaria
para la sincronización, por ejemplo.
• Atención a los bloqueos. Un hilo puede bloquear a otros; además, un grupo de procesos
pueden bloquearse entre sí.
• Administración de los procesadores (o núcleos). Se debe establecer qué hilo utilizará algún
procesador y por cuánto tiempo.
• Administración de la memoria. Se debe establecer cuánta memoria se asignará a un proceso
y por cuánto tiempo. El tema de la memoria se tratará en el siguiente capítulo.

SINCRONIZACIÓN DE PROCESOS E HILOS

INTRODUCCIÓN

Considere los hilos de ejecución según se muestra en la figura; pueden corresponder a procesos
diferentes o al mismo proceso (multihilo). Lo que se plantea es cómo será el desarrollo de las acciones.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-14

La primera consideración es si los hilos son:

• Independientes: La ejecución de uno no influye en la ejecución del otro; es el caso más simple.
• Cooperativos: La ejecución de uno sí influye en la ejecución del otro.

En el segundo caso, los hilos tienen un asunto en común, según se muestra.

Uno de estos casos es aquel en que el primero espera a que el segundo termine y se reúna con él. Por
otra parte, no está claro qué tan rápido puede ejecutar un hilo respecto al otro. En general, podemos
decir que el resultado de la ejecución de un proceso dependerá del avance relativo de cada rama, el
cual puede ser diferente en cada ejecución; es lo que se llama una condición de carrera.

La condición de carrera se refiere a:


 Cuáles partes de una rama se ejecutan primero respecto a las de otra(s).
 La incertidumbre del resultado en una ejecución cualquiera.

Pero incluye la noción de intromisión de un hilo en la actividad de otro(s), lo que puede producir
resultados inesperados.

El progreso en la ejecución de cada rama depende de varios factores entre los que se incluyen la
naturaleza de la actividad de cada rama y de la disponibilidad de los recursos que tiene cada una. Esta
condición se presentó con la multiprogramación original, pero se hizo más importante en la ejecución
paralela, cuando aparecieron las CPUs multinúcleo.

Los resultados inesperados pueden constituir un problema; para evitarlo, la ejecución concurrente de
los hilos puede sincronizarse.

PRÁCTICA

Elabore un programa multihilo en el que se manifiesten los efectos de carrera entre los hilos;
introduzca retrasos para modificar las condiciones de ejecución.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-15

La sincronización consiste en ajustar en el tiempo la realización de diversos eventos. Una alternativa


podría ser ajustar la actividad de cada evento según un dispositivo que hace las veces de reloj; otra
alternativa el ajuste de la actividad de cada evento en el tiempo respecto a los demás eventos. En la
administración de procesos, debemos ampliar el concepto de sincronización, de modo que incluya la
realización de eventos tanto en tiempos iguales como en tiempos diferentes.

En particular, la sincronización de hilos puede requerir que porciones de ellos ejecuten:

• En tiempos diferentes, sin traslape, no importando el orden en que ejecuten. Tenemos como
ejemplo la solución al problema de la sección crítica, que describiremos casi enseguida.
• En tiempos diferentes, sin traslape, pero en un orden preestablecido. Mostraremos más
adelante cómo puede establecerse un orden en la ejecución.

EL PROBLEMA DE LA SECCIÓN CRÍTICA

En la vida diaria, tenemos situaciones en las que la actividad concurrente puede tener un resultado
inesperado. Por ejemplo:

• En una juguetería, el empleado atiende al cliente A cuando se llega al punto en que ese cliente
pregunta al empleado si tiene un osito de peluche, a lo que el empleado responde que sí.
• El empleado, que ha notado la espera del cliente B, se dirige a este último, desatendiendo al
cliente A. El cliente B pregunta al empleado si tiene un osito de peluche y después que el
empleado responde afirmativamente, decide comprarlo y se retira del comercio. El osito de
peluche vendido era el último en existencia.
• El empleado nuevamente atiende al cliente A, quien le indica que desea comprar el osito de
peluche por el que ha preguntado. El empleado responde que no tiene ningún osito en
existencia.

Representemos la atención a cada cliente de la siguiente manera.

Cliente A Cliente B
Preguntar si hay osito. Preguntar si hay osito.
Si hay osito, comprarlo. Si hay osito, comprarlo.

La ejecución, sin haber sincronización, puede realizarse según se muestra a continuación, tomando
en cuenta que el empleado puede asignar un tiempo al cliente A y después pasar al cliente B;
después, volverá a atender al cliente A.

Cliente A Cliente B
Preguntar si hay osito.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-16

… Preguntar si hay osito.


… Si hay osito, comprarlo.
Si hay osito, comprarlo. ¿?

Situaciones de este tipo plantean, en la ejecución concurrente, un problema de sincronización llamado


problema de la sección crítica (o región crítica). La sección crítica es una parte del código de cada hilo
involucrado tiene acceso a memoria o archivos compartidos, o realiza actividades que producen una
condición de carrera.

El problema consiste en la ejecución concurrente de la sección crítica de dos hilos con un posible
resultado no previsto. En este caso, se trata de la concurrencia que aparece en la multiprogramación,
en la que hay un solo procesador. La solución implica sincronizar la actividad de cada hilo de modo
que se eviten los resultados indeseables.

LOS RESULTADOS INDESEABLES Y LA SOLUCIÓN

Ejemplo de la vida común

La solución consiste en sincronizar las actividades de atención a cada cliente de modo que se realicen
en tiempos diferentes, sin importar el orden. Enseguida se muestra una posible solución:

Cliente A Cliente B
Preguntar si hay un osito. …
Si hay el osito, comprarlo. …
Preguntar si hay un osito.
Si hay el osito, comprarlo.

De esa manera, no se daría el resultado inesperado para el Cliente B de ser rechazada su compra
después de que se le había dicho que sí había ese osito en existencia. De forma similar, el resultado
inesperado no se daría si se atendiera al Cliente B completamente antes de atender al Cliente A.

En la computadora

La ejecución intercalada de hilos que acceden a la misma variable puede producir una condición de
carrera que podría conducir a un resultado inesperado. Consideremos el caso de dos hilos A y B, en
una computadora con un solo procesador, según se muestra en la figura.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-17

El hilo A está siendo ejecutado pero en t=t1 se cambia la ejecución a B para reanudar la ejecución de
A en t=t2; en t3 la ejecución pasa al hilo B.

El problema se puede producir aun en porciones de código mínimas; como ejemplo consideremos los
hilos Ha y Hb que acceden a la variable común cont cuyo valor es 5; Ha incrementa en 1 el valor del
contador (cont=cont+1) pero Hb lo disminuye en 3 (cont=cont-3). Parece lógico pensar que si se
permite actuar a ambos hilos, entonces el valor del contador quedará en 3. Esto es cierto si los hilos
se ejecutan secuencialmente, primero uno de ellos completamente y luego el otro. Sin embargo, si se
permite la ejecución concurrente de los procesos, el valor puede ser 2 o 6.

La ejecución de cada una de esas instrucciones a bajo nivel no es atómica: consta de varias actividades.
En una CPU los datos se encuentran almacenados en registros y las operaciones se llevan a cabo por
la ALU. Para nuestro ejemplo usaremos los registros, reg1 y reg2, aunque, si se trata de una CPU con
un procesador, puede tratarse del mismo registro en ambos casos.

Ha: Ubicación de la acción Hb:


reg1=cont De la memoria a la CPU reg2=cont
reg1=reg1+1 En la CPU reg2=reg2-3
cont=reg1 De la CPU a la memoria cont=reg2

Enseguida se muestra cómo la ejecución concurrente de Ha y Hb puede resultar en que la variable


cont quede con el valor de 3 o de 6, según el caso.

Ha Hb reg1 reg2 cont Ha Hb reg1 reg2 cont


5 5
reg1=cont 5 reg1=cont 5
reg1=reg1+1 6 reg2=cont 5
cont=reg1 6 reg2=reg2-3 2
reg2=cont 6 cont=reg2 2
reg2=reg2-3 3 reg1=reg1+1 6
cont=reg2 3 cont=reg1 6
Ejecución compacta de cada hilo Ejecución intercalada
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-18

Tanto en las computadoras con varios núcleos como en los multiprocesadores, la actividad de
diferentes hilos, sean de un mismo proceso o de diferentes procesos, puede llevarse a cabo
simultáneamente. Claramente, la posibilidad de que un hilo influya en la actividad de los demás
aumenta cuando acceden a valores comunes. Considere el ejemplo de la juguetería con dos
vendedores atendiendo cada uno un cliente; la posibilidad de resultados inesperados aumenta por la
actividad simultánea de los vendedores accediendo a los mismos juguetes. Considere que un
vendedor se dirige a traer el juguete mientras que otro ya tiene posesión de él.

Este problema no se presentaba en las etapas iniciales de los sistemas operativos, puesto que cada
proceso ejecutaba completamente antes que cualquier otro.

En el caso mostrado, la actualización del contador constituye el segmento llamado sección crítica o
región crítica, y su ejecución por parte de un hilo debe excluir la ejecución de la sección crítica
correspondiente a cualquiera de los demás hilos, puesto que se modifica un dato común. Por otra
parte, cualquier segmento restante o independiente de los procesos, en el que no modifican datos en
común, la actividad de cada proceso podrá desarrollarse sin restricciones.

Podemos simplificar nuestra discusión, representando un hilo en dos tipos de segmentos:

• Sección crítica
• Sección restante

Puede haber múltiples instancias de cada tipo. Como una ilustración, presentaremos un esquema de
la solución al problema de la sección crítica que incluye un segmento de cada tipo.

• Sección crítica.
- Esperar a que se asegure la ejecución exclusiva del hilo.
- Ejecutar su sección crítica.
- Permitir a otro hilo ejecutar su sección crítica.
• Sección restante.
- Ejecutar esta sección sin ninguna restricción.
MECANISMOS DE SINCRONIZACIÓN CON DOS OPERACIONES

Estos mecanismos pueden resolver el problema de región crítica y algunos otros. Contienen dos
operaciones, con diversas metáforas o modelos, entre las que se encuentran las fichas, los semáforos
binarios y los cerrojos.

FICHA

Podemos establecer una ficha (permiso) tal que, en la ejecución concurrente, sólo pueda continuar
su ejecución el hilo que la tenga. La sincronización usa la variable Ficha, la cual puede tener uno de
los valores Usada y Libre; se lleva a cabo con dos operaciones primitivas e indivisibles:
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-19

• Adquiere(Ficha). El hilo que ejecuta Adquiere() obtiene la ficha que le da derecho a proseguir.
Primero debe esperar a que la ficha esté en Libre; cuando ya lo está, se apropia de ella,
poniéndola en Usada para impedir la ejecución a otros hilos.
• Libera(Ficha). Libera la ficha, permitiendo que algún otro hilo pueda tomarla.

SEMÁFORO BINARIO

El semáforo es el mecanismo más conocido, muy parecido al de la ficha pero inspirado en los
semáforos que controlan el tráfico en las calles, de los que toma su nombre; un semáforo permite a
un cierto número de hilos acceder a un determinado recurso. Presentaremos una versión simplificada,
denominada semáforo binario, el cual permite a un solo hilo el acceso a determinados recursos.
El semáforo tiene la variable Paso que puede tomar uno de los valores Rojo y Verde; tiene dos
operaciones, consideradas indivisibles, que llamaremos Adquiere() y Libera(), las cuales constituyen
dos puntos de sincronización.
• Adquiere(Paso). El hilo que ejecuta Adquiere() obtiene el derecho a proseguir. Primero espera
a que Paso esté en Verde; cuando ya está en Verde lo pone en Rojo para impedir la ejecución
a otros hilos.
• Libera(Paso). Pone Paso en Verde, por lo que alguno de los demás hilos puede tomar el control
del semáforo.

EL CERROJO

El cerrojo es un objeto Obj que tiene dos operaciones primitivas, consideradas indivisibles, que
llamaremos [Link]() y [Link](), las cuales constituyen dos puntos de sincronización.

• [Link](). El hilo que ejecuta [Link]() espera a que el cerrojo esté abierto y luego lo
cierra, impidiendo que cualquier otro proceso continúe su ejecución.
• [Link](). Se encarga de abrir el cerrojo, con lo que alguno de los demás hilos puede
continuar su ejecución.

SINCRONIZACIÓN DE UNA SECCIÓN CRÍTICA

El resultado inesperado en una sección crítica se evita impidiendo que la ejecución concurrente de los
hilos se entrelace. Eso se logra mediante la ejecución secuencial (exclusión mutua) de los hilos durante
la sección crítica, esto es, sólo un hilo ejecutará la sección crítica a la vez, aunque haya varios
procesadores disponibles. En este último caso, la inactividad de uno o más procesadores aumenta el
tiempo de ejecución pero garantiza los resultados esperados de una ejecución.

Se muestra la sincronización de una sección crítica con dos mecanismos.


Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-20

Ficha Cerrojo
Adquiere(Ficha) [Link]()
Sección crítica Sección crítica
Libera(Ficha) [Link]()

Sección restante Sección restante


PROBLEMAS DE LA SINCRONIZACIÓN CON DOS OPERACIONES PRIMITIVAS

Explicaremos el problema en términos de las fichas. El programador que utilice fichas para sincronizar
hilos, debe ser cuidadoso. Por ejemplo, si el programador omite Libera(Ficha) después de la sección
crítica, otros hilos pueden estar detenidos indefinidamente, en una condición llamada inanición
(como un símil de la condición alimenticia); en este caso se dice que el hilo bloquea a los demás. Esto
corresponde a un primer caso de bloqueo, mencionado anteriormente.

Como ejemplo, suponga que el hilo H1 ejecuta su sección crítica pero no libera la ficha. Los hilos H2 y
H3, que esperan por la ficha para continuar su ejecución, no podrán obtener esa ficha. Se establece
una relación: la espera, por tiempo indefinido, de H2 y H3 para que H1 libere la ficha. La figura
representa esa situación.

Por otra parte, si el programador omite poner Adquiere(Ficha) antes de una sección crítica, puede
irrumpir en la ejecución de la sección crítica de otro hilo. Enseguida presentamos otro ejemplo de
error; utiliza dos fichas tentativamente en la forma mostrada.

Hilo 1 Hilo 2
Adquiere(Ficha1)
Adquiere(Ficha2)
Adquiere(Ficha2)
… Adquiere(Ficha1)

El hilo 1 ejecuta Adquiere(Ficha1) y luego el hilo 2 ejecuta Adquiere(Ficha2). Los hilos esperarán
indefinidamente puesto que ni el hilo 1 puede ejecutar Adquiere(Ficha2) ni el hilo 2 puede ejecutar
Adquiere(Ficha1). En este caso los hilos se bloquean mutuamente; esto es parte de un tema que será
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-21

tratado más adelante, pero adelantemos que hay una relación circular de espera, según se muestra
en la figura.

MONITORES

Son estructuras de datos abstractas que operan al estilo de las cajas negras, en el sentido de que se
les puede ordenar que realicen una actividad, pero sin decirles cómo hacerlo.

Los hilos pueden llamar a los procedimientos de un monitor siempre que quieran, pero solo se les
permite ejecutar individualmente; por lo tanto, si el monitor tiene un hilo activo, los demás hilos que
deseen ejecutar en el monitor deben esperar para, a su vez, poder ejecutar en forma exclusiva.

Puede ordenarse la exclusión mutua de un bloque de código, aplicando:

Asegura (Objeto)
{ SC } // Esto es lo que se permite ejecutar a un hilo a la vez

El bloque puede ser un método o una porción de código. Este mecanismo de sincronización se aplica
una sola vez sobre el código involucrado, que es más simple que aplicar Adquiere-Libera de otros
mecanismos.

IMPLEMENTANDO LA SINCRONIZACIÓN

Los semáforos, los cerrojos y los monitores constituyen modelos de sincronización, pero pueden
usarse efectivamente cuando están soportados por el lenguaje de programación en el que se
desarrolla la aplicación. Para que sean efectivos los semáforos o los cerrojos, deben tener operaciones
primitivas indivisibles.
Supongamos que un programador implementa las operaciones del modelo de la ficha de la
siguiente manera:

Adquiere(Ficha) Libera(Ficha)
Mientras (Ficha = Usada); Ficha = Libre
Ficha=Usada

Enseguida ilustramos cómo falla un mecanismo de exclusión mutua implementado por el


programador, suponiendo una computadora de un procesador:
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-22

• El hilo H1 ejecuta Adquiere(Ficha); espera a que Ficha esté en Libre pero, antes de ponerla en
Usada, la ejecución se cambia al hilo H2.
• H2 inicia la ejecución de Adquiere(Ficha). Al notar que Ficha está Libre, la pone en Usada y
ejecuta una parte de su sección crítica SC2, que llamaremos SC2a, pero la ejecución cambia a
H1.
• P1 piensa que Ficha está Libre, la pone en Usada y prosigue a la ejecución de su sección crítica
SC1. De ese modo, las ejecuciones de los hilos ya se han intercalado. Vea la tabla.

Hilo H1 Hilo H2
Mientras Ficha=Usada; // Espera turno
// Ficha queda libre pero la ejecución Mientras (Ficha=Usada);
// pasa al hilo 2
Ficha=Usada
// El hilo "adquiere" la ficha por error SC2-1 // Parte 1 de sección crítica
Ficha=Usada // La ejecución pasa al hilo 1
SC1
… SC2-2 // Parte 2 de sección crítica
….

Claramente, la intromisión sería más probable en el caso de máquinas de dos o más procesadores.
Otro asunto a considerar es que si la espera se implementa con un ciclo (while) que constantemente
monitorea la condición del permiso para proseguir, se consume una cantidad considerable de tiempo
de CPU; se recomienda bloquear el hilo para la espera y desbloquearlo cuando la espera concluya.
Este último enfoque es el que usan algunas implementaciones del semáforo.
Consideraremos ahora algunos mecanismos de sincronización de hilos soportados por lenguajes de
programación comunes.

El lenguaje C++ (en la versión 2011 y subsecuentes), implementa el mecanismo del cerrojo con hilos;
contiene el objeto mutex (que llamaremos Obj, el cual puede asegurarse con un cerrojo e
implementar lo siguiente:

- [Link]() espera a que el cerrojo esté abierto para poder continuar la ejecución del hilo que lo
invoca; entonces, cierra el cerrojo para que los demás hilos con lock() se detengan
momentáneamente.
- [Link]() es usado por el hilo para abrir el cerrojo.

En Java se puede importar la biblioteca:

import [Link];
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-23

y luego definir un cerrojo en una clase con:

ReentrantLock cerr = new ReentrantLock();

Después, se pueden usar [Link](); y [Link](); para proteger una sección crítica.

También se puede importar la biblioteca:

import [Link];

y luego definir un semáforo con un permiso en una clase con:

Semaphore sem = new Semaphore(1);

Después, se puede proteger una sección crítica con

try{[Link]();} catch(InterruptedException e){}


{ // Sección crítica
.... }
[Link]();

Por otra parte, Java permite controlar la ejecución de métodos (procedimientos) en una clase.
Añadiendo la palabra reservada synchronized a la declaración de un método, Java garantiza que una
vez que un hilo comienza a ejecutar ese método sobre un objeto, no se le permite a ningún otro hilo
comenzar a ejecutar ese método o cualquier otro método synchronized de ese objeto. Enseguida se
muestra un ejemplo simple de métodos sincronizados.

public class Contador {


private int c = 0;
public synchronized void aumentar() { c++;}
public synchronized void disminuir() { c--;}
public synchronized int valor() { return c;} }

En Java, también se puede aplicar synchronized a una porción de código usando

synchronized (this)
{ // Sección crítica
.... }

En C# se puede implementar un bloque como sección crítica con lock(), según se muestra.

lock (this)
{ // Sección crítica
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-24

.... }

Finalmente, Python tiene la clase [Link] que implementa un cerrojo mediante sus métodos
acquire(), para obtener el cerrojo y release(), para liberar el cerrojo. Además, Python tiene la clase
[Link](N) que permite la ejecución de N hilos; con N=1 se trata de un semáforo binario.
Tiene los métodos acquire(), para obtener el paso y release() para liberar el paso.
LA SECCIÓN CRÍTICA Y LA EFICIENCIA

Una de las razones para la concurrencia es la mejor utilización del equipo, considerando la posible
ejecución paralela de los hilos. Sin embargo, en la porción de la sección crítica, la ejecución es serial,
porque sólo un hilo puede ejecutar a la vez; esto representa una disminución en la eficiencia del uso
del equipo.

PRÁCTICA

Desarrolle aplicaciones que ilustren el uso de mecanismos de sincronización para proteger la sección
crítica. Compare el desempeño de la ejecución sin mecanismos de sincronización con el que se obtiene
usando esos mecanismos. Además, compare el tiempo que le lleva a un hilo realizar una tarea contra
el tiempo requerido para realizarla mediante dos o más hilos, del mismo proceso o de diferentes
procesos.

EJEMPLOS DE LA SECCIÓN CRÍTICA

El problema se presenta en cualquier caso en el que haya dos procesos, que llamaremos P1 y P2 que
accedan a la misma variable para aumentar o disminuir su valor; también pueden ser hilos en lugar
de procesos. Un ejemplo es el caso de una cuenta bancaria con la variable saldo en la que se puedan
realizar depósitos y retiro, según se muestra.

P1 P2
saldo = saldo+deposito saldo = saldo-retiro

Otro ejemplo es el llamado problema de Productores-Consumidores, en el cual dos procesos,


productor y consumidor, comparten un espacio temporal (buffer) de tamaño finito. La tarea del
productor es generar un producto, almacenarlo y comenzar nuevamente; mientras que el consumidor
toma, en forma concurrente, productos uno a uno.

Debe tenerse cuidado en que el productor no añada más productos que la capacidad del buffer y que
el consumidor no intente tomar un producto si el buffer está vacío. Este control puede realizarse
mediante un contador; como se ha expuesto, si un contador es manipulado en la concurrencia, puede
llegar a tener resultados inesperados.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-25

OTROS ENFOQUES

El enfoque de la exclusión mutua en código puede ser demasiado fuerte, además de que puede ser
complicado, por ejemplo, en ambientes distribuidos. En esos casos, puede utilizarse exitosamente el
protocolo lectores múltiples-escritor único. En ese caso, pueden operar libremente varios hilos
lectores de un dato o un solo hilo que modifique el dato en cuestión.

OTROS AMBIENTES

El problema de la sección crítica se ha explicado en el ambiente de una sola computadora. Pero, en


una computadora se pueden ejecutar diversas modificaciones a un dato provenientes de peticiones
remotas, por lo que el problema debe resolverse localmente mediante algún mecanismo de
sincronización para evitar los resultados inesperados. Un ejemplo es la reservación de lugares en el
transporte público.

LA EJECUCIÓN ORDENADA

El problema de la sección crítica requiere la ejecución en tiempos diferentes, sin importar el orden; es
posible que se requiera la ejecución también en tiempos diferentes pero en un cierto orden. En
algunos casos, se pueden usar retrasos a los hilos, según corresponda, para lograr un orden de
ejecución. Por otra parte, dentro de un proceso, el hilo primario puede iniciar la ejecución de otro hilo
(start()) e inmediatamente esperar hasta la terminación de su ejecución (join()), antes de iniciar otro
hilo; más tarde, puede repetir de esa manera para generar los hilos que se requieran. Eso resulta en
una ejecución secuencial de los hilos; en cada momento, sólo un hilo podrá ejecutar.
También se pueden usar los mecanismos de sincronización de dos operaciones, ya sea que se desee
sincronizar hilos completos o porciones de ellos. Supongamos dos hilos, P1 con una sección de código
que llamaremos A, y P2 con una sección de código que llamaremos B; además, se requiere ejecutar A
y luego B. Puede lograrse con un semáforo que inicia, en el hilo primario, con Paso=Rojo

P1: P2:
A Adquiere(Paso)
Libera(Paso) B

La ejecución podría producirse así:

P1: P2:

A Adquiere(Paso)

Libera(Paso)
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-26

PRÁCTICA

Desarrolle una aplicación ilustrativa de la ejecución ordenada de dos segmentos, uno en cada hilo.

LA COMUNICACIÓN ENTRE PROCESOS

No trataremos el tema en este trabajo. Baste decir que un caso importante de comunicación entre
procesos (o hilos) es la que se usa para sincronizarlos.

BLOQUEO MUTUO

INTRODUCCIÓN

Considere los siguientes ejemplos de la vida real:

- Dos niños intentan jugar al arco y flecha; uno toma el arco, el otro la flecha. Ninguno puede
jugar hasta que alguno libere lo que tomó.

- Una carretera con dos sentidos de circulación tiene puente estrecho por el que sólo cabe
un vehículo. El interbloqueo se produciría cuando dos vehículos, atravesando
simultáneamente el puente en sentido contrario, se encontrarán el uno frente al otro sin
posibilidad de continuar. Observe que cada vehículo posee un recurso (el trozo de puente
que ya ha cruzado hasta el momento) pero necesita otro recurso (el trozo de puente que
queda por cruzar) para terminar su labor (cruzar el puente).

- En la sincronización de dos procesos con dos fichas, según se mencionó en la página 21;
cada proceso adquiere una ficha pero después quiere la otra.

El interbloqueo o bloqueo mutuo es una relación circular de espera procesos; la situación también
aplica a hilos del mismo proceso. Cada proceso del conjunto está esperando un evento (la liberación
de algún recurso, por ejemplo) que sólo otro proceso del conjunto puede causar, por lo que todos los
procesos continúan esperando indefinidamente. Un proceso espera por un recurso que otro tiene, y
ese otro, a su vez, espera por el recurso de otro más hasta que algún proceso en la cadena formada
espera al primer proceso mencionado. Enseguida se ilustra la condición de espera circular entre dos
procesos: P1 espera a P2 y P2 espera a P1.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-27

También se le ha llamado punto muerto (del inglés deadlock) o abrazo mortal (del inglés deadly
embrace). No se debe confundir el interbloqueo con el bloqueo simple como el que se produce
cuando un proceso no libera el derecho de proseguir la ejecución, según se explicó también en la
página 20.

El problema del interbloqueo puede darse en un sistema, aunque sólo algunos de los procesos estén
mutuamente bloqueados. Por otra parte, no es necesario que un proceso esté involucrado en alguna
relación del bloqueo; por ejemplo, si hay 5 procesos, puede ser que haya una relación de bloqueo
mutuo entre 3 de ellos y otra relación de bloqueo entre los dos restantes.

CONDICIONES PARA EL INTERBLOQUEO

Las siguientes condiciones son necesarias para que se produzca un interbloqueo:

1. Exclusión mutua. Los recursos implicados deben usarse en exclusión mutua, o sea, debe
tratarse de recursos de uso exclusivo. Los recursos compartidos no están involucrados en
interbloqueos.
2. Retención y espera. Cuando no se puede satisfacer la petición de un proceso, éste se bloquea,
manteniendo los recursos que tenía previamente asignados. Se trata de una condición que refleja una
forma de asignación que corresponde con la usada prácticamente en todos los sistemas reales.

3. No expropiación (no desalojo). Un proceso involucrado no puede expropiar a otro proceso los
recursos que solicita. Un proceso sólo libera sus recursos voluntariamente.

4. Espera circular. Debe existir una lista circular de procesos tal que cada proceso en la lista esté
esperando por uno o más recursos que tiene asignados el siguiente proceso.

Es importante resaltar que se trata de condiciones necesarias pero no suficientes, esto es, la
ocurrencia de las condiciones no asegura la presencia del interbloqueo, pero se requieren para que
exista un interbloqueo.

CÓMO SE PRODUCE EL INTERBLOQUEO


Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-28

Primeramente, se pueden usar grafos dirigidos para representar relaciones entre los procesos y los
recursos que utilizan; más aún, el grafo dirigido puede usarse para determinar si el interbloqueo
existe. Usaremos los siguientes elementos de representación, en los que P es un proceso y R es un
recurso.

El siguiente ejemplo de interbloqueo incluye dos procesos y dos recursos; cada uno de estos últimos
de tipo diferente. Ninguno de los dos puede continuar; cada uno requiere un recurso que el otro tiene.
La figura ilustra la situación.

Ahora relacionaremos la gráfica anterior con la definición del interbloqueo como espera mutua.
Notemos que P1 quiere algo que P2 tiene, eso significa que P1 está a la espera de P2, como se
muestra en la figura.

Aplicando la misma consideración a la parte en la que P2 quiere lo que P1 tiene, tendremos las
relaciones de espera mostradas en la página 27, que ahora repetimos, añadiendo las
correspondientes relaciones de bloqueo.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-29

INTERBLOQUEO APARENTE

Cuando un proceso P1 quiere un recurso del tipo que otro proceso P2 tiene, pero no necesariamente
el recurso que P2 tiene, entonces no hay interbloqueo, puesto que no se configura la espera de P1 a
P2. Considere una variante del ejemplo anterior, en la que hay más de un recurso de cada tipo; no
habría interbloqueo, puesto que cada proceso podría obtener los recursos que necesita para llevar a
cabo su actividad. Note que no hay una espera circular efectiva en el grafo mostrado a continuación;
por ejemplo, para el caso de R1, P1 tiene una unidad pero hay otra unidad que P2 puede tomar, sin
esperar a la que P1 tiene. Por lo tanto, la espera circular entre procesos no se produce; P1 no quiere
exactamente el recurso que P2 tiene.

ESTRATEGIAS PARA EL TRATAMIENTO DEL INTERBLOQUEO

Podemos establecer dos tipos de estrategias básicas:


1. Ignorar el problema, en lo que se ha llamado Algoritmo del avestruz. En este caso no se toman
medidas contra el interbloqueo, puesto que su ocurrencia se considera remota.
2. Afrontar el problema. Puede ser:
a) Permitiendo que el problema ocurra: Detección y recuperación. No se sobrecarga la
operación evitando que ocurra el interbloqueo, sólo se investiga a cada cierto tiempo si el
bloqueo ha ocurrido. Si ese es el caso, el sistema operativo debe intervenir para resolverlo,
tal vez privando a un proceso de algún recurso.
b) Garantizando que el problema nunca ocurra:
i) Prevención a priori. Se elimina, para empezar, alguna de los requerimientos del
interbloqueo; por ejemplo, se puede exigir que cada proceso pida todos los recursos que
necesita de una sola vez o que cada proceso solicite recursos cuya numeración esté en
orden creciente. ii) Sondeo y evasión. A cada petición por parte de un proceso, se
determina primero si conceder la petición es riesgoso; la petición es concedida sólo cuando
se determine que no hay riesgo.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-30

Los enfoques tienen la siguiente consecuencia; mientras más importante se considere al interbloqueo,
mayor trabajo extra se realizará para atacarlo.

ALGORITMO DEL BANQUERO

INTRODUCCIÓN

El objetivo del algoritmo es determinar si hay interbloqueo en un conjunto de procesos que utilizan
recursos no consumibles. La determinación se hace así:

• Si los requerimientos de recursos de todos los procesos, aparte de los recursos que ya tengan,
pueden ser satisfechos, entonces no hay interbloqueo.
• Si por lo menos dos procesos no pueden ser satisfechos, entonces hay interbloqueo.

Se supone que el total de los recursos debe ser suficiente para satisfacer a cada proceso
separadamente; por lo tanto, se descarta el caso de que algún proceso no pueda ser satisfecho si
tomara para sí mismo el total de los recursos. Esto último sería una carencia de recursos, pero no sería
un bloqueo mutuo.

Para el caso de un solo tipo de recurso, este algoritmo se asemeja a la operación de un pequeño banco
que sólo usa efectivo:

El banco inicia operaciones con una cantidad total de dinero y otorga algunos préstamos a sus clientes.
Más tarde, los clientes piden préstamos adicionales y puede ser que el total de esas sumas adicionales
exceda la cantidad de dinero que aún está disponible. De lo anterior, puede resultar alguno de los
siguientes casos:
1. Es posible otorgar a algún cliente el crédito adicional que requiere. Después de usar el dinero,
el cliente regresa toda la cantidad que tenía prestada. De esa manera, podría ser posible
satisfacer la solicitud de crédito adicional por parte de algún otro cliente.
2. No es posible otorgar a ningún cliente la cantidad adicional que solicita, por lo que la operación
del banco quedará estancada.

Este algoritmo ignora el interés que el cliente tiene que pagar por el préstamo. Aplicando este ejemplo
a los sistemas operativos:

• El banquero es el sistema operativo.


• Los clientes representan a los procesos que tienen crédito en ese banco.
• El dinero representa a un tipo de recurso que necesitan los procesos para cumplir su cometido.

VERSIÓN MATRICIAL DEL ALGORITMO


Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-31

Este algoritmo se refiere a varios tipos de recursos no consumibles, los cuales se tienen en ciertas
cantidades; presentaremos una explicación del algoritmo, utilizando una representación matricial. El
modelo consta de:

• M procesos y N tipos de recursos.


• Una matriz, de tamaño MxN, A=[aij] en la que aij representa la cantidad que el proceso i tiene
del recurso j.
• Una matriz, de tamaño MxN, S=[sij] en la que sij representa la cantidad que el proceso i solicita
del recurso j.
• El vector, de tamaño N, D=[dj] en el que dj representa la cantidad del recurso j que ningún
proceso está usando, por lo que está disponible.
• Como un auxiliar podemos usar el vector, de tamaño N, E=[ej] en el que ej representa la
cantidad total del recurso j (la suma de las cantidades de ese recurso asignadas a los procesos
y de la cantidad disponible dj).

Note que, en las matrices A y S, los procesos de colocan hacia abajo y los recursos hacia la derecha,
según se muestra.

Antes de investigar un posible bloqueo mutuo, se deben cumplir 2 requisitos:

I. Requerimiento máximo de cada proceso. Ningún proceso debe, por sí solicitar, en total, una
cantidad de recursos de algún tipo mayor que la cantidad total de ese recurso. En caso contrario, se
trataría de un caso de escasez de ese recurso, pero no de interbloqueo.

II. Consistencia. La suma de las cantidades de cada recurso de un tipo que tienen los procesos
más las cantidades de ese recurso que nadie utiliza debe ser igual a la cantidad total existente de ese
recurso. En caso contrario, habría una inconsistencia que anularía la determinación del interbloqueo.

Verificados los requisitos anteriores, la versión matricial del algoritmo puede aplicarse así:

1. Se busca, dentro de los procesos vigentes, alguno cuya solicitud de recursos, según el
correspondiente renglón en S, puede ser cubierta, según las cantidades disponibles en D.
a) Si ningún proceso puede ser satisfecho, queda establecido que no se pueden satisfacer
las solicitudes de todos los procesos y el algoritmo termina retornando
ESTANCAMIENTO.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-32

b) Si no hay procesos pendientes de satisfacer, el algoritmo termina retornando


SIN_ESTANCAMIENTO.
2. Cuando un proceso puede ser satisfecho:
a) Se le otorgan los recursos que solicita, tomándolos de D.
b) Se le permite terminar.
c) Se le marca como terminado.
d) Se recupera el total de los recursos que usó (los que tenía más los que se le otorgaron
después), añadiéndolos a D.
3. Regresar al paso 1.

Este algoritmo puede ser usado en los métodos de sondeo y de detección.

Como un ejemplo cuantitativo, considere un caso con 3 procesos (1, 2 y 3) y 4 recursos, según se
muestra.

Se muestra a continuación que los datos cumplen los 2 requisitos.

La aplicación del algoritmo en este caso determina que pueden satisfacerse los requerimientos de
todos los procesos, otorgando los recursos que solicita el proceso 3, luego los que solicita el proceso
2 y por último los que solicita el proceso 1. Describiremos el procedimiento de la siguiente forma:

1. Se determina que el proceso 3 puede satisfacerse, se le otorga su petición que es (2,1,0,0)


con lo que D=(0,0,0,0). Después que el proceso 3 concluye, se marca como terminado y se le
retiran los recursos con lo que D=(2,2,2,0).
2. Se determina que el proceso 2 puede satisfacerse, se le otorga su petición que es (1,0,1,0)
con lo que D=(1,2,1,0). Después que el proceso 2 concluye, se marca como terminado y se le
retiran los recursos con lo que D=(4,2,2,1).
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-33

3. Se determina que el proceso 1 puede satisfacerse, se le otorga su petición que es (2,0,0,1)


con lo que D=(2,0,0,0). Después que el proceso 1 concluye, se marca como terminado y se le
retiran los recursos con lo que D=(4,2,3,1).
4. Como todos los procesos han sido satisfechos, el procedimiento termina, retornando
SIN_ESTANCAMIENTO.

Notemos que la representación matricial y la gráfica son equivalentes por lo que puede convertirse
una representación gráfica en una representación matricial (como la usada por el algoritmo del
banquero) y viceversa.

VERSIÓN GRÁFICA DEL ALGORITMO DEL BANQUERO

El algoritmo del banquero puede adaptarse para aplicarlo a un grafo, de la siguiente manera:

1. Se busca, dentro de los procesos, alguno cuya solicitud de recursos, según las flechas que
salen de él, puede ser cubierta, de acuerdo con las cantidades de cada recurso que están
disponibles.
a) Si ningún proceso puede ser satisfecho, queda establecido que no se pueden
satisfacer las solicitudes de todos los procesos involucrados y el algoritmo termina
retornando ESTANCAMIENTO.
b) Si no hay procesos pendientes de satisfacer, el algoritmo termina retornando
SIN_ESTANCAMIENTO.
2. Cuando un proceso puede ser satisfecho:
a) Se le otorgan los recursos que solicita, cambiando una flecha hacia el recurso por otra en
sentido contrario.
b) Se le permite terminar.
c) Se le borran todas las flechas, de modo que ni pida ni tenga nada.

3. Regresar al paso 1.

EJERCICIOS

1. Obtenga la representación gráfica de la situación inicial del ejemplo anterior y elabore su


solución.
2. Considere las siguientes figuras, en cada caso: a) Describa la situación en español. b)
Determine si existe algún estancamiento en el sistema y cuáles son los procesos involucrados;
utilice la versión gráfica del algoritmo del banquero.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-34

3. Suponga que del recurso A hay 2 unidades, del B hay 2 unidades y del C hay 3 unidades. El
proceso P1 tiene una unidad de A y requiere 1 unidad de B y 1 de C; el proceso P2 tiene 1
unidad de B y 1 de C pero requiere 1 unidad de A; el proceso P3 tiene 1 unidad de C y requiere
2 unidades de B. Determine si existe algún estancamiento en el sistema y cuáles son los
procesos involucrados.
4. Considere la situación mostrada. Determine si hay interbloqueo; si ese es el caso, determine
los hilos involucrados y la relación de espera entre ellos.

5. Elabore una aplicación que implemente el algoritmo del banquero.


6. Considere 4 procesos con 4 tipos de recursos. Elabore una situación en la que dos de los
procesos se interbloquean, sin afectar a los demás y los procesos restantes también se
interbloquean sin afectar a los primeros.

ADMINISTRACIÓN DE LOS PROCESADORES

La asignación del tiempo de los procesadores a cada hilo de los procesos es la función de la parte del
sistema operativo conocida como planificador o calendarizador. El planificador debe decidir:
• Cuándo asignará un procesador (o núcleo) a un proceso (o hilo).
• Por cuánto tiempo le será asignado ese procesador.
Se considerará en este trabajo la planificación con un solo procesador; en general, se requiere la
planificación cuando el número de procesos es mayor que el número de procesadores.

METAS DE LOS ALGORITMOS DE PLANIFICACIÓN


Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-35

La equidad en el trato es una condición que se espera en cualquier acto administrativo; se espera de
los directores en organizaciones privadas y públicas, incluyendo a presidentes municipales,
gobernadores y presidentes de la república. Desde luego que la equidad se espera de en la actividad
de un sistema operativo respecto a cualquier aplicación; en el pasado, Microsoft ha sido denunciado
porque Windows favorecía a su navegador. Actualmente, podemos notar que el navegador Edge se
usa para desplegar una imagen de la web cuando se activa Windows después de la hibernación.

Respecto a la administración de los procesadores, podemos enunciar algunos lineamientos:

• Equidad: Cada proceso recibe una porción equitativa del uso de CPU, por lo que, en ausencia
de alguna razón en contrario, deberá ser tratado de igual forma; además, ningún proceso debe
sufrir inanición.
• Implementación de políticas: Se llevan a cabo las políticas de uso del procesador, privilegiando
algunos procesos cuando, por alguna razón, así quede establecido.
• Equilibrio: Todas las partes del equipo se mantienen ocupadas en el procesamiento.

La equidad está involucrada en la administración de cualquier tipo de recurso.

EQUILIBRIO

Los procesos utilizan la CPU en algunos momentos y los dispositivos de E/S en otro tiempo; se puede
mejorar el equilibrio asignando el procesador a otro proceso cuando se efectúan acciones de E/S.
Como ejemplo, considere un proceso P1 que dura 3 unidades de tiempo, de las cuales 2 usan el
procesador, y otro proceso P2 el cual dura 2 unidades de tiempo, utilizando el procesador en una de
ellas. La siguiente figura representa el procesamiento no equilibrado de esos procesos; el tiempo total
es de 5 unidades de tiempo (Rendimiento [2/5]=0.4).

En la siguiente figura se muestra un procesamiento equilibrado, asignando el procesador a P2 cuando


P1 ya no lo requiere; el tiempo total es de 4 unidades de tiempo (Rendimiento [2/4]=0.5).
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-36

Como otro ejemplo, en un sistema multiprocesador, se puede repartir la carga de trabajo para evitar
que algún procesador esté inactivo mientras los otros están ocupados.

UNA VISIÓN A LA DIVERSIDAD DE LOS ALGORITMOS DE PLANIFICACIÓN

En la página 2 se presentó un modelo de asignación del procesador a los procesos en el que se asignan
tiempos lapsos de tiempo a cada proceso de forma circular. La representación:

• No establece que los lapsos de tiempo sean iguales. Puede darse preferencia a algún proceso
de mayor importancia asignándole lapsos de tiempo mayores de uso del procesador.
• Sugiere que la cola de listo es del tipo PEPS (primero en llegar, primero en salir); sin embargo,
puede favorecerse a un proceso dejando atrás a otros procesos en la cola, los cuales tienen
una menor prioridad. Sólo debe tomarse en cuenta la posibilidad de la inanición, que es una
condición en que uno o más procesos están en la línea de espera por un tiempo indefinido;
puede producirse si algún proceso P está en la línea de espera y llegan repetidamente procesos
de mayor prioridad, impidiendo que P sea atendido.

SISTEMAS DE PROCESAMIENTO

Un algoritmo de planificación debe tomar en cuenta el sistema de procesamiento en que se aplica.


Consideraremos dos sistemas de procesamiento con características opuestas

1. Sistemas de procesamiento por lotes.


2. Sistemas de tiempo real.

SISTEMAS DE PROCESAMIENTO POR LOTES

En el procesamiento por lotes la ejecución de un programa se realiza mayormente sin la intervención


del usuario. Un usuario puede iniciar la actividad del proceso, o programar el inicio de la actividad
para una determinada hora, y obtener los resultados al final, pero no participa en el desarrollo de la
actividad. En un sistema por lotes existe un gestor de trabajos, encargado de reservar y asignar los
recursos de las máquinas a las tareas que hay que ejecutar.

Generalmente, este tipo de ejecución se utiliza en tareas repetitivas sobre grandes conjuntos de
información, ya que realizarlo manualmente sería tedioso y propenso a errores. Los trabajos pueden
ejecutarse fuera de las horas de oficina: por la noche o en fines de semana. Este procesamiento puede
ser usado en computadoras centrales (mainframes) de las grandes empresas. Son ejemplos comunes
la elaboración de la nómina, la generación de los estados de cuenta y la generación de respaldos de
las bases de datos.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-37

Una meta para este tipo de procesamiento es que el rendimiento o tasa de procesamiento (número
de trabajos por unidad de tiempo) sea lo más grande posible. El rendimiento puede mejorar si se
reduce la sobrecarga de trabajo al cambiar de un proceso a otro; por otra parte, el rendimiento puede
mejorar si se aumenta el equilibrio en el uso del equipo. En el ejemplo mostrado de los dos procesos,
con el procesamiento no equilibrado se tiene una tasa de 2/5 procesos por unidad de tiempo; en el
procesamiento equilibrado se tiene una tasa de 2/4 = 0.5 procesos por unidad de tiempo. También se
mejora el rendimiento, respecto al equilibrio, si se reparte la carga de trabajo entre los procesadores.

Otra meta se refiere al tiempo de respuesta; este es el tiempo transcurrido desde la petición de un
servicio hasta la satisfacción de quien lo pide; un tiempo de respuesta grande implica líneas de espera
largas y mucho tiempo de espera en ellas. En todos los sistemas de procesamiento se desea el menor
tiempo de respuesta, aunque esto es particularmente importante en los sistemas de tiempo real.

SISTEMAS DE TIEMPO REAL

En un sistema de tiempo real, el usuario es un sistema externo o entorno, humano o no, que es
atendido por una computadora. Tiene las siguientes características:

La reacción de un sistema de tiempo real a eventos externos debe concordar con la evolución de los
mismos. Como una consecuencia, el tiempo del sistema (tiempo interno) debe ser medido usando la
misma escala con que se mide el tiempo del entorno atendido (tiempo externo).

Los ejemplos de sistemas en tiempo real están presentes en nuestra vida diaria: el monitoreo de
pacientes en la unidad de cuidados intensivos de un hospital, el monitoreo, control y protección de
los sistemas de transmisión y distribución de la energía eléctrica (CFE), la descarga y reproducción de
videos; también están: la guía de aviones, trenes o automóviles, etc. Estos últimos forman parte de
los sistemas embebidos o empotrados: Sistemas de cómputo dedicados que están dentro de un
sistema mayor mecánico o eléctrico.

Las metas para este procesamiento son:

• Evitar la pérdida de datos que el usuario proporciona al sistema.


• Mantener el buen funcionamiento del sistema atendido.

Por ejemplo, en un sistema de reproducción de video, los pixeles deben ser recogidos con la rapidez
necesaria para que no se pierda la información; además los pixeles deben estar disponibles con la
suficiente rapidez para que la imagen reproducida no se distorsione.

Los sistemas de tiempo real pueden clasificarse según la tolerancia que el proceso externo tiene con
los retrasos:
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-38

• Sistemas estrictos: No toleran retrasos.


• Sistemas no estrictos: Toleran retrasos ocasionales, aunque estos son indeseables.

También se pueden clasificar respecto a la predictibilidad de las solicitudes de servicio:

• Sistemas periódicos: Atienden solicitudes periódicas.


• Sistemas aperiódicos: Atienden solicitudes impredecibles.

El peor caso es el de los sistemas estrictos aperiódicos; puede requerir un equipo dedicado a atender
peticiones del sistema externo, por lo que no se consideran líneas de espera. El caso más benigno es
el de los sistemas periódicos no estrictos; en este caso puede ser adecuado que un equipo atienda
diferentes peticiones, las cuales pueden colocarse en una línea de espera.

Para los sistemas periódicos no estrictos con n eventos, si el evento i tiene un periodo de ocurrencia
Pi y ese evento es una carga, para la CPU, por Ci unidades de tiempo, entonces se puede hacer una
planificación de servicio adecuada si
𝑛
𝐶𝑖
∑ <1
𝑃𝑖
𝑖=1

Podemos explicar el criterio anterior de la siguiente forma:

Ci/Pi representa la fracción de una unidad de tiempo que ocupa el proceso i para ser atendido; si la
suma de esas fracciones no sobrepasa la unidad, significa que esa unidad de tiempo puede dar
acomodo a una porción suficiente de todos los procesos, suponiendo que algunos de ellos tengan que
esperar un poco.

Por ejemplo, supongamos dos procesos tales que: C1=3, P1=6, C2=1 y P2=4. Tenemos que:
(3/6)+(1/4)=0.75, por lo que ambos procesos pueden ser atendidos, posiblemente con una pequeña
demora.

Las versiones comunes de Windows ofrecen inestabilidad en su desempeño; puede haber dificultades
en el arranque y en el cierre del sistema operativo. Pero en la ejecución normal, la incertidumbre
resulta de sobrecarga de trabajo debida a:

 Los programas que inician automáticamente junto con el sistema operativo, algunos de los
cuales no son indispensables.
 Las tareas programadas, por ejemplo, la revisión de archivos por parte del antivirus.
 Las actualizaciones de algunos programas.

Puede ser necesario cambiar de versión de sistema operativo a una variante conocida como sistema
operativo de tiempo real (RTOS).

PRÁCTICA
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-39

1. Aplique a Este equipo: Administrar-Visor de eventos-Registro de aplicaciones y servicios-Microsoft-


Windows-Diagnostics-Performance-Operativo e inspeccione los incidentes registrados de arranque o
cierre del sistema operativo.
2. Consulte el Administrador de tareas en la pestaña Inicio, en la que se listan los programas que se
inician cuando arranca el sistema operativo; si alguno se considera innecesario, se puede elegir y
aplicar clic derecho para poner Deshabilitar de modo que no se inicie automáticamente. También
puede usar Autoruns (Sysinternals).

3. Ejecute el Programador de tareas para revisar algunas de las tareas programadas, especialmente
las relativas al antivirus.

SISTEMAS OPERATIVOS DE TIEMPO REAL (RTOS)

Son sistemas especializados en aplicaciones de tiempo real, en las cuales se deben procesar datos al
momento en que se reciben, puesto que hay un plazo para su respuesta. El tiempo de respuesta a un
evento externo que se manifiesta con una interrupción tiene 3 partes: el retraso por reconocer una
interrupción y desatender la tarea que se está ejecutando, el retraso en iniciar (despacho) el proceso
de servicio de la interrupción y el tiempo que le toma a este proceso satisfacer la petición recibida.
Vea la figura.

Para cumplir con un plazo determinado, un RTOS debe realizar sus actividades en plazos fijos y con
retrasos limitados. Debe dar control más detallado al usuario sobre la prioridad de los procesos y ser
confiable. La mayoría de los RTOS implementan un algoritmo de planificación con prioridad fija y
desalojo, esto es:

• Cada hilo tiene una prioridad fija.


• Cada núcleo activa la ejecución del hilo de máxima prioridad que está listo.
• Si se pone en Listo un hilo de mayor prioridad que otro de menor prioridad que se está
ejecutando, este último es desalojado para que el hilo de mayor prioridad ejecute.
Sistemas Operativos I GDZarza Sep 2023 Admin. de los Proc. y el Proc. 2-40

Son ejemplos de RTOS: FreeRTOS, VxWorks, QNX y RTLinux. Claramente, los sistemas operativos que,
en algún momento, deciden realizar ciertas tareas en segundo plano que pueden acaparar los
recursos de la computadora, anulando significativamente su capacidad de respuesta a solicitudes.

También podría gustarte