Resumen de Sistemas Operativos de Silberschatz Tanenbaum y Stallings
RESUMEN SISTEMAS OPERATIVOS
-
Upload
joaquin-perez-leibovich -
Category
Documents
-
view
16 -
download
0
description
Transcript of RESUMEN SISTEMAS OPERATIVOS
1
RESUMEN SISTEMAS OPERATIVOS
INTRODUCCIÓN
Sistema Operativo: programa que controla la ejecución de otros programas. Interfase entre las aplicaciones y el HW, actúa como intermediario entre un usuario y el HW.
Objetivos
Comodidad: Hacer más cómodo el uso de la computadora.
Eficiencia: Uso más eficiente en los recursos de un sistema. Habilidad de evolución: Permitir el desarrollo, prueba e introducción de nuevas
funciones al sistema sin interferir con el servicio.
Servicios
Controlar la ejecución de procesos permitiendo su creación, terminación o suspensión y
comunicación. Planificar el uso de la CPU a través del scheduling de procesos. Asignar memoria principal para el proceso en ejecución. Asignar memoria secundaria para uso eficiente y
recuperación de datos del usuario. Permitir el acceso controlado desde los procesos a los dispositivos.
Desarrollo de Programas: Editores y Depuradores
Ejecución de Programas
Acceso a dispositivos de E/S
Acceso controlado a archivos
Acceso al Sistema
Detección de errores y respuestas
Errores de HW internos y Externos: Errores de Memoria; Errores de Dispositivos
Errores de SW: Errores Aritméticos; Acceso no permitido a direcciones de memoria
Incapacidad del SO para conceder una solicitud de una aplicación
Contabilidad:
Recoger estadísticas del uso
Monitorizar parámetros de rendimiento
Anticipar necesidades de mejoras futuras
Dar elementos si es necesario facturar tiempo de procesamiento
Administración y planificación del procesador: Imparcialidad, “justicia” en la ejecución
(Fairness); Que no haya bloqueos; Manejo de Prioridades.
Administración de Memoria: Memoria física vs memoria virtual. Jerarquías de memoria;
Protección de programas que compiten o se ejecutan concurrentemente.
Administración del almacenamiento– Sistema de archivos: Acceso a medios de
almacenamiento externos;
Administración de dispositivos: Ocultamiento de dependencias de HW; Administración de
accesos concurrentes
Batch processing: Definición de un orden de ejecución; maximización del rendimiento
(throughput)
Requiere: procesador y memoria para ejecutarse.
Perspectivas:
De arriba hacia abajo: “oculta” el HW y presenta a los programas abstracciones más
simples de manejar. Comodidad, “amigabilidad” (friendliness)
De abajo hacia arriba: Explota/administra los recursos de HW de uno o más
procesadores. Provee un conjunto de servicios a los usuarios del sistema. Maneja la memoria
2
secundaria y dispositivos de I/O. Ejecución simultánea de programas. Multiplexación en tiempo
(CPU) y en espacio (memoria).
Registros del Procesador
Visibles por el usuario: Le permiten al programador optimizar el acceso a memoria
principal. Pueden ser referenciados por lenguaje de máquina. Tipos de registros
Datos
Direcciones: Index, Segment pointer, Stack pointer.
De Control y estado: Para control operativo del procesador. Usados por rutinas
privilegiadas del SO para controlar la ejecución de programas.
Program Counter (PC): Contiene la dirección de la próxima instrucción a ser
ejecutada.
Instruction Register (IR): Contiene la instrucción recientemente ejecutada
Program Status Word (PSW): Contiene códigos de resultado de operaciones.
Habilita/deshabilita Interrupciones. Indica el modo de ejecución (Supervisor/user).
Ejecución de una instrucción:
Procesador lee la instrucción desde la memoria
Procesador ejecuta la instrucción
Instrucción: Fetch y Execute
El procesador busca (fetch) la instrucción en la memoria y se pone en el IR. Categorías: Procesador-memoria: Transfiere datos entre estos.
Procesador-I/O: Transfiere datos a/o desde periféricos.
Procesamiento de Datos: Operaciones aritméticas o lógicas sobre datos.
Control: Alterar secuencia de ejecución
El PC se incrementa después de cada fetch.
DMA: el intercambio de I/O ocurre directamente con la memoria. El procesador le da autoridad
al dispositivo de I/O para leer o escribir a memoria.
Interrupciones: Interrumpen el secuenciamiento del procesador en la ejecución de un proceso.
Dispositivos de I/O más lentos que el procesador.
Clases:
Programadas: generadas por una condición que ocurre como resultado de la ejecución
de una instrucción.
Reloj: generada por un reloj con el procesador. Esto le permite al SO realizar ciertas
funciones regularmente.
Entrada/Salida: generada por un controlador de entrada salida, para señalar la
terminación o el error de operación.
Falla de HW: falla de energía o error de paridad de memoria, por ejemplo.
Interrupt Handler: rutina que atiende una determinada interrupción. Generalmente es parte
del SO.
Ciclo de interrupción: El procesador chequea la existencia de interrupciones. Si no existen
interrupciones, la próxima instrucción del programa es ejecutada. Si hay pendiente alguna
interrupción, se suspende la ejecución del programa actual, se guarda el contexto y se ejecuta la
rutina de manejo de interrupciones.
Múltiples interrupciones:
Deshabilitar las interrupciones mientras una está siendo procesada.
Definir prioridades.
3
Multiprogramación: Procesador tiene más de un programa para ejecutar. La secuencia de
programas es de acuerdo a prioridad, o espera de I/O. Después que se completa la atención de
la interrupción, el control puede o no retornar al programa que se estaba ejecutando al
momento de la interrupción.
KERNEL: Porción del S.O. que se encuentra en la memoria principal. Contiene las funciones
usadas más frecuentemente. Implementa servicios básicos: Manejo de memoria en general;
administración de procesos; comunicación y Concurrencia; gestión del Hardware.
TIPOS DE SO
Considerar que los dispositivos de e/s son más lentos que la CPU.
Monoprogramación: El procesador debe esperar que la instrucción de E/S se complete.
Multiprogramación: Cuando un trabajo necesita realizar E/S, el procesador puede ser utilizado
con otro trabajo. Tiempo compartido: el tiempo del procesador es compartido entre múltiples
trabajos. Múltiples usuarios podrían acceder simultáneamente al sistema utilizando terminales.
Sistemas paralelos: sistema con más de una CPU. Los procesadores comparten memoria
y reloj. Ventajas: aumentar productividad, economía, incrementar confiabilidad. Sistemas distribuidos: el trabajo es distribuido a lo largo de varios procesadores. Cada
procesador cuenta con su propia memoria local. La comunicación se da sobre líneas de
comunicación. Ventajas: compartir recursos, aumento de la productividad, confiabilidad, comunicación.
Sistemas de tiempo real: Utilizado para controlar dispositivos de aplicaciones delicadas como experimentos científicos, médicos, industria. Hay restricciones de tiempo que se DEBEN
respetar.
Sistemas portables: teléfonos Celulares. Características: Memoria Limitada, Procesadores
Lentos, Pequeñas pantallas.
Usuario – SO Shell, basado en texto o GUI (Graphical User Interfase), basado en gráficos o íconos.
Intérprete de comandos (Command interpreter; CI o CLI). Muestra el prompt. Implementa redirección de Input/Output, control de tareas, etc.
Modo de ejecución
El bit de modo indica el modo actual.
Las instrucciones privilegiadas deben ejecutarse en modo supervisor (necesitan
acceder a estructuras del kernel, o ejecutar código que no es del proceso). El SO se ejecuta en este modo.
Al arrancar el sistema. Las E/S se hacen en este modo.
Cuando hay un trap o una interrupción, el bit de modo se pone en modo supervisor:
Cuando el proceso de usuario intenta por sí mismo ejecutar instrucciones que pueden causar problemas (las llamadas instrucciones privilegiadas) esto el HW lo detecta como una operación
ilegal y produce un trap al SO. Manejo de: CPU, memoria, Input/Output.
Administración multiprocesador, diagnosticos, testing.
Partes del filesystem y la interfase de red.
4
Cuando está en modo usuario, el proceso puede acceder sólo a su espacio de
direcciones, es decir a las direcciones “propias”.
Cuando comienzan a ejecutarse un proceso de usuario, este bit se pone en modo usuario.
Protección de la memoria: Delimitar el espacio de direcciones del proceso. Uso de
registro base y registro límite. El SO puede cargar valores en estos registros a través de instrucciones privilegiadas. Esta acción sólo puede realizarse en modo monitor. La zona de
protección base tiene un registro base y un registro límite, si quiero cargar valores en estos registros los hace el SO a través del modo supervisor.
Protección de la CPU: Uso de interrupción por clock para evitar que un proceso se
apropie de la CPU. Se implementa normalmente a través de un clock y un contador. El SO le da valor al contador que se decrementa con cada tick de reloj y al llegar a cero se produce la
expulsión del proceso. Las instrucciones que modifican el funcionamiento del cronómetro son privilegiadas. Se le asigna al contador el valor que se quiere que se ejecute un proceso. Se la
usa también para el cálculo de la hora actual, basándose en cantidad de interrupciones ocurridas cada tanto tiempo y desde una determinada fecha y hora.
System Calls: Se ejecutan en modo supervisor. Es la forma en que los programas de usuario acceden a los servicios del SO. Los parámetros asociados a las llamadas pueden pasarse
de varias maneras: por registros, bloques o tablas en memoria ó pilas. count=read(file, buffer, nbytes);
Categorías: Control de Procesos
Manejo de archivos Manejo de dispositivos
Mantenimiento de información del sistema Comunicaciones
Cómo se lleva a cabo una System Call? Se emite una interrupción para invocar al Kernel
int $0x80 Se llama al Interruption Handler
System Call Handler El proceso indica con un número la System Call
que desea invocar
Syscall Number
Cada System Call tiene un número asignado dentro del kernel. Nunca debe ser alterado ni
reutilizado en caso de desaparecer una SysCall.
sys_call_table: <kernel_code>/arch/i386/kernel/syscall_t
able.S
Tipos de Kernel:
Monolíticos: Linux. La interacción con el HW la lleva el kernel.
Microkernel: procesos que se comunican es más ineficiente que dos módulos que se
comunican
5
PROCESOS
Un proceso es programa en ejecución, es decir, serie de pasos para llevar a cabo algo.
PROCESO vs. PROGRAMA
PROGRAMA PROCESO
Es estático. Es dinámico.
No tiene program counter. Tiene program counter.
Existe desde que se edita hasta que se borra. Su ciclo de vida comprende desde que se lo “dispara” hasta que termina.
Estructura
Un proceso tiene, como mínimo 3 partes o regiones:
Código, también llamado texto
Datos, variables globales
Stack que contiene datos temporarios como parámetros de subrutinas, variables
temporales y direcciones de retorno. Un proceso cuenta con 2 stack: uno para modo usuario y
otro para modo kernel; las cuales se crean automáticamente y su medida se ajusta en run-
time. El stack está formado por stack frames que son pushed (al llamar a una rutina) y popped
(cuando se retorna de ella). El stack frame tiene los parámetros a la rutina, variables locales, y
datos necesarios para recuperar el stack frame previo, el contador de programa y el valor del
stack pointer en el momento del llamado.
Atributos
Identificación del proceso, y del proceso padre.
Identificación del usuario o grupo que lo “disparó”
En ambientes multiusuaurio, desde que terminal y quien lo ejecuto.
PCB (Process Control Block)
Estructura asociada al proceso. Una por proceso. Contiene información asociada con
cada proceso: Estado, Contenido del PC (program counter), Contenido de los Registros de la
CPU. Es lo primero que se crea cuando se crea un proceso y lo último que se borra cuando
termina. Información relacionada con:
Planificación
Ubicación en memoria Accounting
Estado de I/O
Estructuras asociadas al proceso
Del proceso (PCB) De archivos que utiliza
De memoria que utiliza
Otras definiciones
Espacio de direcciones: conjunto de direcciones de memoria que ocupa el proceso, el cual no
incluye su PCB o tablas asociadas. Un proceso en modo usuario puede acceder sólo a su espacio
de direcciones; en modo kernel, a estructuras del kernel o a espacios de direcciones de otros
procesos.
6
Contexto de un proceso: Incluye toda la información que el SO necesita para administrar el
proceso, y que la CPU necesita para ejecutarlo correctamente.
Ejemplo:
registros de cpu, inclusive el contador de programa;
prioridad del proceso
si tiene E/S pendientes, etc.
Cambio de contexto: Se produce cuando la CPU cambia de un proceso a otro. Entonces:
1. se debe resguardar información del proceso saliente, que pasa a espera y retornara después la CPU.
2. se debe cargar la información asociada al nuevo proceso y comenzar desde la instrucción siguiente a la ultima ejecutada.
El tiempo que pasa mientras esto se lleva a cabo, es tiempo no productivo de CPU. El tiempo
que consume depende del soporte de HW. Puede implementarse asociando un conjunto de
registros de CPU a cada proceso...
Colas de planificación:
De procesos: de todos los procesos en el sistema; De procesos listos: residentes en memoria principal, en estado de listo y esperando para
ejecutarse; De dispositivos: procesos esperando por un dispositivo de I/O.
Estados de un proceso
Un usuario “dispara” el proceso. Un proceso es creado por otro proceso: su proceso padre.
Nuevo (new): Se dice que un proceso está en estado de nuevo cuando apenas se encuentra en proceso de crearse. En este estado se crean las estructuras asociadas, y el
proceso queda en la cola de procesos, normalmente en espera de ser cargado en
memoria. Ejecutándose (running): El scheduler de corto plazo lo eligió para asignarle CPU.
Entonces, tendrá la CPU hasta que se termine el período de tiempo asignado (quantum) o hasta que necesite que se produzca un evento.
En espera (waiting): El proceso necesita que se cumpla un evento esperado para
continuar, el cual puede ser la terminación de una I/O solicitada, o la llegada de una señal por parte de otro proceso. Cuando esto sucede, el proceso sigue en memoria, pero
no tiene la CPU. Al cumplirse el evento, pasará al estado de listo. Listo para ejecutar (ready): El scheduller de largo plazo elige el proceso para cargarlo
en memoria. En este estado, el proceso (que está en la cola de procesos listos) sólo necesita que se le asigne CPU.
Terminado (terminated): Cuando un proceso se ha completado, su ejecución pasa a
ser un proceso terminado.
7
Transiciones
New-Ready: Por elección del scheduler de largo plazo (carga en Memoria). Ready-Running: Por elección del scheduler de corto plazo, se le asigna a un proceso
CPU. Running-Waiting: el proceso se pone a dormir, esperando por un evento.
Waiting-Ready: Termino la espera y compite nuevamente por la CPU. CASO ESPECIAL: RUNNING-READY: Cuando el proceso termina su quantum (franja
de tiempo) sin haber necesitado interrumpirlo por un evento, pasa al estado de ready,
para competir por CPU, pues no está esperando por ningún evento...
Módulos de planificación
Son módulos del SO que realizan distintas tareas asociadas a la planificación. Tienen alta
prioridad de ejecución, pues al necesitar la CPU para ejecutarse, compiten también por ella.
Hay tres tipos:
Scheduler de long term: Controla el grado de multiprogramación, es decir, la cantidad
de procesos en memoria. Puede no existir este scheduler y absorber esta tarea el de
short term.
Scheduler de short term: a quién le doy la CPU de los que están listo. Lo hace el
dispatcher. El más frecuente, intervalos cortos entre ejecución y ejecución
Scheduler de medium term (swapping): Si es necesario, reduce el grado de
multiprogramación, para ello, saca temporariamente de memoria los procesos que sea
necesario para mantener el equilibrio del sistema.
Términos asociados: swap out (sacar de memoria), swap in (volver a memoria).
Sus nombres provienen de la frecuencia de ejecución.
Hay otros módulos, que pueden no existir como módulos separados de los schedulers vistos,
pero la función debe cumplirse. Ellos son:
Dispatcher: hace cambio de contexto, cambio de modo de ejecución...”despacha” el proceso
elegido por el short term (es decir, “salta” a la instrucción a ejecutar).
Loader: carga en memoria el proceso elegido por el long term.
Planificación
Necesidad de determinar
qué proceso se ejecutará a
continuación en un ambiente
multiprogramado.
CPU-bound: Mayor parte del tiempo utilizando la CPU
I/O-bound: Mayor parte del tiempo esperando por I/O
Velocidad de CPU aumento considerablemente respecto a dispositivos de I/O
8
Pensar: Necesidad de atender rápidamente procesos I/O-bound para mantener el dispositivo
ocupado y aprovechar la CPU para procesos CPU-bound.
Algoritmos apropiativos y no apropiativos
Un algoritmo No Apropiativo (nonpreemptive) permite que el proceso se ejecute hasta el que
mismo (por su propia cuenta) abandona la CPU. Se bloquea, finaliza, etc. No hay decisiones de
planificación durante las interrupciones de reloj.
En los algoritmos Apropiativos existen situaciones que hacen que el proceso en ejecución sea
expulsado de la CPU.
Categorías de los algoritmos de planificación
Según el ambiente es posible requerir algoritmos de planificación diferentes, con diferentes
metas:
Equidad: Otorgar una parte justa de la CPU a cada proceso.
Balance: Mantener ocupadas todas las partes del sistema.
Ejemplos:
Procesos por lotes (batch): No existen usuarios que esperen una respuesta en una
terminal. Se pueden utilizar algoritmos no apropiativos. Metas de este tipo de algoritmos:
Rendimiento: Maximizar el número de trabajos por hora Tiempo de Retorno: Minimizar los tiempos entre el comienzo y la
finalización Uso de la CPU: Mantener la CPU ocupada la mayor cantidad de tiempo
posible
Ejemplos:
FCFS – First Come First Served
SJF – Shortest Job First
SRTF – Shortest Remaining Time First
Procesos Interactivos: No solo interacción con los usuarios. Son necesarios algoritmos apropiativos para evitar que un proceso acapare la CPU. Metas de este tipo de
algoritmos: Tiempo de Respuesta: Responder a peticiones con rapidez
Proporcionalidad: Cumplir con expectativas de los usuarios
Ejemplos:
Round Robin ; Prioridades ; Colas Multinivel ; SRTF
Procesos en Tiempo Real
Política vs mecanismo
Existen situaciones en las que es necesario que la planificación de uno o varios procesos se
comporte de manera diferente. Por ello, el algoritmo de planificación debe estar parametrizado,
de manera que los procesos/usuarios pueden indicar los parámetros para modificar la
planificación.
El Kernel implementa el mecanismo, mientras que el usuario/proceso utiliza los parámetros para
determinar la Política.
Ejemplo:
Un algoritmo de planificación por prioridades y una System Call que permite
modificar la prioridad de un proceso.
9
Un proceso puede determinar las prioridades de los procesos que el crea, según
la importancia de los mismos.
ADMINISTRACIÓN DE MEMORIA
Divis
asignada eficientemente para contener el mayor número de procesos como sea posible.
Requisitos
Reubicación: El programador no debe ocuparse de conocer dónde será colocado el programa
para ser ejecutado. Mientras un proceso se ejecuta, puede ser sacado y traído a la memoria
(swap) y colocarse en diferentes lugares. Las referencias a la memoria se deben traducir según
dirección actual del proceso.
Protección: Los procesos no deben ser capaces de referenciar direcciones de memoria de otros
procesos (salvo que tengan permiso). El chequeo se debe realizar durante la ejecución: el SO no
puede anticipar todas las referencias a memoria que un proceso puede realizar.
Compartición: Permitir que varios procesos accedan a la misma porción de memoria; ej:
Rutinas comunes, librerías, espacios explícitamente compartidos, etc. Lleva a un mejor uso de la
memoria, evitando copias innecesarias de instrucciones
Espacio de direcciones
Rango de direcciones (a memoria) posibles que un proceso puede utilizar para direccionar
sus instrucciones y datos. El rango varía dependiendo de la arquitectura
32 bits: 0 .. 232 - 1
64 bits: 0 .. 264 – 1
Debe ser independiente de la ubicación “real” del proceso en la memoria.
Tipo de direcciones
Lógicas: Referencia a una localidad de memoria independiente de la asignación actual de los
datos en la memoria. Se debe realizar una traducción a una dirección física.
Físicas: La dirección absoluta en la memoria principal.
La CPU trabaja con direcciones lógicas. Para acceder a memoria principal, se deben transformar
en direcciones absolutas. Resolución de direcciones (address-binding): transformar la
dirección lógica en la dirección física correspondiente:
Resolución en momento de compilación y en tiempo de carga: Direcciones Lógicas
y Físicas son idénticas
Resolución en tiempo de ejecución:
Direcciones Lógicas y Físicas son diferentes
Direcciones Lógicas son llamadas “Direcciones Virtuales”
El mapeo entre “Virtuales” y “Físicas” es realizado por hardware (MMU (Memory
Management Unit)
Registros utilizados
Registro Base: Dirección de comienzo del proceso.
Registro Limite: Dirección final del proceso o medida del proceso.
Su valor se fija cuando el proceso es cargado a memoria (Context Switch).
Se utiliza la dirección lógica junto con el registro base para obtener una dirección física. El
resultado se compara con el valor del registro límite. Si la dirección generada es incorrecta, se
genera una interrupción al SO.
10
Binding de direcciones
Las direcciones en los programas fuentes son simbólicas. Compiladores relacionan direcciones
simbólicas con direcciones reubicables. El linkeditor/cargador relaciona las direcciones
reubicables con direcciones absolutas.
Memory Management Unit (MMU)
Dispositivo de Hardware que mapea direcciones virtuales a físicas. Es parte del Procesador. Re -
programar el MMU es una operación privilegiada que solo puede ser realizada en modo Kernel. El
valor en el “registro de realocación” es sumado a cada dirección generada por el proceso de
usuario al momento de acceder a la memoria. Los procesos nunca ver direcciones físicas.
Carga dinámica
Una rutina no es cargada hasta que no es llamada. Todas las rutinas se mantienen en el disco en
un formado “reubicable”. Cuando una rutina invoca a otra: Se chequea que ya no haya sido
cargada. Si no se cargo, se llama al “cargador” para que la cargue. El “cargador” actualiza el
espacio de direcciones del proceso. El control es pasado a la nueva rutina. Mejor utilización de
la memoria: rutinas no utilizadas no son nunca cargadas
Linkeo Dinámico
Similar a la carga dinámica. El linkeo es postergado hasta el momento de “runtime”. Las
librerías dinámicas no son “adjuntadas estáticamente” al proceso, solo un pequeño “stub” es
adjuntado (el cual indica cómo cargar la rutina apropiada). Todos los programas pueden utilizar
la misma copia de una librería (código) (DLLs). El Linkeo Dinámico requiere soporte del S.O. el
cual es el único que puede localizar una librería en el espacio de direcciones de otro proceso.
Asignación de memoria
La memoria principal debe ser organizada para contener el S.O. (rutinas, librerías, estructuras) y
procesos. El S.O. debe protegerse de cambio de los procesos. Procesos deben protegerse unos
de otros.
Única Partición:
Los procesos ocupan una única partición de memoria
La protección se implementa por un “límite” y un registro de “reubicación”
Particiones
La memoria es dividida en varias regiones (particiones). Los procesos (su espacio de
direcciones) se colocan en las particiones según su tamaño. Técnicas:
Particiones Fijas: Regiones definidas con limites fijados.
Tamaños:
Igual Tamaño
Cualquier proceso cuyo tamaño es menor igual que la partición puede ser
colocado en una partición libre. Si todas están ocupadas Swap. Un programa
puede no entrar en la partición. Ineficiencia: Cualquier programa, sin importar su
tamaño, ocupara una partición.
Diferente Tamaño: Evita el problema de las particiones de igual
tamaño. Complejidad en el algoritmo de selección de partición para un proceso.
Particiones Dinámicas: Las particiones son de tamaño y numero variable. Los
procesos son colocados exactamente en particiones de igual a su tamaño (generadas
dinámicamente).
Fragmentación: Espacio libre de la memoria que no puede ser utilizado por NO
encontrarse de manera contigua.
11
Interna Particiones Fijas: Espacio dentro de la partición sin utilizar
Externa Particiones Dinámicas: Cada vez que entra y sale un proceso se
genera huecos en la memoria, en los que eventualmente un proceso no podría entrar,
pero si entraría si unimos todos los huecos COMPACTACION
Algoritmos de ubicación
Particiones Fijas de igual tamaño: No se necesita un algoritmo
Particiones Fijas de diferente tamaño y Particiones Dinámicas:
First Fit: Recorre las particiones libres en orden, buscando la primera que contenga el
proceso.
Best Fit: Selecciona la partición más pequeña que contiene al proceso. Mucho overhead
en la búsqueda. En particiones dinámicas: se generan muchos huecos pequeños de
memoria libre Fragmentación externa
Worst Fit: Selecciona la partición libre más grande que contenga el proceso. Mal uso en
Particiones Fijas. Buen uso en Particiones Dinámicas.
Next Fit: Mantiene las particiones libres como una lista circular. Selecciona la primera
partición que encuentra que contenga el proceso.
Superposiciones (overlapping): El tamaño de los procesos y sus datos puede exceder el
tamaño de la memoria. Conceptos: Separar el programa en módulos. Cargar los módulos
alternativamente. El dispositivo de “superposiciones” localiza los módulos en el disco. Los
módulos superpuestos se guardan como imágenes absolutas de memoria. Se requiere soporte
de los compiladores.
Swapping: Un proceso puede ser temporalmente sacado de la memoria (swapped out) a un
disco de manera de permitir la ejecución de procesos. Si se descarga considerando las
direcciones físicas.
Al hacer swapped in se debe cargar: en el mismo espacio de memoria que ocupaba antes. Si se
descarga considerando las direcciones lógicas. Se puede cargar en cualquier espacio de
direcciones de memoria.
Paginación
La memoria es dividida lógicamente en pequeños trozos de igual tamaño Marcos
El espacio de direcciones de cada proceso es dividido en trozos de igual tamaño que los
marcos Páginas
El SO mantiene una tabla de páginas por cada proceso:
Contiene el marco en el que está situada cada página.
La dirección lógica consiste en un número de página y un desplazamiento dentro de la
misma.
Segmentación
Esquema que soporta el “punto de vista de un usuario”. Un programa es una colección de
segmentos. Un segmento es una unidad lógica como: Programa Principal, Procedimientos y
Funciones, variables locales y globales, stack, etc. Similar a particiones dinámicas. Todos los
segmentos de un programa pueden no tener el mismo tamaño (código, datos, rutinas). Las
direcciones Lógicas consisten en 2 partes:
Selector de Segmento
Desplazamiento dentro del segmento
Arquitectura
Tabla de Segmentos: Permite mapear la dirección lógica en física. Cada entrada
contiene:
Base: Dirección física de comienzo del segmento
12
Limit: Longitud del Segmento
Segment-table base register (STBR): apunta a la ubicación de la tabla de segmentos.
Segment-table length register (STLR): cantidad de segmentos de un programa
Segmentación Paginada
La paginación: Transparente al programador. Elimina Fragmentación externa.
Segmentación: Es visible al programador. Facilita modularidad, estructuras de datos grandes y
da mejor soporte a la compartición y protección.
Cada segmento es dividido en paginas de tamaño fijo.
El SO puede traer a memoria las “piezas” de un programa a medida que se las solicita.
Definiremos como “Conjunto Residente” a la porción del espacio de direcciones del proceso
que se encuentra en memoria. Con el apoyo del HW se detecta cuándo se necesita una porción
del proceso que no está en su Conjunto Residente
Ventajas: Más procesos pueden ser mantenidos en memoria. Sólo son cargadas algunas
secciones de cada proceso. Con más número de procesos en la memoria principal es más
probable que existan más procesos Ready. Un proceso puede ser más grande que la memoria
Principal. El usuario no se debe preocupar por el tamaño de sus programas. La limitación la
impone el HW y el bus de direcciones.
¿Qué se necesita? El hardware debe soportar paginación por demanda (y/o segmentación). Un
dispositivo de memoria secundaria (disco) que dé el apoyo para almacenar las secciones del
proceso que no están en Memoria Principal (área de intercambio). El SO debe ser capaz de
manejar el movimiento de las páginas (o segmentos) entre la memoria principal y la secundaria
Memoria virtual con paginación
Cada proceso tiene su tabla de páginas. Cada entrada en la tabla referencia al marco en el que
se encuentra la página en la memoria principal. Cada entrada en la tabla de páginas tiene bits
de control (entre otros):
Bit V: Indica si la página se encuentra en memoria o no.
Bit M: Indica si la página fue modificada. Si se modificó se debe reflejar los cambios en
la Memoria Secundaria.
Fallo de página: Ocurre cuando se intenta utilizar una dirección página que no se encuentra en
la memoria principal. El bit V es controlado por el HW. El HW detecta la situación y genera un
trap al S.O. El S.O. coloca al proceso en estado de “Blocked” (espera). El S.O. busca un “Frame
Libre” y genera una operación de E/S al disco para subir a dicho Frame la porción (página) de l
proceso que se necesita. El SO puede asignarle la CPU a otro proceso. La E/S se realizará y
avisará mediante interrupción su finalización. Cuando la operación de E/S finaliza el SO:
Actualiza la tabla de páginas. Coloca el Bit V en 1. Coloca la dirección base del Frame donde se
colocó la página. El proceso que generó el Fallo de Página vuelve estado de Ready (listo).
Performance: Tasa de Fallo de página 0 <= p <= 1.0
Si p = 0 no hay page faults
Si p = 1, cada a memoria genera un page fault
Effective Access Time (EAT): EAT = (1 – p) x memory access
+ p (page fault overhead
+ [swap page out ]
+ swap page in
+ restart overhead)
Tabla de páginas: Cada proceso tiene su tabla de páginas. El tamaño de la tabla de páginas
depende del espacio de direcciones del proceso. El SO pagina las tablas de cada proceso.
Organización: La forma de organizarla depende del HW subyacente
Tabla de 1 nivel: Tabla única lineal
Tabla de 2 niveles (o más)
13
Tabla invertida (Hashing): Utilizada en Arquitecturas donde el espacio de direcciones es
muy grande. Las tablas de paginas ocupan muchos niveles y la traducción es costosa. El número
de página es transformado en un valor de HASH. Con el valor se busca en una tabla asociativa
en Frame. Sólo mantener PTEs de páginas presentes en memoria física. Tabla invertida
organizada como tabla hash en memoria principal: Buscar asociativamente por número de
página virtual. Si está presente en tabla, extraer marco de página y protecciones. Si no está
presente en tabla, corresponde a un fallo de página.
Tamaño de página
Pequeño: Menor Fragmentación Interna. Más paginas requeridas por proceso. Tablas
de páginas mas grandes. Más paginas pueden residir en memoria
Grande: Mayor Fragmentación interna. La memoria secundaria esta diseñada para
transferir grandes bloques de datos más eficientemente. Más rápido mover páginas hacia la
memoria principal.
Translation Lookaside Buffer: Cada referencia en el espacio virtual puede causar 2 (o más)
accesos a la memoria física.
Uno (o más) para obtener la entrada en tabla de paginas
Uno para obtener los datos
Para solucionar este problema, una
memoria cache de alta velocidad es
usada para almacenar entradas de
páginas: TLB. Contiene las entradas
de la tabla de páginas que fueron
usadas más recientemente. Dada
una dirección virtual, el procesador
examina la TLB. Si la entrada de la
tabla de paginas se encuentra en la
TLB (hit), es obtenido el frame y
armada la dirección física. Si la
entrada no es encontrada en la TLB
(miss), el número de página es
usado como índice en la tabla de
páginas del proceso. Se controla si la
página está en la memoria. Si no
está, se genera un Page Fault. La
TLB es actualizada para incluir la
nueva entrada.
Asignación de marcos
¿Cuántas paginas de un
proceso se pueden encontrar en
memoria? Tamaño del Conjunto
Residente
Asignación Dinámica: El número de marcos para cada proceso varía
Asignación Fija: Número fijo de marcos para cada proceso
Asignación equitativa: Ejemplo: si tengo 100 frames y 5 procesos, 20 frames para
cada proceso
14
Asignación Proporcional: Se asigna acorde al tamaño del proceso.
Remplazo de páginas
¿Qué sucede si ocurre un fallo de página y todos los marcos están ocupados?
Se debe seleccionar una página víctima.
¿Cual sería Remplazo Optimo? Que la página a ser removida no sea referenciada en un
futuro próximo.
La mayoría de los remplazos predicen el comportamiento futuro mirando el
comportamiento pasado.
Alcance
Remplazo Global: El fallo de página de un proceso puede reemplazar la página de
cualquier proceso. El proceso no controla su tasa de page-faults. Puede tomar sólo frames de
otro proceso aumentando la cantidad de frames asignados a él. Un proceso de alta prioridad
podría tomar los frames de un proceso de menor prioridad.
Remplazo Local: El fallo de página de un proceso solo puede reemplazar sus propias
páginas – De su Conjunto Residente. No cambia la cantidad de frames asignados. El proceso
puede determinar cual es su tasa de page-faults. Un proceso puede tener frames asignados que
no usa, y no pueden ser usados por otros procesos.
Algoritmo de remplazo
OPTIMO
FIFO
LRU (Least Recently Used)
2da. Chance
NRU (Non Recently Used): Utiliza bits R y M; ~R ,~M > ~R, M > R, ~M > R, M