Definición de Procesos:
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 unos de estos procesos tiene su propia CPU virtual. Desde
luego, en la realidad la verdadera CPU conmuta de un proceso a otro.
Un
proceso es un concepto manejado por el sistema operativo que consiste en
el conjunto formado por:
Las
instrucciones de un programa destinadas a ser ejecutadas por el
microprocesador.
Su
estado de ejecución en un momento dado, esto es, los valores de los registros
de la CPU para dicho programa.
Su
memoria de trabajo, es decir, la memoria que ha reservado y sus contenidos.
Otra
información que permite al sistema operativo su planificación.
Estados de los Procesos:
Consideramos que todo proceso puede estar, como mínimo, en uno de los
siguientes tres estados:
Activo:
el proceso está empleando la CPU, por tanto, está ejecutándose. Pueden haber
tantos procesos activos como procesadores haya disponibles. Por tanto, si el
sistema dispone de un único procesador, únicamente puede haber un proceso
activo a la vez.
Preparado:
el proceso no está ejecutándose pero es candidato a pasar a estado activo. Es
el planificador el que, en base a un criterio de planificación, decide qué
proceso selecciona de la lista de procesos preparados para pasar a estado
activo.
Bloqueado:
el proceso está pendiente de un evento externo que le ha hecho bloquear, tales
como una operación de lectura/escritura, la espera de finalización de un
proceso hijo, una señal o una operación sobre un semáforo. El dispositivo/hecho
externo "avisa" al S.O. cuando ha terminado la acción que realizaba
mediante una INTERRUPCIÓN, dejando el S.O. lo que está haciendo para atender a
esta última. Tras esto, el S.O. comprueba cuales son los procesos que fueron
bloqueados por ese evento externo, cambiándolos al estado de preparado.
La
transición de activo a preparado y viceversa depende de decisiones tomadas por
el planificador del sistema operativo en base a un cierto criterio.
La transición de activo a bloqueado, y de bloqueado a preparado puede
inducirlas el programador mediante llamadas al sistema.
Bloque de Control de los Procesos:
El bloque de control del proceso (BCP) o en inglés PCB (Process
Control Block) es un registro especial donde el sistema
operativo agrupa toda la información que necesita conocer
respecto a un proceso particular. Cada vez que se
crea un proceso el sistema operativo crea el BCP correspondiente para que sirva
como descripción en tiempo de ejecución durante toda la vida del proceso.
Cuando
el proceso termina, su BCP es borrado y el registro puede ser utilizado para
otros procesos. Un proceso resulta conocido para el sistema
operativo y por tanto elegible para competir por los recursos
del sistema sólo cuando existe un BCP activo asociado a él. El bloque de
control de proceso es una estructura de datos con campos para
registrar los diferentes aspectos de la ejecución del proceso y de la
utilización de recursos. La información almacenada en un BCP incluye
típicamente algunos o todos los campos siguientes:
Identificador
del proceso (Process Identificator -PID-, de sus siglas en inglés).
Estado
del proceso. Por ej.: listo, en espera, bloqueado.
Contador
de programa: dirección de la próxima instrucción a ejecutar.
Valores
de registro de CPU. Se utilizan también en el cambio de contexto.
Espacio
de direcciones de memoria.
Prioridad
en caso de utilizarse dicho algoritmo para planificación de CPU.
Lista
de recursos asignados (incluyendo descriptores de archivos y sockets abiertos).
Estadísticas
del proceso.
Datos
del propietario (owner).
Permisos
asignados.
Signals pendientes
de ser servidos. (Almacenados en un mapa de bits).
Esta
lista es simplemente indicativa, cada sistema operativo tiene su propio diseño
de BCP, con el conjunto de meta datos
necesarios para la administración. Puede medir desde 32 bits a 1024. Su
denominación cambia según el sistema operativo, por ej. en IBM se designa PSW por palabra de estado de proceso.
Difiere significativamente entre los sistemas de procesamiento por lotes (BATCH) y los
sistemas interactivos.
Algunos
sistemas de multiprogramación incluyen información de
mantenimiento con el propósito de facturar a los usuarios individuales el
tiempo de procesador, el almacenamiento, las operaciones de E/S y otras
utilizaciones de recursos.
Una
vez creado, el BCP se rellena con los atributos definidos como parámetros que
se hallan en la plantilla del proceso o que son especificados como parámetros
de la llamada al sistema operativo crear proceso. En ese momento el sistema
operativo suele asignar valores a otros campos. Por ejemplo, cuando se crea un proceso,
los registros e indicadores harware se fijan a los valores proporcionados por el
cargador/enlazador.
Planificación de procesos en
Sistemas Operativos: Conjunto de políticas y mecanismos
incorporados al sistemas operativos, a través de un módulo
denominado planificador, que debe decidir cuál de los procesos en condiciones
de ser ejecutado conviene ser despachado primero y qué orden de ejecución debe
seguirse. Esto debe realizarse sin perder de vista su principal objetivo que
consiste en el máximo aprovechamiento del sistema, lo que implica proveer un
buen servicio a los procesos existentes en un momento dado.
Comunicación y sincronización entre
los Procesos:
Los procesos que ejecutan de forma concurrente en un sistema se pueden clasificar como procesos independientes o cooperantes. Un proceso independiente es aquel que ejecuta sin requerir la ayuda o cooperación de otros procesos. Un claro ejemplo de procesos independientes son los diferentes intérpretes de mandatos que se ejecutan de forma simultánea en un sistema. Los procesos son cooperantes cuando están diseñados para trabajar conjuntamente en alguna actividad, para lo que deben ser capaces de comunicarse e interactuar entre ellos.
Tanto si los procesos son independientes como cooperantes, pueden producirse una serie de interacciones entre ellos. Estas interacciones pueden ser de dos tipos:
Los procesos que ejecutan de forma concurrente en un sistema se pueden clasificar como procesos independientes o cooperantes. Un proceso independiente es aquel que ejecuta sin requerir la ayuda o cooperación de otros procesos. Un claro ejemplo de procesos independientes son los diferentes intérpretes de mandatos que se ejecutan de forma simultánea en un sistema. Los procesos son cooperantes cuando están diseñados para trabajar conjuntamente en alguna actividad, para lo que deben ser capaces de comunicarse e interactuar entre ellos.
Tanto si los procesos son independientes como cooperantes, pueden producirse una serie de interacciones entre ellos. Estas interacciones pueden ser de dos tipos:
Interacciones
motivadas porque los procesos comparten o compiten por el acceso a recursos
físicos o lógicos. Esta situación aparece en los distintos tipos de procesos
anteriormente comentados. Por ejemplo, dos procesos totalmente independientes
pueden competir por el acceso a disco. En este caso, el sistema operativo
deberá encargarse de que los dos procesos accedan ordenadamente sin que se cree
ningún conflicto. Esta situación también aparece cuando varios procesos desean
modificar el contenido de un registro de una base de datos. Aquí es el gestor
de la base de datos el que se tendrá que encargar de ordenar los distintos
accesos al registro.
Interacción
motivada porque los procesos se comunican y sincronizan entre sí para alcanzar
un objetivo común. Por ejemplo, un compilador se puede construir mediante dos
procesos: el compilador propiamente dicho, que se encarga de generar código
ensamblador, y el proceso ensamblador, que obtiene código en lenguaje máquina a
partir del ensamblador. En este ejemplo puede apreciarse la necesidad de
comunicar y sincronizar a los dos procesos.
Estos dos tipos de interacciones obligan al sistema operativo a incluir mecanismo y servicios que permitan la comunicación y la sincronización entre procesos.
Estos dos tipos de interacciones obligan al sistema operativo a incluir mecanismo y servicios que permitan la comunicación y la sincronización entre procesos.
Definición de concurrencia
Dos
o más procesos decimos que son concurrentes, paralelos, o que se ejecutan
concurrentemente, cuando son procesados al mismo 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, por ejemplo, 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).
Ahora
bien, está claro que en esto tenemos que tener en cuenta que mientras un
proceso está escribiendo un valor en una variable determinada, puede darse el
caso que otro proceso que es concurrente al primero vaya a leer o escribir en
esa misma variable, entonces habrá que estudiar el caso en el que un proceso
haga una operación sobre una variable (o recurso en general) y otro proceso concurrente
a él realice otra operación de tal forma que no se realice correctamente
Tipos de Interrupciones:
Una interrupción es un mecanismo que permite ejecutar un bloque de
instrucciones interrumpiendo la ejecución de un programa, y luego restablecer
la ejecución del mismo sin afectarlo directamente. De este modo un programa
puede ser interrumpido temporalmente para atender alguna necesidad urgente del
computador y luego continuar su ejecución como si nada hubiera pasado.
Generalmente
se aplica para realizar tareas elementales asincrónicas en el computador tales
como responder al teclado, escribir en la pantalla, leer y escribir archivos.
Podemos considerar una tarea asincrónica como aquella que es solicitada sin
previo aviso y aleatoriamente desde el punto de vista del computador. Tomemos
el caso de la operación Ctrl-Alt-Supr. En Windows tiene el efecto de que
aparece en pantalla una lista de los procesos y ventanas en ejecución en el
computador. En cambio en el Sistema Operativo DOS cuando el usuario presiona
simultáneamente dichas teclas el computador procede a reinicializarse, aunque
pueda estar ocupado ejecutando un programa en ese instante. Vale decir fuerza
obligadamente a que el computador se reinicialice. Ya sea en el sistema Windows
o en DOS, el computador no está constantemente monitoreando el teclado para ver
si el usuario ha solicitado un Ctrl-Alt-Del, ya que en ese caso consumiría
mucho tiempo de proceso en ello y por ende la capacidad de proceso se vería
significativamente afectada. La solución empleada es una interrupción
Interrupciones internas de hardware:
Las interrupciones internas son
generadas por ciertos eventos que surgen durante la ejecución de un programa.
Este tipo de interrupciones son
manejadas en su totalidad por el hardware y no es posible modificarlas.
Un ejemplo claro de este tipo de
interrupciones es la que actualiza el contador del reloj interno de la
computadora, el hardware hace el llamado a esta interrupción varias veces
durante un segundo para mantener la hora actualizada.
Aunque no podemos manejar directamente
esta interrupción (no podemos controlar por software las actualizaciones del
reloj), es posible utilizar sus efectos en la computadora para nuestro
beneficio, por ejemplo para crear un "reloj virtual" actualizado
continuamente gracias al contador del reloj interno. Unicamente debemos
escribir un programa que lea el valor actual del contador y lo traduzca a un
formato entendible para el usuario.
Interrupciones externas de hardware:
Las interrupciones externas las generan
los dispositivos perifericos, como pueden ser: teclado, impresoras, tarjetas de
comunicaciones, etc. También son generadas por los coprocesadores.
No es posible desactivar a las
interrupciones externas.
Estas interrupciones no son enviadas
directamente a la UCP, sino que se mandan a un circuito integrado cuya función
es exclusivamente manejar este tipo de interrupciones. El circuito, llamado PIC
8259A, si es controlado por la UCP utilizando para tal control una serie de
vias de comunicación llamadas puertos.
Una lista de las interrupciones
generadas por hardware es la siguiente:
|
IRQ
|
Prioridad
|
Función
|
|
0
|
1
|
Timer
|
|
1
|
2
|
Teclado Hardware
|
|
2
|
Reservada
|
|
|
3
|
11
|
COM 2
|
|
4
|
12
|
COM 1
|
|
5
|
13
|
Tarjeta de Sonido
|
|
6
|
14
|
Controlador Floppy
|
|
7
|
15
|
Puerta Paralela
|
|
8
|
3
|
Reloj (tics)
|
|
9
|
4
|
Libre para tarjeta de red, sonido, puerta SCSI
|
|
10
|
5
|
idem
|
|
11
|
6
|
idem
|
|
12
|
7
|
PS-mouse
|
|
13
|
8
|
Co-procesador matemático
|
|
14
|
9
|
Canal IDE primario
|
|
15
|
10
|
Canal IDE secundario
|
Interrupciones de software:
Las interrupciones de software pueden
ser activadas directamente por el ensamblador invocando al número de
interrupción deseada con la instrucción INT.
El uso de las interrupciones nos ayuda
en la creación de programas, utilizandolas nuestros programas son más cortos,
es más fácil entenderlos y usualmente tienen un mejor desempeño debido en gran
parte a su menor tamaño.
Este tipo de interrupciones podemos
separarlas en dos categorias: las interrupciones del sistema operativo DOS y
las interrupciones del BIOS.
La diferencia entre ambas es que las
interrupciones del sistema operativo son más fáciles de usar pero también son
más lentas ya que estas interrupciones hacen uso del BIOS para lograr su
cometido, en cambio las interrupciones del BIOS son mucho más rápidas pero
tienen la desventaja que, como son parte del hardware son muy específicas y
pueden variar dependiendo incluso de la marca del fabricante del circuito.
La elección del tipo de interrupción a
utilizar dependerá unicamente de las caracteristicas que le quiera dar a su
programa: velocidad (utilizando las del BIOS) o portabilidad (utilizando las
del DOS).