Download TEMA 3: EL SISTEMA OPERATIVO ÍNDICE:

Document related concepts

Gestión de memoria wikipedia , lookup

Proceso (informática) wikipedia , lookup

Memoria virtual wikipedia , lookup

Sistema operativo wikipedia , lookup

Hilo de ejecución wikipedia , lookup

Transcript
TEMA 3: EL SISTEMA OPERATIVO
ÍNDICE:
1. FUNCIÓN DEL SISTEMA OPERATIVO ............................................................................2
2. EVOLUCIÓN HISTÓRICA ..................................................................................................3
3. ARQUITECTURA Y COMPONENTES ...............................................................................3
3.1. ARQUITECTURA .........................................................................................................3
3.2. COMPONENTES ..........................................................................................................6
4. MODOS DE EXPLOTACIÓN DEL SISTEMA OPERATIVO ............................................7
5. CLASIFICACIÓN DE LOS SISTEMAS OPERATIVOS .....................................................7
5.1. SEGÚN EL NÚMERO DE USUARIOS .......................................................................7
5.2. SEGÚN EL NÚMERO DE PROCESOS .......................................................................8
6. SEGURIDAD EN LOS SISTEMAS OPERATIVOS ............................................................9
6.1. COMPARTIR MEMORIA .............................................................................................9
6.2. BLOQUEO DE PROCESOS .........................................................................................9
7. MECANISMOS DE SINCRONIZACIÓN ..........................................................................10
7.1. EXCLUSIONES MUTUAS .........................................................................................10
7.2. ALTERNANCIAS (ESPERAS ACTIVAS) ..................................................................11
7.3. SEMÁFOROS ..............................................................................................................11
7.4. MONITORES ...............................................................................................................12
8. SERVICIOS DEL SISTEMA OPERATIVO ........................................................................14
8.1. GESTIÓN DE PROCESOS .........................................................................................14
8.2. GESTIÓN DE MEMORIA ..........................................................................................18
8.2.1. Introducción ..........................................................................................................18
8.2.2. Direccionamiento ..................................................................................................19
8.2.3. Asignación de direcciones ....................................................................................20
8.3. SISTEMAS DE GESTIÓN DE MEMORIA ................................................................20
8.3.1. Gestión en Monoprogramación ............................................................................21
8.3.2. Gestión en Multiprogramación .............................................................................23
8.4. RECUBRIMIENTOS (Overlays) .................................................................................28
8.5. MEMORIA VIRTUAL .................................................................................................29
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
1 de 31
1. FUNCIÓN DEL SISTEMA OPERATIVO
Podemos manejar varias definiciones de lo que es un Sistema Operativo:
1ª) Conjunto de programas que, ordenadamente relacionados entre sí, contribuyen a que el
ordenador lleve a efecto el trabajo encomendado.
2ª) Desde el punto de vista del sistema informático, el SO es una serie de programas y
funciones que ocultan los detalles del HW, ofreciendo una vía sencilla y flexible de
acceso al mismo, teniendo dos objetivos fundamentales: Seguridad y Abstracción.
➢ Seguridad: el SO debe actuar contra cualquier manipulación extraña, accidental
o premeditada, que pudiera dañar la información, perjudicar a otros usuarios o
que funcione de forma inapropiada.
Para ello hay ciertas instrucciones que pueden parar la máquina y otras que
realizan operaciones directamente sobre el HW, hay que evitar que se utilicen
directamente por los programas. Algunos sistemas proporcionan dos estados
llamados estado protegido (o Sistema Kernel, en el cual se ejecuta el sistema
operativo) y estado no protegido (Modo Usuario, que es el destinado a la
ejecución de los programas de usuario y de aplicación). De esta manera se
impide que los programas de usuario puedan tener contacto directo con el HW
del sistema.
➢ Abstracción: la tendencia actual del SW y de los lenguajes de programación es
ocultar lo más posible los detalles de más bajo nivel, intentando dar a los niveles
superiores las siguientes características:
 Una visión más sencilla, global y abstracta.
 Ofreciendo operaciones para manipular estructuras de datos ocultas,
desconociendo por completo la gestión interna de las mismas.
 Sobre estas estructuras se crean otras más complejas que se abstraen a las
anteriores y así sucesivamente.
Gracias a la abstracción, los sistemas operativos enmascaran los recursos físicos,
permitiendo su manejo con funciones más generales que ocultan las básicas,
constituyendo verdaderos recursos ficticios o virtuales, que mejoran y son más
potentes que los físicos.
3ª) Desde el punto de vista del usuario, el sistema operativo proporciona servicios que no
están presentes en la máquina. Estos servicios incluyen:
➢ Las facilidades de carga y ejecución de programas, permitiendo que se ejecuten
varios al mismo tiempo.
➢ Almacenamiento de datos y programas.
➢ Gestión de la contabilidad para facturar los servicios, por ejemplo.
4ª) Desde el punto de vista de un programa, la máquina física se convierte en una especie
de máquina virtual, también conocida como máquina extendida, que presenta la
ventaja respecto a la física de ofrecer más funciones de las que normalmente soporta
esta última.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
2 de 31
Con todas las definiciones anteriores, se pueden citar las siguientes funciones específicas del
Sistema Operativo:
➢
➢
➢
➢
➢
➢
➢
Comunicación con el usuario.
Control y gestión de elementos físicos.
Utilización y acceso al sistema por varios usuarios.
Ejecución de varios programas al mismo tiempo.
Comunicación entre sistemas diferentes.
Compartición de información y datos.
Compartición de periféricos.
2. EVOLUCIÓN HISTÓRICA
➢ Primera etapa ► NO HAY SISTEMAS OPERATIVOS:
Los sistemas informáticos se especializan en procesar un trabajo y la planificación del
mismo es realizada por los operadores.
➢ Segunda etapa ► PROCESAMIENTO POR LOTES:
Existe un proceso (Monitor) que se encarga de recibir solicitudes de periféricos (puede
ser otro u otros ordenadores) y de planificar la ejecución secuencial de las peticiones.
➢ Tercera etapa ► MULTIPROGRAMACIÓN:
Los SO realizan tareas más complejas, pueden planificar la ejecución concurrente de
varios procesos, trabajar con más periféricos y más variados tipos.
Además, son capaces de soportar varios usuarios simultáneamente.
➢ Cuarta etapa ► ENTORNOS GRÁFICOS Y EN RED:
Aparecen pequeños equipos que adquieren cada vez mas potencia, surge la necesidad
de comunicarlos y compartir sus recursos.
Por otra parte, el uso de las herramientas informáticas se generaliza y es necesario
presentar la información y las utilidades que la manejas a personas que están poco o
nada cualificadas en conocimientos informáticos. Este motivo, justifica la aparición de
SO de fácil manejo y presencia agradable (entornos amigables).
3. ARQUITECTURA Y COMPONENTES
3.1. ARQUITECTURA
Según el diseño del Sistema Operativo, éstos se pueden clasificar en:
SISTEMAS MONOLÍTICOS:
Están formados por un conjunto de procedimientos que:
− Pueden ser llamados por cualquiera.
− Pueden llamar a cualquier otro del sistema.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
3 de 31
Los Sistemas Monolíticos son difíciles de depurar y mantener, debido a su compleja
estructura, ya que no están estructurados: “El gran lío”.
SISTEMAS EN NIVELES O CAPAS:
El ejemplo más evidente de este tipo es el Sistema THE, creado por E. Dijstra en 1968.
Sus características son las siguientes:
− Los procesos se agrupan por niveles (principal, servicio, auxiliares), de forma que
cada proceso puede invocar a los procesos de nivel inferior.
− Cada parte del sistema operativo (bola azul del gráfico) se encarga de una función del
mismo.
− Cuando la función X necesita de la función Y pedirá al sistema operativo ayuda, de
forma que se evita la interdependencia de las funciones.
− Esta característica de la estructura permite la modificación de una función o parte
determinada sin tocar las demás.
− Además, permite añadir más módulos sin tener que modificar la estructura básica.
SISTEMAS CON GESTIÓN DE MEMORIA VIRTUAL (IBM 370):
Durante unos 20 años (desde 1972) se ha utilizado la arquitectura diseñada por IBM para
su modelo de Mainframes System /370. Su principal característica ha sido el soporte
para memoria virtual y la aritmética de coma flotante de 128 bits.
Estos Sistemas Operativos simulan la utilización de diferentes Hardware, que permiten
que con la misma unidad de proceso estén trabajando varios usuarios con SO diferentes.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
4 de 31
SISTEMAS CLIENTE / SERVIDOR:
El Sistema Operativo consta de un Núcleo reducido, formado por procesos capaces de
interactuar como Clientes (solicitantes de servicios) y como Servidores (prestadores de
los servicios).
Estos sistemas se suelen dividir en partes especializadas en aspectos muy concretos, con
las siguientes ventajas:
− Mayor modularidad en el sistema, con partes más pequeñas.
− Sistema más rápido y manejable.
− Si una de las partes falla, no se cae todo el sistema, sin afectar a los demás usuarios.
SISTEMAS ORIENTADOS A OBJETOS:
El Sistema Operativo se deja de ver como una colección de funciones o servicios que se
ofrecen, para basarse en una colección de objetos. Con este nuevo diseño de arquitectura
los programas que corren por encima del SO, se constituyen también como objetos, así
como las funciones del SO, los ficheros, los periféricos, las líneas de comunicaciones, y
el resto de elementos. Como ejemplo, tenemos Windows NT.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
5 de 31
3.2. COMPONENTES
➢ Organización en capas:
El Sistema Operativo se distribuye en diferentes capas, que se organizan en torno a un
núcleo principal: cuanto más cerca se localiza del núcleo, más prioritaria es esa capa.
Características principales de la organización en capas:
• Según nos alejamos del centro, cada capa tiene un nivel de prioridad menor que la
capa anterior, siendo el núcleo la capa más prioritaria del sistema.
• Las operaciones principales del núcleo actúan directamente sobre los elementos
físicos (circuitos) del ordenador.
• Las siguientes capas se dispondrán sobre el núcleo principal, de modo que cuanto
más se alejan de éste, más se acercan al usuario.
• Las capas más próximas al usuario, realizan funciones de menor prioridad que las
capas más próximas al núcleo.
➢ División en Niveles del Sistema Operativo:
Vamos a establecer una división en niveles de las funciones que debe realizar un Sistema
Operativo. Según esta división, trataremos con 4 niveles:
• Núcleo: Capa interna del SO que está en contacto directo con el HW.
✗ Gestión de la memoria.
✗ Gestión de las operaciones de E/S.
• Nivel Ejecutivo:
✗ Gestión del sistema de archivos.
✗ Gestión de procesos.
• Nivel Supervisor:
✗ Interpretación de los comandos del sistema.
• Nivel Interfaz de Usuario:
✗ Presentación y gestión de las órdenes del usuario al sistema.
✗ Interfaz tipo Texto: Pantalla que recibe órdenes por teclado.
Ha sido el más utilizado y simple.
Se trabaja con un símbolo o letra identificativa: prompt.
Suele ser la unidad de disco sobre la que está trabajando.
MS-DOS, Unix, Xenix, CPM y Novell Netware.
✗ Interfaz tipo Gráfico: Es un sistema de ventanas y menús desplegables que
incluyen pequeños dibujos denominados iconos, que proporcionan un acceso
directo al programa que están asociados. Son muy sencillos de manejar.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
6 de 31
4. MODOS DE EXPLOTACIÓN DEL SISTEMA OPERATIVO
Entendemos por Modo de Explotación de un SO a la forma en que el usuario utiliza y accede
a los recursos HW y SW que componen el Sistema Informático.
Según esta definición de modo de explotación del sistema, podemos ejecutar procesos de tres
formas:
a) Procesos por lotes (o Batch): Son procesos cuyos resultados no se necesitan de forma
inmediata. Son ejecutados con muy poca prioridad y aprovechan los tiempos en los
que el procesador está menos ocupado.
b) Procesos en tiempo real (o Interactivos): El tiempo de respuesta del sistema es
inmediato para la solicitud de ejecución del proceso.
c) Tiempo compartido: El tiempo que se tarda en resolver un proceso en ejecución
dependerá de los procesos que se estén ejecutando en cada momento. Cada proceso irá
consumiendo una fracción de tiempo asignada y agotada esta fracción se ejecutará otro
proceso. Un proceso deberá consumir tantas fracciones como necesite, cada una en su
turno de ejecución, hasta que finaliza el proceso. Si cada proceso corresponde a un
usuario distinto, éstos tienen la impresión que la CPU les atiende solo a ellos, aunque
no es cierto.
5. CLASIFICACIÓN DE LOS SISTEMAS OPERATIVOS
5.1. SEGÚN EL NÚMERO DE USUARIOS
➢ Monousuario:
✗
✗
✗
Cuando sólo puede trabajar un usuario en el ordenador.
Todos los recursos del sistema estarán disponibles para él.
Estos sistemas se pueden basar en:
a) Técnicas de monoprogramación: El usuario puede ejecutar un programa al
tiempo, y para ejecutar un programa debe esperar a la finalización del
anterior.
b) Pueden ser sistemas multiprogramados: Facilitan al usuario la ejecución de
varios programas simultáneamente.
➢ Multiusuario:
✗
✗
✗
✗
✗
✗
Cuando varios usuarios pueden ejecutar procesos distintos.
Comparten el uso de los recursos del sistema de forma simultánea.
Estos sistemas se basan siempre en las técnicas de multiprogramación.
Varios usuarios puedan acceder simultáneamente, por lo que normalmente
serán sistemas de tiempo compartido aunque también podrían ser de tiempo
real, según las exigencias y objetivos que deben cumplir dichos sistemas.
Además el sistema permitirá que cada usuario pueda ejecutar varios programas
al mismo tiempo y así aprovechar al máximo las características de los sistemas
multiprogramados.
Alcanza un alto rendimiento del procesador, al aprovechar al máximo sus
capacidades repartiendo su uso entre todos los usuarios.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
7 de 31
5.2. SEGÚN EL NÚMERO DE PROCESOS
Una de las clasificaciones más extendidas de los Sistemas Operativos se basa en la utilización
de los recursos del sistema por parte del usuario.
➢ Monotarea:
✗
✗
✗
Estos sistemas sólo admiten la ejecución de un programa cada vez.
En estos sistemas operativos el programa se carga inicialmente en memoria y
permanece en ella hasta finalizar su ejecución.
Ningún otro programa puede ejecutarse aunque exista suficiente espacio libre
en la memoria principal, y el programa en ejecución se hallase en estado espera
de la finalización de una operación de E/S, y el procesador se encontrase
inactivo. En resumen: no es el método óptimo para aprovechar los recursos del
sistema.
➢ Multitarea:
✗
✗
✗
✗
✗
✗
Permite la ejecución de varios procesos a la vez.
Los procesos comparten el tiempo del uso del microprocesador.
Se basan en técnicas de multiprogramación.
Existe multitarea monousuario y multitarea multiusuario.
Son los más extendidos en la actualidad.
En la actualidad se habla de dos tipos de sistemas operativos multitarea según
realicen la gestión del procesador:
a) Multitarea apropiativa:
− La gestión del procesador se basa en quitar el control al programa
que se está ejecutando.
− Esta pérdida de control del procesador por el programa es
totalmente involuntaria y ajena a él.
− El sistema operativo el responsable de la gestión del procesador.
− El SO permite que otros procesos puedan ejecutarse.
b) Multitarea cooperativa:
− El programa es el que controla el procesador.
− El proceso que se está ejecutando es el responsable de permitir que
otras aplicaciones se puedan ejecutar.
− El sistema operativo no toma el control del procesador para decidir
el programa que se debe ejecutar: está a merced de lo que dicte la
aplicación que se está ejecutando en cada momento.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
8 de 31
➢ Multiproceso:
Se dice que un Sistema Operativo es Multiproceso cuando funciona sobre un equipo
donde se han instalado varios procesadores para dotarle de mayor velocidad.
Puede ocurrir que un trabajo sea ejecutado por varios procesadores o lo que es más
común, que cada procesador ejecute un trabajo diferente.
Aunque la 1ª opción es más eficiente que la la 2ª, el control de ejecución y la gestión
del sistema es bastante más complicada. Es necesario llegar a un compromiso que
determine cómo realizar la ejecución de los procesos.
6. SEGURIDAD EN LOS SISTEMAS OPERATIVOS
El Sistema Operativo debe asegurar la integridad de la información que se almacena y procesa
por los diferentes programas. Para ello, es necesario compartir la memoria principal entre los
programas en ejecución y gestionar el bloqueo de procesos.
6.1. COMPARTIR MEMORIA
La memoria física del ordenador es el recurso compartido más escaso, y por tanto, es el más
conflictivo. La memoria compartida entre los programas se organiza como:
•
•
•
Bloques de memoria primaria que pueden ser utilizados por varios procesos diferentes
simultáneamente.
Cuando un proceso pide un bloque de memoria para compartir con otros procesos, el
sistema operativo asigna la cantidad de memoria solicitada al proceso creador.
El resto de procesos pueden utilizar esa memoria declarándola como memoria
compartida en sus zonas de datos (el sistema operativo la ubica dentro de sus espacios
de direccionamiento), de forma que cuando un proceso escriba información en dicha
zona, los demás pueden leerla directamente.
6.2. BLOQUEO DE PROCESOS
Las técnicas de multiprogramación y los sistemas operativos multiprocesador, permiten la
ejecución de varios procesos simultáneamente compartiendo los mismos recursos. Pero suelen
dar lugar a importantes conflictos que deben ser resueltos por la CPU mediante el gestor de
procesos.
En general, la mayoría de los sistemas operativos utiliza mecanismos basados en algoritmos o
herramientas sofisticadas que permiten la sincronización de los procesos que compiten entre
ellos por el uso de la memoria y del procesador.
Veamos dos definiciones importantes:
➢ Paralelismo: Ejecución de diversas actividades (o incluso una actividad única) en
varios procesadores al mismo tiempo, optimizando su eficiencia.
➢ Concurrencia: Varias actividades se ejecutan simultáneamente y tienen que utilizar los
mismos recursos, debiendo sincronizarse para actuar conjuntamente, sin importar el
número de procesadores existente, ni las técnicas relativas a multiprocesamiento o a
multiprogramación que se pudieran utilizar.
Para que dos actividades se consideren concurrentes, es necesario que tengan alguna relación
entre ellas: cooperación en un mismo trabajo determinado.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
9 de 31
7. MECANISMOS DE SINCRONIZACIÓN
7.1. EXCLUSIONES MUTUAS
Es una sincronización por la cual una actividad ACT1 impide a otras (ACT2 y ACT3) que
puedan tener acceso a un dato (memoria) mientras esa actividad se encuentre realizando una
operación sobre dicho dato. Es decir, una actividad impide (excluye) a otras el acceso en un
momento dado y viceversa (mutuamente).
Fig.1: Mapa de memoria compartida.
La zona de código de cada programa que accede a los recursos o datos compartidos, y que por
tanto, no debe ser interrumpida por otro proceso se conoce con el nombre de sección crítica.
Fig.2: Código del proceso ACT1.
La sección crítica de un proceso debe reunir los siguientes requisitos:
✗ Exclusión mutua: Mientas un proceso está en su sección crítica, ningún otro proceso
puede hacer uso de los recursos compartidos bloqueados por el primero.
✗ Progreso: Ningún proceso puede bloquear a otros cuando está ejecutando código de la
zona externa a la sección crítica.
✗ Espera limitada: Ningún proceso esperará indefinidamente para entrar en su sección
crítica propia.
✗ No realizar suposiciones sobre la velocidad de ejecución de los procesos ni el número
de procesadores: Estas suposiciones podrían no garantizar la exclusión mutua, pues si
varían las condiciones de procesamiento y del entorno y fallan las previsiones, se
podría dar el caso de varios procesos utilizando al mismo tiempo recursos compartidos.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
10 de 31
7.2. ALTERNANCIAS (ESPERAS ACTIVAS)
Este mecanismo se basa en una variable compartida por dos procesos, que indica cuál de
ellos puede acceder a la sección crítica. Esta variable se denomina TURNO, y puede tomar
dos valores 0 ó 1, indicando si puede acceder a la sección crítica el proceso P0 o P1. El uso
del turno, no permite que los dos procesos puedan estar en la sección crítica simultáneamente.
Por otro lado, el mecanismo de estricta alternancia de turno puede representar un problema
para el funcionamiento del sistema por los siguientes motivos:
• No se cumple el requisito de Progreso de la sección crítica (si el turno indica le toca a
P1 acceder a la sección crítica, pero está ejecutando otra zona y es P0 quien llega a la
sección crítica, y permanece bloqueado).
• Postergación indefinida: si un proceso se abortara dentro de la sección crítica o al salir
de la misma, el turno se mantiene en el proceso abortado mientras el otro proceso
permanecería esperando indefinidamente para entrar en su sección crítica.
El sistema se puede generalizar para más de dos procesos.
Además, existe un riesgo de interbloqueo cuando:
• Existen varias secciones críticas por proceso.
• En el caso de que un proceso desee entrar en una sección crítica estando en otra.
• Si la 2ª sección crítica está bloqueada por un 2º proceso que, a su vez, quiere entrar en
la 1ª Sección Crítica.
Si se produce esta situación llegamos a un estado inestable e irresoluble.
7.3. SEMÁFOROS
Para evitar los problemas que se producen con los algoritmos de espera activa, así como la
sobrecarga que producen en el sistema, el holandés E.W. Dijkstra (1965) diseño el siguiente
mecanismo sincronización denominado SEMÁFORO:
• Está basado en el uso de una variable de tipo entero.
• Se utiliza como contador de peticiones de entrada a una sección crítica.
• Esta variable es compartida por todos los procesos del sistema.
• La variable tiene un identificador único en el mismo.
• Este tipo de variable se denomina semáforo, por su capacidad de gestionar el tráfico de
procesos que deseaban acceder a datos compartidos.
Con este mecanismo de sincronización, cuando un proceso intenta entrar en la sección crítica
mientras otro proceso está accediendo a los datos compartidos, se bloqueará de manera
similar a los mecanismos anteriores.
El semáforo tendrá un valor inicial que indica el número de procesos que puede acceder
simultáneamente a la sección crítica, Cada vez que entra un proceso en la sección, el valor del
semáforo disminuirá en una unidad, y al salir de dicha sección, se incrementará. Cuando el
semáforo alcanza el valor 0, no podrá entrar ningún proceso en la sección crítica protegida.
Mediante este sistema Dijkstra pudo solucionar de una manera eficiente el problema de la
cena de los filósofos, muy conocido en Informática, pues representa a los procesos (filósofos)
compitiendo por los recursos (tenedores).
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
11 de 31
Los semáforos tienen las siguientes propiedades y problemas:
• Garantizan correctamente la exclusión mutua (requisito de la sección crítica) de
cualquier número de actividades en cualquier número de procesadores si hacen
referencia al mismo semáforo.
• Cuando se bloquea una actividad antes de entrar en su sección crítica, nunca realiza
una espera activa, sino que se inserta en la cola de procesos bloqueados.
• Pueden darse problemas de postergación indefinida si la cola de procesos bloqueados
del semáforo no se gestione con una política de tipo FIFO (primero en entrar, primero
en salir).
7.4. MONITORES
Uno de los problemas subyacentes en los anteriores mecanismos se presenta cuando el propio
programador tiene que proporcionar de forma explícita el modo de sincronización, añadiendo
una dificultad más al ser difícil de evitar totalmente el interbloqueo con otros procesos.
Con el fin de resolver este problema se desarrolla un nuevo mecanismo que debe ser
soportado por los lenguajes de programación, no por el Sistema Operativo.
Este mecanismo externo al sistema se denomina MONITOR y permite compartir datos entre
varias actividades, de forma segura y eficiente. Tiene estas particularidades:
• Oculta la composición de los mismos a los procesos externos.
• Garantiza la exclusión mutua en el acceso a los datos.
• El programador no tiene que suministrar explícitamente la protección a los datos.
Por lo tanto, el mecanismo Monitor se basa en dos premisas:
1ª) Abstracción de datos: Es una técnica de programación que separa las operaciones
que se van a realizar con los datos, de los detalles de diseño propios de los mismos. De
esta forma, los distintos procesos que tengan que operar con datos compartidos sólo
podrán acceder a ellos a través de las operaciones que les ponga a disposición del
monitor correspondiente, sin poder operar con ellos directamente.
Los lenguajes modernos como Modula y Ada soportan este tipo de estructuras, de
manera que permiten exportar de un módulos, para sean visibles desde otro módulo
importador. Por otro lado cada módulo tendrá sus propias variables locales a las cuales
no podrán acceder el resto de módulos.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
12 de 31
2ª) Exclusión implícita: La finalidad mas útil de los monitores es que reúnen todas las
funciones que operan sobre un conjunto de datos compartidos en un sólo módulo.
Todos los accesos a los datos compartidos estarán forzados a pasar por el Módulo
MONITOR, ya que los datos están ocultos para el mundo exterior. De esta forma los
programas son más fáciles de depurar y mantener.
Para llevar a cabo la sincronización, el monitor se basa en un tipo de datos llamado condición,
que dan lugar a los monitores condicionales. Los programadores que prefieran sincronizar sus
procesos de acuerdo con diferentes criterios pueden definir una o más variables de condición.
Las funciones que se suelen utilizar sobre una variable de condición son dos:
➢ Función Wait: Bloquea el proceso hasta que no exista otro dentro del monitor.
➢ Función Signal: Permite la entrada de otro proceso al monitor. En caso que no hubiera
ninguno proceso bloqueado por Wait, esta función no tiene ningún efecto.
Estas funciones serán empleadas internamente por el monitor y no estarán accesibles al
programador, lo que hace que los monitores sean más fáciles y seguros de usar que los
semáforos. Para cada condición se construye una cola de procesos bloqueados debido a dichas
condiciones.
Para que los monitores ofrezcan un grado de servicio aceptable, ningún proceso deberá
permanecer durante mucho tiempo dentro del mismo. Si hubiera la necesidad de realizar
alguna operación que necesita mucho tiempo, el proceso debería abandonar la zona de
exclusión mutua, ya sea abandonando el monitor, o esperando por alguna condición especial
en la cola destinada a tal efecto.
Un problema asociado con los monitores es el caso de las llamadas anidadas: un proceso que
se encuentra dentro de un monitor y quiere acceder a otro monitor, si este último está
ocupado, el proceso permanecerá bloqueado dentro de un monitor y esperando a que se libere
el otro. Puede incluso conducir a un interbloqueo si la condición por la que espera en el
segundo monitor sólo puede ser activada por un proceso que está esperando para entrar al
primero, por ello deberán evitarse siempre que sea posible el anidamiento de monitores y,
sólo en el caso de que fuese imprescindible, deberemos diseñarlo con el máximo cuidado para
evitar interbloqueos y esperas indeseadas dentro del sistema.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
13 de 31
8. SERVICIOS DEL SISTEMA OPERATIVO
8.1. GESTIÓN DE PROCESOS
En primer lugar hay que dejar muy claro el concepto de PROCESO. Un proceso no es más que
un programa en ejecución, que pasa de estar almacenado en la memoria secundaria a estar
cargado en la memoria principal. Además, la CPU del sistema le dedica tiempo de ejecución y
utiliza los registros de la CPU, el Contador de Programa, el Registro de Instrucción, y una
serie de variables propias definidas por el programador.
Los procesos pueden estar en 3 estados posibles:
• Activo: El proceso se encuentra en ejecución dentro de la CPU.
• Listo o Preparado: El proceso dispone de los recursos, pero no está en ejecución.
• Bloqueado: El proceso está en espera de una señal externa que le permita continuar su
ejecución.
Transiciones de estado:
Según los estados definidos anteriormente, se pueden dar 4 posibles transiciones de estados en
un proceso. El siguiente gráfico muestra las situaciones posibles:
➢ Activo ⇒ Bloqueado: Al iniciar una operación de E/S o al acceder a un recurso
compartido cuyo semáforo asociado está a cero, el proceso pasa a estado bloqueado.
➢ Activo ⇒ Listo: Cuando el proceso que ocupa la CPU lleva demasiado tiempo en
ejecución y agota su “slot” o “cuantum” de tiempo asignado, el sistema operativo
decide que otro proceso debe ocupar la CPU.
➢ Listo ⇒ Activo: Cuando el planificador del sistema decide que a un proceso no
bloqueado le “toca” acceder a la CPU.
➢ Bloqueado ⇒ Listo: Cuando un proceso bloqueado obtiene permiso para acceder al
recurso por el que se había bloqueado. Esto ocurre al finalizar una operación de E/S, o
al aumentar el valor el semáforo que bloqueó el proceso, siempre que no haya otros
procesos bloqueados en la cola del semáforo.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
14 de 31
Planificación de ejecución de procesos:
El núcleo del Sistema Operativo dispone de un proceso denominado “scheduler”, que en
castellano se traduce como planificador y es el encargado de organizar la ejecución del resto
de procesos. El scheduler sirve de interfaz entre el usuario y la CPU para indicar qué procesos
deben ejecutarse y los estados que deben adoptar, según diferentes parámetros, que iremos
estudiando. Este proceso carga y descarga de la CPU los procesos que están en ejecución en
función de ciertos algoritmos. Estos algoritmos deben asegurar las siguientes circunstancias:
• Imparcialidad: Se deben asignar los recursos sin perjudicar ni beneficiar a ningún
proceso explícitamente.
• Rendimiento: Se debe buscar la forma de ejecutar el mayor número posible de
trabajos en un periodo de tiempo.
• Eficiencia: El procesador debe estar ocupado la mayor parte del tiempo posible y debe
realizar los trabajos de la manera más rápida posible, desde el punto de vista de los
procesos que están siendo ejecutado. Para ello, vamos a tener en cuenta los siguientes
tiempos asociados a la ejecución de un proceso:
✔ Tiempo de ejecución (Tx): Es el tiempo de CPU que requiere un proceso para su
completa ejecución.
✔ Tiempo de espera (TE): Tiempo que permanece un proceso en estado de Listo en
la CPU a la espera de ser ejecutado.
✔ Tiempo de retorno (TR): Es el tiempo que transcurre entre la llegada del proceso
a la CPU para ser ejecutado y la salida del proceso de la CPU. Se cumplir que:
TR = Tx + TE.
✔ Grado de Eficiencia (F): Es la relación entre el tiempo de ejecución (T x) y el
tiempo de retorno (TR). F = Tx / TR.
Como TR ≥ Tx, este grado es un valor menor o igual de 1 y se mide en %, de forma
que cuanto menor sea el tiempo de espera (T E), más cercano al 100% será el grado
de eficiencia del proceso.
Tipos de Algoritmos de Planificación:
➢ Apropiativos: Son los algoritmos que una vez que deciden a quién se cede el uso de la
CPU se mantienen dentro de ella hasta finalizar su ejecución.
➢ No Apropiativos: Son algoritmos que establecen un reparto de la CPU entre todos los
procesos que compiten por el acceso a ella.
Algoritmos de Planificación:
Los procesos que están en ejecución se almacenan en una “cola” dentro de la CPU, en donde
se aplican diversos tratamientos para conseguir los objetivos detallados anteriormente, que
reciben el nombre de algoritmos de planificación, pues determinan a qué proceso le toca
acceder a los recursos propios de la CPU. Algunos de estos algoritmos son:
• FCFS (First Come, First Served): El primer proceso en llegar a la cola es el primer
proceso atendido y el resto de los procesos permanecen en estado Listo a la espera de
que finalicen los procesos anteriores en la cola de espera. Este algoritmo se dice que es
apropiativo porque el proceso que tiene la CPU la mantiene hasta el final de su
ejecución.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
15 de 31
El mayor inconveniente de este método es que los procesos pequeños son penalizados
al tener que estar en la cola aunque fueran a consumir poca CPU. Es como si estás en
una cola inmensa del Super cuando solo llevas un artículo.
En siguiente ejemplo los procesos A, B y C llegan a la CPU al mismo tiempo y se pide
que calculemos los valores de TE y TR, y el grado de eficacia 'F' de cada proceso:
Proceso A:
Tx = 7 ciclos
TE = 0 ciclos
TR = 7 ciclos
FA = 7/7 = 100%
Proceso B:
Tx = 5 ciclos
TE = 7 ciclos
TR = 12 ciclos
FB = 5/12 = 42%
Proceso C:
Tx = 8 ciclos
TE = 12 ciclos
TR = 20 ciclos
FC = 8/20 = 40%
El tiempo medio de espera de los 3 procesos es TE = (0 + 7 + 12) / 3 = 6'3 ciclos
•
Round-Robin: Se definen intervalos de tiempo (denominados slot o “cuantum”) y se
asigna un intervalo de ejecución a cada proceso ubicado en la cola, pasando de estado
Listo a Activo (sacando de ejecución al proceso que estuviera en la CPU). Los slot de
tiempo se asignan de forma cíclica a todos los procesos ubicados en la cola de la CPU,
por lo que constituye un ejemplo de algoritmo no apropiativo.
Con este algoritmo los resultados son:
Proceso A:
Proceso B:
Tx = 7 ciclos
Tx = 5 ciclos
TE = 11 ciclos
TE = 8 ciclos
TR = 18 ciclos
TR = 13 ciclos
FA = 7/18 = 39%
FB = 5/13 = 38%
Proceso C:
Tx = 8 ciclos
TE = 10 ciclos
TR = 18 ciclos
FC = 8/18 = 44%
En este caso, el tiempo medio de espera es TE = (11 + 8 + 10) / 3 = 9'6 ciclos
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
16 de 31
•
Planificación por prioridades o Multinivel: Cada proceso que entra en la cola de
ejecución tiene asociada una prioridad, de forma que la CPU atiende a los procesos de
la cola que tienen la prioridad más alta, mientras que lo procesos con prioridad menor
deben esperar a que finalicen los de prioridad alta. Cuando varios procesos acceden
con la misma prioridad se establece el método de reparto Round-Robin entre ellos para
conseguir la CPU, pero siempre por delante de los procesos que tienen una prioridad
menor.
Los valores que se calculan en este ejemplo con este algoritmo son:
Proceso A:
Proceso B:
Proceso C:
Tx = 7 ciclos
Tx = 5 ciclos
Tx = 8 ciclos
TE = 5 ciclos
TE = 14 ciclos
TE = 5 ciclos
TR = 12 ciclos
TR = 19 ciclos
TR = 13 ciclos
FA = 7/12 = 58%
FB = 5/19 = 26%
FC = 8/13 = 62%
Ahora, el tiempo medio de espera es TE = (5 + 14 + 5) / 3 = 8 ciclos
•
Prioridad al más corto. El proceso más corto que entra en la cola recibe la prioridad
más alta. Aquí tenemos dos tipos:
✔ Shortest Job first (SJF): Cuando finaliza la ejecución de un proceso, el scheduler
elige de la cola de procesos al proceso más corto, dándole prioridad de uso de la
CPU. Hasta que no acabe el proceso no dejará libre la CPU ya que es, junto con el
método FIFO, un algoritmo apropiativo.
✔ Shortest Remaining Time First (SRTF): Utiliza un criterio similar al anterior,
con la diferencia que en este caso, se evalúa el tiempo restante de cada proceso
cuando finaliza la ejecución de un proceso o cuando entra a la CPU un proceso
nuevo. Si el nuevo proceso es más corto que el tiempo restante del proceso en
ejecución, éste entra en la CPU. Se puede decir que el SRTF es un algoritmo de
tipo semi-apropiativo, pues cuando entran más procesos a la cola de ejecución se
les puede ceder la CPU, según el tamaño del proceso.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
17 de 31
En el caso del gráfico anterior, suponiendo que entra en la cola un proceso P5 más
corto que el tiempo restante de ejecución de P4, P4 pasa a estado 'listo' (y vuelve a
la cola) y P5 entraría directamente en ejecución:
•
Prioridad a la Tasa de Respuesta más alta - HRN (Highest Response-Ratio Next):
La prioridad más alta de ejecución se asigna al proceso con tasa de respuesta más alta.
Este algoritmo de planificación es un algoritmo de tipo no apropiativo que utiliza un
cálculo de prioridades dinámico, es decir, las prioridades de los procesos se calculan
tras cada slot, según un parámetro denominado Tasa de Respuesta que relaciona el
tiempo de espera y el tiempo efectivo de cada proceso.
8.2. GESTIÓN DE MEMORIA
8.2.1. Introducción
Para que un ordenador pueda procesar un programa, es necesario que previamente, tanto el
propio programa como los datos que maneja estén cargados en la memoria principal. Para ello
necesitaremos disponer de ambas partes simultáneamente en memoria, es decir compartiendo
la memoria principal del sistema.
El procesador lee la instrucción que toca ejecutar de la memoria y los datos que debe tratar; a
continuación realiza la operación indicada en la instrucción, y por último, vuelve a acceder a
la memoria para escribir el resultado.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
18 de 31
En el funcionamiento de un ordenador, la Memoria Principal es el recurso central del sistema
ya que tanto la CPU como los dispositivos de E/S acceden a ella para leer y/o escribir la
información que manejan. La velocidad a la que se realicen la lectura y escritura condicionará
la rapidez y eficacia del ordenador.
La parte del Sistema Operativo que gestiona la memoria recibe el nombre de Administrador
de Memoria, y es una de las partes más importantes del mismo.
8.2.2. Direccionamiento
Nos podemos imaginar la memoria física como una sucesión de bytes o palabras, cada una
con su propia dirección. La dirección es la posición en la memoria de una celda determinada y
es la manera que tenemos de diferenciar una celda de memoria de otra: por su dirección.
Cuando se diseña el HW de un ordenador se define el esquema de direccionamiento que éste
va a utilizar. Si el bus de direcciones utiliza 16 bits, el sistema podrá direccionar, como
máximo 64k (216 direcciones distintas), y éste será el tamaño máximo de memoria que puede
tener el ordenador. En este caso, aunque tuviera instalado 128k de memoria, como el bus de
direcciones sólo alcanza a diferencias 64 k, entonces solo puede acceder a la 1ª mitad de la
memoria disponible. Con un sistema de 32 bits en el bus de direcciones permite alcanzar 232
direcciones de memoria, es decir, 4 Gigas de memoria. ¿Puedes realizar el cálculo?
A veces se confunde el término byte y palabra. El término byte siempre se corresponde con 8
bits de información, pero dependiendo del diseño del HW se establece la unidad mínima de
información direccionable (palabra de memoria), que puede ser uno o varios bytes. La forma
habitual de representar la memoria es mediante celdas que representan una palabra cada una,
que como sabemos, puede ser uno byte o varios. La figura siguiente muestra una porción de
memoria donde cada celda contiene una palabra de 2 bytes. ¿Puedes razonar por qué son 2?
Los factores que se utilizan para medir la velocidad de la memoria principal son:
• Tiempo de acceso a la memoria: tiempo que transcurre entre el inicio y el fin de una
operación de lectura o escritura sobre una posición de memoria.
• Tiempo de memoria: retraso impuesto por el HW entre que finaliza una operación y
está preparado para la siguiente.
Estos factores son los indicadores de la velocidad de la memoria principal y puede variar
desde decenas a cientos nanosegundos (10-9 sg).
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
19 de 31
8.2.3. Asignación de direcciones
Ya sabemos que los programas deben ser cargados en la memoria principal desde la memoria
secundaria (disco) para ser ejecutados. Como antes de ser cargados no se sabe en qué posición
de memoria se van a cargar, cuando se escribe un programa se define una sentencia de inicio
de programa (que se guarda en la 1ª posición del programa) y a continuación siguen el resto
de instrucciones o sentencias del programa.
El compilador traduce a lenguaje máquina el programa fuente, asignando a cada instrucción el
desplazamiento adecuado desde la sentencia inicial, que constituye la dirección relativa cero
del programa. Por último el enlazador (linker) inserta el código de otras librerías comunes que
utiliza el programa.
Cuando el programa pasa a ejecución, se crea un proceso nuevo al que el sistema operativo
asigna una zona libre de memoria. El cargador coloca en esa zona de memoria el contenido
del programa ejecutable que se encontraba en el disco, asignando a la posición cero relativo
del programa una dirección concreta de memoria (MEM), y al resto de sentencias del programa
le aplica el desplazamiento correspondiente. Esta tarea de carga del programa en memoria
transforma las direcciones relativas en absolutas o reales.
Asignación de direcciones en memoria
En el gráfico de la figura anterior, ¿podrías calcular la dirección de memoria donde se carga el
dato 'X X X X X' de la posición relativa 3Fh?
8.3. SISTEMAS DE GESTIÓN DE MEMORIA
Con las consideraciones realizadas para la gestión genérica de la memoria del sistema, vamos
a analizar los sistemas de gestión de memoria utilizados en entornos de monoprogramación y
cómo se adaptan a sistemas de varios procesos en ejecución simultánea.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
20 de 31
8.3.1. Gestión en Monoprogramación
Memoria Dedicada:
Las principales características a tener en cuenta para la gestión de memoria en sistemas de
monoprogramación son éstas:
•
•
•
•
Los programas escritos para los primeros ordenadores utilizaban los recursos del
sistema en régimen dedicado: disponían de control total sobre el HW y disponían de la
totalidad de la memoria física.
No existe el concepto de Sistema Operativo ni de Gestor de Memoria.
La utilización de la memoria es ineficaz y se obliga a un conocimiento profundo del
HW utilizado: los programas son específicos para cada máquina.
El programador dedica gran parte de su esfuerzo a gestionar el HW, perdiendo la
visión del objetivo principal: el procesamiento de la información.
División de la Memoria:
Con la aparición de los Sistemas Operativos, se introduce el control de acceso al HW y, por
tanto, se empieza a gestionar el acceso a la memoria principal. La memoria se divide en dos
zonas:
➢ Zona de Usuario, utilizable por el usuario (programa).
➢ Zona de Sistema, reservada para la parte residente en memoria del propio sistema
operativo, también llamada monitor, que entre otras funciones, se encarga de la
gestión de la propia memoria.
La división de la memoria en las dos zonas anteriores trae consigo una serie de problemas a
resolver: proteger la independencia de ambas zonas y asegurar que los programas de usuario
se se vean afectados por la división de la memoria.
Protección de la Memoria:
Como el monitor y el programa de usuario deben compartir la memoria, es necesario proteger
la zona del sistema operativo contra cualquier intento de acceso ilegal desde el programa de
usuario que pudiera afectar al funcionamiento del monitor. Para evitar esto, se establece una
dirección de frontera que limita la zona del sistema. La siguiente figura muestra el rango de
direcciones permitidas para el proceso P1 en un sistema de 64 KB de memoria:
Direcciones PERMITIDAS:
Dir. Programa ≥ Dir. Frontera
Direcciones PROHIBIDAS:
Dir. Programa < Dir. Frontera
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
21 de 31
Esta separación tiene una serie de consecuencias importantes:
✔ Cualquier dirección que genere el programa de usuario se debe comparar con la
dirección frontera, permitiendo el acceso a la dirección de memoria si ésta es mayor o
igual, y denegando el acceso si es menor.
✔ El control de la dirección de memoria se realiza por el propio HW.
✔ Este control provoca un aumento del tiempo de acceso a la memoria, pero el retrase
queda compensado por el mejor rendimiento del sistema operativo.
✔ Solo será necesario controlar las direcciones generadas por el programa, el resto de
direcciones de memoria garantizan la protección del sistema.
✔ El monitor puede acceder a cualquier punto de la memoria (para cargar programas,
pasar información, etc): no es necesario controlar las direcciones de memoria a las que
accede.
Reasignación de direcciones:
Una vez iniciado el sistema, el contenido del registro frontera indica el punto a partir del cual
se carga el programa de usuario. Por este motivo, será necesario reasignar las direcciones del
programa de usuario en función de la dirección de la frontera. Hay dos formas de implementar
el proceso de reasignación:
➢ Asignación estática: Se realiza durante la compilación del programa o bien durante la
carga del programa en memoria. Una variación del tamaño del sistema operativo
(cambia la dirección frontera), exige una nueva compilación o carga del programa.
➢ Asignación dinámica: La alternativa para la asignación de direcciones reales durante
la ejecución consiste en utilizar un dispositivo HW especial que intercepte las
direcciones lógicas generadas por el programa de usuario, para sumar la dirección
frontera. El resultado será la dirección física correspondiente.
Cualquiera que sea la técnica elegida, el usuario NUNCA maneja direcciones reales.
Los programas utilizan direcciones relativas que pueden variar de la dirección 0 a la
dirección máxima permitida por el sistema operativo: este rango constituye el Espacio
Lógico de Direcciones.
Después el sistema, con la ayuda del HW, establece la correspondencia adecuada con
el Espacio Físico de Direcciones, que estará limitado por la dirección frontera y el
tamaño de la memoria real.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
22 de 31
Intercambio de almacenamiento (Swapping):
La necesidad de atender a varios usuarios en los sistemas de tiempo compartido, impulsó el
desarrollo de técnicas de Intercambio de Almacenamiento, o SWAPPING. Esta técnica consiste
principalmente en liberar espacio de memoria extrayendo un programa instalado en ella para
que pueda ser ocupado por otro que necesite ejecutarse.
Cuando el programa cargado en memoria queda bloqueado a la espera de una operación de
entrada/salida, por ejemplo, el sistema lo saca de la memoria (swap-out), copiando el estado
exacto de la memoria del proceso en dispositivos rápidos de almacenamiento secundario. En
su lugar, el sistema cargará el programa de otro usuario, traído (swap-in) a su vez de estos
dispositivos, y que está preparado para usar el procesador.
La eficacia de esta técnica dependerá, principalmente de la velocidad con la que se realice la
carga y descarga de los programas y, por lo tanto, de la velocidad de acceso a los dispositivos
de almacenamiento secundario.
Se puede reducir el impacto negativo del tiempo de intercambio de programas si solapamos
la ejecución del programa con la carga (swap) del programa de otro usuario. Para ello, el
sistema divide la zona de usuario en dos partes: una zona para procesar un programa y otra,
donde se carga el programa de intercambio.
8.3.2. Gestión en Multiprogramación
Hasta ahora hemos considerado situaciones en las que, en un momento dado, sólo existe un
programa de usuario en memoria principal. Por este motivo, los sistemas correspondientes se
denominan sistemas de monoprogramación. Solapar el intercambio de un programa con la
ejecución de otro, introduce una novedad importante: la existencia de varios programas de
usuario cargados a la vez en memoria.
Particiones:
La necesidad de utilizar más eficazmente los ordenadores, conduce a introducir la técnica de
multiprogramación. Esta técnica se basa en repartir el tiempo del procesador entre varios
procesos o usuarios, los cuales debemos tenerlos cargados en memoria. Para ello, se divide la
memoria en trozos, llamados particiones o regiones, dónde se cargarán los procesos.
El número de particiones indicará el grado de multiprogramación del sistema.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
23 de 31
Protección de la Memoria:
Si tenemos varios procesos en memoria, deberemos proteger sus respectivas particiones de
accesos indeseados. El mecanismo de protección más sencillo se basa en la utilización de dos
registros HW: Registro Límite Inferior y Registro Límite Superior, de forma que los registros
contienen las direcciones límite de la partición que se trata.
Cada dirección generada por el programa debe estar comprendida entre los valores anteriores,
de forma que cada referencia de memoria debe ser chequeada de forma especialmente rápida,
pues de lo contrario se produciría una degradación importante de eficiencia en el sistema.
Esta técnica exige la utilización de direcciones de memoria absolutas, asignadas durante la
compilación o carga del programa. Además, la asignación debe ser estática, por lo que la
modificación de los registros implica una nueva compilación o carga del programa.
Registros Base y Límite:
Un mecanismo mucho más versátil que el anterior se basa igualmente en la utilización de dos
registros HW denominadas Registro Base y Registro Límite, que contienen la dirección inicial
de la partición y el tamaño de la misma.
De esta forma es posible asignar de forma dinámica las direcciones, pues basta con actualizar
el registro base con la dirección inicial de la partición. Las dos mejoras principales son:
✔ El programa se puede reubicar en otra partición de una forma muy simple modificando
el nuevo registro base.
✔ Las direcciones lógicas generadas por el programa deben ser menores que el tamaño
contenido en el registro límite. Una vez verificada esta condición, para obtener la
dirección real solo hay que sumar el contenido del registro base.
Particiones contiguas de tamaño fijo:
Este sistema gestiona la memoria principal dividiendo la misma en particiones contiguas y de
tamaño fijo (no puede cambiar el tamaño). El número de particiones y sus tamaños se definen
al iniciar el sistema y se mantienen durante toda la sesión.
Cuando el Sistema Operativo tenga que cargar un programa, se asignará una partición de
memoria que pueda contenerlo. Para que esto sea posible, es necesario que los programas
declaren sus necesidades de memoria al sistema cuando vayan a ser cargados.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
24 de 31
Cuando un programa solicita al Sistema Operativo permiso para ser ejecutado, el sistema
analiza el espacio en memoria que requiere y decide que partición de memoria le asigna:
Todos los programas se colocan en una cola única de espera, y será el sistema operativo el
encargado de seleccionar qué programa carga en la partición disponible en un momento dado.
Lo más sencillo es respetar el orden de llegada de los programas. El Planificador de Trabajos
del sistema operativo es el componente encargado de hacer la selección del programa que
carga en las particiones libres y de gestionar las particiones.
CRITERIO FIFO: First Input, First Output
Con este criterio, para una partición libre de un tamaño determinado, el Planificador elige
siempre el primer programa de la lista. Si el programa cabe en la partición, se le asigna ese
espacio, en caso contrario la partición quedará desocupada y el resto de programas se quedan
bloqueados esperando a que se despache al 1º de la cola.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
25 de 31
Este criterio FIFO de selección es muy simple de programar, pero provoca infrautilización
de la memoria y los recursos del sistema.
El Planificador de Trabajos puede lograr mayor eficacia si cada vez que debe seleccionar un
trabajo, analiza la cola de espera buscando:
• El trabajo de tamaño más adecuado a la partición libre: Best Fit (Mejor ajuste).
• El primero que quepa en la partición disponible: First Fit (Primero que ajuste).
En general, se puede pensar que los sistemas que vayan a procesar trabajos de tamaños
similares podrán utilizar algoritmos FIFO, pues son más fáciles de codificar y provocan
menor sobrecarga. Por el contrario, si debemos tratar trabajos con necesidades distintas de
memoria deberán recurrir a técnicas complejas:
➢ Técnicas de Intercambio: Se puede mejorar el rendimiento si se añaden técnicas de
intercambio de programas en la gestión de particiones.
➢ Rendimiento: El desarrollo de esta técnica de gestión de la memoria principal
representó un gran avance, pues trata de elegir los programas que más aprovechen el
espacio de memoria. Sin embargo su eficacia quedaba condicionada por la elección
adecuada del tamaño y número de las particiones en relación con las características de
los programas a tratar.
Por último, vamos a describir dos aspectos negativos que tienen relación directa con los
criterios de selección de particiones. Para ello, vamos a considerar seis particiones de 14 KB,
10 KB y cuatro particiones de 6 KB, y estas situaciones:
1º) Vamos a cargar en la memoria del sistema un programa de 11 KB, para lo cual el
Planificador elige la 1ª partición: se desaprovechan 3 KB durante la ejecución. Este
fenómeno se conoce como FRAGMENTACIÓN INTERNA de la memoria.
2º) Si en el mismo ejemplo suponemos ocupadas las particiones de 14 KB y 10 KB y
existen trabajos de 7 KB, 8 KB y 9 KB esperando, disponemos de varias particiones
libres inutilizables que suman 24 KB. En este caso nuestro sistema no funciona con el
rendimiento óptimo debido a la FRAGMENTACIÓN EXTERNA de la memoria.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
26 de 31
Particiones contiguas de tamaño variable:
Los inconvenientes de la técnica anterior provienen de la dificultad de definir unas particiones
de tamaño adecuado para todos los trabajos que se deben tratar, sobre todo porque antes de
recibir los trabajos a procesar es muy difícil conocer las necesidades de memoria que van a
requerir. Por este motivo nacen las técnicas de gestión que asignan dinámicamente el tamaño
de las particiones de memoria a los trabajos de acuerdo con la memoria solicitada para cada
trabajo.
Este criterio se basa en una tabla interna donde el sistema operativo guardará la información
de las zonas de memoria disponibles o huecos, de forma que cuando un trabajo requiere un
tamaño determinado, el sistema creará una partición del tamaño solicitado, y descontará dicha
cantidad de la citada tabla. Este es en resumen la forma de funcionamiento de la técnica de
particiones contiguas de tamaño variable.
Con este sistema se soluciona totalmente el problema de la fragmentación interna, pero no se
evita que vayan quedando una especie de residuos de memoria, de difícil aprovechamiento
que da lugar a que el criterio no soluciona la fragmentación externa.
Además, según el sistema va terminando trabajos, los procesos abandonan la memoria y el
gestor de memoria dispone de nuevos huecos de memoria para nuevos procesos. El problema
es que los nuevos huecos son más pequeños, lo cual contribuye a que el problema de la
fragmentación externa sea mayor.
Técnica de COMPACTACIÓN: Es la técnica utilizada por algunos sistemas para combatir el
proceso de fragmentación que sufre la memoria. La idea es recolocar las zonas de memorias
asignadas a los procesos en ejecución para lograr un único hueco de memoria disponible.
El problema es que la puesta en práctica de esta idea no es tan sencilla, pues los programas se
pueden mover de formas diferentes, de forma que se optimice el número de KB a mover, ya
que su coste en tiempo puede ser considerable y el rendimiento del sistema disminuye.
Esta técnica exige que los trabajos sean reubicables y por tanto, solo se puede utilizar en
aquellos sistemas en los que las direcciones de memoria se asignen durante la ejecución y no
en la carga del programa.
Con respecto a la compactación es necesario contemplan dos excepciones de programas que
no pueden ser reubicados en otras particiones de memoria:
➢ Programas Residentes: Se cargan en memoria y permanecen en ella hasta que se apaga
el ordenador. Ejemplo: Antivirus, Drivers y controladores, etc...
➢ Programas Reutilizables: Son programas que se utilizan por varios usuarios a la vez.
Ejemplo: Dynamic Link Library (DLL).
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
27 de 31
8.4. RECUBRIMIENTOS (Overlays)
El recubrimiento es una técnica de programación utilizada en multiprogramación. Aunque no
es objetivo del apartado sobre Gestión de Memoria, vamos a hacer una pequeña introducción
puesto que su desarrollo se puede considerar el precursor de las técnicas de memoria virtual.
Normalmente, la ejecución un proceso cargable, que ha sido generado por un enlazador (o
linker) requiere que todas sus partes (rutinas, fases, etc.) permanezcan en memoria durante
toda su ejecución. Por este motivo se establece un límite máximo al tamaño posible de un
módulo (el total de la memoria física disponible). Así, un programa que requiera para su
ejecución 2 GB de memoria, si nuestro sistema solo dispone de 1 GB de RAM, no podría
ejecutar dicho programa.
Para superar ese límite se desarrollaron las técnicas de recubrimiento u overlays que, en
esencia, permiten la ejecución de un programa por partes. El programador de la aplicación, en
la fase de diseño del programa establece las partes del mismo que son recubribles y así las
define para que lo sepa el enlazador.
Al hablar de Overlays se trata de organizar las rutinas y componentes de un programa para
establecer qué partes son susceptibles de ser recubribles y cuáles no. De la misma forma que
el Sistema Operativo establece qué programas deben estar residentes siempre en la memoria,
el diseñador de un programa decide qué partes deben estar cargadas siempre en la memoria y
no se pueden recubrir con otras partes.
En la imagen anterior tenemos un programa dividido en tres módulos: P0, P1 y P2.
➢ El módulo P0 no es recubrible y se carga en memoria durante toda la ejecución.
➢ Los módulos P1 y P2 se pueden cargar en una misma partición que tenga capacidad
para el mayor de los módulos puesto que son recubribles y no es necesario que estén
cargadas al mismo tiempo en memoria.
En resumen: el recubrimiento permite ejecutar programas cuyos requisitos de memoria sean
mayores de la memoria disponible sustituyendo la carga total y estática del programa, por una
carga dinámica de los módulos del programa según se van necesitando. Para obtener esta gran
ventaja, debemos tener en cuenta inconvenientes asociados:
✗ El gestor de memoria del Sistema Operativo es mayor y más complejo.
✗ El tiempo de ejecución de un programa con recubrimiento aumenta debido al tiempo
de carga y descarga de los módulos de la memoria principal (el rendimiento baja).
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
28 de 31
8.5. MEMORIA VIRTUAL
Como hemos visto, las técnicas de gestión de la memoria real sólo admitían programas que
cupieran totalmente en memoria y si los programas eran mayores, la única solución posible
para ejecutarlos es utilizar las técnicas de Overlays o recubrimiento en nuestros programas.
Si tratamos de diseñar un sistema operativo de tiempo compartido, sin estrictas necesidades
de tiempo de respuesta, podemos permitirnos que los programas se frenen ligeramente durante
su ejecución para poder ejecutar muchos programas al mismo tiempo, que entre todos superan
la capacidad de la memoria del sistema. Esto es posible utilizando las técnicas de gestión de
Memoria Virtual.
La memoria virtual es una técnica de gestión que combina HW y SW, y permite la ejecución
de programas parcialmente cargados en memoria real.
Esta forma de trabajar aporta una serie de ventajas importantes:
• Si los programas se pueden ejecutar por partes, la memoria lógica que pueden utilizar
puede ser mayor que la memoria real disponible.
• Puesto que cada programa ocupa menos memoria real, se puede elevar el índice de
multiprogramación y, por tanto, la eficiencia del sistema.
• Al cargar menos cantidad de cada programa se necesitan menos operaciones de E/S
para las operaciones de carga e intercambio de los mismos.
Esta técnica surgió con la finalidad de permitir que pudiesen trabajar muchos usuarios
simultáneamente en el ordenador, a pesar de contar con una cantidad escasa de memoria. Si
en un sistema multiusuario y multiprogramación hay muchos usuarios que desean ejecutar sus
programas, parece claro que aunque pongamos mucha memoria es seguro que se terminará
llenando y habrá usuarios que no puedan ejecutar sus programas y tengan que esperar a que
terminen los afortunados que consiguieron entrar a tiempo.
Esto tiene más significación actualmente ya que los programas cada vez son mayores, y
muchos de ellos ni siquiera se podrían ejecutar aunque tuvieran disponible toda la memoria
del ordenador.
Imaginemos un programa que se está ejecutando en la memoria del ordenador. Sabemos que
las siguientes afirmaciones son algo evidente:
• Lógicamente se empieza a ejecutar por la primera instrucción.
• Las instrucciones se irán ejecutando una tras otra hasta terminar.
• Durante la ejecución puede que no sea necesario tener cargadas todas las instrucciones
del programa: Así cuando el programa comienza, las instrucciones del final no son en
absoluto necesarias ya que todavía tardará en llegar a ellas para ejecutarlas.
• Por ello, el sistema operativo podría tomar solo la parte de instrucciones y de datos
que son realmente necesarios y cargarlos en la memoria principal, dejando el resto en
el dispositivo de almacenamiento secundario.
• Solo cuando necesite las partes que están en el disco las cargaría en la memoria y
descargaría las partes que ya no sean necesarias, es decir, sustituye unos trozos del
programa por otros según se vayan necesitando.
El usuario no notará nada especial, quizás que se ejecuta algo más lento (debido al tiempo
necesario para leer del disco el trozo y copiarlo en la memoria, que no sería necesario si
estuviese todo el programa en memoria), pero el usuario tendrá la sensación que el programa
completo está cargado en memoria ejecutándose normalmente.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
29 de 31
Es decir el usuario tiene la ilusión de que todo su programa está en memoria, de ahí el nombre
de Gestión de Memoria Virtual.
➢ Páginación:
Es una técnica de gestión de memoria virtual que tiene las siguientes características:
1º) Permite asignar la memoria de forma discontinua.
2º) Divide la memoria física en trozos de tamaño fijo llamados frames.
3º) El tamaño del frane se diseña mediante HW.
4º) Se divide la memoria lógica en bloques del mismo tamaño llamados páginas.
Para ubicar un programa en la memoria principal del equipo (cargar un programa), el
sistema operativo asigna a cada página del programa un frame libre.
Acceso a los datos de un programa:
El Sistema Operativo dispone de una tabla de páginas donde se relaciona las páginas
de memoria que ocupan los programas, con la dirección de memoria donde comienza
el frame correspondiente.
Cada dirección que requiere un programa es interceptada por el gestor de memoria y
se divide en dos partes: nº de página(p) y desplazamiento(d) del byte solicitado desde
el principio de la página.
El procedimiento seguido por el procesador para acceder al dato de una dirección
lógica cualquiera (p, d) es el siguiente:
1º) El sistema localiza en la tabla de páginas la dirección real del frame asociado a
la página p.
2º) A continuación le suma el desplazamiento d a la dirección inicial del frame.
3º) Por último accede a la dirección obtenida para acceder al dato.
Carga de un programa en la memoria:
•
•
•
El sistema analiza cada nuevo trabajo para conocer el número de páginas que
requiere y busca en su lista de frames libres el número de frames necesarios.
Una vez que el gestor localiza los frames necesarios, carga en ellos las páginas del
programa y actualiza la lista de frames libres y la tabla de páginas del trabajo.
De esta manera se logra evitar la fragmentación externa, ya que cualquier frame
libre es asignable a un trabajo que necesite memoria.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
30 de 31
➢ Memoria Caché:
El principal inconveniente de esta técnica es que el acceso a los datos de un programa
se ralentiza, puesto que antes de acceder a la dirección del dato hay que acceder a la
tabla de páginas, duplicando los tiempos de acceso a los datos.
Por lo tanto, la Gestión de Memoria Virtual mejora notablemente la utilización de la
memoria, pero esto es a costa de una mayor duración de los procesos, es decir, el
rendimiento del sistema empeora.
Para evitar que la degradación del rendimiento, se recurre a memorias pequeñas de
muy alta velocidad (de alto coste), donde se guardan las tablas de páginas y se llaman
Memoria caché. Esto es posible porque la tablas de páginas de un programa es una
tabla sencilla que ocupa un espacio en memoria pequeño. Esta memoria funciona
como la memoria principal, pero de forma mucho más rápida, con lo que se reduce de
forma notable el retraso debido a la paginación.
➢ Segmentación:
Los programas se desarrollan en torno a un cuerpo central, donde se comienzan a
ejecutar las instrucciones y desde donde se bifurca a otros módulos de programación, a
rutinas específicas o a zonas de datos (tablas, pilas, matrices, etc...).
Desde este punto de vista, un programa es un conjunto de componentes lógicos de
tamaño variable que vamos a denominar segmentos. De modo que el espacio lógico
de direcciones se puede considerar como un conjunto de segmentos definidos:
1º) El tamaño del segmento.
2º) El número de identificación del segmento.
3º) El conjunto de segmentos de un programa estará constituido por una serie de
bloques de memoria de tamaño variable.
Con este concepto, cada dirección lógica de un programa se expresa mediante dos
valores: el número de segmento s y el desplazamiento dentro del segmento d. Parece
pues evidente que, en general, la técnica de la segmentación es similar a la paginación,
solo que en este caso es el compilador quien realiza el proceso de generación de los
segmentos del programa.
1º SMR – Curso 2011/2012
TEMA 3: EL SISTEMA OPERATIVO
31 de 31