Sistemas Operativos

Transcripción

Sistemas Operativos
Apellidos:
Nombre:
Sistemas Operativos
Ingenierı́a Informática de Sistemas
Examen Diciembre 2009
1. Dispositivo de bloques con buffer [3 puntos]
Implementar las funciones buffer block read() y buffer block write(). Las funciones
se diferencian de block read/write() en que guardan en dos buffers indexado por la función int hash(int block number) de tamaño NUMBUFFERS con las últimos bloques usados
(buf a y buf b). Existe dos campos dirty a y dirty b, para indicar si el contenido es distinto del buffer en disco. La estructura buffer dev esta protegida por el mutex lock, cada
uno de los dos buffers individuales esta protegido por lock buffer[i]. Hay que minimizar
el tiempo usado con cada uno de los locks adquiridos. La lecturas/escrituras (tanto de disco como a memoria) hay que realizarlas con el lock buffer correspondiente adquirido. El
buffer puede estar tanto en buf a o buf b. Si el buffer no esta en los buffers, se selecciona el
buffer con la función store in a().
#define BLOCKSIZE . . .
#define NUMBUFFERS . . .
struct buffer {
char block[BLOCKSIZE] ;
};
struct buffer dev {
mutex lock ;
struct device ∗dev;
int block num a[NUMBUFFERS] ;
int dirty a [NUMBUFFERS] ;
int block num b[NUMBUFFERS] ;
int dirty b [NUMBUFFERS] ;
mutex lock buffer [NUMBUFFERS] ;
struct buffer buf a[NUMBUFFERS] ;
struct buffer buf b[NUMBUFFERS] ;
};
int block read(struct device ∗dev, void ∗buffer , int block number)}
int block write(struct device ∗dev, void ∗buffer , int block number)}
bool store in a(void);
2. Algoritmo get block() con extents [2 puntos]
Definir la función int get block(struct extent e[], int size, int pos), que devuelve el
número de bloque que contiene la posición del fichero pos (en bytes). size indica el número
de extents que contiene el array e. En caso de que el fichero no contenga un bloque en esa
posición se asignará un bloque que este libre en el bitmap de bloques libres. Escribir las
funciones necesarias para manipular el bitmap. En caso do que no quede sitio en los extents
o bloques libres, se devolverá -1.
#define BLOCK_SIZE ...
struct extent {
int start;
int size;
}
struct super_block {
int block_size;
int num_inodes;
int num_bitmap;
int num_data_blocks;
....
};
struct file_system {
struct device *dev;
char *bitmap;
struct super_block sb;
....
} *fs;
3. Algoritmo get block() con estructura de árbol tipo Unix [2 puntos]
Definir la función int get block(struct inode *ino, int pos), que devuelve el número
de bloque que contiene la posición del fichero pos (en bytes). En caso de que el fichero no
contenga un bloque en esa posición se asignará un bloque que este libre en el bitmap de
bloques libres. Escribir las funciones necesarias para manipular el bitmap. En caso que no
queden bloques libres, se devolverá -1.
#define BLOCK_SIZE ...
struct inode {
struct device *dev;
int size;
int direct[10];
int indirect;
int double;
...
}
int block_read(struct device *dev, void *buff, int num);
4. Algoritmo de segunda oportunidad [2.5 puntos]
Implemente en C el algoritmo de segunda oportunidad: int second chance(struct frames
*frames, int page, int write) teniendo en cuenta:
Si el mutex está ocupado, pasar a la siguiente página.
El mutex se bloquea antes de comenzar una escritura de una página. La función
page write devuelve el control despues de iniciar la escritura. Cuando la escritura
termina, el controlador desbloquea el lock.
La tabla de modificaciones de los dos campos es:
C viejo M viejo C nuevo M nuevo aclaración
0
0
1
w
se usa esta entrada para la nueva página.
0
1
0
0
Se inicia la escritura de la página.
n
0
n-1
0
Se decrementa el contador.
n
1
n-1
1
Se decrementa el contador.
#define NUMFRAMES
struct frame {
int num page;
int count;
bool modify;
mutex busy;
};
/∗ Num of page stored here ∗/
/∗ Count bit ∗/
/∗ Modify bit ∗/
/∗ La pagina se esta ocupada ∗/
struct frames {
int next;
struct frame[NUMFRAMES] ;
};
int page read(int page, int frame);
int page write(int page, int frame);
void mutex lock(mutex ∗m);
void mutex unlock(mutex ∗m);
int mutex trylock(mutex ∗m);

Documentos relacionados