Sistemas Operativos Control 3

2 horas

Noviembre de 2000

Pregunta 1

Normalmente los procesos en memoria hacen swap de páginas, de modo de compartir la memoria útil. Sin embargo, cuando hay demasiados procesos que requieren memoria y no damos abasto, ocurre que la suma de los WSS de todos los procesos activos excede la RAM disponible. Cuando esto ocurre, el Sistema Operativo elige un proceso víctima para ser sacado completo de RAM y llevado con todas sus páginas a disco. Una vez resuelta la emergencia, el sistema decide volver a memoria ese proceso, colocando en RAM sus páginas más referenciadas en el momento en que lo sacaron a disco. Esta función SwapInProcess deben implementarla.

SwapInProcess(PAGETABLE *pagetable)
La tabla de páginas tiene los bits de estado asociados y el arreglo de las páginas:
typedef struct {
int size;      /* taman~o de la tabla */
struct {
    bool invalid;  /* true si la pagina esta en disco */
    DISK disk_ptr; /* posicion en el disco */
    int  frame;    /* posicion en RAM,es NULL si el frame fue asignado a otro */
    bool in_workingset; /* Indica si esta' en el WS que debe estar en memoria */
} page_array[];
} PAGETABLE;

Por ejemplo, para poner el bit de inválido a la página p, hago:

pagetable->page_array[p].invalid = TRUE;

Use las siguientes funciones para su implementación:

swapin(DISK dptr, int frame);

Copia la página de disco a RAM.

int FindFreeFrame();

Retorna un frame libre en la memoria RAM. Suponga que siempre funciona y encuentra uno libre, pero sólo deben invocarla si el proceso se mantiene dentro de su Working Set Size ( wss).

Recuerde no copiar a RAM una página que no ha sido reemplazada en el frame que le corresponde, y suponga que el puntero a disco siempre existe en la tabla de páginas y está al día, o sea que la RAM actúa como cache del espacio de swap.

SwapInProcess(PAGETABLE *pagetable)
{
    int i;

    for(i=0; i < pagetable->size; i++) {
        if( pagetable->page_array[i].invalid && 
            pagetable->page_array[i].in_workingset ) {
            if( pagetable->page_array[i].frame == NULL ) {
                pagetable->page_array[i].frame = FindFreeFrame();
            }
	    swapin(pagetable->page_array[i].disk,
                   pagetable->page_array[i].frame);
	    pagetable->page_array[i].invalid = FALSE;
         }
    }
}

Pregunta 2

Parte I

Explique porqué un driver de hardware tiene una parte que ejecuta con alta prioridad y otra con menos.

La parte que atrapa las interrupciones de hardware requiere ejecutar con alta prioridad para traer los datos del dispositivo a memoria y vice-versa. Con baja prioridad ejecuta la parte de interfaz con los procesos de usuario que no requiere ser tiempo real.

Parte II

Explique qué es un pseudo-dispositivo y dé un ejemplo.

{ Es un dispositivo que no tiene hardware asociado. Ejemplo: /dev/null, pseudo-terminales, /dev/jsem).

Parte III

Explique porqué un driver debe tener cuidado al referenciar punteros en el espacio usuario, para leer o escribir.

Porque las páginas del proceso usuario pueden estar en disco y generar un PageFault al referenciarlas, interrumpiendo al kernel.

Parte IV

Explique cómo funcionan los drivers que son módulos cargables dinámicamente.

La idea es tener el código en un archivo .o (objeto) y cargarlos dinámicamente al kernel, resolviendo los símbolos (linking) en ese momento. El major del dispositivo puede ser asignado en ese momento (dinámico) o estar fijo por el driver. Una vez cargado el driver, el nodo del dispositivo debe ser creado con el major correcto.

Parte V

Explique el algoritmo del ascensor y porqué es eficiente.

La idea es minimizar los movimientos de los cabezales de los discos, ordenando los requerimientos de E/S en la dirección en la que va la cabeza. Siempre se atiende la pista más cercana a donde estoy en la dirección actual. Una vez terminados los requerimientos en esa dirección, cambiamos la dirección.

Parte VI

Explique porqué el driver de un dispositivo de hardware se hace en el Sistema Operativo y no en una biblioteca de funciones.

El acceso al hardware y sus interrupciones solo se puede realizar en modo supervisor por razones de protección, lo que requiere ejecutar en el kernel del S.O.

About this document ...

Sistemas Operativos Control 3

This document was generated using the LaTeX2HTML translator Version 95 (Thu Jan 19 1995) Copyright © 1993, 1994, Nikos Drakos, Computer Based Learning Unit, University of Leeds.

The command line arguments were:
latex2html -no_navigation -split 0 pautaC3.tex.

The translation was initiated by on Sat Nov 11 15:40:51 CLST 2000


José M. Piquer
Sat Nov 11 15:40:51 CLST 2000