Sistemas Operativos

Anuncio
Apellidos:
Nombre:
Sistemas Operativos
Ingenierı́a Informática de Sistemas
Examen Junio 2010
1. Juego de Pelota con procesos [3 puntos]
Implementar una función void ball game(int num players). que use procesos para simular jugadores. La función a implementar por cada proceso es: Esperar hasta recibir la pelota.
No deben existir races entre los procesos. Una vez recibida la pelota escribirá "Player
<pid>gets ball" y a continuación "Player <pid>send ball to player <pid>". Pueden
usarse las funciones, que son atómicas.
pid t fork();
int printf(const char ∗format, . . . ) ;
pid t getpid(void);
pid t ball who(void);
pid t ball next(void);
void ball send(pid t next);
2. Rename en mfs[2 puntos]
Implemente la función int mfs rename(const char *oldpath, const char *newpath)
sin subdirectorios. Para ello puede usar las siguientes funciones:
#define ENTRYSIZE . . .
struct entry {
char name[ENTRYSIZE] ;
short inode;
};
struct file system {
struct disk inode root;
...
};
#define BLOCKSIZE . . .
int data read(struct file system ∗fs , void ∗buffer ,
int block num);
int data write(struct file system ∗fs , void ∗buffer ,
int block num);
3. Inodos [2 punto] Dado un sistema de ficheros en el que:
El tamaño de bloque es 8KB.
El tamaño de puntero a bloque es 8bytes.
En el inodo existen:
•
•
•
•
10 punteros directos a bloques.
1 puntero indirecto.
1 puntero doblemento indirecto.
1 puntero triplemente indirecto.
Calcular:
Número de bloques usado por un fichero de 450MB.
En que bloque esta la posicion: 6543216541.
4. Función file write() con extents [3 puntos]
Defina la función int file write(struct file system *fs, struct disk inode *ino,
void *buffer, int block num)) que dado un inodo y un bloque dentro del fichero, escribe
el bloque correspondiente del sistema de ficheros. Si es necesario asignará espacio. La función
get next free() devuelve el siguiente bloque libre a partir del pasado como argumento (y
lo marca como ocupado). Si no existe un bloque libre devuelve -1.
struct file system {
int blocksize ;
...
};
struct extent {
int start ;
int size ;
};
#define EXTENTS . . .
struct disk inode {
int num blocks;
struct extent e[EXTENTS] ;
...
};
int data read(struct file system ∗fs , void ∗buffer ,
int block num);
int data write(struct file system ∗fs , void ∗buffer ,
int block num);
int get next free(int block num);
Descargar