Segmentación
En un esquema de segmentación un espacio de direcciones lógicas es un conjunto de segmentos. Cada segmento tendrá un nombre y un largo. Las direcciones van a hacer referencia tanto al nombre como al desplazamiento dentro del segmento.
<nro.segmento, desplazamiento>
Mecanismo de traduccion de direcciones.-
Se lleva un tabla de segmento por cada proceso, cada entrada a la tabla de segmento lleva la siguiente informacion: segment base (dirección base del segmento)
segment limit (largo del segmento)
Protección.-
La protección se asegura verificando cada acceso a la memoria con la tabla de segmentos para asegurar que se esta direccionando dentro del espacio de direcciones lógicas del proceso.
Además el mecanismo de traducción de direcciones asegura que no se direccione fuera de un segmento en particular. Existen también bits de protección para cada entrada de la tabla de segmentos
Segmentos Compartidos.-
Similar a lo visto para paginación. Se comparte la totalidad de un segmento
Fragmentación.-
El sistema operativo deberá asignar memoria utilizando algunos algoritmos ya vistos (first fit, worst fit, best fit) Cuando el sistema operativo intenta cargar un segmento y no hay ningún segmento disponible de tamaño suficiente para almacenarlo se procederá a compactar la memoria.
Paginación por demanda.-
Es similar a lo visto para la paginación introduciendo el concepto de swapping. Los procesos residen en el disco y al ser ejecutados deben ser cargados en memoria. Cuando un proceso va a ser ejecutado, el mismo es swappeado a memoria, utilizando lazy swapping. El lazy swapping nunca trae paginas a memoria si no van a ser ejecutadas. Se necesita determinar si un pagina esta en memoria o en disco, por lo cual se utiliza el bit de válido / inválido de la tabla de páginas. Si el bit = 1 la página es valida y esta cargada en memoria si es 0 la página es inválida y no esta cargada en memoria (esta en disco).
Cuando un proceso intenta acceder a una página que no esta cargada en memoria ocurre un page fault (tomo de página). El procedimiento para manejar un page fault es el siguiente:
1. Verificar si la referencia a la pagina es valida (se utiliza una tabla interna (generalmente llevada en PCB) donde se indica las paginas validas.
2. Si la referencia no es valida, se cancela la ejecución del proceso.
3. Encontrar un frame disponible para cargarla (la página esta en disco)(por ejemplo de la free frame list)
4. Solicitar operación de I/O para leer la página de disco cargarla en el frame obtenido.
5. Modificar la tabla interna y la tabla de paginas para que ahora esta pagina figure como que esta en memoria.
6. Continuar con la ejecución del proceso en la instrucción en la que fue interrumpido.