Sie sind auf Seite 1von 204

CONCEPTOS DE

SISTEMAS
OPERATIVOS
Jos Torres Jimnez

trillas
Digitalizacin con propsito academico. Sistemas operativos

CONCEPTOS DE

SISTEMAS
OPERATIVOS
Jos Torres Jimnez

Preedicin

EDITORIAL

TRILLAS
Mxico, Argentina, Espaa
Colombia, Puerto Rico, Venezuela
Digitalizacin con propsito academico. Sistemas operativos

Presentacin
El presente libro tiene como objetivo primordial, el servir como material de apoyo
para el curso de Sistemas Operativos que se imparte en el ITESM (Instituto
Tecnolgico y de Estudios Superiores de Monterrey). El curso de sistemas operativos
es llevado por los alumnos de las carreras ISE (Ingenieros en Sistemas Electrnicos),
ISI (Ingenieros en Sistemas de Informacin), isc (Ingenieros en Sistemas
Computacionales) y LSCA (Licenciados en Sistemas Computacionales
Administrativos). Adicionalmente este libro podr ser utilizado por interesados en
aprender los fundamentos de los sistemas operativos.
Es recomendable, para un mejor entendimiento del material de este libro, el tener
conocimientos de algn lenguaje de programacin (en particular es muy til el conocer
previamente el lenguaje C o el lenguaje Java), tener conocimientos sobre arquitecturas
computacionales y sobre estructuras de datos.
El libro persigue el presentar la manera en que los recursos de un sistema
computacional son controlados por un sistema operativo. El libro est organizado en 9
captulos:
1. Conceptos Bsicos. En este captulo se presenta la evolucin histrica de los
sistemas operativos y de manera breve conceptos de Hardware, Firmware y
Software que son tiles para el entendimiento de los diferentes algoritmos que sern
presentados a lo largo de todo el libro.
2. Manejo de Procesos. Este captulo presenta los conceptos de Rutina, Co-rutina,
Procesos e Hilos, los cuales son necesarios para comprender la manera en la cual un
sistema operativo controla la realizacin de todo el trabajo en un sistema
computacional.
3. Manejo de Procesadores. Aqu se presentan los diferentes algoritmos que existen
para controlar la asignacin de unidades de trabajo a un procesador o a varios
procesadores.
4. Manejo de Concurrencia y Sincronizacin. La manera en la cual es posible que
dentro de un sistema computacional ocurran de manera coordinada actividades
concurrentes es gracias a los diferentes algoritmos de manejo de concurrencia y
sincronizacin que son presentados en este captulo.
5. Manejo de Memoria Real. En este captulo se presenta la evolucin histrica de
los diferentes esquemas de manejo de memoria real.
6. Manejo de Memoria Virtual. Aqu se presentan los diferentes esquemas para el
manejo de memoria virtual (la capacidad de accesar un espacio de direcciones
mayor que el de la memoria principal de la computadora).
5
Digitalizacin con propsito academico. Sistemas operativos

6 PRESENTACIN

7. Manejo de Interbloqueo. Se presentan diferentes algoritmos de manejo de


Interbloqueo, se destaca la presentacin de algoritmos secuenciales y concurrentes.
8. Manejo de Archivos y Discos. La organizacin del sistema de archivos es
presentada de la misma manera que las estrategias para la optimizacin del manejo de
disco.
9. Sistemas Operativos Distribuidos. Se dan los conceptos bsicos de los sistemas
operativos distribuidos.
Con base en estos conocimientos el alumno podr entender y evaluar el desempeo de
sistemas operativos de actualidad.

Digitalizacin con propsito academico. Sistemas operativos

ndice de contenido
Presentacin

1 Introduccin a los sistemas operativos


1.1 Conceptos de sistemas operativos
1.1.1 Generaciones de sistemas operativos
1.2 Hardware, Firmware y Software
1.2.1 Hardware
1.2.2 Software
1.2.3 Firmware
1.3 Evolucin de la programacin concurrente
1.3.1 (19551960) El reto del hardware
1.3.2 (19601965) La crisis del software
1.3.3(19651970) Inovacin conceptual
1.3.4(1970-1975) Desarrollo de lenguajes
1.3.5(1975) Entendimiento formal
1.3.6(1980-) Refinamiento del hardware
1.3.7 (1980-) Redes de computadoras
1.4 Referencias

15
15
16
16
16
17
18
18
18
18
19
19
20
20
20
21

2 Manejo de procesos
2.1 Introduccin
2.2 Definicin de proceso
2.3 Estados de un proceso
2.4 Bloque de control de un proceso (PCB)
2.5 Operaciones sobre procesos
2.6 Creacin jerrquica vs creacin no jerrquica
2.7 Procesamiento de interrupciones
2.8 Tipos de interrupciones
2.9 Funciones del ncleo (kernel)
2.10 Deshabilitacin/habilitacin de interrupciones
2.11 Estructura jerrquica de un sistema operativo
2.12 Migracin del ncleo a microcdigo

23
23
23
23
24
24
25
25
25
25
26
26
26
7

Digitalizacin con propsito academico. Sistemas operativos

8 NDICE DE CONTENIDO

2.13 Rutinas, corrutinas, procesos e hilos


26
2.13.1 Rutina
26
2.13.2 Corrutina
26
2.13.3 Proceso
27
2.13.4 Hilos
27
2.14 Referencias
28
3 Algoritmos de administracin de procesadores
29
3.1 Objetivos de la asignacin de procesadores
29
3.2 Criterios de la asignacin de CPU
29
3.3 Asignacin preemptive vs no-preemptive
30
3.4 Manejo de quantum
30
3.5 Prioridad
30
3.6 Asignacin de CPU FIFO
31
3.7 Asignacin de CPU Round Robin
31
3.8 Asignacin de CPU Shortest Job First (SJF)
31
3.9 Asignacin de CPU Shortest Remaining Time First
32
3.10 Asignacin de CPU de colas con retroalimentacin multiniveles
32
3.11 Asignacin de CPU selfish round robin (SRR)
32
3.12 Asignacin de CPU con algoritmos hbridos
33
3.13 Asignacin de CPU dependientes del estado
33
3.14 Asignacin de CPU basados en prioridades externas
33
3.15 Referencias
34
4 Administracin de memoria real
35
4.1 Introduccin
35
4.2 Organizacin
35
4.3 Administracin del almacenamiento
36
4.4 Jerarqua de almacenamiento
36
4.5 Estrategias de administracin de almacenamiento
37
4.5.1 Estrategias de Fetch
37
4.5.2 Estrategias de localizacin
37
4.5.3 Estrategias de reemplazo
37
4.6 Asignacin de almacenamiento contiguo vs. No-contiguo
37
4.6.1 Asignacin de almacenamiento contiguo a un slo usuario
38
4.6.2 Proteccin en sistemas de un slo usuario
38
4.7 Sistemas Tipo Batch
39
4.8 Multiprogramacin de particin fija
40
4.9 Multiprogramacin de particin fija, traduccin y cargado absoluto
40
4.10 Multiprogramacin de particin fija con cargado y traduccin relocalizable42
4.11 Proteccin en sistemas de multiprogramacin
42
4.12 Fragmentacin en sistemas de multiprogramacin de particin fija
42
4.13 Multiprogramacin de particin variable
43
4.14 Compactacin de almacenamiento
43
4.15 Estrategias de localizacin de almacenamiento
45
Digitalizacin con propsito academico. Sistemas operativos

NDICE DE CONTENIDO 9

4.15.1 Estrategia Best Fit


4.15.2 Estrategia First Fit
4.15.3 Worst Fit
4.15.4 Estrategia Buddy Fit
4.15.5 Estrategia Fibonacci Fit
4.16 Fragmentacin interna
4.17 Fragmentacin externa
4.18 Comparacin de estrategias de localizacin
4.19 Multiprogramacin con intercambio de procesos en almacenamiento
4.20 Referencias
5 Memoria virtual
5.1 Conceptos bsicos de almacenamiento virtual
5.2 Organizacin de almacenamiento multiniveles
5.3 Mapeo de bloques
5.4 Direccin de mapeo de bloques
5.5 Conceptos bsicos de paginacin
5.6 Traduccin de direcciones de paginacin por mapeo directo
5.7 Traduccin de direcciones de paginacin por mapeo asociativo
5.8 Traduccin de direcciones de paginacin combinando mapeo
asociativo y directo
5.9 Comparticin en un sistema de paginacin
5.10 Segmentacin
5.11 Sistemas de paginacin con segmentacin
5.12 Administracin del almacenamiento virtual
5.12.1 Estrategias de administracin de almacenamiento virtual
5.12.2 El principio de optimalidad
5.12.3 Reemplazo de pgina aleatorio
5.12.4 Reemplazo de pgina FIFO
5.12.5 Reemplazo de pgina menos recientemente usada (LRU)
5.12.6 Reemplazo de pgina menos frecuentemente usada (LFU)
5.12.7 Reemplazo de pgina no usada recientemente (NUR)
5.12.8 Localidad
5.12.9 Conjuntos de trabajo (Working Sets)
5.12.10 Paginacin por demanda
5.12.11 Paginacin anticipatoria
5.12.12 Liberacin de pginas
5.12.13 Tamao de pgina
5.12.14 Comportamiento de un programa bajo paginacin
5.13 Referencias
6 Sincronizacin y comunicacin de procesos
6.1 Concurrencia de procesos
6.2 Suma de dos matrices
6.3 Ecuacin cuadrtica
Digitalizacin con propsito academico. Sistemas operativos

45
46
46
46
47
47
47
47
47
48
49
49
51
51
51
51
53
54
54
54
54
56
56
56
57
57
57
58
59
59
60
60
61
61
61
61
62
62
63
63
63
64

10 NDICE DE CONTENIDO

6.4 Problema de la actualizacin perdida


6.5 Exclusin mutua
6.6 Algoritmo de Dekker (Memory Interlock)
6.6.1 Algoritmo para construir un diagrama de estados de la ejecucin
concurrente de procesos
6.6.2 Versin 1 de Memory Interlock
6.6.3 Versin 2 dc Memory Interlock
6.6.4 Versin 3 de Memory Interlock
6.6.5 Versin 4 de Memory Interlock
6.6.6 Solucin final de Memory Interlock (Algoritmo de Dekker)
6.7 Problema de exclusin mutua usando intercambios (Test and Set)
6.8 Algoritmo de Peterson para Exclusin mutua
6.9 Semforos
6.9.1 Exclusin mutua con semforos
6.9.2 Problema del productor/consumidor
6.9.3 Problema de lectores y escritores
6.9.4 Problema de los filsofos
6.9.5 Problema de K-Procesos en la seccin crtica
6.9.6 Problema de los fumadores de cigarros
6.10 Pipes
6.11 Paso de mensajes (Mailboxes, puertos)
6.12 Regiones crticas
6.13 Regiones crticas condicionales
6.14 Interrupciones virtuales
6.15 Expresiones de trayectoria
6.16 Expresiones invariantes
6.16.1 Ejemplo de productores consumidores
6.16.2 Ejemplo de lectores y escritores
6.17 Contadores de eventos
6.17.1 Secuenciadores
6.18 Monitores
6.18.1 Monitor tipo monitor
6.18.2 Monitor tipo manager
6.18.3 Monitor tipo mediador
6.18.4 Monitor tipo gladiador
6.19 Referencias

65
66
67
69
70
71
72
73
74
75
76
82
88
90
93
97
98
98
98
99
99
100
101
101
102
103
104
106
106
107
107
108

7 Manejo de interbloqueo (Deadlock)


7.1 Introduccin
7.2 Algoritmos de prevencin de deadlock
7.2.1 Definicin de un sistema de asignacin de recursos
7.2.2 Representacin del estado del sistema
7.2.3 Consideraciones bsicas
7.2.4 Definicin de estado seguro

109
109
110
110
110
110
111

Digitalizacin con propsito academico. Sistemas operativos

64
65
65

NDICE DE CONTENIDO 11

7.2.5 Algoritmo de Habermann


7.2.6 Algoritmo de Fontao
7.3 Algoritmos dc deteccinlcorrccin de deadlock
7.3.1 Cunto correr?
7.3.2 Cmo detectar cl deadlock?
7.3.3 Cmo corregir el deadlock?
7.4 Referencias
8 Manejo de archivos y discos
8.1 Introduccin
8.2 Sistema de archivos
8.3 Organizacin de archivos
8.3.1 Archivo secuencial
8.3.2 Archivo ordenado usando bsqueda binaria
8.3.3 Archivo secuencial indizado
8.4 Estructura de un disco duro
8.4.1 Tiempo de acceso a los datos
8.5 Tiempo de bsqueda, tiempo de latencia y tiempo de transmisin
8.6 Algoritmos de planificacin de tiempos de bsqueda
8.6.1 Algoritmo SSTF (Shortes Seek Time First)
8.6.2 Algoritmo SCAN
8.6.3 Algoritmo N-Step Scan
8.6.4 Algoritmo C-Scan (Circular Scan)
8.7 Optimizacin rotacional
8.8 Referencias

111
111
116
116
117
118
118
119
119
119
119
120
120
121
121
122
123
124
124
124
124
124
125
125

9 Sistemas operativos distribuidos


9.1 Introduccin
9.2 El protocolo TCP/IP
9.3 Computacin cliente/servidor
9.4 Migracin de procesos
9.5 Referencias

127
127
127
128
129
129

A Unix
A. 1 Introduccin a Unix
A.1.1 Historia de Unix
A.1.2 Caractersticas de diseo de Unix
A.1.3 Estructura de Unix
A.1.4 Kernel de Unix
A. 1.5 El sistema de archivos
A.1.6 El Shell
A.1.7 Aplicaciones/lenguajes de Unix
A.1.8 Comunicaciones y manejo de redes
A. 1.9 Editorcs/formateadores de texto
A.l.lO Comandos bsicos de Unix

131
131
131
132
132
132
132
134
134
134
135
135

Digitalizacin con propsito academico. Sistemas operativos

12 NDICE DE CONTENIDO

A.2 Manejo de archivos


A.2. 1 Definicin de archivo
A.2.2 Tipos de archivos
A.2.3 Estructura del sistema de archivos y trayectorias
A.2.4 Nombres de archivos
A.2.5 Comandos para manejos de archivQs
A.2.6 Comandos para manejo de grupos y propietarios
A.3 Procesos
A.3.1 Caractersticas de un proceso en Unix
A.3.2 Creacin de un proceso
A.3.3 Procesos de frente y fondo
A.3.4 Corres procesos despus de salir
A.3.5 Controlando la prioridad de los procesos
A.3.6 Terminando procesos
A.4 El Shell
A.4.1 Descripcin del Shell
A.4.2 Archivos estndar
A.4.3 Redireccin
A.4.4 Continuacin y agrupacin de comandos
A.4.5 Pipes y filtros
A.4.6 Metacaractcres
A.4.7 Variables de Shell
A.4.8 Exportando variables
A.4.9 Variables como comandos
A.4.10 Caracteres de escape dc Shell
A.4.11 Tipos de Shell
A.4.12 Terminales virtuales
A.4.13 Comandos de seleccin
A.5 Editores
A.5.1 Editores de Unix
A.5.2 El editor vi
A.6 Herramientas de manejo de datos
A.6.1 El comando find
A.6.2 El comando grep a detalle
A.6.3 El comando cut
A.6.4 El comando diff
A.7 AIX Windows
A.7.l Terminales virtuales
A.7.2 Historia de XWindows
A.7.3 Modelo cliente-servidor
A.7.4 Salida de AlXWindows
A.7.5 Ventana raz
A.7.6 Distribucin de una ventana
Digitalizacin con propsito academico. Sistemas operativos

138
138
138
138
140
140
140
141
141
141
143
143
143
144
144
144
144
145
145
145
146
146
147
147
148
148
150
150
151
151
152
154
154
154
154
155
155
155
156
156
156
157
157

NDICE DE CONTENIDO 13

A.8
A.9

A.7.7 Manejo de teclado


A.7.8 Manejo de AlXWindows en red
A.7 .9 Personalizacin de clientes
Sincronizacin/comunicacin de procesos
A.8.1 Procesos en Unix
A.8.2 Creacin de un proceso
Comunicacin interprocesos
A.9.1 Pipes

157
157
158
158
158
160
162
163

B Java
B. 1 Introduccin
B.2 Historia
A.3 Diferencias entre Java y C
B.3.1 Estructura del programa
B.3.2 Argumentos
B.3.3 Valor de salida en un programa
B.3.4 Estatuto import
B.3.5 Caracteres para comentarios
B.3.6 Constantes
B.3.7 Tipos de datos
B.3.8 Coleccin de basura
B.3.9 Apuntadores
B.3.10 Strings
B.3.l1 Arreglos
B.4 Programacin en Java
B.4.l Objeto
B.4.2 Clase
B.4.3 Mtodo
B.4.4 Instancia
B.4.5 Herencia
B.5 Aplicaciones y Applets
B.5. 1 Cmo crear o editar un programa
B.5.2 Cmo compilar un programa
B.5.3 Cmo ejecutar una aplicacin
B.5.4 Cmo ejecutar un Applet
B.5.5 Mtodos bsicos de un Applet
B.5.6 Ejemplo de una aplicacin
B.5.7 Ejemplo de un Applet
B.6 Hilos
B.6. 1 Constructores
B.6.2 Mtodos
B.6.3 Ejemplo de Threads

177
177
178
179
179
179
179
179
180
180
180
180
181
181
181
181
181
182
182
182
183
183
184
184
184
185
185
185
188
190
191
191
192

C Baci
C. 1 Introduccin

195
195

Digitalizacin con propsito academico. Sistemas operativos

14 NDICE DE CONTENIDO

C.2 El lenguaje C
C.3 Creacin de procesos
C.4 Manejo de semforo
C.5 Manejo de monitores
C.6 Otras instrucciones
C.7 Usando Baci
C.8 Ejemplo
C.9 Dnde est siendo utilizado Baci?
C.10Dnde conseguirBaci?

195
196
196
197
197
198
198
199
199

D JPNS
D. 1 Introduccin
D.2 Instalando jPNS
D.2.1 Como Applet
D.2.2 Como aplicacin
D.3 Los comandos de jPNS
D.3.1 Men File
D.3.2 Men Settings
D.4 Los iconos grficos
D.5 Ejemplo de red de petri en Jpns

201
201
201
201
201
202
202
202
202
205

Bibliografa

207

Digitalizacin con propsito academico. Sistemas operativos

Captulo 1
Introduccin a los
sistemas operativos
En este captulo describiremos conceptos bsicos de sistemas operativos,
hardware, firmware y software. Adicionalmente daremos una breve panormica de la
evolucin histrica de los sistemas operativos.
1.1. Conceptos de Sistemas Operativos
Se puede decir que un sistema operativo (SO) es el conjunto de programas que
permiten que sea usable una computadora, aunque de una manera ms precisa, un
sistema operativo es el conjunto de programas implementados en Software o Firmware
que hacen posible que se use el Hardware.
Algunas de las funciones y facilidades que debe proporcionar un SO son:

Manejo de recursos.
Definicin de interfaz usuario.
Comparticin de hardware
Comparticin de datos.
Asignacin de recursos.
Recuperacin de errores.
Los recursos que maneja un SO son:

Procesadores.
Almacenamiento.
Dispositivos de E / S.
Datos.
15

Digitalizacin con propsito academico. Sistemas operativos

16 CAP 1. INTRODUCCIN A LOS SISTEMAS OPERATIVOS

1.1.1.Generaciones de Sistemas Operativos


40s Generacin 0. No exista un SO en las primeras computadoras. Los programas se
introducan manual y mecnicamente.
50s Generacin 1. En esta generacin se usaron los SO BATCH.
Inicio 6Os Generacin 2. Los SO de esta generacin se caracterizan por manejar:
Multiprogramacin Multiprocesamiento Independencia de dispositivos, Tiempo
compart. doy Tiempo real.
Med 6Os-med 70s Generacin 3. En esta generacin surgen los SO de propsito
general y que son capaces de manejar diversos tipos de aplicaciones en el mismo SO
(Batch, Multiprocesamiento, Tiempo real). Surge el SO de IBM 05360 y el SO UNIX.
Fines 70s-SOs. Generacin 4. Surgen las Redes de computadoras y el nfasis es en
SO amigables. SO representativos de esta generacin son: UNIX, VAX / VMS, CP-M,
MVS, VM, MS-DOS, MacIntosh.
90s Generacin 5. Surgen las redes de ampla cobertura (Internet), se habla de
migracin de procesos para uso eficiente de la computacin distribuida, surgen las
arquitecturas cliente/servidor y aplicaciones totalmente abiertas capaces de correr en
diversas plataformas de hardware y diversos SO.
1.2.Hardware, Firmware y Software
1.2.1. Hardware
El HW de un sistema computacional est compuesto principalmente de:
Elementos de Procesamiento, Dispositivos de Almacenamiento y Dispositivos de
Entrada / salida. Dado que para entender algunas funciones de un SO es necesario
conocer conceptos relacionados con la operacin del 1W, comentaremos brevemente
algunos de estos conceptos:
1. Registros de relocalizacin. Estos registros permiten que tanto los datos, el cdigo
y el stack puedan ser relocalizados sin necesidad de modificar el cdigo original de
un programa. Esto es realizado usando dos tipos de registros: a) Un registro de
segmento que define la direccin base a partir de donde se encuentran el cdigo, los
datos o el espacio de stack; y b) Un registro de desplazamiento que toma como
referencia al registro de segmento. De esta manera al modificar el valor del registro
de segmento, se est cambiando la direccin que se puede accesar.
2. Interrupciones y Polling. Cuando una aplicacin se queda verificando
continuamente la ocurrencia de un evento, se dice que est diseada para usar
POLLING. Cuando la aplicacin contina realizando otras actividades y cuando se
ocurra el evento se indica con una seal (interrupcin) que ya ocurri el evento, se
dice que est diseada para usar INTERRUPCIONES. En general es preferible no
usar POLLING dado que es muy ineficiente el estar verificando continuamente la
ocurrencia de eventos.
3. Bferes. Cuando dos elementos se comunican y existe diferencia en la velocidad de
procesamiento de ellos, la velocidad de operacin total ser equivalente a la
velocidad
Digitalizacin con propsito academico. Sistemas operativos

1.2. HARDWARE, FIRMWARE Y SOFTWARE 17

del elemento ms lento. Para compensar las diferencias de velocidad entre


elementos que se comunican, se puede agregar memoria entre ellos (esto es un
buffer) lo cual ayuda a suavizar las diferencias de velocidad entre ellos (por
ejemplo la conexin entre una computadora y una impresora puede funcionar mejor
usando un buffer, que est localizado internamente en la impresora).
4. Temporizador de Quantum. Para poder soportar que un solo procesador sea
compartido entre varias aplicaciones se hace uso de un temporizador de quantum
(similar a un reloj despenador) el cul permite asignar rebanaditas de tiempo
entre los diversos procesos.
5. Estado Problema / Estado Supervisor. Cuando el procesador de un sistema
computacional est asignado a una aplicacin del usuario se dice que el sistema est
en Estado Problema, cuando el procesador est asignado al sistema operativo se
dice que el sistema est en el Estado Supervisor.
6. Manejo de Memoria Virtual. A la capacidad de accesar ms memoria que la
disponible fsicamente se le denomina Manejo de Memoria Virtual. En este manejo
las instrucciones de un programa accesan direcciones mas all del espacio real de
memoria.
7. Multiprogramacin (Multitarea o Multitasking). La multiprogramacin permite
tener la impresin de que existe simultaneidad en la ejecucin de los procesos a
pesar de solo tener un elemento de procesamiento.
8. Multiprocesamiento. Cuando un sistema tiene ms de un elemento de
procesamiento es posible que se corran simultneamente ms de un proceso
1.2.2. Software
Para entender la operacin de diversos algoritmos usados en los sistemas operativos
es necesario conocer algunos conceptos importantes de software son relacionados en
seguida:
1. Programacin en Lenguajes de Mquina. Se refiere a los programas hechos en
lenguaje binario, los cuales pueden ser ejecutados directamente en el HW del
sistema computacional.
2. Ensambladores y Macroprocesadores. Usando un ensamblador y
macroprocesador es posible facilitar la generacin de aplicaciones, dado que se
usan instrucciones cortas que relacionan directamente la operacin de un
procesador en particular. El ensamblador genera a partir de las instrucciones codas
un programa en lenguaje maquinal.
3. Compilador. Es un programa que recibe como entrada un programa en lenguaje de
alto nivel (similar en cierto sentido a un lenguaje natural) y produce como salida un
programa en lenguaje ensamblador y/o lenguaje maquinal.
4. Intrprete. En lugar de realizar el proceso total de conversin de un programa en
lenguaje de alto nivel a lenguaje de bajo nivel, un intrprete va tomando instruccin
por instruccin del lenguaje de alto nivel y las ejecuta directamente.
Digitalizacin con propsito academico. Sistemas operativos

18 CAP I. INTRODUCCIN A LOS SISTEMAS OPERATIVOS

1.2.3. Firmware
El firmware se puede decir que es SW implementado en HW, surgi en 1951 con la
microprogramacin planteada por primera vez por Maurice Wilkes. Una de las
tendencias fuertes en los SO es el desplazar cada vez mas las funciones del SW al HW.
1.3.Evolucin de la Programacin Concurrente
Un programa concurrente es aqul que permite a una computadora hacer varias
cosas en forma simultnea.
El desarrollo abarca las siguientes etapas: Reto de hardware (1955-1960), Crisis de
software (1960-1965), Innovacin conceptual (1965-1970), Desarrollo de lenguajes
(1970-1975), Entendimiento formal (1975 - ), Refinamiento de hardware (1980 - ) y
Redes de computadoras (1980-).
1.3.1. (1955-1960) El reto de Hardware

Surgen interrupciones para compartir eficientemente un procesador con los


perifricos lentos.
Los programas se hicieron tan complejos que fue imposible que un solo
programador los entendiera.
Surgen los primeros lenguajes de alto nivel: FORTRAN y ALGOL 60.
La ejecucin concurrente de programas trajo un gran problema: la depuracin de
programas concurrentes, debido a que un error se presentaba en forma errtica
dependiendo del tiempo.
No era posible reproducir una ejecucin de un programa concurrente, a diferencia
de un programa secuencial en el que bajo la misma entrada se obtiene la misma
salida.

1.3.2. (1960-1965) La crisis de Software

Debido a los problemas resultantes en la anterior etapa surgi la necesidad de


presentar al usuario una interface secuencial.
El sistema de programacin resultante debera de hacer de un sistema de cmputo
algo:
- Simple.
- Confiable
- Eficiente.
A ste sistema de programacin se le llam sistema operativo.

Los primeros sistemas operativos tipo batch (atlas y exec II) eran eficientes y
simples pero no confiables totalmente.
El problema de deadlock no era entendido muy bien.
Los siguientes sistemas operativos fueron muy complejos:
MULTICS (1965)200 hombres-ao.

Digitalizacin con propsito academico. Sistemas operativos

1.3.EVOLUCIN DE LA PROGRAMACIN CONCURRENTE 19

OS360 (1966)5000 hombres-ao.


La cantidad de errores en stos sistemas era alarmante: en cada liberacin del
05360 se tenan aproximadamente 1000 errores.

Es entonces cuando surge el sentimiento de que no era posible disear programas


concurrentes grandes sin contar con una fuerte base conceptual.

1.3.3. (1965-1970) Innovacin Conceptual

Surge la necesidad de dividir un programa concurrente en pequeos mdulos


asncronos con comportamiento independiente del tiempo.
Surge el concepto de proceso como: un mdulo de programa que consiste de una
estructura de datos y una secuencia de enunciados que operan sobre ella.
Como los procesos comparten recursos y/o cooperan en tareas comunes deben
compartir datos de una manera controlada surgiendo la necesidad de
sincronizacin.
Dijkstra coment:Si procesos operan simultneamente sobre las mismas variables
a velocidades impredecibles el resultado tambin ser impredecible , por lo cual
estableci que las operaciones sobre las variables comunes deben hacerse una a la
vez, surgiendo el concepto de regin crtica
Dijkstra estableci el caso ms simple de intercambio de seales de tiempo
inventando una estructura de datos llamada semforo con dos funciones de
acceso P y V con propiedad conmutativa.
Dijkstra demostr la implementacin de regiones crticas y comunicacin entre
procesos usando semforos.
Dijkstra con su sistema THE demostr que a travs del ordenamiento jerrquico
en capas se le puede dar una imagen ms placentera al usuario.
Habermann mostr que a travs de un ordenamiento jerrquico de los
requerimientos de los recursos se pueden prevenir deadlocks.

1.3.4. (1970-1975) Desarrollo de Lenguajes

Se caracteriza por el desarrollo de una tecnologa y notacin precisa de los


conceptos concurrentes.
Dijkstra en su sistema THE manej el concepto de concurrencia a travs del
enunciado: COBEGIN S1;S2;S3; COEND.
Hoare introdujo el concepto de regin crtica condicional, esto es que la entrada a
una regin crtica era condicionada a una variable booleana.
Dijkstra sugiri que las interacciones de los procesos se podan concentrar en
ciertos mdulos de los programas.
Siguiendo la idea anterior Hoare propone en 1973 la notacin para el concepto
denominado monitor.
El monitor consta de estructuras de datos propias accesibles slo a travs de
procedimientos propios y una parte de inicializacin.
Surge la idea de que un compilador auxilie en la creacin de programas
concurrentes.

Digitalizacin con propsito academico. Sistemas operativos

20 CAP I. INTRODUCCIN A LOS SISTEMAS OPERATIVOS

El primer lenguaje es: pascal concurrente (1974) que soporta el concepto de


proceso y monitor.
Despus surge MODULA (1977) soportando el concepto de proceso y monitor
De sta forma un programa concurrente podra ser hecho de pequeos mdulos que
en cierta forma semejaban un programa secuencial.

1.3.5. (1975- ) Entendimiento Formal

Surge la idea de verificacin de programas.


Hoare introduce definiciones axiomticas del significado de enunciados
concurrentes, regiones crticas y monitores.
Dijkstra introdujo una notacin de comandos guardados y en base a ella hacer la
derivacin formal de programas.
Esta etapa est en su infancia.

1.3.6. (1980- ) Refinamiento de Hardware

Debido a que los costos del hardware disminuyen y los de software aumentan surge
la idea de soportar directamente los conceptos de proceso y monitor en hardware
(microprocesador).
Surge la idea de escribir un programa concurrente independientemente del HW en
donde correr, probarlo y despus disear la arquitectura ms adecuada al software.
Cada vez se tendr HW ms especializado de acuerdo a la aplicacin.
Esta etapa contina.

1.3.7. (1980-) Redes de Computadoras

Ha tomado aproximadamente 20 aos disear sistemas de cmputo confiables en


los cuales procesos concurrentes comparten almacenamiento.
Surge la idea de redes de computadoras en las que la comunicacin no sea por
memoria compartida sino por F/S.
Este enfoque es ms natural para aplicaciones de tiempo real.
Parece que ste enfoque es la solucin para comunicacin por mensajes en sistemas
distribuidos.
Surgen conceptos de paso de mensajes No determinstico y Procesos
distribuidos que no estn entendidos del todo, indicando la necesidad de nuevos
conceptos para la computacin distribuida.
Se espera que est bien entendida la computacin distribuida por el ao 2000.
Si la evolucin de la programacin es cclica se espera:
- Nuevo reto de HW.
- Surgiendo una crisis de SW.
- La bsqueda de nuevos conceptos.
- Nuevos lenguajes de programacin.

Digitalizacin con propsito academico. Sistemas operativos

1.4. REFERENCIAS

- Nuevas teoras.
- Etctera.

1.4. Referencias
Para tener un mayor entendimiento de los temas vistos en este captulo se
recomiendan las siguientes lecturas adicionales (ver referencias al final del libro):
[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13].

Digitalizacin con propsito academico. Sistemas operativos

21

Captulo 2
Manejo de procesos
En este captulo presentaremos los detalles relativos a la manipulacin de procesos
por parte del Sistema Operativo. Usando un diagrama de estados y transiciones de los
procesos se explican todas las posibles operaciones relacionadas con procesos.
2.1.Introduccin
A travs de los procesos es como es posible realizar un trabajo utilizando un
sistema operativo. Los estados y transiciones de un proceso son ilustrados en la figura
2.1
2.2.Definiciones de proceso

Un programa en ejecucin.
Una actividad asncrona.
El espritu animado de un procedimiento.
El lugar de control de un procedimiento en ejecucin.
Lo que se manifiesta por el PCB dentro de un SO.
La entidad a la que se le asignan procesadores.
La unidad despachable.

2.3.Estados de un proceso

Corriendo.
Listo.
Bloqueado.
Eliminado.
Suspendido Listo.
Suspendido Bloqueado.

23
Digitalizacin con propsito academico. Sistemas operativos

24

CAP 2. MANEJO DE PROCESOS

Figura 2.1. Diagrama de los estados de un proceso.

2.4. Bloque de control de un proceso (PCB)

Estado actual de un proceso.


Identificacin nica del proceso.
Prioridad del proceso.
Direccin de memoria.
Recursos asignados.
rea de registros de CPU.

2.5.Operaciones sobre procesos

CREAR. Nombrar al proceso, insertarlo en la lista de procesos, determinar su


prioridad inicial, crear su PCE, asignar los recursos iniciales.
DESTRUIR. Quitar recursos al proceso, eliminarlo de la lista de procesos, borrar su
PCB.
SUSPENDER. Quitarle los recursos temporalmente.
REINICIAR. Reasignarle los recursos.
CAMBIO DE PRIORIDAD. Modificar el atributo correspondiente en el PCB.

Digitalizacin con propsito academico. Sistemas operativos

2.10.

DESHABILITACIN / HABILITACIN DE INTERRUPCIONES 25

BLOQUEO. Quitarle el procesador esperando por la ocurrencia de un evento. Se


inserta el proceso en la cola de bloqueados.
DESBLOQUEO. Al ocurrir el evento esperado se inserta el proceso en la cola de
listos.
DESPACHO. Asignacin del procesador a un proceso.

2.6. Creacin jerrquica vs. creacin no jerrquica


En la creacin jerrquica un proceso creado depende del proceso que lo creo, de
manera que al terminar el proceso creador termina necesariamente el proceso creado.
En la creacin no jerrquica el proceso creado puede continuar ejecutndose a pesar de
que el proceso creador ya termino.
2.7. Procesamiento de interrupciones

SO. Gana el control.


SO. Guarda status de proceso interrumpido.
SO. Transfiere el control a ISR.(Rutina de Servicio de Interrupcin).

2.8. Tipos de interrupciones

Supervisor CalIs (SVC) (pedir ms memoria).


FIS.
Externas(quantum).
Reinicio del Sistema.
Chequeos de programa (divisin por cero).
Chequeos de mquina.
Interrupciones NMI y MI.

2.9. Funciones del ncleo (Kernel)

Manejo de interrupciones.
Creacin / destruccin de procesos.
Cambios de estado de un proceso.
Despacho de procesos.
Suspensin y reinicio de procesos.
Sincronizacin de procesos.
Comunicacin interprocesos.
Manejo de PCBs.
Soporte de actividades de 110.
Soporte de asignacin / desasignacin de recursos.
Soporte del sistema de archivos.
Soporte del mecanismo de llamadas y regresos de procedimientos.
Soporte de funciones de contabilidad del sistema.

Digitalizacin con propsito academico. Sistemas operativos

26 CAP 2. MANEJO DE PROCESOS

2.10. Deshabilitacin/habilitacin de interrupciones

SO con interrupciones deshabilitadas.


Usuario con interrupciones habilitadas.

2.11. Estructura Jerrquica de un Sistema Operativo

THE (DIJKSTRA).

2.12. Migracin del ncleo a microcdigo:

2.13 Rutinas, corrutinas, procesos e hilos

2.13.1. Rutina

Una rutina es un conjunto de estatutos y estructuras de datos propias.


Tiene la caracterstica de ser una parte de cdigo PASIVA, es decir, solo se ejecuta
cuando se llama a travs de un CALL.
Cada vez que se llama es ejecutada desde su primer instruccin.
Al momento de ser llamada slo se guardan parte de los registros del procesador,
normalmente el apuntador del programa.

2.13.2. Corrutina

Es un conjunto de estatutos y estructuras de datos propias.


Es una parte de cdigo PASIVA, pero la forma de ejecutarse no es a travs de un
CALL sino a travs de un TRANSFER.
Solo la primera vez que se le transfiere el control con TRANSFER se ejecuta desde
su primer instruccin, las siguientes veces se ejecuta en la instruccin siguiente al
TRANSFER que se ejecut en SU cdigo.
Cuando se ejecuta un TRANSFER se guardan TODOS los registros de la corrutina
que ejecut el TRANSFER y se cargan los registros ANTERIORES de la corrutina
a la cual se le transfiere el CONTROL.
El formato de la instruccin TRANSFER es: TRANSFER(ID CO) donde IDSO
identifica a la corrutina a la que se transfiere el control.
Un detalle importante es que el CONTROL de cual corrutina se ejecuta depende de
ellas mismas, es decir, que el CONTROL est CODIFICADO dentro de las
corrutinas.
La ventaja de las corrutinas es que es bastante simple el realizar una aplicacin que
simule MIJLTIPROGRAMACION, el lenguaje MODULA-2 en su definicin
estndar tiene contemplado el manejo de corrutinas.

Digitalizacin con propsito academico. Sistemas operativos

2.13

RUTINAS. CORRUTINAS, PROCESOS E HILOS 27

2.13.3. Proceso

Un proceso es un conjunto de estatutos y estructuras de datos propios.


Es una parte de cdigo ACTIVA, su ejecucin depende de un algoritmo de
asignacin del procesador y es la entidad a la que se le asignan recursos del sistema
como memoria principal y dispositivos.
Una vez que un proceso es creado, y se le asigna procesador empieza a correr en su
primera instruccin, las siguientes veces que se le asigne procesador correr a partir
de la instruccin en la que se BLOQUE o haya sido interrumpido.
Cuando se quita el PROCESADOR a un PROCESO se guardan TODOS sus
registros y al darle el PROCESADOR se cargan todos los registros del PROCESO
al PROCESADOR.
Los procesos son los ms utilizados debido a que las aplicaciones son ms simples,
puesto que el control de la asignacin del procesador no depende de ellos sino del
algoritmo de asignacin del PROCESADOR.

2.13.4. Hilos

Algunos sistemas como el OS/2, MVS. UNIX-SUN y MACH ven a los procesos
desde dos puntos de vista:
1. Como una unidad que posee recursos. A un proceso se le asigna una rea de
memoria para poder correr y peridicamente se le asignan memoria y otros
dispositivos.
2. Como una unidad de despacho. Un proceso traslapa su ejecucin con la de otros
procesos y puede pasar durante su vida por varios estados como LISTO,
CORRIENDO, BLOQUEADO, etc. y es despachado o planificado por el
sistema operativo.

A la parte relativa a la UNIDAD QUE POSEE RECURSOS se le denomina


PROCESO o TAREA, mientras que a la parte de UNIDAD DE DESPACHO se le
denomina PROCESO LIGERO o simplemente HILO (Thread).
El uso ms sobresaliente del concepto de HILO es que se pueden tener mltiples
HILOS para el mismo PROCESO de forma que toma mucho menos tiempo crear
nuevos HILOS que crear un nuevo PROCESO. De este modo es ms eficiente
disear una aplicacin para correr como un solo proceso con mltiples hilos que
correr dicha aplicacin como mltiples procesos.
Otra caracterstica atractiva de los hilos es que dado que slo existe un proceso es
directa la comparticin de datos entre los hilos, mientras que en un esquema con
mltiples procesos se requerira la intervencin del KERNEL para realizar la
comparticin de datos lo que hara ms lenta la aplicacin.
Un ejemplo prctico del uso de los hilos es el programa Aldus-PageMaker
corriendo bajo OS/2, este programa est diseado con tres hilos que siempre estn
activos:
1. Hilo Manejador de Eventos(Event Handling).
2. Hilo Redibujador de Pantalla(Screen Redraw).

Digitalizacin con propsito academico. Sistemas operativos

28

CAP 2. MANEJO DE PROCESOS

3. Hilo de Servicio(Service) Encargado de la inicializacin, Importacin de datos,


Auto flujo e Impresin.
2.14. Referencias
Para tener un mayor entendimiento de los temas vistos en este captulo se
recomiendan las siguientes lecturas adicionales (ver referencias al final del libro):
[14], [15], [16], [17], [18], [19], [20], [21], [22], [23],[24], [13], [25], [26], [27],
[28].

Digitalizacin con propsito academico. Sistemas operativos

Captulo 3
Algoritmos de administracin de
procesadores
En este captulo se presentarn diversos algoritmos para controlar la asignacin de
procesadores a procesos.

3.1. Objetivos de la asignacin de procesadores


1.
2.
3.
4.

Ser justo evitando la posposicin indefinida


Maximizar el nmero de procesos atendidos por unidad de tiempo.
Maximizar el nmero de usuarios que reciben tiempos de respuesta aceptables.
Ser predecible. Debe funcionar en forma similar al variar la carga del sistema. Los
tiempos de respuesta no deben incrementarse grandemente al incrementar el
nmero de procesos en el sistema.
5. Minimizar la sobrecarga (Overhead) ocasionada por el algoritmo de asignacin del
CPU.
6. Balancear el uso del procesador.
7. Balancear e] tiempo de respuesta del sistema y la utilizacin del mismo.
8. Reforzar las prioridades en ambientes donde sea necesario, v.gr. en aplicaciones de
tiempo real.
9. Dar ms prioridad a los procesos que tengan asignados los recursos importantes del
sistema.
10. Debe presentar una degradacin paulatina (Graceful Degradation) al tener cargas
de trabajo grandes.
3.2. Criterios de la asignacin de CPU
Debera considerarse:
29
Digitalizacin con propsito academico. Sistemas operativos

30 CAP 3. ALGORITMOS DE ADMINISTRACIN DE PROCESADORES

1.
2.
3.
4.
5.

La cantidad de Entrada/Salida que realizar un proceso.


El tipo de proceso, si es INTERACTIVO o tipo BATCH.
Lo urgente de la respuesta, si es tiempo real o no.
Prioridad de los procesos.
La frecuencia con la que un proceso genera FALTAS DE PAGINA( Si mayor
frecuencia menor prioridad).
6. El nmero de veces que se le ha asignado el procesador a un proceso.
7. El tiempo de ejecucin acumulado de un proceso.
8. El tiempo estimado de ejecucin que le falta a un proceso.

3.3. Asignacin preemptive vs. no-preemptive


En el caso de los sistemas con adquisicin por prioridad (PREEMPTIVE), el
procesador es asignado al proceso de mayor prioridad, sin importar si se le acababa de
asignar el procesador a un proceso de menor prioridad.
En el caso de los sistemas que no manejan adquisicin por prioridad el procesador
le es quitado a un proceso solo cuando l se bloquea o termina.
3.4. Manejo de quantum
Para evitar que un proceso monopolice el procesador, en muchos sistemas se utiliza
un temporizador de QUANTUMS que genera una interrupcin peridica. Cada vez que
ocurre esta interrupcin se le quita el procesador que est actualmente corriendo y se le
otorga al siguiente proceso de la cola de listo, cuando ocurre esto se dice que se di un
cambio de contexto.
3.5. Prioridad
La prioridad puede tener caractersticas estticas y dinmicas:

CARACTERSTICAS ESTTICAS
- Tamao de cdigo.
- Tiempo estimado de ejecucin.
- Cantidad de Entrada / salida estimada.

CARACTERSTICAS DINMICAS
-

Tiempo acumulado de ejecucin.


Cantidad de recursos que tenga algn proceso.
Nmero de veces que se le ha otorgado el PROCESADOR a algn proceso.
Tiempo estimado faltante para terminar de un proceso.

Digitalizacin con propsito academico. Sistemas operativos

3.9. ASIGNACIN DE CPU SHORTEST REMAINING TIME FIRST 31

Figura 3.1. Asignacin de CPU FIFO.

3.6. Asignacin de CPU FIFO


Est es la disciplina ms sencilla, el procesador es asignado en orden secuencial de
entrada al sistema, el procesador se le quita a un proceso hasta que termina. Esto se
ilustra en la figura 3.1.
3.7. Asignacin de CPU Round Robin
El procesador es asignado a los diferentes procesos en rebanaditas de tiempo
llamadas quantum. Al terminarse el quantum de un proceso, este es insertado al final
de la cola de listo. Si el proceso termina antes de terminar su quantum, o al terminar
est, el proceso libera el CPU y se le otorga el CPU al siguiente proceso de la cola de
listo.
El tamao del quantum no debe ser tan pequeo que se acerque al tiempo de
cambio de contexto, ni tan grande que se acerque al tiempo de ejecucin de un proceso.
Esto se ilustra en la figura 3.2.

Figura 3.2. Asignacin de CPU Round Robin.

3.8. Asignacin de CPU Shortes Job First (SJF)


Este algoritmo es de tipo NO-PREEMPTIVE en la que el PROCESADOR se le
otorga al proceso con menor tiempo estimado de ejecucin. El poder estimar el tiempo
de ejecucin de un proceso no es fcil. Tomando como equivalente el tamao del
cdigo y el tiempo de ejecucin podra ocurrir que en un proceso de tamao de cdigo
pequeo sea muy iterativo y un proceso de tamao de cdigo grande no tenga
iteraciones.
Digitalizacin con propsito academico. Sistemas operativos

32 CAP 3. ALGORITMOS DE ADMINISTRACIN DE PROCESADORES

3.9. Asignacin de CPU Shortest Remaining Time First


Es similar al algoritmo anterior pero es de tipo PREEMPTIVE. Tiene gran
sobrecarga puesto que se debe ir registrando el tiempo de ejecucin de cada proceso.
3.10. Asignacin de CPU de colas con retroalimentacin multiniveles
Es un algoritmo de tipo PREEMPTIVE entre las colas de diferente prioridad. En
todas las colas menos la ltima la atencin es en forma FlEO, y en la ltima es
ROUND ROBIN. Un proceso al entrar ingresa a la primer cola y conforme avanza en
su ejecucin pasa a las colas de menor prioridad si acaso no termina antes.
Tiene la ventaja que los procesos pequeos terminan normalmente antes de llegar a
la ltima cola, y los procesos grandes al llegar a la ltima cola ya avanzaron en su
ejecucin.
El procesador se le asigna al primer proceso de la cola de ms alta prioridad que no
est vaca.
Permite clasificar fcilmente a los procesos conforme avanzan en su ejecucin.
Una variacin es permitir varias vueltas en las primeras colas.
Este algoritmo se ilustra en la figura 3.3.

Figura 3.3. Colas con retroalimentacin multi-niveles.

3.11. Asignacin de CPU Selfish Round Robin (SRR)


Clasifica a los procesos en NUEVOS y ACEPTADOS. Los procesos NUEVOS
tienen que esperar a que tengan la prioridad de un proceso aceptado para convenirse en
ACEPTADO y competir por los QUANTUMS del procesador. Los procesos aceptados
son
Digitalizacin con propsito academico. Sistemas operativos

3.14. ASIGNACIN DE CPU BASADOSEN PRIORIDADES EXTERNAS 33

manejados en forma ROUND ROBIN. La prioridad de los procesos nuevos se


incrementa con un razn a. La prioridad de los procesos aceptados se incrementa con
una razn b. Si todos los procesos aceptados terminan se acepta al proceso nuevo de
mayor prioridad.
Este mtodo se puede implementar fcilmente si se considera que todos los
procesos aceptados tienen la misma prioridad.
Algunos casos interesantes son:
1. Si b / a = 0, es decir b =0. Todos los procesos son aceptados inmediatamente y el
algoritmo se convierte en Round Robin.
2. Si b / a _ 1. Un proceso nuevo no se acepta hasta que los procesos aceptados
terminan, dndose un algoritmo similar a FlFO.
3. Si 0 < b / a < 1. Los procesos aceptados son egostas pero llega un momento en que
los procesos nuevos pasan a ser procesos aceptados y no necesariamente ocurre
esto hasta que terminen todos los procesos aceptados.
3.12. Asignacin de CPU con algoritmos hbridos
Los algoritmos anteriores pueden ser combinados para crear nuevos v.g.:
1. En las colas con retroalimentacin multiniveles, se podra manejar la ltima cola
como FlFO para reducir el tiempo perdido por CAMBIOS DE CONTEXTO.
2. Manejar los procesos en forma Round Robin por un nmero determinado de
quantum y despus manejar los procesos en forma FIFO.
3. Manejar colas de diferente prioridad cada una de ellas en forma ROUND ROBIN o
FlFO.
3.13. Asignacin de CPU dependientes del estado
1. Ajustar el tamao del quantum en el algoritmo Round Robin en funcin del nmero
de procesos en la cola de LISTOS. De este modo sera ms justo el tiempo otorgado
a cada proceso. Se debe cuidar que si hay demasiados procesos en la cola de listos
no se den QUANTUMS muy pequeos. En el caso de que slo exista un proceso en
la cola de listos se evitaran cambios de contexto.
2. Dar un quantum adicional al proceso que est corriendo cuando un nuevo proceso
entra al sistema.
3. Algunas versiones del sistema operativo UNIX utilizan el siguiente mtodo: Cada
segundo se calcula la prioridad de cada proceso. La prioridad de un proceso es
funcin de la prioridad dada inicialmente y el tiempo de CPU dado recientemente
al proceso. Entre ms tiempo de CPU se le ha dado recientemente a un proceso es
menor su prioridad.
3.14. Asignacin de CPU basados en prioridades externas
1. Usar Round Robin pero el tamao del quantum es particular para cada proceso y el
tamao de l depende de la prioridad del proceso.
Digitalizacin con propsito academico. Sistemas operativos

34 CAP 3. ALGORITMOS DE ADMINISTRACIN DE PROCESADORES

2. Se da el siguiente Quantum al proceso que haya sufrido ms, el sufrimiento se


mide
por:
Tiempo de espera de un proceso.
Nmero de veces que se le ha quitado el CPU a un proceso.
3. Se tiene el compromiso de un tiempo mximo de respuesta.

3.15. Referencias
Para tener un mayor entendimiento de los temas vistos en este captulo se
recomiendan las siguientes lecturas adicionales (ver referencias al final del libro):
[3], [14], [29], [30], [18], [31], [32], [l0], [33], [34], [11]. [26], [27], [35], [36],
[37], [25].

Digitalizacin con propsito academico. Sistemas operativos

Captulo 4
Administracin de
Memoria Real
4.1. Introduccin
Por almacenamiento real se entiende a la memoria principal que en las
computadoras actuales se implementa a travs de memorias de semiconductores y
dicha memoria es accesible directamente por el CPU.
El almacenamiento virtual, como se ver en el captulo 8, es la capacidad de
accesar ms memoria que la principal.
4.2. Organizacin
La memoria principal es un recurso muy costoso e importante, razn por la cual ha
habido muchos estudios para optimizar su uso.
Algunas preguntas importantes en la organizacin son:
+ Localizaremos a un solo usuario o a varios usuarios en memoria principal al
mismo tiempo?
+ Si hay varios usuarios al mismo tiempo, Les asignaremos la misma cantidad de
memoria a cada uno o les asignaremos PARTICIONES de tamao diferente a cada
uno?
+ Particionaremos la memoria principal en forma dinmica o en forma esttica?
+ Requerimos que los procesos de usuario sean diseados para correr en una
particin especfica o pueden correr en cualquier particin en la que quepan?
+ Se requiere que un proceso sea localizado en un solo bloque contiguo en
memoria principal o puede ser dividido en varios bloques discontiguos?
35
Digitalizacin con propsito academico. Sistemas operativos

36 CAP 4. ADMINISTRACIN DE MEMORIA REAL

4.3. Administracin del almacenamiento


Independientemente de qu prctica se escoja para la organizacin del
almacenamiento con respecto a la administracin del mismo debemos cuestionamos:

Cundo tomaremos un nuevo programa para cargarlo en memoria?


Se esperar a que se requiera cargar un programa o se tratar de anticipar las
demandas?
Cargaremos los programas tratando de minimizar: espacio desperdiciado o tiempo
requerido para ejecucin?

4.4. Jerarqua de almacenamiento


En los 50s y 60s la memoria principal estaba constituida por memorias de ncleos
magnticos muy costosas, por lo cual era indispensable disear un sistema
computacional con el mnimo tamao requerido.
Por lo tanto era necesario slo conservar en memoria principal el cdigo y datos
estrictamente necesario y lo dems en memoria secundaria.
La memoria secundaria era de mayor densidad, con un costo por bit menor, pero
con tiempos de acceso mayores que la memoria principal.
Teniendo la jerarqua ilustrada en la figura 4.1.

Figura 4.1. Jerarqua de Almacenamiento de Memoria.

En los 60s fue muy clara la necesidad de que la jerarqua de almacenamiento


incluyera un nivel adicional con cambios sustanciales en el desempeo de los sistemas
computacionales. Este nuevo nivel fue la memoria CACHE, que ira entre el CPU y la
memoria principal. La memoria CACHE obviamente es ms cara, de menos capacidad
y ms rpida que la memoria principal. El esquema de jerarqua de memoria usando
memoria cache es ilustrado en la figura 4.2.
Digitalizacin con propsito academico. Sistemas operativos

4.6.ASIGNACIN DE ALMACENAMIENTO CONTIGUO VS. NO-CONTIGUO 37

Figura 4.2. Jerarqua de memoria usando memoria cache.

4.5. Estrategias de Administracin de Almacenamiento.


1. Estrategias de FETCH.
Por demanda.
Anticipatoria.
2. Estrategias de localizacin.
3. Estrategias de reemplazo.
4.5.1. Estrategias de Fetch
.Se encargan de definir el CUANDO traer la siguiente parte de informacin a
memoria principal. La estrategia ms comn es por demanda, es decir, que una parte de
informacin se trae hasta que se requiere. Actualmente se investiga sobre polticas
ANTICIPATORIAS.
4.5.2. Estrategias de localizacin
Se refiere a DONDE dentro de memoria principal localizar un programa. FIRST
FIT, BEST FIT, WORST FIT, BUDDY FIT, FIBONACCI FIT).
4.5.3. Estrategias de reemplazo
Se relaciona con la determinacin de qu parte de un programa QUITAR para
poder poner una nueva parte.
4.6. Asignacin de Almacenamiento Contiguo vs. No-Contiguo
Los primeros sistemas de cmputo requeran la asignacin de almacenamiento
contiguo, es decir que un programa tena que ocupar un bloque de almacenamiento con
localidades contiguas, mas sin embargo se vio ms tarde la utilidad del
almacenamiento NO CONTIGUO.
En la localizacin NO CONTIGUA un programa es dividido en varios bloques o
segmentos que pueden ser localizados dentro del espacio de almacenamiento en
bloques
Digitalizacin con propsito academico. Sistemas operativos

38 CAP 4. ADMINISTRACIN DE MEMORIA REAL

de almacenamiento no necesariamente contiguos. Esto permite una mejor utilizacin


del espacio de almacenamiento pero complica la labor del sistema operativo.

4.6.1. Asignacin de almacenamiento contiguo a un solo usuario


En los primeros sistemas computacionales todo el sistema de cmputo estaba
dedicado a un solo usuario, limitando a que los programas que fuera a correr cupieran
en el espacio disponible, la organizacin de memoria resultante es ilustrada en la figura
4.3.
La nica forma de poder correr programas ms grandes que el espacio disponible
fue el manejo de OVERLAYS. Dentro del manejo de OVERLAYS, dos o ms reas de
un programa pueden ocupar el mismo espacio de almacenamiento en diferente tiempo.
El manejo de OVERLAYS requiere una planeacin muy cuidadosa y se realiza
manualmente, pues el manejo automtico es complejo, un esquema tpico de manejo de
overlays es ilustrado en la figura 4.4.

4.6.2. Proteccin en sistemas de un solo usuario


Para evitar que un programa de usuario que est funcionando mal o malicioso
dae el sistema operativo, se pueden verificar las direcciones generadas por el
programa y no permitir accesos si las direcciones corresponden al sistema operativo.
Si el usuario requiere accesar parte del sistema operativo se puede controlar a travs
de un llamado al supervisor (SUPERVISOR CALL).
La proteccin de almacenamiento con asignacin de almacenamiento contiguo a un
solo usuario es realizado a travs del uso de registros lmite segn se ilustra en la figura
4.5.
Sistemas
operativo

Usuario

No usado

Figura 4.3. Asignacin de almacenamiento contiguo a un solo usuario.

Digitalizacin con propsito academico. Sistemas operativos

4.7. SISTEMAS TIPO BATCH 39

-1 Carga la fase de inicializacin y corre


-2 Carga la fase de procedimiento en b y corre
-3 Carga la fase de salida de b y corre
Figura 4.4 Estructura de manejos de overlays

0
a

Sistemas
operativo

CPU

Usuario

Registro limite
b
No usado
c
Figura 4.5. Esquema de proteccin en un sistema con un solo usuario y almacenamiento contiguo.

4.7. Sistemas Tipo Batch


En los primeros aos de los 60s los sistemas ms novedosos eran los de tipo Batch
en los cuales el tiempo requerido para poner a correr otro proceso se redujo a travs del
uso de PROCESADORES SATLITE.
Los procesadores satlite podan preparar tandas de procesos a ejecutarse en la
computadora central, leyendo las tarjetas perforadas del cdigo de procesos y
pasndolas a
Digitalizacin con propsito academico. Sistemas operativos

40 CAP 4. ADMINISTRACIN DE MEMORIA REAL

CINTA MAGNTICA. De sta forma el tiempo ocioso de la computadora central se


redujo grandemente.
4.8. Multiprogramacin de Particin Fija
An con los sistemas tipo BATCH los sistemas de cmputo eran subutilizados
(ESTO SIN TOMAR EN CUENTA LO INJUSTO DE LOS TIEMPOS DE ESPERA)
pues un proceso que requiriera una operacin de EIS forzaba al procesador a estar
ocioso hasta que estuviera completa dicha operacin, segn se ilustra en la figura 4.6.
En el caso de que una aplicacin no realice operaciones de entrada / salida o sean muy
pocas se tienen un uso muy eficiente del CPU, esto es tpico de aplicaciones numbercrunching o intensivas en cmputo.

Figura 4.6. Esquema de uso de CPU al realizar operaciones de entrada / salida.

Fue entonces cuando se decidi el implementar un sistema en el cual en forma


simultnea varios procesos compitieran por los recursos del sistema; a este sistema se
le conoci como de: MULTIPROGRAMACIN.
De sta forma un proceso podra estar esperando la terminacin de una operacin
de ENTRADA, otro proceso la terminacin de una operacin de SALIDA y otro
usando el CPU.
Esto requiri que varios procesos pudieran estar simultneamente en memoria
principal para poder reducir los tiempos de CAMBIO DE CONTEXTO (CONTEXT
SWITCHING).
4.9. Multiprogramacin de particin fija, traduccin y cargado absoluto
En este tipo de sistemas se definan un conjunto de particiones de la memoria
principal, de sta forma podra haber al mismo tiempo diferentes procesos en diferentes
particiones. Desde el momento de compilacin o ensamblado se defina la particin
donde deba correr cada proceso. Este esquema es ilustrado en la figura 4.7. De esta
forma podra haber particiones desocupadas y procesos esperando usar una particin
donde est localizado un proceso, este problema es ilustrado en la figura 4.8.
Digitalizacin con propsito academico. Sistemas operativos

4.10. MULTIPROGRAMACIN DE PARTICIN FIJA CON CARGADO 41

Figura 4.7. Esquema de multiprogramacin fija y cargado absoluto.

Figura 4.8. Problema en un esquema de multiprogramacin fija con cargado absoluto.


Digitalizacin con propsito academico. Sistemas operativos

42 CAP 4. ADMINISTRACIN DE MEMORIA REAL

Figura 4.9. Esquema de multiprogramacin de particin fija relocalizable.

4.10. Multiprogramacin de particin fija con cargado y traduccin relocalizable


Los procesos se localizan en alguna particin libre donde quepan. Un proceso
puede empezar a correr tan pronto como este al frente de la nica cola que se maneja
en este esquema, y exista una particin libre en la cual quepa. Esto es ilustrado en la
figura 4.9.
4.11. Proteccin en sistemas de multiprogramacin
Requiere de la utilizacin de un par de registros lmite. Un par de registros lmite,
define el lmite inferior y superior del rea de memoria que es accesible a un proceso,
cuando est corriendo en cierta particin. Este esquema es ilustrado en la figura 4.10.

Figura 4.10. Esquema de proteccin en un sistema de multiprogramacin.

4.12. Fragmentacin en Sistemas de Multiprogramacin de Particin Fija


La fragmentacin ocurre cuando un proceso es ms pequeo que la particin a la
que. fue asignado, de esta forma se desperdicia el espacio que sobra. Ocurre tambin
cuando una particin no puede usarse debido a que es muy pequea para albergar
procesos que estn esperando ser cargados en memoria principal.
Digitalizacin con propsito academico. Sistemas operativos

4.14. COMPACTACIN DE ALMACENAMIENTO 43

4.13. Multiprogramacin de Particin Variable


Tratando de utilizar ms eficientemente la memoria principal se implementaron las
PARTICIONES VARIABLES, en las que a un proceso slo se le asigna la cantidad de
localidades de memoria que requiere, esto se ilustra en la figura 4.11. Cuando los
procesos terminan su ejecucin, quedan huecos entre los espacios que estn ocupados,
por lo cul es necesario realizar la unin de huecos, los diferentes casos son ilustrados
en las figuras 4.12, 4.13, 4. 14.

Figura 4.11. Esquema de multiprogramacin variable.

4.14. Compactacin de Almacenamiento


An cuando se realice la operacin de unin puede llegar a ocurrir que queden
muchos huecos no-contiguos, de forma que un proceso no quepa en ninguno de los
huecos, pero su tamao sea menor o igual que la suma de los tamaos de los huecos.
Ante lo anterior se realiza una COMPACTACION o RECOLECCION DE
BASURA con el objeto de dejar contiguos todos los espacios ocupados y todos los
huecos, que ahora formarn un solo hueco. Este esquema es ilustrado en la figura 4.15.
Esto permitira correr a todos los procesos posibles, pero tiene las siguientes
desventajas:
Digitalizacin con propsito academico. Sistemas operativos

44

CAP 4. ADMINISTRACIN DE MEMORIA REAL

Consume tiempo de CPU.


Mientras se realiza la compactacin nada puede hacerse.
Involucra relocalizacin de procesos.
Si la mezcla de procesos es muy dinmica, es frecuente el uso de la compactacin.

S O

S O

S O

P A

Hueco

Hueco

Hueco

P C

P C

P C

Hueco

Hueco

Hueco

P E

P E

P E

P F

P F

P F

Hueco

Hueco

Hueco

Hueco

Figura 4.12. Ejemplo de unin de huecos hacia abajo.

S O

S O

S O

Hueco

Hueco

Hueco

P C

P C

P C

Hueco

Hueco

P E

Hueco

P F

P F

P F

Hueco

Hueco

Hueco

Hueco

Figura 4.13. Ejemplo de unin de huecos hacia arriba.

Digitalizacin con propsito academico. Sistemas operativos

4.15.

ESTRATEGIAS DE LOCALIZACIN DE ALMACENAMIENTO 45

S O

S O

S O

Hueco

Hueco

P C

Hueco

Hueco

Hueco

P F

P F

P F

Hueco

Hueco

Hueco

Hueco

Figura 4.14. Ejemplo de unin de huecos hacia ambos lados.

S O

S O

P A

P A

Hueco

P 2

P b

P C

Hueco
P C
Hueco
Hueco
Figura 4.15. Operacin de un esquema de recoleccin de basura (garbage collection).

4.15. Estrategias de Localizacin de Almacenamiento


Permiten determinar DONDE en la memoria principal localizar un proceso
4.15.1. Estrategia Best Fit
Localiza a un proceso en el lugar que menos espacio desperdicie. Esto se ilustra en
la figura 4.16.
Digitalizacin con propsito academico. Sistemas operativos

46 CAP 4. ADMINISTRACIN DE MEMORIA REAL


Requerimiento
4 K
asigna

Sistema operativo
Hueco 16 K
P A
Hueco 14 K
P B
Hueco 5 K
P C
Hueco 30 K

Figura 4.16. Localizacin de almacenamiento utilizando Best Fit.


Requerimiento
4 K
asigna

Sistema operativo
Hueco 16 K
P A
Hueco 14 K
P B
Hueco 5 K
P C
Hueco 30 K

Figura 4.17. Localizacin de almacenamiento utilizando First Fit.

4.15.2. Estrategia First Fit


Localiza a un proceso en el primer espacio en el que quepa. Esto se ilustra en la
figura 4.17.
4.15.3. Worst Fit
Localiza al proceso en el espacio ms grande posible. Esto es ilustrado en la figura
4.18.
Requerimiento
4 K
asigna

Sistema operativo
Hueco 16 K
P A
Hueco 14 K
P B
Hueco 5 K
P C
Hueco 30 K

Figura 4.18. Localizacin de almacenamiento usando Worst Fit.

4.15.4. Estrategia Buddy Fit


Todos los bloques, sean libres u ocupados, son de tamao 2k.
Digitalizacin con propsito academico. Sistemas operativos

4.19. MULTIPROGRAMACIN CON INTERCAMBIO DE PROCESOS EN ALMACENAMIENTO 47

De sta forma si un proceso es de tamao X se le asignar un bloque de tamao


2[log 2X], si existe un bloque libre de ese tamao se asigna y si no se crea un bloque
de ese tamao por particiones de algn bloque de tamao inferior.
La unin de huecos slo es vlida para huecos del mismo tamao y que sean
resultado la misma particin o corte, formando un hueco del doble del tamao de
sus partes. Para saber si dos huecos del mismo tamao son parejas o no:
Si d1 = direccin de un bloque
d2 = direccin del otro bloque
t = tamao del bloque
Los bloques que estn en d1 y d2 de tamao t son parejas Si
d1=d2+t o d2=d1+ t o t=d1 + d2.
4.15.5. Estrategia Fibonacci Fit
La estrategia BUDDY FIT es un caso especial de sta estrategia. Se basa en la
asignacin de bloques cuyo tamao es un nmero de fibonacci. La unin de huecos se
realiza slo entre bloques contiguos y que sean nmeros de fibonacci contiguos los
tamaos de los bloques.
4.16. Fragmentacin Interna
Cuando de un bloque se desperdicia algo.
4.17. Fragmentacin Externa
Cuando hay muchos huecos pequeos.
4.18. Comparacin de estrategias de localizacin
En la tabla 4.1 se presenta una comparacin de las diferentes estrategias de
localizacin.
Best
Worst
First
Buddy

Fragmentacin
interna
Baja
Nula
Media
Alta con tamaos grandes

Fragmentacin
externa
Alta
Baja
Baja
Baja

Rapidez
Lento
Lento
Muy rpido
Muy rpido

Tabla 4.1. Comparacin de estrategias de localizacin.

4.19. Multiprogramacin con Intercambio de Procesos en Almacenamiento


En este tipo de sistemas un proceso puede pasar de memoria secundaria a
memoria principal y viceversa varias veces antes de terminar su ejecucin. La razn
puede ser por
Digitalizacin con propsito academico. Sistemas operativos

48 CAP 4. ADMINISTRACIN DE MEMORIA REAL

manejo de QUANTUM, espera de un evento de E/S, etc. Este tipo de sistemas


prcticamente dieron origen a los sistemas de manejo de memoria virtual.
4.20.Referencias
Para tener un mayor entendimiento de los temas vistos en este captulo se
recomiendan las siguientes lecturas adicionales (ver referencias al final del libro):
[38], [39], [18], [40], [21], [33], [41], [26], [27], [24], [42], [35], [43], [36], [37].

Digitalizacin con propsito academico. Sistemas operativos

Captulo 5
Memoria virtual
El termino memoria virtual est asociado a la habilidad de poder accesar un
espacio de almacenamiento mayor que el espacio de almacenamiento principal de un
sistema computacional.
Este concepto apareci por primera vez en el sistema computacional Atlas
construdo en la universidad de Manchester en 1960.
Los mtodos ms comunes para el manejo de memoria virtual son:

segmentacin
paginacin
segmentacin con paginacin

La evolucin de los sistemas de almacenamiento es ilustrada en la figura 5.1.

Real
Sistemas
Dedicados
Monosaurio

Real
Sistemas Multiprogramacin Almacenamiento real

Multiprogramacin
Particin Fija

Multiprogramacin
Particin variable

Virtual
Multiprogramacin Almacenamiento Virtual

Paginacin

Segmentacin

Segmentacin
Paginacin

Absoluto Relocalizable

Tabla 5.l Evolucin de las Organizaciones de Almacenamiento.

5.1. Conceptos bsicos de almacenamiento virtual


La clave del concepto de almacenamiento virtual est en desasociar las
direcciones referenciadas por un proceso en ejecucin de las direcciones disponibles
en almacenamiento primario.
El rango de direcciones virtuales V necesita un mecanismo de mapeo al rango de
direcciones reales R. Esto es ilustrado en la figura 5.1.
49
Digitalizacin con propsito academico. Sistemas operativos

50 CAP 5. MEMORIA VIRTUAL


Almacenamiento virtual

Almacenamiento real

Figura 5.l. Mapeo de las direcciones virtuales a las direcciones reales.

Algunos sistemas utilizan como mecanismo de mapeo a traduccin dinmica de


direcciones (DAT = Dynamic Address Translation) en los que existe la contigidad
artificial, es decir, direcciones virtuales contiguas no necesariamente corresponden a
direcciones reales contiguas. Esto se ilustra en la figura 5.2.

Almacenamiento
virtual

Mecanismo
de mapeo de
direcciones

Figura 5.2. Traduccin dinmica de direcciones.

Digitalizacin con propsito academico. Sistemas operativos

Almacenamiento
real

5.5. CONCEPTOS BSICOS DE PAGINACIN 51

5.2.

Organizacin de Almacenamiento Multiniveles

Algunas computadoras soportan 3 niveles en la jerarqua de almacenamiento,


aunque algunas no soportan la memoria Cach. Esto se ilustra en la figura 5.3. Debido
a que procesos muy grandes pueden estar corriendo concurrentemente en memoria
principal habr porciones de cada proceso.

Figura 5.3. Arquitectura de tres niveles en la organizacin de la memoria.

5.3. Mapeo de Bloques


Si el mapeo de direcciones virtuales a reales fuera en base a bytes o palabras, el
espacio requerido para almacenar la informacin del mapeo ocupada ms espacio que
la informacin que se mapea.
Si el mapeo fuera en base a bloques de tamao muy grande se requerira muy poco
espacio para almacenar la informacin del mapeo, pero el tiempo requerido para
realizar transferencias sera muy grande y limitara el nmero de procesos que podran
estar corriendo.
Si los bloques son de tamao fijo se habla de un sistema de paginacin.
Si los bloques son de tamao variable se habla de un sistema de segmentacin.
Si los bloques son de tamao variable pero en mltiplos de pginas se habla de un
sistema de segmentacin con paginacin.
5.4. Direcciones de Mapeo de Bloques
Las direcciones en un sistema de mapeo de bloques son bidimensionales. De sta
forma una direccin virtual ser: y = (b, d)
donde: b especifica el nmero de bloque y d el desplazamiento dentro del bloque
especificado. Este esquema es ilustrado en la figura 5.4.
5.5. Conceptos Bsicos de Paginacin
Una direccin virtual en un sistema de paginacin consiste de un par ordenado:
V = (p, d) donde p es el nmero de pgina y 1 es el desplazamiento dentro de la
pgina.
Digitalizacin con propsito academico. Sistemas operativos

52 CAP. 5. MEMORIA VIRTUAL

Figura 5.4. Traduccin de direcciones virtuales con mapeo de bloques.

Las pginas son transferidas de / a disco a / de memoria real usando marcos de


pgina de memoria principal. De sta forma:
El marco de pgina cero ocupa direcciones de 0 a X - 1 donde X es el tamao de
pgina
El marco de pgina uno ocupa direcciones de X a 2X - 1
El marco de pgina i ocupa direcciones de iX a (i + 1)X - 1
Como no es posible tener todas las pginas disponibles en memoria principal a un
tiempo se maneja una estructura de datos que contiene:
Un bit de Residencia
Direccin en el almacenamiento secundario si la pgina no est en memoria
principal.
Nmero de marco de pgina en almacenamiento real. Esto se ilustra en la figura
5.5.
Digitalizacin con propsito academico. Sistemas operativos

5.7. TRADUCCIN DE DIRECCIONES DE PAGINACIN POR MAPEO ASOCIATIVO 53

Figura 5.5. Estructura de datos para manejo de paginacin.

Figura 5.6. Traduccin de direcciones por mapeo directo

5.6. Traduccin de Direcciones de Paginacin por Mapeo Directo


Este esquema se ilustra en la figura 5.6.
Digitalizacin con propsito academico. Sistemas operativos

54 CAP 5. MEMORIA VIRTUAL

Figura 5.7. Traduccin de Direcciones de Paginacin por Mapeo Asociativo

5.7. Traduccin de Direcciones de Paginacin por Mapeo Asociativo


Este esquema se ilustra en la figura 5.7.
5.8. Traduccin de Direcciones de Paginacin Combinando Mapeo Asociativo y
Directo
Este esquema se ilustra en la figura 5.8.
5.9. Comparticin en un Sistema de Paginacin
Para evitar duplicar o n-plicar pginas en memoria principal se pueden compartir
pginas entre varios procesos, teniendo presente los problemas que pueden surgir
(lectores / escritores).
Al cdigo que puede ser ejecutado concurrentemente por varios procesos se le
llama: cdigo puro o cdigo reentrante (Vgr. Editor).
5.10. Segmentacin
La traduccin de direcciones en un sistema con segmentacin puede ser hecha en
forma similiar como se realiza en los sistemas de paginacin. El control de acceso
dentro de un sistema de segmentacin permite controlar:

Digitalizacin con propsito academico. Sistemas operativos

5.10. SEGMENTACIN

Figura 5.8. Traduccin de Direcciones de Paginacin Combinando Mapeo Asociativo y Directo.

lectura
escritura
ejecucin
agregado.
Los modos de control de acceso ms comunes son:
R
0
0
0
0
1
1
1
1

W
0
0
1
1
0
0
1
1

E
0
1
0
1
0
1
0
1

Comentario
No se permite acceso.
Solo ejecucin.
No tiene sentido solo permitir escribir.
Ejecucin si no se puede leer.???
Solo lectura.
Lectura y ejecucin.
Lectura / escritura.
Acceso irrestricto.

Tabla 5.2 Control de acceso.


Digitalizacin con propsito academico. Sistemas operativos

55

56 CAP 5. MEMORIA VIRTUAL

Una entrada de la tabla de segmentos contiene: r = bit de residencia; a = direccin


de almacenamiento secundario; permisos R, W, E y de Agregado; y S = Direccin
base del segmento en memoria principal (si acaso est).
La comparticin de segmentos es ms fcil y flexible que la comparticin de
pginas, pues al crecer o disminuir un espacio de memoria en la segmentacin sigue
siendo un segmento, pero en la paginacin vara el nmero de pginas.
5.11. Sistemas de Paginacin con Segmentacin
En stos sistemas los segmentos son de tamao variable, pero en mltiplos de
pginas. De sta forma una direccin virtual es vista por:
V = (s, p, d)
s = nmero de segmento
p = nmero dentro del segmento
d = desplazamiento dentro de la pgina.
Este esquema se ilustra en la figura 5.9. Un esquema completo que ilustra varios
procesos bajo un esquema de paginacin con segmentacin es dado en la figura 5.10.
5.12. Administracin del Almacenamiento Virtual
5.12.1. Estrategias de Administracin de Almacenamiento Virtual
Estrategias de Bsqueda
Se refieren a cundo traer una pgina de almacenamiento secundario a almacenamiento primario. Las opciones bsicas son:

Demanda: Espera hasta que sea referenciado un segmento o pgina para traerla.
Anticipatoria: Intenta determinar a priori la pgina o segmento que ser
referenciado para traerlo.

Estrategias de Localizacin
Se refiere a dnde localizar dentro de memoria principal la pgina o segmento
que se trae de memoria secundaria.
Estrategias de Reemplazo
Se refiere a cul segmento o pgina desplazar de memoria principal cuando no
haya espacio para localizar un segmento o pgina que es trado de memoria secundaria.

Digitalizacin con propsito academico. Sistemas operativos

5.12. ADMINISTRACIN DEL ALMACENAMIENTO VIRTUAL

57

Figura 5.9. Esquema de paginacin con segmentacin.

5.12.2. El Principio de Optimalidad


Establece que para obtener un desempeo ptimo la pgina que debe reemplazarse
es la que no ser usada por el tiempo ms largo en el futuro. Claro que esta poltica es
prcticamente irrealizable pues los sistemas operativos no cuentan con una bola de
cristal infalible.
5.12.3. Reemplazo de Pgina Aleatorio
La pgina a ser reemplazada se determina usando un nmero aleatorio. El esquema
es muy simple pero se usa rara vez pues incluso se puede estar reemplazando la
siguiente pgina a ser referenciada.
5.12.4. Reemplazo de Pgina FIFO
A cada pgina se le pone una estampa de tiempo, y se reemplaza la pgina que
tenga ms tiempo en memoria principal. El problema de esta poltica es que una pgina
que es
Digitalizacin con propsito academico. Sistemas operativos

58 CAP 5. MEMORIA VIRTUAL

Figura 5.10 Esquema bajo paginacin / segmentacin.

referenciada frecuentemente estar siendo reemplazada frecuentemente. Parecera


lgico que entre ms pginas pudieran mantenerse en memoria principal la estrategia
FIFO se comportar mejor (MENOS FALTAS DE PAGINA), mas sin embargo
Belady. Nelson y Shedler han encontrado que ciertos patrones de referencia de pginas
ocasionan ms faltas de pgina al incrementarse el nmero de pginas en memoria
principal; a este fenmeno se le denomina la ANOMALIA DE REEMPLAZO DE
PAGINAS FIFO y es ilustrada en la tabla 5.3.

5.12.5. Reemplazo de Pgina Menos Recientemente Usada (LRU)

La pgina a ser reemplazada es aqulla que no ha sido usada por el tiempo ms


largo. La Heurstica de esta poltica es que: El pasado reciente es un buen indicador
del futuro cercano .Esta poltica requiere que a cada pgina se le ponga una estampa
de tiempo
Digitalizacin con propsito academico. Sistemas operativos

5.12. ADMINISTRACIN DEL ALMACENAMIENTO VIRTUAL

Pgina
Referenciada

Resultado

3 pp

A
B
C
D
A
B
E
A
B
C
D
E

Falta
Falta
Falta
Falta
Falta
Falta
Falta
No Falta
No Falta
Falta
Falta
No Falta
3 No Faltas

A
B
C
D
A
B
E
E
E
C
D
D

A
B
C
D
A
B
B
B
E
C
C

A
D
C
D
A
A
A
B
E
E

Resultado

4 pp

Falta
Falta
Falta
Falta
No Falta
No Falta
Falta
Falta
Falta
Falta
Falta
Falta
2 No Faltas

A
B
C
D
D
D
E
A
B
C
D
E

A
B
C
C
C
D
E
A
B
C
D

A
B
B
B
C
D
E
A
B
C

59

A
A
A
B
C
D
E
A
B

Tabla 5.3 Anomala de reemplazo de pgina FIFO.

cada vez que es referenciada, lo cual es un gran overhead; por esta razn se
implementan algunas estrategias que se aproximan a la LRU. Esta poltica podra
funcionar muy mal si se estuviera ejecutando un lazo donde se requieran muchas
pginas.
5.12.6. Reemplazo de Pgina Menos Frecuentemente Usada (LFU)
La pgina a reemplazar es la que es referenciada menos intensamente. Intenta
acercarse a la poltica LRU. Padece del problema de que las pginas nuevas son las
que menos frecuentemente se han usado y son las que seran reemplazadas, pero existe
el problema de que quizs sean las que sern usadas enseguida.
5.12.7. Reemplazo de Pgina No Usada Recientemente(NUR)
Es una aproximacin a la estrategia LRU. La Heurstica utilizada es que las
pginas no usadas recientemente es improbable que se usen en un futuro cercano y por
lo tanto son las que deberan reemplazarse. Utiliza por HW 2 bits adicionales por cada
pgina: un bit de referencia y un bit de modificacin. Funciona de la siguiente manera:
Todos los bits de referencia de todas las pginas se ponen en cero.
Si se referencia una pgina su bit de referencia es puesto en uno.
Inicialmente todos los bits de modificacin se ponen en cero.
Si se modifica una pgina su bit de modificacin es puesto en uno.
Cuando se va a reemplazar una pgina tratamos de encontrar una pgina que no ha
sido referenciada, si no se encuentra ninguna buscaremos una pgina que haya sido
referenciada pero no-modificada y sino la pgina a ser reemplazada ser referenciada y
modificada. Para poder continuar con el anterior esquema peridicamente se ponen en
cero los bits de referencia de todas las pginas. Esto se indica en la tabla 5.4 en donde
el incremento de la probabilidad de reemplazo se incrementa de rengln en rengln.
Digitalizacin con propsito academico. Sistemas operativos

60 CAP 5. MEMORIA VIRTUAL


Bit de referencia
0
0
1
1

Bit modificado
0
1
0
1

Tabla 5.4 Bits para el esquema de reemplazo de pgina (NUR).

5.12.8. Localidad
Establece que los procesos tienden a referenciar el almacenamiento en forma nouniforme sobre patrones altamente localizados.
Localidad Temporal
Significa que las localidades de memoria referenciadas recientemente tienen alta
probabilidad de ser referenciadas en el futuro cercano. v.g.:
Lazos
Subrutinas
Stacks
Variables para conteo y totales.
Localidad Espacial
Significa que si se est accesando una localidad en particular es muy probable que
los siguientes accesos estn cerca del lugar del anterior acceso. v.g.

Recorrido de Arreglos.
Ejecucin de Cdigo Secuencial.
La tendencia de localizar variables relacionadas juntas.

5.12.9. Conjuntos de Trabajo (Working Sets)


Denning desarroll una vista de la actividad de un programa llamada: la teora de
comportamiento de un programa basado en el conjunto de trabajo. Un conjunto de
trabajo es la coleccin de pginas que un proceso est referenciado activamente.
Denning sostena que para que un programa corriera eficientemente su conjunto de
trabajo debera ser mantenido en memoria principal, o de otra forma se dara un efecto
llamado thrashing que se da cuando hay un nmero excesivo de faltas de pgina.
De esta forma La decisin de aceptar un nuevo proceso en el sistema debera de
estar sustentada por la existencia de suficiente espacio en memoria principal para el
conjunto de trabajo del nuevo proceso.
El conjunto de trabajo de pginas de un proceso en el tiempo t W(t, w) es el
conjunto de pginas referenciadas por el proceso en el intervalo t w a
W es conocida como el tamao de ventana del conjunto de trabajo, y la definicin
de w afecta grandemente el tamao del conjunto de trabajo como se ilustra en la
grfica. El
Digitalizacin con propsito academico. Sistemas operativos

5.12. ADMINISTRACIN DEL ALMACENAMIENTO VIRTUAL

61

conjunto de trabajo real de un proceso es el conjunto de pginas que deben estar en


memoria principal para que un proceso se ejecute eficientemente. Las pginas
referenciadas por el proceso durante este intervalo de tiempo constituyen el conjunto
de trabajo (working set) del proceso W(t, w).
Los conjuntos de trabajo cambian conforme se ejecuta un proceso. Se debe tomar
en cuenta que:
los conjuntos de trabajo son transitorios y el siguiente conjunto de trabajo de un
proceso puede diferir substancialmente del anterior conjunto de trabajo. De otra
forma se podran otorgar conjuntos de trabajo muy grandes y el sistema experimentara
thrashing.
5.12.10. Paginacin por Demanda
La justificacin de esto:

Los resultados de la computabilidad nos dicen que la trayectoria de ejecucin de


un programa no puede ser descrita con exactitud, por lo que una estrategia
anticipatoria no funcionar adecuadamente.
Las nicas pginas que son tradas a memoria principal son las que realmente se
necesitan.
La estrategia anticipatoria tiene gran overhead para el clculo de qu pgina traer y
la de demanda no.

5.12.11. Paginacin Anticipatoria


El bajo costo de la memoria principal podra hacer ms atractivos los sistemas con
paginacin anticipatoria, pues el costo de malas decisiones ser mnimo y el
beneficio de las buenas decisiones dara lugar a una ejecucin ms rpida de los
procesos.
5.12.12. Liberacin de Pginas
La idea es que los compiladores y sistemas operativos pudieran detectar cuando una
pgina ya no se necesita y liberarla, de esta forma los conjuntos de trabajo no
experimentaran grandes aumentos y podra mantenerse al mnimo el espacio de
memoria principal utilizado, pudiendo soportar mayor nmero de procesos.
5.12.13. Tamao de Pgina
Consideraciones para seleccionar un tamao de pgina adecuado:
Si el tamao de pgina es muy pequeo, las tablas de pgina sern muy grandes y
se requerir mucho espacio para ellas. A esto se le llama fragmentacin de tabla.
Si el tamao de pgina es muy grande, slo cabrn en memoria principal unas
cuantas y se tendrn datos que realmente no sern referenciados.
Si se quiere minimizar 110 parecera lgico tener pginas de mayor tamao.
Como los programas exhiben localidad de referencia y sta es pequea, entonces
parecera lgico tener pginas pequeas.
Digitalizacin con propsito academico. Sistemas operativos

62 CAR 5. MEMORIA VIRTUAL

Si tratramos de reducir la fragmentacin interna el tamao de pgina tendra que


ser ms pequeo.
Tpicamente el tamao de pgina varia de 512 a 4096 palabras.

5.12.14. Comportamiento de un Programa Bajo Paginacin


Cuando un proceso empieza a correr referencia rpidamente la mayor parte de sus
pginas, pero conforme pasa el tiempo, la razn de aumento de pginas referenciadas
disminuye.
5.13. Referencias
Para profundizaren el manejo de memoria virtual se recomiendan las siguientes
lecturas:
[38], [39], [18], [40], [33], [41], [26], [27], [24], [42], [35], [43], [36], [37], [44].

Digitalizacin con propsito academico. Sistemas operativos

Captulo 6
Sincronizacin y
comunicacin de procesos
En este captulo se vern diversos mecanismos de control de concurrencia, se tratan
ampliamente diversos mecanismos para realizar la sincronizacin y comunicacin entre
procesos cooperativos y la solucin de problemas de concurrencia clsicos.
6.1. Concurrencia de procesos
Dos procesos son concurrentes si el inicio de uno de ellos ocurre antes de la
terminacin del otro, es decir, la ejecucin de los procesos se traslapa en el tiempo.
En un sentido estricto la concurrencia slo se puede dar en un sistema que conste de
ms de una unidad de procesamiento.
La concurrencia de procesos es muy til para incrementar la eficiencia y utilizacin
de los sistemas de cmputo.
Es una labor difcil determinar qu actividades pueden hacerse en forma
concurrente y cules en forma secuencial para maximizar eficiencia.
6.2. Suma de dos Matrices
Si deseamos sumar dos matrices, podemos desarrollar una versin paralela ms
eficiente que una versin secuencial.

63
Digitalizacin con propsito academico. Sistemas operativos

64 CAR 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

La versin paralela se podra expresar como:


PARBEGIN
C[1,1] := A[1, 1] + B[1,1];
C[1, 2] := A[1, 2] + B[1,2];
C[2, 1] := A[2, 1] + B[2,1];
C[2, 2] := A[2, 2] + B[2,2];
PAREND.
Los enunciados PARBEGIN y PAREND nos sirven para indicar que los estatutos
contenidos entre ellos pueden ejecutarse en forma paralela o concurrente.
Tambin se utilizan los enunciados COBEGIN y COEND para el mismo propsito.
6.3. Ecuacin cuadrtica
Tenemos que la ecuacin cuadrtica general ax2 + bx + c = O tiene como solucin:
br

b 2  4ac
2a

El clculo de las soluciones podra ser hecho de manera paralela de acuerdo al


siguiente programa
tiene como solucin:
PARBEGIN
t1:= -b;
t2:=B * *2;
t3:=4* A * C;
t4:=2*A ;
PAREND.
t5:=(t2-t3)* *(0.5);
X1:=(t1 + t5) / t4;
X2:=(t1 t5) / t4;
6.4. Problema de la actualizacin perdida
Supongamos que tenemos dos transacciones (A y B) las cuales se ejecutan en forma
concurrente y comparten variables.
PARBEGIN
TRANSACCION A;
TRANSACCION B;
PAREND.

Digitalizacin con propsito academico. Sistemas operativos

6.6. ALGORITMO DE DEKKER (MEMORY INTERLOCK) 65

Transaccin A
Transaccin B
tl Saldo A = Saldo X
t2
Saldo B = Saldo X
t3 Saldo X = Saldo A - 1000
t4
Saldo X = Saldo B -1000
Si: ti < t2 < t3 < t4 y SaldoX = 2000 en tl. El valor final de SaldoX es 1000 pero
debera ser 0.
De lo anterior nos damos cuenta que no se debe permitir el acceso indiscriminado
de procesos concurrentes a variables o recursos compartidos.
6.5. Exclusin mutua
De acuerdo al problema de la actualizacin perdida se observa que es necesario
controlar la ejecucin concurrente de procesos surgiendo la necesidad de la exclusin
mutua.
La exclusin mutua es una regla de sincronizacin la cual especifica que los
accesos a variables o recursos compartidos deben hacerse de uno a la vez cuando
tenemos procesos concurrentes.
Cuando un proceso est ejecutando el cdigo relativo al acceso de recursos o
variables compartidas se dice que est en su SECCION CRITICA.
La exclusin mutua puede ser implementada por medio de diferentes mecanismos.
6.6. Algoritmo de Dekker (Memory Interlock)
Considerando que no es posible el uso de instrucciones que manejen las
interrupciones (HABILITACION / DESHABILITACION DE INTERRUPCIONES), y
que la nica caracterstica que nos proporciona el HW son instrucciones de
almacenamiento indivisibles, resuelva el problema de exclusin mutua considerando
que la solucin:
1.
2.
3.
4.

No debe dar lugar a la posposicin indefinida


No debe dar lugar a una ejecucin secuencial
No debe dar lugar a que se ejecuten las secciones crticas en forma simultnea
La solucin debe ser independiente de la velocidad de ejecucin de los procesos.

6.6.1. Algoritmo para construir un diagrama de estados de la ejecucin


concurrente de procesos
Deben seguirse los siguientes pasos:
1.- Numere el cdigo de los dos procesos
2.- Construya una tabla de la forma:
Estado actual Estado futuro
3.- Dentro del ESTADO FUTURO existirn tantas columnas como posibles
cambios de estado puede haber. v.g. si se trata de dos procesos tendremos:
Digitalizacin con propsito academico. Sistemas operativos

66 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

Estado actual

Estado futuro
Avanza P1 Avanza P2

Avanzan ambos Avanzan ambos

En general el nmero de posibles columnas ser: 2i donde i indica el nmero de


procesos. Pero como el caso de No Avanzan no es relevante tendremos 2 i - 1 posibles
columnas.
4.- Empiece con el estado actual 1,1 y los valores iniciales de las variables y
construya sus estados futuros.
5.- Con el siguiente estado futuro no analizado, considrelo como estado actual
y construya sus estados futuros.
6.- Contine con el punto 5 hasta que todos los estados futuros estn
analizados.
7.- Construya la grfica de estados.
8.- Los estados de los cuales no salen transiciones son estados de deadlock.
9.- Si se ejecutan los estatutos correspondientes a las secciones criticas hay
problemas con la solucin.
6.6.2 Versin 1 de Memory Interlock
program versionone;
var processnumber: integer:
procedure processone;
begin
E1 while true do begin
E2 while processnumber=2 do;
E3 criticalsectionone;
E4 processnumber:=2;
E5 otherstuffone
end
end:
procedure processtwo;
begin
E1 while true do begin
E2 whileprocessnumber=1 do;
E3 criticalsectiontwo;
E4 processnumber:=1;
E5 otherstufftwo
end
end;
begin
processnumberl:=1;
parbegin
processone;
processtwo:
parend
end.
Digitalizacin con propsito academico. Sistemas operativos

6.6. ALGORITMO DE DEKKER (MEMORY INTERLOCK) 67

E. ACTUAL
1,1,1
2,1,1
1,2,1
221
3,1,1
3,2,1
4,1,1
4,2,1
5,1,2
5,2,2
1,1,2
1,2,2
5,3,2
1,3,2
2,1,2
2,2,2
2,3,2
5,4,2
1,4,2
2,4,2
5,5,1
1,5,1
2,5,1
5,1,1
3,5,1
5,2,1
4,5,1
5,5,2
1,5,2
2,5,2

E. FUTURO
AV.PRO 1
2,1,1
3,1,1
2,2,1
321
4,1,1
4,2,1
5,1,2
5,2,2
1,1,2
1,2,2
2,1,2
2,2,2
1,3,2
2,3,2
2,1,2
2,2,2
2,3,2
1,4,2
2,4,2
2,4,2
1,5,1
2,5,1
3,5,1
1,1,1
4,5,1
1,2,1
5,5,2
1,5,2
2,5,2
2,5,2

E. FUTURO
AV. PRO 2
1,2,1
2,2,1
1,2,1
221
3,2,1
3,2,1
4,2,1
4,2,1
5,2,2
5,3,2
1,2,2
1,3,2
5,4,2
1,4,2
2,2,2
2,3,2
2,4,2
5,5,1
1,5,1
2,5,1
5,1,1
1,1,1
2,1,1
5,2,1
3,1,1
5,2,1
4,1,1
5,1,2
1,1,2
2,1,2

E. FUTURO
AV. AMBOS
2,2,1
3,2,1
2,2,1
Acceso concurrente variable
4,2,1
4,2,1
5,2,2
Acceso concurrente variable
1,2,2
1,3,2
2,2,2
2,3,2
1,4,2
2,4,2
2,2,2
Acceso concurrente variable
2,4,2
1,5,1
2,5,1
Acceso concurrente variable
1,1,1
2,1,1
3,1,1
1,2,1
4,1,1
1,2,1
5,1,2
1,1,2
2,1,2
2,1,2

Tabla 6.l. Tabla de estados de anlisis de solucin 1 Memory.

En este caso el estado constar de tres nmeros, el primer nmero indica el nmero
de instruccin del proceso 1, el segundo nmero el nmero de instruccin del proceso 2
y el tercer nmero el valor de la variable processnumber
La grfica que ilustra la ejecucin de este programa es la figura 6.1
6.6.3 Versin 2 de Memory Interlock
Program versiontwo;
var p1 inside, p2inside: boolean;
procedure processone;
begin
while true do
begin

Digitalizacin con propsito academico. Sistemas operativos

68 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

Figura 6.1. Grfica de la ejecucin de la versin 1 de Memory Interlock.

Digitalizacin con propsito academico. Sistemas operativos

6.6. ALGORITMO DE DEKKER (MEMORY INTERLOCK)

while p2inside do;


p1inside: =true;
criticalsectionone;
p1inside:= false;
otherstuffone
end
end;
procedure processtwo;
begin
while true do
begin
while plinside do;
p2inside:=true;
criticalsectiontwo;
p2inside: = false;
otherstufftwo
end
end;
begin
plinside: =false;
p2inside: =false;
parbegin
processone;
processtwo;
parend
end.
6.6.4 Versin 3 de Memory Interlock
program versionthree;
varplwantstoenter p2wantstoenter:boolean;
procedure processone;
begin
while true do
begin
p1wantstoenter:=true;
while p2wantstoenter do;
criticalsectionone;
pl wantstoenter: =false;
otherstuffone
end
end;
procedure processtwo;
begin

Digitalizacin con propsito academico. Sistemas operativos

69

70

CAP. 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

while true do
begin
p2wantstoenter: =true;
while plwantstoenter do;
criticalsectiontwo;
p2wantstoenter: =false;
otherstufftwo
end
end;
begin
p1wantstoenter:=false;
p2wantstoenter: =false;
parbegin
processone;
processtwo;
parend
end.
6.6.5 Versin 4 de Memory Interlock
program versionfour;
var p1wantstoenter,p2wantstoenter:boolean;
procedure processone;
begin
while true do
begin
plwantstoenter:=true;
while p2wantstoenter do
begin
pl wantstoenter: =false;
delay(random, fewcycles);
plwantstoenter =true;
end;
criticalsectionone;
plwantstoenter: =false;
otherstuffone
end
end;
procedure processtwo;
begin
while true do
begin
p2wantstoenter: =true;
while plwantstoenter do

Digitalizacin con propsito academico. Sistemas operativos

6.6. ALGORITMO DE DEKKER (MEMORY INTERLOCK) 71

begin
p2wantstoenter: =false;
delay(random, fewcycles);
p2wantstoenter:=true;
end;
criticalsectiontwo;
p2wantstoenter: =false;
otherstufftwo
end
end;
begin
plwantstoenter: =false;
p2wantstoenter: =false;
parbegin
processone;
processtwo
parend
end.
6.6.6 Solucin Final de Memory Interlock (Algoritmo de Dekker)
program dekkersalgorithm
var favoredprocess:(first, second);
plwantstoenterp2wantstoenter:boolean;
procedure processone;
begin
while true do
begin
plwantstoenter:=true;
while p2wantstoenter do
if favoredprocess = second then
begin
plwantstoenter: =false;
while favoredprocess second do
p1 wanstoenter: =true;
end;
criticalsectionone;
favoredprocess: =second;
plwantstoenter: =false;
otherstuffone
end
end;
procedure processtwo;
begin

Digitalizacin con propsito academico. Sistemas operativos

72 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

white true do
begin
p2wantstoenter:=true;
while plwantstoenter do
if favoredprocess = first then
begin
p2wantstoenter: =false;
while favoredprocess =first do
p2wanstoenter: =true;
end;
criticalsectiontwo;
favoredprocess: =first;
plwantstoenter: =false;
otherstufftwo
end
end;
begin
plwantstoenter: =false;
p2wantstoenter: =false;
favoredprocess. =first;
parbegin
processone;
processtwo
parend
end.
6.7. Problema de Exclusin Mutua Usando Intercambios(Test and Set)
Esta solucin utiliza operaciones de intercambio indivisibles para resolver el
problema, pero slo se puede implementar en procesadores que tengan alguna de las
operaciones de intercambio indivisibles:

Registro a Registro (no es factible por costosa)


Registro a Memoria
Memoria a Memoria

Program Testandsetexample;
var active: boolean;
procedure processone;
var onecannotenter: boolean;
begin
while true do
begin
onecannotenter: =true;

Digitalizacin con propsito academico. Sistemas operativos

6.8. ALGORITMO DE PETERSON PARA EXCLUSIN MUTUA

73

while onecannotenter do testandset(onecannotenter active);


critical sectionone;
active: =false;
otherstuffone
end
end;
procedure processtwo;
var twocannotenter:boolean;
begin
while true do
begin
twocannotenter: =true;
while twocannotenter do testandset(twocannotenter active);
critical sectiontwo;
active:=false;
otherstufftwo
end
end;
begin
active: =false;
parbegin
processone;
processtwo
parend
end.
Este algoritmo tiene como caractersticas relevantes:

Usa Busy Wait


Es bastante simple.

6.8. Algoritmo de Peterson para exclusin mutua


Recientemente se ha propuesto un algoritmo mucho ms simple que el algoritmo de
DEKKER para resolver la exclusin mutua conocido como algoritmo de Peterson que
es dado en seguida.
program peterson
var turn :integer;
enterl,enter2:boolean;
procedure pl;
begin
while true do
begin
enterl:=true;

Digitalizacin con propsito academico. Sistemas operativos

74 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

turn := 2;
while enter2 and turn=2 do;
criticalsectionone;
enterl:=false;
otherstuffone
end
end;
procedure p2;
begin
while true do
begin
enter2: =true;
turn:= 1;
while enterl and turn=l do;
criticatsectiontwo;
enter2:=false;
otherstufftwo;
end
end;
begin
enterl:=false;
enter2: =false;
turn: =l;
parbegin
pl;
p2;
parend
end.
6.9. Semforos
Es una estructura de datos que se implementa en su forma ms simple con un
contador y tiene dos funciones de acceso P y V (espera y seal), permite el manejo de:

Exclusin mutua.
Sincronizacin entre procesos.

La caracterstica ms importante de las operaciones P y V es su


INDIVISIBILIDAD, es decir, una vez que se inician no se pueden interrumpir.
Por lo cual se ejecutan con interrupciones deshabilitadas y se les denomina
primitivas.
P(id_sem);
Deshabilita_Interrupciones;
Id_sem.cont:= id.sem cont- 1;
Si (id_sem.cont < 0) Entonces Bloquea_Proceso;

Digitalizacin con propsito academico. Sistemas operativos

6.9. SEMFOROS 75

Habilita_Interrupciones;
Fin P;
V(id_sem);
Deshabilita_Interrupciones;
id_sem.cont =id_sem.cont+1;
Si (id_sem. cont < =0) Entonces Desbloqueo _ proceso;
Habilita_Interrupciones;
Fin V;
Detalles importantes respecto a semforos:

El valor inicial del semforo indica en trminos generales el nmero de unidades


disponibles de algn recurso.
En el caso de exclusin mutua el nmero de recursos es 1 y este es el valor inicial
del semforo.
Cuando el contador del semforo tiene valores negativos indica el nmero de
procesos bloqueados en ese semforo.
La exclusin mutua se resuelve en forma sencilla usando semforos.
De acuerdo al valor mximo del semforo se clasifican en:
Semforos binarios: valor mximo = 1.
Semforos generales: No tiene lmite.

6.9.1 Exclusin mutua con semforos


Programa Exc_Semaforo;
VAR
Sem_mutex: Semforo Binario;
Proceso1;
___
___
P(sem_mutex);
(* seccin crtica *)
V(sem_mutex);
___
___
Fin Proceso1;
Proceso2;
___
___
P(sem_mutex);
(* seccin crtica *)
V(sem_mutex);
___
___
Fin Proceso2;
Digitalizacin con propsito academico. Sistemas operativos

76 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

Inicializacin;
Sem_mutex: =1;
Parbegin
Proceso 1;
Proceso2;
Parend;
Fin Programa Exc_Semaforo.
Y la comunicacin entre procesos?
6.9.2 Problema del productor / consumidor
Se tienen dos procesos, uno produce unidades de informacin de una en una y las
deposita en un buffer; y el otro las consume del mismo buffer tambin de una en una.
1. Plantear un solucin usando pseudocdigo y considerando:
2. El buffer es de capacidad ilimitada por lo cual no se puede dar la situacin de buffer
lleno.
3. El consumidor deber ser bloqueado si no hay unidades de informacin.
4. Las operaciones de manipulacin del buffer deben hacerse en forma secuencial.
5. Plantee una solucin usando:
Semforos generales.
Semforos binarios.
Productor consumidor con semforos generales buffer infinito
PROGRAM PROD_CON_SEM_GEN;
VARIABLES
SEM_UNIDADES:SEMAFORO GENERAL;
SEM_BUFFER:SEMAFORO GENERAL;
PRODUCTOR;
____
PRODUCE_UNIDADES_DE_INFORMAClON;
P(SEM_BUFFER);
AGREGA_UNIDADES_L_BUFFER;
V(SEM_BUFFER);
V(SEM_UNIDADES);
____
FIN PRODUCTOR;
CONSUMIDOR;
____
P(SEM_BUFFER);
P(SEM_UNIDADES);
TOMA_PORCION_DEL_BUFFER;
V(SEM_BUFFER);
CONSUME_UNIDADES_DE_INFORMACIN;
Digitalizacin con propsito academico. Sistemas operativos

6.9. SEMFOROS

____
FIN CONSUMIDOR;
INICIALIZAClON:
SEM_UNIDADES:=0;
SEM_BUFFER: =1;
PARBEGIN
PRODUCTOR;
CONSUMIDOR;
PAREND;
FIN PROGRAMA PROD_CON_SEM_GEN.
PROGRAM PROD_CON_SEM_GEN2;
VARIABLES
SEM_UNIDADES: SEMAFORO GENERAL;
SEM_BUFFER: SEMAFORO GENERAL;
PRODUCTOR;
____
PRODUCE_UNIDADES_DE_INFORMAClON;
P(SEM_BUFFER);
AGREGA_UNIDADES_L_BUFFER;
V(SEM_BUFFER);
V(SEM_UNIDADES);
____
FIN PRODUCTOR;
CONSUMIDOR;
____
P(SEM_UNIDADES);
P(SEM_BUFFER);
TOMA_PORCION_DEL_BUFFER;
V(SEM_BUFFER);
CONSUME_UNIDADES_DE_INFORMACION;
____
FIN CONSUMIDOR;
INICIALIZAClON:
SEM_UNIDADES: =0;
SEM_BUFFER:=1;
PARBEGIN
PRODUCTOR;
CONSUMIDOR;
PAREND;
FIN PROGRAMA PROD_CON_SEM_GEN2.
Productor consumidor con semforos booleanos buffer infinito
PROGRAMA PROD_CON_SEM_BOOL;

Digitalizacin con propsito academico. Sistemas operativos

77

78 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

CONSTANTES
MAX_BUFFER: =MAX;
TIPO
BUFFER=0. .MAX_BUFFER;
VARIABLES
SEM_CONSUMIDOR : SEMAFORO BINARIO;
SEM_BUFFER: SEMAFORO BINARIO;
NUM_UNIDADES: BUFFER;
PRODUCTOR;
____
PRODUCE_UNIDAD_DE_INFORMAClON;
P(SEM_BUFFER);
AGREGA_UNIDAD_L_BUFFER;
NUM_UNIDADES: =NUM_UNIDADES+ 1;
SI NUM_UNIDADES=1 ENTONCES V(SEM_CONSUMIDOR);
V(SEM_BUFFER);
____
FIN PRODUCTOR;
CONSUMIDOR;
____
(SEM_CONSUMIDOR);
REPITE
P(SEM_BUFFER);
TOMA_PORCION_DEL_BUFFER;
NUM_UNIDADES: =NUM_UNIDADES-1;
V(SEM_BUFFER);
CONSUME UNIDAD_DE_INFORMAClON;
HASTA QUE NUM_UNIDADES=O;
____
FIN CONSUMIDOR;
INICIALIZAClON:
SEM_CONSUMIDOR: =0;
SEM_BUFFER: =1;
NUM_UNIDADES:=0;
PARBEGIN
PRODUCTOR;
CONSUMIDOR;
PAREND;
FIN PROGRAMA PROD_CON_SEM_BOOL.
PROGRAMA PROD_CON_SEM_BOOL2;
CONSTANTES
MAX_BUFFER: =MAX;
TIPO

Digitalizacin con propsito academico. Sistemas operativos

6.9. SEMFOROS 79

BUFFER=0. .MAX_BUFFER;
VARIABLES
SEM_CONSUMIDOR : SEMAFORO BINARIO;
SEM_BUFFER: SEMAFORO BINARIO;
NUM_UNIDADES: BUFFER;
PRODUCTOR;
____
PRODUCE_UNIDAD_DE_INFORMACION;
P(SEM_BUFFER);
AGREGA_UNIDAD_AL_BUFFER;
NUM_UNIDADES: =NUM_UNIDADES+ 1;
SI NUM_UNIDADES= 1 ENTONCES V(SEM_CONSUMIDOR);
V(SEM_BUFFER);
____
FIN PRODUCTOR;
CONSUMIDOR;
VARIABLES
NUM_UNIDADES_ANT_BUFFER;
____
P(SEM_CONSUMIDOR);
REPITE
P(SEM_BUFFER);
TOMA_PORCION_DEL_BUFFER;
NUM_UNIDADES: =NUM_UNIDADES-1;
NUM_UNIDADES_ANT: =NUM_UNIDADES;
V(SEM_BUFFER);
CONSUME_UNIDAD_DE_INFORMACION;
HASTA QUE NUM_UNIDADES_ANT=0;
____
FIN CONSUMIDOR;
INICIALIZAClON:
SEM_CONSUMIDOR: =0;
SEM_BUFFER: = 1;
NUM_UNIDADES: =0;
PARBEGIN
PRODUCTOR;
CONSUMIDOR;
PAREND;
FIN PROGRAMA PROD_CON_SEM_BOOL2.

De lo anterior deducimos lo superfluo de los semforos generales, es decir, todo lo


que resolvemos con los semforos generales se puede resolver con los semforos
booleanos.
Digitalizacin con propsito academico. Sistemas operativos

80 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

Problema productor consumidor semforos generales buffer finito


PROGRAMA PROD_CONSUMIDOR;
CONSTANTES
max=max_unidades_buffer;
VARIABLES
Sem_productor:SEMAFORO GENERAL;
Sem_consumidor:SEMAFORO GENERAL;
Sem_mutex :SEMAFORO GENERAL;
PRODUCTOR:
____
____
produce_unidades_de_informacin;
P(sem_productor);
P(sem_mutex);
Agrega_unidad_al_buffer;
V(sem_mutex);
V(sem_consumidor);
____
____
FIN PRODUCTOR;
CONSUMIDOR;
____
____
P(sem_consumidor);
P(sem_mutex);
toma_unidad_del_buffer;
V(sem_mutex),
V(sem_productor);
____
____
FIN CONSUMIDOR;
INICIALIZACION:
Sem_mutex: =I;
Sem_productor: =max;
Sem_consumidor: =0;
PARBEGIN
PRODUCTOR;
CONSUMIDOR;
PAREND;
FIN PROGRAMA PROD_CONSUMIDOR.

Digitalizacin con propsito academico. Sistemas operativos

6.9. SEMFOROS 81

Problema productor consumidor semforos generales buffer finito


Problema del Productor-Consumidor considerando que se puede dar la condicin de
buffer lleno y buffer vaco usando slo SEMFOROS BINARIOS.
PROGRAMA PROD_CONSUMIDOR;
CONSTANTES max=max_unidades_del_buffer;
TIPO Buffer=0.. max;
VARIABLES
Sem_productor :SEMAFORO BINARIO;
Sem_consumidor:SEMAFORO BINARIO;
Sem_buffer :SEMAFORO BINARIO;
unidades :Buffer;
PRODUCTOR;
VARIABLES
espacio:Buffer;
REPITE
Produce_unidad_de_informacin:
P(sem_buffer);
Deposita_unidad;
unidades: =unidades+ 1;
espacio: =max - unidades;
Si unidades=1 Entonces V(sem_consumidor);
V(sem_buffer);
HASTA espacio=0;
P(sem_productor);
FIN PRODUCTOR;
CONSUMIDOR;
VARIABLES
Que_consumir:Buffer;
P(sem_consumidor);
REPITE
P(sem_buffer);
Toma_unidad_de_informacin:
unidades: =unidades-1;
Que_consumir:=unidades;
Si unidades=max-1 Entonces V(sem_productor);
V(sem_buffer);
consume_unidad;
HASTA que_consumir=0;
FIN CONSUMIDOR;
INICIALIZAClON:
sem_productor = 0;
sem_consumidor =0;

Digitalizacin con propsito academico. Sistemas operativos

82 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

sem_buffer:= 1;
unidades: =0;
PARBEGIN
PRODUCTOR;
CONSUMIDOR;
PAREND
FIN PROGRAMA PROD_CONSUMIDOR.
6.9.3 Problema de lectores y escritores
Uno de los problemas ms comunes en el campo de Bases de Datos es el control de
acceso concurrente a una base de datos por parte de dos tipos de procesos: Lectores y
Escritores.
Un lector es un proceso que no modifica la base de datos por lo cul, se puede
permitir el acceso concurrente de ellos.
Un escritor es un proceso que actualiza la base de datos, por lo tanto no se debe
permitir el acceso concurrente a la base de datos.
Slo lectores
Plantear el pseudocdigo de uno de k lectores que accesan la base de datos
considerando que se permite el acceso concurrente y tenemos un contador del nmero
de lectores accesando.
Programa Lectores;
Constantes
Max_1=M;
Tipos
lec= 0,1,2..., max
Variables
Con_lec: Iec;
mutex : Semforo Binario;
Proceso Lector_i,
___
___
P(mutex):
Cont_lec := cont_lec + 1;
V(mutex);
(* Acceso a la base de datos *)
P(mutex):
Cont_lec : = cont_lec - 1;
V(mutex);
___
___
Fin Proceso Lector_i;

Digitalizacin con propsito academico. Sistemas operativos

6.9. SEMFOROS 83

Inicializacin:
Cont_lec : = O;
mutex := 1;
PARBEGIN
___
Proceso Lector_i;
PAREND
FIN Programa Lectores;
Slo Escritores
Plantear el pseudocdigo de uno de m escritores considerando que el acceso es
mutuamente exclusivo.
Programa Escritores;
Variables
mutex: Semforo Binario;
Proceso Escritor_j;
___
___
P(mutex);
(*Acceso alabase de datos *)
V(mutex);
___
___
Fin Proceso Escritor_j;
Inicializacin:
mutex:= 1;
PARBEGIN
___
Proceso Escritor_j;
___
PAREND
FIN Programa Escritores;
Lectores y escritores
Plantear el pseudocdigo que implemente el acceso a una base de datos por parte de
varios procesos de tipo lector y varios procesos de tipo escritor, considerando que:
Los lectores pueden accesar la base de datos en forma concurrente pero mientras
est accesando un lector ningn escritor podr realizar su acceso.
Los escritores deben accesar la base de datos en forma mutuamente exclusiva, y
ningn lector podr accesar la Base de Datos mientras lo est haciendo un escritor.
Existen dos alternativas de solucin:
Digitalizacin con propsito academico. Sistemas operativos

84 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

Solucin l. Los lectores deben ser retardados lo mnimo para hacer su


acceso(tienen prioridad los lectores).
Solucin 2. Los escritores deben ser retardados lo mnimo para hacer su
acceso(tienen prioridad los escritores).
PROGRAMA Lectores_Prioridad;
Constantes
Max_L = M;
Tipos
Lec = 0,1,2,..., Max_L;
Variables
Mutex: Semforo Binario;
Esc: Semforo Binario;
Con_lec: Lec;
Proceso Lector_i;
___
___
P(Mutex);
Cont_Lec := Cont_Lec + 1;
SI Cont_lec = 1 ENTONCES P(esc);
V(Mutex);
(*acceso a la base de datos *)
P(Mutex);
Cont_Lec := Cont_Lec - 1;
SI Cont_lec = 0 ENTONCES V(esc);
V(Mutex);
___
___
FIN Proceso Lector_i;
Proceso Escritor_j;
___
___
P(Esc);
(* acceso a la base de datos *)
V(Esc);
___
___
FIN Proceso Escrito_j;
INICIALIZAClON:
Mutex := 1;
Ese := 1;
Cont_Lec := 0;
PARBEGIN
___
Digitalizacin con propsito academico. Sistemas operativos

6.9. SEMFOROS 85

Proceso Lector_i;
___
Proceso Escritor-j;
___
PAREND
FIN Programa Lectores_Prioridad;
PROGRAMA Escritores_Prioridad;
Constantes
Max_L = M;
Max_E = N;
Tipos
Lee = 0,1,2,..., Max_L;
Ese = 0,1,2,..., Max_E;
Variables
Mutexl : Semforo Binario;
Mutex2 : Semforo Binario;
Mutex3: Semforo Binario;
Lectores: Lec;
Escritores: Esc;
Sem_Lec : Semforo General;
Sem-Esc: Semforo General;
Proceso Lector_i;
___
P(Mutex3);
P(Sem_lec);
P(Mutexl);
Lectores: =Lectores+ 1;
SI Lectores = 1 ENTONCES P(Sem_Esc);
V(Mutexl);
V(Sem_Lec);
V(Mutex3);
(* Lectura *)
P(Mutexl);
Lectores : = Lectores - 1;
SI Lectores = 0 ENTONCES V(Sem_Esc);
V(Mutexl);
___
FIN Proceso Lector_i
Proceso Escritor_j;
___
P(Mutex2);
Escritores: =Escritores+l;
SI Escritores = 1 ENTONCES P(Sem_Lec);
Digitalizacin con propsito academico. Sistemas operativos

86 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

V(Mutex2);
P(Sem_Esc)
(* Escritura *)
V(Sem_Esc);
P(Mutexl);
Escritores:=Escritores-1;
SI Escritores = 0 ENTONCES V(Sem_Lec);
V(Mutex_2);
___
FIN Proceso Escritor_j;
INICIALIZACION:
Mutexl := 1;
Mutex2 := 1;
Mutex3 := 1;
Lectores := 0;
Escritores : = 0;
Sem_Lec := 1;
Sem_esc := 1;
PARBEGIN
Proceso Lector_i;
Proceso Escritor_j;
PAREND
FIN Programa Escritores_Prioridad;
Solucin general al problema de lectores y escritores
De las soluciones presentadas realmente ninguna es satisfactoria para todos los
casos, puesto que, o se le da la prioridad a los lectores, o se les da a los escritores, pero
no se realiza un BALANCE.
Podra llegar a ocurrir que los lectores estuvieran leyendo informacin muy vieja, o
podra ocurrir que la informacin estuviera al da(actualizada) pero nadie la pudiera
leer
Una mejor solucin sera aquella en la que se alternarn las prioridades y
proporcionar este balance del que hablamos.
Esto implica definir las reglas en base a las que se van a alternar las prioridades:
1. Un nuevo lector puede hacer su acceso concurrente mientras no est haciendo su
acceso un escritor Y no este esperando por accesar ningn escritor Esto implica que
mientras est libre la Base de Datos o estn accesando lectores, los nuevos lectores
podrn accesar siempre y cuando no est esperando por accesar un escritor
2. Al terminar su acceso el ltimo lector debe dar prioridad al siguiente escritor que
est esperando (Si existe).
3. Al terminar su acceso un escritor debe dar prioridad a los lectores que ya estn
esperando su acceso(Debe reiniciarse a todos los lectores esperando).
Programa Lectores_Escritores;

Digitalizacin con propsito academico. Sistemas operativos

6.9. SEMFOROS 87

Constantes
Max_L = Mximo_de_Lectores;
Max_E = Mximo_de_Escritores;
Tipos
L=0,1,..., Max_L;
E=0,1,..., Max_E;
Variables
Sem_Lec: Semforo General;
Sem_Esc: Semforo General;
Sem_Mutex: Semforo Binario;
Cont_Lec: L;
Cont_Esc: E;
Escribiendo: Booleano;
Lec_Acce: L;
Proceso Lector_i;
___
P(Sem_Mutex);
SI (Escribiendo) O (Cont_Es <>0)
ENTONCES
Cont_Lec:= Cont_Lec+1;
V(Sem_Mutex);
P(Sem_Lec)
Cont_Lec: = Cont_Lec-1;
FIN ENTONCES
Lec_Acce: = Lec_Acce+1;
SI (Con_Lec <> O) ENTONCES V(Sem_Lec)
SINO V(Sem_Mutex);
(* Lectura *)
P(Sem_Mutex);
Lec_Acce:=Lec_Acce-1;
SI (Lec_cce=O ) Y(Cont_Esc <> 0 )
ENTONCES V(Sem_Esc)
SINO V(Sem_Mutex)
___
FIN Proceso Lector_i;
Proceso Escritor_j;
___
P(Sem_Mutex);
SI (Lec_Acce <> 0) Y (Escribiendo)
ENTONCES
Cont_Esc: =Cont_Esc+1;
V(Sem_Mutex);
P(Sem_Esc);

Digitalizacin con propsito academico. Sistemas operativos

88

CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

Cont_Esc: = Con_Esc-1;
FIN ENTONCES;
Escribiendo := V;
V(Sem_Mutex);
(* Escritura *)
P(Sem_Mutex);
Escribiendo := F;
SI (Cont_Lec <> 0) ENTONCES V(Sem_Lec)
SINO
SI (Cont_Esc <> 0) ENTONCES V(Sem_Esc)
SINO V(Mutex);
FIN SINO
___
FIN Proceso Escritor_j;
INICIALIZAClON:
Sem_Lec := 0;
Sem_Esc := 0;
Cont_Lec := 0;
Cont_Esc : = 0;
Lec_Acce := 0;
Sem_Mutex := 1;
Escribiendo : =F;
PARBEGIN
Proceso Lector_i;
___
Proceso Escritor_j;
___
PAREND
FIN Programa Lectores_Escritores;
6.9.4 Problema de los filsofos
En un lejano lugar viven 5 filsofos que se pasan la vida filosofando y comiendo.
Comparten un comedor con una mesa circular que misteriosamente siempre est llena
de espagueti; cada filosofo tiene un lugar asignado en la mesa y a la izquierda y
derecha de su lugar est un tenedor.
Debido a que el espagueti est muy enredado es necesario contar con dos tenedores(el
de la izquierda y el de la derecha) para que un filosofo pueda comer.
El problema consiste en plantear un pseudocdigo que evite:
Deadlock._ Podra ocurrir que simultneamente los 5 filsofos desearn comer,
tomarn su tenedor derecho (o izquierdo) y nadie podra comer, debido a que se
requieren dos tenedores para comer
Inanicin. Si se estuvieran alternando en comer los filsofos a la derecha e
izquierda de un filosofo i, est podra morir de inanicin.

Digitalizacin con propsito academico. Sistemas operativos

6.9. SEMFOROS

Programa filsofos;
Constantes
MarFil = 5;
Tipos
Ten = 0,1,2;
Fil = 0,1,..., Max_Fil-1;
Variables
Sem_ux : Semforo General;
Num_ten : Arreglo [O..Max_fil-1] DE Ten;
Fil_Bloq : Arreglo [O..Max_fil-1] DE Booleano;
Sem_Mutex: Semforo Binario;
Sem_Fil : Arreglo [O..Max_fil-1] DE Semforo General;
I_Fil:Fil;
Procedimiento Filosofo_i;
___
Filosofar;
Toma Tenedor(i);
Comer;
Libera Tenedor(i);
___
FIN Procedimiento Filosofo_i;
Funcion Der(i: Fil):Fil;
SI i = Max_Fil -1
ENTONCES Der:= O
SINO Der: = i+ 1;
FIN Der;
Funcion Izq(i: Fil). Fil;
SI i = 0
ENTONCES Izq : = Max_Fil - 1
SINO Izq := i - 1; FIN Izq;
Procedimiento Tomar_Tenedor(i : Fil);
P(Sem_Mutex);
SI Num_Ten[i] <> 2
ENTONCES
Fil_Bloq[i] := V;
V(Mutex);
P(Sem_Fil[i]);
Fil_Bloq[i] : = F;
Num_Ten[Izq(i)] := Num_Ten[Izq(i)] - 1;
Num_Ten[Der(i)] : = Num_Ten[Der(i)] 1;
V(Sem_Aux);
FIN ENTONCES;

Digitalizacin con propsito academico. Sistemas operativos

89

90

CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

SINO
Num_Ten[Izq(i)] := Num_Ten[Izq(i)] - 1;
Num_Ten[Der(i)] := Num_Ten[Der(i)] - 1;
V(Sem_Mutex);
FIN SINO
FIN Procedimiento Libera_Tenedor;
Procedimiento Libera_Tenedor(i : Fil);
P(Sem_Mutex);
Num_Ten[Izq(i)]:= Num_Ten[Izq(i)] + 1;
Num_Ten[Der(i)] := Num_Ten[Der(i)] + 1;
SI (Num_Ten[Der(i)] = 2) Y (Fil_Bloq[Der(i)])
ENTONCES
V(Sem_Fil[Der(i)]);
P(Sem_Aux);
FIN ENTONCE;,
SI (Num_ten[Izq(i)] 2) Y (Fil_Bloq[Izq(i)]) ENTONCES
V(Sem_Fil[Izq(i)]);
P(Sem_ux);
FIN ENTONCES;
V(Sem_Mutex);
FIN Procedimiento Libera_Tenedor;
INICIALIZAClON:
PARA I_Fi1 := 0 HASTA Max_Fil - 1 HAZ
Num_Ten[I_FiI] := 2;
Fil_Bloq[i] : = F;
Sem_Fil[i] = 0;
FIN PARA
Sem_ux = O;
Sem_Mutex := 1;
PARBEGIN
___
Filosofo 1;
___
PAREND;
FIN Programa filsofos;
6.9.5 Problema de K-procesos en la seccin crtica
La siguiente solucin intenta resolver el problema de permitir que K de n procesos
puedan ejecutar concurrentemente su seccin crtica usando para esto slo semforos
binarios.
1. Muestre que es posible que retardo=2 siendo que es un semforo binario para k = 2
n = 3; k = 2 n 4. Y se podra concluir que no funciona para valores de n mayores.

Digitalizacin con propsito academico. Sistemas operativos

6.9. SEMFOROS

91

2. Plantee una solucin que resuelva correctamente dicho problema.


Programa KdeN;
Constantes
K=2;
N=3;
Variables
Contador: Entero;
Mutex: Semforo Binario;
Retardo : Semforo Binario;
Procedimiento Proceso_i;
Variables
m :Entero;
___
P(Mutex);
Contador : = Contador-1; Parte 1
m := Contador;
V(Mutex);
Si m <= -1 ENTONCES P(Retardo); Parte 2
(* Seccin Crtica *)
P(Mutex);
Contador := Contador+1;
Si Contador <= O Parte 3
ENTONCES V(Retardo);
V(Mutex);
___
FIN Procedimiento Proceso;
INICIALIZAClON
Contador :=K;
Mutex:=1;
Retardo: =0;
PARBEGIN
___
Proceso_i;
___
PAREND,
FIN Programa KdeN;
Solucin: considerando el cdigo de los procesos dividido en 3 partes, se puede
verificar que para K=2 y n=3 el semforo de retardo puede tomar el valor de 2 de
acuerdo a la secuencia ilustrada en la tabla 6.2 secuencia:
NOTAS:
1. X
Indica que no es importante.
2. Es fcil deducir que si se cumple para K = 2 y n = 3 tambin se cumplir para K = 2
y n =4, K = 2 y n = 5,. . .
Digitalizacin con propsito academico. Sistemas operativos

92 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS


CONTADOR
2
1
0
-1
-1
-1
0
1
0
-1
-1
0

M1
X
1
1
1
1
1
1
1
0
0
0
0

M2
X
X
0
0
0
0
0
1
1
-1
-1
-1

M3
X
X
X
-1
-1
-1
-1
-1
-1
-1
-1
-1

RETARDO
0
0
0
0
0
0
1
1
1
1
1
2

COMENTARIO
Estado inicial
Parte 1 proc 1
Parte 1 proc 2
Parte 1 proc 3
Parte 2 proc 1
Parte 2 proc 2
Parte 3 proc 1
Parte 3 proc 2
Parte 1 proc 1
Parte 1 proc 2
Parte 2 proc 1
Parte 2 proc 1

Tabla 6.2 Una secuencia de ejecucin de los procesos en el programa KdeN.

Ejercicio del Problema K de N


Si consideramos que los valores de inters son:
Contador =2,1,0, -1
M1, M2, M3 =1, 0, -l
retardo=-1,0, 1,2
Generar una grfica que incluya todos los posibles estados y transiciones.
Solucin propuesta al problema K de N
Programa k_de_n;
CONSTANTES
k=;
n=;
VARIABLES
Contador : Entero;
Mutex: Semforo Binario;
Retardo: Semforo Binario;
Procedimiento Proceso_i;
___
P(Mutex);
Contador := Contador 1;
SI contador <= l
ENTONCES
V(Mutex);
P(Retardo);
V(mutex);
FIN ENTONCES
SINO V(Mutex);
(* Seccin Crtica *)
Digitalizacin con propsito academico. Sistemas operativos

Mu

6.9. SEMFOROS

93

P(Mutex);
Contador := Contador+1;
SI Contador <= 0
ENTONCES V(Retardo)
SINO V(Mutex);
___
FIN Procedimiento Proceso_i;
INICIALIZAClON:
Contador:=k;
Mutex: = 1;
Retardo:=0;
PARBEGIN
Proceso_i;
___
PAREND
FIN Programa k_de_n;
6.9.6 Problema de los fumadores de cigarros
Existen 3 agentes que a travs de 3 ayudantes proporcionan a 3 fumadores 2 de 3
idnticos recursos.
Se dan las siguientes relaciones:
1. El agente 1 proporciona al fumador 1 a travs de los ayudantes 2 y 3 la pareja de
recursos necesarios.
2. El ayudante 2 proporciona al fumador 2 a travs de los ayudantes 1 y 3 la pareja de
recursos necesarios.
3. El ayudante 3 proporciona al fumador 3 a travs de los ayudantes 1 y 2 la pareja de
recursos necesarios.
El objetivo es plantear el pseudocdigo de estos 3 tipos de procesos (Agentes,
Ayudantes y Fumadores), de forma que los Agentes corran viajes veces C/U de ellos.
PARNAS, DL. on a solution to the cigarette smokers problem (without
conditional statements)
Comm. ACM, 18, 181-183 (1975).
Respecto a esta solucin que es dada a continuacin resuelva:
1.
2.
3.
4.

Cul es la funcin de los procesos ayudante.?


Cmo terminan los procesos.?
Cul es el objetivo de acum:=0 en fuerza_terminacin.?
El programa podra terminar, pero comente errores en la parte final de cada
proceso.
5. Cul es el problema de sem_fumador [i] para i:=1,2 y 4.?
6. Plantee una mejor solucin. Programa Cigarro;
Constantes
Viajes =20;

Digitalizacin con propsito academico. Sistemas operativos

94 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

Variables
Sem_Recurso : Arreglo [1..3] DE Semforo Binario;
Sem_Fumador: Arreglo [1..6] DE Semforo General;
Mutex: Semforo Binario;
Sem_gentes: Semforo Binario;
Acum: Entero;
Termina_gente: Arreglo [1..3] DE Booleano;
Procedimiento Forza_Terminacin;
Variables
i: Entero;
Acum:=0;
PARA i:=1 HASTA 3 HAZ
V(Sem_Recurso [i]);
FIN_PARA;
PARA i:=1 HASTA 6 HAZ
V(Sem_Fumador[i]);
FIN_PARA;
FIN Procedimiento Forza_Terminacin;
Procedimiento Agente (Acum, Rec1, Rec2 : Entero);
Variables
I: Entero;
PARA i:=1 HASTA Viajes HAZ
P(Sem_Agentes);
V(Sem_Recurso[Recl]);
V(Sem_Recurso[Rec2]);
FIN PARA;
Termina_Agente[num]: =V;
FIN Procedimiento Agente;
Procedimiento Ayudante (Num, Incremento: Entero);
REPITE
P(Sem_Recurso[Num]);
P(Mutex);
Acum: =Acum+Incremento;
V(Sem_Fumador[Acum]);
V(Mutex);
HASTA Termina_gente[1] Y
Termina_gente[2] Y
Termina_gente[3];
Forza_Terminacin;
FIN Procedimiento Ayudante;
Procedimiento Fumador(Num, Valor_Acum : Entero);
REPITE
P(Sem_fumador[Valor_Acum]);

Digitalizacin con propsito academico. Sistemas operativos

6.9. SEMFOROS

95

Acum:=0;
V(Sem_Agentes);
HASTA Termina_Agente[Num];
FIN Procedimiento Fumador;
Inicializacin:
PARA Acum:=1 HASTA 3 HAZ
Sem_Recurso[Acum]: =0;
Termina_gente[Acum]: =F;
FIN PARA;
PARA Acum:=1 HASTA 6 HAZ
Sem_Fumador[Acum]: =0;
FIN PARA;
Acum:=0;
Mutex:=1;
Sem_Agentes:=I;
PARBEGIN
Agente(1,2,3);
Agente(2, 1,3);
Agente(3, 1,2);
Ayudante(1, 1);
Ayudante(2,2);
Ayudante(3,4);
Fumador(I,6);
Fumador(2,5);
Fumador(3,3);
PAREND;
FIN Cigarro;
Solucin:
1 Los procesos ayudante proporcionan recursos a los fumadores, de acuerdo a la
siguiente grfica:
Concluimos que:
i) Independientemente del orden de ejecucin los ayudantes 1 y 2 logran hacer
V(sem_fumador[3]); lo cual activa al fumador3.
ii) Independientemente del orden de ejecucin los ayudantes 1 y 3 logran hacer
V(sem_fumador[5]); lo cual activa al fumador 2.
iii) Independientemente del orden de ejecucin los ayudantes 2 y 3 logran hacer
V(sem_fumador[6]); lo cual activa al fumador 1.
2 y 4 Los agentes terminan despus de viajes veces. Los ayudantes terminan hasta
que todos los agentes hayan modificado su variable termina _ agente[] hacindola
verdadera; si por lo menos un ayudante encuentra sta condicin, los ayudantes pueden
terminar, de otra forma no. Los fumadores terminan cuando el agente respectivo haya
modificado a verdadero la variable termina _ agente [], pero si el fumador checa dicha
variable antes de
Digitalizacin con propsito academico. Sistemas operativos

96

CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

que se modifique slo podr terminar si acaso termina por lo menos un ayudante, pero
de sta forma ejecutar su cdigo una vez ms que su agente respectivo.
3 De no hacerse esto posiblemente algn ayudante pudiera ejecutar
V(sem_fumador[i]) para i > 6
o sea para un semforo inexistente.
5 Que no tienen ninguna funcin y se van acumulando operaciones V sobre ellos, y
si el nmero de viajes fuera grande podra llegar el caso que se sobrepase la
representacin de un entero.
6
Programa Cigarro;
Constantes
Viajes20;
Variables
Sem_Recurso : Arreglo[1. .3] DE Semforo Binario;
Sem_Fumador Arreglo [1..3] DE Semforo Binario;
Mutex: Semforo Binario;
Sem_Agentes : Semforo Binario;
Acum : Entero;
Procedimiento Agente(Num, Red, Rec2: Entero);
Variables
Entero;
PARA i:=1 HASTA Viajes HAZ
P(Sem_Agentes);
V(Sem_Recurso[Recl]);
V(Sem_Recurso[Rec2]);
FIN PARA;
FIN Procedimiento Agente;
Procedimiento Ayudante(Num: Entero);
Variables
i: entero;
PARA i:=1 HASTA Viajes HAZ
P(Sem_Recurso[Num]);
P(Mutex);
pon_bit(Acum,Num);
CASO Acum
6: V(Sem_Fumador[1]);
5: V(Sem_Fumador[2]);
3: V(Sem_Fumador[3]);
SINO no_hagas_nada;
FIN CASO;
V(Mutex);
FIN PARA;
FIN Ayudante;

Digitalizacin con propsito academico. Sistemas operativos

6.10. PIPES 97

Procedimiento Fumador (Num:Entero);


Variables
i: Entero;
PARA i:=1 HASTA Viajes HAZ
P(Sem_Fumador[Num]);
Acum: =0;
V(Sem_gentes);
FIN PARA;
FIN Fumador;
Inicializacin:
PARA Acum:=1 HASTA 3 HAZ
Sem_Recnrso[Acum]:=0;
Sem_Fumador[Acum]: =0;
FIN PARA;
Acum:=0;
Mutex:=1;
Sem_Agentes: =1;
PARBEGIN
Agente(1,2,3);
Agente(2,1,3);
Agente(3, 1,2);
Ayudante(1);
Ayudante(2);
Ayudante(3);
Fumador(1);
Fumador(2);
Fumador(3);
PAREND;
FIN Cigarro;
6.10. Pipes
Unix proporciona un mecanismo de comunicacin interprocesos que permite que la
salida de un proceso sea la entrada de otro. A este mecanismo se le conoce como
pipe.
Un pipe se puede crear con: CREATEPIPE que regresa dos descriptores del
pipe, uno para lectura y otro para escritura.
El pipe puede ser implementado como un buffer donde se escribe por un extremo
y se lee del otro lado del extremo. Se puede dar el caso deque el buffer est lleno y se
bloqueara al proceso que escribe, y tambin si el pipe est vaco se bloqueara al
proceso que lee.
El concepto de pipe puede ser extendido con:

EL CONCEPTO DE DIFUSIN (BROADCAST) En este caso no se retira


informacin del pipe hasta que haya sido leda por todos los procesos lectores.

Digitalizacin con propsito academico. Sistemas operativos

98

CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

EL CONCEPTO DE DELIMITACIN. En este caso se puede especificar cuntos


bytes leer del pipe o leer el siguiente registro escrito en el pipe.
READBYTES (pipenumber,howmany);
lee los bytes especificados, si no hay, se espera a que haya.

READRECORD (pipenumber);
lee los bytes escritos en el registro siguiente a ser ledo.

6.11. Paso de Mensajes (Mailboxes,Puertos).


Es el enfoque natural para la comunicacin entre procesos.
Parmetros a considerar al disear este mecanismo:

Primitivas de bloqueo o no bloqueo.(Enva, Recibe, Reply).


Bloqueo
Bloqueo opcional.
Formato de mensajes (Recepcin por tamao o mensaje).
Longitud fija o variable.
Mensajes por copia o por referencia.
Mensajes de 1-1, l-N, N-1, N-M.
Hacer mensajes de difusin (Broadcast).

6.12. Regiones crticas


Es un mecanismo de sincronizacin que protege del acceso concurrente variables.
v.g.
Proceso_i
___
regin v do
v:=15;
end;
___
Fin proceso_i;

Proceso_j
___
regin v do
v:=15;
end;
___
Fin proceso_j;

Un problema de las regiones crticas es el DEADLOCK ya que las regiones pueden


estar anidadas, pero un compilador podra verificar sise cumple un ordenamiento
JERARQUICO.
6.13. Regiones crticas condicionales
Es similar al concepto de regin crtica, pero el acceso a las variables compartidas
es condicionado a una expresin booleana.
Iector_i;
escritor_j;
___
___
regin BD do await(escribiendo=F);

regin BD do await(Iectores=0) y (escribiendo=F);

Digitalizacin con propsito academico. Sistemas operativos

6.15. EXPRESIONES DE TRAYECTORIA

lectores:=lectores+1;
end;
(*lectura*)
regin BD do
lectores: = lectores-1;
end;
___

escribiendo:= V;
end;
(*escritura *)
regin BD do
escribiendo: =F;
end;
___

Fin lector_i.

Fin escritor_j.

99

Para la implementacin eficiente de este concepto, el proceso que no pueda entrar a


la regin crtica debe ser bloqueado y reiniciado cuando la condicin por la que espera
sea verdadera.
6.14. Interrupciones virtuales
Pueden servir para realizar sincronizacin / comunicacin entre procesos. El
formato puede ser: Interrupt(processnumber,interruptnumber); que manda la interrupcin indicada al proceso especificado.
Para evitar el uso de interrupciones irrestricto se podra definir su uso slo para:
1. Mandarse a los hijos o descendientes.
2. Mandarse entre procesos del mismo usuario.
3. Controlare] uso de interrupciones de forma que cada interrupcin tenga un
identificador, y el proceso que no tenga dicho identificador no puede hacer uso de
dicha interrupcin.
Para definir el que hacer cuando ocurra una interrupcin, los procesos podran
hacer un llamado como: Handle(interruptnumber,method) Donde method puede
especificar:
1.
2.
3.
4.

Ignorar la interrupcin.
Terminar si la interrupcin ocurre.
Esperar a que ocurra la interrupcin.
Si ocurre la interrupcin, activar a una rutina de Servicio de Interrupcin.

Algunos nmeros de interrupciones virtuales deberan ser reservados para el


sistema operativo v.gr.:
1. Para atender la tecla de ESCAPE.
2. En sistemas operativos con creacin jerrquica para sealizar la muerte de un
proceso hijo.
3. Divisin por cero.
4. Temporizadores usados por los procesos.
5. Exceder el nmero de archivos abiertos permisibles, cantidad mxima de memoria
permitida.
6. Un proceso se detiene esperando reinicio de su padre.
7. Datos disponibles de un dispositivo.
Digitalizacin con propsito academico. Sistemas operativos

100 CAR 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

6.15. Expresiones de Trayectoria


Consiste en la especificacin de qu rutinas deben ser llamadas y en qu orden,
aparte de la definicin de las rutinas.
1. path rutinax Especifica que slo un proceso puede llamar a la rutinax a la vez,
pero una vez que termine el llamado, otro proceso (o el mismo) puede llamar a
rutinax.|
2. path ruta; ruth; rutc Especifica que antes de ejecutar la rutina ruth debe
terminarse la rutina ruta, y antes de ejecutar la rutina rutc debe terminarse la
rutina ruth.
3. path {ruta} Indica que varios procesos pueden ejecutar ruta en forma concurrente.
4. path ruta | rutb Especifica que se puede estar ejecutando ruta o rutb pero no
ambos al mismo tiempo. Ejemplo: path {read} write Lo cual especifica que se
pueden tener varios procesos leyendo concurrentemente, pero la escritura es
exclusiva.
5. Para dar ms poder a las expresiones de trayectoria se extiende con la definicin de
procedimientos: let procedimiento = secuencia de procedimientos.
Ejemplo:
path TryRead| TtyWrite
path {StartRead|Read}| Write
let TryRead=StartRead
let TryWrite=Write
Iet DoRead= TryRead;Read
tet DoWrite= TryWrite
Dnde los lectores mandan llamar a DoRead y los escritores a DoWrite. La
implementacin de Expresiones de Trayectoria no es muy difcil, un compilador
o preprocesador podra convertir las expresiones de trayectoria en su equivalente en
semforos.
Tienen la ventaja de poder separar la parte procedural de un problema y la parte
del control concurrente (sincronizacin-comunicacin).
Un problema es que los procesos son reiniciados dentro del estatuto de OREXCLUSIVO en el orden especificado, lo cual no necesariamente es lo que se desea.
6.16. Expresiones Invariantes
En este enfoque se bloquean los procesos que tratan de entrar a algn
procedimiento. El bloqueo es sobre una cola que tiene asociada una expresin
invariante que especifica cundo debe permitirse la entrada a un proceso.
Si no existe expresin invariante los procesos pueden ejecutar un procedimiento
cuando lo deseen.
La sintxis es muy limitada y usa contadores INTERCONSTRUIDOS que registran
el nmero de eventos interesantes para cualquier procedimiento P.
Existen 5 contadores:
1. RequestCount(P) Cuenta el nmero de requerimientos acumulados sobre el procedimiento P.
Digitalizacin con propsito academico. Sistemas operativos

6.16. EXPRESIONES INVARIANTES

101

2. StartCount(P) Cuenta el nmero de veces que se ha iniciado el procedimiento P, en


forma acumulativa.
3. FinishCount(P) Cuenta el nmero de veces acumuladas que se ha terminado el
procedimiento P.
4. CurrentCount(P) = Start Count(P) - Finish Count(P)
5. WaitCount(P) = RequestCount(P) - StartCount(P)
Una expresin invariante tiene la forma:

Expresin Comparacin Constante


La expresin puede ser sumas y diferencias de contadores.
La comparacin puede ser <, >, , , =, , <>.
v.g.
WaitCount(P) - RequestCount(Q) > 4

6.16.1 Ejemplo de Productores Consumidores


PROGRAMA Productores_Consumidores;
EXPORTA GETBUFFER,PUTBUFFER;
CONSTANTES
Size= 10; (* tamao del buffer *)
TIPOS
Dato = ...; (* tipo de dato del buffer *)
VARIABLES
BUFFER : ARREGLO [O..Size-1] DE Dato;
NextIn,NextOut: 0..Size-1;
(* ndice para insertar o borrar siguiente dato *)
INVARIANT PUTBUFFER;
(STARTCOUNT(PUTBUFFER) FINISHCOUNT(GETBUFFER)) < Size;
(* No sobre produccin *)
CURRENTCOUNT(PUTBUFFER) =0;
(* Previene conflictos de productores *)
INVARIANT GETBUFFER,
(STARTCOUNT(GETBUFFER) FINISHCOUNT(PUTBUFFER)) <O;
(* No sobre consumo *)
CURRENTCOUNT(GETBUFFER) =0;
(* Previene conflictos de consumidores *)
PROCEDIMIENTO PUTBUFFER(QUE:Dato);
BUFFER[NextIn]: = QUE;
Nextln:=(Nextln+ 1) MOD Size;
FIN PUTBUFFER;
PROCEDIMIENTO GETBUFFER( VAR RESULTADO:Dato);
RESULTADO: =BUFFER[NextOut];
NextOut:=(NextOut+1) MOD Size;
FIN GETBUFFER;
FIN PROGRAMA Productores_Consumidores.

Digitalizacin con propsito academico. Sistemas operativos

102 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

Lo anterior demuestra lo sencillo del uso de las expresiones invariantes, ya que se


separa la parte procedural de un problema de la parte que controla la concurrencia y
sincronizacin de los procesos.
6.16.2 Ejemplo de Lectores y Escritores
Problema de Lectores_Escritores.
INVARIANT Lectura;
(WAITCOUNT(Escritura) + CURRENTCOUNT(Escritura)) =0;
(* si no hay alguien escribiendo o esperando escribir entonces se puede leer *).
INVARIANT Escritura;
(CURRENTCOUNT(Escritura) + CURRENTCOUNT(Lectura)) = 0;
(* Si no hay ningn escritor escribiendo y ningn lector leyendo entonces se puede
escribir *)
NOTA: Al terminar un proceso se asume que el reinicio es de acuerdo al orden de
llegada, pero se debe considerar adicionalmente que cuando termine un escritor deben
reiniciarse todos los lectores esperando.
6.17. Contadores de Eventos
Un contador de eventos es representado como una variable entera no decreciente
inicializada en cero. Lleva el conteo del nmero de eventos de inters de un programa.
Como un ADT (Abstract Data Ltpe) los contadores de eventos tienen 3 operaciones:
1. ADVANCE(E) Incrementa en forma atmica el contador de eventos E.
2. READ(E) Regresa el valor del contador de eventos E. Si regresa n al menos han
ocurrido n operaciones de ADVANCE(E).
3. AWAIT(E reaches v) Bloquea al proceso que llama hasta que se hayan ejecutado al
menos y operaciones de ADVANCE(E).
De la anterior definicin nos damos cuenta que es posible la ejecucin concurrente
de las 3 operaciones.
Daremos un ejemplo de los contadores de eventos usando el problema de
productor-consumidor considerando que se puede depositar y tomar una unidad de
informacin en diferentes celdas del buffer.
Programa Productor_Consumidor;
CONSTANTES
Size = 10; (* Nmero de elementos del buffer*)
TIPOS
Dato = ...; (* Tipo del dato en el buffer *)
VARIABLES
In,Out: EventCount;
Buffer: Arreglo [O..Size-1] De Dato;
Procedimiento Productor;

Digitalizacin con propsito academico. Sistemas operativos

6.17. CONTADORES DE EVENTOS 103

VARIABLES
SequenceNumber:ENTERO;
Valor:Dato;
PARA SequenceNumber:=1 HASTA Infinito
Produce_Valor;
AWAIT(Out reaches SequenceNumber-Size);
Buffer[SequenceNumber MOD Size]: = Valor;
ADVANCE(In);
FIN PARA;
FIN Productor;
Procedimiento Consumidor;
VARIABLES
SequenceNumber:ENTERO;
ValorDato;
PARA SequenceNumber: = 1 HASTA Infinito
AWAIT(In reaches SequenceNumber);
Valor:=Buffer[SequenceNumber MOD Size];
ADVANCE(Out);
Consume_Valor;
FIN PARA;
FIN Consumidor;
INICIALIZAClON:
(* Se inicializan los contadores de eventos *)
PARBEGIN
Productor;
Consumidor;
PAREND:
FIN Productor_Consumidor;
6.17.1 Secuenciadores
Permite asignar un orden arbitrario a eventos desordenados, este orden puede ser
usado para determinar qu proceso obtendr primeramente un recurso.
Un secuenciador es un ADT implementado con un entero no decreciente
inicializado en cero, su nica funcin de acceso es:
TICKET(S) Regresa el valor actual del secuenciador 5 y despus incrementa 5.
Inicialmente 5 es cero. Es una operacin atmica y debe garantizarse que no haya dos
llamados a TICKET que regresen el mismo valor.
v.g
Resolvemos el problema anterior de Productor-Consumidor, pero ahora con
mltiples productores y un slo consumidor:
Programa Productor_Consumidor;
___

Digitalizacin con propsito academico. Sistemas operativos

104 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS VARIABLES

VARIABLES
___
Turn: Sequencer;
Procedimiento Productor_i;
VARIABLES
SequenceNumber:ENTERO;
Valor:Dato;
LAZO
Produce_Valor;
SequenceNumber: = TICKET(Turn);
AWAIT(In reaches SequenceNumber);
AWAIT(Out reaches SequenceNumber-Size+ 1);
Buffer[SequenceNumber MOD Size]: = Valor;
ADVANCE(In);
FIN LAZO;
FIN Productor_i;
6.18. Monitores
Un monitor es una seccin crtica de cdigo generalizada en la cul un recurso
compartido es manipulado para diferentes procesos de acuerdo a ciertas reglas de
asignacin. Este cdigo puede ser pensado como compuesto de dos partes lgicas:
1. El algoritmo de manipulacin del recurso. El cul es un cdigo secuencial y solo
refleja las reglas bajo las cules se hace la manipulacin del recurso.
2. El algoritmo para determinar el orden en el cul se asigna el recurso a los procesos.
Esta parte es la que se encarga del control de la concurrencia.
Poniendo como ejemplo el manejo de exclusin mutua usando semforos, si
separamos del cdigo de los procesos las panes relativas al manejo de los semforos y
las englobamos en un solo mdulo, el mdulo resultante es un monitor Dentro de las
ventajas que tiene este enfoque estn las siguientes:
1. El cdigo de los procesos se ve y se maneja como si fuera secuencial, pues los
detalles relativos al control concurrente estn en el monitor, y los procesos solo
mandan llamar a rutinas del monitor.
2. Al estar englobados en el monitor los detalles de la concurrencia es ms fcil
mantener y depurar las aplicaciones. No es necesario depurar dentro de cada
proceso el manejo concurrente, solo se depura en el monitor
El cdigo para el manejo de exclusin mutua usando semforos se ve as:
Programa Exc_Semaforo;
VAR
Sem_mutex: Semforo Binario;
Proceso 1;
Digitalizacin con propsito academico. Sistemas operativos

6.18. MONITORES

P(sem_mutex);
(* seccin crtica *)
V(sem_mutex);

Fin Proceso1;
Proceso2;

P(sem_mutex);
(* seccin crtica *)
V(sem_mutex);

Fin Proceso2;
Inicializacin;
Sem_mutex:=1;
Parbegin
Proceso1;
Proceso2;
Parend;
Fin Programa Exc_Semforo;
Usando el concepto de MONITOR el cdigo de los procesos se vera as:
Programa Exc_Semaforo;
Proceso1;

Enter;
(* seccin crtica *)
Exit;

Fin Proceso1;
Proceso2;

Enter;
(* seccin crtica *)
Exit;

Fin Proceso2;
Inicializacin;
Parbegin
Digitalizacin con propsito academico. Sistemas operativos

105

106 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

Proceso1;
Proceso2;
Parend;
Fin Programa Exc_Semaforo.
Mientras el cdigo del MONITOR se vera as:
MONITOR Exclusin;
VAR
Sem_mutex: Semforo Binario;
Procedimiento Enter;
P(sem_mutex);
Fin Enter;
Procedimiento Exit;
V(sem_mutex);
Fin Exit;
Inicializacin:
Sem_mutex:=1;
Fin Monitor Exclusin.
Algo fundamental de un monitor es que es una parte de cdigo es PASIVA, que
solo se ejecuta cuando se manda llamar, y que su parte de inicializacin es ejecutada
automticamente antes de que se mande llamar alguno de sus procedimientos.
Existen cuatro tipos de monitores reportados en la literatura: Monitor Tipo Monitor,
Monitor Tipo Manager, Monitor Tipo Mediador y Monitor Tipo Gladiador
6.18.1. Monitor tipo monitor
Este monitor fue implementado en Pascal Concurrente, lenguaje desarrollado por
Per Brinch Hansen. Es el monitor ms simple de todos pues solo tiene tres estados y las
funciones internas son muy sencillas. Una caracterstica distintiva de este monitor es
que el proceso que reinicia a otros debe salir del monitor, es decir abandona el estado
activo. El diagrama de estados de este monitor esta dado en la figura 6.2.
6.18.2. Monitor tipo manager
Este monitor es muy similar al monitor tipo monitor, la diferencia esencial es que
un proceso que es reiniciado debe abandonar el monitor, es decir no se le permite que
entre al estado activo. El diagrama de estados de este monitor se presenta en la figura
6.3.
6.18.3. Monitor tipo mediador
Este monitor fue propuesto por C.A.R. Hoare, tiene la caracterstica de compensar
las desventajas de los monitores tipo monitor y tipo manager. Un proceso que reinicia a
otros puede permanecer dentro del monitor y un proceso reiniciado tambin puede
permanecer dentro del monitor, El diagrama de estados de este monitor se da en la
figura 6.4.
Digitalizacin con propsito academico. Sistemas operativos

6.19. REFERENCIAS

107

Figura 6.2. Diagrama de Estados del Monitor Tipo Monitor

Figura 6.3. Diagrama de estados del monitor tipo manager

6.18.4 Monitor tipo gladiador


Este monitor propuesto por Cavers y Brown tiene la caracterstica fundamental de
solo tener un punto de consistencia interno (un punto de consistencia interno ocurre
cuando el proceso que est activo abandona este estado y sigue dentro del monitor). El
diagrama de estados de este monitor se da en la figura 6.5.
6.19.Referencias
Se pueden encontrar en mayor detalle los diversos mecanismos de control de
concurrencias presentados en este captulo en:
[25], [45], [46], [47], [48], [49], [50], [34], [35], [36], [5l], [52], [18], [15], [39],
[14], [53], [54], [55], [56].

Digitalizacin con propsito academico. Sistemas operativos

108 CAP 6. SINCRONIZACIN Y COMUNICACIN DE PROCESOS

Figura 6.4. Diagrama de estados del monitor tipo mediador.

Figura 6.5. Diagrama de estados del monitor tipo gladiador

Digitalizacin con propsito academico. Sistemas operativos

Captulo 7
Manejo de Interbloqueo
(Deadlock)
En este captulo se revisarn en detalle diversos algoritmos para el manejo de Deadlock.

7.1. Introduccin
El problema del DEADLOCK es la situacin en la que dos o ms procesos estn
bloqueados esperando la asignacin de recursos que no ocurrir a menos que se tome una
accin drstica.
Bsicamente existen tres enfoques para Atacar el Problema del Deadlock:
1._ Prevencin.
En este caso se requiere que cada proceso especifique de antemano la cantidad de
recursos que requerir, y cuando se desea un recurso se analiza si el nuevo estado es un estado
seguro, de ser as se otorga el recurso, de otro modo NO. De este modo controlando la
asignacin de recursos se EVITA EL DEADLOCK.
2._ Deteccin/recuperacin.
En este caso basta que un recurso est libre para que sea otorgado al momento de
realizar una peticin. De este modo es posible que se d el Deadlock y en forma peridica se
corre un algoritmo que lo detecta. En caso de haber DEADLOCK se corre un algoritmo que
recupera del deadlock a travs del reinicio/desasignacin de recursos.
3._ Nulo.
Si el deadlock es poco frecuente y adems la aplicacin no es crtica un enfoque es NO
HACER NADA, en estos casos si ocurre el deadlock y el sistema se para se reinicia el
sistema.
109
Digitalizacin con propsito academico. Sistemas operativos

110

CAP.7. MANEJO DE INTERBLOQUEO (DEADLOCK)

7.2. Algoritmos de prevencin de deadlock


En estos algoritmos, antes de realizar la asignacin de recursos se analiza si el nuevo
estado est libre de deadlock. Si el nuevo estado est libre de Deadlock se realiza la asignacin
de otro modo el proceso es bloqueado esperando la asignacin de los recursos. Adems se
requiere que cada proceso especifique de antemano la cantidad de recursos que requerir en el
peor de los casos, esta es una consideracin irreal, puesto que en algunas aplicaciones no se
cuenta con esta informacin.
Es importante considerar que se permite que se realicen peticiones de un tipo de
recurso a la vez.
7.2.1. Definicin de un sistema de asignacin de recursos
Un sistema de asignacin de recursos esta compuesto por:
Un conjunto de procesos. P1P2,..,Pn(n >= 1)
Un conjunto de diferentes tipos de recursos: R1R2,..,Rm(m>= 1) Donde para
cada recurso puede haber una o ms unidades.
3.
Un asignador de recursos.
1.
2.

7.2.2. Representacin del estado del sistema


El estado del sistema es definido a travs de las estructuras de datos (W, A, f) donde:
MATRIZ W = (w1, w2,.., Wn)
Wi especifica los recursos adicionales que pedir el proceso i.
W(i, j) especifica el nmero de unidades del recurso j que pedir el proceso i.
MATRIZ A = (a1, a2,.., an)
ai especifica los recursos que tiene asignados el proceso i.
A(I,j) especifica el nmero de unidades del recurso J que tiene asignadas el proceso i
VECTOR f === (f 1, f 2,.., f n)
f i especifica el nmero de unidades del recurso j que estn libres.
7.2.3. Consideraciones bsicas
1.
2.
3.
4.
5.

Un proceso antes de entrar al sistema de asignacin de recursos especifica el


nmero de unidades de cada tipo de recurso que va a necesitar.
La liberacin de recursos es voluntaria (NO-PREEMPTIVE).
Si un proceso tiene asignados todos los recursos que especific (w<= 0) los
liberar antes de terminar.
En el estado inicial el vector de demanda de cada proceso debe ser menor que el
vector de capacidad del sistema (w <= f) i.
Los procesos solicitan al asignador de recursos solo unidades de un tipo de
recurso, de este modo un proceso solo puede estar esperando por un tipo de
recurso.

Digitalizacin con propsito academico. Sistemas operativos

7.2. ALGORITMOS DE PREVENCIN DE DEADLOCK

111

7.2.4. Definicin de estado seguro


x Una secuencia de procesos Pe(l)Pe(2)Pe(3)....Pe(k), donde e(x) es el nmero de
proceso que termina en el xsimo lugar, es llamada una secuencia de terminacin para
el estado (W,A, f) si:
- we(l) > f
i-1
- We(i) < = f + 6 ae(j)Jj1=1<I < k
La secuencia es una secuencia de terminacin completa si k =- n, es decir, estn
contenidos todos los procesos, por lo tanto terminan todos los procesos.
x Un estado del sistema es llamado un ESTADO SEGURO si existe una secuencia de
terminacin completa para dicho estado.
7.2.5. Algoritmo de Habermann
El algoritmo de Haberman basa su operacin en lo siguiente:
x

Si se cumplen las consideraciones expuestas( w < f i), el estado inicial es


seguro y existen para este estado n! secuencias diferentes de terminacin.

x

Al atender una peticin de asignacin de recursos se analiza si el estado que se


dara es seguro, de ser as se realiza la asignacin de recursos, sino el proceso es
bloqueado esperando la asignacin.
x
Al momento de que se liberen unidades de algn recurso se deben desbloquear
los procesos para los que se satisfaga su peticin de recursos.
7.2.6. Algoritmo de Fontao.

Este algoritmo es similar al de Habermann pero tiene la ventaja que puede correr
en forma concurrente con los procesos que relizan las peticiones de recursos.
El algoritmo de Habermann es un algoritmo secuencial para la prevencin de deadlock,
es decir, que no se puede correr concurrentemente el proceso con el asignador de recursos,
esto se puede ilustrar en la figura 7.1.
Para resolver el anterior problema bsicamente hay dos alternativas:
a.

Concurrencia despus de requerimiento avanzado. Lo cual requiere un llamado


extra antes del requerimiento. Esto se ilustra en la figura 7.2
b.
Concurrencia sin requerimiento avanzado. Esto se ilustra en la figura 7.3.
De lo anterior podemos concluir que el mejor enfoque es el que no necesita ningn
requerimiento extra. A partir de aqu se hablar del algoritmo de FONTAO que es un
algoritmo de este tipo.

Digitalizacin con propsito academico. Sistemas operativos

112

CAP.7. MANEJO DE INTERBLOQUEO (DEADLOCK)

3URFHVRFRQWLQXD

3URFHVR
(VSHUD

3URFHVR(VSHUD

'HFLGLHQGR

2FLRVR

DVLJQDGRU

Figura 7.1 Ejecucin secuencial de proceso

5HTXHULPLHQWR
DYDQ]DGR

5HTXHULPLHQWR
3URFHVRFRQWLQXD

3URFHVR

(VSHUD
3URFHVR(VSHUD

DVLJQDGRU
'HFLGLHQGR

2FLRVR

Figura 7.2 Concurrencia de proceso y asignador, requiere un requerimiento avanzado.

5HTXHULPLHQWR

Proceso continua

3URFHVR

(VSHUD
3URFHVR(VSHUD

DVLJQDGRU
$FWXDOL]D

2FLRVR

Figura 7.3. Concurrencia de proceso y asignador, sin requerimiento avanzado.


Digitalizacin con propsito academico. Sistemas operativos

7.2. ALGORITMOS DE PREVENCIN DE DEADLOCK

113

El algoritmo concurrente propuesto por FONTAO basa su operacin en el clculo de


una matriz de requerimientos mximos permisibles R.
R=(r1,r2,..,rn)
Donde: ri : Indica el nmero de unidades de cada recurso que pueden ser asignadas al
proceso i sin llegar a un estado probable de deadlock.
R(i, j) = Especifica el nmero mximo de unidades del recurso j que se pueden asignar
al proceso i sin llegar a un estado probable de deadlock.
El objetivo central del algoritmo es el clculo de la matriz R. Para esto adems de las
estructuras ya definidas (R, W, A, f), se usan dos conjuntos de procesos:
x HJq El conjunto de procesos que pueden terminar AUN despus de quitar q unidades
del recurso j del vector de recursos libres.
j
J
J
j
6j ak
x T q El conjunto de procesos tales que: PiH q wi<= f + h q dnde: h q =
PkHH q

Calculo del conjunto cabeza y conjunto cola:


f=0;
p = Conjunto de todos los procesos;
aux =f ;
aux[j] = aux[j] - q ;
procesos faltantes = n;
fallas = 0;
MIENTRAS (fallas < > procesos_faltantes)
candidato = miembro DEP ();
SI W[ candidato] <= aux ENTONCES
H = H U candidato
P = P candidato
aux = aux + A[candidato]
procesos_faltantes = procesos_faltantes 1
fallas = O
FIN ENTONCES
SINO
fallas = fallas + 1
FIN MIENTRAS
T=0;
Aux[J] = aux[j] + q
MIENTRAS (p<>0)
candidato = miembro de P
SI W[candidato] <= aux
ENTONCES
T = T U candidato
P = P candidato
FIN ENTONCES
FIN MIENTRAS

Digitalizacin con propsito academico. Sistemas operativos

114

CAP.7. MANEJO DE INTERBLOQUEO (DEADLOCK)

Teorema de Fontao
Para un estado del sistema representado por {W, A, f) y considerando que dicho estado es
seguro, si un proceso Pi requiere q unidades del recurso j el recurso puede ser otorgado en
forma segura si: Pi Hjq U Tjq
El calculo de la matriz R como se deduce de lo anterior esta basado en el calculo de los
conjuntos H y T, como podr suponerse en la matriz R slo se pondr el mximo de unidades
que pueden ser otorgadas a cada proceso.
Adicionalmente se puede comentar que:
1. La complejidad del algoritmo es n2
2. Para la construccin de R se usa una matriz S para indicar si se ha calculado ya una
entrada particular dentro de la la matriz R.
3. Adems se utiliza un vector surplus que nos indica el nmero de unidades que pueden
ser quitadas del vector de recursos libres f para cada recurso de forma tal que no
convirtamos el estado actual del sistema en un estado de deadlock.
Comentarios finales del algoritmo
Este algoritmo representa una buena alternativa para la prevencin del deadlock en
sistemas multiprocesadores con ciclos de CPU ociosos.
El clculo de la matriz R puede ser hecho concurrentemente para cada recurso.
El vector surplus es muy til para poder tomar medidas estadsticas del uso de los
recursos.
PROGRAMA FONTAO;

CONSTANTES
n = max de procesos;
m = max de recursos;
todos = 0,1,2,...,n;
vacio = 0;
max = mximo de unidades de cualquier recurso;
TIPOS
recurso = 0,1,..,max;
vector_recurso = ARREGLO[1..m] de recurso;
conj-proceso = CONJUNTO DE [0,l,..,n]
proceso = 1,2,...,n;
proceso_mas_cero = 0,1,2,. ..,n;
VARIABLES
A : ARREGLO [1..n] DE vector_recurso;
W : ARREGLO [1..n] DE vector_recurso;
F: vector-recurso;
R: ARREGLO [1..n] DE vector_recurso;
H: conj-proceso;
T: conj-proceso;
P : conj-proceso;
Digitalizacin con propsito academico. Sistemas operativos

7.2. ALGORITMOS DE PREVENCIN DE DEADLOCK

S : ARREGLO [1..n, 1..m] DE BOOLEANO;


surplus : vector_recurso;
q : recurso;
aux: vector_recurso;
candidato : proceso;
procesos_faltantes : proceso_mas_cero;
fallas : proceso_mas_cero;
PRINCIPAL
PARA j:=1 HASTA m HACER;
PARA i:=1 HASTA n HACER;
S[i, j]:=FALSO;
R[i, j]:= FALSO;
FIN PARA;
surplus [j] := 0;
Q:= f[J]
aux:=f:
T:= vacio;
H:= vacio;
Procesos_faltantes := n;
MIENTRAS (q > = 0) Y(H < > todos);
aux[j] := aux[j] - q;
P := todos -H;
fallas := 0;
MIENTRAS (fallas < > procesos_faltantes);
candidato := selecciona_candidato_de_P;
SI (W[ candidato] <= aux) ENTONCES
H := H U candidato;
P := P - candidato;
aux := aux + A[candidato];
procesos_faltantes := procesos_faltantes - 1;
fallas := 0;
SI S[candidato,]:= FALSO
ENTONCES
R[candidato, j] := q;
S[candidato, j] := VERDADERO;
FIN ENTONCES
FIN ENTONCES
SINO fallas := fallas + 1;
FIN MIENTRAS;
P := P - T;
aux[j] := aux[j] + q;
MIENTRAS (P<> vacio)
candidato := selecciona_candidato_de_P;
Digitalizacin con propsito academico. Sistemas operativos

115

116

CAP.7. MANEJO DE INTERBLOQUEO (DEADLOCK)

SI W[candidato] <= aux ENTONCES


T := T U candidato;
R[candidato,j] := q;
S[candidato,j] ;= VERDADERO;
FIN ENTONCES
P := P - candidato;
FIN MIENTRAS;
q := q - 1;
FIN MIENTRAS
SI (H = todos) ENTONCES
surplus[j] := q + 1;
SINO estado_actual_inseguro ??????
FIN PARA
FIN FONTAO
7.3. Algoritmos de deteccin / correccin de deadlock
Los algoritmos de deteccin de deadlock representan una gran ventaja sobre los
algoritmos de prevencin al no requerir que se especifique previamente el nmero y tipo de
recursos que requerir cada proceso.
En aplicaciones como las de acceso a una base de datos en las que no se sabe
previamente que archivos ni que registros se van a utilizar, no es posible aplicar algoritmos de
prevencin de deadlock, por lo que se aplican algoritmos como los de deteccin de deadlock y
tcnicas de estampillas de tiempo (timestamp).
Los algoritmos de deteccin tienen que ser diseados considerando las siguientes
alternativas:
x Cundo correr.
x Cmo detectar el deadlock.
x Cmo recuperarse del deadlock.
7.3.1. Cundo correr?
No es enciente que en cada peticin al asignador de recursos se corra el algoritmo de
deteccin, algunas alternativas son:
x Correr el algoritmo cada x peticiones de asignacin o liberacin de recursos.
x Se puede correr el algoritmo cada y unidades de tiempo.
x Cada x peticiones o cada y unidades de tiempo, segn lo que ocurra primero.
Cul opcin es mejor depender de:
x
x
x
x

Tipo de sistema.
Utilizacin de recursos.
Nmero de recursos que hay en el sistema.
Nmero de Procesos.

Digitalizacin con propsito academico. Sistemas operativos

7.2. ALGORITMOS DE DETECCIN / CORRECIN DE DEADLOCK

117

7.3.2. Cmo detectar el deadlock?


Partiendo de la consideracin que tenemos n procesos y m tipos de recursos y que para
cada uno de los m tipos de recursos solo existe una unidad, tenemos en cualquier momento
alguno de los siguientes estados:
1. Estado de NO-DEADLOCK. En este caso quedan comprendidos los estados del
sistema en los cuales no existe una cadena circular.

2. Estado de DEADLOCK-PARCIAL. En este caso quedan comprendidos los


estados en los cuales se dan una o ms cadenas circulares de espera pero existen
algunos procesos que no participan en ninguna cadena circular.
3. Estado de DEADLOCK-TOTAL. En este caso quedan comprendidos los estados en los
que todos los procesos participan ya sea en una o en ms cadenas circulares de espera.
Es importante considerar que el concepto de cadena circular de espera solo tiene
sentido cuando el nmero de unidades para cada tipo de recurso es UNO, de est forma es
sinnimo decir que se espera por un recurso o se espera por el proceso que tiene asignado
dicho recurso.
Algoritmo de deteccin para una sola unidad de cada recurso
Considerando este caso simple, un algoritmo de deteccin / correccin de deadlock
sera simplemente:
1. Marcar todos los procesos como no visitados.
2. Hacer el proceso actual un proceso no visitado y que est bloqueado, es decir,
esperando por un recurso / proceso. Si ya no hay procesos bloqueados no-visitados NO
EXISTEN MAS DEADLOCKS.
3. Si el proceso actual no est marcado como visitado, marcarlo y hacer el proceso actual
el proceso por el cul est esperando, si el nuevo proceso actual no est bloqueado, ir
al punto 2; en caso de que si est bloqueado repetir el punto 3.
Si el proceso actual ya est marcado como visitado se acaba de encontrar un deadlock,
a partir de ah se recorre la cadena circular marcando los proceso como EN-DEADLOCK, en
este momento se debe corregir el deadlock detectado e ir al punto 1 para detectar cadenas
circulares adicionales que pudiera haber.
Algoritmo de deteccin para mltiples unidades de cada recurso
El anterior algoritmo es fcil de implementar pero limitado en su aplicacin por que en
general se tienen mltiples unidades para cada tipo de recurso, un algoritmo general sera el
siguiente;
Considerando que existen dos tipos de procesos:
x Procesos No-Bloqueados.
x Procesos Bloqueados.
Considerar que los procesos No-Bloqueados Terminan, de forma tal que al liberar los
recursos que tenan asignados algunos de los procesos Bloqueados podran obtener los
recursos solicitados de forma tal que se convertiran en No-Bloqueados.
Digitalizacin con propsito academico. Sistemas operativos

118

CAP.7. MANEJO DE INTERBLOQUEO (DEADLOCK)

Considerar en forma recurrente el punto anterior, es decir, al terminar los


procesos Bloqueados que terminan al terminar los procesos No-Bloqueados, pueden
terminar algunos procesos No-Bloqueados, que al terminar...
Si al final de esta recurrencia el nmero de procesos bloqueados es cero No Existe
Deadlock, de Otra forma S.
En caso de existir Deadlock se debe corregir el mismo(los procesos Bloqueados al final
de la recurrencia son los que estn en Deadlock), aunque el proceso de correccin podra
involucrar correr nuevamente el algoritmo de deteccin.
73.3 Cmo corregir el deadlock?
Esta es una de las partes ms difciles de resolver, puesto que el corregir el deadlock
involucra en general que parte o el total del trabajo realizado por un proceso queda invalidado,
prcticamente el proceso tiene que ser reiniciado o por lo menos regresado a un punto
ESTABLE (CONCEPTO DE TRANSACCIN).
Para corregir el deadlock bsicamente se deben desasignar unidades de recursos a uno o a
varios procesos, puesto que no siempre ocurre que al desasignar unidades a un proceso quede
corregido el deadlock.
Seleccionar al proceso al que se le desasignarn unidades de algn recurso no es fcil
puesto que debera considerarse:
1.
2.
3.
4.

La prioridad del proceso.


El tiempo de ejecucin acumulada del proceso.
El nmero y tipo de recursos que posee un proceso.
Cul fue el ltimo proceso en bloquearse, lo cul dira(pero no siempre) que fue el que
caus el deadlock.

7.4. Referencia.
Para ampliar los conocimientos sobre el problema de interbloqueo se recomienda consultas las
siguientes referencias:
[57], [58], [59], [60], [61], [62], [63], [64], [65], [66], [14], [3], [16], [30], [18], [53].

Digitalizacin con propsito academico. Sistemas operativos

Captulo 8
Manejo de archivos y discos
8.1. Introduccin
En este captulo presentaremos detalles de manejo de archivos y de la optimizacin que se
realiza en el manejo de los discos de un sistema computacional.
8.2. Sistema de archivos
Un sistema de archivos debe ser capaz de proporcionar diversas funciones accesibles por el
usuario:
1.
Creacin, modificacin y borrado de archivos. Comparticin de archivos entre
diferentes usuarios, controlando los permisos de lectura, escritura y ejecucin.
2.
Estructuracin de los archivos en forma de rbol (estructura de directorios y
subdirectorios).
3.
Manejo de archivos por nombres simblicos y no por caractersticas fsicas
(localizacin de almacenamiento, tamao, dispositivo fsico de almacenamiento, etc.).
4.
Mecanismos de encriptado y decriptado de datos.
8.3. Organizacin de archivos
Por ejemplo para llevar el control de los telfonos de personas podra ser til un archivo de
datos que constar de los datos de la tabla 8.1.
1RPEUH

7HOIRQR

9DUJDV5XEQ 
'D]5DO



5XL]3HGUR



0DUWQH]5DO



Tabla 8.1. Tabla para llevar una agenda telefnica.


119
Digitalizacin con propsito academico. Sistemas operativos

120

CAP.8. MANEJO DE ARCHIVOS Y DISCOS

8.3.1. Archivo secuencial


El problema de la tabla 9.1 es que, dado que los datos no estn ordenados, buscar un telfono en
particular puede ser lento. Asumiendo que tenemos N renglones en la tabla, localizar un elemento en
particular tendra los siguientes casos:
x Mejor Caso: Slo se busca en 1 rengln.
x Peor Caso: Se busca en los N renglones.
x Caso Promedio: Se busca en N+1
renglones.
2
Los casos Mejor y Peor son fciles de derivar para calcular el caso promedio se ha hecho uso de
N
la frmula: CasoPromedio = TodosCasos Y tenemos que: TodosCasos= i .Para obtener
i=1

Num Casos

simblicamente el valor de esta sumatoria sumemos dos veces de la siguiente manera:


1
N
________
(N + 1)

2
N -1
________
(N + 1)

...
3
N-2
...
________
(N + 1) ...

N1
2
________
(N + 1)

N
1
________
(N + 1)
N (N + 1)
__2___
= N

(N + 1)

de donde N (N + 1) = 2 i concluyendo entonces que: casoPromedio


= 2 . Este tipo de
i=1
bsqueda de la conoce como bsqueda secuencial y es a nica alternativa de bsqueda cuando los datos
no estn ordenados y se cuenta con estructuras auxiliares.
8.3.2. Archivo ordenado usando bsqueda binara
Si los datos anteriores son ordenados (lo cul podra hacerse con un algoritmo similar al
QuickSort que tiene un orden de N log N) esto se ilustra en la tabla 8.2. Podemos utilizar una bsqueda
binaria. La ventaja de la bsqueda binaria es que en cada operacin el tamao del problema se reduce a
la mitad.
1RPEUH
'D]5DO

7HOIRQR


0DUWQH]5DO 
5XL]3HGUR



9DUJDV5XEQ



Tabla 8.2. Tabla para llevar una agenda telefnica.

Originalmente el tamao del problema de bsqueda de un elemento en particular es N, con el


N

primer intento el tamao del problema se reduce a: 2 con el segundo intento se reduce a:2 =
isimo intento se reduce a:

N
2i

N
22 y

con el

de esta manera en el peor de los casos se tendran que realizar tantos

intentos como el valor de i en la expresinN2i , despejando de esta frmula tenemos que: i = [log2(N)].
Como conclusin tenemos entonces:
Digitalizacin con propsito academico. Sistemas operativos

8.4. ESTRUCUTURA DE UN DISCO

121

x Mejor Caso = 1
x Peor Caso = [logm(N)].
x Caso promedio = 1+[logm(N)]
2

8.3.3. Archivo secuencial indizado


El inconveniente de utilizar una bsqueda binaria es que al hacer altas, bajas y cambios sobre
una tabla ordenada, tenemos que organizar los datos para que se mantengan ordenados, y esto podra
tomar mucho tiempo. Ante este problema una alternativa es la utilizacin de un ndice (similar al de la
parte final de un libro) que contendra el nombre de la persona y un apuntador a dnde esta el elemento
dentro de la tabla. Como puede notarse, los datos en la tabla podrn estar fsicamente desordenados,
pero a travs del ndice se ven lgicamente ordenados. El ndice (normalmente) es un archivo aparte
del archivo que contiene los datos, la manera ms popular de construir y mantener un ndice es a travs
del algoritmo de arboles balanceados B-Tree. Los casos para este tipo de bsqueda son:
x Mejor Caso = 1
x Peor Caso = [logm(N)].
x Caso promedio = 1+[log2m(N)]
Dnde m indica el nmero de vas que tiene el rbol. La gran ventaja de un ndice es que el
algoritmo de mantenimiento es mucho ms eficiente que el algoritmo para mantener un archivo
ordenado, y por otro lado es mucho ms rpido dado que m es mayor que 2.
8.4. Estructura de un disco duro
Un disco duro consta de:
x Mltiples superficies de lectura y escritura soportados por un eje que gira a una velocidad angular
constante.

x Mltiples cabezas de lectura y escritura soportadas por un brazo que se desplaza


transversalmente.
De esta manera la combinacin del movimiento angular de las superficies de lectura/ escritura y el
movimiento transversal de las cabezas de lectura / escritura permite que las cabezas cubran toda la
superficie de lectura / escritura.
Un disco duro contiene uno o ms platos (superficies de lectura / escritura). Los platos estn
formados de dos materiales, un material duro para darle rigidez (de ah el nombre de disco duro) y un
medio magntico, donde se guardan los datos. El tamao del plato define el tamao fsico del disco
duro. La pregunta obligada es: Por qu no agregar ms platos a los discos para tener ms capacidad?.
La respuesta es que el tamao del disco duro aumentara en gran medida, rebasando as el tamao
estndar para una computadora.
Los platos son organizados para permitir el almacenamiento y la lectura de los datos.
Cada plato se divide en varios miles de pistas, las cuales son pequeos crculos concntricos.
Cada pista se divide a su vez en sectores. Un sector es normalmente la unidad de
direccionamiento de informacin ms pequea en un disco duro, y en la mayora de
los
Digitalizacin con propsito academico. Sistemas operativos

122 CAP.8. MANEJO DE ARCHIVO Y DISCOS

3ODWR

6HFWRU

%UD]R
&DEH]D
OHFWXUD
HVFULWXUD

%UD]R

&LOLQGUR

5RWDFLQ

)LJXUD(VWUXFWXUDGHXQGLVFRGXUR

casos puede almacenar 512 bytes de informacin. Cada pista, normalmente tiene entre 100 y 300
sectores. Esto se ilustra en la figura 8.1
En los sistemas de archivos FAT (File Allocation Table) los sectores se agrupan en bloques ms
grandes llamados clusters. el rango de tamao de los cluster va de 4 sectores (2,048 bytes) a 64 sectores
(32,768 bytes).
8.4.1. Tiempo de acceso a los datos
El tiempo de acceso a datos est definido por el tiempo de bsqueda, el tiempo de movimiento de
la cabeza y el retardo rotacional. El tiempo de bsqueda es el tiempo que le toma a la cabeza
posicionarse sobre el cilindro deseado. Hasta que los datos sean ledos o escritos se tiene que incluir el
tiempo de movimiento de la cabeza para encontrar la pista deseada, adems de el tiempo del retardo
rotacional para encontrar el sector deseado.

Digitalizacin con propsito academico. Sistemas operativos

8.5. TIEMPO DE BSQUEDA, TIEMPO DE LATENCIA Y TIEMPO DE TRANSMISIN

123

8.5. Tiempo de bsqueda, tiempo de latencia y tiempo de transmisin


El tiempo de bsqueda (tiempo de seek) es el tiempo que tarda el desplazamiento del
brazo (que sostiene las cabezas de lectura / escritura) desde la posicin actual hasta el cilindro
donde se leer / escribir.
El tiempo de latencia, es el tiempo que tarda en quedar bajo las cabezas de lectura /
escritura el sector donde se leer / escribir (esto tiene sentido slo despus de haber
posicionado el brazo en el cilindro correspondiente).
El tiempo de transmisin se refiere al tiempo que se tarda en leer / escribir un bloque de
datos en sectores contiguos. La figura 8.2 ilustra estos tiempos en un disco.

7LHPSR GH
WUDQVPLVLQ

7LHPSRGH
EVTXHGD

&DEH]DV
OHFWRUDV
HVFULWRUDV

7LHPSRGHODWHQFLD

)LJXUD7LHPSRGHEVTXHGDODWHQFLD\WUDQVIHUHQFLDGHXQGLVFRGXUR

Digitalizacin con propsito academico. Sistemas operativos

124

CAP.8. MANEJO DE ARCHIVOS Y DISCOS

El mayor de estos tres tiempos es el tiempo de bsqueda, este tiempo es del orden de 10
veces mayor que los tiempos de latencia y transmisin.
Los diferentes algoritmos de planificacin del acceso a un disco se enfocan a optimizar el
tiempo de bsqueda de manera prioritaria y en segundo trmino de optimizar el tiempo de latencia.
8.6. Algoritmos de Planificacin de Tiempos de Bsqueda
Algoritmo FCPS (First Come First Served)
En este algoritmo las peticiones de movimiento del brazo del disco son atendidas de acuerdo al
orden de llegada de las peticiones. Cuando existe un nmero grande de peticiones de desplazamiento
del brazo este algoritmo tiene un pobre desempeo, puesto que se mueve a la siguiente posicin (de
acuerdo al orden de llegada) sin considerar la posicin actual del brazo.
8.6.1. Algoritmo SSTF(Shortes Seek Time First)
Bajo este algoritmo, la siguiente peticin de movimiento del brazo es la que est localizada ms
cerca de la posicin actual del brazo. En general este algoritmo tiene un buen desempeo, dado que
minimiza el total de movimiento del brazo maximizando el nmero de peticiones atendidas. El nico
inconveniente es que bajo cargas de trabajo altas, las peticiones que estn localizadas en los extremos
del disco pueden ser postergadas un tiempo grande.
8.6.2 Algoritmo SCAN
Este algoritmo es muy similar al SSTF, pero la siguiente peticin a atender, es aquella que
minimice el tiempo de bsqueda en la direccin actual del movimiento del brazo. Cuando ya no existan
peticiones pendientes en la direccin actual del brazo se cambia la direccin de movimiento. El nico
inconveniente es que peticiones nuevas en la direccin actual de movimiento del brazo sern atendidas
antes que peticiones anteriores que estn en la direccin opuesta de la direccin actual de movimiento.
8.6.3 .Algoritmo N-Step Sean
Las peticiones que son atendidas son las que ya existan al cambiar la direccin de movimiento
del brazo, las nuevas peticiones se atendern hasta que se atiendan todas las peticiones que estaban al
cambiar la direccin de movimiento del brazo.
8.6.4. Algoritmo C-Scan (Circular Sean)
En este algoritmo se inicia un movimiento hacia adentro en la peticin que est
localizada lo ms lejos del eje que sostiene las superficies de lectura / escritura, despus

Digitalizacin con propsito academico. Sistemas operativos

8.8. REFERENCIAS

125

se atiende la peticin ms cercana en la direccin interna y se continua hasta que no existan peticiones
pendientes hacia adentro. Se reinicia en la peticin ms externa.
8.7. Optimizacin Rotacional
Esta optimizacin trata de minimizar el tiempo de latencia, la estrategia ms usada es el
almacenamiento de datos en sectores no contiguos, de manera que puede ser posible leer / escribir un
gran nmero de sectores en una sola revolucin del disco.
8.8. Referencias
Para ampliar los conocimientos sobre el manejo de archivos y discos se recomienda leer las
referencias:
[ 17], [25], [39], [14], [67], [68], [69].

Digitalizacin con propsito academico. Sistemas operativos

Capitulo 9

Sistemas operativos distribuidos


9.1. Introduccin
Gracias al surgimiento de equipo de computo de alta capacidad de procesamiento y bajo
costo, existe una tendencia creciente hacia la realizacin de procesamiento de datos distribuido,
de manera tal que todos los aspectos de una organizacin estarn de manera muy natural
dispersos. Las caractersticas ms relevantes de los sistemas operativos que han soportado esta
dispersin son:
1. Arquitectura de Comunicaciones, Este es el conjunto de programas que soportan que
computadoras diferentes y corriendo sistemas operativos diferentes sean capaces de
comunicarse y soportar: correo electrnico, transferencia de archivos y acceso remoto de
los recursos computacionales.
2. Sistema Operativo de Red. Es una configuracin de mquinas de aplicacin y uno o ms
servidores. Los clientes tienen su propio sistema operativo y un agregado a l (sistema
operativo de red) permita la conexin de los clientes a los servidores. Los servidores
proporcionan facilidades como comparticin de dispositivos de almacenamiento e
impresin.
3. Sistema Operativo Distribuido. Es un sistema operativo comn, es visto por todos los
usuarios como un sistema operativo centralizado. Se soporta la transparencia de
localizacin de los recursos computacionales.
Tanto el sistema operativo de red como el sistema operativo distribuido requieren para
su operacin de una arquitectura de comunicaciones. La arquitectura de comunicaciones ms
ampliamente usada actualmente es el protocolo TCP/IP.
9.2. El protocolo TCP/IP
El protocolo TCP/IP puede estructurarse en cinco capas: aplicacin, transporte,
internet, acceso de red y fsica.

126
Digitalizacin con propsito academico. Sistemas operativos

127 CAP.9. SISTEMAS OPERATIVOS DISTRIBUIDOS

La capa fsica se relaciona con la especificacin del medio de transmisin, la naturaleza


de las seales, la velocidad de comunicacin y aspectos relacionados.
La capa de acceso de red, se refiere al intercambio de datos entre un sistema y la red a la
que se est conectado.
La capa de internet permite la comunicacin entre diferente tipos de redes, para esto se utiliza el
Internet Protocol (IP). Para poder realizar la comunicacin entre redes diferentes se requiere un
ruteador (router). Las especificacin de la fuente y el destino actualmente solo ocupa 32 bits, pero en
un futuro cercano se soportarn direcciones de 128 bits.
La capa de transporte garantiza que las comunicaciones que se realizan sean seguras, para esto
se utiliza comnmente el Transmission Control Protocol (TCP).
La capa de aplicacin da el soporte necesario para las diferentes aplicaciones que se necesitan
correr. Las aplicaciones estndar que corren arriba de TCP son:
x

Correo Electrnico (SMTP Simple Mail Transfer Protocol), da el soporte para envi y
recepcin de correo electrnico.
x
Transferencia de Archivos (FTP File Transfer Protocol), permite el intercambio de archivos
entre diferentes computadoras.
x
TELNET, permite el acceso remoto de computadoras.
9.3. Computacin cliente / servidor
La arquitectura Cliente / Servidor ha reemplazado otras formas de procesamiento distribuido
gracias a su sencillez. El concepto Cliente / Servidor es realmente un concepto de software (no de
hardware) tal que es posible hablar de una aplicacin Cliente / Servidor corriendo en una sola
computadora.
El modelo Cliente / Servidor trata de balancear al mximo la cantidad de procesamiento que es
realizado por computadoras poderosas (servidores) y computadoras ms modestas (los clientes). El
objetivo de esto es tener un sistema computacional muy eficiente sin una carga excesiva de
comunicaciones y una mxima utilizacin de los elementos de procesamiento disponibles.
Una de las reas que ms utiliza la arquitectura Cliente / Servidor, es el rea de base de datos.
De manera que una gran parte de las aplicaciones de bases de datos en desarrollo actualmente, utilizan
este tipo de arquitectura para lograr un desempeo ptimo (minimizacin de uso de comunicaciones
con una maximizacin del uso de los elementos de procesamiento disponibles).
Una de las maneras de realizar la comunicacin en una aplicacin Cliente / Servidor es a travs
de el paso de mensajes distribuido, en este esquema el cliente requiere un servicio ENVIANDO un
mensaje al servidor, el servidor RECIBE el mensaje y proporciona el servicio. Las funciones bsicas
son: Enva y Recibe.
Otra manera de realizar funciones en una aplicacin cliente / servidor es a travs del llamado a
procedimientos remotos (RPC=Remote Procedure Cali), en este caso el cliente manda ejecutar un
procedimiento que est almacenado en el servidor que realiza la funcin deseada por el cliente.

Digitalizacin con propsito academico. Sistemas operativos

9.5. 5()(5(1&,$6 128


9.4. Migracin de Procesos
La migracin de procesos es la transferencia de suficiente informacin de un programa o
proceso que est corriendo actualmente en la maquina fuente hacia una mquina destino donde el
programa o proceso continuar corriendo. Las razones que motivan la migracin de procesos son
diversas:
1. Balanceo de cargas. De manera tal que se utilicen al mximo los elementos de procesamiento
que estn disponibles y el tiempo de terminacin de programas sea minimizado. Este balanceo
de cargas debe tomar en cuenta los costos adicionales inherentes al proceso de comunicacin
necesario.
2. Mejorar el desempeo del Sistema de Comunicaciones. Si dos procesos se comunican
intensamente y estn localizados en computadoras diferentes, esto incrementa la carga por
comunicaciones, si se ubican los dos procesos en la misma computadora es posiblemente
mejorar el desempeo del sistema de comunicaciones.
3. Mejorar la disponibilidad. Si se dar mantenimiento a alguna computadora y est corriendo en
ella un proceso continuo, se podra migrar dicho proceso a otra computadora y garantizar la
continuidad en la ejecucin de dicho proceso mientras se da mantenimiento.
4. Uso de Dispositivos Especiales. Un proceso que requiera dispositivos especiales que solo estn
disponible en una computadora de la red, podra migrar haca dicho nodo y aprovechar
eficientemente dichos dispositivos.
La migracin de procesos es una labor muy compleja dado que pueden existir diferentes
sistemas operativos y diferentes plataformas de hardware en un sistema distribuido. Esta situacin ha
cambiado drsticamente con el resurgimiento del uso extensivo del concepto de mquina virtual que ha
promovido el lenguaje de programacin JAVA. Usando el lenguaje JAVA es posible realizar la
migracin de applets de JAVA entre mquinas independientemente de su Hardware y de su sistema
operativo.
9.5. Referencias
Para profundizar sobre el procesamiento de datos distribuido es recomendable consultar las
siguientes referencias:
[39], [70], [14], [71], [72], [73].

Digitalizacin con propsito academico. Sistemas operativos

APNDICE A
Unix
A.1. Introduccin a unix

A.1.1. Historia de Unix


Los laboratorios BELL, la compaa General Electric y el proyecto MAC del Instituto Tecnolgico de
Massachussets(MIT) se unieron en 1965 para desarrollar un nuevo sistema operativo llamado
MLTICS. La idea de este proyecto fue permitir el acceso simultneo de diferentes usuarios a los
servicios de un sistema computacional- El proyecto dio como resultado una versin preliminar de
MULTICS pero los laboratorios BELL decidieron terminar su participacin en el proyecto.
En los laboratorios BELL, Ken Thompson escribi una versin preliminar de un KERNEL para la
computadora GE-645, adems Thompson dise un juego denominado "Space Travel" para la
Honeyweil 635 cuya ejecucin era muy ineficiente, por este motivo decidi emigrar el programa a una
computadora PDP-7. En este momento se unieron Ken Thompson, Dennis Ritchie y Brian Kemighan
escribiendo un sistema de archivos, un manejador de procesos y ciertas utileras bsicas. El nombre de
este sistema fue UNICS jugando un poco con el nombre del sistema anterior MLTICS. En 1970 el
nombre fue cambiado a UNIX.
El mismo grupo de desarrollo emigr el sistema operativo de la computadora PDP-7 a una
computadora PDP-11 al mismo tiempo que desarrollaron un ambiente de procesamiento de textos para
el departamento de patentes de los laboratorios BELL. La primera versin del KERNEL de UNIX
ocup solo 16K.
Ken Thompson al tratar de desarrollar un compilador para el lenguaje FORTRAN termino
desarrollando un lenguaje denominado B basado en otro lenguaje anterior llamado BCPL. El programa
del lenguaje B era lento de forma que Dennis Ritchie se dedico a mejorarlo y surgi el lenguaje C.
129

Digitalizacin con propsito academico. Sistemas operativos

130

APNDICE A. UNIX

En 1973, el sistema operativo UNIX fue reescrito en C. Por cuestiones legales, los laboratorios BELL
no pudieron comercializar el sistema operativo UNIX motivo por el cul se distribuyo libremente a
universidades y centros interesados.
De esta forma surgieron muchas variantes de UNIX, y fue hasta 1982 cuando los laboratorios BELL
conjuntaron dichas versiones en una sola denominada UNIX System III. AT&T anuncio tiempo
despus el lanzamiento de UNIX System V. En la Universidad de California en Berkeley se hicieron
modificaciones y surgi la versin UNIX 4.3 BSD (Berkeley Software Distribution).
Microsoft pidi la licencia a AT&T y produjo XENIX una versin de UNIX para microcomputadoras.
Microsoft hizo equipo con una compaa denominada Santa Cruz Operation (SCO) surgiendo el SCOXENIX. En la actualidad hay muchas versiones de UNIX entre ellas la versin para computadoras IBM
se denomina AIX.

A.1.2. Caractersticas de diseo de Unix


UNIX se caracteriza por ser:
x
x

Un ambiente de soporte para el desarrollo de programas


Un sistema operativo diseado por programadores para programadores

Las caractersticas del diseo fueron:


x
x
x
x

Portabilidad entre diferentes plataformas de HardWare.


Sistema de archivos independiente de los dispositivos.
Combinar pequeos programas para realizar trabajos complejos.
Para mltiples usuarios realizando mltiples tareas.

A.1.3. Estructura de Unix


Bsicamente la estructura de UNIX se fundamente en que las aplicaciones a travs del
SHELL (Interprete de comandos) interactan con el KERNEL (Compuesto bsicamente del
Control de Procesos y del Sistema de archivos) y este a su vez con el Hardware.
A.1.4. Kernel de Unix
El KERNEL est escrito casi completamente en lenguaje C y una pequea parte esta en cdigo
ensamblador- El KERNEL permite planificar el procesador para mltiples usuarios, adems realiza el
manejo del disco y permite comunicamos con los dispositivos de entrada salida.
Los procesos creados por el KERNEL tienen definidos una ENTRADA ESTNDAR, una SALIDA
ESTNDAR y un ERROR ESTNDAR segn se ilustra en la figura A.1.

A.1.5. El sistema de archivos


El sistema de archivos de UNIX bsicamente maneja tres tipos de archivos:

Digitalizacin con propsito academico. Sistemas operativos

A. I. INTRODUCCIN UNIX 131


Entrada esndar 0
(teclado)

Salida esndar 1
(pantalla)
Proceso

Error esndar 2
(pantalla)

Figura A. I. Dispositivos de entrada, salida y error asociados a un proceso.

x
x
x

Directorios
Archivos especiales
Archivos ordinarios

Una caracterstica fundamental de UNIX es que los DISPOSITIVOS son tratados como
ARCHIVOS motivo por el cul el manejo de DISPOSITIVOS es relativamente fcil.
La estructura de archivos es jerrquica tenindose directorios que contienen archivos y
directorios donde estos tienen archivos y directorios...
Los directorios que casi siempre estn presentes en cualquier sistema UNIX se ilustran en la
figura A.2.

etc

bin

usr

dev

bin

Figura A.2. Estructura tpica de directorios de Unix.

x
x
x

/ Indica el directorio raz.


/etc., Contiene comandos de sistema.
/bin. Contiene comandos administrativos de usuario.

Digitalizacin con propsito academico. Sistemas operativos

132

APNDICE A. UNIX

x /usr/bin. Contiene comandos para aplicaciones.


x /dev. Contiene los archivos de definicin de dispositivos.
x /u, Contiene directorios para archivos de usuarios.
A.1.6. El Shell
Es un interprete de comandos, pero tambin tiene su propio lenguaje de programacin. Existen
varios SHELLs disponibles donde los ms utilizados son;
x C-Shell
x Kom-SheIl
x Boume-Shell
El SHELL tiene la posibilidad de correr procesos en el frente(foreground) o en el
fondo(background). Es muy fcil realizar el redireccionamiento usando los operadores ><>>
La comunicacin interprocesos se puede realizar usando:
x
x
x
x

reas de memoria compartida.


Semforos.
Seales.
Pipes.

A.1.7. Aplicaciones / Lenguajes de Unix


Unix soporta diversos lenguajes entre ellos:
x
x
x
x
x
x
x

C
Fortran
Pascal
Cobol
Ada
PL/I
C++

Para ayudar al desarrollo de aplicaciones usando lenguajes de programacin soporta la utilera


make, para automatizar la compilacin y ligado de programas.
Soporta adicionalmente depuradores para poder quitar los errores a programas. Para el control
de versiones de archivos maneja una utilera denominada Source Code Control System(SCCS), que
soporta el concepto de archivos incremntales.
A.1.8. Comunicaciones y manejo de redes
x
x

Se soporta el manejo de correo electrnico a travs del comando mail.


Se soporta el copiar archivos entre sistemas UNIX con la utilera uucp(Unix to Unix CoPy).

Digitalizacin con propsito academico. Sistemas operativos

A. I. INTRODUCCIN UNIX 133

x
x

Soporta el protocolo de control de transmisin / protocolo Internet denominado (TCP/IP).


Soporta el manejo de TOKEN RING.

A.1.9. Editores / Formateadores de texto


Desde sus inicios NIX ha incorporado buenos editores y formateadores de texto.
Entre los editores utilizados estn:
x
x
x
x
x

sed
ed
ex
vi
ined

Entre los formateadores de texto tenemos:


x
x

nroff
troff

NOTA: Estos dos formateadores utilizan comandos punto para realizar todo el formateo.
A.1.10. Comandos bsicos de Unix Entrando y saliendo de Uns
Para entrar a UNIX se debe dar el nombre del usuario a la peticin de Login:, despus el sistema
preguntar la contrasea del usuario con la peticin de Password:
Para salir de UNIX se puede hacer de las siguientes tres formas:
x
x
x

Presionando: Ctrl-D
Tecleando: exit
Tecleando: logout

NOTA: Si se carg Xwindows es necesario salir como se indico y presionar despus


simultneamente: Ctrl-AIt-BackSpace para regresar al modo texto de UNIX y ah salir de las formas
indicadas. Otra forma de hacerlo es ejecutar el comando: kill -9 1
Manipulacin de contraseas
Para modificar la contrasea(password) se hace con el comando: passwd, a lo cul se pedir
teclear la anterior contrasea e introducir en dos ocasiones la nueva contrasea. Si se olvida la
contrasea de un usuario es posible como superusuario utilizar el comando:pwdadm para modificar la
contrasea anterior.
Comando ls
Permite ver los archivos de algn directorio, se puede incluir un patrn utilizando los caracteres
comodines * (Cualquier nmero de caracteres) y ? (Cualquier carcter).
Junto con el comando ls se pueden incluir diversas opciones precedindolas del signo .
Digitalizacin con propsito academico. Sistemas operativos

134

APNDICE A. UNIX
23&,21

D
G
O
U
W
)
5


'(6&5,3&,1
/LVWDWRGRVORVDUFKLYRVLQFOX\HQGRORVHVFRQGLGRV

/LVWDVRORORVGLUHFWRULRV

3URGXFHXQDOLVWDODUJD
/LVWDDUFKLYRVHQRUGHQLQYHUVRDOIDEWLFDPHQWH

/LVWD ORV DUFKLYRV GH DFXHUGR D OD IHFKD GH PRGLILFDFLQ ORV PRGLILFDGRV ORV PRGLILFDGRV

PVUHFLHQWHPHQWHSULPHUR

0DUFDORVGLUHFWRULRVFRQXQDGLDJRQDOLQYHUWLGD\ORVDUFKLYRVHMHFXWDEOHVFRQXQ 

/LVWDGLUHFWRULRV\DUFKLYRVUHFXUVLYDPHQWH


7DEOD$,2SFLRQHVGHOFRPDQGR,V

Las opciones de Is se dan en la tabla A.l.


v.gr.
Is -1 /u/pedro
Mostrar un listado conteniendo 7 columnas que indican respectivamente:
x
x
x
x
x
x
x

Bits de Permiso del archivo directorio.


Cuenta de ligas.
Nombre del propietario.
Nombre del grupo.
Cuenta de caracteres(tamao).
Fecha de ltima actualizacin.
Nombre del archivo o directorio.
Comando cat
El comando cat permite desplegar el contenido de archivos.

x
Para ver el contenido de un archivo: cat archivo
x
Para imprimir un archivo: cat archivo > /dev/lpl
x
Para crear un archivo directamente desde el teclado:
cat > archivo
Ctrl-D

NOTA: Si se desea ver un archivo pgina a pgina se puede usar el comando: pg


Comando wc
Permite contar el nmero de lneas, palabras o caracteres de un archivo. Las opciones son
indicadas en la tabla A.2.
23&,21

F
O
Z

'(6&5,3&,1
Cuenta slo caracteres.
Cuenta slo lneas.
Cuenta slo palabras.

7DEOD$7DEODGH2SFLRQHVGHOFRPDQGRZF

Muestra en el caso de no especificar ninguna opcin primero en el nmero de: Lneas, Palabras
y Caracteres.
Digitalizacin con propsito academico. Sistemas operativos

$0$1(-2'($5&+,92135

Comando cal
El comando cal permite desplegar un calendario de un mes en particular o de todos los meses de un
ao. El formato es:
cal ao
cal mes ao
Comando who
El comando who permite saber que usuarios estn en el sistema y quien es uno (???). Los
formatos son:
who
who am I
Comando man
Permite obtener ayuda del manual en lnea de UNIX, el formato comando es: man tem
Comando mail
Permite el enviar y recibir mensajes a/de otros usuarios. Para enviar un mensaje a uno o varios usuarios
el formato es:
mail usuario1 usuario2 ...
Ctrl-D Si ya se tiene el mensaje a enviar se puede hacer:
mail usuariol usuario2 ... < archivo-con-mensaje
Para editar los mensajes recibidos el comando es: mail
Los comandos que se pueden usar para editar los mensaje se indican en la tabla A.3.
&20$1'2

'(6&5,3&21

"

'HVSOLHJDODVRSFLRQHVGHOPDLO

QPHUR

$YDQ]DHOQPHURGHPHQVDMHVLQGLFDGRV

G

%RUUDPHQVDMHV

G 

%RUUDWRGRVORVPHQVDMHV

KXVXDULRV

%XVFDPHQVDMH V GHOXVXDULRLQGLFDGR

0XVXDULR

3HUPLWHSDVDUDOXOWLPRPHQVDMHGHVSOHJDGRDOXVXDULRLQGLFDGR

QPHUR

5HWURFHGHHOQPHURGHPHQVDMHLQGLFDGR

SQPHUR

'HVSOLHJDHOQPHURGHPHQVDMHLQGLFDGR

T

6DOH\GHMDPHQVDMHVHQFROD

UWH[WR&WUO'

3HUPLWHFRQWHVWDUGLUHFWDPHQWHDOWUDQVPLVRUGHOPHQVDMHDFWXDOPHQWHGHVSOHJDGR

6

$JUHJDXQDUFKLYRHOPHQVDMH

7RS

'HVSOLHJDODVSULPHUDVFLQFROQHDVGHXQPHQVDMH

7RSQPHURQXPHUR

'HVSOLHJDODVSULPHUDVFLQFROQHDVGHORVPHQVDMHLQGLFDGRVHQOHUDQJRGDGR

XQPHUR

5HFXSHUDHOPHQVDMHFX\RQPHURVHLQGLFDTXHKDEDVLGRERUUDGR

[

6DOHVLQDFWXDOL]DUFRODGHPHQVDMH

7DEOD$7DEODGH2SFLRQHVGHOFRPDQGRPDLO
Digitalizacin con propsito academico. Sistemas operativos

136

$31',&($81,;

A.2. Manejo de archivos


A.2.1. Definicin de archivo
Un archivo es una coleccin de datos almacenados en algn dispositivo de almacena miento,
cada archivo esta compuesto de;
x Su nombre.
x Su contenido.
x Informacin adicional de control e identificacin.
A.2.2. Tipos de archivos
Existen tres tipos de archivos en UNIX:
x ORDINARIOS Que son archivos que no tienen un formato interno particular, v.gr. texto
cdigo.
x DIRECTORIO Es una tabla de los contenidos de una coleccin de archivos relacionados,
contiene un nombre y un nmero de inodo (que es donde est almacenada la informacin).
x ESPECIALES Representan dispositivos lgicos fsicos. Se encuentra en el directorio: /dev
A.2.3. Estructura del sistema de archivos y trayectorias
Como ya se comento en el captulo anterior la estructura del sistema de archivos en UNIX es
jerrquica empezando desde la raz (/).
El concepto de trayectoria no es ms que el camino a travs del cul llegamos a un archivo o
directorio.
Si la trayectoria es descrita partiendo desde la raz(empieza con una diagonal) se le denomina
trayectoria ABSOLUTA, si se define a partir de la posicin actual (no empieza con diagonal) se
denomina trayectoria RELATIVA.
Un punto muy importante es el uso de.. para referirse al directorio padre. Las opciones de
manejo de directorios se ilustran en la tabla A.4.

&RPDQGR

'HVFULSFLQ

FGWUD\HFWRULD

6HFDPELDODWUD\HFWRULDLQGLFDGD

FG

6HFDPELDDOGLUHFWRULRUD]

FG

6HFDPELDDOSDSDGHOQLYHODFWXDO

FG

6HFDPELDDOGLUHFWRULRGHHQWUDGDGHILQLGRFRPRKRPH

PNGLUGLUHF

3HUPLWHFUHDUHOGLUHFWRULRLQGLFDGR

SZG

'HVSOLHJDHOGLUHFWRULRDFWXDO

PYGLUOGLU

&DPELDHOQRPEUHGHOGLUHFWRULRGLUODGLU

UPGLUGLUHF

%RUUDHOGLUHFWRULRLQGLFDGR

7DEOD$ 7DEODGHFRPDQGRVSDUDPDQHMRGHGLUHFWRULRV

Digitalizacin con propsito academico. Sistemas operativos

$0$1(-2'($5&+,92137

Permisos de archivos y directorios


UNIX maneja los permisos de acceso a los archivos y directorios clasificando a los usuarios de
la siguiente forma:
x u Se refiere al propietario.
x g Se refiere al grupo.
x Se refiere a los otros(todos los dems).
Adems los permisos pueden ser de:
x r De lectura
x w De escritura
x x De ejecucin
De este modo surgen 9 bits (el comando Is -1 muestra 10 bits donde el primero indica el tipo de
archivo y los otros 9 indican los permisos a los que nos referimos) que definen los permisos de cada
archivo y directorio respecto a propietario, grupo y todos.
Algunos puntos interesantes son los siguientes:
x Los DIRECTORIOS requieren el permiso de ejecucin x para poder accesar los archivos y
directorios que pertenecen a ellos.
x Para que sea efectivo el permiso de escritura w se requiere que DIRECTORIO en cuestin
tenga el permiso de ejecucin x.
El comando que permite modificar estos nueve bits de permisos es el comando chmod cuyas
opciones se ilustran en la tabla A.5.
&20$1'2
FKPRG>TXLHQ@SHUPLVRDUFK
FKPRG>TXLHQ@SHUPLVRDUFK


TXLHQSXHGHVHU
J 7RGRVORVXVXDULRVGHOPLVPRJUXSRTXHHOSURSLHWDULR
R 7RGRVORVXVXDULRV
X 3URSLHWDULR

'(6&5,3&,1
3HUPLWHDJUHJDUTXLWDUHOSHUPLVRLQGLFDGRVREUHORVDUFKLYRV
UHVSHFWRDORVXVXDULRVLQGLFDGRV


SHUPLVRSXHGHVHU
[ (MHFXWDEOH SDUDGLUHFWRULRVVHUHILHUHDEVTXHGD 
U OHFWXUD
Z HVFULWXUD


TXLQ \ ORV SHUPLVRV VH SXHGHQ HVSHFLILFDU XVDQGR XQ


QPHURHQRFWDOFRPRHQHOFRPDQGR
FKPRGDUFKLYR
TXHGDUDFFHVRLUUHVWULFWRDODUFKLYRO

 7DEOD$7DEODGHFRPDQGRFKPRG.
Digitalizacin con propsito academico. Sistemas operativos

138

$31',&($81,;

$5&+,92
DUFKF
DUFKK
DUFKI
DUFKS
DUFKV
DUFKR
.
..

'(6&5,3&,1
&GLJRIXHQWHGH&
$UFKLYRLQFOXGH GHHQFDEH]DGR SDUD&
&GLJRIXHQWHGH)2575$1
&GLJRIXHQWHGH3$6&$/
&GLJRIXHQWHGH(16$0%/$'25
&GLJRREMHWR
'LUHFWRULRDFWXDO
'LUHFWRULRSDGUH

7DEOD$&RQYHQFLRQHVGH1RPEUHGH$UFKLYRV.

A.2.4. Nombres de archivos


Para especificar los nombres de archivos se tienen definidas convenciones, algunas de las cuales
se ilustran en la tabla A.6.
A.2.5. Comandos para manejos de archivos
En la tabla A.7 se ilustran algunos de los comandos para manejo de archivos.
&20$1'2
,V
FDW
FS
PY
3J
PRUH
UP

'(6&5,3&,1
/LVWDDUFKLYRV
3HUPLWHYHUDUFKLYRVRORVSXHGHFUHDUWDPELQ
3HUPLWHFRSLDUDUFKLYRV
3HUPLWHFDPELDUHOQRPEUHDXQDUFKLYR
9HUDUFKLYRVSJLQDDSJLQD
9HUDUFKLYRVSJLQDDSJLQD
3HUPLWHERUUDUDUFKLYRV

WRXFK

6LHODUFKLYRLQGLFDGRQRH[LVWHFUHDXQRGHORQJLWXGFHUR6L\DH[LVWHDFWXDOL]DOD
IHFKDGHODOWLPDDFWXDOL]DFLQFRQODIHFKDDFWXDO
FVSOLW
6HSDUDUXQDUFKLYRHQEDVHDORVDUJXPHQWRVGDGRV
,Q
/LJDGRVQRPEUHVDXQDUFKLYR
6SOLW
6HSDUDXQDUFKLYRHQSHGD]RVGHQOQHDV
PYDUFKODUFK 3HUPLWHFDPELDUHOQRPEUHGHODUFKOSRUDUFK

7
7DEOD$&RPDQGRVSDUD0DQHMRGH$UFKLYRV

A.2.6. Comandos para manejo de grupos y propietarios


Los comandos para manejo de grupos y propietarios se ilustran en la tabla A.8.




&20$1'2
FKJUSJUXSRDUFKLYR
FKRZQXVXDULRDUFKLYR

'(6&5,3&,1
&DPELDHOJUXSRGHODUFKLYRGDGR
&DPELDHOSURSLHWDULRGHODUFKLYRGDGRDOXVXDULRLQGLFDGR

7DEOD$&RPDQGRVSDUD0DQHMRGHJUXSRV\SURSLHWDULRV
Digitalizacin con propsito academico. Sistemas operativos

$0$1(-2'($5&+,92139

A.3. Procesos
Definicin de Proceso
Algunas definiciones de lo que es un proceso:
Un proceso es una tarea que se lleva a cabo dentro del sistema operativo UNIX.
Es un programa que se est ejecutando.
Es la forma de controlar a los mltiples usuarios para compartir los recursos del sistema.
Los procesos son el medio a travs del cual un usuario invoca al shell para que este invoque al
kernel y se realice la operacin indicada.

A.3.1. Caractersticas de un proceso en UNIX


UNIX soporta el concepto de MULTIPROGRAMACION o MULTITAREAS que permite que
varios procesos se ejecuten "simultneamente".
Adems permite que el mismo programa pueda ser ejecutado por diferentes procesos al mismo
tiempo(CODIGO PURO o REENTRANTE).
Un proceso puede ejecutarse en su propio ambiente y comunicarse con otros procesos a travs
de llamadas al sistema operativo como podra se el uso de: SEMFOROS, PIPES, REAS DE
MEMORIA COMPARTIDA, etc.
Los procesos se ejecutan normalmente en MODO USUARIO o MODO PROBLEMA pero
cuando se hace una llamada al sistema se cambia a MODO KERNEL o MODO SUPERVISOR.
El ambiente de un proceso en UNIX se define a travs de:
x
x
x
x
x
x
x
x

EL programa siendo ejecutado.


Los datos utilizados.
Archivos abiertos.
Directorio actual.
Identificador del USUARIO.
Identificador del PROCESO.
Identificador del PROCESO PADRE.
Otras variables de sistema.

A.3.2. Creacin de un proceso


La creacin de un proceso se lleva a cabo cuando un usuario entra al sistema(LOGIN). En este
momento se define el ambiente del proceso de la siguiente forma:
x
x
x
x
x
x
x

Identificador de USUARIO.- El identificador del usuario que entro al sistema,


Directorio.- El directorio base(HOME) asignado al usuario.
Programa.- El programa del Shell(sh).
Identificador del PROCESO.- El nmero asignado al proceso.
Proceso Padre.- init.
Identificador del PADRE.- 1.
Archivos Abiertos.- La terminal asignada (stdin, stdout y stderr).

Digitalizacin con propsito academico. Sistemas operativos

140

$31',&($81,;

Cuando el usuario que entro al sistema ejecuta el comando cat MI, se crea otro proceso con
las siguientes caractersticas:
x
x
x
x
x
x
x

Identficador de USUARIO- El identificador del usuario que entro al sistema. Esto es heredado.
Directorio.- El directorio base(HOME) asignado al usuario. Esto es heredado.
Programa.- El programa cat.
Identfcador del PROCESO.- El nmero asignado a este nuevo proceso.
Proceso Padre,- sh (el del proceso anterior)
Identificador del PADRE El asignado al proceso anterior.
Archivos Abiertos- La terminal asignada (stdin, stdout y stderr) HEREDADA y el archivo
MI.

La creacin del proceso que ejecuta el comando cat se realiza a travs de la operacin llamada
SPAWNING (un pez desovando), esto en forma detallada involucra lo siguiente:
x El ambiente del proceso del shell(sh) es duplicado formando un proceso padre y un proceso hijo
a travs de la llamada de sistema fork.
x La llamada de sistema fork regresa el valor del identificador del proceso hijo al proceso padre y
regrese el valor de cero al proceso hijo.
x El padre entra en un estado de espera a travs de la llamada de sistema: wait
x El programa cat es cargado en el ambiente heredado del hijo a travs de la ejecucin del
llamado de sistema: exec
x El hijo solo altera su ambiente abriendo el archivo MI a travs de la llamada de sistema: open
x El hijo termina, sealizando al padre a travs de la llamada de sistema: exit
x El padre despierta y reinicia ejecucin (el shell).
Si el comando ejecutado no es cat MI sino sh el efecto que se tiene es crear otra instancia del
shell(otro proceso) que a su vez podr crear otra instancia(proceso) al ejecutar otro comando...
Listar Procesos
El comando que permite ver la informacin de los procesos es: ps. S se desea ver toda la
informacin se debe usar la opcin f: ps -f que muestra para cada proceso la informacin indicada en la
tabla A.9.
&2/801$

'(6&5,3&,1

8,'

(OLGHQWLILFDGRUGHOXVXDULRSURSLHWDULRGHOSURFHVR

3,'
33,'

(OLGHQWLILFDGRUGHOSURFHVR
(OLGHQWLILFDGRUGHOSURFHVRSDGUH

35,

3ULRULGDGGHOSURFHVR(QWUHPVDOWRHVHOQPHURPHQRUHVODSULRULGDG

1,

9DORU1LFH 8VDGRHQHOFOFXORGHODSULRULGDG 

77<

/DHVWDFLQGHWUDEDMRGHFRQWUROGHOSURFHVR

&0'

(OQRPEUHGHOFRPDQGR

UPGLUGLUHF

%RUUDHOGLUHFWRULRLQGLFDGR

7
7DEOD$,QIRUPDFLQGHOFRPDQGRSV

Digitalizacin con propsito academico. Sistemas operativos

$352&(626141
23&,1 '(6&5,3&,1
H

'HVSOLHJDWRGRVORVSURFHVRVH[FHSWRORVGH.(51(/

I

/LVWDGRFRPSOHWR

N
O

'HVSOLHJDLQIRUPDFLQGHORVSURFHVRVGH.(51(/
*HQHUDXQOLVWDGRODUJR

3

SOLVWD'HVSOLHJDLQIRUPDFLQVORGHORVQPHURVGHSURFHVRVHVSHFLILFDGRVHQSOLVWD

XOLVWD

'HVSOLHJDLQIRUPDFLQVORGHORVSURFHVRVGHORVXVXDULRVHQXOLVWD

7
7DEOD$2SFLRQHVGHOFRPDQGRSV

Las opciones ms utilizadas del comando ps son ilustradas en la tabla A. 10.


A.3.3. Procesos de frente y fondo
Unix tiene la capacidad de poder correr un proceso en segundo plano (al fondo) y seguir
trabajando sin tener que esperar a que termine cierto comando.
La forma de realizarlo es por dems simple, solo basta con que se termine el comando con el
carcter ampersand & y listo.
Sino se termina un comando con & estar corriendo en primer plano(frente) y el control se
regresar hasta que termine.
A.3.4. Corres procesos despus de salir
S se desea dejar corriendo un proceso despus de salir del sistema se debe usar el comando: nohup.
v.gr.:
nohup sort archivo&
x
logout

A.3.5. Controlando la prioridad de los procesos


Una forma de indicarla al sistema operativo que un sistema no tiene alta prioridad es a travs
del comando nice cuyo formato es:
nice [-nmero] comando.
Donde nmero vara de 1 a 19, entre ms grande el valor menor la prioridad.
El superusuario puede correr un proceso con ms prioridad usando nmeros negativos
como en:
nice -9 sort.
Se puede alterar la prioridad de un proceso que est corriendo con el comando:
renice prioridad identificador-proceso.

Donde prioridad va desde -20 a +20 para el superusuario(root) y de +0 a +20 para


un usuario normal.

Digitalizacin con propsito academico. Sistemas operativos

142

$31',&($81,;

A.3.6. Terminando procesos


Para terminar un proceso el comando adecuado es kill siendo el formato ms utilizado:
kill -9 identificador_proceso(s).
Para terminar todos los procesos del usuario y salir del sistema se puede usar la forma:
kill -9 0.
Para terminar los procesos del usuario incluyendo los iniciados en otras terminales usar:
kill-9-1.
Procesos del Sistema.
Cuando/l sistema operativo UNIX arranca se crean ciertos procesos de sistema que nunca
terminan (mientras no se de baja el sistema). El trabajo de estos procesos de sistema conocidos como
DAEMONS es responder a eventos del sistema.
Despus de lo anterior se crea el proceso con identificador de proceso 1, que se denomina init.
El proceso init crea tantos procesos que ejecuten getty como terminales estn disponibles. Cuando un
usuario introduce su identificador el proceso getty es reemplazado por un proceso login. Si el usuario
logra entrar al sistema el proceso login es reemplazado por un proceso ejecutando sh (el shell).
Cuando un usuario termina su sesin el proceso sh termina y el proceso init crea un nuevo
proceso getty para la terminal.

A.4. El Shell
A.4.1. Descripicin del Shell
Un Shell Permite al usuario interactuar con los recursos de la computadora(Programas,
Archivos y Dispositivos).
El Shell maneja la interaccin entre el usuario y el sistema operativo UNIX, realizando la
peticin de comandos al usuario, realizando la interpretacin de los mismos para el sistema operativo y
el manejo del resultado que da el sistema operativo. De este modo el SHELL recibe el nombre de
INTERPRETE DE COMANDOS.
Dentro del SHELL de UNIX se tiene un lenguaje de programacin que permite realizar la
creacin de SCRIPTS del SHELL.
El shell no es especfico del sistema operativo, motivo por el cul cada usuario puede tener su
propio SHELL.

A.4.2. Archivos estndar


Automticamente se abren tres archivos estndar para cada proceso en el sistema:
Entrada Estndar, Salida Estndar y Error Estndar.
La Entrada Estandar(stdin) est asignada por omisin al teclado.
La Salida Estandar(stdout) est asignada por omisin a la pantalla.
El Error Estandart stderr) est asignada por omisin a la pantalla.
Estos valores por omisin pueden ser cambiados utilizando REDIRECCIN.

Digitalizacin con propsito academico. Sistemas operativos

$(/6+(//143
A.4.3. Redireccin

La redireccin de ]a entrada se lleva a cabo a travs del signo de < v.gr. more < arch La redireccin de
]a salida se realiza con el signo de > o ^> donde el primero manda la salida al lugar indicado y si existe
el archivo lo borra mientras el segundo lo agrega al final.
v.g.
cat > arch
cat >> arch
La redireccin del error estndar se realiza a travs del signo de > o ^> pero precedindolo de un 2
v.g. cat arch 2 > archerror
Sino se desea ver el error, ni guardarlo se puede usar:
cat arch 2 > /dev/null
Existen diversas combinaciones del uso de los operadores de redireccin que pueden ser tiles:
comando < archentrada > archsalida 2 > archerror
comando >> archsalida 2 >> archerror < archentrada
comando > archsalida 2 > & 1
Este ltimo ejemplo manda el error al archivo definido como salida previamente. En general se puede
hacer referencia a los archivos de entrada, salida y error ya definidos usando la notacin:
&0 Archivo Salida Definido.
&1 Archivo Entrada Definido.
&2 Archivo Error Definido.

A.4.4. Continuacin y agrupacin de comandos


La continuacin de un comando se define terminando el comando con una diagonal invertida \ y
presionado Enter
v.g.
cat arch \
arch2
La agrupacin de comandos se lleva a cabo separndolos con un punto y coma ;
v.g.
comando1; comando2
es lo mismo que:
comando1
comando2

A.4.5. Pipes y filtros


Los filtros son comandos que pueden leer su entrada de la entrada estndar y escribir su salida
en la salida estndar, de este modo es posible utilizarlos como un comando intermedio entre
pipes(tubos). Algunos ejemplos de filtros son; sort, wc, cat, cut, grep...

Digitalizacin con propsito academico. Sistemas operativos

144

$31',&($81,;

v.g.
ls|sort
En algunas ocasiones se desea que la salida de algn comando vaya a dos lugares (en lugar de
un tubo requerimos una T), para esto se utiliza el comando tee
v.g.
Is l tee archl l sort
En este caso la salida del comando Is se manda al archi y al mismo tiempo se manda al comando
sort.El KORN SHELL y el BOURNE SHELL permiten la creacin de PIPES con nombre, para realizar
esto se utiliza el comando /etc/mknod dando un nombre y el nombre dado sera el pipe con nombre, v.g.
/etc/mknod BITACORA p
# log < BITACORA
while TRUE
do
read line
echo date +'%H%M%S't #line /usr/ejemplo/archbita
done < BITACORA
nohup nice log&
A.4.6. Metacaracteres
El carcter ? representa cualquier carcter: v.gr. Is ro? indicar todos los archivos que tengan
como primer letra r, como segunda letra o y como tercer letra cualquier carcter.
El carcter * representa cualquier nmero de caracteres. Uno de los comandos favoritos a las 2
de la maana es: rm *
Es posible tambin especificar una lista de posibles valores v.gr.:
Is [cd]i[lf]
Indica los archivos cuyo nombre empieza con c o d le sigue una i y teminan con 1 f
Is [A-Z]r
Indica los archivos cuyo nombre tiene dos letras; la primera es una letra mayscula y la segunda
la letra r
Is *[ibc]
Indica los archivos cuyo nombre no termina con b o c
A.4.7 Variables del Shell
El carcter $
permite el hacer referencia al valor de una variable del SHELL
(macroexpansin).
Para definir una variable del shell se usa el signo =
v.gr, xy=hola que tal
Para referirse al valor de dicha variable se usa $ como en:
echo $xy
Muestra en la pantalla: hola que tal

Digitalizacin con propsito academico. Sistemas operativos

$(/6+(//145

Para expander una variable del SHELL dentro de un string se encierra el nombre de la variable entre
llaves({ }) y se precede con el signo de $.
v.g.
prefijo = "re"
echo es $prefijotomado el mundo despliega: es el mundo
puesto que la variable prefijotomado no est definida. echo es ${prefijo}tomado el mundo
despliega: es retomado el mundo
Para desplegar las variables del SHELL que estn definidas se usa el comando set
Algunas de las variables del shell que normalmente estn definidas se indican en la tabla A.
11.
9$5,$%/(

'(6&5,3&,1

/2*1$0(

(OQRPEUHFRQHOTXHVHKL]RHOORJLQ

+20(
3$7+

(OQRPEUHGHOGLUHFWRULRFRQHOTXHVHGLRORJLQ
8QDOLVWDRUGHQDGDGHQRPEUHVGHWUD\HFWRULDGHGLUHFWRULRVVHSDUDGRVSRU(OVKHOO
EXVFDHQHORUGHQHVSHFLILFDGRGHQWURGHO3$7+ORVFRPDQGRVTXHVHGHVHDQ
HMHFXWDU


36,

(OSURPSWSULPDULRGHVLVWHPD

36

(OSURPSWVHFXQGDULRGHOVLVWHPD

,)6

(OSURPSWVHFXQGDULRGHOVLVWHPD

7DEOD$$OJXQDVYDULDEOHVGHO6KHOO


A.4.8. Exportando variables
Las variables que se definen solo son validas dentro del proceso que realiza la definicin, si se desea
que dichas variables sean visibles dentro de los procesos hijos(nietos, biznietos,...) es necesario usar el
comando export nombre-variable.
Para verificar las variables que han sido exportadas se usa el comando export sin parmetros.
Es importante destacar que las variables de un proceso hijo nunca sern vistas desde el proceso padre.
Para desplegar las variables definidas a nivel local se usa el comando set.
Para desplegar las variables que han sido heredadas se usa el comando env.
A.4.9. Variables como comandos
Para almacenar en una variable un comando para ser ejecutado posteriormente es necesario delimitar el
comando entre comillas invertidas (no confundir con las comillas sencillas), v.gr.;
ahora='date'
echo $ahora
Desplegar la fecha actual

Digitalizacin con propsito academico. Sistemas operativos

146

$31',&($81,;

A.4.10. Caracteres de escape del Shell


La diagonal invertida permite que no se interprete el carcter enseguida.
v.gr.:
echo\$8
Despliega: $8 Las comillas simples permiten que el shell no interprete nada:
v.gr.:
echo hola $1
Despliega: hola $1
Las dobles comillas le indican al shell que interprete todos los caracteres especiales.
v.gr.:
dir="Directorio actual es pwd
echo $dir
Desplegar el mensaje: Directorio actual es
seguido del directorio actual
A.4.11. Tipos de Shell
x
x
x
x
x

Con AIX vienen incluidos los siguientes SHELUs:


Boume
C
Kome
Restricted
Trusted
Bourne Shell

Es un shell ampliamente usado desarrollado en 1975 por S.R. Boume en los laboratorios BELL,
el nombre viene del apellido de su desarrollador. La forma de localizarlo es en:/bin/bsh se invoca con
bsh y su indicador (prompt) es $.
Soporta el manejo de excepciones a travs del comando trap, soporta el concepto de
pipes con nombre (named pipes), soporta variables locales y globales (se exportan con el
comando (export), soporta las estructuras de control if-then-else, case, for, while y until a
diferencia de C SHELL y KORN SHELL usa las utileras test y expr para realizar la
evaluacin de expresiones condicionales.
C Shell
Es un shell desarrollado en la universidad de Berkeley por Bill Joy y un grupo de
alumnos que acepta comandos similares en sintaxis a la sintaxis del lenguaje C. Est localizado
en:/bin/csh se invoca con csh y su indicador(prompt) es %
Soporta el manejo de la historia de comandos a travs de history, soporta el crear alias de los
comandos, el control de las variables se realiza a travs de los comandos set y setenv,

Digitalizacin con propsito academico. Sistemas operativos

$(/6+(//147


los operadores condicionales son los del lenguaje C, ofrece las construcciones if-then-else,
switch, foreach, repeat y while.
Korn Shell
Este shell fue desarrollado por David Kom en AT&T, es resultado de tomar caractersticas de los dos
anteriores y agregar algunas nuevas. Este shell es el que se usa en AIX por omisin. Se localiza en:
/bin/ksh se invoca con: ksh y el indicador (prompt) es $
Incorpora lo mejor del C SHELL y del BOURNE SHELL, es un poco ms rpido que el C SHELL
pero ms lento que el BOURNE SHELL, adicionalmente a las construcciones del C SHELL soporta el
select similar al case para elegir las opciones de un men.
Una de las caractersticas ms importantes del ksh es el poder definir alias para los comandos usando el
comando alias.
v.g.
alias dir=ls 1
De este modo al dar dir se ejecutar el comando Is 1
Otra caracterstica propia del ksh es el poder exportar todas las definiciones de variables y de alias
utilizando la variable ENV. Suponiendo que las definiciones de las variables y aliases estn definidas
en el archivo varal del directorio del usuario basta con hacer lo siguiente:
ENV=$HOME/viral
export ENV
Dentro del ksh se pueden editar los comandos anteriores haciendo lo siguiente:
set -o vi
Despus para editar los comandos anteriores se debe hacer con la secuencia siguiente:
ESC Entra en modo edicin.
k Comando Previo
j Comando Siguiente
Shell Restricted (Restringido)
Este shell es idntico al shell Boume escepto que no se pueden realizar algunos comandos como:
cambiarse de directorio (cd)
utilizar redireccin (<, >, >>)
especificar los nombres de comandos empezando con diagonal (/)
definir el valor de la trayectoria de bsqueda de comandos a travs de la variable (PATH)
Este shell se localiza en el directorio /bin/Rsh, para invocarlo se hace con: Rsh y el indicador (prompt)
es $
Shell Trusted (Privilegiado)
Este shell proporciona un ambiente privilegiado desde el cul se pueden realizar operaciones
administrativas del sistema. Permite la ejecucin de comandos catalogados como privilegiados
(trusted).

Digitalizacin con propsito academico. Sistemas operativos

148

$31',&($81,;

Este shell se localiza en /bin/tsh la forma de invocarlo es con Ctrl-X Ctrl-R, el indicador
(prompt) es tsh >
Para entraba este shell se debe estar como superusuario(su) o como raz(root).
A.4.12. Terminales virtuales
El concepto de terminales virtuales proporcionan una forma de mltiples procesos interactivos
ACTIVOS SIMULTNEAMENTE.
Para iniciar una terminal virtual se hace a travs de: open sh
Para moverse entre las terminales virtuales se hace a travs de: Alt-Action( si guente terminal virtual)
o Shift-Action (anterior terminal virtual).
Para distinguir las mltiples terminales terminales virtuales es posible cambiar el tipo de letra(font) y
color de cada una de ellas usando los comandos:
chfont -1#
chcolor -b# -f#
Para desplegar los colores y tipos de letra disponibles se usan los comandos:
Iscolor
Isfont
NOTA: Los valores por omisin de Xwindows estn en el directorio raz en un archivo denominado
Xdefaults

A.4.13. Comandos de seleccin


Los comandos de seleccin son ilustrados en la tabla A.12.
&20$1'2

'(6&5,3&,1

DZN

/HQJXDMHGHEVTXHGD\SURFHVDPLHQWRGHVWULQJV

FXW

3HUPLWHVHOHFFLRQDUFROXPQDVGHXQDUFKLYR

GLII

&RPSDUDGRVDUFKLYRV\VHOHFFLRQDODVGLIHUHQFLDV

JUHS

6HOHFFLRQDORVUHQJORQHVTXHFXPSOHQHOFULWHULRGDGR VORXQFULWHULR 

(JUHS H[WHQGHGJUHS  6HOHFFLRQDLRVUHQJORQHVTXHFXPSOHQORVPOWLSOHVFULWHULRVGDGRV


)JUHS IDVWJUHS 

6HOHFFLRQDORVUHQJORQHVTXHFXPSOHQORVPOWLSOHVFULWHULRVGDGRV

KHDG

6HOHFFLRQDORVSULPHURVUHQJORQHVGHORVDUFKLYRV

OLQH
VHG

6HOHFFLRQDHOSULPHUUHQJOQGHORVDUFKLYRV
3HUPLWHHGLWDUORVIOXMRVGHGDWRV

WDLO

3HUPLWHVHOHFFLRQDUODVOWLPDVOQHDVGHORVDUFKLYRV

XQLT

6HOHFFLRQDUHQJORQHVHOLPLQDQGRUHSHWLFLQ6ORVLVREUHORTXHVHRSHUDHVWRUGHQDGR

ZF

&XHQWDFDUDFWHUHVSDODEUDV\OQHDVGHXQDUFKLYR

7DEOD$&RPDQGRVGHVHOHFFLQ.

Muestra la primer lnea del archivo:


line < archivo
Muestra las 10 primeras lneas del archivo:
head archivo que es lo mismo que sed -e 1 1,$d archivo
Digitalizacin con propsito academico. Sistemas operativos

$(',725(6149


Muestra las ltimas 10 lneas del archivo:


tail archivo
Mostrar los archivos en los que aparece la palabra CAPITULO:
grep CAPITULO * Todas las ocurrencias.
grep -1 CAPITULO * Solo los nombres de los archivos.
grep -n CAPITULO * Mostrar nmeros de lnea.
Mostrar cuantos archivos tienen la palabra CAPITULO:
grep -1 CAPITULO * wc 1
Si se tiene un archivo datos donde los campos estn separados por : y se desea extraer el
campo 2 y el campo 5 del archivo, siempre y cuando el rengln tenga la palabra LIBRO:
grep LIBRO datos|cut -f2,5 -d:
Obtener los caracteres del 1 al 20 y del 55 en adelante del listado de un directorio:
ls-l[cut-cl-20,55A.5 Editores
A.5.1. Editores de UNIX
Dentro del ambiente unix se tienen disponibles diversos editores y herramientas para
manipulacin de strings segn se indica en la tabla D.6.
(',725

Ed
Red

'(6&5,3&,1
(VXQHGLWRUGHOQHDTXHVOR SHUPLWHWUDEDMDUFRQXQDUFKLYRDXQWLHPSR
9HUVLQUHVWULQJLGDGHOHGLWRUHGSDUDXVDUVHFRQHO6+(//5(67,&7('

([

(GLWRUGHOQHDVLPLODUDOHGSHURSXHGHHGLWDUPOWLSOHVDUFKLYRVDXQWLHPSR

(GLO

9HUVLQSDUDSULQFLSLDQWHVGHH[

Vi

(GLWRUGHSDQWDOODFRPSOHWDVHSXHGHQHMHFXWDUODPD\RUDGHORVFRPDQGRVGHH[

9LHZ

9HUVLQSDUDVOROHFWXUDGHOYL

9HGLW

9HUVLQSDUDSULQFLSLDQWHVGHOYL

7YL

9HUVLQSULYLOHJLDGDGHOYLSDUDXVRVGHDGPLQLVWUDFLQGHOVLVWHPD

JUHSHJUHSIJUHS


+HUUDPLHQWDVSDUDEVTXHGDGHSDWURQHVGHQWURGHORVDUFKLYRVHJUHS\IJUHSVRQ
GRVYDULDQWHVGHOJUHSTXHVRQXQSRFRPVHILFLHQWHV

6HG

(GLWRUGHIOX-RV 6WUHDPV SDUDDUFKLYRV

DZN

(GLWRUGHIOXMRV 6WUHDPV SDUDDUFKLYRV

7DEOD$(GLWRUHVHQ81,;.

Grep
El comando grep (Globally look for a Regular Expression and Print) permite encontrar cada
ocurrencia de una palabra o frase en algn archivo de UNIX.Las opciones de este comando se ilustran
en la tabla A. 14.
Sed
El comando sed (Stream EDitor) permite realizar edicin de archivos, v.g. sed archivo.
Digitalizacin con propsito academico. Sistemas operativos

150

$31',&($81,;




23&,1

'(6&5,3&,1

F

0XHVWUDODFXHQWDGHODVOQHDVHQODVTXHKXERDSDUHDPLHQWR

L

,JQRUDPD\VFXODVPLQVFXODVGXUDQWHODFRPSDUDFLQ

O

0XHVWUDVORORVQRPEUHVGHDUFKLYRVHQORVTXHKD\DSDUHDPLHQWR

Q

3UHFHGHFDGDOQHDHQODTXHKD\DSDUHDPLHQRFRQHQPHURGHOQHDGHODUFKLYR

V

6XSULPHPHQVDMHVGHHUURU

9

'HVSOLHJDODVOQHDVHQODVTXHQRKD\DSDUHDPLHQWR

;
\

'HVSOLHJDVORDSDUHDPLHQWRVH[DFWRV VORFRQIJUHS 
,JQRUDPD\VFXODVPLQVFXODV

7DEOD$2SFLRQHVGHOFRPDQGRJUHS

A.5.2. El Editor vi

Es un editor de pantalla completa, de muy amplio uso en las instalaciones UNIX. Permite
la creacin y modificacin de archivos texto, no tiene capacidades de formateo. Trabaja
siempre sobre una copia del archivo en un buffer de edicin. Tiene bsicamente dos modos de
operacin:
x Modo Comando.- En el cul todos los teclazos son interpretados como comandos. Este es el
modo con el que se entra al vi.
x Modo Edicin.- En este modo todos los comandos se interpretan como texto. Para regresar al
modo comando se presiona ESC.
Tiene como caracterstica sobresaliente el poder realizar bsqueda y reemplazo de texto pudiendo
utilizar la caracterstica de apareamiento de patrones.
Movimiento en el Documento
Algunas teclas que se pueden usar en el modo comando para moverse en el archivo se indican
en la tabla A.15.
TECLAS MOVIMIENTO

TECLAS 029,0,(172





K)OHFKDL]TXLHUGD

8QFDUFWHUDODL]TXLHUGD

M)OHFKD$EDMR

8QDOQHDKDGDDEDMR

M)OHFKD$EDMR
)OHFKD'HUHFKD

8QDOQHDKDGDDUULED
8QFDUFWHUDODGHUHFKD

&WUO)$Y3J

8QDSDQWDOODKDGDDGHODQWH

&WUO%5H3J

8QDSDQWDOODKDFLDDWUV

&WUO'

0HGLDSDQWDOODKDFLDDEDMR

&WUO8

0HGLDSDQWDOODKDGDDUULED



6HPXHYHDODOQHD



6HPXHYHDOIQDOGHODUFKLYR


Z

6HPXHYHDOILQDOGHOUHQJOQ
6HPXHYHXQDSDODEUDKDFLDDGHODQWH





7DEOD$&RPDQGRVGHPRYLPLHQWRHQYL
Digitalizacin con propsito academico. Sistemas operativos

$+(55$0,(17$6'(0$1(-26'('$726 151


Edicin bsica en vi
Para entrar a editar un archivo se hace con: vi arch
Para agregar texto estando en modo comando se presiona: a despus de lo cul se debe teclear
el texto del archivo.
Para insertar texto se debe presionar i despus teclear e! texto a insertar.
Para abrir una nueva lnea despus de la posicin del cursor se presiona o para abrirla antes del
cursor se presiona O
Para borrar una lnea se presiona dd.
Para borrar hasta el fin de lnea se presiona d$ D
Para borrar una palabra se presiona dw
Para borrar un carcter se presiona x.
Para reemplazar un carcter se presiona r seguido del nuevo carcter.
Para entrar a modo reemplazo se presiona R
Para regresar al modo comando se debe presionar: ESC
Para salir grabando estando en modo comando se debe presionar :wq presionando ZZ
Para salir sin actualizar estando en modo comando, se presiona :q!

Bsqueda y Reemplazo
La caracterstica de bsqueda y reemplazo de vi permite realizar la edicin de documentos de
una forma ms fcil.
Estando en el modo comando y desear buscar una cadena se presiona: /textobuscado/ lo
cul localizar la siguiente ocurrencia hacia adelante de textobuscado. Para buscar otras
ocurrencias se puede usar n para buscar en la misma direccin de la bsqueda anterior N
para buscar en la direccin contraria a la bsqueda anterior. Si se desea buscar hacia atrs se
usa: Ptextobuscado?

Para realizar el reemplazo se hace de la forma siguiente:


:g/textobuscado/s//nuevotexto/g
Deshacer, repetir comandos
Para deshacer la operacin anterior basta con presionar; u Para repetir el ltimo comando
realizado se presiona:
Personalizacin del vi
Para ver la definicin actual de las variables del editor se ejecuta: :set all
Para personalizar los valores por omisin se debe crear un archivo $HOME/.exrc que contenga
los comandos de definicin del vi v.g.:
set directory=/u/juan/tmp
Permite definir el directorio donde se almacena el buffer de edicin temporal. Si el
sistema se cae y se desea recuperar el archivo que se estaba editando se debe hacer: vi -r
archivo

Digitalizacin con propsito academico. Sistemas operativos

152

$31',&($81,;

A.6. Herramientas de manejo de datos


A.6.1 El Comando find

Este comando permite en forma recursiva realizar operaciones sobre archivos que
cumplan cierto criterio especificado, la forma general del comando es:
find dedonde busca accin
v.g. find . -name m* -exec Is -1 { }\;
Para los archivos cuyo nombre empieza con m ejecuta el comando Is 1
find . -name hola -print
Para los archivos cuyo nombre es hola los muestra en la pantalla.
find . -name m \* -ok Is -1 { }\;
Para los archivos cuyo nombre empieza con m aplica en forma selectiva(pregunta y/n) el
comando Is 1

Algunas de las opciones del comando find son ilustradas en la tabla A. 16.
23&,1

'(6&5,3&,1

W\SHI

6HDSOLFDDDUFKLYRVRUGLQDULRV

W\SHG

6HDSOLFDDGLUHFWRULRV

VL]HQ

6ORORVDUFKLYRVPVJUDQGHVTXHQEORTXHV

VL]HQ

6ORORVDUFKLYRVPHQRUHVTXHQEORTXHV

PWLPH[

6ORORVDUFKLYRVPRGLILFDGRVKDFHPVGH[GDV

PWLPH[

6ORORVDUFKLYRVPRGLILFDGRVKDFHPHQRVGH[GDV

DPHSDWUQ
6ORORVQRPEUHVTXHDSDUHFHQFRQHOSDWUQLQGLFDGR
SHUPQXPHURRFWDO 6ORORVDUFKLYRVTXHDSDUHFHQFRQORVSHUPLVRVLQGLFDGRVSRUHOQPHURRFWDOGDGR
XVHUXVXDULR
6ORSDUDORVDUFKLYRVGHOXVXDULRLQGLFDGR

7DEOD$2SFLRQHVGHOFRPDQGRILQG

Si se desean especificar mltiples condiciones se debe tener presente lo siguiente:


Para especificar condiciones conectadas con AND(y) basta con ponerlas en secuencia.
Para especificar condiciones conectadas con OR(o) basta con separar las dos opciones con la
opcin: -o
Para realizar agrupacin de condiciones se deben usar parntesis usando: \( y \).
A.6.2. El Comando grep a detalle
Permite realizar bsquedas sobre las lneas de los archivos especificados, el patrn de
bsqueda se especifica como una expresin regular. La sintaxis es:
grep opciones expresin-regular archivos
La opcin -v despliega las lneas que no aparean.
Algunos de los metacaracteres de grep son indicados en la tabla A. 17.
A.6.3. El Comando cut
Este comando permite extraer porciones de texto de la entrada estndar y el resultado es
mandado a la salida estndar.
Digitalizacin con propsito academico. Sistemas operativos

$$,;:,1'2:6153






&$5&7(5

6,*1,),&$'2

A


3ULQFLSLRGHOLQHD

.
.*
D

 [-]

)LQGHOQHD
8QVORFDUFWHU
0OWLSOHVFDUDFWHUHV
&XDOTXLHUFDUFWHUHVSHFLILFDGR
&XDOTXLHUFDUFWHUGHOUDQJR

7DEOD$&DUDFWHUHVGHOFRPDQGR

JUHS

La sintaxis del comando es:


cut opcin archivos Se debe especificar por lo menos una de las siguientes opciones:
-c Para extraer caracteres.
-f Para extraer campos.
La opcin -c permite especificar el rango de caracteres a extraer:
cut-cl-12arch
Permite extraer los caracteres del 1 al 12 de cada lnea del arch especificado.
La opcin -f permite extraer el nmero especificado enseguida, los campos estn delimitados
por el carcter especificado despus de la opcin d
v.g.
cut -f2 -d: archivos
cut -fl,3 -d; archivos
A.6.4. El Comando dic
Permite desplegar las diferencias entre dos archivos. Las lneas que son diferentes. La sintaxis
es: diff opciones arch1 arch2 las lneas de arch1que necesitan cambiarse se preceden con un signo < las
lneas de arch2 que necesitan cambiarse se preceden con un
signo >
La opcin -b para tomar mltiples espacios como uno solo.
La opcin -e despliega solo lo que necesita cambiarse en arch2 para que sea igual a arch1.
Adems de desplegar las lneas diferentes en los archivos indica la accin que debe seguirse
para que sean iguales las lneas de los dos archivos, esta accin se indica con el formato: num1 accin
num2 donde num1 indica el nmero de lnea del arch1, num2 indica el nmero de lnea del arch2 y la
accin puede ser a(agregar) d(borrar) c(cambiar).
A.7 AIXwindows
A.7.1. Terminales virtuales
Anteriormente ya se comento el concepto de terminal virtual como la capacidad de tener el
equivalente a varias pantallas y dentro de cada una de ellas poder correr un proceso.

Digitalizacin con propsito academico. Sistemas operativos

154

$31',&($81,;

Este concepto permite trabajar con multitasking de una forma grfica y fcil de usar. De este
modo es posible tener un mejor control de los procesos que estn corriendo.
Para crear una nueva terminal virtual basta hacer: open sh y para eliminarla presionar:
Ctrl-D para cambiar de terminal virtual basta hacer Alt+Acton(siguiente) Shift+Action (anterior).
AIXwindos es un sistema de manejo de ventanas que es superior al concepto de terminal virtual debido
a que se puede estar viendo directamente la evolucin de mltiples procesos.
AIXwindows ofrece:
+ Mltiples ventanas simultneas.
+ Mltiples procesos en el fondo(foreground) simultneo.
+ Informacin grfica y texto en cada ventana.
+ Varios tipos de letra y estilos.
+ Ventanas traslapadas y escondidas.
+ Comparticin de la terminal con otras terminales virtuales.

A.7.2. Historia de Xwindows


Xwindows fue desarrollado como parte del proyecto Athena del MIT, basado en el sistema de
ventanas W de stanford, es de dominio pblico es posible sea el estndar IEEE-POSIX para manejo de
ventanas.

Dentro de los objetivos de diseo ms importantes de Xwindows estn:


1. Transparencia de RED.- Las aplicaciones de Xwindows corriendo en un CPU pueden mostrar la
salida sobre una pantalla conectada al mismo CPU o a otro CPU.
2. Independencia de Modelo y Vendedor.- Las aplicaciones de Xwindows se comunican con las
pantallas de acuerdo al protocolo X. De forma que cualquier despliegue que use dicho protocolo
se puede comunicar con la aplicacin de Xwindows.
Xwindows incluye una biblioteca para ser utilizada desde el lenguaje C esta es; xlib
A.7.3. Modelo cliente-servidor
Xwindows trabaja con un modelo CLIENTE -SERVIDOR. Las diversas aplicaciones son
clientes y existe un DISPLAY SERVER (Servidor de Despliegue) que recibe las peticiones de
los clientes y las presenta en la pantalla (Hardware). Dentro de los clientes tenemos
aixterm, xclock, mwm.
El mwm (Motif Window Manager) es un cliente XI 1 que permite ser configurado por el
usuario y soporta el uso del teclado y del ratn.
Para iniciar el servidor se realiza a travs del comando xinit (adems corre los clientes xclock y
aixterm).
x aixterm es el emulador de terminal.
x xclock es un cliente que despliega un reloj.
A.7.4. Salida de AIXWindows
Para salir de AIXwindow se presiona Ctrl-Alt-BackSpace

Digitalizacin con propsito academico. Sistemas operativos

$$,;:,1'2:6155

A.7.5. Ventana raz

La parte del fondo de la pantalla se define como la ventana raz (root window).
Sealndola es posible accesar el men raz. Desde el cul es posible crear nuevas ventanas,
poner al frente o al fondo una ventana, redibujar la pantalla, reiniciar el manejador de
ventanas(mwm).
A.7.6. Distribucin de una ventana
Una ventana est compuesta de las siguientes partes:
x rea de Borde.- Localizado alrededor de la ventana. Usando el ratn en esta rea es posible
redimensionar la ventana.
x rea de Ttulo.- Localizado dentro de la ventana en la parte superior. Usando el ratn en esta
rea es posible mover la ventana.
x Botn de Men de Ventana.- Localizado en la esquina superior izquierda dentro de la ventana.
Desde este men es posible mover, redimensionar, maximizar, minimizar y cerrarla ventana.
x Botn Minimizar.- Localizado a un lado del botn de Maximizar. Permite poner la ventana
como un icono.
x Botn Maximizar.- Localizado en la esquina superior derecha. Permite poner al mximo el
tamao de la ventana.
x rea de Men y de cliente.- Localizada dentro de la ventana. Es dependiente de la aplicacin
cliente que se est corriendo.
A.7.7. Manejo de teclado
Algunas de las combinaciones de tecla que son tiles son ilustradas en la tabla A. 18.

'(6&5,3&,1

$OW(VF

+DFHODVLJXLHQWHYHQWDQDODYHQWDQDDFWLYD

6KLIW(VF

$FWLYDHOPHQGHODYHQWDQD

DL[WHUP

,QLFLDXQQXHYRGLHQWHDL[WHUP

[FORFN

,QLFLDXQQXHYRFOLHQWH[FORFN

7DEOD$&RPDQGRVHQ;:LQGRZV

A.7.8. Manejo de AIXWindows en red


El modelo oliente-servidor de Xwindows permite trabajar en un ambiente de red de una forma
fcil. Cuando se inicia un cliente se puede especificar cul servidor deber ser usado. El cliente y el
servidor se comunican a travs del protocolo TCP/IP. De este modo el cliente y el servidor pueden estar
en sistemas separados que se comuniquen a travs de TCP/IP.
Para trabajar con clientes remotos se debe hacer lo siguiente:
x Iniciar cliente en el sistema! con: niciar AIXwindows en el sistemal con: xinit
x Permitir el acceso al sistema2 con: xhost +sistema2
Digitalizacin con propsito academico. Sistemas operativos

156

$31',&($81,;

Iniciar cliente en el sistema2 con:


env DISPLAY=sistemal:0.0 aixterm
NOTA: Como una alternativa al Xwindows se tiene el sistema NextStep de la compaa Next
que se puede usar dentro de las mquinas 1BM.
A.7.9. Personalizacin de clientes
Los clientes de AIXwindows son:
x
x
x
x
x
x
x

aixterm Emulador de Terminal de AIXwindows.


mwm Es el manejador de ventanas de OSF/Motif
xclock Es un cliente que corre un reloj en una ventana.
xcalc Es un cliente que corre una calculadora cientfica en una ventana.
bitmap Es un cliente editor de bitmap's.
xdt Es el escritorio(desktop) visual de AIXwindowsxopen Es una interface a terminales virtuales de AIXwindows.
aixterm

aixterm proporciona la emulacin de terminal para programas que no usan directamente


windows. Permite cortar y pegar texto entre ventanas. Para copiar texto al buffer se marca el
texto utilizando el botn izquierdo del ratn. Para recuperar el texto se utiliza el botn de
enmedio del ratn. Para ver el men del aixterm se presiona la tecla Ctri y el botn derecho
del ratn.
Parmetros de configuracin
Para ver las opciones de cualquier cliente basta con usar el nombre del cliente con las opciones:
-help -keywords. Los tipos de letras y colores que se pueden usar estn en los directorios
/usr/lpp/fonts y /usr/lib/Xl /rgb.
A.8. Sincronizacin / Comunicacin de Procesos
A.8.1 Procesos en UNIX
UNIX usa una instalacin de proceso simple pero poderosa que es muy visible para el usuario.
Todos los procesos en el sistema, excepto dos procesos bsicos, los crean comandos del programa de
usuario.
El sistema operativo UNIX reconoce un total de nueve estados de proceso; estos estn listados
en la tabla A-19.
El diagrama que describe esto es dado en la figura A.3.
Dentro de las caractersticas importantes tenemos:
o UNIX emplea dos estados Corriendo para indicar si el proceso se ejecuta en modo usuario o
en modo kerneL
o Se hace una distincin entre los dos estados: Listo para correr, en memoriay Adquisicin
por Prioridad. En esencia, estos son el mismo estado, como lo indica la lnea punteada que los
Digitalizacin con propsito academico. Sistemas operativos

$6,1&521,=$&,1&2081,&$&,1'(352&(626 157
(67$'2

'(6&5,3&,1

8VXDULRFRUULHQGR

(MHFXFLQHQPRGRXVXDULR

.HUQHOFRUULHQGR

(MHFXFLQHQPRGRNHUQH/

/LVWRSDUDFRUUHUHQPHPRULD
'XUPLHQGRHQPHPRULD

/LVWRSDUDFRUUHUWDQSURQWRFRPRHODVLJQDGRUGHO&38OHDVLJQHHO
1RVHHMHFXWDSRUHVWDUHVSHUDQGRDTXHRFXUUDXQHYHQWR(O
SURFHVRHVWHQPHPRULD


/LVWRSDUDFRUUHUHQGLVFR


(OSURFHVRHVWOLVWRSDUDFRUUHUSHURHOLQWHUFDPELDGRU VZDSSHU 
WLHQHTXHWUDHUORSULPHURDPHPRULD

(OSURFHVRHVWHVSHUDQGRODRFXUUHQFLDGHXQHYHQWR\
DGHPVHVWDHQGLVFR

'XUPLHQGRHQGLVFR

$GTXLVLFLQSRUSULRULGDG

&UHDGR

(OSURFHVRHVWOLVWRSDUDUHJUHVDUGHOPRGR.HUQHODOPRGRXVXDULR
SHURVHOHTXLWRHO&38 SRUSULRULGDG SDUDSODQLILFDUDRWURSURFHVR
(OSURFHVRHVWUHFLHQFUHDGR\QRHVWOLVWRSDUDFRUUHU

=RPELH

(SURFHVRWHUPLQRSHURGHMDLQIRUPDFLQTXHSXHGHVHUFRQVXOWDGD
SRUHOSURFHVRSDGUH

7DEOD$(VWDGRVGHSURFHVRVHQ81;.
Llamada a sistema
interrupcin

Zombie

Exit

Usuario

Regreso

Kernel corriendo

Adquisicin
por prioridad

Replanificacin
de proceso

Regreso
a modo
usuario

Adquisicin por prioridad

Sleep
Suficiente memoria

Duracin

en

Sale de disco

Duracin

en

Despertar

Listo

para

correr

en

i
Regreso a
memoria

Cread

Sale de disco

Despertar

Listo para correr en

 )LJXUD$'LDJUDPDGH(VWDGRVGH3URFHVRVHQ81,;
Digitalizacin con propsito academico. Sistemas operativos

No hay suficiente
memoria

158

$31',&($81,;

une. La distincin se hace para enfatizar la manera en que se entra al estado de Adquisicin
por prioridad. Cuando un proceso corre en el modo kernel (como resultado de una llamada de
supervisor, interrupcin de reloj, o interrupcin de E/S), llegar un momento en que el kernel
complete su trabajo y est preparado para regresar el control al programa de usuario. En este
punto, el kernel puede decidir darle preferencia a un proceso que est listo y es de mayor
prioridad el actual. En ese caso, el proceso en curso se mueve al estado de Adquisicin
por Prioridad.
La adquisicin por prioridad puede ocurrir slo cuando un proceso esta por moverse del modo
kernel al modo usuario. Mientras un proceso corre en el modo kernel, no puede ser desplazado. Esto
hace que UNIX no sea adecuado para procesamiento en tiempo real.

Procesos de sistema
Dos procesos son nicos en UNIX. El proceso O es un proceso especial que se crea cuando el
sistema es arrancado, este proceso es el intercambiador (swapper). Adems el proceso O produce el
proceso 1, llamado init. Los dems procesos del sistema tienen al proceso 1 como ancestro. Cuando un
usuario interactivo nuevo se registra en el sistema, el proceso 1 le crea un proceso de usuario. Despus,
el programa de usuario puede crear procesos hijos usando fork, cualquier aplicacin puede estar
formada por varios procesos.
Informacin de los procesos
Un proceso en UNIX es un conjunto bastante complejo de estructuras de datos que proporciona
al sistema operativo toda la informacin necesaria para manejar y despachar procesos. La tabla A.20.
presenta los elementos de la imagen de un proceso.
La tabla A.21 presenta una entrada de la tabla del proceso.
El rea de usuario, o rea U, contiene informacin adicional de control del proceso que necesita
el kernel slo cuando ejecuta en el contexto de este proceso, esto se indica en la tabla A.22.
A.8.2. Creacin de un proceso

La creacin de un proceso en UNIX se realiza mediante la llamada al kernel


denominada fork. Cuando un proceso ejecuta un fork, el sistema operativo ejecuta las
siguientes funciones:
1.
2.
3.

Asigna al nuevo proceso, una entrada en la tabla de procesos.


Asigna un identficador de proceso nico al proceso hijo.
Hace una copia de la imagen del proceso del padre, con excepcin de cualquier memoria
compartida (pues solo se utiliza la copia del padre por los hijos).
4. Aumenta los contadores de los archivos que posee el padre, para reflejar que un proceso
adicional ahora tambin posee esos archivos.
5. Asigna el proceso hijo al estado Listo para correr.
6. Regresa el nmero de identficador del hijo al proceso padre y un valor cero al proceso hijo
(tanto padre como hijo continan la ejecucin despus del fork).

Digitalizacin con propsito academico. Sistemas operativos

$6,1&521,=$&,1&2081,&$&,1'(352&(626 159
&217(;72

,7(0

'(6&5,3&,1

868$5,2

7H[WRGHOSURFHVR

,QWUXFFLRQHVGHPTXLQDVHMHFXWDEOHVGHOSURJUDPD

868$5,2

'DWRVGHOSURFHVR

'DWRVDFFHVLEOHVSRUHOSURJUDPDGHHVWHSURFHVR

868$5,2

6WDFNGHOXVXDULR

&RQWLHQHORVDUJXPHQWRVYDULDEOHVORFDOHV\DSXQWDGRUHV$ODV
IXQFLRQHVHMHFXWQGRVHHQPRGRXVXDULR

868$5,2

0HPRULDFRPSDUWLGD

/DPHPRULDFRPSDUWLGDFRQRWURVSURFHVRVXVDGDSDUDODFRPXQLFDFLQ
LQWHUSURFHVRV

5(*,6752

&RQWDGRUGHOSURJUDPD

'LUHFFLQGHODVLJXLHQWHLQVWUXFFLQDVHUHMHFXWDGDHVWDSXHGHVHUGHO
.HUQHORGHOSURJUDPDGHXVXDULR

5(*,6752

5HJLVWURGHHVWDGRGHO

7DPELQFRQRFLGRFRPRHOUHJLVWURGHODVEDQGHUDVFRQWLHQHOD

3URFHVDGRU

LQIRUPDFLQUHODWLYDDOHVWDGRGHOSURFHVDGRU

5(*,6752

$SXQWDGRUGH6WDFN

$SXQWDDOWRSHGHO6WDFN\DVHDHOGHOXVXDULRRGHONHUQHOGHSHQGLHQGR

5(*,6752
6,67(0$

5HJLVWURVGHSURSVLWRJHQHUDO &RQWLHQHODLQIRUPDFLQUHODWLYDDORVUHJLVWURVDGLGRQDOHVGHO
SURFHVDGRU
(QWUDGDHQODWDEODGHSURFHVRV 'HILQHHOHVWDGRGHXQSURFHVRDFFHVLEOHSRUHOVLVWHPDRSHUDWLYR

6,67(0$

UHD8 UHDGHXVXDULR 

GHOPRGRHQHOTXHVHHVWFRUULHQGR

,QIRUPDFLQGHFRQWUROTXHQHFHVLWDVHUDFFHVDGDSRUHOFRQWH[WRGHO
SURFHVR

6,67(0$

7DEODGHUHJLQGHSUHSURFHVR

'HILQHHOPDSHRGHODVGLUHFFLRQHVYLUWXDOHVDGLUHFFLRQHVUHDOHV
DGHPVGHFRQWHQHUORVSHUPLVRVGHDFFHVR VROROHFWXUDOHFWXUD
HVFULWXUD\OHFWXUDHMHFXGQ 

6WDFNGHO.HUQHO

6,67(0$

&RQWLHQHHOVWDFNGHO.HUQHOFXDQGRORVSURFHVRVVHHMHFXWDQHQPRGR
.HUQHO

7DEOD$,PJHQHVGHXQSURFHVR

ITEM

'(6&5,3&,1

(VWDGRGHOSURFHVR

'HILQHH HVWDGR DFWXDOGHOSURFHVR

$SXQWDGRUHV

$OUHDGHXVXDULR\ODPHPRULDGHOXVXDULR WH[WRGDWRVVWDFN 

7DPDRGHOSURFHVR

3HUPLWHGHILQLUHOHVSDFLRTXHVHGHEHDVLJQDUDOSURFHVR

LGHQWLILFDGRUGHOXVXDULR

(OLGHQWLILFDGRUGHOXVXDULRTXHFUHHOSURFHVR

,GHQWLILFDGRUHVGHSURFHVR

&RQWLHQHHOLGHQWLILFDGRUGHOSURFHVRSDGUH\GHOPLVPRSURFHVR

'HVFULSWRUGHOHYHQWR


7LHQHLPSRUWDQFLDFXDQGRHOSURFHVRHVWGXUPLHQGRHVSHUDQGRXQHYHQWRFXDQGRHO
HYHQWRRFXUUHH SURFHVRHVWUDQVIHULGRDOHVWDGROLVWRSDUDFRUUHQ

3ULRULGDG

1PHURXVDGRSRUHODVLJQDGRUGH&38SDUDUHDOL]DUODSODQLILFDFLQ

6HDOHV

/LVWDODVVHDOHVTXHKDQVLGRPDQGDGDVDOSURFHVR

7HPSRUL]DGRUHV
/LJD3 3OLQN 


8VDGRSDUDPDQGDUVHDOHVHQWUHSURFHVRV\OOHYDUHOWLHPSRGHHMHFXFLQGHOSURFHVR
$SXQWDGRUDOVLJXLHQWHSURFHVRHQODFRODGHOLVWRSDUDFRUUHUTXHVHUHMHFXWDGR WLHQH
VHQFLGRVLHOSURFHVRHVWOLVWRSDUDFRUUHU 

(VWDGRGHODPHPRULD

,QGLFDVLHOSURFHVRHVWHQPHPRULDSULQFLSDORHQGLVFR

7DEOD$(QWUDGDHQODWDEODGHSURFHVRV.

Digitalizacin con propsito academico. Sistemas operativos

160

$31',&($81,;

,7(0

'(6&5,3&,1

$SXQWDGRUDODWDEODGHOSURFHVR

,QGLFDODHQWUDGDTXHFRUUHVSRQGHDOUHD8

,GHQWLILFDGRUHVGHXVXDULR

,GHQWLILFDGRUHVGHXVXDULRGHORVSURFHVRV

7HPSRUL]DGRUHV

3DUDOOHYDUHOWLHPSRTXHORVSURFHVRVVHKDQHMHFXWDGRHQPRGR
XVXDULR\HQPRGRNHUQHO


$UUHJORPDQHMDGRUGHVHDOHV


3DUDFDGDWLSRGHVHDOTXHUHFLEDHOSURFHVRLQGLFDFRPRVHYDD
PDQHMDU LJQRUDUWHUPLQDURHMHFXWDUXQDUXWLQD 

7HUPLQDOGHFRQWURO
&DPSRGHHUURU

,QGLFDODWHUPLQDOGHHQWUDGDGHOSURFHVR
5HJLVWUDORVHUURUHVDOHMHFXWDUXQDOODPDGDDOVLVWHPD

9DORUGHUHJUHVR

&RQWLHQHHOUHVXOWDGRGHODVOODPDGDVDOVLVWHPD

3DUPHWURVGH(6

'HVFULEHODVFDUDFWHUVWLFDVSDUDUHDOL]DUWUDQVIHUHQFLDVFRQ

3DUPHWURVGHDUFKLYRV

/RVGLUHFWRULRVTXHGHILQHQHODPELHQWHGHOSURFHVR

7DEODGHGHVFULSWRUHVGHDUFKLYRVGHXVXDULR

/OHYDHOFRQWUROGHORVDUFKLYRVTXHKDDELHUWRHOXVXDULR

&DPSRVOPLWH
&DPSRVGHSHUPLVRV

5HVWULQJHHWDPDRGHXQSURFHVR\HOWDPDRGHORVDUFKLYRV
'HILQHQORVSHUPLVRVGHORVDUFKLYRVTXHHOSURFHVRFUHD

7DEOD$,QIRUPDFLQGHOUHD8GHXQSURFHVR

Todo esto se realiza en el modo kernel en el proceso padre. Cuando el kernel ha completado
estas funciones, el despachador (asignador del CPU) puede hacer alguna de las opciones siguientes:
1.

Seguir ejecutando el proceso padre. Regresa el control al modo usuario en el punto de la


llamada fork del proceso padre.
2. Transfiere el control al proceso hijo. El proceso hijo empieza la ejecucin en el mismo
punto en el cdigo que el proceso padre, es decir, en el regreso de la llamada al fork.
3. Transfiere el control a otro proceso. Los procesos padre e hijo se quedan en el estado listo
para correr.
Un punto importante es que padre e hijo ejecutan el mismo cdigo. La nica diferencia es el valor de
regreso del fork, si el valor es cero, entonces este es el proceso hijo y puede ejecutarse una llamada a un
programa apropiado para continuar la ejecucin. Si el valor no es cero, entonces este es el proceso
padre y puede continuar ia ejecucin del programa original.

A.9. Comunicacin Interprocesos


UNIX proporciona varios mecanismos para comunicacin y sincronizacin interprocesos,
los ms importantes son:
xTubos(Pipes).
xMensajes.
xMemoria compartida.
xSemforos.
xSeales.

Digitalizacin con propsito academico. Sistemas operativos

$&2081,&$&,1'(,17(5352&(626 161

Los pipes, los mensajes y la memoria compartida se usan para la comunicacin entre los procesos,
mientras que los semforos y las seales se usan para la sincronizacin entre procesos.
A.9.1. Pipes
Una de las caractersticas ms relevantes de UNIX es el concepto de PIPE. Desarrollado a partir del
concepto de corrutinas, un pipe es un buffer circular que permite a dos procesos comunicarse usando el
modelo productor / consumidor, esto es la primer informacin escrita por un proceso es la primera en
ser leda por el otro(PEPS o PIFO).
Cuando se crea un pipe, se le da un tamao fijo en bytes. Se manejan automticamente los casos de
LLENO y VACIO, es decir si se intenta escribir cuando est lleno se BLOQUEA al proceso y si se
intenta leer cuando est vaco se BLOQUE al proceso que quiso leer. Adems automticamente maneja
el sistema operativo la exclusin mutua, es decir solo un proceso a la vez accesa el PIPE.
Existen tres tipos de pipes; con nombre(tambin denominados FIEOS), sin nombre y los pipes de flujo
(stream pipes). Slo los procesos relacionados pueden compartir pipes sin nombre, mientras que los
procesos no relacionados pueden compartir slo tubos con nombre, los stream pipes pueden ser con
nombre o sin nombre.
Pipes sin Nombre
La forma de crear un pipe es a travs de la funcin: int pipe (int filedes [2]) La funcin regresa
dos decriptores de archivos, filedes[0] est abierto para lectura y filedes[ 1] est abierto para escritura.
Desde el punto de vista de un proceso un pipe puede ser visto como un archivo al que se le escribe
usando filedes[I] y se lee de el usando filedes[OJ. Esto puede ver en la grfica A.4.

3URFHVRGHXVXDULR




IG>@IG>@





NHUQHO





3LSH




)LJXUD$8QSLSHVLQQRPEUH

Digitalizacin con propsito academico. Sistemas operativos

162

$31',&($81,;

Realmente no es muy til que el mismo proceso lea y escriba del pipe, lo que es ms til es utilizar el
pipe para permitir comunicar a un proceso padre con un hijo, v.gr. si el proceso padre despus de crear
el pipe realiza un fork se tendr la estructura de comunicacin ilustrada en la figura A.5.


3DGUH

+LMR

SS

3S

IG>@IG>@

IG>@IG>@






3LSH





3LSH




.HUQHO

)LJXUD$&RPXQLFDFLQHQWUHXQSURFHVRSDGUH\XQSURFHVRKLMRDWUDYVGHXQSLSH.

Con frecuencia se utilizan las funciones popen y pclose para facilitar el manejo de los pipes.
El formato de la funcin popen es:
FILE *popen(const char *cmdstring, const char *type)
y realiza un fork seguido de un exec para ejecutar el comando cmdstring, si type es r el
apuntador de archivo queda conectado a la salida estndar de cmdstring si type es w el apuntador de
archivo queda conectado a la entrada estndar de cmdstring.
El formato de la funcin pelse es el siguiente:
int pclose(FILE *fp)
su funcin es cerrar la E/S estndar asociada al cmdstring.
Pipes con nombre (FIFOs)
Los pipes con nombre pueden ser usados entre procesos relacionados siempre y cuando un
ancestro comn haya creado el pipe. Utilizando los pipes(fifos) es posible que procesos no relacionados
puedan intercambiar datos.
El formato para crear un pipe con nombre o fifo es el siguiente:
int mkfifo (const char *pathname, mode-t mode)

Digitalizacin con propsito academico. Sistemas operativos

$&2081,&$&,1'(,17(5352&(626 163

La creacin de un fifo es similar a la creacin de un archivo. Una vez creado el fifo se puede abrir
usando la funcin open (las funciones normales de manejo de archivos como:
cise, read, write, unlink,... funcionan con los fifos).
Al abrir el fifo y no especificar la bandera de nobloqueo (0-NONBLOCK) puede ocurrir lo siguiente:
* Si se abre en modo solo lectura (read-only) se bloquea al proceso hasta que otro proceso abra el fifo
para escritura.
* Si se abre en modo solo escritura (write-only) se bloquea al proceso hasta que otro proceso abra el
fifo para lectura.
Al abrir el fifo y especificar la bandera de nobloqueo (0-NONBLOCK) puede ocurrir lo siguiente:
* Si se abre en modo solo lectura (read-only) inmediatamente continua el proceso.
* Si se abre en modo solo escritura (write-only) regresa el error ENXIO si no existe un proceso que
haya abierto el fifo para lectura.
Si se escribe sobre un fifo que no est abierto para lectura por ningn proceso se genera la seal
SIGPIPE, y cuando el ltimo escritor cierra el FIFO se genera un FIN DE ARCHlVO(eof) para el
lector del fifo.
Es comn que se tengan mltiples escritores para un fifo por lo cul es importante conservar las
escrituras atmicas, esto se logra a travs de la constante PIPE-BUF que especifica la cantidad mxima
de datos que debe ser escrita en forma atmica, si todos los escritores escriben menos que esta cantidad
se garantiza que las escrituras son atmicas.
Los fifos se utilizan principalmente para:
* Comunicar comandos sin necesidad de utilizar archivos temporales.
* Aplicaciones cliente-servidor para pasar datos entre los clientes y el servidor.
La grfica A.6 ilustra la forma de manejar los fifos para aplicaciones cliente-servidor.
En este caso los clientes se comunican con el SERVIDOR a travs del fifo conocido por todos y
pueden mandarle al servidor su identificador de proceso, el proceso SERVIDOR se comunica con un
CLIENTE especfico creando un FIFO particular para ese cliente, de forma tal que a travs de los fifos
especficos el SERVIDOR puede mandar mensajes que sern ledos por los clientes(que saben por su
identificador de que fifo leer).
PIPEs FuIl-Duplex o PIPEs de Flujo(Stream Pipes)
Un stream pipe puede ser sin nombre o con nombre pero tiene la caracterstica de ser bidireccional, esto
se ilustra en la figura A.7.
La operacin para crear un stream pipe es s-pipe, una caracterstica importante de los stream pipes es
que en general son ms rpidos que el uso de colas de mensajes.
Caractersticas comunes entre mensaje, semforos y memoria compartida
En UNIX existen similitudes entre los tres mecanismos de comunicacin/sincronizacin mensajes,
semforos y memoria compartida, cada estructura IPC (InterProcess Conununica-tion) es referenciada
con un identificador de tipo integerno negativo. Para usar el mecanismo deseado lo nico que se
requiere es conocer su identificador.

Digitalizacin con propsito academico. Sistemas operativos

164

$31',&($81,;

6HUYLGRU

),)2

),)2

(63&7(,

(63&7(1

),)2
&RQRFLGR
SRUWRGRV

&OLHQWH &7(, 

...
...

&OLHQWH &7(1 

)LJXUD$),)2VSDUDLPSOHPHQWDUXQDDSOLFDFLQFOLHQWHVHUYLGRU


3URFHVRGH
XVXDULR

IG>@IG>@

NHUQHO

6WUHDPSLSH

)LJXUD$'LDJUDPDGHOXVRGHXQ6WUHDPSLSH
Digitalizacin con propsito academico. Sistemas operativos

$&2081,&$&,1'(,17(5352&(626 165

Cada mecanismo tiene asociado una estructura de datos que lo define, esta estructura es creada
utilizando las llamadas msgget, shmget o semget en esta llamada se debe especificar una llave (key)
cuyo tipo de datos es key-t y est definido en < sys/types.h >, esta llave (key) es utilizada para crear su
identificador dentro del kernel.
Existen varios formas en que los procesos servidor y cliente utilicen la misma estructura IPC:
x El servidor puede crear una nueva estructura IPC especificando la llave IPC-PRIVATE y
almacenar el identificador regresado (por ejemplo en un archivo) en donde el cliente puede leer
dicho identificador. La desventaja de esto es que se debe usar el sistema de archivos para
realizar la comunicacin.
x Una forma muy utilizada es que el padre realice la creacin de la estructura especificando IPCPRIVATE y despus realice un fork heredando a su hijo el identificador del IPC.
Para referirse a una estructura IPC ya creada nunca se debe especificar la llave IPC-PRIVATE, pues se
creara una nueva estructura, en vez de esto se debe usar el identificador de la estructura IPC y utilizar
solo las operaciones de manipulacin y no de creacin. Para crear una nueva estructura siempre se debe
utilizar una llave con IPC-CREAT haciendo OR con IPC-EXCL.
Estructura de permisos
Con cada estructura IPC est asociada una estructura que define los permisos y el propietario:
struct ipc-perm {
uid_t uid; /* Ident del usuario propietario*/ gid-t gid; /* Ident del
grupo del propietario*/
uid-t cuid; /* Ident del usuario creador */
gid-t cgid; /* Ident del grupo del creador */
mode-t mode; /* Modo de acceso*/
u-long seq; /* Nmero de Secuencia del slot */
key-t key; /* Llave */
}
Todos los elementos de la estructura son imcializados cuando se crea la estructura IPC excepto seq. Se
pueden modificar despus los campos de uid, gid y mode a travs de las operaciones msgcti, semctl o
shmcti, para que un proceso pueda modificar esto, el proceso debe ser el creador de la estructura IPC o
el superusuario. Los valores de mode especifican los permisos de la estructura IPC se dan en la tabla
A.23.
3HUPLVR

0HQVDMHV 6HPIRURV

0HPRULDFRPSDUWLGD

/HFWXUD
(VFULWXUD

06*5
06*:

6+05
6+0:

6(05
6(0:

7DEOD$3HUPLVRVGHODHVWUXFWXUD,3&

Estos valores pueden ser definidos a nivel usuario, grupo y los otros.

Digitalizacin con propsito academico. Sistemas operativos

166

$31',&($81,;

Un problema fundamental de las estructuras IPC es que son validos en todo el sistema y la
estructura no es borrada al terminar el proceso. A menos que se borre especficamente a travs de un
llamado a ipcrm, en cambio con los pipes al terminar el ltimo proceso que hace referencia a l se borra
el pipe.

Mensajes
Un mensaje es un bloque de texto con tipo. UNIX proporciona las operaciones msgget, msgcti,
msgsnd y msgrcv para realizar el paso de mensajes. A cada proceso, se le asocia una cola de mensajes,
la cual funciona como un buzn.
El que enva el mensaje especifica el tipo con cada mensaje enviado y el receptor puede usarlo
como un criterio de seleccin. El receptor puede recuperar mensajes completos de acuerdo al orden de
llegada(PEPS) o de acuerdo al tipo. Un proceso se suspender cuando trata de enviar un mensaje a una
cola llena. Un proceso tambin se suspender cuando trata de recibir un mensaje de una cola vaca. Si
un proceso intenta leer un mensaje de un cierto tipo y no se puede hacer, el proceso no es suspendido.
Cada cola de mensajes tiene la estructura de datos siguiente:
struct msqid-ds{
struct ipc-perm msgperm; /* Estructura de Permisos */
struct msg *msg-first; /* Apuntador al Primer mensaje */
struct msg *msgJast; /* Apuntador al Ultimo mensaje */
ulong msg-cbytes; /* Nmero de Bytes Actual en la cola */
ulong msg-qnum; /* Nmero de mensajes Actual en la cola */
ulong msg-qbytes; /* Nmero mximo de bytes de la cola */
pid-t msg-Jspid; /* Ident. del lt. proceso hizo msgsndQ */
pid-t msgJrpid; /* Ident. del lt. proceso hizo msgrcvQ */
time-t msg-stime; /* Hora del lt. msgsnd() */
timeJ msg-rtime; /* Hora del lt. msgrcvQ */
time-t msg-ctime; /* Hora del lt. cambio */
}

Algunas constantes que definen la operacin de las colas de mensajes especificando el


tamao en bytes y en nmero de mensajes son: MSGMAX, MSGMNB, MSGMNI y
MSGTQL.
msgget El formato de la operacin msgget es:
int msgget (key-t key, int flag);

Dependiendo de los valores especificados en key se crea una nueva estructura de mensaje
o se conecta a una creada previamente. Si se crea una nueva estructura se inicializan los valores
de msqid-ds de la siguiente forma:
x La estructura ipc-perm es inicializada y el campo mode de esta estructura se define de
acuerdo a los valores de flag.
x Los campos msg-qnum, msgJspid, msg-irpid, insg-stime, msg-Jlime son puestos en cero.
x El campo msg-ctime es puesto a la hora actual del sistema.

Digitalizacin con propsito academico. Sistemas operativos

$&2081,&$&,1'(,17(5352&(626 167

x El valor de msg-qbytes se define de acuerdo al limite del sistema.


Si la operacin msgget es exitosa regrese un identificador entero no-negativo que define la cola de los
mensajes, si no es exitosa la operacin regrese un -1.
msgctl La operacin msgcti regresa O si es exitosa y -1 de otra forma, la sintaxis es la siguiente:
int msgcti (int msqid, int cmd, struct msqid-ds *buf);
El valor de cmd define la operacin que se realizar, esto se indica en la tabla A.24.
9$/25GHFPG '(6&5,3&,1
,3&67$7

/HHODHVWUXFWXUDLGHQWLILFDGDSRUPVJLG\ODDOPDFHQDHQODHVWUXFWXUDDSXQWDGDSRUEXI

,3&B6(7

'HILQHORVFDPSRVPVJBSHUPXLGPVJSHUPJLGPVJSHUPXLG\PVJBTE\WHVGHODFROD
GHPHQVDMHVGHILQLGDSRUPVJLGWRPDQGRORVYDORUHVGHODHVWUXFWXUDDSXQWDGDSRUEXI
3DUDTXHXQSURFHVRSXHGDUHDOL]DUHVWRSHUDFLQHOLGHQWLILFDGRUGHOSURFHVRGHEHVHU
PVJBSHUPFXLGPVJBSHUPXLGRXQSURFHVRVXSHUXVXDULR6ORHOSURFHVR
VXSHUXVXDULRSXHGHLQFUHPHQWDUHOYDORUGHPVJBTE\WHV

,3&B50'

%RUUDODFRODGHPHQVDMHVGHOVLVWHPD\FXDOTXLHUPHQVDMHHQHOOD/RVSURFHVRVTXH
HVWQXVDQGRWRGDYDODFRODUHFLELUQXQHUURU(,'50HQODVLJXLHQWHRSHUDFLQTXHVH
UHDOLFH(VWDRSHUDFLQVORVHSXHGHUHDOL]DUSRUXQSURFHVRFX\R,GHQWLILFDGRU
FRUUHVSRQGDDDPVJBSHUPFXLGPVJBSHUPXLGRSRUHOSURFHVRVXSHUXVXDULR



7DEOD$&RPDQGRVGHODRSHUDFLQPVJFWL.

msgsnd La operacin msgsnd tiene la sintaxis siguiente:


int msgsnd(int msgmsqid, const void *ptr, size_t nbytes, int flag);
Regresando O si es exitoso y -1 sino.
Cada mensaje queda formado por un long integer que define el tipo del mensaje, el nmero que
define la longitud del mensaje(nbytes) y los datos del mensaje, ptr apunta a un long integer que
contiene un valor positivo que define el tipo del mensaje seguido del mensaje en s, como ejemplo si
los mensajes son de tamao 512 se tiene:
struct mensaje{
long tipo; /* Valor positivo del tipo de mensaje)*/
char conten; /* Datos del mensaje definidos por nbytes */
El valor de tipo puede ser usado por el receptor para leer los mensaje en orden diferente al de
entrada (PEPS).
Si se especifica IPC_NOWAIT y se excede el nmero de mensajes o el tamao en bytes en la
cola msgsnd regresa inmediatamente indicando el error EAGAIN.
Si no se especifica IPC_NOWAIT y se excede el nmero de mensajes o el tamao en bytes de
la cola se bloque al proceso hasta que:
x Haya espacio para el mensaje.
x La cola sea borrada del sistema, con lo que se regresa el error EIDRM.
x Se reciba una seal, con lo cul se regresa el error EINTR.
Digitalizacin con propsito academico. Sistemas operativos

168

$31',&($81,;

msgrcv La sintaxis de msgrcv es:


int msgrcv(int msqid,void *ptr, size_t nbytes,
long type, int flag);
Regresa O si es exitosa y -1 de otra forma.
Si se especific en flag MSG_NOERROR se regresa el mensaje truncado en caso de que el
mensaje ledo sea ms grande que n-bytes (sin indicar error). Si no se especifico en flag
MSG_NOERROR y el mensaje es ms grande que n_bytes se regresa el error E2BIG y el mensaje
queda en la cola(no es retirado).
El valor de type permite especificar que mensaje recibir, las opciones se ilustran en la tabla
A.25.
9$/25'(W\SH

'(6&5,3&,1



6HUHJUHVDHOSULPHUPHQVDMHGHODFROD

!

6HUHJUHVDHOSULPHUPHQVDMHFX\RYDORUGHOWLSRVHDLJXDODOHVSHFLILFDGR



(OSULPHUPHQVDMHFX\RYDORUGHOWLSRVHDPHQRURLJXDODOYDORUDEVROXWR
GHOHVSHFLILFDGRHVHOTXHVHUHJUHVD}

7DEOD$2SFLRQHVSDUDHVSHFLILFDUTXHPHQVDMHUHFLELU

Si se especifica IPC-NOWAIT y se especifica un tipo de mensaje(diferente de cero), se regresa


el error ENOMSG al no existir ningn mensaje del tipo requerido.
Si no se especifica IPC-NOWAIT y no hay disponible ningn mensaje con el tipo requerido se
bloque al proceso hasta que:
x Un mensaje del tipo especificado est disponible.
x La cola sea borrada del sistema y se regresa el error EIDRM.
x Se mande una seal, con lo cul se regresa el error de EINTR.
Memoria compartida
La forma ms rpida de comunicacin interprocesos que proporciona UNIX es la memoria
compartida, la cual es un bloque comn de memoria virtual, compartida por mltiples procesos.
Los procesos leen y escriben en la memoria compartida usando las mismas instrucciones de
mquina que usan para leer y escribir en otras partes de su espacio de memoria virtual. El permiso
para un proceso es solo leer o leer-escribir, determinado con base en cada proceso. La exclusin
mutua no es soportada directamente por la memoria compartida y debera ser soportada por otro
mecanismo por ejemplo usando semforos.
El kernel mantiene la siguiente estructura para cada rea de memoria compartida:
struct shnid ds {
struct ipc_perm shm_perm; /* Permisos */
struct anon_map *shm_map; /* Apuntador del kernel */
int shm_segsz; /* Tamao del segmento en bytes */
ushort shm_lkcnt; /* # veces que se ha bloquedo el segmento */
pid_t shmJpid; /* Ident. del proceso de lt. shmopQ */
pid_t shm-cpid; /* Ident. del proceso creador */
ulong shm_nattch; /* # actual de enlaces a mem. compartida */
Digitalizacin con propsito academico. Sistemas operativos

$&2081,&$&,1'(,17(5352&(626 169

ulong shm_cnattch; /* Solo usado por shminfo */


time_t shm_atime; /* Hora de ltimo enlace(attach) */
time_t shm_dtime; /* Hora de ltimo desenlace(dettach) */
time_t shm_ctime; /* Hora de ltimo cambio. */
}
Las constantes SHMMAX, SHMMIN, SHMMNI y SHMMSEG definen los tamaos de los
segmentos y el nmero de ellos.
shmget La funcin para obtener un identificador de memoria compartida es shmget, cuya sintaxis es:
int shmget(key_t key, int size, int flag);
Cuando se crea un nuevo segmento se inicializan los siguientes elementos de shmid_ds:
x Se inicializa la estructura ipc_perm como ya se defini para los mensajes y el valor de
ipc_perm.mode son definidos por el valor de flag define los permisos de lectura y escritura para
los usuario, grupos y los otros.
x Los campos shmJpid, shm_nattch, shm_atime y shm-dtime son puestos en cero.
x El campo shm_ctime se define con la hora actual.
El valor de size define el tamao mnimo del segmento deseado. Si se hace referencia a un
segmento ya creado(desde un cliente) se puede especificar size en cero.
shmctl La operacin shmetl permite controlar diversas opciones de la memoria compartida, la
sintaxis de esta operacin es :
int shmctl(int shmid, int cmd, struct shmid-ds *buf) El parmetro especifica alguno de los valores
ilustrados en la tabla A.26.
9$/25

'(6&5,3&,1

,3&67$7

/HHODHVWUXFWXUDVKPLGVSDUDHOVHJPHQWRLQGLFDGRJXDUGQGRORHQODHVWUXFWXUDDSXQWDGDSRU
EXI
'HILQHORVFDPSRVVKPSHUPXLGVKPSHUPJLGVKPSHUPPRGHGHDFXHUGRDORVYDORUHV
GHILQLGRVHQODHVWUXFWXUDDSXQWDGDSRUEXI(VWHFRPDQGRVRORORSXHGHHMHFXWDUHOSURFHVRFRQ
LGHQWLILFDGRULJXDODVKPBSHUPXLGVKPSHUPFXLGRHOSURFHVRVXSHUXVXDULR
%RUUD HO VHJPHQWR GH PHPRULD FRPSDUWLGD GHW VLVWHPD (O VHJPHQWR QR VH ERUUD KDVWD TXH HO
OWLPRSURFHVRHQOD]DGRDOUHDGHPHPRULDFRPSDUWLGDVHGHVHQODFHSHURQRVHSHUPLWHQQXHYRV
HQODFHV3DUDTXHVHSXHGDUHDOL]DUHOFRPDQGRHOSURFHVRTXHORHMHFXWDGHEHWHQHULGHQWLILFDGRU
LJXDODVKPASHUPXLGVKPSHUPFXLGRHOSURFHVRVXSHUXVXDULR

,3&6(7

,3&50'

6+0/2&.

%ORTXHD HO VHJPHQWR GH PHPRULD FRPSDUWLGD (VWH FRPDQGR VOR VH SXHGH HMHFXWDU SRU HO
VXSHUXVXDULR

6+0--1/2&. 'HVEORTXHDHOVHJPHQWRGHPHPRULDFRPSDUWLGD(VWHFRPDQGRVRORORSXHGHUHDOL]DUHOSURFHVR
VXSHUXVXDULR

7DEOD$9DORUHVGHFPGGHQWURGHVKPFWO.

shmat Una vez que se ha creado el segmento de memoria compartida un proceso se enlaza a l con:
Digitalizacin con propsito academico. Sistemas operativos

170

$31',&($81,;

void *shmat (int shmid, void *add, int flag)


La direccin a la cul se enlaza el proceso que llama depende de el argumento addr y del valor
de flag:
x Si addr es cero el segmento al que se enlaza es la primer direcin disponible seleccionada por
el kernel.(Esto es lo recomendado).
x Si addr no es cero y no se especifica SHM_RND, se enlaza al segmento de acuerdo a la
direccin especificada.
x Si addr no es cero y se especifica SHM_RND(de ROUND, redondear), se conecta al addr
redondendolo de acuerdo a la alineacin definida(normal mente mltiplo de dos, esto se
define por SHMLBA)
shmdt La operacin shmdt permite desenlazarse de un rea de memoria compartida (slo se borra con
shmctl) la sintaxis de esta operacin es:
int shmdt(void *addr);
El valor de addr debe ser el que se regreso en la llamada a shmat.
Semforos
Las llamadas al sistema de semforos en el sistema UNIX son una generalizacin de las
primitivas P y V. Pues pueden realizarse varias operaciones de manera simultnea y el aumento y
decremento de las operaciones pueden ser valores mayores que uno. El kernel hace todas las
operaciones requeridas en forma atmica; ningn otro proceso puede accesar el semforo sino hasta
que se terminan todas las operaciones.
Un semforo consta de los siguientes elementos:
x
x
x
x

Valor actual del semforo.


ID del ltimo proceso que oper en el semforo.
Nmero de procesos esperando que el valor del semforo sea mayor que el valor actual.
Nmero de procesos esperando que el valor del semforo sea 0.

Asociadas con el semforo, estn las colas de procesos suspendidos en ese semforo.
En realidad, los semforos se crean en conjuntos y un conjunto consta de uno o ms semforos.
Existe una llamada de sistema semctl que permite establecer todos los valores del semforo en el
conjunto, al mismo tiempo. Adems, existe una llamada de sistema semop que toma como argumento
una lista de operaciones del semforo, cada una definida sobre uno de los semforos en un conjunto.
Cuando se hace esta llamada, el kernel ejecuta las operaciones indicadas una a la vez. Para cada
operacin, la funcin real la especifica el valor sem_op.

Las posibilidades son las siguientes:


x Si sem_op es positivo, el kernel aumenta el valor del semforo y despierta todos los procesos
esperando que el valor del semforo aumente.
x Si sem_op es O, el kernel comprueba el valor del semforo. Si es O continua con las otras
operaciones en la lista; de otra manera, aumenta el nmero de procesos esperando que este
semforo sea O y suspende el proceso en caso de que el valor del semforo sea igual a 0.
Digitalizacin con propsito academico. Sistemas operativos

$&2081,&$&,1'(,17(5352&(626 171

x Si sem_op es negativo y su valor absoluto es menor que o igual al valor del semforo, el kernel
aade sem_op (un numero negativo) al valor del semforo. Si el resultado es O, el kernel
despierta todos los procesos esperando que el valor del semforo sea igual a O.
Esta generalizacin del semforo proporciona mucha flexibilidad en la sincronizacin y comunicacin
de los procesos.
semget La operacin semget permite realizar la creacin del semforo pero no su inicializacin (para
ello se debe usar la operacin semctl). Y se debe tomar en cuenta que el semforo no es borrado cuando
el proceso que lo creo termina, para ello es necesario hacerlo a travs de semctl.
Internamente se maneja la siguiente estructura de los semforos:
struct semid_ds {
struct ipc_perm sem_perm; /* Definicin de permisos */
struct sem *sem_base; /* Apuntador al primer semforo del conjunto */
ushort sem_nsems; /* # de semforos en el conjunto */
time_t sem_otime; /* Hora de ltima operacin semop() */
time_t sem_ctime; /* Hora de ltima modificacin */
}
sem_base es un apuntador manejado en el kernel que apunta a un arreglo de estructuras sem:
struct sem {
ushort semval; /* Valor del semforo, siempre MAYOR O IGUAL A CERO */
pid_t sempid; /* Ident. del proceso que hizo lt. operacin */
ushort semcnt; /* # de procesos esperando semval > valor actual*/
ushort semzcnt; /* # de procesos esperando que semval = O */
}
Algunas constantes que definen la operacin de los semforos respecto al nmero mximo de
semforos en el conjunto y sus valores son: SEMVMX, SEMAEM, SEMMNI, SEMMNS, SEMMSL,
SEMMNU. SEMUME y SEMOPN.
La sintaxis de la operacin semget es:
int semget(key_t key, int nsems, int flag);
Al crear un semforo se inicializan los siguiente tems de la estructura semid_ds:
x
x
x
x

Se inicializa la estructura ipc_perm, definindose el campo de mode de acuerdo a flag.


sem_otime es puesto en cero.
sem_ctime se pone en la hora actual.
sem_nsems toma el valor de nsems.

Si se hace referencia a un semforo previamente creado se especifica nsems en cero.


semctl La operacin que permite entre otras cosas realizar la inicializacin es semctl, sus sintaxis es:
int semctl (int semid, int semnum, int cmd, unin semun arg);

Digitalizacin con propsito academico. Sistemas operativos

172

$31',&($81,;

El ltimo argumento est definido como:


unin semun {
int val; /* Especificado para SETVAL */
struct semid_ds *buf; /* Especificado para IPC_STAT y IPC_SET */
ushort *array; /* Especificado para GETALL y SETALL */
Los valores de la tabla ?? definen los comandos que se deben especificar en cmd.( En el caso de
referirse a un solo semforo se debe especificar un nmero entre O y nsems-1)

&20$1'2 '(6&5,3&,1
,3&B7$7

/HHODHVWUXFWXUDGHVHPLGGV\ODDOPDFHQDHQODHVWUXFWXUDDSXQWDGDSRUDUJEXI

,3&B6(7

'HILQHORVFDPSRVVHPBSHUPXLGVHPBSHUPJLG\VHPBSHUQUPRGHGHDFXHUGRDYDORUHVTXHVHWLHQHQHQOD
HVWUXFWXUDDSXQWDGDSRUDUJEXW3DUDTXHVHSXHGDUHDOL]DUHVWDRSHUDFLQHOLGHQWLILFDGRUGHOSURFHVRGHEH
FRLQFLGLUFRQVHPBSHUPXcGVHPSHUPFLGRVHUHOVXSHUXVXDULR

,3&B50,'

%RUUDHOFRQMXQWRGHVHPIRURVGHOVLVWHPDHOERUUDGRHVLQPHGLDWR&XDOTXLHUSURFHVRTXHHVWXVDQGRHO
VHPIRURUHFLEHXQHUURU(,'50FXDQGRLQWHQWHUHDOL]DUODVLJXLHQWHRSHUDFLQVREUHHOFRQMXQWRGHVHPIRURV
3DUDTXHVHSXHGDUHDOL]DUHVWDRSHUDFLQHOLGHQWLILFDGRUGHOSURFHVRGHEHFRLQFLGLUFRQVHPBSHUPXLG
VHPBSHUPGGRVHUHOVXSHUXVXDULR

*(79$/

5HJUHVDHOYDORUGHVHPYDOSDUDHOVHPIRURHVSHFLILFDGRSRUVHPQXP

6(79$/

'HILQHHOYDORUGHVHPYDOSDUDHOVHPIRURLQGLFDGRSRUVHPQXP(OYDORUHVHVSHFLILFDGRHQDUJYDO

*(73,'

5HJUHVHHYDORUGHVHPSLGSDUDHOVHPIRURHVSHFLILFDGRSRUVHPQXP

*(71&17

5HJUHVDHOYDORUGHVHPQFQWSDUDHOVHPIRURHVSHFLILFDGRSRUVHPQXP

*(7=&17

5HJUHVDHOYDORUGHVHP]FQWSDUDHOVHPIRURHVSHFLILFDGRSRUVHPQXP

*(7$//

/HHWRGRVORVYDORUHVGHORVVHPIRURVHQHOFRQMXQWR\ORVDOPDFHQDHQHODUUHJORDSXQWDGRSRUDUJDUUD\

6(7$//

'HILQHWRGRVORVYDORUHVGHORVVHPIRURVHQHOFRQMXQWRWRPDQGRORVYDORUHVDSXQWDGRVSRUDUJDUUD\

7DEOD$2SFLRQHVGHFPGHQHOFRPDQGRVHPFWO.

semop La operacin semop realiza en forma atmica un arreglo de operaciones sobre un conjunto de
semforos, la sintaxis de esta operacin es:
int semop(int semid, struct sembuf semoparray[], size_t nops);
El argumento semoparray es un apuntador a un arreglo de operaciones de semforos. La estructura
sembuf es:
struct sembuf {
ushort sem_num; /* # de miembro en el conjunto (O,..., nsems-1 */
short sem_op; /* Operacin (negativo, cero o positivo */
short sem-flg; /* 1PC_NOWAIT, SEM_UNDO */
El argumento nops especifica el nmero de elementos y a su vez de operaciones en el arreglo.
Si el valor de sem-op es positivo esto equivale a una operacin V. El valor de sem_op es
sumado al valor del semforo. Si se especifico SEM_UNDO el valor de sem_op es restado del valor de
ajuste del proceso de dicho semforo.
Digitalizacin con propsito academico. Sistemas operativos

$&2081,&$&,1'(,17(5352&(626 173

Si el valor de sem_op es negativo esto equivale a una operacin P. Si el valor del semforo es
MAYOR O IGUAL al valor absoluto de sem_op, el valor absoluto de sem_op es restado del valor del
semforo. Esto garantiza que el valor resultante de el semforo es mayor o igual a cero. Si la bandera
SEM_UNDO es especificada el valor absoluto de sem_op es sumado al valor de ajuste del proceso de
dicho semforo. S el valor de sem_op es negativo pero el valor del semforo es menor que el valor
absoluto de sem_op puede ocurrir lo siguiente:
 Si se especifico IPC_NOWAIT se regresa inmediatamente indicando el error EAGAIN.
 Si no se especifico IPC_NOWAIT, e] valor de semncnt es incrementado y el proceso es
bloqueado hasta que pase algo de los siguiente:


El valor del semforo llegue ha ser mayor o igual al valor absoluto de sem_op
(ocasionado por que otro(s) proceso(s) realizo operaciones semop con valores positivos). En
este momento el valor de semncnt es decrementado, el valor absoluto de sem_op es restado del
valor del semforo. Si se especifico SEM-UNDO el valor absoluto de sem_op es sumado al
valor de ajuste del proceso respecto a ese semforo.

El semforo sea borrado del sistema con lo que se regresa el error ERMID

Se reciba una seal, con lo cul se decrementar el valor de semncnt y se regresa el error
EINTR.

Si sem_op es cero indica que se desea esperar hasta que el valor del semforo
sea cero. Si el valor del semforo es cero se regresa inmediatamente. Si el valor del semforo no
es cero puede ocurrir lo siguiente:
-

Si se especifico IPC_NOWAIT, se regresa inmediatamente indicando el


error EAGAIN.

Si no se especifico IPC_NOWAIT, se incrementa el valor de semzcnt y


se suspende el proceso hasta que ocurra algo de lo siguiente:




El valor del semforo sea igual a cero. Entonces semzcnt es decrementado.


El semforo sea borrado del sistema, regresando el error ERMID.
Se recibe una seal, decrementandose el valor de semzcnt regresando el error

EINTR.
NOTA: La atomicidad de la operacin semop implica que se realizan todas las operaciones
indicadas o no se realiza ninguna.
El valor de ajuste tiene su aplicacin cuando un proceso termina (exit) sin liberar el semforo,
de forma tal que se aplica el valor de ajuste(es decir que se forza la realizacin
de operaciones V pendientes).
Una alternativa para el uso de los semforos para manejo de exclusin mutua es el manejar el
bloqueo de registros (record locking), pero los semforos son ms rpidos que el bloqueo de los
registros.

Digitalizacin con propsito academico. Sistemas operativos

APNDICE B
Java

B.l. Introduccin
Este apndice contiene un resumen general de Java con puntos bsicos del lenguaje, que
facilitar el aprendizaje a aquellas personas que desean aprender o que estn iniciado el camino hacia el
creciente mundo de Java.
Desde su lanzamiento en 1995, la plataforma Java ha sido la tecnologa qu ms ha sido
adoptada por la Industria en los ltimos aos. Desde un contexto mixto de Software y Hardware, la
tecnologa Java puede ser concebida como un conjunto de atributos, que no son nicos de la tecnologa,
pero la manera en como estos se combinan hace de Java una tecnologa altamente recomendable para la
Industria y la computacin dentro de las Empresas [74], vase la Figura B.1.
Desde otra perspectiva, Sun Microsystems define a Java como:
Un lenguaje simple, orientado a objetos, distribuido, interpretado, robusto, seguro, de
arquitectura neutral, portable, de alto desempeo, multi hilos y dinmico.
Un poco pretencioso de parte de Sun, aunque en realidad Java cumple con estas caractersticas.
x Orientado a Objectos: Java es un lenguaje orientado a objectos, ya que permite utilizar todas las
caractersticas de este paradigma, como clases, objectos, herencia, medularidad, reutilizacin de
cdigo, etc.
x Interpretado: en lugar de generar cdigo nativo de mquina, el compilador de Java genera bytecode para la Mquina Virtual de Java (Java Virtual Machine).
x Portable y de Arquitectura Neutral: Los programas de Java son compilados a una arquitectura
nuetral en un formato de Byte-Code, por lo que una aplicacin de Java puede ejecutarse sobre
cualquier sistema, siempre y cuando este tenga la Mquina Virtual de Java.
x Dinmico: Las clases pueden ser cargadas dinmicamente en tiempo

174
Digitalizacin con propsito academico. Sistemas operativos

175

$31',&(%-$9$

0RGHORGH
6HJXULGDG

3RUWDELOLGDG

$FFHVR
DO:HE

2EMHWRV-DYD

'HVDUUROOR
5SLGR





7HFQRORJD
-DYD




Figura B.1. Tecnologa Java.



x Distribuido: Bsicamente por la capacidad de Java de soportar operaciones sobre red de alto
nivel. Esta caracterstica permite a Java bajar y ejecutar cdigo atravez de Internet.
x Simple: Ya que es fcil de aprender, y adems la semejanza con C , permite que los usuarios no
tengan muchos problemas para adaptarse a Java.
x Multi Hilos: Java soporta el manejo de mltiples hilos de ejecucin que pueden manejar
diferentes tareas.
B.2. Historia
En el ao de 1991 Sun Microsystems inici un proyecto corporativo de investigacin
denominado "Green", el cual sin ser su objetivo principal se convirti en el desarrollo de un lenguaje
similar a C y C+4-, que inicialmente fue bautizado como "Oak" por su creador. James Gosling. Java,
fue el nombre que algunos de los participantes en el proyecto acordaron asignarle al nuevo lenguaje,
tiempo despus. Algunos meses despus el proyecto Green sufri dificultades, a tal grado que era
posible que Sun cancelara el proyecto, debido a que las circunstancias que originaron su creacin
haban cambiado. De pronto en 1993 el Worid Wide Web incremento de forma importante su
popularidad, por lo que Sun vio nuevas oportunidades para Java, en el desarrollo de pginas Web con
contenido dinmico, esto por supuesto permiti que el proyecto continuara.
En 1995, Sun decidi lanzar su producto al mercado dentro de una Conferencia. Totalmente en
contra de sus expectativas el corporativo se encontr con un inters inmediato por parte del mercado,
en su mayor parte, debido a la fuerza que en ese entonces ya haba adquiro el Worid Wide Web a nivel
mundial. Java entonces se convirti en el lenguaje, que a diferencia de otros no surgi como lenguaje
acadmico o como el lenguaje desarrollado por un grupo pequeo de personas para su uso personal,
sino fue creado como consecuencia

Digitalizacin con propsito academico. Sistemas operativos

%',)(5(1&,$6(175(-$9$<& 176

del desarrollo de otra tecnologa emergente de Internet, enfocada a la parte comercial y de negocios, el
Worid Wide Web. [75].
B.3. Diferencias entre Java y C
La semejanza entre Java y C es muy grande, lo cual facilita mas el aprendizaje de Java para un
programador de C. Aun as existen algunas diferencias importantes de mencionar.
B.3.1. Estructura del programa
Un programa en Java esta formado por una o mas clases, cada una de las cuales es compilada a
byte-code, archivo de tipo .class el cual es ejecutable para la Mquina Virtual de Java. Por lo menos
alguna de ests clases debe definir el mtodo main () dentro de ella, convirtindose en la clase principal
que inicia el programa.
Todo programa o aplicacin de Java debe tener una funcin main O construida de la siguiente
manera:
public static void main(String args)
x public: define que el mtodo main puede ser llamado por cualquier objeto.
x static: indica que el mtodo main es una mtodo de la clase.
x void: muy semejante en C, indica que el mtodo main no regresa ningn valor.
Para ejecutar un programa, primero se debe generar el byte-code, para despus ejecutar el
interprete Java seguido del nombre de la clase que contiene la funcin main (), omitiendo la extensin
.class. Por otro lado se encuentran los applets de Java, que es importante mencionar no son
aplicaciones, que puedan ser ejecutadas de la forma mencionada anteriormente. Un applet es una clase
de Java que puede ser ejecutada por otra aplicacin de Java, Navegador de Internet o con el
visualizador de applets. [76].
B.3.2. Argumentos
El nico argumento que el mtodo main () recibe es un arreglo de cadenas de caracteres, en
donde la cantidad total de argumentos esta dada por el tamao del arreglo (args.length). Para Java el
primer argumento es aquel que aparezca en la lnea de comando despus del nombre de la clase, y asi
sucesivamente separados por un espacio en blanco.
B.3.3. Valores de salida en un programa
Debido a que el mtodo mainO en Java debe ser declarado como void, un programa en Java no
podr regresar valores de salida con un retum al final del mtodo main, por lo que el programador
deber invocar el mtodo System. exit ().
B.3.4. Estatuto import
El estatuto import es utilizado en Java para hacer accesibles los paquetes de clases que trae por
omisin, adems de facilitar la escritura del cdigo. Muy similar al include
Digitalizacin con propsito academico. Sistemas operativos

177

$31',&(%-$9$

utilizado en C. Es importante mencionar que los estatutos import deben aparecer en el tope del cdigo y
antes de cualquier declaracin de la primera clase o interface. Existen dos formas de utilizarlo:
x En primera hacer accesible una clase de un paquete en especial, para que en vez de escribir j
ava. til. Vector cada vez que se desee utilizar la clase, agregando import java. til. Vector, solo
se tendr que hacer referencia a la clase como Vector.
x Hace accesible todas las clases de un paquete, para no tener que definirlas una por una, por
ejemplo import. awt. *.
B.3.5. Caracteres para comentarios
Java define dos tipos de caracteres para comentarios:
Una sola linea: //
Mltiples lineas; empieza con /* para la primera linea y termina con */
B.3.6. Constantes
Para definir una constante en Java esta debe ser declarada como f inal y su valor debe ser
asignado al momento de que se defina la variable. #deine es el equivalente en C para definir
constantes de tipo static final en Java. Por ejemplo static final int KM = 1000;
B.3.7. Tipos de datos
A diferencia de C, Java define tamaos estrictos para los tipos de datos. En C un tipo de dato int
puede ser de 16, 32 o 64 bits, y un char puede ser con signo o sin signo. A menudo las variables en C
tienen basura dentro de su valor, Java tiene la caracterstica de definir valores por omisin en la
inicializacin.
7LSR

&RQWHQLGR

7DPDR

HQWHURFRQVLJQR

9DORUSRU
L L


VKRUW
LQW

HQWHURFRQVLJQR

ELWV

ELWV

ORQJ

HQWHURFRQ VLJQR

ELWV

IORDW

,(((SXQFRIORWDQWH



ELWV

GRXEOH

,(((SXQWRIORWDQWH



ELWV

ERROHDQ WUXHRIDOVH

IDOVH

ELW

FKDU
E\WH

?X


ELWV
ELWV

FDUFWHUGH8QLFRGH
HQWHURFRQVLJQR


7DEOD%,7LSRVGHGDWRVHQ-DYD

B.3.8. Coleccin de basura


Para los programadores de C este termin puede sonar algo fuera de lo comn, debido a que
estn acostumbrados a preocuparse por crear objetos, para despus liberar la memoria

Digitalizacin con propsito academico. Sistemas operativos

%352*5$0$&,1(1-$9$178

que estos ocupaban. En Java se usa la tcnica de coleccin de basura para detectar objectos que no
estn mas en uso y liberarlos. Es por eso que no existe algo equivalente al comando free O de C, la
tcnica de colleccin de basura se encarga de ese trabajo. Para la creacin de objectos en Java se utiliza
la palabra reservada new, equivalente a raalloc () de C.
B.3.9. Apuntadores
Los apuntadores no existen en Java, por lo que la manipulacin de punteros y direcciones de
memoria no esta permitida, ya que la referenciacin a objetos como asignacin de variables, elementos
de arreglos o argumentos pasados a mtodos, es manejada automticamente mediante referencias
implcitas.
B.3.10. Strings
Los Strings en Java no son cadenas de caracteres terminados con un cracter nulo ('\0') como en C, por
lo que Java casi lo define como tipo de dato primitivo, pero en realidad son instancias de la clase java.
lang. String. Una caracterstica curiosa de los Strings, es que no se pueden realizar operaciones de
modificacin sobre ellos, por lo que se tiene que hacer uso de la clase StringBuffer para hacerlo, y
despus regresarlo a tipo String.
B.3.11. Arreglos
En Java el lmite de un arreglo es delimitado de forma muy estricta, debido a esta caracterstica
cualquier intento de leer mas all del tamao del arreglo, resulta en un error de compilacin o en
tiempo de ejecucin. Por esta razn para hacer referencia a un Arreglo en Java, se debe recurrir a
referenciacin implcita, no a aritmtica de puntos.
B.4. Programacin en Java
Ya que Java es un lenguaje orientado a objetos, en esta seccin hablaremos un poco del paradigma
orientado a objetos y de algunos conceptos bsicos que es recomendable analizar antes de empezar a
programar.
La programacin orientada a objetos no tiene una definicin concreta, por lo que mencionaremos
conceptos, que le ayudaran a conceptualizar el paradigma orientado a objetos.
B.4.1. Objeto
Los objetos de software son modelados en base a los objetos reales, que como estos tambin
cuentan con estados (variables) y comportamientos (mtodos). [77].

Digitalizacin con propsito academico. Sistemas operativos

179

$31',&(%-$9$

B.4.2. Clase
En la vida diaria constantemente estamos en contacto con objetos del mismo tipo que
comparten caractersticas similares. Una clase es un conjunto de datos y mtodos que operan sobre los
datos y comparten caractersticas de un objeto en especfico. [781].
En la Figura B.2 se muestra una clase, formada por variables y mtodos de instancia.

0WRGRV
9DULDEOHV

Figura B.2. Una clase.


En el contexto de la programacin orientada a objetos, podemos decir que un Objeto Alumno en
particular es una instancia de la clase de objetos denominado Alumno, sin embargo el estado
(variables) es independiente y puede variar con respecto a otros alumnos. Los Alumnos poseen estados
o variables (responsabilidad, participacin, calificacin, etc...) y comportamientos o mtodos (hacer
tarea, estudiar, etc.) en comn. Aplicando lo anterior, se puede crear una clase alumno que contiene
diferentes variables de instancia que contienen la responsabilidad, calificacin, etc., de cada objeto
Alumno. Por otro lado la clase declara e implementa mtodos de instancia que permiten al alumno
estudiar, asistir a grupos de discusin, etc., vase la Figura B.3.
+DFHU
7DUHDV

*UXSRV
GH'LVFXVLQ
&DOLILFDFLQ

3DUWLFLSDFLQ
5HVSRQVDELOLGDG
(VWXGLDU

$VLVWLUD
&ODVHV

Figura B.3. Clase alumno.


B.4.3. Mtodo
Empleado en la programacin orientada a objetos como la implementacin de Procedimiento y
Funciones utilizadas en el lenguaje C.
B.4.4. Instancia
Considerando que la clase es una representacin abstracta y general de un objeto, una instancia
es la representacin concreta de la clase, vase Figura B.4.
Digitalizacin con propsito academico. Sistemas operativos

%$3/,&$&,21(6<$33/(76180

&UFXOR
&ODVH

&UFXOR

&UFXOR
$EVWUDFWR

&UFXOR
&RQFUHWR

)LJXUD%,QVWDQFLDVGHXQDFODVH
&ODVH$

&ODVH%

&ODVH&

&ODVH(

&ODVH'

&ODVH)

)LJXUD%-HUDUTXDGHFODVHV

B.4.5. Herencia
Es un trmino muy importante dentro de la programacin orientada a objetos, se encarga de
organizar las clases de manera jerrquica con reglas muy estrictas, esto permite a la clase inferior
(subclase) heredar todos los mtodos y variables de la clase padre (superclase).
En la Figura B.5 se muestra un ejemplo de la jerarqua de clases, en donde:
xLas clases C y D, son subclases de B.
xLa clase B es superclase de C y D.
xLa clase B es subclase de A.
xLa clase A es superclase de B y E.
B.5. Aplicaciones y Applets
Existen dos tipos de programas en Java:
Applet: Es un programa Java que se ejecuta por medio de un Visualizador Web en la mquina
del cliente. A diferencia de un apliacin el applet depende de un Visualizador
Digitalizacin con propsito academico. Sistemas operativos

181

$31',&(%-$9$

Web que soporte Java para su ejecucin. Todo applet debe de implementar por lo uno y mas de
los mtodos: init, start y paint.
Aplicaciones: Es un programa Java independiente, esto quiere decir que no necesita de un
Visualizador Web para ejecutarse. Se pueden crear toda clase de aplicaciones posibles, como si se
estuviera programando en un lenguaje convencional como C, Pascal, Visula Basic, etc. Curiosamente
el Navegador HotJava de Sun es una aplicacin de Java. Cualquier aplicacin de Java debe de
implementar por lo menos el mtodo main.
B.5.1. Cmo crear o editar un programa
Como para muchos de los lenguajes existentes, un programa Java puede ser creado o editado
con un editor de texto sencillo que guarde los archivos en ASCII y sin caracteres de formato. Es
importante mencionar que el compilador de Java por convencin acepta archivos con extensin .java,
por lo que cualquier programa que cree debe tener esta extensin.
Windows: NotePad o Edit de MS-DOS.
Unix: pico, vi o asedit.
B.5.2. Cmo compilar un programa
Ya sea que se trate de una aplicacin o de un applet, o si se encuentra en Windows o Unix, para
compilar un programa Java, solo debe estar en el subdirectorio donde se encuentra el programa Java y
teclear lo siguiente:
javac {nombre del programa}
Por Ejemplo:
javac ProgramaJava.java
Despus de compilar un programa Java sin errores el resultado es un archivo. class dentro del
mismo subdirectorio que el cdigo fuente. Lo que contiene la clase es un bytecode de Java, que es un
cdigo de plataforma independiente, para ser interpretado por la Mquina Virtual de Java.
B.5.3. Cmo ejecutar una aplicacin
Tanto para la plataforma Windows o Unix, es el mismo comando. Una vez que ya se creo el
programa Java, se debe teclear lo siguiente:
java [nombre de la clase}
Por ejemplo:
java ProgramaJava
El argumento para el interprete de Java es el nombre de la clase que se desea ejecutar, no el
nombre del archivo, es decir que se debe de omitir la extensin. Es importante que escriba exactamente
el nombre de la clase, ya que el interprete de Java es sensible a maysculas / minsculas.

Digitalizacin con propsito academico. Sistemas operativos

%$3/,&$&,21(6<$33/(76182

B.5.4. Como ejecutar un Applet


Para ejecutar un applet, debe compilar primero el programa Java, para despus cargar el archivo HTML
(pgina Web) que hace referencia al applet, dentro de un Visualizador Web que soporte applets de
Java, este puede ser Netscape, Explorer o Hotlava. Para esto debe indicar al Visualizador la ruta y
nombre completo donde creo el archivo HTML.
Existe la posibilidad de ejecutar un applet por medio de una aplicacin llamada appletviewer, que trae
incluida el JDK (Java Development Kit), y se debe teclear lo siguiente:
appletviewer (ruta y nombre del archivo html)
Por ejemplo:
appletviewer file;/ejeiaplos/AppletJava
B.5.5. Mtodos bsicos de un Applet
init; Inicializa el applet cuando se carga por primera vez. En este proceso se crean los objetos y
la configuracin inicial de variables.
start: Ya inicializado un applet, el arranque e sel siguiente paso. Si un applet fue detenido, para
cambiarse a otra pgina, cuando se regrese al applet, este arranca de nuevo. Este proceso se puede
repetir varias veces durante el ciclo de vida de un applet, a diferencia de la inicializacin que solo
sucede una vez.
stop; La detencin sucede principalmente cuando se abandona la pgina donde se encuentra el applet,
en este momento se suspende la ejecucin de los hilos, para despus volverlos a arrancar cuando se
visualice el applet de nuevo.
destroy: Elimina y limpia todos los hilos de ejecucin antes de que el applet sea liberado o de que el
Visualizador lo termine. Por lo general este mtodo no es usado a menos que recursos que se hayan
utilizado necesiten ser liberados, pero es recomendable utilizarlo.
B.5.6. Ejemplo de una Aplicacin
El ejemplo que se muestra a continuacin es un ejemplo muy sencillo de una aplicacin, que
tiene el propsito de mostrar algunos de los fundamentos de Java como:
x
x
x
x
x
x

Instanciacin de clases.
Condicional if y switch.
Ciclos for y while.
Manejo de excepcionesMtodos
Manejo de Argumentos.

ProgramaJava.java
El ejemplo recibe dos argumentos, el primero una cadena de caracteres (string) y el segundo un
nmero entero. Como resultado produce la impresin en pantalla de la cadena de caracteres, tantas
veces como el segundo argumento. Por ejemplo si se ejecuta el programa de la siguiente forma java
ProgramaJava Hola 3, deber desplegar lo siguente:

Digitalizacin con propsito academico. Sistemas operativos

183

$31',&(%-$9$

HOLA
HOLA
HOLA
Usted mand imprimir el mensaje un nmero impar de veces.
1 import java.til. Vector;
En este ejemplo slo utilzaremos la clase Vector(), por lo que en vez de importar todo el paquete
completo, slo elegimos la clase Vector().
2 public class Pro grama Java { Encabezado del programa, define el nombre de la clase.
3 static String mensaje;
4 static int veces;
Declaracin de variables globales, en este caso son estticas debido a que son referenciadas por
el mtodo main() que tambin es esttico.
5 public Programa Java () {
6 Vector mensajes = new Vector();
Inicializacin e instanciacin de una clase Vector.
7 for(int i=0; i < veces; i++) {
Sintaxis: for(inicializaci6n; condicin; incremento o decremento).
8mensajes.addElement(mensaje.toUpperCase());
Agrega el texto en maysculas que se recibi como argumento al Vector, tantas veces lo defina
el segundo argumento.
9
}
10 Imprime("Usted mando imprimir el mensaje un numero"+EsPar(veces)+"de veces");
Manda llamar el mtodo EsPar para calcular si es par o impar el segundo argumento.
11 while(veces > 0) {
Sintaxis: while(condicin)
12 Imprime((String)mensajes.elementAt(veces-1));
Imprime uno por uno todos los elementos del Vector, ejecutando un cast de valores tipo Objeto
que regresa el Vector a String.
13 eces;
Decrementa en uno la variable;
14 }
15 }
16 public static void main(String[] args) { Implementacin del mtodo main.
17 try {
Inicia el rango del programa en donde se cacharn excepciones.
18 if(args.length==2) {
Verifica si los argumentos que esta recibiendo la clase son 2.
19 mensaje = new String(args[0] );
Almacena el primer argumento dentro de una variable de tipo String.
20
veces = Integer.parselnt(args[l]);

Digitalizacin con propsito academico. Sistemas operativos

%$3/,&$&,21(6<$33/(76184

Convierte el segundo argumento a un entero vlido si el argumento no es un entero vlido


genera una excepcin.
21 ProgramaJava programaJava = new Programa Java();
Genera una nueva instancia de la clase ProgramaJava.
22 } else {
23 throw new Exception(El numero de parmetros es incorrecto);
S el nmero de argumentos es diferente de 2, genera una excepcin.
24 }
25 } catch (Exception e) {
Captura las excepciones generadas y las imprime en pantalla.
26 Imprime(e.toString());
27 }
28 }
29 public static void Imprime (String msg) { Mtodo que recibe como argumento un String y lo
despliega en pantalla.
30 System.out. println(msg);
31 }
32 public String EsParCint num) {
Mtodo que recibe como argumento un entero, para procesarlo y regresar un String.
33 Sring es = new String();
Genera una nueva instancia de la clase String.
34 int res = num%2;
Calcula el residuo del argumento recibido.
35 switch(res) {
Asigna el valor a la variable res dependiendo el valor del residuo.
36
case 0: es = "par";
37
break;
38
case 1: es = "impar";
39
break;
40
}
41
retum es;
42
}
43 }
Cdigo fuente de programaJava.java
import java.til.Vector;
public class ProgramaJava {
static String mensaje;
static int veces;
public PrograJiiaJava() {
Vector mensajes = new Vector();
for(int i=0; i < veces; i++) {

Digitalizacin con propsito academico. Sistemas operativos

185$31',&(%-$9$
mensaj es. addElemeut (mensaj e. toUpperCase () ) ;
}
Imprime ("Usted mando imprimir el mensaje un numero" +EsPar(veces)+ "de
vecesn);
while(veces > 0) {
Imprime ( (Strin,g)meD.saj es. elementAt (veces-1) ) ;
Veces---;
}
}
public static void main(String[] args) {
try {
if(args.length==2) {
mensaje - nev String(args[0]);
veces = Integer.parselnt(args[l3);
Pro grama Java programaJava = new ProgramaJavaO;
} else {
throv new Exception("El numero de parmetros es incorrecto");
}
} catch, (Exception. e) {
Imprime (e, toStringO) ;
}
}
public static void Imprime(String msg) {
System.out.println(msg);
}
public S-tring EsPar(int num) {
String es == nev String();
int res = num/,2;
switcli(res) {
case 0: es = "par";
break;
case 1: es = "impar";
break;
}
return es;
}
}
B.5.7. Ejemplo de un Applet
El applet que se muestra a continuacin, implementa dos reas de texto, la primera editable y la
segunda no editable. Todo aquel texto que se escriba dentro de la primera rea

Digitalizacin con propsito academico. Sistemas operativos

%$3/,&$&,21(6<$33/(76186

de texto, se copiar a la segunda despus de oprimir el botn Copiar, El botn Limpiar borra el
contenido de las dos reas de texto.
Programa AppletJava.java
import j ava.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class AppletJava extends Applet {
Panel Panel_ditable;
Panel Panel_oEditable;
Panel Main;
Label Etiqueta_ditable;
Label Etiqueta_NoEditable;
TextArea Texto_Editable;
TextArea Texto_NoEditable;
Button Boton_Copiar;
Button Boton_Limpiar;
public void INIT()
Construye();
}
public void Construye() {
Etiqueta-Editable = new Label("EDITABLE",Label.CENTER);
Texto_Editable = new TextArea();
Panel_Editable = new Panel (new BorderLayout()) ;
Panel_Editable. add(Etiqueta_Editable ,BorderLayout. NORTH);
Panel_Editable. add (Texto_Editable, BorderLayout. CENTER);
Etiqueta_NoEditable = new Label("NO EDITABLE",Label.CENTER);
Texto_NoEditable = new TextArea() ;
Texto_NoEditable.setEditable(false);
Panel_NoEditable = new PaneKnew BorderLayout());
Panel_NoEditable. add(Etiqueta_NoEditable ,BorderLayout. NORTH);
Panel_NoEditable. add(Texto-NoEditable, BorderLayout. CENTER) ;
Main = new Panel(new GridLayout(2,D);
Main.add(Panel_Editable) ;
Main.add(Panel-NoEditable);
Boton_Copiar = new Button("Copiar");
Boton_Copiar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
Copia();
}
});
BotorL_Limpiar = new Button.(Limpiar) ;
Botn _Limpiar.addActionListener (new ActionListener () {

Digitalizacin con propsito academico. Sistemas operativos

187$31',&(%-$9$
public void actionPerfornied(ActionEvent e) {
Limpia() ;
}
}) ;
th.is. setLayout (new BorderLayout () ) ;
this.add(Botoii--Linipiar, BorderLayout. NORTH);
this. add (Main,BorderLayout. CENTER) ;
this.add(Boton-Copiar,BorderLayout.SOUTH);
this. setSize (400,400) ;
}
public void Copia() {
Texto NoEditable.setText( );
Texto NoEditable. setText (Texto Editable.getText () ) ;
}
public void Limpia() {
Texto Editable. setText ( );
Texto NoEditable.setText( );
}
}
B.5.7Archivo AppletJava.html
<HTML>
<HEAD>
<TITLE>AppletJava</TITLE>
</HEAD>
<BODY>
<APPLET CODE=ApletJava WIDTH=400 HEIGHT=400>
</APPLET>
</BODY>
</HTML>

B.6. Hilos
Que estudiante sentado en la mesa del comedor, en su vida no ha tenido el deseo de hacer los
problemas de Mecnica, leer el artculo de valores en Mxico y Amrica Latina, ver su serie de
televisin favorita y estudiar para su examen final de Ecuaciones Diferenciales, todo al mismo tiempo.
Por imposible que parezca, este tipo de situaciones suceden en el mundo real, tal vez menos
complicadas que la anterior o porqu no, aun mas difciles. Un ejemplo claro, es la rutina comn, que
realizamos al manejar, en donde se puede llegar a la situacin de dar vuelta, cambiar de velocidad,
tener cuidado de no pegarle al carro que esta mal estacionado en la esquina y observar alrededor para
verificar que ningn despistado quiera cruzar la calle, todo al mismo tiempo. En el mundo de la
computacin, a menudo
Digitalizacin con propsito academico. Sistemas operativos

%+,/26188

las computadoras personales se enfrentan al mismo reto, de enviar un correo electrnico, imprimir un
documento, compilar un programa y bajar un programa de la Internet, al mismo tiempo. Despus de tan
largo ejemplo, podemos inferir que la concurrencia es importante para nuestras vidas, a pesar de esto
muchos lenguajes de programacin, no brindan la facilidad de implementar actividades concurrentes.
En este aspecto Java brinda al programador un conjunto de primitivas, donde puede especificar que sus
aplicaciones contengas hilos de ejecucin (clase Thread), y la implementacin de programacin multi
hilos (multithreading), donde a cada hilo se le designa una parte del programa la cual es ejecutada
concurrentemente con otros hilos. La definicin de un hilo entonces, puede ser una seccin de cdigo
ejecutado independientemente de otros hilos dentro de un mismo programa.
La clase Thread es un hilo de ejecucin en un programa, en donde la mquina vitual de Java permite la
ejecucin de hilos concurrentemente dentro de una aplicacin. Cada hilo tiene una prioridad, en donde
los hilos con mayor prioridad son ejecutados preferentemente que aquellos con menor prioridad. En un
programa ejecutado por un hilo se crea una nueva instancia del objeto Thread, este hilo tiene
inicialmente la misma prioridad que aquel hilo que lo creo.
Cuando se ejecuta una aplicacin, la maquina virtual crea un hilo que tpicamente llama al mtodo
main, de aqui en adelante la maquina virtual sigue ejecutando hilos hasta que:
x
x

El mtodo exit de la clase Runtime sea llamado.


Todos los hilos hayan sido eliminados, ya sea por terminar de ejecutar el mtodo run o
por la llamada al mtodo stop.

B.6.1. Constructores
x public Thread(String NombreHilo) : que construye un hilo cuyo nombre es NombreHilo.
x public Thread() : construye un hilo cuyo nombre es "Thread"+n, donde n es un nmero entero,
por ejemplo Thread4,Thread5, etc.
El trabajo que un Thread debe realizar se encuentra definido dentro del mtodo run, aunque
explcitamente no se hace una llamada a este mtodo, cuando un programa inicializa la ejecucin de un
hilo hace una llamada al mtodo start, que a su vez hace la llamada el mtodo run. [79]
El siguiente cdigo crea un hilo y lo ejecuta.
Thread hilo = new Thread();
hilo.start()
B.6.2. Mtodos
Los mtodos que se mencionan a continuacin no son todos los que posee la clase Thread, pero
si los mas importantes.
start

Digitalizacin con propsito academico. Sistemas operativos

189$31',&(%-$9$
Inicializa la ejecucin del hilo y la Mquina Virtual de Java llama al mtodo run del hilo.
run
Si la construccin del hilo fue hecha usando un objeto ejecutable Runnable, entonces este mtodo del
objeto Runnable es llamado; si este no es el caso, este mtodo no hace nada.
seelp
Permite dormir al hilo, por una cantidad de milisegundos. La excepcin que genera puede ser debido a
que otro hilo a interrumpido este hilo.
stop
Fuerza a un hilo a parar independientemente de lo que este ejecutando.
Interrupt
Interrumpe el hilo.
Isinterrupted
Verifica si el hilo ha sido interrumpido.
destroy
Destruye el hilo, sin desbloquear cualquiera de los monitores que este haya bloqueado.
IsAlive
Verifica si el hilo todava esta vivo. Todo hilo se mantiene vivo mientras haya sido inicial izado y no
haya muerto.
suspend
Suspende el hilo. Si el hilo esta vivo suspende cualquier trabajo que este ejecutando hasta que sea
reiniciado.
resume
Reinicia un hilo suspendido. Si el hilo esta vivo pero suspendido, es reiniciado y permite que continu
su ejecucin.
Yield
El hilo que esta siendo ejecutado es detenido temporalmente y permite a otros hilos ejecutarse.
B.6.3. Ejemplo de Threads
El ejemplo que se muestra a continuacin es una aplicacin que muestra la forma de como
implementar hilos. Cada uno de los 5 hilos en la aplicacin imprime en pantalla su nombre, despus de
dormirse un tiempo dado entre O y 3 segundos. [79]
Es importante mencionar que el ejemplo esta dividi en dos clases:
x

ThreadJava: clase principal que instancia cinco clases ImprimeThread, e invoca el mtodo
start de la clase Thread, en cada unos de los cinco objetos ImprimeThread para ponerlos listos
para ejecucin.
x
ImprimeThread: es una clase que es heredada de Thread, consiste de la variable de instancia
durmete, un constructor y el mtodo run. La variable durmete, es inicializada con un entero
aleatorio entre O y 3000 cuando el objeto ImprimeThread

Digitalizacin con propsito academico. Sistemas operativos

%+,/26190

es construido, para despus dormirse el tiempo especificado por durmete y despus imprime en
pantalla su nombre.
La aplicacin termina hasta que el ltimo hilo ImprimeThread despierte e imprima su nombre.
public class ThreadJava {
public static void main(String[] args) {
ImprimeThread tl,t2,t3,t4,t5;
t = new ImprimeThread();
t2 = new ImprimeThread();
t3 = new ImprimeThread()
t4 = new ImprimeThread() ;
t5 = new ImprimeThread() ;
tl.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}
class Imprime Thread extends Thread {
int durmete;
public ImprimeThread() {
durmete = (int) (Math.random () *3000);
System.out.println(Nombre: +getName()+ tiempo retraso:
+ durmete) ;
}
public void run() {
try {
Thread.sleep(durmete);
} catch (InterruptedException e) {
System.out.printin(e.getMessage());
}
System.out.printInCgetName());
}
}

Digitalizacin con propsito academico. Sistemas operativos

APNDICE C
Baci
C.l. Introduccin
Baci es descendiente del lenguaje Pascal secuencial (PascaI-S) propuesto por Ben Ari. Pascal-S
es una extensin al lenguaje Pascal ms algunas extensiones para soportar el manejo de concurrencia,
en particular se soporta la construccin cobegin ... coend para indicar ejecucin concurrente y la
construccin wait... signal para controlar que ciertas partes de un programa sean ejecutadas de manera
mutuamente exclusiva. La diferencia entre la implementacin de Pascal y Baci, es que Baci utiliza un
subconjunto del lenguaje C++ en lugar de Pascal.
Baci una herramienta sencilla de utilizar y fcil de entender, para usarlo se requiere solo
entender conceptos bsicos de lenguajes de programacin y conocer mecanismos de manejo de
concurrencia. En particular Baci soporta la creacin de procesos, semforos generales, semforos
binarios y monitores.
Baci est compuesto de un compilador y de un interprete. El compilador toma como entrada un
programa escrito en un subconjunto del lenguaje C++ (llamado C- -) ms algunas construcciones para
creacin de procesos y manejo de concurrencia y produce como salida un programa en PCODE que es
un cdigo para una mquina virtual. El interprete toma como entrada el programa en PCODE y lo
ejecuta directamente. El proceso de utilizacin de Baci se describe en la figura C.l.
C.2. El Lenguaje C- El lenguaje C- - son un subconjunto del lenguaje C++. Algunas restricciones y nuevos tipos que
se aplican en este compilador son ;
x
x

Las operaciones de entrada y salida se manejan solamente con: cout, cin y end1.
Solamente se soportan los tipos de datos int, char y string. Pero si soporta el manejo de arreglos
de estos tipos de datos.

191

Digitalizacin con propsito academico. Sistemas operativos

192

&RPSLODFLQ
GHSURJUDPDV

&UHDFLQGH
SURJUDPDV

3URJUDPDFP

&RPSLODFLQH[LWRVD
3&2'(SURJUDPDSFR
OLVWDGRSURJUDPDOVW

EDFF

(GLWRU
GHWH[WR

$31',&(&%$&,

(MHFXFLQGH
SURJUDPDV

EDLQWHUS

(UURUHVGH
FRPSLODFLQ

(MHFXFLQQRDSURSLDGD

)LJXUD&,3URFHVRGHXWLOL]DFLQGH%DFL

C.3. Creacin de Procesos


La creacin de procesos que se ejecutan concurrentemente se especifica a travs de la
construccin cobegin. Esta instruccin engloba las instrucciones que se desean ejecutar de manera
concurrente. El interprete se encarga de ejecutar de intercalar aleatoriamente la ejecucin de las
instrucciones contenidas en el cobegin. La ejecucin despus del bloque cobegin contina hasta que
todos los procesos contenidos en l terminen. Un ejemplo del uso es:
cobegin{
proc1( ...); proc2(...);; procN(...);
}
C.4. Manejo de semforos
El manejo de semforos es soportado en Baci como un tipo predeclarado:
semaphore. Un semaphore es un valor no-negativo de una variable int que puede ser accesada
con algunas reestricciones. Los semforos binarios(binarysem) , solo pueden tener los valores de O y
1. Las funciones de manejo de semforos son:
x Creacin que se logra al declarar variables tipo semaphore o binarysem.

Digitalizacin con propsito academico. Sistemas operativos

C275$6,16758&&,21(6193
x initialsem ( semaphore, integer-expression ): permite inicializar un semforo de cualquier
tipo.
x p(semaphore) o wait (semaphore): Si semaphore > O Entonces el semforo se decrementa en 1
y se regresa a ejecutar la siguiente instruccin despus de la llamada. Si semaphore == O,
Entonces el proceso no regresa a ejecutar su cdigo y es bloqueado hasta que se desbloquee con
una llamada v o signal.
x v (semaphore) o signal (semaphore): Si semaphore = O y uno o ms procesos estn dormidos,
Entonces se despierta a un proceso de manera aleatoria.Si ningn proceso est esperando para
ser liberado por algn semforo,Entonces el semforo se incrementa en 1. En cualquier caso el
proceso que hizo la llamada contina su ejecucin.

C.5. Manejo de monitores


Baci soporta el concepto de monitor propuesto por Hoare con algunas reestricciones. Un monitor es un
bloque de cdigo de C- - con algunas propiedades adicionales. Todas las funciones en las variables del
monitor son visibles para todos, pero las variables del monitor no son accesibles para todos los que
estn fuera del bloque y slo pueden ser accesadas a travs de las funciones del monitor.
En BACI, un monitor puede ser declarado slo en un nivel global. Los monitores no pueden ser
jerarquizados. Slo un procedimiento o funcin del monitor puede ser ejecutada a un tiempo. Esta
caracterstica permite utilizar monitores para soportar la exclusin mutua.
Los monitores son soportados a travs de: variables de condicin, waitc que espera sobre una variable
de condicin y signalc que sealiza una variable de condicin. Las funciones de manejo de un monitor
son:
x Creacin de una variable de condicin, esto se realiza con el tipo de datos: condition. En un
sentido estricto una variable de tipo condition no tiene un valor. Realmente es como una
especie de cola de bloqueo dnde los procesos que realizan un llamado a la operacin waitc son
bloqueados y los procesos que realicen un llamado a la operacin sgnalc pueden desbloquear a
algn proceso esperando en la variable de condicin.
x void waitc (condition cond, int prio): el proceso que manda llamar esta operacin es
bloqueado en la variable de condicin cond y se le asigna la prioridad prio para iniciar un relevantamiento.Esta accin a otros procesos del monitor ejecutarse.
x void waitc (conditon cond): es similar a la anterior slo que la prioridad es por omisin de 10.
x void sgnalc (condition cond): despierta a algn proceso bloqueado en la variable de condicin
cond que tenga la mayor prioridad (la prioridad mayor es la que tenga el menor nmero de
prioridad).
x int empty (condition cond): regresa un 1 si no existe por lo menos un proceso bloqueado en la
variable de condicin cond y O de otra manera.
C.6. Otras instrucciones
x S una funcin es declarada como atomic, el intrprete no interrumpir dicha funcin.

Digitalizacin con propsito academico. Sistemas operativos

194

$31',&(&%$&,

x
x
x
x

void suspend (void): Duerme al proceso que hizo el llamado.


void revive (int process_id): Despierta al proceso identificado con process_id.
init which_proc( void); Regresa el nmero de proceso actual.
int random (int range): Regresa un entero seleccionado aleatoriamente entre O y range 1.

C.7. Usando BACI


Un archivo fuente de Baci debe usar la extensin .cm . Para ejecutar un programa en BACI,
existen dos pasos a seguir :
a) Compilar el archivo .cm para obtener el archivo PCODE (.peo)
Usar: bacc [banderas-opcionales] nombre JirchivoFuente Banderas Opcionales:
x -h muestra la ayuda (Estas opciones).
x -c crea un archivo objeto (.pob)
b) Interpretar un archivo PCODE (.peo) para ejecutar el programa
Usar: bainterp [Banderas-opcionales] archivo_pcode
B anderasi -opcionales:
x
x
x
x
x
x

-d entra al debugger, ejecuta paso a paso, muestra los breakpoints.


-e muestra el registro activado (AR) sobre la entrada de cada proceso.
-x muestra el AR sobre la salida de cada proceso.
-t anuncia la terminacn de un proceso.
-h muestra la ayuda (Estas opciones).
-p muestra como son ejecutadas las instrucciones de PCODE

C.8 Ejemplo
El programa siguiente ilustra como se puede realizar la creacin de procesos. Cada proceso
incrementa una variable global. Pruebe correr dicho programa varias veces y observe los diferentes
resultados.
incremen.cm
const int m == 5;
int n;
void incr (char id)
{ inti;
for (i = 1; i < = m; i = i + 1)
{
n=n+l;
cout <<id << n =<<n << i =;
cout << i << << id << endi;
}

Digitalizacin con propsito academico. Sistemas operativos

C'21'(&216(*8,5%$&,195
}
main()
{
n=0;
cobegin
{
incr( 'A'); incr( 'B'); inc( 'C');
}cout<< La suma es << n <<; endl;
}
C.9. Dnde est siendo utilizado Baci?
Baci ha sido utilizado muchas veces en cursos de Introduccin a Sistemas Operativos en la
Universidad de Alabama y en The College ofWilliam and Mary. Tambin es utilizado en : Penn State
Harrisburg, Muhienberg College, St. Norbert College, Roberts Wesleyan College, Bostn University,
Lock Haven University, St. John's University, Colorado School of Mines, Xavier University of
Louisiana, The University of Texas at El Paso en Estados Unidos y en University ofDundee en Escosia,
University ofLuton en Inglaterra, Universidad de Oviedo en Espaa, Australian Cathohc University en
Australia y ahora en ITESM (Instituto Tecnolgico y de Estudios Superiores de Monterrey) en Mxico.
C.10. Dnde conseguir Baci

Baci puede ser obtenido en http://cs.ua.edu/camp/baci

Digitalizacin con propsito academico. Sistemas operativos

APNDICE D
JPNS
D.l. Introduccin
Este es un pequeo manual que muestra las posibilidades que brinda el Simulador de Redes de
Petri (JPNS). El JPNS fue desarrollado en la universidad de Stuttgart por Thomas Braunl. JPNS soporta
la metodologa de especificacin y modelacin a travs de Redes de Petri., soporta la representacin de
Plazas, Transiciones y Arcos y disparar la Red de Petri de manera paralela o secuencial. JPNS puede
ser obtenido en http://www.ee.uwa.edu.au/~braunl
D.2. Instalando JPNS.
Desempaque los archivos y agregelos a un folder. Una vez hecha esta operacin, el programa
se puede ejecutar, ya sea como applet o aplicacin.
D.2.1. Como Applet:
Ejecutar el comando "appletviewerjpns.html" utilizando JDK, Asegrese de tener todos los
archivos necesarios (html, java, class) en el path correcto para ejecutar la aplicacin.
El sistema se puede correr en el Browser de su preferencia y tambin puede accesar a travs de
Internet en http://www.ee.uwa.edu.au/braunl
Restricciones: Ejecutando el programa como un applet no es posible leer y escribir el disco
local. Adems no se pueden salvar archivos. Esta es una restriccin del browser.
D.2.2. Como aplicacin:
Ejecuta el comando "java jpns" en el directorio en el cual haya instalado JPNS. Ejecutando el
programa como aplicacin se tiene una completa funcionalidad del sw.

196
Digitalizacin con propsito academico. Sistemas operativos

197

$31',&('M316

D.3. Los comandos del jPNS.


D.3.1. Men FILE:
New: limpia el rea de edicin para iniciar un nuevo diseo.
Load: ejecuta el cuadro de dilogo para abrir un archivo de Red de Petri (*.net)
Save: Salva el diseo o dibujo actual. Si el diseo ya cuenta con un nombre, slo se
sobreescribe el archivo.
Save As; abre un cuadro de dilogo para salvar el diseo actual en una archivo Jpns. Se har
una pregunta antes de sobreescribir el archivo, en caso de que este ya existiera.
Quit: salir del jPNS.
D.3.2. Men SETTINGS:
Las primeras dos opciones, las cuales son "Parallel" and "Sequentiell", especifican el modo que se
utilizar cuando se ejecute la red de petri sobre la cual se est trabajando. Se cuenta con las siguientes
opciones:
x Parallel Random: todas las transiciones disparan de manera paralela. Cuando hay dos
transiciones que estn conectadas con el mismo nodo y este nodo slo tiene un token, se activa
la opcin ramdom, es decir, se ejecuta una transicin activada aleatoriamente por el programa.
x Parallel Manual: se tiene la situacin anterior , pero aqu el usuario decide que transicin
activar.
x Sequentiell Random: las transiciones disparan una tras otra. Esta opcin selecciona una
transicin aleatoriamente para dispararla.
x SequentalH Manual: la misma situacin de Sequentiell Random, pero aqu el usario tiene el
control de los disparos.
Las otras dos opciones de este men son utilizadas para la salida grfica. Si "Options" es
elegida, un cuadro de dilogo aparece, donde se puede seleccionar la opcin "Show" , que pinta la
transicin que se est disparando de la red de petri en ejecucin y seleciona el retraso de tiempo entre
cada paso. La opcin "Paintng" le brinda al usuario la posibilidad de elegir una salida coloreada o en
blanco y negro (impresin).
D.4. Los iconos grficos:
De izquierda a derecha, los iconos son:

ILJXUD',,FRQRGHODRSFLQ5HODVH

Digitalizacin con propsito academico. Sistemas operativos

'/26,&2126*5),&26198




)LJXUD',FRQRSDUD$GG1RGH

Relase: A travs de esta opcin el usuario puede mover los componentes de la red de petri con
el botn izquierdo del mouse.
Add Node: El usuario puede colocar nodos con el botn izquierdo del mouse y con el derecho
mover los componentes de la red de petri.

 )LJXUD',FRQRSDUD$GG7UDQVLWLRQ,
Add Transition: Agregar transiciones con el botn derecho del mouse.

)LJXUD',FRQRSDUD$GG(GJH


Add Edge: Para dibujar las ligas da un click con el botn izquierdo del mouse sobre el
componente de inicial de la liga y otro click sobre el componente correspondiente o componente final
de la liga. De otra manera la liga no podr llevarse a cabo. Dando click's sobre la superficie del editor el
usuario podr darle curvaturas a la liga

)LJXUD',FRQRSDUD$GG7RNHQ

Add Token: Haciendo click con el botn izquierdo del mouse agrega tokens a un nodo. Con el
botn derecho del mouse elimina tokens de un nodo.

Digitalizacin con propsito academico. Sistemas operativos

199

$31',&('M316

)LJXUD',FRQRSDUDRSFLQ(GLW

)LJXUD',FRQRSDUD2HOHWH

Edit; Haciendo click con el botn izquierdo del mouse abre el correspondiente cuadro de
dilogo de edicin para el elemento seleccionado. Aqu el usuario puede introducir nombres,
condiciones, pesos, etc.
Delete: Con un click en el botn izquierdo del mouse elimina el componente seleccionado con
todas sus propiedades.

)LJXUD',FRQRSDUDRSFLQVXDYH

Save: Misma funcionalidad que la opcin save del men File,

)LJXUD,FRQRSDUDODRSFLQ0HPRUL]H

Memorize: Puede memorizar la red de petri con la que se est trabajando.


Draw Memorized: Puede trabajar con la red de petri memorizada.
Step: Ejecuta la red de petri en cuestin. Similar a un "run" en algn lenguaje de
programacin.
Single Step : Ejecuta un paso de la red de petri en cuestin. Invoca al siguiente paso
cada vez que se le da un click a este botn.

Digitalizacin con propsito academico. Sistemas operativos

'/26,&2126*5),&26200

)LJXUD',2,FRQRSDUDODRSFLQ'UDZ0HPRUL]HG



)LJXUD',FRQRSDUDODRSFLQ6WHS



)LJXUD',FRQRSDUDODRSFLQ6LQJOH6WHS

La barra de status informa cuales son las acciones que se estn ejecutando, el modo en el cual
se est ejecutando y un contador de pasos.
D.5. Ejemplo de red de petri en Jpns :
La exclusin mutua es una regla de sincronizacin la cual especifica que los accesos a variables
o recursos compartidos deben hacerse de uno a la vez cuando tenemos procesos concurrentes. Cuando
un proceso est ejecutando el cdigo relativo al acceso de recursos o variables compartidas se dice que
est en su SECCIN CRITICA. La exclusin mutua puede ser implementada por medio de diferentes
mecanismos.
1.
2.

Dibuje una red de petri similar a la de la figura D.13.


Ajuste las siguientes propiedades.
2.1. Del men Settings selecciones la opcin Optons y elija la opcin Show.
2.2. Del men Setting selecciones la opcin Parallel y elija la opcin Random.
2.3. Modifique las opciones anteriores y observe los resultados.
3.
Ejecute paso a paso la red. Vea que sucede con las transiciones. La transicin a la que
apuntan los tokens, transicin potencialmente a disparar, se iluminar para indicar que ella
recibir el disparo.
4.
Ejecute de un solo paso la red.

Digitalizacin con propsito academico. Sistemas operativos

201

$31',&('M316



3

6HFB

 0XWH[



6HFB

3







)LJXUD'5HGGH3HWULSDUDPDQHMRGHH[FOXVLQPXWXD

5. Agregue pesos a las diferentes ligas. Para hacerlo seleccione la opcin "Editar" y haga
click con el botn izquierdo del mouse sobre alguna liga. Aumente el peso de la liga y
vea que se sucede. Ejecute el paso 3.
6. Guarde el ejemplo.
7. Construya los dems ejemplos, segn las figuras dadas, y realice modificaciones para
ejecutarlas en modo paralelo y secuecial.

Digitalizacin con propsito academico. Sistemas operativos

Referencias
[1] G. M. Amdahl and Blair G- A., Architecture of the IBM System/360, IBM Journal do Researche
and Development, 1964.
[2] C. J. Bashe, IBMs Early Computers, MIT Press, 1986.
[3] H. M. Deitel, An Introduction to Operating Systems, Addison-Wesley Publinshig Company,
1990.
[4] H. R. Grosch, The way it was in 1957, Datamation, 1977.
[5] S. P. Harbison and G. L. Steele, C: A reference manual, Prentice Hall, 1995.
[6] T. G. Lewis, Where is Computing Heading?, Computer, pgs. 59-63, 1994.
[7] M. Maekawa and R. R. Oldefoeft, Operating Systems, Advanced concepts, BenjaminCummings, 1987.
[8] E. Iacobucci, OS/2 Programmers guide, Me Graw Hill, 1988.
[9] D. Cameron and B. Rosenblatt, Learning GNUEmacs, OReilly and Associates, 1991.
[10] P. H. Enslow, Multiprocessor Organizaton-A survey, Computing Surveys, pgs-103-129,
1977.
[11] S. R. Boume, The UNIX System, Addison-Wesley, 1983.
[12] E. G. Coffman and T. A. Ryan, Operating Systems Theory, Prentice Hall, 1973.
[13] P. B. Hansen, Operating System Principies, Prentice Hall, 1973.
[14] A. S. Tanenbaum, Operating Systems, design and implementaon, Prentice Hall, 1997.
[15] A. S. Tanenbaum, Modern Operating system, Prentice Hall, 1992.
[16] M. Milenkovic, Sistemas Operativos, Me Graw Hill, 1994.
[17] M. Bach, The design ofthe Unix Operating system, Prentice Hall, 1984.
[18] K. A. Robbins, Unix Programacin Prctica, Prentice Hall, 1997.
[19] E. W. Dijkstra, Co-operating sequencial processes in programming languages, Academic
Press, 1968.
[20] L. Dowdy and C. Lowery, P.S. to Operating systems, Prentice Hall, 1993.
[21] S. Kleiman S. and D. Shah and B. Smaalders, Programming with Threads, Prentice Hall, 1999.
[22] E. Nemeth and S. Seebass and T. R. Hein, UNIX System Administration Handbook, Prentice
Hall, 1995.
[23] B. W. Kemighan, The C Programming Language, Prentice Hall, 1988.
[24] P. B. Hansen, The Architecture of Concurrent Programs, Prentice Hall, 1977.
[25] R. A. Finkel, An Operating Systems Vade Mecum, Prentice Hall, 1988.

202
Digitalizacin con propsito academico. Sistemas operativos

5()(5(1&,$6203

[26] P. B. Hansen, The Ncleos ofaMuItiprogramming System, Communications of the ACM,


pgs. 238-241, 1970.
[27] P. B. Hansen, Structured Multiprogramming, Communications of the ACM, pgs. 574-578,
1972.
[28] E. W. Dijkstra, Solution of a problem in concurrent programming control, Communication of
the ACM, Pag. 569, 1965.
[29] F. Rueda, Sistemas Operativos, Me Graw Hill, 1979.
[30] W. R. Stevens, Unix networking programming, Prentice Hall, 1990.
[31] G. Held, Data Communications Networking Devices, John Wiley and Sons, 1989.
[32] S. A. Rago, UNIX System V Network Programming, Addison-Wesley, 1993.
[33] C. Bays, A comparision of Next-Fit, First-Fit and Best-Fit, Communications of the
ACAf,pgs. 191-192,1977.
[34] L. Bic and A.C. Shaw, The Logical Design of Operating Systems, Prentice Hall, 1988.
[35] H. A. Habermann, Syncronization of communicating processes, Communications of the
ACM, pgs. 171-176, 1972.
[36] B. W. Lampson, A Scheduling Philosophy for Multiprocesing Systems, Communications of
the ACM, pgs. 347-369, 1968.
[37] W. A. Wulf, Performance, monitors for multiprogramming systems\Communication of the
ACM, pgs. 780-790, 1971.
[38] G. Couloris and J. Dollimore and T. Kindberg, Distributed Systems: Concept and Design,
Addison-Wesley, 1994.
[39] W. Stallings, Operating Systems Internals and Design Principles, Prentice Hall, 1998.
[40] G. Brassard and P. Bratley, Algorithmics: Theory and Practice, Prentice Hall, 1988.
[41] A. J. Smith, Cache Memories, ACM computing surveys, pgs. 433-530, 1982.
[42] R. L. Budzinski, A Comparision of Dynamic and Static Virtual Memory Allocation
Algorithms, IEEE Transactions on Software Engineering, pgs. 122-131, 1981.
[43] L. Lamport, Syncronization of Independent Process,Acta informtica, pgs. 15-34,1976.
[44] F. J. Corbato, Ah experimental time-sharing system, Proceedings of the AFIPS fall joint
Computer Conference, pgs. 335-344, 1962.
[45] G. A. Bowen and R. J. A. Buhr, The Logical Design of Multiple-Microprocessor Systems,
Prentice Hall, 1980.
[46] L. Lamport, The mutual exclusin problem: a Theory of interprocess communications. Joumal
of the ACM, 313-326, 1986.
[47] L. Lamport, The mutual exclusin problem: statement and solutions, Joumal of the ACM,
327-360, 1986.
[48] J- E. Bums, Mutual exclusin with linear waiting using binary shared variables, SGACT
News, pgs. 42-A7, 1978.
[49] O. S. Carvalho and G. Roucairol, On Mutual Exclusin in Computer Networks,
Communications of the ACM, pgs. 146-147, 1983.
[50] P. J. Courtois and et al, Concurrent control with readers and writers, Communications
oftheACM, pgs. 667-668, 1971.
[51] M. Raynal, Algorithms for Mutual Exclusin, MIT Press,
1986.

Digitalizacin con propsito academico. Sistemas operativos

5()(5(1&,$6204

[52] E B. Schneider, Syncronization in distribuited programs, Proceedings ofthe Sym-posium on


Principies of Distributed Computing, pgs. 227-279, 1976.
[53] D. Curry, Using C on the unix System, 0Reilly and Associates 1989.
[54] V. Kumar and A. Grama and A. Gupta and G. Karypis, Introduction to ParallelComputing:
Design andAnalysis of Algorithms, Benjamin-Cummings, 1994.
[55] A. S. Tanenbaum, Distributed Operating Systems, Prentice Hall, 1995.
[56] S. Patil, Limitations and capabilities of Dijkstras semaphore primitives for coordination
among processes, tech. rep. MIT, 1971.
[57] J. W. Havender, Avoiding deadlock in multitasking system, IBM Systems Joumal, pgs. 7484, 1968.
[58] E. M. Gold, Deadlock prediction: easy and difficult cases, SIAM Journal of Computing,
pgs. 320-336, 1978.
[59] R. Devillers, Game interpretation ofthe deadlock avoidance problem, Communications
oftheACM, pgs. 741-745, 1977.
[60] R- O. Fontao, A concurrent algorithm for avoiding deadlocks, Proceedings of the ThirdACM
symposium on Operating Systems Principies, pgs. 72-79, 1971.
[61] V. D. Gligor, On deadlock detecton in distributed systems, IEEE transactions on Software
Engineering, pgs. 435-440, 1980.
[62] A. N. Habermann, Prevention of system deadlocks, Communications ofthe ACM, pgs. 373377, 1969.
[63] T. Kameda, Testing deadlock fredoom of computer systems, Joumal ofthe ACM, pgs. 270280,1980.
[64] G. Newton, Deadlock prevention, detection, and resolution: an annoted bibliographi,
Operating Systems Review, pgs. 33-44, 1979.
[65] A. Shoshani and E. G. Coffman, Prevention, detection, and recovery from system deadlock,
tech. rep. infonnation Science and Systems 1970.
[66] D. Zobel, The deadlock problem: a clasifying bibliography, Operating system review, pgs.
6-16, 1983.
[67] http://chicago.eecs.uic.edu/~solworth/disk.html, Disk Scheduling and Caching,
[68] http://www.csc.vill.edu/~joyce/dsimlab/main.html, An nvestigation ofdisk scheduling
algorithms laboratory.
[69] http://www.cs.strath.ac.uk/~af/OperatingSystemsl/6_diskscheduIing.htmI
Diskarmscheduling.
[70] L. Doug, Concurrent Programming in Java Design Principies and Pattems, Addison Wesley,
1997.
[71] S. Oaks and H. Wong, Java Threads, 0Reilly, 1999.
[72] http://www.cis.unisa.edu.au/acrc/cs/dc/pma, Process Migration for Amoeba.
[73] http://bit.csc.Isu.edu/scs/SNOW/, SNOW: A distributed dynamic system for meta-computing.
[74] R. W. Atherton, Moving JAVA to the Factory, IEEE Spectrum, Vol. 35, pgs. 18-23.
December, 1998.
[75] J. Byous, Happy 3rd BirthDay, tech. rep. Sun Microsystems Inc. 1998,
http://java.sun.com/features/1998/05/birthday.html.

Digitalizacin con propsito academico. Sistemas operativos

5()(5(1&,$6205

[76] D. Flanagan, JAVA in a Nutshell, second ed. 0Reilly 1997.


[77] L. Lemay and C. L. Perkins, Teach YourselfJAVA in 21 Days, Prentce Hall, first ed.,1996.
[78] M. Campione and K. Wairath, The Java Tutorial. Object-Oriented Programming for the
Internet, Addison Wesley, first ed, 1996.
[79] H. M. Deitel and P. J. Deitel, JAVA How to Program, Prentce Hall, second ed, 1998.

Digitalizacin con propsito academico. Sistemas operativos

La publicacin de esta obra la realiz


Editorial Trillas, S. A. de C. V.
Divisin Administrativa, Av. Rio Churubusco 385,
Col. Pedro Mana Anaya, C.P. 03340, Mxico, D. F.
Tel. 56 88 42 33, FAX 56 04 13 64
Divisin Comercial, Calz. dla Viga 1132, C.P. 09439
Mxico, D. F.. Tel. 56 33 09 95, FAX 56 33 08 70
Se termin de imprimir el 13 de julio de 1999,
en los talleres de Impresos 2000, S. A. de C. V.
Se encuadern en Terminados Grficos Hidalgo.
CH BM2 80 TW

Digitalizacin con propsito academico. Sistemas operativos

Das könnte Ihnen auch gefallen