Beruflich Dokumente
Kultur Dokumente
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
ndice de contenido
Presentacin
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
8 NDICE DE CONTENIDO
NDICE DE CONTENIDO 9
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
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
109
109
110
110
110
110
111
64
65
65
NDICE DE CONTENIDO 11
111
111
116
116
117
118
118
119
119
119
119
120
120
121
121
122
123
124
124
124
124
124
125
125
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
12 NDICE DE CONTENIDO
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
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
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
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
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
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.
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.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].
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
2.10.
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.
THE (DIJKSTRA).
2.13.1. Rutina
2.13.2. Corrutina
2.13
2.13.3. Proceso
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.
28
Captulo 3
Algoritmos de administracin de
procesadores
En este captulo se presentarn diversos algoritmos para controlar la asignacin de
procesadores a procesos.
1.
2.
3.
4.
5.
CARACTERSTICAS ESTTICAS
- Tamao de cdigo.
- Tiempo estimado de ejecucin.
- Cantidad de Entrada / salida estimada.
CARACTERSTICAS DINMICAS
-
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].
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
Usuario
No usado
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.
44
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
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
4.15.
S O
S O
S O
Hueco
Hueco
P C
Hueco
Hueco
Hueco
P F
P F
P F
Hueco
Hueco
Hueco
Hueco
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).
Sistema operativo
Hueco 16 K
P A
Hueco 14 K
P B
Hueco 5 K
P C
Hueco 30 K
Sistema operativo
Hueco 16 K
P A
Hueco 14 K
P B
Hueco 5 K
P C
Hueco 30 K
Sistema operativo
Hueco 16 K
P A
Hueco 14 K
P B
Hueco 5 K
P C
Hueco 30 K
Fragmentacin
interna
Baja
Nula
Media
Alta con tamaos grandes
Fragmentacin
externa
Alta
Baja
Baja
Baja
Rapidez
Lento
Lento
Muy rpido
Muy rpido
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
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
Almacenamiento real
Almacenamiento
virtual
Mecanismo
de mapeo de
direcciones
Almacenamiento
real
5.2.
5.10. SEGMENTACIN
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.
55
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.
57
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
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
Bit modificado
0
1
0
1
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.
61
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
b 2 4ac
2a
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.
Estado actual
Estado futuro
Avanza P1 Avanza P2
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
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
69
70
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
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
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:
Program Testandsetexample;
var active: boolean;
procedure processone;
var onecannotenter: boolean;
begin
while true do
begin
onecannotenter: =true;
73
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.
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:
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;
77
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
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.
6.9. SEMFOROS 81
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;
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
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
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;
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);
88
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.
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;
89
90
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.
6.9. SEMFOROS
91
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
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.
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]);
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
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;
6.10. PIPES 97
98
READRECORD (pipenumber);
lee los bytes escritos en el registro siguiente a ser ledo.
Proceso_j
___
regin v do
v:=15;
end;
___
Fin proceso_j;
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
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.
101
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;
___
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
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
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
111
x
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.
112
3URFHVRFRQWLQXD
3URFHVR
(VSHUD
3URFHVR(VSHUD
'HFLGLHQGR
2FLRVR
DVLJQDGRU
5HTXHULPLHQWR
DYDQ]DGR
5HTXHULPLHQWR
3URFHVRFRQWLQXD
3URFHVR
(VSHUD
3URFHVR(VSHUD
DVLJQDGRU
'HFLGLHQGR
2FLRVR
5HTXHULPLHQWR
Proceso continua
3URFHVR
(VSHUD
3URFHVR(VSHUD
DVLJQDGRU
$FWXDOL]D
2FLRVR
113
114
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
115
116
Tipo de sistema.
Utilizacin de recursos.
Nmero de recursos que hay en el sistema.
Nmero de Procesos.
117
118
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].
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
120
Num Casos
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)
7HOIRQR
0DUWQH]5DO
5XL]3HGUR
9DUJDV5XEQ
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
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
121
x Mejor Caso = 1
x Peor Caso = [logm(N)].
x Caso promedio = 1+[logm(N)]
2
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.
123
7LHPSR GH
WUDQVPLVLQ
7LHPSRGH
EVTXHGD
&DEH]DV
OHFWRUDV
HVFULWRUDV
7LHPSRGHODWHQFLD
)LJXUD7LHPSRGHEVTXHGDODWHQFLD\WUDQVIHUHQFLDGHXQGLVFRGXUR
124
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
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].
Capitulo 9
126
Digitalizacin con propsito academico. Sistemas operativos
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.
APNDICE A
Unix
A.1. Introduccin a unix
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.
Salida esndar 1
(pantalla)
Proceso
Error esndar 2
(pantalla)
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
x
x
x
132
APNDICE A. UNIX
C
Fortran
Pascal
Cobol
Ada
PL/I
C++
x
x
sed
ed
ex
vi
ined
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
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
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
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
%XVFDPHQVDMHVGHOXVXDULRLQGLFDGR
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,;
&RPDQGR
'HVFULSFLQ
FGWUD\HFWRULD
6HFDPELDODWUD\HFWRULDLQGLFDGD
FG
6HFDPELDDOGLUHFWRULRUD]
FG
6HFDPELDDOSDSDGHOQLYHODFWXDO
FG
6HFDPELDDOGLUHFWRULRGHHQWUDGDGHILQLGRFRPRKRPH
PNGLUGLUHF
3HUPLWHFUHDUHOGLUHFWRULRLQGLFDGR
SZG
'HVSOLHJDHOGLUHFWRULRDFWXDO
PYGLUOGLU
&DPELDHOQRPEUHGHOGLUHFWRULRGLUODGLU
UPGLUGLUHF
%RUUDHOGLUHFWRULRLQGLFDGR
7DEOD$ 7DEODGHFRPDQGRVSDUDPDQHMRGHGLUHFWRULRV
$0$1(-2'($5&+,92137
TXLHQSXHGHVHU
J 7RGRVORVXVXDULRVGHOPLVPRJUXSRTXHHOSURSLHWDULR
R 7RGRVORVXVXDULRV
X 3URSLHWDULR
'(6&5,3&,1
3HUPLWHDJUHJDUTXLWDUHOSHUPLVRLQGLFDGRVREUHORVDUFKLYRV
UHVSHFWRDORVXVXDULRVLQGLFDGRV
SHUPLVRSXHGHVHU
[ (MHFXWDEOHSDUDGLUHFWRULRVVHUHILHUHDEVTXHGD
U OHFWXUD
Z HVFULWXUD
7DEOD$7DEODGHFRPDQGRFKPRG.
Digitalizacin con propsito academico. Sistemas operativos
138
$31',&($81,;
$5&+,92
DUFKF
DUFKK
DUFKI
DUFKS
DUFKV
DUFKR
.
..
'(6&5,3&,1
&GLJRIXHQWHGH&
$UFKLYRLQFOXGHGHHQFDEH]DGRSDUD&
&GLJRIXHQWHGH)2575$1
&GLJRIXHQWHGH3$6&$/
&GLJRIXHQWHGH(16$0%/$'25
&GLJRREMHWR
'LUHFWRULRDFWXDO
'LUHFWRULRSDGUH
7DEOD$&RQYHQFLRQHVGH1RPEUHGH$UFKLYRV.
'(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
&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.
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,
9DORU1LFH8VDGRHQHOFOFXORGHODSULRULGDG
77<
/DHVWDFLQGHWUDEDMRGHFRQWUROGHOSURFHVR
&0'
(OQRPEUHGHOFRPDQGR
UPGLUGLUHF
%RUUDHOGLUHFWRULRLQGLFDGR
7
7DEOD$,QIRUPDFLQGHOFRPDQGRSV
$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
142
$31',&($81,;
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.
$(/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.
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
$(/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
146
$31',&($81,;
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,
$(/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).
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
'(6&5,3&,1
DZN
/HQJXDMHGHEVTXHGD\SURFHVDPLHQWRGHVWULQJV
FXW
3HUPLWHVHOHFFLRQDUFROXPQDVGHXQDUFKLYR
GLII
&RPSDUDGRVDUFKLYRV\VHOHFFLRQDODVGLIHUHQFLDV
JUHS
6HOHFFLRQDORVUHQJORQHVTXHFXPSOHQHOFULWHULRGDGRVORXQFULWHULR
6HOHFFLRQDORVUHQJORQHVTXHFXPSOHQORVPOWLSOHVFULWHULRVGDGRV
KHDG
6HOHFFLRQDORVSULPHURVUHQJORQHVGHORVDUFKLYRV
OLQH
VHG
6HOHFFLRQDHOSULPHUUHQJOQGHORVDUFKLYRV
3HUPLWHHGLWDUORVIOXMRVGHGDWRV
WDLO
3HUPLWHVHOHFFLRQDUODVOWLPDVOQHDVGHORVDUFKLYRV
XQLT
6HOHFFLRQDUHQJORQHVHOLPLQDQGRUHSHWLFLQ6ORVLVREUHORTXHVHRSHUDHVWRUGHQDGR
ZF
&XHQWDFDUDFWHUHVSDODEUDV\OQHDVGHXQDUFKLYR
7DEOD$&RPDQGRVGHVHOHFFLQ.
$(',725(6149
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
DZN
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[DFWRVVORFRQIJUHS
,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?
152
$31',&($81,;
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
$$,;:,1'2:6153
&$5&7(5
6,*1,),&$'2
A
3ULQFLSLRGHOLQHD
.
.*
D
[-]
)LQGHOQHD
8QVORFDUFWHU
0OWLSOHVFDUDFWHUHV
&XDOTXLHUFDUFWHUHVSHFLILFDGR
&XDOTXLHUFDUFWHUGHOUDQJR
7DEOD$&DUDFWHUHVGHOFRPDQGR
JUHS
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.
$$,;:,1'2:6155
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
156
$31',&($81,;
$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
(OSURFHVRHVWOLVWRSDUDFRUUHUSHURHOLQWHUFDPELDGRUVZDSSHU
WLHQHTXHWUDHUORSULPHURDPHPRULD
(OSURFHVRHVWHVSHUDQGRODRFXUUHQFLDGHXQHYHQWR\
DGHPVHVWDHQGLVFR
'XUPLHQGRHQGLVFR
$GTXLVLFLQSRUSULRULGDG
&UHDGR
(OSURFHVRHVWOLVWRSDUDUHJUHVDUGHOPRGR.HUQHODOPRGRXVXDULR
SHURVHOHTXLWRHO&38SRUSULRULGDGSDUDSODQLILFDUDRWURSURFHVR
(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
Sleep
Suficiente memoria
Duracin
en
Sale de disco
Duracin
en
Despertar
Listo
para
correr
en
i
Regreso a
memoria
Cread
Sale de disco
Despertar
)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
$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$
UHD8UHDGHXVXDULR
GHOPRGRHQHOTXHVHHVWFRUULHQGR
,QIRUPDFLQGHFRQWUROTXHQHFHVLWDVHUDFFHVDGDSRUHOFRQWH[WRGHO
SURFHVR
6,67(0$
7DEODGHUHJLQGHSUHSURFHVR
'HILQHHOPDSHRGHODVGLUHFFLRQHVYLUWXDOHVDGLUHFFLRQHVUHDOHV
DGHPVGHFRQWHQHUORVSHUPLVRVGHDFFHVRVROROHFWXUDOHFWXUD
HVFULWXUD\OHFWXUDHMHFXGQ
6WDFNGHO.HUQHO
6,67(0$
&RQWLHQHHOVWDFNGHO.HUQHOFXDQGRORVSURFHVRVVHHMHFXWDQHQPRGR
.HUQHO
7DEOD$,PJHQHVGHXQSURFHVR
ITEM
'(6&5,3&,1
(VWDGRGHOSURFHVR
$SXQWDGRUHV
$OUHDGHXVXDULR\ODPHPRULDGHOXVXDULRWH[WRGDWRVVWDFN
7DPDRGHOSURFHVR
3HUPLWHGHILQLUHOHVSDFLRTXHVHGHEHDVLJQDUDOSURFHVR
LGHQWLILFDGRUGHOXVXDULR
(OLGHQWLILFDGRUGHOXVXDULRTXHFUHHOSURFHVR
,GHQWLILFDGRUHVGHSURFHVR
&RQWLHQHHOLGHQWLILFDGRUGHOSURFHVRSDGUH\GHOPLVPRSURFHVR
'HVFULSWRUGHOHYHQWR
7LHQHLPSRUWDQFLDFXDQGRHOSURFHVRHVWGXUPLHQGRHVSHUDQGRXQHYHQWRFXDQGRHO
HYHQWRRFXUUHHSURFHVRHVWUDQVIHULGRDOHVWDGROLVWRSDUDFRUUHQ
3ULRULGDG
1PHURXVDGRSRUHODVLJQDGRUGH&38SDUDUHDOL]DUODSODQLILFDFLQ
6HDOHV
/LVWDODVVHDOHVTXHKDQVLGRPDQGDGDVDOSURFHVR
7HPSRUL]DGRUHV
/LJD33OLQN
8VDGRSDUDPDQGDUVHDOHVHQWUHSURFHVRV\OOHYDUHOWLHPSRGHHMHFXFLQGHOSURFHVR
$SXQWDGRUDOVLJXLHQWHSURFHVRHQODFRODGHOLVWRSDUDFRUUHUTXHVHUHMHFXWDGRWLHQH
VHQFLGRVLHOSURFHVRHVWOLVWRSDUDFRUUHU
(VWDGRGHODPHPRULD
,QGLFDVLHOSURFHVRHVWHQPHPRULDSULQFLSDORHQGLVFR
7DEOD$(QWUDGDHQODWDEODGHSURFHVRV.
160
$31',&($81,;
,7(0
'(6&5,3&,1
$SXQWDGRUDODWDEODGHOSURFHVR
,QGLFDODHQWUDGDTXHFRUUHVSRQGHDOUHD8
,GHQWLILFDGRUHVGHXVXDULR
,GHQWLILFDGRUHVGHXVXDULRGHORVSURFHVRV
7HPSRUL]DGRUHV
3DUDOOHYDUHOWLHPSRTXHORVSURFHVRVVHKDQHMHFXWDGRHQPRGR
XVXDULR\HQPRGRNHUQHO
$UUHJORPDQHMDGRUGHVHDOHV
3DUDFDGDWLSRGHVHDOTXHUHFLEDHOSURFHVRLQGLFDFRPRVHYDD
PDQHMDULJQRUDUWHUPLQDURHMHFXWDUXQDUXWLQD
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.
$&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
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)
$&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.
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.
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 */
}
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.
$&2081,&$&,1'(,17(5352&(626 167
/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.
168
$31',&($81,;
'(6&5,3&,1
6HUHJUHVDHOSULPHUPHQVDMHGHODFROD
!
6HUHJUHVDHOSULPHUPHQVDMHFX\RYDORUGHOWLSRVHDLJXDODOHVSHFLILFDGR
(OSULPHUPHQVDMHFX\RYDORUGHOWLSRVHDPHQRURLJXDODOYDORUDEVROXWR
GHOHVSHFLILFDGRHVHOTXHVHUHJUHVD}
7DEOD$2SFLRQHVSDUDHVSHFLILFDUTXHPHQVDMHUHFLELU
$&2081,&$&,1'(,17(5352&(626 169
'(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,;
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.
$&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
172
$31',&($81,;
&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:
-
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.
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
%',)(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
%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].
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
*UXSRV
GH'LVFXVLQ
&DOLILFDFLQ
3DUWLFLSDFLQ
5HVSRQVDELOLGDG
(VWXGLDU
$VLVWLUD
&ODVHV
%$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.
%$3/,&$&,21(6<$33/(76182
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:
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]);
%$3/,&$&,21(6<$33/(76184
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
%$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 () {
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
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
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
%+,/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());
}
}
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
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
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.
194
$31',&(&%$&,
x
x
x
x
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;
}
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
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
ILJXUD',,FRQRGHODRSFLQ5HODVH
'/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.
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
)LJXUD,FRQRSDUDODRSFLQ0HPRUL]H
'/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.
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.
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
5()(5(1&,$6204
5()(5(1&,$6205