¿Qué es un proceso?
Un proceso no es más que un programa en ejecución, e incluye los valores
actuales del contador de programa, los registros y las variables.
Conceptualmente cada uno de estos procesos tiene su propia CPU virtual.
Desde luego, en la realidad la verdadera CPU conmuta de un proceso a otro.
un programa o mandato que se ejecuta realmente en el sistema recibe la
denominación de proceso.
Los procesos existen en jerarquías de padre-hijo. Un proceso iniciado por un
programa o mandato es un proceso padre; un proceso hijo es el producto del
proceso padre. Un proceso padre puede tener varios procesos hijo, pero un
proceso hijo sólo puede tener un padre.
¿estados del proceso?
Un proceso puede variar entre 5 distintos estado
New: cuando el proceso esta siendo creado.
Running: cuando el proceso se esta ejecutando.
Waiting: cuando el proceso esta esperando que se cumpla algún otro evento.
Ready: cuando el proceso esta pronto para ejecutar, esperando por la CPU.
Terminated: cuando el proceso esta terminado.
Los estados de los procesos se pueden dividir en dos tipos: activos e
inactivos.
1.- Estados activos
Son aquellos que compiten con el procesador o están en condiciones de
hacerlo. Se dividen en:
Ejecución: Estado en el que se encuentra un proceso cuando tiene el control
del procesador. En un sistema monoprocesador este estado sólo lo puede
tener un proceso.
Preparado: Aquellos procesos que están dispuestos para ser ejecutados, pero
no están en ejecución por alguna causa (Interrupción, haber entrado en cola
estando otro proceso en ejecución, etc.).
Bloqueado: Son los procesos que no pueden ejecutarse de momento por
necesitar algún recurso no disponible (generalmente recursos de
entrada/salida).
2.- Estados inactivos
Son aquellos que no pueden competir por el procesador, pero que pueden
volver a hacerlo por medio de ciertas operaciones. En estos estados se
mantiene el bloque de control de proceso aparcado hasta que vuelva a ser
activado. Se trata de procesos que no han terminado su trabajo que lo han
impedido y que pueden volver a activarse desde el punto en que se quedaron
sin que tengan que volver a ejecutarse desde el principio.
Son de dos tipos:
Suspendido bloqueado: Es el proceso que fue suspendido en espera de un
evento, sin que hayan desaparecido las causas de su bloqueo.
Suspendido programado: Es el proceso que han sido suspendido, pero no
tiene causa parta estar bloqueado.
bloqueado.
El estado “Nuevo” de un proceso. Se trata de la creación de un proceso. Los
procesos en este estado están cargados en la memoria, pero no están
acaparando recursos de la CPU. Una vez se admite el proceso pasa a estado
Activo.
El estado “Preparado” de un proceso. Se trata de procesos que están
cargados y listos para pasar al estado activo, pero que por cualquier causa
aún no han cambiado al estado activo.
El estado “Activo” de un proceso. Cuando el proceso acapara los recursos del
procesador y se está ejecutando, está en estado activo. Cada proceso activo
ocupa un hilo de nuestro procesador para su beneficio.
El estado “Bloqueado” de un proceso. Los procesos entran en este estado
cuando necesitan algún recurso que no ha sido dispuesto durante su
ejecución. Esperan a un evento antes de volver al estado Preparado.
El estado “Terminado” de un proceso. Sucede cuando el proceso termina y se
elimina.
¿Qué es un hilo?
Un hilo en un sistema operativo es la característica que permite a una
aplicación realizar varias tareas a la vez concurrentemente, los distintos hilos
de ejecución comparten una serie de recursos tales como el espacio de
memoria, los archivos abiertos, situación de autentificación. Esta acción
permite simplificar el diseño de una aplicación que debe llevar a cabo
distintas funciones simultáneamente.
* Los hilos son básicamente una tarea que puede ser ejecutada en paralelo
con otra tarea; teniendo en cuenta lo que es propio de cada hilo es el
contador de programa, la pila de ejecución y el estado de la CPU (incluyendo
el valor de los registros).
Un hilo es una unidad básica de utilización de CPU, la cual contiene un id de
hilo, su propio program counter, un conjunto de registros, y una pila; que se
representa a nivel del sistema operativo con una estructura llamada TCB
(thread control block).
Los hilos comparten con otros hilos que pertenecen al mismo proceso la
sección de código, la sección de datos, entre otras cosas. Si un proceso tiene
múltiples hilos, puede realizar más de una tarea a la vez (esto es real cuando
se posee más de un CPU).
Funcionalidad de los hilos
Al igual que los procesos, los hilos poseen un estado de ejecución y pueden
sincronizarse entre ellos para evitar problemas de compartimiento de
recursos. Generalmente, cada hilo tiene una tarea específica y determinada,
como forma de aumentar la eficiencia del uso del procesador.
Algunos lenguajes de programación tienen características de diseño
expresamente creadas para permitir a los programadores lidiar con hilos de
ejecución (como Java o Delphi )
¿Qué es la concurrencia?
concurrencia es la propiedad de los sistemas que permiten que múltiples
procesos sean ejecutados al mismo tiempo, y que potencialmente puedan
interactuar entre sí.
Los procesos concurrentes pueden ser ejecutados realmente de forma
simultánea, sólo cuando cada uno es ejecutado en diferentes procesadores.
En cambio, la concurrencia es simulada si sólo existe un procesador
encargado de ejecutar los procesos concurrentes, simulando la concurrencia,
ocupándose de forma alternada en uno y otro proceso a pequeñísimos
intervalos de tiempo. De esta manera simula que se están ejecutando a la
vez. Debido a que los procesos concurrentes en un sistema pueden
interactuar entre otros también en ejecución, el número de caminos en
ejecución puede ser extremadamente grande, resultando sumamente
complejo. Las dificultades asociadas a la concurrencia han sido pensadas para
el desarrollo de lenguajes de programación y conceptos que permitan hacer
la concurrencia más manejable.
Dos o más procesos decimos que son concurrentes, paralelos, o que se
ejecutan concurrentemente, cuando son procesados almismo tiempo, es
decir, que para ejecutar uno de ellos, no hace falta que se haya ejecutado
otro.
En sistemas multiprocesador, esta ejecución simultánea podría conseguirse
completamente, puesto que podremos asignarle, porejemplo, un proceso A
al procesador A y un proceso B al procesador B y cada procesador realizaran
la ejecución de su proceso.
Cuando tenemos un solo procesador se producirá un intercalado delas
instrucciones de ambos procesos, de tal forma que tendremos la sensación
de que hay un paralelismo en el sistema (concurrencia, ejecución simultánea
de más de un proceso).
¿Qué es la secuenciabilidad?
La sincronización entre procesos es necesaria para prevenir y/o corregir
errores de sincronización debidos al acceso concurrente a recursos
compartidos.
La sincronización permite intercambiar señales de tiempo
(ARRANQUE/PARADA) entre procesos cooperantes para garantizar las
relaciones específicas de precedencia impuestas por el problema que se
resuelve. Sin una sincronización adecuada entre procesos, la actualización de
variables compartidas puede inducir a errores de tiempo relacionados con la
concurrencia que son con frecuencia difíciles de depurar.
Los archivos secuenciales son un tipo de archivo en los que la información
puede leerse y escribirse empezando desde el principio del archivo.
Debemos tomar en consideración algunas características que deben tener los
archivos secuenciales:
1. La escritura de nuevos datos siempre se hace al final del archivo.
2. Para leer una zona concreta del archivo hay que avanzar siempre, si la zona
está antes de la zona actual de lectura, será necesario "rebobinar" el archivo.
3. Los ficheros sólo se pueden abrir para lectura o para escritura, nunca de
los dos modos a la vez.
¿Niveles de Planificacion?
Planificación a largo plazo
Este planificador está presente en algunos sistemas que admiten además de
procesos interactivos trabajos por lotes. Usualmente, se les asigna una
prioridad baja a los trabajos por lotes, utilizándose estos para mantener
ocupados a los recursos del sistema durante períodos de baja actividad de los
procesos interactivos. Normalmente, los trabajos por lotes realizan tareas
rutinarias como el cálculo de nóminas; en este tipo de tareas el programador
puede estimar su gasto en recursos, indicándoselo al sistema. Esto facilita el
funcionamiento del planificador a largo plazo.
El objetivo primordial del planificador a largo plazo es el de dar al planificador
de la CPU una mezcla equilibrada de trabajos, tales como los limitados por la
CPU (utilizan mucho la CPU) o la E/S. Así, por ejemplo, cuando la utilización
de la CPU es baja, el planificador puede admitir más trabajos para aumentar
el número de procesos listos y, con ello, la probabilidad de tener algún
trabajo útil en espera de que se le asigne la CPU. A la inversa, cuando la
utilización de la CPU llega a ser alta, y el tiempo de respuesta comienza a
reflejarlo, el planificador a largo plazo puede optar por reducir la frecuencia
de admisión de trabajos.
Normalmente, se invoca al planificador a largo plazo siempre que un proceso
termina. La frecuencia de invocación depende, pues, de la carga del sistema,
pero generalmente es mucho menor que la de los otros dos planificadores.
Esta baja frecuencia de uso hace que este planificador pueda permitirse
utilizar algoritmos complejos, basados en las estimaciones de los nuevos
trabajos.
Planificación a Medio Plazo
En los sistemas de multiprogramación y tiempo compartido varios procesos
residen en la memoria principal. El tamaño limitado de ésta hace que el
número de procesos que residen en ella sea finito. Puede ocurrir que todos
los procesos en memoria estén bloqueados, desperdiciándose así la CPU. En
algunos sistemas se intercambian procesos enteros (swap) entre memoria
principal y memoria secundaria (normalmente discos), con esto se aumenta
el número de procesos, y, por tanto, la probabilidad de una mayor utilización
de la CPU.
El planificador a medio plazo es el encargado de regir las transiciones de
procesos entre memoria principal y secundaria, actúa intentando maximizar
la utilización de los recursos. Por ejemplo, transfiriendo siempre a memoria
secundaria procesos bloqueados, o transfiriendo a memoria principal
procesos bloqueados únicamente por no tener memoria.
Planificación a corto plazo
Qué proceso será el que se ejecutará en el procesador en el instante
siguiente.
Expulsión denota si un proceso acapara el procesador cuando está
ejecutándose. Existen sistemas con y sin expulsión:
a) Sin expulsión: un proceso conserva el uso del procesador mientras lo
desee; es decir, mientras no solicite del SO un servicio que lo bloquee.
Ventajas: minimiza tiempo de planificación. Inconvenientes: un proceso
podría monopolizar el uso del procesador.
b) Con expulsión: el SO puede desalojar a un proceso del uso del procesador
(sin que el proceso lo haya solicitado). Ventaja: control sobre el tiempo de
ejecución de cada proceso. Inconveniente: gasto de tiempo.
¿técnicas de administrador de planificacion?
Planificación a plazo fijo.
En la planificación a plazo fijo, ciertos trabajos se planifican para ser
terminados en un periodo específico. Estos trabajos tienen un alto valor si se
entregan a tiempo y pueden carecer de valor si se entregan después del
límite. La planificación a plazo fijo es compleja por muchas razones:
Los usuarios deben proporcionar por adelantado y en forma precisa las
necesidades de recursos de su trabajo. Tal información rara vez está
disponible.
El sistema debe ejecutar el programa de plazo fijo sin una severa degradación
de servicio para los otros usuarios.
El sistema debe planificar cuidadosamente las necesidades de recursos
permitiendo un libre tránsito del plazo fijo. Esto puede ser difícil debido a la
llegada de programas nuevos con demandas impredecibles.
Si se activan muchos trabajos de plazo fijo, la planificación puede llegar a ser
tan compleja que necesite métodos de optimización sofisticados para
asegurar que el plazo fijo se cumpla.
El manejo intenso de recursos requeridos por la planificación de plazo fijo
puede generar una sobrecarga sustancial.
Planificación Primero en llegar - Primero en Salir (FIFO).
Los procedimientos son despachados de acuerdo al orden de llegada a la
cola de listos. Una vez que un proceso tiene el CPU, se ejecuta hasta su
terminación. Esta planificación es No apropiativa; es justa en el sentido
formal, pero algo injusta porque los grandes procesos hacen esperar a
trabajos pequeños y, los trabajos sin importancia hacen esperar a los
trabajos importantes.
La Planificación FIFO ofrece una varianza en tiempo de respuesta
relativamente pequeña y es, por tanto, más predecible que otros esquemas;
no es un esquema útil en la planificación de procesos interactivos porque no
garantiza buenos tiempos de [Link]én se puede implementar
mediante la utilización de una lista. Se reemplazan las páginas de la cabeza y
se agregan al final.
Una vez que el proceso obtiene la cpu, se ejecuta hasta terminar, ya que es
una disciplina “no apropiativa”.
Puede ocasionar que procesos largos hagan esperar a procesos cortos y que
procesos no importantes hagan esperar a procesos importantes.
Es más predecible que otros esquemas.
No puede garantizar buenos tiempos de respuesta interactivos.
Suele utilizarse integrado a otros esquemas, por ejemplo, de la siguiente
manera:
Los procesos se despachan con algún esquema de prioridad.
Los procesos con igual prioridad se despachan “FIFO”
Planificación por Prioridad al más corto (SJF, Short Job First).
La disciplina del trabajo más corto primero es NO apropiativa y en ella
el trabajo o proceso con tiempo estimado de ejecución hasta terminación
más corto, es el siguiente en ser ejecutado. El SJF reduce el tiempo de espera
de los procesos, sin embargo, tiene una varianza mayor (es decir, es menos
predecible) que en FIFO, sobre todo para los trabajos largos.
SJF favorece a los procesos cortos a costa de los procesos largos. Además,
selecciona los trabajos que serán atendidos y que dejarán el sistema lo antes
posible. Esto último traduce en listas de espera cortas. El SJF es NO
apropiativo por lo que resulta de poca utilidad en ambientes de tiempo
compartido.
Es una disciplina no apropiativa y por lo tanto no recomendable en
ambientes de tiempo compartido.
El proceso en espera con el menor tiempo estimado de ejecución hasta su
terminación es el siguiente en ejecutarse.
Los tiempos promedio de espera son menores que con “FIFO”.
Los tiempos de espera son menos predecibles que en “FIFO”.
Favorece a los procesos cortos en detrimento de los largos.
Tiende a reducir el número de procesos en espera y el número de procesos
que esperan detrás de procesos largos.
Requiere un conocimiento preciso del tiempo de ejecución de un proceso, lo
que generalmente se desconoce.
Se pueden estimar los tiempos en base a series de valores anteriores.
Planificación por Prioridad al Tiempo Restante más Corto (SRTF, Short
Remaining Time First).
Es la contraparte apropiativa del SJF.
Es útil en sistemas de tiempo compartido.
El proceso con el tiempo estimado de ejecución menor para …nalizar es el
siguiente en ser ejecutado.
Un proceso en ejecución puede ser apropiado por un nuevo proceso con un
tiempo estimado de ejecución menor.
Tiene mayor sobrecarga que la planificación SJF.
Debe mantener un registro del tiempo de servicio transcurrido del proceso
en ejecución, lo que aumenta la sobrecarga.
Los trabajos largos tienen un promedio y una varianza de los tiempos de
espera aún mayor que en SJF.
La apropiación de un proceso a punto de terminar por otro de menor
duración recién llegado podría significar un mayor tiempo de cambio de
contexto (administración del procesador) que el tiempo de finalización del
primero.
Al diseñarse los Sistemas Operativos se debe considerar cuidadosamente la
sobrecarga de los mecanismos de administración de recursos comparándola
con los beneficios esperados.
Planificación el Siguiente con Relación de Respuesta Máxima (HRN)
Corrige algunas de las debilidades del SJF, tales como el exceso de perjuicio
hacia los procesos (trabajos) largos y el exceso de favoritismo hacia los
nuevos trabajos cortos.
Es una disciplina no apropiativa.
La prioridad de cada proceso está en función no sólo del tiempo de servicio
del trabajo, sino que también influye la cantidad de tiempo que el trabajo ha
estado esperando ser servido.
Cuando un proceso ha obtenido la cpu, corre hasta terminar.
Las prioridades, que son dinámicas, se calculan según la siguiente fórmula,
donde pr es la “prioridad”, te es el “tiempo de espera” y ts es el “tiempo de
servicio”:
Planificación del tiempo restante más corto primero (SRT).
La SRT es apropiativa, en ella el proceso con el tiempo estimado de
ejecución menor para llegar a su terminación es el siguiente en ser
ejecutado, incluyendo las nuevas llegadas. En la disciplina SJF, una vez que el
trabajo comienza su ejecución sigue hasta que termina. En SRT, un proceso
en ejecución puede ser apropiado por un nuevo proceso con n tiempo
estimado de ejecución menor.
La SRT tiene una sobrecarga mayor que la SJF. Debe mantener un
registro del tiempo de servicio transcurrido del trabajo en ejecución y debe
controlar las apropiaciones ocasionales.
Planificación el siguiente con relación de respuesta máxima (HRT).
Brinch Hansen (1971) desarrolló la estrategia el siguiente con relación
de respuesta máxima (HRT), que corrige algunas de las debilidades de SJF, en
especial el favoritismo por los tamaños pequeños. La HRT es una disciplina de
planificación NO apropiativa en la cual la prioridad de cada trabajo está en
función, no sólo del tiempo de servicio del trabajo, sino del tiempo que un
proceso ha estado esperando a ser servido, Una vez que un trabajo obtiene
el CPU, se ejecuta hasta su terminación. Las prioridades dinámicas en HRT se
calculan según la fórmula
Planificación Round Robin (RR)
Los procesos son despachados en FIFO, pero, se les otorga una
cantidad limitada de tiempo de CPU llamada división de tiempo (time - slice)
o cuanto (quantum). Si un proceso no termina antes de que se termine su
tiempo de CPU, el CPU es apropiado y asignado al siguiente proceso en
espera. El proceso apropiado se coloca al final de la lista de listos.
Planeación round robin.
El esquema Round robin es efectivo en un ambiente de tiempo
compartido en el cual el sistema necesita garantizar un tiempo de respuesta
razonable para los usuarios interactivos. La sobre carga de la apropiación se
mantiene baja mediante eficientes mecanismos de cambio de contexto y
proporcionado suficiente memoria para que los procesos residan en ella al
mismo tiempo.
Existe una variante de este esquema llamada selfish round robin (SRR).
En este esquema los procesos que entran al sistema se colocan primero en
una lista de espera hasta que su prioridad alcanza el nivel de proceso para la
lista de activos. Mientras un proceso está en la lista de espera, su prioridad
aumenta en una relación a; cuando un proceso entra a la lista de activos su
prioridad se incrementa en una relación b.
Tamaño del cuanto.
La determinación del tamaño del cuanto es decisiva para la operación
efectiva de un sistema computacional. ¿Debe ser pequeño o grande el
cuanto? ¿Debe ser fijo o variable? ¿Debe ser el mismo para todos los
usuarios, o debe ser diferente para cada grupo de usuarios?.
Cuando se tiene un cuanto grande cada proceso pude recibir todo el
tiempo que necesita para su terminación, de manera que el esquema round
robin se convierte en un FIFO. Cuando el cuanto es pequeño, la sobrecarga
por el intercambio de contexto se convierte en un factor dominante y el
rendimiento del sistema se degrada.
¿Cuál es el cuanto óptimo ? Es claro que cambia de un sistema a otro y
que varia de acuerdo a la carga del sistema.