IIC 2332 -- Sistemas Operativos
Apuntes 12
1er Semestre 1996
- Entrega de tareas
- Horas de oficina
- Sala de terminales
- Encuesta
- Con la multiprogamación un conjunto de procesos comparte la CPU.
Los procesos comparten también la memoria.
- En sistemas modernos un proceso de usuario puede ejecutarse en
cualquier parte de la memoria física. Necesitamos enlazar
(bind) las direcciones en un programa a las direcciones reales.
- Procesamiento de un programa:
- fuente -> compilador o ensamblador ->
módulos objetos -> editor de enlaces ->
módulos de carga -> cargador -> imagen binario
(ejecución)
- El compilador y el editor de enlaces convierten las direcciones
simbólicas a direcciones relocalizables (con desplazamientos
internos).
- Al tiempo de carga convertimos las direcciones relocalizables a
direcciones fijas. Con apoyo de hardware podemos mover el proceso
en memoria durante la ejecución.
- Carga dinámica. No cargamos una rutina hasta que la
necesitamos durante la ejecución.
- Llamada a la rutina.
- Chequeo si la rutina está cargada.
- Llamada al cargador para cargar la rutina en la memoria.
- Cambio de las tablas de direcciones en el programa.
Esto no necesita apoyo especial del sistema operativo.
- Enlace dinámico, o bibliotecas compartidas. La mayoria
de los programas están enlazados con las bibliotecas de sistema.
¿Dónde está el desgaste? Cada uno tiene una copia de las bibliotecas
en su binario. Una solución es las bibliotecas compartidas.
- Para cada rutina de sistema que usamos, tenemos un
stub (un fragmento de código) en el binario para encontrar o
cargar la rutina.
- Cuando llamamos al stub, se reemplaza con la dirección de la
rutina.
- No necesitamos reenlazar los programas cuando hay una versión
nueva de la biblioteca.
- Necesitamos apoyo del S.O. ¿Por qué?
- Overlays (superposiciones).
- Hasta ahora hemos asumido que todo el texto y los datos de un
proceso pueden caber en memoria.
- Si no hay bastante memoria, una posibilidad es estructuar el
programa en trozos independientes (cada uno es un overlay).
Los overlays son imágenes binarias.
- Usamos solamente un overlay a la vez, y lo cambiamos cuando
necesitamos otro overlay.
- El diseño del programa con overlays es muy complicado.
- Se usan overlays en los computadores y PCs primitivos que
carecen de hardware para esquemas más avanzados.
- Dirección lógica o virtual: una dirección generada por la
CPU.
- Dirección física: una dirección vista por la unidad de
memoria.
- Si cargamos programas en posiciones fijas en la memoria física,
los dos tipos de direcciones son iguales. Pero si tenemos la
habilidad de mover un proceso en memoria, son distintos. Un proceso
tiene un espacio de direcciones virtuales y un espacio de direcciones
físicas.
- La MMU (memory-management unit), una unidad de hardware,
convierte entre los dos tipos. Una MMU sencilla:
- Un registro de relocalización.
- Se suma el contenido de este registro a cada dirección lógica.
- Con un sistema de multiprogramación primitivo podemos tener
solamente tantos procesos como caben en memoria. Para aumentar el
número de los procesos que podemos tener en el sistema a la vez,
usamos swapping.
- Transferimos procesos que están en espera al disco.
- Si no tememos una MMU bastante avanzada, tenemos que recargar
procesos en la misma posicíon en la memoria física.
- El swapping es lento. Por ejemplo, con un proceso de 100K
y un disco con una velocidad de trasferencia de un megabyte por
segundo, necesitamos 100 ms + una latencia de 8 ms. Para el proceso
de disco necesitamos 108 ms más, o 216 ms en total.
- Los procesos que se intercambian deben ser completamente inactivo.
El I/O pendiente es un problema, porque necesitamos una destinación en
memoria por los bytes que llegan. Puede ser en el espacio de proceso
o en buffers del S.O.
- Windows usa swapping, pero otros sistemas usan esquemas más
avanzados (Unix usa swapping solamente cuando alcanza un límite).
Last edited April 17, 1996, by knabe@ing.puc.cl