Professional Documents
Culture Documents
docx
1 Esquema Básico
Una computadora debe estar formada por:
- Procesador
- Memoria
- Componentes de E / S
Procesador.- Controla la operación de la computadora y ejecuta sus funciones de procesamiento de datos.
Memoria principal.- Almacena datos y programas. Es típicamente volátil; se le conoce como memoria real o
memoria primaria.
Módulos de E / S.- Mueven datos entre la computadora y su ambiente externo, esto incluye:
- Dispositivos de memoria secundaria.
- Equipo de comunicaciones.
- Terminales.
Interconexión del sistema.- Una parte de la estructura y mecanismos que proporcionan comunicación entre
procesadores, memoria principal y módulos de E / S.
1
51608191.docx
Un temporizador de intervalos es útil en sistemas de usuarios múltiples para prevenir que un solo usuario
monopolice un procesador.
Un reloj horario provee los medios para que el computador pueda hacer un seguimiento de la hora del reloj
de pared.
Algunos dispositivos periféricos están equipados para operación en línea, en la cual están conectados al
procesador, o para operación fuera de línea, en la cual son manejados por unidades de control que no están
conectadas al sistema computacional central.
Mientras estaba en marcha la entrada/salida, los procesadores estaban incapacitados por su manejo. Un
importante adelanto para modificar esta situación fue el desarrollo de los canales de entrada/salida. Un canal es
un sistema computacional de propósito especial, dedicado al maneo de la entrada/salida con independencia del
procesador principal. Un canal puede tener acceso directo al almacenamiento principal para almacenar o
recuperar información.
Un punto de conflicto entre los canales y el procesador esta en el acceso al almacenamiento primario. Como
no puede estar en marcha más que un solo acceso de cada vez, se da prioridad a los canales. Esto se llama robo de
ciclo; los canales, literalmente, roban ciclos al procesador. Los canales utilizan sólo un pequeño porcentaje de
ciclos, pero al recibir la prioridad de esta manera, se consigue una mejor utilización de los dispositivos de
entrada/salida.
Al hacerse evidente la necesidad de almacenamientos primarios mayores, la arquitectura de los computadores
se modificó para acomodar una capacidad muy grande direcciones. Para obtener grades capacidades de
direcciones, los sistemas utilizan direccionamiento de base más desplazamiento, en las cuales todas las direcciones
son añadidas al contenido de un registro base. Este esquema tiene la ventaja adicional de hacer a los programas
independientes de la localización, una propiedad particularmente valiosa para programas dentro de ambientes de
usuarios múltiples, en los cuales un programa puede necesitar se situado en diferentes localizaciones de
almacenamiento primario cada vez que es cargado.
Los sistemas computacionales suelen tener varios estados de ejecución. Para programas de usuarios, el
subconjunto de instrucciones que éste puede ejecutar en estado de problema impide, por ejemplo, la ejecución
directa de instrucciones de entrada/salida. En general, el sistema operativo corre con la categoría de usuario de
mayor confianza en un estado supervisor o modo kernel; tiene acceso a todas las instrucciones del conjunto de
instrucciones del a máquina. Los compiladores e interpretes corren en modo usuario.
Instrucciones privilegiadas, aquellas instrucciones a las que no se tiene acceso en estado de problema.
Los sistemas de almacenamiento virtual permiten a los programas referenciar direcciones que no necesitan
corresponder con las direcciones reales disponibles en el almacenamiento primario. Las direcciones virtuales
desarrolladas por los programas en ejecución son traducidas dinámicamente por el hardware a las direcciones de
instrucciones y datos del almacenamiento principal.
En los sistemas de multiprocesamiento varios procesadores comparten un almacenamiento primario común y
un solo sistema operativo. El multiprocesamiento crea las posibilidades de cierto tipo de conflictos que no se
presentan en sistemas de un solo procesador. Es necesario secuencializar el acceso a una localización de
almacenamiento compartido de manera que dos procesadores no intente modificarla al mimo tiempo.
Acceso directo a la memoria (DMA) requiere una sola interrupción por cada bloque de caracteres transferidos
durante la operación de entrada/salida.
Canalización. Es una técnica de hardware utilizada en sistemas computacionales de elevado rendimiento, para
explotar ciertos tipos de paralelismos durante el procesamiento de instrucciones.
Almacenamiento primario, almacenamiento secundario y almacenamiento cache. Para que un programa
pueda hacer referencia a ciertas instrucciones y datos, éstos deben ser colocados en el almacenamiento primario.
El almacenamiento secundario consta de cintas, discos, etc., y otros medios diseñados para retener información, a
2
51608191.docx
la que se tendrá acceso eventualmente en el almacenamiento primario. El cache es un almacenamiento muy veloz
diseñado para aumentar la velocidad de ejecución de los programas.
Lenguaje de máquina es el lenguaje de programación que un computador puede comprender directamente.
Los lenguajes ensambladores utilizan abreviaturas y palabras significativas para reemplazar las hileras de
números usadas par escribir los programas en lenguaje de máquina. Se desarrollaron para aumentar la velocidad
de proceso de programación y reducir los errores de codificación. Un programa llamado ensamblador traduce los
programas al lenguaje de máquina.
Los lenguajes de alto nivel permiten a los usuarios escribir programas de modo independiente de la máquina.
Los lenguaje de alto nivel son traducidos al lenguaje de máquina por medio de programas llamados compiladores.
Los compiladores y ensambladores se denominan genéricamente traductores. Durante el proceso de traducción,
el programa escrito por el usuario que es introducido al traductor se llama programa fuente; el programa en
lenguaje de máquina producido por el traductor se llama programa objeto o programa resultante.
El programa supervisor para manejar las complejidades de la entrada/salida eliminando la carga al programa
de aplicaciones se denomina sistema de control de entrada/salida.
SPOOL. Simultaneos Peripheral Operation On Line. Operación simultánea de periféricos en línea.
El interprete no produce un programa objeto, más bien ejecuta directamente un programa fuente.
El programa del sistema llamado cargador, es un programa que coloca las instrucciones y datos de un
programa dentro de localizaciones del almacenamiento principal.
Los cargadores de enlace y editores de enlace se encargar de combinar el programa en lenguaje de máquina
producido por un traductor con otros programas en lenguaje de máquina para formar una unidad de ejecución.
La emulación es una técnica por medio de la cual se hace que una máquina aparente ser otra.
3
51608191.docx
- John von Newman, introduce el concepto de software: programa de instrucción que se introducen en la
misma forma que los datos numéricos.
- Se comienza el desarrollo del os lenguajes ensambladores.
4
51608191.docx
o Se generaron industrias independientes del software (Microsoft, Ashton-Tate, McAffee
o Generalización de separación de costo
o Selección de software por parte de usuario.
o Primeras licencias para software.
Tendencias futuras:
- Precio de hardware a la baja.
- Tamaño físico disminuido.
- Aumento en velocidad de procesamiento y capacidad de almacenamiento.
- Muy común el multiprocesamiento.
- Funciones del Sistema Operativo realizadas por software migrarán al microcódigo.
- Estimulación computacional de usuario final.
- Aumento de la cultura computacional.
- Continuación del desarrollo de sistemas paralelos
4. Introducción
¿Qué es un sistema operativo?
Un sistema operativo es un programa que actúa como intermediario entre el usuario de un computador y el
hardware de éste. El propósito del sistema operativo es crear un entorno en el que un usuario pueda ejecutar
programas.
El objetivo primario de un sistema operativo es hacer al sistema de computador cómodo de usar. Un objetivo
secundario es utilizar el hardware de computador de forma eficiente.
Para entender qué son los sistemas operativos, primero debemos entender cómo se han desarrollado.
Los componentes de los sistemas operativos han evolucionado como soluciones naturales a los problemas que
aquejaban a los primeros computadores.
Componente de un sistema de cómputo: el hardware, el sistema operativo, los programas de aplicación( o del
usuario), y los usuarios.
El hardware –la unidad central de proceso(CPU), la memoria y los dispositivos de entrada/salida (E/S)–
proporcionan los recursos de computación básicos. Los programas de aplicación –como los compiladores, sistemas
de base de datos, juegos y programas de negocios– definen las formas en que dichos recursos se utilizan para
resolver los problemas de computación de los usuarios. Puede haber muchos tipos de usuarios (personas,
máquinas, otros computadores) tratando de resolver diferentes problemas; por ello, hay muchos tipos de
programas de aplicación. El sistema operativo controla y coordina el uso del hardware entre los diversos
programas de aplicación de los distintos usuarios.
5
51608191.docx
Un sistema operativo es similar a un gobierno. Los componentes de un sistema de computador son su
hardware, software y datos. El sistema operativo proporciona los medios para aprovechar adecuadamente esos
recursos durante el funcionamiento del sistema de computador.
Podemos ver el sistema operativo como un administrador de recursos. Un sistema de computación tiene
muchos recursos (hardware y software) que pueden ser necesarios para resolver un problema: tiempo de CPU,
espacio de memoria, espacio de almacenamiento de archivos, dispositivos de E/S, y demás. El sistema operativo
actúa como gestor de dichos recursos y los asigna a programa y usuarios específicos según los necesiten para sus
tareas. Debe decidir cuáles solicitudes atenderá asignando recursos para operar el sistema de computación de
manera eficiente y justa.
El sistema operativo necesita controlar los diversos dispositivos de E/S y programas de usuario. Un sistema
operativo es un programa de control, que controla la ejecución de los programas de los usuarios a fin de evitar
errores y el uso incorrecto del computador.
El objetivo primario de un sistema operativo es la comodidad del usuario. Los sistema operativos existen
porque se supone que es más fácil realizar tareas de cómputo con ellos que sin ellos.
Un objetivo secundario es la operación eficiente del sistema de computación. La importancia de este objetivo
crece en los sistemas multiusuario compartidos grandes, que suelen ser muy costosos, por lo que es deseable
aumentar su eficiencia al máximo posible.
Los sistemas operativos y la arquitectura de las computadoras han influido mucho uno sobre el otro. Los
sistemas operativos se crearon para facilitar el uso del hardware. A medida que se diseñaron y usaron los sistemas
operativos, se hizo evidente que podrían simplificarse si se modificaba el diseño del hardware.
6
51608191.docx
- En algún momento posterior (minutos, horas o días después), aparecía la salida, que consistía en el
resultado del programa junto con un vaciado ( o vuelco de) del a memoria y los registros en caso de haber
un error de programa.
Función del Sistema Operativo: Transferir el control automáticamente de un trabajo al siguiente.
El sistema operativo siempre estaba (residente) en la memoria.
A fin de agilizar el procesamiento, los programas con necesidades similares se agrupaban en lotes y se
introducían en el computador como un grupo. Así, los programadores dejaban sus programas con el operador;
éste acomodaba los programas para formar lotes con necesidades similares y, cuando el computador quedaba
disponible, ejecutaba cada lote. La salida de cada trabajo se devolvía al programador apropiado.
Así pues, un sistema operativo por lotes normalmente lee un flujo de trabajos individuales (de un lector de
tarjetas, por ejemplo), cada uno con sus propias tarjetas de control que predefinen lo que le trabajo hace. Una vez
terminado el trabajo, si salida generalmente se imprime ( en una impresora de líneas, por ejemplo).
La característica definitiva de un sistema por lotes es la falta de interacción entre el usuario y el trabajo
mientras éste se ejecuta.
Tiempo de retorno: El retardo entre la presentación de un trabajo y su terminación (puede ser el resultado del
volumen de computo requerido, o de retardos antes de que el sistema operativo comience a procesar el trabajo.
En este entorno de ejecución, la CPU con frecuencia está ociosa. Esta inactividad ocurre porque los
dispositivos de E/S mecánicos son intrínsecamente más lentos que los dispositivos electrónicos. Con el paso del
tiempo, las mejoras a la tecnología dieron pie a dispositivos de E/S más rápidos. Desafortunadamente, las
velocidades de CPU aumentaron a un ritmo aún mayor, de modo que le problema no sólo no se resolvió, sino que
se exacerbó.
La introducción de la tecnología de discos ha sido útil en este sentido. En vez, de leer las tarjetas directamente
del lector a la memoria, para después procesar el trabajo, las tarjetas pueden leerse del lector al disco.
Así mismo, cuando el trabajo solicita la impresión de una línea, esa línea se copia en un buffer del sistema y se
escribe en el disco. Una vez que el trabajo termina, la salida se imprime realmente. Esta forma de procesamiento,
se llama spooling; es un acrónimo de operación periférica simultánea en línea (en inglés, simultaneous peripheral
operaton on-line). En esencia, el disco se utiliza como buffer de gran tamaño, para leer por adelantado hasta
donde sea posible de los dispositivos de entrada, y para guardar los archivos de salida hasta que los dispositivos de
salida puedan aceptarlos.
El spooling también sirve para procesar datos en sitios remotos.
El spooling superpone la E/S de un trabajo al cómputo de otros trabajos.
7
51608191.docx
La idea es la siguiente. El sistema operativo mantiene varios trabajos en la memoria a la vez. Este conjunto de
trabajos es un subconjuntos de los que se mantienen en la reserva de trabajos. El sistema operativo escoge uno
del os trabajos que están en la memoria y comienza a ejecutarlo. Tarde o temprano, el trabajo tendrá que esperar
mientras se lleva a cabo alguna tarea, como el montaje de una cinta o la terminación de una operación de E/S. En
un sistema sin multiprogramación, la CPU estaría ociosa. En un sistema multiprogramado, el sistema operativo
simplemente selecciona otra trabajo y lo ejecuta. Cuando ese trabajo necesita esperar, la CPU se conmuta a otro
trabajo, y así sucesivamente. En algún momento, el primer trabajo terminará su espera y recuperará la CPU. En
tanto haya algún trabajo que ejecutar, la CPU nunca estará ociosa.
La multiprogramación es el primer caso en que el sistema operativo debe tomar decisiones por los usuarios.
Todos los trabajos que ingresan en el sistema se mantienen en un área auxiliar de trabajos. Esta área auxiliar
consiste en todos los procesos que residen en le almacenamiento masivo y que esperan la asignación de espacio
en la memoria principal. Si varios trabajos están listos para colocarse en la memoria, y no hay espacio suficiente
para todos, el sistema deberá escoger algunos de entre ellos. La toma de esta decisión es la planificación de
trabajos. Cuando el sistema operativo escoge un trabajo del área auxiliar, lo carga en la memoria para ejecutarlo.
Tener varios programas en la memoria al mismo tiempo requiere alguna forma de gestión de memoria. Además, si
varios trabajos están listos para ejecutarse al mismo tiempo, el sistema debe escoger entre ellos. La toma de esta
decisión es la planificación de CPU. La ejecución concurrente de múltiples trabajos requiere limitar su capacidad
para afectarse mutuamente en todas las fases del sistema operativo, incluidos la planificación de proceso, el
almacenamiento en disco y la gestión de memoria.
8
51608191.docx
Para que los usuarios puedan acceder con comodidad tanto a los datos como al código, deben contar con un
sistema de archivos en línea. Un archivo es una colección de información relacionada definida por su creador. Por
lo regular, los archivos representan programas (en sus formas tanto fuente como objeto) y datos. Los archivos de
datos pueden ser numéricos, alfabéticos o alfanuméricos. Los archivos pueden ser de forma libre, como los de
texto, o tener un formato rígido. En general, un archivo es una secuencia de bits, bytes, líneas o registros cuyo
significado ha sido definido por su creador y usuarios. El sistema operativo implementa el concepto abstracto de
archivo administrando los dispositivos de almacenamiento masivo, como cintas y discos. Los archivos
normalmente se organizan en grupos lógicos, o directorios, que facilitan su localización y acceso. Puesto que varios
usuarios tienen acceso a archivos, es deseable controlar quién puede acceder a los archivos y de qué formas
puede hacerlo.
Los sistemas por lotes son apropiados para ejecutar trabajos grandes que casi no necesitan interacción. No es
necesario que el usuario espere mientras se procesa el trabajo.
Los trabajos interactivos suelen consistir en muchas acciones cortas, y los resultados de la siguiente orden
podrían ser impredecibles. El usuario introduce la orden y espera los resultados. Por consiguiente, el tiempo de
respuesta debe ser corto. Se emplea un sistema interactivo cuando se requiere un tiempo de respuesta corto.
Los primeros computadores de un solo usuario fueron sistemas interactivos. Esto es, todo el sistema estaba a
la inmediata disposición del programador/operador. Esta situación brindaba al programador gran flexibilidad y
libertad para probar y desarrollar programas. Este sistema hacía que la CPU permaneciera mucho tiempo ociosa
mientras esperaba que el programador/operador hiciera algo. En vista del levado costo de esos computadores, la
ociosidad de la CPU era muy indeseable. Se desarrollaron los sistemas operativos por lotes para evitar este
problema.
Los sistemas de tiempo compartido se crearon para brindar el uso interactivo de un sistema de computador a
un costo razonable. Un sistema operativo de tiempo compartido utiliza planificación de la CPU y
multiprogramación para ofrecer a cada usuario una pequeña porción del tiempo de un computador. Cada usuario
tiene por lo menos un programa individual en la memoria. Un programa que está cargado en la memoria y se está
ejecutando se conoce como proceso.
Los investigadores han intentado fusionar los sistemas por lotes y de tiempo compartido. Muchos sistemas de
computador que se diseñaron primordialmente como sistemas por lotes se han modificado para crear un
subsistema de tiempo compartido. Al mismo tiempo, son varios los casos de sistemas de tiempo compartido a los
que se ha añadido un subsistema por lotes.
Los sistemas operativos de tiempo compartido son todavía más complejos que los multiprogramados. Al igual
que en la multiprogramación, es preciso mantener varios trabajos simultáneamente, lo que requiere alguna forma
de gestión y protección de memoria. Para poder lograr un tiempo de respuesta razonable, podría ser necesario
intercambiar trabajos entre la memoria principal y el disco que ahora funciona como almacén de respaldo de la
memoria principal. Un método común para lograr este objetivo es la memoria virtual, una técnica que permite
ejecutar un trabajo que tal vez no está en su totalidad en la memoria principal (Cap. 9 Memoria Virtual “Gestión
de almacenamiento”). La principal ventaja obvia de este esquema es que los programas pueden ser más grandes
que la memoria física. Además, la memoria principal se abstrae como una matriz grande y uniforme de
almacenamiento, separando la memoria lógica que el usuario ve, de la memoria física. Esta organización permite a
los programadores olvidarse de las limitaciones de almacenamiento en memoria. Los sistemas de tiempo
compartido también necesitan un sistema de archivos en línea (Caps. 10 Interfaz con el sistema de archivos y 11
Implementación del sistema de archivos “Gestión de almacenamiento”). El sistema de archivos reside en una
colección de discos, así que también debe incluirse la gestión de discos (Cap. 13 Estructuras del almacenamiento
secundario “Sistemas de E/S”). Además, los sistemas de tiempo compartido cuentan con un mecanismo de
ejecución concurrente, lo que requiere esquemas de planificación del a CPU avanzados (Cap. 5 Planificación de la
CPU “Gestión de procesos”). Para asegurar una ejecución ordenada, el sistema debe incluir mecanismos para la
sincronización y comunicación de los trabajos (Cap. 6 Sincronización de procesos “Gestión de procesos”), y debe
asegurar que los trabajos no se atasquen en un bloqueo mutuo, esperando cada uno eternamente a que el otro
termine (Cap. 7 Bloqueos mutuos “Gestión de procesos”).
9
51608191.docx
10
51608191.docx
en un disco y hacer que todos los procesadores los compartan, en vez de tener muchos computadores con
discos locales y hacer copias de los datos.
- Los sistemas multiprocesador mejoran la confiabilidad. Si es posible distribuir las funciones correctamente
entre varios procesadores, el fallo de un procesador no detendrá el sistema, solo lo hará más lento.
La capacidad para seguir dando un servicio proporcional al nivel de hardware que sobrevive se denomina
degradación gradual. Los sistemas diseñados para degradarse gradualmente también se conocen como tolerantes
a fallos (fault-tolerant).
El funcionamiento continuado en presencia de fallos requiere un mecanismo para detectar, diagnosticar y
corregir (si es posible) el fallo. El sistema Tandem utiliza duplicación tanto de hardware como de software para
asegurar una operación continuada a pesar de los fallos. El sistema consiste en dos procesadores idénticos, cada
uno con su propia memoria local. Los procesadores se conectan con un bus. Un procesador es el primario, y el
otro es el de respaldo. Se mantienen dos copias de cada proceso; una en la máquina primaria y otra en el
respaldo. En puntos de verificación (checkpoints) fijos durante la ejecución del sistema, la información de estado
de cada trabajo (incluida una copia de la imagen de memoria) se copia de la máquina primaria a la de respaldo. Si
se detecta un fallo, se activa la copia de respaldo, y se reinicia a partir del punto de verificación más reciente. Esta
solución obviamente es costosa, ya que hay mucha duplicación de hardware.
Los sistemas de múltiple procesador más comunes en la actualidad siguen el modelo de multiprocesamiento
simétrico, en el que cada procesador ejecuta una copia idéntica del sistema operativo, y estas copias se comunican
entre sí cuando es necesario. Algunos sistemas utilizan multiprocesamiento asimétrico, en el que a cada
procesador se asigna a una tarea específica. Un procesador controla el sistema; los demás procesadores obtienen
sus instrucciones del maestro o bien tiene tareas predefinidas. Este esquema define una relación maestro-esclavo.
El procesador maestro planifica y asigna trabajo a los procesadores esclavos.
Ejemplo: La ventaja de este modelo es que muchos procesos pueden ejecutarse simultáneamente (N procesos
si hay N CPU) sin que haya deterioro del desempeño. Sin embargo, es preciso controlar cuidadosamente la E/S
para asegurar que los datos lleguen al procesador apropiado. Además, dado que las CPU son independientes una
podría estar ociosa mientras otra está sobrecargada, con la siguiente ineficiencia. A fin de evitar esto, los
procesadores pueden compartir ciertas estructuras de datos. Un sistema multiprocesador de este tipo permite
compartir dinámicamente trabajos y recursos entre los distintos procesadores, y puede reducir la varianza entre
los sistemas. (Cap. 6 Sincronización de procesos “Gestión de procesos”).
El multiprocesamiento asimétrico es más común en los sistemas extremadamente grandes, donde una de las
actividades que más tiempo consume es el procesamiento de E/S. En los sistemas por lotes más antiguos, se
utilizaban procesadores pequeños, situados a cierta distancia de la CPU principal, para operar los lectores de
tarjetas e impresoras de líneas y transferir estos trabajos a y de el computador principal. Estos puntos se
denominan sitios de entrada remota de trabajos (RJE, remote-job-entry). En un sistema de tiempo compartido,
una de las principales actividades de E/S es procesar la E/S de caracteres entre las terminales y el computador. Si
es preciso interrumpir la CPU principal cada vez que se transfiere un carácter a o de una terminal, la CPU podría
pasar todo su tiempo procesando caracteres. Para evitar esta situación, la mayor parte de los sistemas cuenta con
un procesador de extremo frontal (front-end) aparte que se encarga de toda la E/S de terminales.
Es importante darse cuenta de que la diferencia entre multiprocesamiento simétrico y asimétrico puede
deberse al hardware o la software. Podría existir hardware especial para diferenciar los múltiples procesadores, o
podría escribirse software que permita un solo maestro y varios esclavos.
A medida que baja el precio y aumenta la potencia de los microprocesadores, más y más funciones del sistema
operativo se delegan a procesadores esclavos, también llamados back-ends o procesadores de servicios. Por
ejemplo, es fácil añadir un procesador con su propia memoria para administrar un sistema de disco. El
microprocesador podría recibir una secuencia de solicitudes de la CPU principal e implementar su propia cola de
disco y algoritmo de planificación. Esta organización evita a la CPU principal el trabajo extra que implica la
11
51608191.docx
planificación de disco. Los PC contienen un microprocesador en el teclado que convierte las digitaciones en
códigos que se envían a la CPU. De hecho, este uso de los microprocesadores se ha vuelto tan común que ya no se
considera como multiprocesamiento.
14
51608191.docx
- Asignación del almacenamiento.
- Planificación del disco.
Otras funciones del sistema operativo cuyo objetivo no es ayudar al usuario, sino asegurar el
funcionamiento del sistema mismo:
- Asignación de recursos. Si hay varios usuarios o varios trabajos ejecutándose al mismo tiempo, es preciso
asignar recursos a cada uno.
- Contabilización. Es importante mantenerse al tanto de qué usuarios usan cuántos recursos del computador
y de qué tipo. Para facturación o estadística.
- Protección. Los dueños de la información almacenada en un sistema de computador multiusuarios podrían
querer controlar su uso. La protección implica asegurar que todos los accesos a los recursos del sistema
sean controlados. La seguridad del sistema también es importante, y comienza con obligar a cada usuario a
identificarse ante el sistema, por lo regular con una contraseña, antes de poder acceder a los recursos. La
seguridad se extiende a defender los dispositivos de E/S externos, incluidos módems y adaptadores de red,
contra intentos de acceso no autorizado, y registrar todas las conexiones para detectar incursiones.
5. 3 Llamadas al sistema
Las llamadas al sistema son la interfaz entre un procesos y el sistema operativo. Estas llamadas generalmente
están disponibles como instrucciones en lenguaje ensamblador, y casi siempre se listan en los manuales
empleados por quienes programan en ese lenguaje.
Algunos sistemas permiten emitir llamadas al sistema directamente desde un programa escrito en un lenguaje
de alto nivel, en cuyo caso las llamadas casi siempre semejan llamadas predefinidas a funciones o subrutinas.
Las llamadas al sistema se pueden agrupar a grandes rasgos en cinco categorías principales: control de
procesos, manipulación de archivos, manipulación de dispositivos, mantenimiento de información y
comunicaciones.
Tipos de llamadas al sistema:
- Control de procesos
16
51608191.docx
o Fin, abortar
o Cargar, ejecutar
o Crear proceso, terminar proceso
o Obtener atributos de procesos, establecer atributos de procesos.
o Esperar un lapso de tiempo
o Esperar suceso, indicar la ocurrencia del suceso
o Asignar y liberar memoria
- Manipulación de archivos
o Crear archivo, eliminar archivo
o Abrir, cerrar
o Leer, escribir, reposicionar
o Obtener atributos de archivo, establecer atributos de archivo
- Manipulación de dispositivos
o Solicitar dispositivo, liberar dispositivo
o Leer, escribir, reposicionar
o Obtener atributos de dispositivo, establecer atributos de dispositivo
o Conectar o desconectar lógicamente dispositivos.
- Mantenimiento de información
o Obtener hora o fecha, establecer hora o fecha
o Obtener datos del sistema, establecer datos del sistema
o Obtener atributos de un proceso, archivo o dispositivo
o Establecer atributos de un proceso, archivo o dispositivo
- Comunicaciones
- Crear, eliminar conexión de comunicación
- Enviar, recibir mensajes
- Transferir información de estado
- Conectar o desconectar dispositivos remotos.
17
51608191.docx
Hay muchos sistemas comerciales que no tienen una estructura bien definida. A esta estructura se conoce
como monolítica. El sistema operativo se escribe como un conjunto de procedimientos, cada uno de los cuales
puede llamar a cualquiera de los otros siempre que lo necesite. Cuando se emplea esta técnica, cada
procedimiento del sistema tiene una interfaz bien definida en términos parámetros y resultados, y cada una tiene
la libertad de llamar a cualquiera otra, si la última ofrece algún cálculo que la primera necesite.
Para construir el programa objeto real del sistema operativo cuando se usa este método, se compilan todos
los procedimientos individuales o archivos que contienen los procedimientos y después se combinan todos en un
solo archivo objeto con el enlazador. En términos de ocultamiento de información, esencialmente no existe
ninguno; todo procedimiento es visible para todos (al contrario de una estructura que contiene módulos o
paquetes, en los cuales mucha de la información es local a un módulo y sólo se pueden llamar puntos de registro
designados oficialmente del exterior del módulo).
18
51608191.docx
Conceptualmente, un sistema de computador se compone de capas. El hardware es el nivel más bajo en todos
estos sistemas. El núcleo que se ejecuta en el siguiente nivel utiliza las instrucciones del hardware para crear un
conjunto de llamadas al sistema que las capas exteriores pueden usar. Así, los programas del sistema que están
arriba del núcleo pueden usar llamadas al sistema o instrucciones de hardware, y en ciertos sentidos estos
programas no distinguen entre las dos.
Algunos sistemas llevan este esquema un paso más allá permitiendo a los programas de aplicación invocar
fácilmente los programas del sistema. Aquí también, aunque los programas del sistema están en un nivel más alto
que las demás rutinas, los programas de aplicación podrían ver todo lo que está debajo de ellos en la jerarquía
como si formar parte de la máquina misma. Este enfoque de capas se lleva a su conclusión lógica en el concepto
de máquina virtual.
Utilizando planificación de CPU y técnicas de memoria virtual, un sistema operativo puede crear la ilusión de
que múltiples procesos se ejecutan cada uno en su propio procesador con su propia memoria (virtual). El enfoque
de máquina presenta una interfaz que es idéntica al hardware desnudo subyacente. Cada proceso recibe una
copia (virtual) del computador subyacente.
Los recursos del computador físico se comparten para crear las máquinas virtuales. Se puede usar
planificación de CPU para compartir la CPU y crear la ilusión de que los usuarios tiene su propio procesador.
Un problema importante del enfoque de máquina virtual tiene que ver con los sistemas de discos. En este
caso, la solución es ofrecer discos virtuales, que son idénticos en todo sentido con excepción del tamaño. Éstos se
denominan minidiscos en el sistema operativo VM de IBM. El sistema implementa cada minidisco asignando tantas
pistas de los discos físicos como el minidisco necesite.
5.5.1 Java
Otro ejemplo de la persistente utilidad de las máquinas virtuales se relaciona con el lenguaje Java. Java es un
lenguaje que goza de gran popularidad, diseñado por Sun Microsystems, y que se implementa con un compilador
que genera códigos de bytes como salida. Éstos códigos de bytes son las instrucciones que se ejecutan en la
Máquina virtual Java (JVM, Java Virtual Machine). Para que los programas Java se ejecuten en una plataforma, es
necesario que dicha plataforma esté ejecutando una JVM. La JVM se ejecuta en muchos tipos de computadores,
incluidos los compatibles con IBM-PC, Macintosh, estaciones de trabajo y servidores Unix, y minicomputadores y
macrocomputadores IBM. La JVM también se implementa dentro de navegadores de Web como Microsoft
Internet Explorer y Netscape Comunicator. Estos navegadores, a su vez, se ejecutan en diferentes equipos y
sistemas operativos. La JVM también se implementa en el pequeño JAVAOS, pero aquí la implementación es
directamente en hardware para evitar el gasto extra que implica ejecutar Java en sistemas operativos de propósito
general. Por último, dispositivos de propósito específico, como los teléfonos celulares, se pueden implementar a
través de Java utilizando microprocesadores que ejecutan códigos de bytes Java como instrucciones nativas.
La Máquina Virtual Java implementa un conjunto de instrucciones basados en pila que incluye las
instrucciones aritméticas, lógicas, de movimiento de datos y de control de flujo que cabe esperar. Al ser una
máquina virtual, también puede implementar instrucciones que son demasiado complejas para incorporarse en
hardware, incluidas instrucciones para crear y manipular objetos, e invocar métodos. Los compiladores de Java se
limitan a emitir estas instrucciones de códigos de bytes, y la JVM debe implementar la funcionalidad necesaria
para cada plataforma.
El diseño de Java aprovecha el entorno completo que una máquina virtual implementa. Por ejemplo, se
verifica que los códigos de bytes no incluyan instrucciones que pudieran poner en peligro la seguridad o
confiabilidad de la máquina subyacente. Si el programa Java no satisface esta verificación, no se permitiría su
ejecución. Mediante la implementación de Java como lenguaje que se ejecuta en una máquina virtual, Sun ha
creado un recurso orientado a objetos eficiente, dinámico, seguro y transportable. Si bien los programas Java no
son tan rápidos como los que se compilan para el conjunto de instrucciones del hardware nativo, sí son más
19
51608191.docx
eficientes que los programas interpretados y tienen varias ventajas respecto a los lenguajes de compilación nativa
como C.
6 Gestión de procesos
Podemos considerar un proceso como un programa en ejecución. Un proceso necesita ciertos recursos, como
tiempo de CPU, memoria, archivos y dispositivos de E/S, para realizar su tarea. Estos recursos se asignan al
proceso cuando se crea o bien durante su ejecución.
El sistema operativo tiene las siguientes obligaciones en lo tocante a la gestión de procesos: creación y
eliminación de procesos tanto del usuario como del sistema; planificación de procesos; y establecimiento de
mecanismos para la sincronización y comunicación de procesos, y el manejo de bloqueos mutuos.
6.1.1 El proceso
Informalmente, un proceso es un programa en ejecución. La ejecución de un proceso debe proceder de
manera secuencial. Es decir, en cualquier instante, cuando más una instrucción se estará ejecutando a nombre del
proceso.
Un proceso es más que el código del programa (también conocido como sección de texto); también incluye la
actividad actual, representada por el valor del contador de programa y el contenido de los registros del
procesador. Generalmente, un proceso también incluye la pila (stack) del proceso, que contiene datos temporales
(como los parámetros de subrutinas, direcciones de retorno y variables temporales), y una sección de datos que
contiene variables globales).
Hacemos hincapié en que un programa por sí solo no es un proceso; un programa es una entidad pasiva, como
el contenido de un archivo guardado en disco, mientras que un proceso es una entidad activa, con el contador de
programa especificando la siguiente instrucción que se ejecutará, y un conjunto de recursos asociados.
20
51608191.docx
Se dice que un proceso está en estado de ejecución si tiene asignado el CPU. Se dice que un proceso está en
estado listo si pudiera utilizar un CPU en caso de haber uno disponible. Un proceso está en estado bloqueado si
esta esperando algún evento antes de proseguir su ejecución.
Cuando se admite una tarea en el sistema, se crea el proceso correspondiente y se inserta normalmente al
final de la lista de procesos listos. El proceso se desplaza poco a poco hacia el frente de la lista de procesos listos, a
medida que los procesos que se encuentran antes que él completan su turno de uso del CPU.
Despachar(x_proceso): Listo Ejecución.
Cuando el proceso llega al principio de la lista, se le asigna el CPU cuando este queda disponible y entonces se
dice que hay una transición de estado del estado listo al estado de ejecución. A la asignación del procesador al
primer proceso de la lista de procesos listos se le llama despacho.
Tiempo Expirado(x_proceso): Ejecución Listo.
Para evitar que un proceso monopolice el sistema, en forma accidental o intencional, el sistema operativo
utiliza un reloj de interrupción por hardware (también llamado cronómetro de intervalos) para que las tareas de
ese usuario se ejecuten durante un intervalo específico de tiempo o cuanto (quantum). Si el proceso no libera
voluntariamente el CPU antes de que expire el cuanto, el reloj genera una interrupción, haciendo que el sistema
operativo retome el control. El sistema operativo envía al proceso que se estaba ejecutando a la lista de procesos
listo y procede a ejecutar el primero de la lista de procesos listos.
Bloquear(x_proceso): Ejecución Bloqueado.
Si el proceso que se está ejecutando inicia una operación de entrada/salida antes de que expire su cuanto,
libera voluntariamente al CPU, es decir, el proceso se bloquea a sí mismo esperando que se complete la operación
de entrada salida.
Despertar(x_proceso): Bloqueado Listo.
Cuando se completa una operación de entrada/salida o algún otro evento que espere un proceso. El proceso
realiza la transición del estado bloqueado al estado listo.
- Estado del proceso: El estado puede ser, nuevo, listo, en ejecución, en espera, detenido, etc.
- Contador de programa: El contador indica la dirección de la siguiente instrucción que se ejecutará para este
proceso.
- Registros de CPU: El número y el tipo de los registros varía dependiendo de la arquitectura del computador.
Los registros incluyen acumuladores, registros índice, punteros de pila y registros de propósito general, así
como cualesquier información de códigos de condición que haya. Junto con el contador de programa, esta
información de códigos de estado se debe guardar cuando ocurre una interrupción, para que le proceso
pueda continuar correctamente después.
- Información de planificación de CPU: Esta información incluye una prioridad del proceso, punteros a colas
de planificación y cualesquier otros parámetros de planificación que haya.
- Información de gestión de memoria: Esta información puede incluir datos tales como el valor de los
registros de base y límite, las tablas de páginas o las tablas de segmentos, dependiendo del sistema de
memoria empleado por el sistema operativo.
21
51608191.docx
- Información contable: Esta información incluye la cantidad de tiempo de CPU y tiempo real consumida,
límites de tiempo, números de cuenta, números de trabajo o proceso, y demás.
- Otra información relevante: Un apuntador hacia el padre del proceso (hacia el proceso que lo creó),
apuntadores a los hijos del proceso en el caso de tener procesos creados por él, apuntadores a los recursos
asignados del proceso, un área para salvaguarda de los registros, el procesador en que se está ejecutando
el proceso (en el caso de múltiples procesadores).
También hay dos posibilidades en términos del espacio de direcciones del nuevo proceso:
- El proceso hijo es un duplicado del proceso padre.
- Se carga un programa del proceso hijo.
Los sistemas que administran procesos deben ser capaces de realizar ciertas operaciones sobre procesos:
Crear un proceso implica:
1. Darle un nombre al proceso.
2. Dar de alta en la lista de procesos conocidos del sistema o de la tabla de procesos (insertar).
3. Determinar la prioridad inicial del proceso.
4. Crear el PCB de ese proceso.
5. Asignar recursos al proceso.
Suspender un proceso. Un proceso suspendido no puede proseguir hasta que los reanuda otro proceso. La
suspensión dura por lo regular breves momentos o breves periodos de tiempo. El sistema efectúa
suspensiones par eliminar temporalmente ciertos procesos y así reducir la carga del sistema durante
situaciones de carga máxima. Cuando hay suspensiones largas se deben liberar los recursos del proceso.
Reanudar un proceso. Reanuda o activar un proceso implica reiniciarlo a partir del punto en le que se
suspendió.
Bloquear un proceso.
Despertar un proceso.
Despachar un proceso.
Permitir que proceso se comunique con otros (comunicación entre procesos).
Cambiarle la prioridad a un proceso.
23
51608191.docx
- Algunos procesos se pueden suspender como respuesta a las fluctuaciones a corto plazo de la carga del
sistema y reanudarse cuando las cargas regresen a niveles normales.
Transacciones:
Suspender(x_proceso): Listo Suspendido_Listo
Despachar(x_proceso): Listo Ejecución.
Suspender(x_proceso): Ejecución Suspendido_Listo
Reanudar(x_proceso): Suspendido_Listo Listo
Tiempo execedido(x_proceso) Ejecución Listo
Suspender(x_proceso): Bloqueado Suspendido_Bloqueado
Completar(x_proceso): Bloqueado Listo
Reanudar(x_proceso): Suspendido_Bloqueado Bloqueado
Completar(x_proceso): Suspendido_Bloqueado Suspendido_Listo
Espera(x_proceso): Ejecución Bloqueado
6.3 Interrupciones
Interrupción. Es un evento que altera la secuencia en que le procesador ejecuta las instrucciones. La
interrupción es generada por el hardware del sistema
Cómo puede hacerse una llamada al sistema:
1) El programa del usuario captura el kernel
2) El sistema operativo determina el número de servicio que se pide
24
51608191.docx
3) El sistema operativo localiza y llama a un procedimiento de servicio
4) El control se devuelve al programa del usuario
Cuando se genera una interrupción:
1. El sistema operativo toma el control, es decir, el hardware pasa el control al sistema operativo.
2. El sistema operativo guarda el estado del proceso interrumpido, en muchos sistemas esta información se
guarda en el PCB del proceso interrumpido.
3. El sistema operativo analiza la interrupción y transfiere el control a la rutina apropiada para atenderla. En
algunos sistemas el hardware se encarga de esto automáticamente.
4. La rutina del manejador de interrupciones procesa la interrupción.
5. Se restablece el estado del proceso interrumpido o del siguiente proceso.
6. Se ejecuta el proceso interrumpido o el siguiente proceso.
Una interrupción puede ser generada específicamente por un proceso en ejecución en cuyo caso le suele
denominar trampa o trap y se dice que está sincronizada con la operación del proceso o bien puede ser causada
por algún evento que puede estar relacionado o no con el proceso en ejecución en cuyo caso se dice que es
asíncrona con la operación en proceso.
26
51608191.docx
interrupciones cuando atiende una interrupción y las habilita nuevamente una vez que ha completado el
procesamiento de la interrupción. Cuando se da un flujo continuo de interrupciones, es posible que el núcleo deje
inhabilitadas las interrupciones por un periodo largo, esto puede ocasionar un elevado tiempo de respuesta a las
interrupciones. Por esta razón los núcleos son diseñados para realizar el “mínimo” posible de procesamiento en
cada interrupción y dejar que el resto lo realice el proceso apropiado del sistema, que puede operar mientras el
núcleo se habilita para atender otras operaciones. Lo que se traduce en que las interrupciones permanecen
habilitadas un porcentaje mucho mayor del tiempo y que el sistema responde mejor.
27
51608191.docx
Planificación de Alto Nivel. Planificación de trabajo. Determina cuáles trabajos podrán competir
activamente por los recursos del sistema o bien cuales trabajos deben admitirse por lo que también la
llamamos planificación de admisión.
Planificación de Nivel Intermedio. Determina que procesos pueden competir por el CPU. Responde a las
fluctuaciones temporales en la carga del sistema mediante la suspensión temporal y la activación
(reanudación) de procesos para lograr una operación más fluida del sistema y ayuda a alcanzar ciertas
metas globales del rendimiento del sistema. Actúa como amortiguador entre la admisión de los trabajos y
la asignación del CPU a esos trabajos.
Planificación de Bajo Nivel. Determina a cuál proceso listo se le asignará el CPU cuando éste se encuentre
disponible y se encargará de asignar el CPU a ese proceso. Se lleva a cabo mediante el despachador y este
debe residir en la memoria principal.
7.1.4 Prioridades
Las prioridades pueden ser asignadas en forma automática por el sistema, o bien se pueden asignar
externamente. Pueden ganarse o comprarse. Pueden ser estáticas o dinámicas. Pueden asignarse en forma
racional, o de manera arbitraria en situaciones en la que un mecanismo del sistema necesita distinguir entre
procesos pero no le importa cual de ellos es en verdad más importantes.
Prioridades estáticas.- Son aquellas prioridades que no cambian, es decir, no responden a los cambios en
el ambiente que podrían hacer necesario un ajuste de prioridades. Se mantienen constantes mientras
dura el proceso.
Prioridades dinámicas.- Son aquellas prioridades que responden a los cambios. La prioridad inicial
asignada a un proceso tiene una duración corta, después de lo cual se ajusta a un valor más apropiado.
Cambian en respuesta a los cambios del as condiciones del sistema.
Prioridades compradas.- Son aquellas que tienen un precio monetario, en la cual el usuario compra un
nivel más alto de servicio.
7.1.6 Despachador
Otro componente que interviene en la función de planificación de la CPU es el despachador (dispatcher). Éste
es el módulo que cede el control de la CPU al proceso seleccionado por el planificador a corto plazo. Esta función
implica:
- Cambiar de contexto.
- Cambiar a modo de usuario.
- Saltar al punto apropiado del programa del usuario para reiniciar ese programa.
El despachador debe ser lo más rápido posible, porque se invoca en cada conmutación de proceso. El tiempo
que el despachador tarda en detener un proceso y poner otro en ejecución se denomina latencia del despachador.
29
51608191.docx
Rendimiento: Si la CPU está ocupada ejecutando procesos, se está efectuando trabajo. Una medida del
trabajo es el número de procesos que se completan por unidad de tiempo: el rendimiento. En el caso de
procesos largos, esta tasa podría ser de un proceso por hora; en el caso de transacciones cortas, el
rendimiento podría ser de 10 procesos por segundo.
Tiempo de retorno: Desde el punto de vista de un proceso en particular, el criterio importante es el
tiempo que tarda la ejecución de ese proceso. El intervalo entre el momento de presentación de un
proceso y el momento en que se termina es el tiempo de servicio, y es la suma de los periodos durante los
cuales espera entrar en la memoria, espera en la cola de procesos listos, se ejecuta en la CPU y realiza E/S.
Tiempo de espera: el algoritmo de planificación de la CPU no afecta la cantidad de tiempo que un proceso
pasa ejecutándose o realizando E/S; sólo afecta el tiempo que un proceso pasa esperando en la cola de
procesos listos. El tiempo de espera es la suma de los periodos que el proceso pasa esperando en dicha
cola.
Tiempo de respuesta: En un sistema interactivo, el tiempo de retorno tal vez no sea el mejor criterio. Es
común que un proceso pueda producir algunas salidas en poco tiempo, y pueda seguir calculando nuevos
resultados mientras los anteriores se están presentando al usuario. Por ello, otra medida es el tiempo que
transcurre entre la presentación de una solicitud y la producción de la primera respuesta. Esta medida,
llamada tiempo de respuesta, es el tiempo que el proceso tarda en comenzar a responder, pero no incluye
el tiempo que toma exhibir la respuesta. El tiempo de retorno generalmente está limitado por la velocidad
del dispositivo de salida.
___
7.3.5.1 Planificación por tiempo restante más corto ( SRT, Shortest-remaining-time scheduling)
Es la contraparte expropiativa de SJF. En SRT, el proceso con el menor tiempo estimado de ejecución para
terminar es el primero en ejecutarse, incluyendo los procesos nuevos. Un proceso en ejecución puede ser
despojado por un proceso nuevo con un tiempo estimado de ejecución más pequeño.
31
51608191.docx
2. Procesos interactivos
3. Procesos de edición interactiva
4. Procesos por lotes
5. Procesos de estudiantes
Ya que la cola de primer plano podría tener prioridad absoluta sobre la cola de segundo plano, en el ejemplo,
ningún proceso de la cola de procesos por lotes se podrá ejecutar si no están vacías las colas de los procesos del
sistema, procesos interactivos y procesos de edición interactivo. Si un proceso de edición interactiva ingresa en la
cola de procesos listos mientras se está ejecutando un proceso por lotes, éste será desalojado.
32
51608191.docx
8 Almacenamiento Real
La organización y administración de la memoria principal o memoria primaria o memoria real de un sistema de
computación ha sido uno de los factores más importantes en el diseño de los sistemas operativos.
Las estrategias de búsqueda están relacionadas con el hecho de cuándo obtener el siguiente fragmento de
programa, o de datos, para su inserción en el almacenamiento principal. La estrategia convencional de búsqueda
por demanda, donde el siguiente fragmento de programas, o de datos, es traído al almacenamiento principal
33
51608191.docx
cuando algún programa en ejecución hace referencia a él; en oposición a la estrategia de búsqueda anticipada
donde se intenta predecir adónde irá el control del programa en el paso siguiente para traer esa porción al
almacenamiento principal.
Las estrategias de colocación están relacionadas con la determinación del lugar dentro del almacenamiento
principal, donde va a ser colocado un programa nuevo. Las estrategias de colocación del almacenamiento de
primer ajuste, mejor ajuste y peor ajuste.
Las estrategias de reposición están relacionadas con la determinación de qué fragmentos de programa, o de
datos, desplazar, para dejar sitio a los programas nuevos.
___
35
51608191.docx
produce cuando los trabajos del usuario no llenan completamente sus particiones designadas, o cuando una
partición permanece sin usar porque es demasiado pequeña par alojar un trabajo que se encuentra en espera.
___
36
51608191.docx
8.7 Multiprogramació n con intercambio de almacenamiento
En cada uno de los esquemas de multiprogramación estudiados hasta el momento, los programas del usuario
permanecen en la memoria principal hasta su terminación. Otro esquema, llamado intercambio, no requiere esto.
En algunos sistemas de intercambio, un trabajo ocupa el almacenamiento principal de inmediato. Este trabajo
se ejecuta hasta que ya no puede continuar y entonces cede el almacenamiento y el CPU al siguiente trabajo. Con
esto, la totalidad del almacenamiento se dedica a un trabajo durante un breve periodo, ese trabajo es entonces
retirado (es decir, intercambiado) y entra el nuevo. Un trabajo puede ser intercambiado varias veces, antes de
llegar a su terminación.
__
9.1 Introducció n
La memoria es una gran matriz de palabras o bytes, cada uno con su propia dirección. La CPU obtiene
instrucciones de la memoria según el valor del contador de programa. Estas instrucciones pueden hacer que se
carguen valores de direcciones de memoria específica o que se guarden en ellas.
Un ciclo de ejecución de instrucción representativo primero obtiene una instrucción de la memoria. Acto
seguido, la instrucción se decodifica y podría causar la obtención de operandos de la memoria. Una vez que se ha
ejecutado la instrucción con los operandos, podría almacenarse resultados en la memoria. Cabe señalar que la
unidad de memoria sólo ve una corriente de direcciones de memoria; no sabe cómo se generan (contador de
instrucciones, etc.) ni para qué son (instrucciones o datos). Por tanto, podemos olvidarnos de cómo un programa
genera una dirección de memoria; sólo nos interesa la secuencia de direcciones de memoria generada por el
programa en ejecución.
37
51608191.docx
extenderá de ahí hacia arriba. Si posteriormente la posición de inicio cambia, será necesario recompilar el
código. Los programas con formato .COM de MS-DOS son código absoluto vinculado en el momento de la
compilación.
- Carga: Si al compilar el programa no se sabe en qué parte de la memoria va a residir el proceso, el
compilador deberá generar código reubicable. En este caso la vinculación final se posterga hasta el
momento del a carga. Si la dirección de inicio cambia, bastará con volver a cargar el código de usuario para
incorporar este valor modificado.
- Ejecución: Si, durante su ejecución, un proceso se podría pasar de un segmento de la memoria a otro, la
vinculación deberá postergarse hasta el momento de la ejecución. Se requiere de hardware especial para
que este esquema funcione.
___
39
51608191.docx
9.3 Almacenamiento virtual
El término almacenamiento virtual suele asociarse con la capacidad de direccionar un espacio de
almacenamiento mucho mayor que el disponible en el almacenamiento primario de determinado sistema de
computación.
Los dos métodos más comunes de implementación del almacenamiento virtual son la paginación y la
segmentación.
Evolución en las organizaciones de almacenamiento:
Sistema
Sistemas de multiprogramación en
dedicado a un Multiprogramación en almacenamiento virtual
almacenamiento real
solo usuario.
Absoluta Relocalizable
40
51608191.docx
limitado almacenamiento real. Este segundo nivel de almacenamiento recibe los nombres de almacenamiento
auxiliar, secundario o adicional.
9.4 Paginació n
41
51608191.docx
usuario no puede acceder a memoria que no posee; no tiene manera de direccionar memoria que no esté en su
tabla de páginas, la cual sólo incluye las páginas propiedad de ese proceso.
Puesto que el sistema operativo administra la memoria física, debe tener conciencia de los detalles de su
asignación: cuales marcos están asignados, cuáles están libres, cuántos marcos hay en total, etc. Esta información
generalmente se guarda en una estructura de datos llamada tabla de marcos, la cual tiene, por cada marco de
página físico, una entrada en la que se indica si el marco está libre o asignado y, si está asignado, a qué página de
qué proceso se asignó.
__
9.4.2.2 Protección
La protección de la memoria en un entorno paginado se logra con bits de protección asociados a cada marco.
Normalmente, estos bits se mantienen en la tabla de páginas. Un bit puede definir si la página es de lectura y
escritura o sólo de lectura. Cada referencia a la memoria pasa por la tabla de páginas para obtener el número de
marco correcto. Al mismo tiempo que se está calculando la dirección física, se pueden examinar los bits de
protección para comprobar que no se está tratando de escribir en una página en la que sólo se permite leer.
Semejante intento causaría la transferencia de control al sistema operativo a través de una trampa (violación de la
protección de memoria).
Tal estrategia de protección se puede ampliar fácilmente para ofrecer un nivel más detallado de protección.
42
51608191.docx
Generalmente se añade un bit más a cada entrada de la tabla de páginas: un bit de validez /no validez. Si este
bit indica “válido”, es que la página correspondiente está en el espacio de direcciones lógico del proceso, y por
ende es válida. Si el bit indica “no válido”, la página no está en el espacio de direcciones lógico del proceso. Las
direcciones no válidas se atrapan empleando el bit de validez /no validez. El sistema operativo establece este bit
para cada página a fin de permitir o prohibir el acceso a ella.
___
43
51608191.docx
almacenamiento de datos que contienen la información para la ejecución del proceso. Desde luego, los datos de
dos procesos distintos son diferentes.
Sólo hay que mantener una copia del editor en la memoria física. La tabla de páginas de cada usuario
establece una correspondencia con la misma copia física del código reentrante, pero las páginas de datos
corresponden a marcos distintos.
___
9.5 Segmentació n
Un aspecto importante de la gestión de memoria que se hizo inevitable al surgir la paginación es la separación
entre la visión que el usuario tiene de la memoria y la memoria física real. La visión del usuario no es igual a la
memoria física real; sólo tiene una correspondencia con ella. La correspondencia permite diferenciar entre la
memoria lógica y la física.
9.5.2 Hardware
Aunque el usuario ahora puede referirse a los objetos del programa con una dirección bidimensional, la
memoria física real sigue siendo una secuencia unidimensional de bytes. Por ello, es preciso definir una
implementación que transforme las direcciones bidimensionales definidas por el usuario en direcciones físicas
unidimensionales. Esta transformación se efectúa con una tabla de segmentos. Cada entrada de la tabla tiene una
base de segmento y un límite de segmento. LA base contiene la dirección física inicial donde el segmento reside en
la memoria, mientras que el límite especifica la longitud del segmento.
44
51608191.docx
Una dirección lógica consta de dos partes: un número de segmento, s, y un desplazamiento dentro de ese
segmento, d. El número de segmento sirve como índice para consultar la tabla de segmentos. El desplazamiento d
de la dirección lógica debe estar entre 0 y el límite del segmento; si no, transferimos el control al sistema
operativo por una trampa (intento de direccionamiento lógico más allá del final del segmento). Si el
desplazamiento es válido, se suma a la base del segmento para producir la dirección del byte deseado en la
memoria física.
10 Memoria virtual
La memoria vitual es una técnica que permite ejecutar procesos que podrían no estar totalmente en la
memoria. La principal ventaja tangible de este esquema es que los programas pueden ser más grandes que la
memoria física. Además, dicho esquema hace una abstracción de la memoria considerándola como una matriz
uniforme y extremadamente grande de almacenamiento, con lo que separa la memoria lógica que el usuario ve,
de la memoria física.
10.1 Antecedentes
Los algoritmos de gestión de memoria vistos anteriormente son necesarios a causa de un requisito básico: las
instrucciones que se están ejecutando deben estar en la memoria física. La primera estrategia para satisfacer este
requisito es colocar todo el espacio de direcciones lógico en la memoria física. Las superposiciones y la carga
dinámica pueden ayudarnos a hacer menos limitante esta restricción. Esta restricción limita el tamaño de los
programas al tamaño de la memoria.
De hecho, si examinamos programas reales, veremos que en muchos casos no se necesita todo el programa.
La capacidad para ejecutar un programa que no está todo en la memoria tendría muchas ventajas:
- Los programas ya no estarían limitados por la cantidad de memoria física con que se cuenta. Los usuarios
podrían escribir programas para un espacio de direcciones virtual extremadamente grande, lo que
simplificaría la tarea de programación.
- Puesto que cada programa de usuario ocuparía menos memoria física, se podrían ejecutar más programas
al mismo tiempo. Esto aumentaría el aprovechamiento de la CPU y la productividad sin aumentar el
tiempo de respuesta ni el de retorno.
- Se requeriría menos E/S para cargar o intercambiar cada programa de usuario, por lo que su ejecución
sería más rápida.
La memoria virtual generalmente se implementa con paginación por demanda.
46
51608191.docx
sólo trae las páginas necesarias; así, evita leer y colocar en la memoria páginas que de todos modos no se usarán,
con lo que se reduce el tiempo de intercambio y la cantidad de memoria física requerida.
Con este esquema, necesitamos alguna forma de soporte de hardware para distinguir entre las páginas que
están en la memoria y las que están en disco. Podemos usar para este fin el esquema de bit de validez-no validez,
donde ahora el valor de “válido” del bit indica que la página correspondiente es válida y está en la memoria. Si el
bit tiene el valor “no válido”, quiere decir que la página o bien no es válida (es decir, no está en el espacio de
direcciones lógico del procesos) o es válida pero no está en la memoria. La entrada de la tabla de páginas
correspondiente a una página que se trajo a la memoria se establece de la forma acostumbrada, pero la
correspondiente a una página que actualmente no está en la memoria simplemente se marca como no válida, o
bien contiene la dirección de la página en el disco.
Cabe señalar que marcar una página como no válida no tiene efecto alguno si el procesos nunca intenta
acceder a esa página. Por tanto, si adivinamos correctamente y traemos a la memoria todas las páginas que en
verdad se necesitan, y únicamente esas, el proceso se ejecutará exactamente igual que si hubiéramos traído todas
las páginas. Muestra el proceso ejecute y acceda a páginas residentes en memoria, la ejecución se realizará
normalmente.
Pero, ¿qué sucede si el proceso trata de usar una página que no se trajo a la memoria? El acceso a una página
marcada como no válida causa una trampa de fallo de página (page fault). El hardware de paginación, al traducir
la dirección utilizando la tabla de páginas, se percatará de que el bit de no validez está encendido y causará una
transferencia de control al sistema operativo. Esta trampa ocurre porque el sistema operativo no pudo traer la
página deseada a la memoria (en un intento por minimizar el gasto extra de transferencia del disco y las
necesidades de memoria), no es un error de dirección no válida causado por un intento de usar una dirección de
memoria no permitida (como cuando se usa un subíndice de arreglo incorrecto).
El procedimiento para manejar este fallo es:
1. Consultar una tabla interna (que usualmente se guarda junto con el bloque de control de proceso) de este
proceso, para determinar si la referencia fue un acceso válido o no válido a la memoria.
2. Si la referencia no era válida, se termina el proceso; si era válida, pero todavía no se ha traído esa página,
proceder a traerla.
3. Encontrar un marco libre (tomando uno de la lista de marcos libres).
4. Planificar una operación de disco para leer la página deseada y colocarla en el marco recién asignado.
5. Al terminar la lectura del disco, modificar la tabla interna que se guarde junto con el proceso y la tabla de
páginas, d modo que indiquen que la página ya está en la memoria.
6. Reiniciar la instrucción que se interrumpió por la trampa de dirección no válida. Ahora el proceso puede
acceder a la página como si siempre hubiera estado en la memoria.
47
51608191.docx
Al llegar a este punto, el sistema operativo tiene varias opciones. Una de ellas sería terminar el proceso de
usuario. O se podría intercambiar a disco un proceso para liberar todos sus marcos y reducir el nivel de
programación. O se podría hacer el reemplazo de páginas.
El reemplazo de páginas adopta el siguiente enfoque: si no hay marcos libres, encontramos uno que no se está
usando y lo liberamos. Podemos liberar un marco escribiendo su contenido en el espacio de intercambio y
modificando la tabla de páginas (y todas las demás tablas) de modo que indiquen que la página ya no está en la
memoria. Ahora, el marco liberado puede servir para contener la página por la cual ocurrió el fallo. La rutina de
servicio de fallos de página se modifica así para incluir el reemplazo de páginas:
1. Encontrar la página deseada en el disco.
2. Hallar un marco libre:
a. Si hay un marco libre, usarlo.
b. Si no, usar un algoritmo de reemplazo de páginas para escoger un marco víctima.
c. Escribir la página víctima en el disco; modificar de manera acorde las tablas de páginas y de
marcos.
3. Leer la página deseada y colocarla en el marco recién liberado; modificar las tablas de páginas y de
marcos.
4. Reiniciar el proceso de usuario.
Observe que, si no hay marcos libres, se requieren dos transferencias de página. Este gasto extra pude
reducirse empleado un bit de modificación, o bit sucio. Cada página o marco pude tener en hardware un bit de
modificación asociado a ella. El hardware “enciende” (pone en 1) el bit de modificación de una página siempre que
se escribe una palabra o byte de la página, e indica que la página se modificó. Cuando seleccionamos una página
para reemplazarla, examinamos su bit de modificación. Si el bit está encendido, sabemos que la página se
modificó después de haberse leído del disco. En este caso es preciso escribir la página en el disco. Si el bit de
modificación está apagado, la página no se ha modificado desde que se trajo a la memoria. Por tanto, si la copia
de la página que está en el disco no se ha sobrescrito (con alguna otra página, por ejemplo) podemos evitar la
escritura en disco de la página que está en la memoria, pues ya está en el disco. Esta técnica también aplica a las
páginas que sólo pueden leerse. Tales páginas no pueden modificarse, así que pueden desecharse cuando se
desee.
Por lo tanto es necesario resolver el problema de cómo reemplazar las páginas.
48
51608191.docx
La anomalía de Belady refleja el hecho de que, con algunos algoritmos de reemplazo de páginas, la frecuencia
de fallos de página podría aumentar al aumentar el número de marcos asignados. Esperaríamos que conceder más
memoria a un proceso mejoraría su desempeño, lo cual no siempre se cumple.
Un resultado del descubrimiento de la anomalía de Belady fue la búsqueda de una algoritmo de reemplazo de
páginas óptimo. Un algoritmo óptimo tiene la frecuencia de fallos de página más bajo de todos los algoritmos de
reemplazo de páginas, y nunca exhibe la anomalía de Belady. Existe un algoritmo de reemplazo de páginas óptimo,
que se ha denominado OPT o MIN, y es sencillamente
Reemplazar la página que no se usará durante más tiempo
El empleo de este algoritmo de reemplazo de páginas garantiza la frecuencia de fallos de página más baja para
un número fijo de marcos.
49
51608191.docx
Podemos obtener información de ordenamiento adicional si registramos los bits de referencia a intervalos
adicionales. Podemos mantener un byte histórico de ocho bits para cada página de una tabla que está en
memoria. A intervalos regulares, una interrupción del temporizador transfiere el control al sistema operativo, el
cual introduce el bit de referencia de cada página en el bit de orden alto de su byte histórico, desplazando los
demás bits de una posición hacia la derecha y desechando el bit de orden bajo. Estos registros de desplazamiento
de ocho bits contienen la historia de uso de la página durante los últimos ocho periodos del temporizador. Si el
registro de desplazamiento contiene 0000000, la página no se ha usado durante ocho periodos del temporizador;
una página que se ha usado al menos una vez cada periodo tendrá un valor de 11111111 en el registro de
desplazamiento.
Una página cuyo registro histórico contiene el valor 11000100 se usó más recientemente que uno cuyo
registro contiene 01110111. Si interpretamos estos byte como enteros sin signo, la página que contiene el número
más bajo es la página LRU, y se puede sustituir. Cabe señalar que no está garantizado la unicidad de dichos
números. Podemos optar por reemplazar (intercambiar a disco) todas las páginas que tiene el valor más bajo, o
bien usar unas selección FIFO entre ellos.
Se puede variar el número de bits históricos, con un caso extremo de reducir el número a cero, dejando sólo el
bit de referencia. En este caso el algoritmo de reemplazo de páginas se denomina de segunda oportunidad.
50
51608191.docx
Si es preciso reemplazar una página, todas las páginas pertenecen a una de estas cuatro clases. Utilizamos el
mismo esquema que en el algoritmo de reloj, pero en lugar de ver si el bit de referencia de la página a la que
apunta el puntero está encendido, se determina a la calase a la que la página pertenece. Reemplazaremos la
primera página que encontremos en la clase más baja que no esté vacía.
51