Академический Документы
Профессиональный Документы
Культура Документы
Sistemas Operativos I
Prof. G. Adrian Rodríguez
2.1- Concepto de proceso.
Podemos considerar a un proceso como un programa en ejecución; dicho
proceso necesita ciertos recursos, como tiempo de CPU, memoria, archivos
y dispositivos de entrada y salida (E/S), para realizar su tarea. Estos
recursos se asignan a los procesos cuando se crea o bien durante su
ejecución.
El proceso
Informalmente, como hemos indicado antes, un proceso es un programa en
ejecución. Hay que resaltar que un proceso es algo más que el código de un
programa (al que en ocasiones se denomina sección de texto). Además del
código, un proceso incluye también la actividad actual, que queda
representada por el valor del contador de programa y por los contenidos de
los registros del procesador. Generalmente, un proceso incluye también la
pila del proceso, que contiene datos temporales (como los parámetros de las
funciones, las direcciones de retomo y las variables locales), y una sección
de datos, que contiene las variables globales. El proceso puede incluir,
asimismo, un cúmulo de memoria, la cual se asigna dinámicamente al
proceso en tiempo de ejecución. En la Figura 2.1 se muestra la estructura de
un proceso en memoria.
Máximo
Pila
Cúmulo de memoria
Datos
0 Texto
Aunque puede haber dos procesos asociados con el mismo programa, esos
procesos se consideran dos secuencias de ejecución separadas. Por ejemplo,
varios usuarios pueden estar ejecutando copias diferentes del programa de
correo, o el mismo usuario puede invocar muchas copias del explorador
web. Cada una de estas copias es un proceso distinto y, aunque las secciones
de texto sean equivalentes, las secciones de datos, del cúmulo (heap) de
memoria y de la pila variarán de unos procesos a otros. También es habitual
que un proceso cree muchos otros procesos a medida que se ejecuta.
Entrada
No Ejecución Terminar
Ejecución
Siempre que se crea un nuevo proceso dentro del sistema operativo, se crea
en el estado de No ejecución. De esta manera el proceso está presente para
el sistema operativo, y a la espera de ser ejecutado.
El sistema operativo debe saber en cada momento del estado de cada unos
de los procesos que están corriendo y de su posición en la memoria, un
aspecto muy importante a la hora de diseñar un sistema operativo, inclusive
en modelos básicos de sistemas operativos.
Cola FIFO
Entrada Terminar
Procesador
Estos estados son: nuevo y terminado, que resultan de utilidad para las
labores de gestión de procesos. Así se dará lugar al modelo de 5 estados.
Modelo de 5 estados
En este modelo un proceso puede encontrarse en cualquiera de los
siguientes 5 estados.
Pasar a ejecución
Preparado Ejecución
Fin de plazo
Esperar un
suceso
Nuevo
Ocurrencia Terminado
de suceso
Bloqueo
Figura 2.4. Diagrama de transiciones entre estados. La línea punteada indica situación
excepcional.
Existen sucesos que ocurren entre el paso de un estado a otro, esta serie de
sucesos se denominan transiciones:
Cola FIFO
Entrada Terminar
Procesador
Fin de plazo
Ocurrencia
Cola de bloqueados
de suceso Esperar suceso
Figura 2.5. Diagrama de transiciones entre estados implementada con una cola FIFO.
Para este modelo, disponemos de dos colas FIFO, una para los procesos en
situación de preparado y otra para los bloqueados. Todo proceso que ha
sido creado en el sistema operativo se situará en la cola de preparados. Al
momento de la elección de un proceso a ejecutar, el sistema operativo
elegirá dicho proceso de dicha cola de procesos recién creados, respetando
Cola FIFO
Entrada Terminar
Procesador
Fin de plazo
Ocurrencia
Cola de bloqueados
de suceso 1 Esperar suceso
Ocurrencia
Cola de bloqueados
de suceso 2 Esperar suceso
Ocurrencia
Cola de bloqueados
de suceso n Esperar suceso
Preparado Ejecución
Fin de plazo
Esperar un
Ocurrencia suceso
Nuevo
de suceso
Terminado
Suspendido Bloqueo
Pasar a ejecución
Preparado Ejecución
Fin de plazo
Esperar un
Ocurrencia suceso
Nuevo
de suceso
Terminado
Bloqueo
Preparado y
Suspendido
Bloqueado y
Suspendido
Sistema Operativo
BCPs
Hilo
Hilos
Un servidor web sometido a una gran carga puede tener varios (quizá,
miles) de clientes accediendo de forma concurrente a él. Si el servidor web
funcionara como un proceso tradicional de un solo hilo, sólo podría brindar
servicio a un cliente cada vez y la cantidad de tiempo que un cliente podría
tener que esperar para que su solicitud fuera servida podría ser enorme.
Cuando el servidor recibe una solicitud, crea otro proceso para dar servicio
a dicha solicitud. De hecho, este método de creación de procesos era
habitual antes de que los hilos se popularizaran.
Ahora todos kernels de sistemas operativos son multi-hilo; hay varios hilos
operando en el kernels y cada hilo realiza una tarea específica, tal como
gestionar dispositivos o tratar interrupciones. Por ejemplo, Solaris crea un
conjunto de hilos en el kemel específicamente para el tratamiento de
interrupciones; Linux utiliza un hilo del kernel para gestionar la cantidad
de memoria libre en el Sistema.
Modelos multi-hilo
Hasta ahora, nuestra exposición se ha ocupado de los hilos en sentido
genérico. Sin embargo, desde el punto de vista práctico, el soporte para
hilos puede proporcionarse en el nivel de usuario (para los hilos de usuario)
o por parte del kernel (para los hilos del kernel). El soporte para los hilos de
usuario se proporciona por encima del kernel y los hilos se gestionan sin
soporte del mismo, mientras que el sistema operativo soporta y gestiona
directamente los hilos del kernel. Casi todos los Sistemas operativos
actuales, incluyendo Windows 8, la gran familia de GNU/Linux, Mac OS X,
Solaris y Tru64 UNIX (antes Digital UNIX) soportan los hilos de kernel.
En último término, debe existir una relación entras las hilos de usuario y las
del kernel; en esta sección, vamos a ver tres formas de establecer esta
relación.
Hilos de Usuario
Hilos de kernel
Kernel
Hilos de Usuario
Hilos de kernel
Hilos de Usuario
Hilos de kernel
Kernel Kernel Kernel
Hilos de kernel
Bibliotecas de hilos
Una biblioteca de hilos proporciona al programador una API (Application
Programming Interface, interfaz de programación de aplicaciones) para
crear y gestionar hilos.
Las tres principales bibliotecas de hilos actualmente en uso Son: (1) POSIX
Pthreads, (2) Win32 y (3) Java. Pthreads, la extensión de hilos del estándar
POSIX, puede proporcionarse como biblioteca del nivel de usuario o del
nivel de kernel. La biblioteca de hilos de Win32 es una biblioteca del nivel
de kernel disponible en los sistemas Windows. La API de hilos de Java
permite crear y gestionar directamente hilos en los programas java. Sin
embargo, puesto que en la mayoría de los casos la JVM (Java Virtual
Machine) se ejecuta por encima del sistema operativo del host, la API de
hilos lava se implementa habitualmente usando una biblioteca de hilos
disponible en el sistema host. Esto significa que, normalmente, en los
sistemas Windows, los hilos Java se implementan usando la API de Win32,
mientras que en los sistemas GNU/LinuxLinux se suelen implementar
empleando Pthreads.
• La equidad: que todos los procesos tienen que ser tratados de igual
forma y a todos se les debe dar la oportunidad de ejecutarse, para
que ninguno sufra inanición.
Los elementos de cualquiera de estas colas no son los procesos en sí, sino
sus PCB’s (Programa de control de bloqueo), que están en memoria.
Hay módulos del sistema operativo para elegir un proceso para su ejecución
de entre los que están compitiendo por CPU. Esa elección dependerá del
criterio adoptado. La elección estará asociada al carácter del sistema. Por
ejemplo, en un sistema batch (sistema por lotes) no hay tanta exigencia en
cuanto al tiempo de respuesta. En un sistema interactivo minimizar este
tiempo es imprescindible.
• El de largo plazo o long term, que elige entre la cola de listos, para
cargarlo en memoria.
Es importante aclarar que en las colas los registros son normalmente las
PCB’s de los procesos.
Debe ser muy rápido pues una de sus funciones es encargarse del cambio de
contexto (context switch). Al tiempo entre detener un proceso y comenzar a
correr otro se le llama dispatch latency.
Un ejemplo: Windows NT
Windows NT, al igual que Mach, utiliza un objeto puerto para establecer y
mantener una conexión entre dos procesos. Cada cliente que invoca un
subsistema necesita un canal de comunicación, mismo que el objeto puerto
proporciona y que nunca se hereda. NT maneja dos tipos de puertos,
puertos de conexión y puertos de comunicación, que en realidad son iguales
pero reciben diferentes nombres según la forma en que se usa. Los puertos
de conexión son objetos con nombre, visibles para todos los procesos, y
ofrecen a las aplicaciones una forma de establecer un canal de
comunicación. La comunicación funciona como sigue:
Bloqueos
Principios del bloqueo
Una situación de bloqueo tiene lugar cuando ninguno de los procesos que
compiten por los recursos del sistema o interactúan entre sí puede avanzar
por carecer de algún recurso o esperar a que se produzca algún tipo de
evento.
Recursos reutilizables
Recursos consumibles
P1
recibir(P2,M)
enviar(P2,M)
P2
recibir(P1,M)
enviar(P1,M)
P1
solicitar(A)
solicitar(B)
P2
solicitar(B)
solicitar(A)
Condiciones de bloqueo
Para que se produzca bloqueo, debe darse una cuarta condición que
consiste en la existencia de una cadena cerrada de procesos donde cada uno
de los cuales retiene al menos un recurso de los que necesita el siguiente
proceso de la cadena para continuar su ejecución. A esta condición se le
denomina espera circular.
Prevención de bloqueos
Detección de bloqueos
Para las dos últimas estrategias, el criterio de selección podría ser una de las
siguientes elecciones (siempre hablando de procesos a elegir):
.
Donde Ri denota la cantidad
1. Vector de recursos: VR = del recurso i que hay en el
.
sistema.
.
Rm
AV1
.
2. Vector de recursos disponibles: AVR =
.
AVm
C11 . . . Cn1
. .
3. Matriz demanda CR =
. . .
. .
Donde Cij la exigencia máxima que el proceso i tiene del recursos j (Se lee
por columnas: La columna uno indica las exigencias máximas del recurso
uno respecto de todos los recursos. Se lee por filas: La fila uno indica la
exigencia de todos los procesos sobre el recurso uno).
A11 . . . An1
. .
4. Matriz de asignación AR =
. . .
. .
Ai1
.
AiR = .
Aim
n+1
∀j ∈ [1, m] ∑ Ckj ≤ Rj
K=1
2.7. Planificación de
procesos. Algoritmos de
planificación.
Planificación de procesos
La planificación hace referencia a un conjunto de políticas y mecanismos
incorporados al sistema operativo que gobiernan el orden en que se
ejecutan los trabajos que deben ser completados por el sistema informático.
Un planificador es un módulo del sistema operativo que selecciona el
siguiente trabajo a admitir en el sistema y el siguiente proceso que tomará
el control sobre el procesador. El objetivo primario de la planificación es
optimizar el rendimiento del sistema de acuerdo con los criterios
considerados más importantes por los diseñadores del mismo.
(1)
idle(){
for(;;);
Productividad
Tiempo de retorno
Tiempo de espera
Tiempo de respuesta
Tipos de planificadores
En un sistema operativo complejo pueden coexistir tres tipos de
planificadores: A corto, a medio y a largo plazo.
En general, cada vez que ocurre uno de estos sucesos, el SO llama al PCP
para determinar si debería planificarse otro proceso para su ejecución.
Este planificador será invocado cuando quede espacio libre en memoria por
la terminación de un proceso o cuando el suministro de procesos
preparados quede por debajo de un límite especificado.
Algoritmos de planificación
Antes de comenzar a estudiar los distintos tipos de algoritmos de
planificación es importante tener en cuenta que hay dos categorías
generales de éstos.
Bibliografía Ampliatoria
www.uesiglo21.edu.ar