M
M
A
A
N
N
U
U
A
A
L
L
D
D
E
E
S
S
I
I
S
S
T
T
E
E
M
M
A
A
S
S
O
O
P
P
E
E
R
R
A
A
T
T
I
I
V
V
O
O
S
S
I
I
D
D
i
i
r
r
e
e
c
c
c
c
i
i
ó
ó
n
n
d
d
e
e
Á
Á
r
r
e
e
a
a
I
I
n
n
f
f
o
o
r
r
m
m
á
á
t
t
i
i
c
c
a
a
w wwwww..iinnffoorrmmaattiiccaa..iinnaaccaapp..ccllPágina 1 de 164
Colaboraron en el presente manual:
Carlos Covarrubias Astudillo
Jefe de Programa de Estudios
Ingeniería en Gestión Informática
INACAP La Serena
Derechos Reservados Titular del Derecho: INACAP
N° de inscripción en el Registro de Propiedad Intelectual # 130.357 de fecha 02-01-2003. © INACAP 2003.
D
D
E
E
S
S
C
C
R
R
I
I
P
P
C
C
I
I
Ó
Ó
N
N
D
D
E
E
L
L
C
C
O
O
N
N
T
T
E
E
N
N
I
I
D
D
O
O
El presente documento contiene una síntesis ordenada de los tópicos más relevantes de la asignatura de Sistemas Operativos I, correspondientes al programa de estudios de Ingeniería en Gestión Informática.
El documento pretende ser una fuente de información que complemente la labor docente y a la vez sirva como guía de estudio para el alumno.
Este manual se organiza en nueve capítulos ordenados según los contenidos establecidos en el programa de la asignatura (plan 790-5). Además, contiene un completo conjunto de preguntas y ejercicios resueltos que facilitarán el proceso de autoevaluación de aprendizajes y avances de parte del alumno.
Sugerencia de distribución de tiempo de lectura y estudio.
Tiempo sugerido
CAPÍTULO I : INTRODUCCIÓN
CAPÍTULO II : SERVICIOS DE LOS SISTEMAS OPERATIVOS CAPÍTULO III : ELEMENTOS BÁSICOS
CAPÍTULO IV : ADMINISTRACIÓN DE CPU CAPÍTULO V : ADMINISTRACIÓN DE MEMORIA CAPÍTULO VI : CONCURRENCIA
CAPÍTULO VII : ASPECTOS DE SEGURIDAD CAPÍTULO VIII : ELEMENTOS DE CONFIGURACIÓN CAPÍTULO IX : ALGUNOS SISTEMAS OPERATIVOS
RESOLUCIÓN DE PREGUNTAS Y PROBLEMAS
TIEMPO TOTAL DE LECTURA Y ESTUDIO
1 hrs. 1 hrs. 4 hrs. 3 hrs. 3 hrs. 4 hrs. 2 hrs. 2 hrs. 4 hrs. 12 hrs. 36 hrs.
NOTA: Lea todo el manual, al menos una vez, antes de comenzar su estudio detallado.
Página 3 de 164
Í
Í
N
N
D
D
I
I
C
C
E
E
INTRODUCCIÓN ...7
¿Qué Es Un Sistema Operativo? ... 8
El Sistema Operativo Como Máquina Virtual...8
El Sistema Operativo Como Administrador De Recursos...9
Resumen Histórico... 10
Sistemas De Procesamiento Por Lotes (Batch)...10
SERVICIOS DE LOS SISTEMAS OPERATIVOS...11
Monoprogramación... 11
Multiprogramación ... 11
Tiempo Compartido... 12
Sistemas De Tiempo Real... 12
Multiproceso... 13
Sistemas Multiprocesadores...13
Sistemas Distribuidos...14
ELEMENTOS BÁSICOS ...15
Llamadas Al Sistema ... 15
Programas Del Sistema ... 16
Procesamiento Concurrente... 16
Procesos ...17
Relación Entre Los Procesos ...17
Especificación De Los Procesos ...18
Estados De Los Procesos ...18
Transiciones entre los estados...19
El Bloque De Control De Procesos (PCB, Process Control Block )...24
Procesos y Hebras ...25
Operaciones ...25
El Planificador De Procesos ...25
Criterios De Performance...26
Conceptos Básicos De Un Sistema Operativo... 26
Modelo Sencillo De Un Sistema Operativo ...27
Interrupciones: La Base De Los Sistemas Operativos Modernos ...29
Administración De Datos... 33
Archivos...34
Tipos Y Estructuras De Archivos ...34
Operaciones Con Los Archivos...34
Directorios De Archivos ...35
Operaciones Con Los Directorios ...36
Acceso Secuencial ...38
Acceso Directo...38
Otros Métodos De Acceso...38
Realización Del Sistema De Archivos...38
Administración De Dispositivos De Almacenamiento Rotacional... 40
Estructura De Un Disco ...41
Estructura Física...41
Estructura Lógica...42
Planificación De Discos ...43
ADMINISTRACIÓN DE CPU ...48
Algoritmo FCFS... 49
Algoritmos SJF & SRT... 49
Planificación Por Prioridades... 50
Algoritmo Round Robin... 50
Colas Multinivel... 50
Algoritmo Round Robin Virtual... 51
Evaluación De Las Políticas... 51
ADMINISTRACIÓN DE MEMORIA...52
La memoria dedicada. ... 52
División De Memoria: El Monitor Residente... 52
Protección de la memoria ... 52
Reasignación de direcciones... 53
Memoria Virtual... 53
Swapping ... 54
Segmentación... 55
Paginación... 56
Paginación De Múltiples Niveles... 59
Segmentación/Paginación ... 60
Fragmentación... 60
Estrategias De Localidad ... 60
Concepto De Localidad...60 Conjunto De Trabajo...61Algoritmos De Reemplazo... 62
Algoritmo De Bits Adicionales De Referencia...63
Algoritmo De Segunda Oportunidad...63
Algoritmo LFU ...63
Algoritmo MFU ...64
Algoritmos Adicionales...64
Algoritmos Basados En Ajuste ...64
CONCURRENCIA ...65
Secciones Críticas... 66
Operaciones Lock/Unlock...67
Bloqueo Mediante El Uso De Variables Compartidas ...67
Sincronización De Ejecución...68
Algoritmo de Peterson...69
Algoritmo De Dekker...70
Sincronización Con Instrucciones De Hardware...71
Semáforos...72
Operaciones Wait/Signal...72
Versión Más General De Los Semáforos ...74
Buffers Múltiples ...74
Comunicación Entre Procesos ... 75
Técnicas De Comunicación...75
Sistema Maestro-Sirviente...76
Sistema De Diálogo...76
Sistema De Correo...76
Transmisión Entre Mensajes, Comunicación Directa...77
Transmisión Entre Mensajes, Comunicación Indirecta ...77
Utilización De Buffers...78
Monitores ...79
Página 5 de 164
Deadlocks (Interbloqueos)... 83
Prevención De Interbloqueos ...83
Evitación De Los Interbloqueos...84
Detección De Los Interbloqueos ...85
Recuperación De Interbloqueos...86
ASPECTOS DE SEGURIDAD ...88
Técnicas De Protección ... 88
Nominación...88 Contraseñas ...89 Dominios de Protección...89 Matriz De Acceso...89 Listas De Acceso...90Usuarios y Grupos De Acceso...90
Seguridad De Los Sistemas Operativos... 91
Concepto De Seguridad...91
Métodos De Verificación...92
Estrategia De Total Seguridad...92
Seguridad Externa...93
Seguridad De Operación...93
Vigilancia...93
Supervisión De Amenazas ...94
Protección Por Contraseña (Llave/Cerradura)...94
Auditoría ...95
Criptografía ...95
ELEMENTOS DE CONFIGURACIÓN...97
Estructuras De Sistemas Operativos (Diseños) ... 97
Sistemas Monolíticos (DOS, MAC)...97
Sistemas Con Capas (Unix / OS2) ...97
Máquinas Virtuales (VM/370 CMS (Conversational Monitor System))...97
Sistemas De Microkernel...97
Organizaciones Más Comunes De Multiprocesadores... 98
Tiempo Compartido O Bus Común (Conductor Común)...98
Matriz De Barras Cruzadas E Interruptores ...99
Almacenamiento De Interconexión Múltiple...99
Conexiones Hipercubo... 100
Organización De Los Sistemas Operativos De Multiprocesadores ... 100
Sistemas Ligeramente Acoplados v/s Sistemas Rígidamente Acoplados ... 100
Maestro/Satélite... 101
Ejecutivos Separados ... 101
Simétrico ... 101
Consideraciones finales... 101
ALGUNOS SISTEMAS OPERATIVOS ...102
Sistema Operativo Unix ... 102
Control Y Sincronización De Procesos ... 102
Creación De Procesos ... 104
Comunicación Entre Procesos ... 104
Gestión De La Memoria... 105
Sistema De Archivos... 106
Subsistema De Entrada/Salida... 106
Sistema Operativo Novell Netware ... 108
Netware 4.X... 108
Protocolo Básico De Netware... 108
Características De Rendimiento... 110
Características De Protección De Datos ... 111
Otras Prestaciones ... 112
Sistema Operativo Windows NT... 113
Otras Características ... 113
Control Y Sincronización De Procesos ... 114
Gestión De Memoria... 114
Sistema Operativo Windows 2000 ... 116
Instalación Más Sencilla... 116
La Evolución Plug & Play ... 117
Lo Mejor De Versiones De Las Anteriores... 117
Seguridad Basada En Elevados Estándares De Desempeño ... 118
Sistema Operativo Linux ... 121
¿Por Qué Utilizar Linux? ... 121
Descripción De Las Funciones De Linux... 122
¿Qué Se Puede Hacer Con Linux? ... 124
Distribuciones ... 124
PREGUNTAS Y PROBLEMAS RESUELTOS...126
Unidades I, II, III & IV: ... 126
Preguntas De Selección Múltiple... 126
Preguntas De Términos Pareados ... 133
Preguntas De Desarrollo ... 134
Problemas ... 135
Unidades V & VI:... 137
Preguntas De Selección Múltiple... 137
Preguntas de términos pareados ... 141
Preguntas De Desarrollo ... 142
Problemas ... 143
Unidades VII, VIII & IX: ... 145
Preguntas De Selección Múltiple... 145
Preguntas De Términos Pareados ... 148
Preguntas De Desarrollo ... 149
Respuestas y Soluciones:... 150
Preguntas De Selección Múltiple... 150
Preguntas De Términos Pareados ... 151
Preguntas de desarrollo... 154
Problemas ... 157
BIBLIOGRAFÍA ...162
Página 7 de 164
C
C
A
A
P
P
Í
Í
T
T
U
U
L
L
O
O
I
I
I
I
N
N
T
T
R
R
O
O
D
D
U
U
C
C
C
C
I
I
Ó
Ó
N
N
Todo el hardware de un sistema computacional a cualquier nivel se compone de una serie de recursos físicos que van desde periféricos en general hasta la misma CPU. Los software de aplicación son los encargados de dar un uso adecuado a todo este conjunto de recursos.
Un sistema operativo es un conjunto de programas que supervisan la ejecución de todos los programas de aplicación y controlan la utilización de todos los recursos de hardware que estén disponibles al momento de su ejecución.
En los años sesenta, un sistema operativo se podría haber definido como el software que controla al hardware. Sin embargo, actualmente existe una tendencia significativa a la transferencia de las funciones del software al firmware(*), es decir, microcódigo. Dicha tendencia se ha pronunciado tanto que es probable que en algunos sistemas las funciones codificadas en firmware sobrepasen pronto a aquellas codificadas en software.
Es evidente que se necesita una nueva definición de sistema operativo. Se puede imaginar un sistema operativo como los programas, instalados en el software o el firmware, que hacen utilizable el hardware. El hardware proporciona la "capacidad bruta de cómputo"; los sistemas operativos ponen dicha capacidad de cómputo al alcance de los usuarios y administran cuidadosamente el hardware para lograr un buen rendimiento.
El estudio de los sistemas operativos ha llegado ha ser un tópico importante en las ciencias de la computación después de la introducción del concepto time sharing, multiprogramación y multitarea, características que hasta hoy en día aún siguen revolucionando el ambiente computacional.
La actual es una etapa muy interesante en la evolución de los sistemas operativos. La capacidad de los computadores continúa aumentando a una velocidad vertiginosa, mientras que su costo se reduce asombrosamente. En esta década son muy comunes las estaciones de trabajo de escritorio con velocidades de procesamiento muy elevadas y ya se habla de máquinas de escritorio capaces de manejar velocidades de más de mil millones de instrucciones por segundo. Como el costo de los procesadores se está reduciendo tanto, las arquitecturas de los procesadores múltiples y en red están creando un sin número de oportunidades para investigar y desarrollar nuevas estrategias de hardware y software. Los lenguajes de programación secuenciales han sido desplazados por lenguajes de programación concurrentes que permitan especificar actividades de cómputo en paralelo. El enfoque de sistemas abiertos, en el cual los proveedores de hardware, software y dispositivos de comunicación producen sistemas que se ajustan a estándares aceptados internacionalmente, presenta nuevos retos a los fabricantes que antes se concentraban en sus propias arquitecturas. Los nuevos estándares internacionales que rigen la comunicación abierta, OSI (Open System Interconnection) e ISDN (Integrated Services Digital Network) ya permiten que los computadores de todo el mundo se comuniquen fácilmente entre sí, lo cual representa un paso gigante hacia el establecimiento de la computación distribuida a escala mundial.
(*) EI concepto de microprogramación (firmware) se atribuye por lo general al profesor Maurice Wilkes quien, en
1951, presentó conceptos que forman la base de las técnicas actuales de microprogramación. Sin embargo, no fue sino hasta mediados de los años sesenta, cuando se generalizó la microprogramación. La microprogramación introduce una capa de programación debajo del lenguaje de máquina del computador. Como tal, hace posible la definición de instrucciones en lenguaje de máquina. La microprogramación, que se ejecuta en una memoria de control de alta velocidad, es parte integral de las arquitecturas de computador modernas y es importante para los aspectos de rendimiento y seguridad de los sistemas operativos.
¿
¿
Q
Q
u
u
é
é
E
E
s
s
U
U
n
n
S
S
i
i
s
s
t
t
e
e
m
m
a
a
O
O
p
p
e
e
r
r
a
a
t
t
i
i
v
v
o
o
?
?
El sistema operativo es el ente intermedio entre las aplicaciones y la máquina; es el encargado de interpretar las instrucciones de las aplicaciones y traducir los códigos de respuesta de la máquina, así como también es el encargado de asignar en forma racional y eficiente los recursos que precisen los software de aplicación.
A pesar de que todo el mundo utiliza sistemas operativos casi a diario, es difícil definir qué es un sistema operativo. En parte, esto se debe a que los sistemas operativos realizan dos funciones diferentes:
• Proveer una máquina virtual, es decir, un ambiente en el cual el usuario pueda ejecutar programas de manera conveniente, protegiéndolo de los detalles y complejidades del hardware.
• Administrar eficientemente los recursos del computador.
El Sistema Operativo Como Máquina Virtual
Un computador se compone de uno o más procesadores o CPUs, memoria principal o RAM, memoria secundaria (discos), tarjetas de expansión (tarjetas de red, módems y otros), monitor, teclado, mouse y otros dispositivos. O sea, es un sistema complejo. Escribir programas que hagan uso correcto de todos estos componentes no es una tarea trivial (peor aún si se habla del uso óptimo). Si cada programador tuviera que preocuparse, por ejemplo, de cómo funciona el disco duro del computador, teniendo además siempre presentes todas las posibles cosas que podrían fallar, entonces a la fecha se habría escrito una cantidad bastante reducida de programas.
Es mucho más fácil decir
“escriba lo apuntado por este puntero al final del archivo datos”
, que decir: 1. Poner en determinados registros del controlador de disco la dirección que se quiere escribir, elnúmero de bytes que se desea escribir, la posición de memoria donde está la información a escribir, el sentido de la operación (lectura o escritura), amén de otros parámetros;
2. Decir al controlador que efectué la operación;
3. Esperar. Decidir qué hacer si el controlador se demora más de lo esperado (¿cuánto es "lo esperado"?);
4. Interpretar el resultado de la operación (una serie de bits);
5. Reintentar si algo anduvo mal, etc.
Además, habría que rescribir el programa si se instala un disco diferente o se desea ejecutar el programa en otra máquina.
Hace muchos años que quedó claro que era necesario encontrar algún medio para aislar a los programadores de las complejidades del hardware. Esa es precisamente una de las tareas del sistema operativo, que puede ser visto como una capa de software que maneja todas las partes del sistema y hace de intermediario entre el hardware y los programas del usuario. De esta manera, el sistema operativo presenta una interfaz o máquina virtual que es más fácil de entender y de programar que la máquina "pura". Además, para una misma familia de máquinas, aunque tengan componentes diferentes (por ejemplo, monitores de distinta resolución o discos duros de diversos fabricantes), la máquina virtual puede ser idéntica: el programador ve exactamente la misma interfaz.
Página 9 de 164
El Sistema Operativo Como Administrador De Recursos
La otra tarea del sistema operativo consiste en administrar los recursos del computador cuando hay dos o más programas que se ejecutan simultáneamente y además requieren usar el mismo recurso (como tiempo de CPU, memoria o impresora).
Además, en un sistema multiusuario, suele ser necesario (o conveniente) compartir información (además de dispositivos físicos). Al mismo tiempo, deben tenerse en cuenta una serie de consideraciones de seguridad; Por ejemplo: la información confidencial sólo debe ser accedida por usuarios autorizados, un usuario cualquiera no debiera ser capaz de sobrescribir áreas críticas del sistema, etc. (En este caso, un usuario puede ser una persona, un programa, u otro computador). En resumen, el sistema operativo debe llevar la cuenta acerca de quién está usando qué recursos; otorgar recursos a quienes lo solicitan (siempre que el solicitante tenga derechos adecuados sobre el recurso); y arbitrar en caso de solicitudes conflictivas.
En síntesis, se puede afirmar que las principales tareas que realiza un sistema operativo son:
a. Administración de memoria
• Mantiene el estado de los programas y datos residentes en memoria, esperando el uso de la CPU, algún dispositivo de E/S o la utilización de algún otro recurso.
• Contiene tablas de asignación de direcciones que indican qué programas y datos están en memoria, cuanto espacio ocupan en forma independiente y dónde están ubicados.
• Asigna o quita espacio en memoria a programas según sea posible o requerido.
b. Administración de CPU
• Decide qué programa hace uso del recurso de la unidad central de procesamiento, en que momento y por cuánto tiempo.
• Crea una lista de espera con los programas que están solicitando utilizar este recurso a fin de poder asignar posteriormente el recurso bajo alguna política de prioridad.
c. Manejo de dispositivos de E/S
• Controla el flujo de datos desde y hacia cualquier dispositivo de entrada y salida.
• Controla la comunicación con los dispositivos de E/S y para dispositivos particulares existen programas especiales de control de periféricos (drivers).
d. Administración de archivos en disco
• Crea, elimina, copia y controla el acceso a los archivos. Mantiene directorios de los archivos existentes en el disco y administra el espacio libre.
e. Comunicación con el usuario
• Permite que el operador controle el computador.
• Indica y, si es posible, controla los errores ocurridos en el sistema. Por ejemplo el término anormal de alguna aplicación debido a fallas de la aplicación misma o problemas de hardware. • Indica el número de usuarios que están utilizando el sistema computacional.
• Permite la utilización de dispositivos generales o particulares; cuando no se encuentran disponibles envía un correspondiente mensaje de información al usuario o la aplicación que lo solicita.
R
R
e
e
s
s
u
u
m
m
e
e
n
n
H
H
i
i
s
s
t
t
ó
ó
r
r
i
i
c
c
o
o
En un principio sólo existía el hardware del computador. Los primeros computadores eran voluminosas máquinas que se operaban directamente desde una consola. Pero con el transcurso del tiempo se hizo evidente la necesidad de simplificar la tarea de los programadores, quienes progresivamente se veían ante la necesidad de crear programas de aplicación cada vez más grandes y consecuentemente el proceso de detección y corrección de fallas en interacción directa con la máquina se hacía cada vez más lento y complejo. Así fue como aparecieron los compiladores FORTRAN y COBOL que hacían en su tiempo las veces de lo que hoy se conoce como sistema operativo. Posteriormente aparecieron los sistemas operativos propiamente tales.
A fin de evitar mayores extensiones en cuanto a los detalles de evolución de los sistemas operativos y en general de los sistemas computacionales, se puede observar la siguiente tabla:
Generación de
computadores Año(s) Características
1° 1945 - 1955
• Tubos de vacío y tableros de cómputo.
• No existe sistema operativo; se manejan por medio de hardware y secuencias de comandos directos.
2° 1955 - 1965 • Transistores y sistemas batch.
• Fortran y Assembler en tarjetas perforadas. 3° 1965 - 1980 • • IBM/360 sistema operativo OS/360.
Sistemas operativos de propósito general multimodo. 4° 1980 - ... • Circuitos integrados de gran escala; aparición del PC.
• Ms-DOS, UNIX, etc.
5° 1990 - ... • Superconductores, Microchips, Pentium, etc.
• Versiones mejoradas de diversos sistemas operativos.
Sistemas De Procesamiento Por Lotes (Batch)
Para comprender conceptos más específicos, como la diferencia entre el tiempo compartido y la multiprogramación, primero se ha de conocer el método de procesamiento por lotes. Cuando se desarrollaron por primera vez los sistemas por lotes, estaban caracterizados por la "agrupación en lotes" de trabajos similares. Los sistemas basados en tarjetas y cintas sólo permitían el acceso secuencial a los programas y datos, por lo que únicamente podía usarse un paquete de aplicación en cada ocasión (por ejemplo, el compilador, ligador y cargador de FORTRAN, o sus equivalentes de COBOL). Al hacerse factible el almacenamiento en línea en disco fue posible ofrecer un acceso inmediato a todo el paquete de aplicación. Los sistemas por lotes, hace ya tiempo que dejaron de ser definidos por la agrupación de trabajos similares; ahora se utilizan otras características.
Un sistema operativo por lotes lee un flujo separado de datos, cada uno con banderas de control que definen qué hace cada trabajo. Cuando éste termina, generalmente se imprime el resultado a través de algún dispositivo de salida. La característica que delata un sistema por lotes en forma definitiva es la ausencia de interconexión entre el usuario y el trabajo mientras se ejecuta. El trabajo se prepara, se envía y más tarde se obtiene algún resultado. El tiempo de retorno(*) puede ser el resultado de la cantidad de procesos que se realizan en forma necesaria, o las demoras, antes de que el sistema operativo comience a procesar un nuevo lote (o trabajo).
Los sistemas por lotes se caracterizan por ser secuenciales y por el hecho de que la CPU tiene el control total de la ejecución del proceso. Estos sistemas son muy útiles cuando se trata de la realización de procesos masivos; sin embargo, el tiempo de proceso es alto y la CPU pasa la mayor parte de ese tiempo ociosa, debido a la considerable lentitud de los procesos de carga y descarga de paquetes de información (antiguamente tarjetas). Los sistemas por lotes se pueden clasificar en monoprogramables y multiprogramables.
(*)
Página N° 11 de 151
C
C
A
A
P
P
Í
Í
T
T
U
U
L
L
O
O
I
I
I
I
S
S
E
E
R
R
V
V
I
I
C
C
I
I
O
O
S
S
D
D
E
E
L
L
O
O
S
S
S
S
I
I
S
S
T
T
E
E
M
M
A
A
S
S
O
O
P
P
E
E
R
R
A
A
T
T
I
I
V
V
O
O
S
S
M
M
o
o
n
n
o
o
p
p
r
r
o
o
g
g
r
r
a
a
m
m
a
a
c
c
i
i
ó
ó
n
n
Se atiende un trabajo a la vez. Cuando el programa entra en proceso se apodera de la CPU y de los dispositivos de E/S, hasta que termina. La monoprogramación es el modo de trabajo en el que solamente un programa utiliza el procesador, siendo además el único existente en la memoria principal, de tal forma que hasta que éste no termine su trabajo no cederá el control al siguiente programa que será cargado en memoria, sustituyendo al anterior. En el Capítulo N° 5 se detalla el cómo se gestiona la memoria en aquellos sistemas que utilizan este modo de trabajo.
Los sistemas monoprogramables lineales son la expresión más simple del sistema operativo y se caracterizan por tener una cola de atención sin prioridades y un proceso no termina hasta haber completado su ejecución.
Los sistemas monoprogramables con prioridades se caracterizan por tener una cola de atención con prioridades y un proceso no termina hasta haber completado su ejecución.
Los sistemas monoprogramables con prioridades y tiempo de salida se caracterizan por tener una cola de atención con prioridades y un proceso puede terminar al haber completado su ejecución o después de haber transcurrido un intervalo de tiempo de atención prefijado. En el último caso es devuelto a la cola de atención.
M
M
u
u
l
l
t
t
i
i
p
p
r
r
o
o
g
g
r
r
a
a
m
m
a
a
c
c
i
i
ó
ó
n
n
En un procesamiento por lotes puede ocurrir que en cierto instante ocupe la CPU un proceso que demande una tarea de impresión; así, él seguirá ocupando la CPU mientras espera que el proceso de impresión termine, dejando la CPU ociosa. La multiprogramación aumenta la utilización de la CPU organizando los trabajos de manera que ésta siempre tenga algo que ejecutar.
El concepto es el siguiente: El sistema operativo escoge uno de los trabajos del depósito y lo comienza a ejecutar. En algún momento, el trabajo tendrá que esperar que se efectúe cierta tarea como montar una cinta, que se introduzca un mandato mediante el teclado, o que termine una operación de E/S. En un sistema no multiprogramado, la CPU estaría inactiva. En un sistema multiprogramado, el sistema operativo cambia a otro trabajo y lo ejecuta; cuando ese trabajo tiene que esperar, la CPU cambia a otro, y así sucesivamente. Eventualmente el primer trabajo deja de esperar y recupera la CPU; mientras haya otro trabajo por ejecutar, la CPU nunca estará inactiva. Los sistemas operativos multiprogramados son bastante complejos. Para que pueda haber varios programas listos para ejecutarse, el sistema debe conservarlos todos en la memoria al mismo tiempo. Cuando se consigue esto, se necesita alguna forma de administración de memoria. Además, si al mismo tiempo existen varios programas listos para ejecutarse, el sistema debe elegir uno de ellos. Esta decisión se denomina planificación de la CPU.
Por otra parte, existen dos formas habituales de organizar la diferencia de velocidades de ejecución entre la CPU y los dispositivos: Polling(*) e Interrupciones(**).
Finalmente, si varios programas se ejecutan concurrentemente, es necesario limitar la posibilidad de que se interfieran unos a otros en todas las fases del sistema operativo, incluyendo la planificación de procesos, el almacenamiento en disco y la administración de memoria.
Los sistemas multiprogramables con partición fija disponen de espacios de almacenamiento fijo para los procesos que se encuentran en la cola; así, un proceso debe esperar hasta que este disponible un bloque (o más) de memoria lo suficientemente grande para ser atendido. En los sistemas multiprogramables de partición variable la memoria disponible es dividida en secciones variables de acuerdo a la demanda de cada uno de los procesos que sean almacenados en ella.
T
T
i
i
e
e
m
m
p
p
o
o
C
C
o
o
m
m
p
p
a
a
r
r
t
t
i
i
d
d
o
o
El tiempo compartido (o sistemas en línea) es una extensión lógica de la multiprogramación. La CPU ejecuta las diversas tareas alternando entre ellas, pero estos cambios son tan frecuentes que los usuarios pueden interactuar con cada programa mientras se ejecuta.
Un sistema operativo de tiempo compartido permite a los diversos usuarios compartir al mismo tiempo el computador. Puesto que en un sistema de tiempo compartido cada acción o mandato suele ser breve, sólo se requiere un corto tiempo de la CPU para cada proceso. Como el sistema pasa rápidamente de un usuario al siguiente, cada uno de ellos tiene la impresión de que cuenta con su propio computador, cuando en realidad todos comparten sólo uno.
En 1960 se expuso el concepto de tiempo compartido, pero como los sistemas de este tipo eran más difíciles y costosos de construir; no fueron comunes sino hasta principios de los años setenta. Al crecer la popularidad del tiempo compartido, los investigadores han tratado de combinar los sistemas por lotes y de tiempo compartido en uno solo. Diversos sistemas de computación diseñados inicialmente como sistemas por lotes se han modificado para crear un subsistema de tiempo compartido. Hoy en día, la mayoría de los sistemas ofrecen tanto el procesamiento por lotes como el tiempo compartido, aunque siempre su diseño básico se inclina hacia uno u otro tipo.
Los sistemas operativos de tiempo compartido son complejos y ofrecen algún mecanismo para la ejecución concurrente. Además, como en la multiprogramación, hay que conservar simultáneamente varios programas en la memoria, lo que requiere algún tipo de administración de memoria, protección y planificación de la CPU. Para lograr un tiempo de respuesta razonable hay que intercambiar los trabajos entre la memoria principal y el disco que funciona como almacenamiento de respaldo para la memoria principal. Por tanto, también es necesario proporcionar administración del disco. Los sistemas de tiempo compartido deben ofrecer, además, un sistema de archivos en línea. La multiprogramación y el tiempo compartido son los aspectos centrales de los sistemas operativos modernos.
S
S
i
i
s
s
t
t
e
e
m
m
a
a
s
s
D
D
e
e
T
T
i
i
e
e
m
m
p
p
o
o
R
R
e
e
a
a
l
l
Se utilizan cuando hay requerimientos de tiempo muy rígidos en las operaciones o en el flujo de datos, generalmente se utilizan como sistemas de control en una aplicación dedicada. Por ejemplo: sistemas de control industrial, experimentos científicos y sistemas médicos. Los sistemas de tiempo real se pueden clasificar en:
• Los sistemas de tiempo real por hard: que garantizan que las tareas críticas se ejecutan a tiempo. Los datos son
almacenados en memorias no volátiles (ROM), no utilizan técnicas de memoria virtual ni tiempo compartido, ambas técnicas no pueden ser implementadas por hardware.
• Los sistemas de tiempo real por soft: que ejecutan tareas menos críticas y manejan técnicas de prioridades para la
asignación de tareas. Estos sistemas tienen menos utilidades que los implementados por hard, por ejemplo no pueden utilizarse para control industrial ni en robótica. Pero sí para multimedia, supervisión de controles industriales y realidad virtual.
(**)
Las interrupciones permiten que la CPU se concentre en la atención de procesos; luego, cuando un dispositivo requiere de la atención de la CPU, le enviará una solicitud de interrupción. Es decir es el procedimiento inverso al polling.
Página 13 de 164
M
M
u
u
l
l
t
t
i
i
p
p
r
r
o
o
c
c
e
e
s
s
o
o
Una nueva tendencia de los sistemas de computación es distribuir los cálculos entre varios procesadores. Existen dos esquemas básicos para la construcción de estos sistemas de multiproceso (o distribuidos). En un sistema fuertemente acoplado los procesadores comparten la memoria y un reloj, y por lo general la comunicación se lleva a cabo a través de una memoria compartida.
En un sistema débilmente acoplado los procesadores no comparten ni memoria ni reloj, pues cada uno cuenta con su propia memoria local. Los procesadores se comunican a través de distintas líneas de comunicación, como canales de alta velocidad o líneas telefónicas. A estos sistemas generalmente se les conoce como sistemas distribuidos y en ellos los procesadores pueden variar en cuanto a tamaño y función; pueden incluir pequeños microprocesadores, estaciones de trabajo, minicomputadores y grandes sistemas de computación de propósito general.
Algunas de las razones para construir sistemas distribuidos son las siguientes:
a. Compartimiento de recursos
Si varias instalaciones (con distintas capacidades) están conectadas entre sí, entonces un usuario puede utilizar desde una instalación los recursos disponibles en otra. Por ejemplo, en la instalación A se puede utilizar una impresora láser sólo disponible en la instalación B. Al mismo tiempo, en B es posible tener acceso a un archivo que reside en A. En general, el compartimiento de recursos en un sistema distribuido ofrece los mecanismos para compartir archivos en instalaciones remotas, procesar información en una base de datos distribuida, imprimir archivos en instalaciones remotas, utilizar dispositivos remotos de hardware especializado y llevar a cabo otras operaciones.
b. Aceleración de los cálculos
Si un cálculo determinado puede dividirse en varios subcálculos que se ejecuten concurrentemente, un sistema distribuido permitiría distribuir los cálculos entre las diversas instalaciones y también ejecutarlos concurrentemente. Además, si en un momento dado una instalación esta sobrecargada con trabajos, algunos de ellos pueden pasarse a otras instalaciones con poca carga. A este movimiento de trabajos se le llama compartimiento de cargas.
c. Confiabilidad
Si falla una instalación de un sistema distribuido, las restantes pueden, potencialmente, continuar operando. Si el sistema se compone de varias instalaciones autónomas de gran tamaño, la avería de una no debe afectar a las demás. Si, por otra parte, el sistema esta compuesto por varias máquinas pequeñas, cada una responsable de alguna función indispensable del sistema, entonces un solo error puede detener el funcionamiento de todo el sistema. En general, si hay suficiente redundancia en el sistema (tanto en hardware como en datos), el sistema puede continuar su operación, incluso cuando fallen algunas de las instalaciones.
d. Comunicación
Existen varias situaciones más donde los programas de un sistema necesitan intercambiar datos entre sí. Un ejemplo son los sistemas de ventanas, ya que con frecuencia se comparten datos o se transfieren entre ventanas. Cuando varias instalaciones están conectadas entre sí por una red de comunicaciones, los procesos en las distintas instalaciones tienen la oportunidad de intercambiar información.
Sistemas Multiprocesadores
Un sistema multiprocesador tiene más de una CPU compartiendo memoria y periféricos. Las ventajas más evidentes son mayor potencia de computación y fiabilidad.
Estos sistemas asignan una tarea específica a cada procesador. Un procesador maestro controla el sistema, los otros esperan al maestro o tienen tareas predefinidas. Este esquema define una relación
maestro/esclavo. Pueden usarse pequeños ordenadores situados a cierta distancia de la CPU principal, trabajando en lectoras de tarjetas e impresoras en línea y transfiriendo estos trabajos hacia y desde la CPU principal. Los sistemas de tiempo compartido se componen generalmente de un ordenador grande (principal) y un ordenador más pequeño que sólo es responsable de las entradas y salidas sobre terminales.
Otra forma son las redes de ordenadores, donde se comunican muchos sistemas informáticos independientes, transfiriéndose información. Sin embargo, cada sistema tiene su propio sistema operativo y trabaja independientemente.
Estos esquemas se pueden clasificar en sistemas multiprocesadores simétricos, en el cual cada procesador corre una copia idéntica del sistema operativo y se comunica con los demás procesadores según sus necesidades; o multiprocesadores asimétricos, en los cuales cada procesador tiene asignado una tarea predefinida. Un procesador maestro controla el sistema. (Para mayor información véase capítulo
VIII)
Sistemas Distribuidos
La principal diferencia entre los sistemas de multiprocesadores y distribuidos, es que estos últimos no comparten memoria ni periféricos. Cada procesador tiene su propia memoria local. Los procesadores se comunican entre si a través de varias líneas de comunicación, tales como líneas telefónicas o buses de alta velocidad. Dicho de otra forma, se trata de redes de computadores donde los procesadores pueden variar en tamaño y función.
Página 15 de 164
C
C
A
A
P
P
Í
Í
T
T
U
U
L
L
O
O
I
I
I
I
I
I
E
E
L
L
E
E
M
M
E
E
N
N
T
T
O
O
S
S
B
B
Á
Á
S
S
I
I
C
C
O
O
S
S
Recordando lo señalado en el primer capítulo, los tipos de servicios de los sistemas operativos son:
• Ejecución de programas. El sistema tiene que ser capaz de cargar un programa en memoria y ejecutarlo.
• Operaciones de entrada/salida. Como un programa no puede acceder directamente a un dispositivo de E/S el sistema operativo debe facilitarle algunos medios para realizarlo.
• Manipulación del sistema de archivos. El sistema operativo debe facilitar las herramientas necesarias para que los programas puedan leer, escribir y eliminar archivos.
• Detección de errores. El sistema operativo necesita constantemente detectar posibles errores. Los errores pueden producirse en la CPU y en el hardware de la memoria, en los dispositivos de E/S o bien en el programa de usuario. Para cada tipo de error, el sistema operativo debe adoptar la iniciativa apropiada que garantice una computación (u operación) correcta y consistente.
Los sistemas operativos con usuarios múltiples pueden mejorar su eficiencia compartiendo entre ellos los recursos del computador. Esto implica:
• Asignación de recursos. Cuando hay múltiples usuarios o múltiples trabajos ejecutándose al mismo tiempo, hay que asignar recursos a cada uno de ellos. El sistema operativo gestiona muchos tipos de recursos diferentes.
• Contabilidad. Se desea controlar los pasos de los usuarios que utilizan el computador, en qué medida lo hacen y qué tipo de recursos emplean.
• Protección. Cuando hay muchos trabajos ejecutándose al mismo tiempo no debe ser posible que un trabajo interfiera sobre otro.
Los sistemas operativos prestan sus servicios de muchas maneras. Dos métodos básicos de prestación de servicios son las llamadas al sistema y los programas de sistemas.
L
L
l
l
a
a
m
m
a
a
d
d
a
a
s
s
A
A
l
l
S
S
i
i
s
s
t
t
e
e
m
m
a
a
Constituyen una interfaz entre los programas que se están ejecutando y el sistema operativo. Estas llamadas se implementan generalmente por instrucciones en lenguaje de máquina.
Se pueden agrupar en tres categorías: control de procesos o de trabajos, manipulación de dispositivos y archivos, y mantenimiento de información.
Control de procesos y de trabajos: • Finalización (normal o anormal). • Cargar o ejecutar otro programa.
• Crear nuevos procesos, terminar procesos.
• Obtener atributos de un proceso y establecer atributos de un proceso. • Esperar un tiempo.
• Esperar un suceso. Manipulación de archivos:
• Crear y borrar un archivo. • Abrir y cerrar un archivo.
• Leer, escribir y reposicionar un archivo.
Manipulación de dispositivos:
• Solicitar dispositivo y liberar dispositivo. • Leer, escribir y reposicionar.
• Obtener atributos de dispositivos y establecer atributos de dispositivos. Mantenimiento de información:
• Obtener y/o establecer hora o fecha. • Obtener y/o modificar datos del sistema.
• Obtener y/o establecer atributos de proceso, archivos o dispositivos.
P
P
r
r
o
o
g
g
r
r
a
a
m
m
a
a
s
s
D
D
e
e
l
l
S
S
i
i
s
s
t
t
e
e
m
m
a
a
Son un grupo de programas que resuelven problemas corrientes y ofrecen un entorno más adecuado para el desarrollo y la ejecución de programas.
Se pueden dividir en las siguientes categorías:
• Manipulación de archivos: Estos programas crean, borran, copian, renombran, imprimen, listan y generalmente manejan archivos y directorios.
• Información de estados: Usados para pedir la fecha, la hora, la cantidad de memoria disponible o el espacio en disco.
• Modificación de archivos: Editores de texto usados para crear y modificar el contenido de un archivo.
• Soporte al lenguaje de programación: Compiladores, intérpretes y ensambladores que dan soporte a lenguajes de alto nivel.
• Programas de aplicación: Programas que son útiles para resolver problemas corrientes, como editores de texto, programas gráficos (o de diseño), calculadoras, etc.
Uno de los programas más importantes en un sistema operativo es el intérprete de comandos, éste se ejecuta al iniciar el sistema operativo, su función es sencilla: captar un comando dictado por el usuario, interpretarlo y ejecutarlo. Por ejemplo el comando Delete archivo utilizado por DOS; Para que este comando se pueda ejecutar el intérprete de comandos debe contener el programa adecuado que elimine el archivo del disco rígido.
P
P
r
r
o
o
c
c
e
e
s
s
a
a
m
m
i
i
e
e
n
n
t
t
o
o
C
C
o
o
n
n
c
c
u
u
r
r
r
r
e
e
n
n
t
t
e
e
La CPU ejecuta una elevada cantidad de programas y su principal ocupación es la ejecución de los programas de usuario. Este proceso de ejecución de procesos se realiza a través de procesos. Un proceso es la unidad de trabajo dentro de un sistema, el cual consiste en un conjunto de procesos: los procesos del sistema operativo ejecutan código del sistema y los procesos de los usuarios ejecutan código de los usuarios.
En potencia, todos estos procesos se pueden ejecutar concurrentemente y la CPU o varias de ellas se multiplexan entre ellos. Al conmutar la CPU entre procesos, el sistema operativo puede hacer más productivo al computador.
Página 17 de 164
Procesos
Un proceso es cualquier tipo de actividad que demande de la atención de utilización de la CPU de una máquina. Quedan contenidos en este concepto los trabajos de ejecución por lotes, los programas de usuario o tareas y el apoyo de actividades internas propias del sistema.
Distinción entre programas y procesos: Cada invocación a un programa genera un proceso distinto e independiente. Los procesos compiten por el uso de los recursos del sistema, de manera que se necesitan herramientas que permitan la sincronización y la comunicación entre los mismos. A veces, dos o más procesos cooperan para alguna operación común. En cualquier instante, sólo un proceso estará en ejecución mientras que los otros estarán suspendidos, preparados o esperando a que ocurra algún evento.
“La diferencia entre un programa (conjunto de instrucciones) y un proceso (instrucciones ejecutándose) es obvia, pero crucial para atender el funcionamiento de los sistemas operativos.”
Imagínese un mecánico de automóviles en un taller donde se reparan vehículos con averías complejas en las que se hace necesario consultar el manual de reparaciones de cada modelo, que contiene instrucciones para todas las posibles averías. Además, se permiten reparaciones rápidas a las que se les da mayor prioridad que a las mencionadas anteriormente. Existe en el taller un almacén de repuestos de todo tipo y herramientas suficientes para las reparaciones.
Comparando esta situación con una computadora, se pueden establecer las siguientes analogías:
• El mecánico sería el procesador que va a realizar el trabajo.
• El manual de cada reparación sería el programa.
• Las herramientas serían los recursos disponibles.
• Las piezas de recambio serían los datos.
• La actividad de utilizar las herramientas para desmontar las piezas defectuosas sustituyéndolas por otras nuevas siguiendo
las instrucciones del manual equivaldría al proceso.
Supóngase que en un determinado momento el mecánico está realizando un reparación compleja (de las que llevan tiempo) y aparece un vehículo que solicita una reparación de las rápidas (ha aparecido una interrupción). El mecánico suspende momentáneamente la reparación compleja anotando en qué situación se queda dicha reparación y qué operación estaba realizando es este momento (guarda el estado del proceso). Asimismo, sustituye el manual que estaba utilizando por el de la reparación rápida que se dispone a realizar (cambio de programa). Comienza la nueva reparación (cambio de proceso), en la que las herramientas no serán las mismas que antes (distintos recursos); las indicaciones de usuario, las piezas de repuesto (datos) y las indicaciones del manual (programa) llevarán a feliz término la reparación para que el mecánico vuelva a continuación a la reparación inicial.
Con este ejemplo se desea resaltar que un proceso es una actividad que se apoya en datos, recursos, un estado en cada momento y un programa.
Relación Entre Los Procesos
El sistema operativo debe suministrar los servicios necesarios que permitan:
a) Ejecución concurrente de los procesos. b) Sincronización entre procesos.
c) Comunicación entre procesos.
Además, debe disponer de algoritmos de gestión y planificación de procesos que se encarguen de:
a) Decidir qué proceso se ejecutará o tomará el procesador.
b) Llevar cuenta de los estados de los procesos, sus prioridades y toda la información relevante acerca de ellos.
a) Independientes: No se comunican o sincronizan entre ellos. En un sistema con un sólo procesador, los procesos independientes no existen (en sentido estricto).
b) Cooperativos: Se comunican y sincronizan sus actividades para realizar una labor común.
c) Competitivos: Todos compiten por los recursos del computador. El acceso ordenado a estos necesita de la sincronización y, a veces, también de la comunicación entre los procesos.
Especificación De Los Procesos
• Implícitos: Procesos generados y eliminados por el SO.
• Explícitos: Definidos por el usuario realizando llamadas al sistema.
• Proceso padre: Que crea otro proceso. Puede tener varios hijos.
• Proceso hijo: Procesos creados por otro. Sólo pueden tener un padre.
El sistema operativo hace que los argumentos y variables locales del procedimiento o función que da lugar al proceso se asocien a éste y no al código en el que aparecen. El sistema crea para cada proceso un conjunto independiente de variables locales, parámetros formales y llamadas a los procedimientos y a las funciones.
Estados De Los Procesos
Todo proceso, desde que se crea hasta que se destruye, pasa a través de una serie de estados discretos. En forma general, los estados de un proceso se pueden clasificar en:
a) Activo: Proceso que está ejecutándose en un instante dado.
b) Preparado: Listo para ejecutarse, esperando a que el procesador quede libre.
c) Bloqueado o suspendido: Esperando a que se cumpla alguna condición (E/S, señal, etc.). d) Muerto: Ha terminado su ejecución o el sistema operativo ha detectado un error fatal. e) Nonato: Existe, pero todavía no es conocido por el sistema operativo
f) Estado global del sistema: Conjunto de recursos y procesos existentes con sus estados correspondientes en un instante determinado. El sistema operativo lo cambia en respuesta a eventos externos o internos.
El sistema operativo dispone de algoritmos de planificación y de gestión de los procesos y de los recursos de modo que, considerando como entradas los eventos y el estado global del sistema, genera un nuevo estado global.
Un gran número de autores, considera que los estados más importantes son:
a. Estados activos. Un proceso que esté en un estado activo puede competir por recursos.
b. Estados inactivos o suspendidos. El sistema no les permite (de manera momentánea) que compitan por recursos.
c. Estados externos o intermedios. Son estados especiales que se dan durante la creación y destrucción de los procesos.
Estados Activos
Estado RUNNING o EN EJECUCIÓN
Se dice que un proceso está en estado RUNNING (en ejecución) cuando tiene el control de la CPU (es decir, cuando la CPU está ejecutando el programa correspondiente a ese proceso). Se dice entonces que ese proceso es el proceso en curso del procesador.
Página 19 de 164 Estado READY o EJECUTABLE
Se dice que un proceso está en estado READY (ejecutable) cuando lo único que necesita para estar en ejecución es que se le conceda tiempo de CPU.
Estado BLOCKED o EN ESPERA
Un proceso está en estado BLOCKED (bloqueado) cuando está a la espera de que se produzca una determinada circunstancia (evento); por ejemplo, un proceso está bloqueado cuando está a la espera de que se complete la operación de Entrada/Salida que ha solicitado.
Estados Suspendidos
Tanto si un proceso está ejecutándose (RUNNING) y es suspendido a petición suya, o a petición de otro proceso, como si el proceso está en estado ejecutable (READY), al ser suspendido se provoca una transición de estado que lo deja en suspendido ejecutable o suspended-ready. Sin embargo, si el proceso estaba previamente bloqueado (BLOCKED), la transición de estado hará que el proceso pase a estar en un nuevo estado, que se llama suspendido bloqueado o suspended-blocked.
Estados Intermedios, Externos o Especiales
En algunos sistemas existen otros estados que se denominan externos y que se dan cuando el proceso se crea antes de que el programa correspondiente se cargue en memoria; o, por otro lado, cuando el proceso se destruye después de que el programa se haya sacado de memoria. Estos estados son:
WAIT (o ESPERA, o INICIAL, ...) END (o FIN, o FINAL)
El estado de espera (WAIT) es aquél en el que está el proceso cuando se crea (es decir, se le asignan dispositivos, se prepara su entorno...), pero aún no está físicamente en memoria. Cuando el proceso termina, ocurre la situación contraria: el proceso queda en estado END hasta que se ha eliminado cualquier rastro del proceso (y de sus descendientes, si los hubiera).
Transiciones entre los estados
Distribuidor (dispatcher): Módulo del sistema operativo que se encarga de activar los procesos que están en el estado preparado.
Interrupción: Hace que la tarea que está activa deje de ejecutarse en favor del sistema operativo que decidirá cuál de los procesos preparados pasarán a estado activo.
Planificador (scheduler): Hace que el proceso activo vuelva a preparado sin que medie una llamada al sistema (por fin de tiempo asignado o proceso con mayor prioridad preparado).
Transiciones:
DE A MOTIVOS
preparado activo
preparado activo Activado por el distribuidor o por el planificador Activo preparado Interrupción
activo Solicita un recurso necesario para continuar (ej.: E/S) nonato Necesita que tenga lugar un evento
preparado bloqueado Acción determinada, como una llamada al sistema del proceso activo
bloqueado preparado Tiene lugar un evento que estaba esperando
Activo Finaliza
preparado Eliminado por otro proceso
bloqueado
nonato Al crearse
bloqueado
Los sistemas de gestión de procesos deben tener la capacidad de realizar ciertas operaciones más o menos complejas sobre procesos, como son: conmutación de contexto, bloqueo, desbloqueo, suspensión, reanudación, creación, destrucción, cambio de prioridad, etc. Estas operaciones son las que provocan los cambios o transiciones de estado en los procesos.
Es posible representar nuevamente estos estados y las transiciones entre ellos con el siguiente gráfico:
A continuación se explicarán detalladamente estas últimas transiciones de estados:
Terminate (terminar)
La destrucción de un proceso(*) implica su eliminación del sistema. Los recursos que tenía asignados se liberan, devolviéndose al sistema, su PCB se borra y se elimina cualquier rastro suyo de las tablas y las listas del sistema. Por esta transición el proceso queda fuera de memoria, pero todavía esperando una desactivación total, es decir, todavía sin desprenderse de todas sus referencias, asignaciones, entorno, etc. En este caso la transición que se provoca en el proceso se denota como sigue:
Terminate (id-proceso): RUNNING ß END
Activate (activar)
Cualquier proceso de los existentes puede generar uno o varios procesos nuevos. El proceso generador se llama padre y los generados procesos hijo, siendo necesario un único proceso para crear otro. Esto
(*)
Se puede destruir un proceso en cualquier estado. Lo explicado aquí sería la destrucción de un proceso en ejecución.
Página 21 de 164
conduce a una estructura de procesos jerárquica. Cuando la creación del descriptor del proceso se realiza antes de la carga del programa correspondiente, dicho proceso se encuentra en estado inicial. Tras la carga del programa, dado que lo único que necesita dicho proceso para ejecutarse es el control del procesador, su descriptor pasará a la lista-ready y se realizará sobre él la operación de activación, que provocará en él una transición de estado por la cual quedará en estado ejecutable. Esta transición se puede denotar de la forma:
Activate (id-proceso): WAIT ß READY
Dispatch (despachar)
Cuando el proceso en ejecución, por alguna causa, deja de estarlo, la CPU quedará libre y, lógicamente, debe ser asignada a otro proceso, que será aquel cuyo descriptor esté a la cabecera de la lista-ready. El encargado de realizar esta operación es el dispatcher, o planificador de bajo nivel, y es una operación de "conmutación de contexto" (o dispatching, o cesión del control de CPU) que provocará que dicho proceso, en estado READY, pase a estado RUNNING, mediante una transición de estado que se denomina dispatch y que se formula:
Dispatch (id-proceso): READY ß URNG
Time run out (tiempo excedido)
Para evitar que un proceso monopolice el procesador, bien de forma accidental o malintencionadamente, el sistema operativo utiliza un temporizador para controlar que cada proceso use la CPU durante un intervalo de tiempo o quantum dado. Así, si el proceso en curso no cede voluntariamente el control de la CPU antes de expira dicho tiempo, cuando el temporizador queda a cero se genera una interrupción
hardware que se suele denominar interrupción de reloj, por la cual toma el control el sistema operativo
y provoca una transición de estado sobre el proceso en ejecución (RUNNING), dejándolo en estado ejecutable (READY). Esta transición de estado se puede denotar de la forma siguiente:
Time-run-out (id-proceso): RUNNING ß READY
Después de ésta transición de estado, la CPU queda libre, y vuelve a repetirse el ciclo, tomando el control del dispatcher y realizando, si es posible, una transición dispatch.
Block (bloquear)
Si antes de que se le termine el tiempo concedido a un proceso que esté en ejecución (RUNNING) necesita que se cumplan "ciertas condiciones" para poder proseguir (por ejemplo, necesita realizar una operación de Entrada/Salida para obtener datos), el propio proceso provoca una interrupción (por ejemplo, de llamada al Supervisor) y cede el control de la CPU, quedando pendiente de que se complete el servicio requerido. Esta interrupción provoca en el proceso una transición de estado por la cual el proceso pasará de estar en ejecución (RUNNING) a estado bloqueado (BLOCKED). Esta transición se denomina block y se formula del modo siguiente:
Block (id-proceso): RUNNING ß BLOCKED
La CPU, entonces, queda libre y pasará el control al dispatcher.
Wake -up (despertar)
Cuando se den las condiciones que está esperando un proceso bloqueado (por ejemplo, que se complete la operación de E/S por la cual ha quedado en espera), se producirá una nueva interrupción (esta vez, de E/S) por la cual el sistema operativo tomará el control y provocará en el proceso correspondiente una transición de estado por la cual pasará de estar bloqueado a estar nuevamente ejecutable (READY). Esta transición se llama wake-up y se representa como: