En el proceso de arranque de una máquina tipo MINIX se utiliza un

Anuncio
Examen de Sistemas Operativos II
EJERCICIO 2
Tiempo estimado: 75 min.
Septiembre de 2006
Puntuación: 5 puntos
En una máquina tipo MINIX se utiliza un disco de arranque con las siguientes características:











Tamaño: 360K.
formateado para soportar 100 i-nodos
el tamaño de todos los directorios es menor de 1024 bytes
contenido de PARTE del sistema de ficheros:
directorio /: número de i-nodo: 1; primer bloque de datos: 8; propietario root; bits de protección rwxr-xr-x.
directorio /user: número de i-nodo: 3; primer bloque de datos: 10; propietario root; bits de protección rwxr-xr-x.
directorio /user/jj: número de i-nodo: 4; primer bloque de datos: 15; propietario jj; bits de protección rwx------.
directorio /user/ll: número de i-nodo: 5; primer bloque de datos: 22; propietario ll; bits de protección rwx------.
fichero /user/jj/f1: número de i-nodo: 33; primer bloque de datos: 100; propietario jj; bits de protección rwxr--r--.
fichero /user/jj/p1: número de i-nodo: 18; primer bloque de datos: 204; propietario jj; bits de protección rwx------;
bits SETUID y SETGID activos.
fichero /user/jj/p1.c: número de i-nodo: 70; primer bloque de datos: 128; propietario jj; bits de protección rwx------.
En esta máquina tienen permiso de acceso (entre otros) los usuarios:


login:jj; uid:33; gid:33; Nombre: José Juan; directorio de trabajo: /user/jj
login:ll; uid:44; gid:44; Nombre: Luca Leonardo; directorio de trabajo: /user/ll.
El usuario “jj” entra en la máquina y ejecuta desde la shell el programa “/user/jj/p1” que ha sido
generado a partir del fichero p1.c.
int s, df;
/* llamada al sistema chmod comentada*/
// s = chmod(“/user/jj”, 0044);
df = open(“/user/jj/f1”, O_RDONLY); // apertura sólo para lectura
…….
close(df);
SE PIDE:
a) Indicar los accesos que el Gestor de Ficheros realiza a la tabla de i-nodos y a la cache de
bloques cuando se ejecuta la llamada al sistema open del programa “/user/jj/p1”. En este
caso considerar que la llamada chmod está comentada y no se ha ejecutado. 3.25 puntos.
b) Igual que en el apartado a), suponiendo que se ha ejecutado la llamada al sistema chmod que
aparece comentada. Los accesos producidos por chmod no hay que indicarlos. 1 punto
c) Si un proceso perteneciente al usuario “ll” (de forma real y efectiva) ejecutase la llamada al
sistema execv(“/user/jj/p1”,..), ¿fallaría la llamada al sistema o se ejecutaría sin problemas?
Explicar brevemente la respuesta. 0.75 puntos.
Utilizar las hojas de respuestas que se adjuntan.
NOTAS:


Suponer que las llamadas al sistema no fallan por razones no expuestas en el enunciado.
Los únicos procesos de usuario que existen son los indicados en el enunciado.



Respecto a la tabla de i-nodos del Gestor de Ficheros:
 Los ÚNICOS campos a tener en cuenta para solucionar el ejercicio son: i-zone[9] (números
de zona para punteros directos, indirecto simple e indirecto doble), i_size (tamaño del
fichero), i_nlinks (número de enlaces), i_mount (indica sistema de ficheros montado) e
i_mode (bits de protección, tipo de fichero y bits SETUID y SETGID).
 En cada entrada de la hoja de soluciones se pueden indicar hasta tres campos que se
modifiquen/consulten de un determinado i-nodo, anotando el número de i-nodo al que se
accede, el nombre del campo(s) y una breve descripción de la razón del acceso (por cada
campo).
Respecto a la cache de bloques del Gestor de Ficheros:
 Rellenar una entrada de la hoja de soluciones por cada bloque que se cargue en la cache
para ser consultado/modificado o por cada bloque que encontrándose ya en la cache se
consulte/modifique. En la columna “Descripción” indicar el tipo de bloque al que se está
accediendo (superbloque (S), bloque de mapa de bits de i-nodos (MBI-N), bloque de mapa
de bits de zonas (MBZ), bloque de i-nodos (I-N), bloque de directorio (DIR), bloque
indirecto (Ind) o bloque de datos (DAT)), así como la razón del acceso.
Para resolver los dos primeros apartados, suponer que en el momento previo a la ejecución de la
llamada al sistema open en la tabla de i-nodos sólo se encuentran cargados los i-nodos del
directorio raíz y del directorio de trabajo del proceso que está ejecutando el programa
“/user/jj/p1”.
Examen de Sistemas Operativos II
Septiembre de 2006
Apellidos: .............................................................................................................................................
Nombre: ............................................................................................ Nº matrícula: ............................
a) Llamada al sistema df = open(“/user/jj/f1”, O_RDONLY) sin chmod.
Tabla de i-nodos:
Nº de
i-nodo
Nombre del Campo(s)
1
i_mount, i_mode, i_zone[0]
3
i_mount, i_mode, i_zone[0]
4
i_mount, i_mode, i_zone[0]
33
i_mode
Descripción: razón del acceso
Comprueba que no hay un sistema de ficheros montado. Comprueba que
se trata de un directorio y consulta si el proceso tiene permiso de
búsqueda. Obtiene el número del primer bloque de datos (el bloque 8).
Comprueba que no hay un sistema de ficheros montado. Comprueba que
se trata de un directorio y consulta si el proceso tiene permiso de
búsqueda. Obtiene el número del primer bloque de datos (el bloque 10).
Comprueba que no hay un sistema de ficheros montado. Comprueba que
se trata de un directorio y consulta si el proceso tiene permiso de
búsqueda. Obtiene el número del primer bloque de datos (el bloque 15).
Comprueba si el proceso tiene permiso de lectura.
Cache de bloques:
Número
de
bloque
Descripción: tipo de bloque y razón del acceso
8
DIR /. Busca una entrada con nombre “user” y obtiene su número de i-nodo (el 3).
4
I-N. Obtiene los 32 bytes del i-nodo 3.
10
DIR /user. Busca una entrada con nombre “jj” y obtiene su número de i-nodo (el 4). Este i-nodo se
encuentra en la tabla de i-nodos (no hay que cargarlo de disco).
15
DIR /user/jj. Busca una entrada con nombre “f1” y obtiene su número de i-nodo (el 33).
5
I-N. Obtiene los 32 bytes del i-nodo 33.
b) Llamada al sistema df = open(“/user/jj/f1”,
s=chmod(“/user/jj”, 0044) previamente.
O_RDONLY)
habiéndose
ejecutado
Tabla de i-nodos:
Nº de
i-nodo
Nombre del Campo(s)
1
i_mount, i_mode, i_zone[0]
3
i_mount, i_mode, i_zone[0]
4
i_mount, i_mode
Descripción: razón del acceso
Comprueba que no hay un sistema de ficheros montado. Comprueba que
se trata de un directorio y consulta si el proceso tiene permiso de
búsqueda. Obtiene el número del primer bloque de datos (el bloque 8).
Comprueba que no hay un sistema de ficheros montado. Comprueba que
se trata de un directorio y consulta si el proceso tiene permiso de
búsqueda. Obtiene el número del primer bloque de datos (el bloque 10).
Comprueba que no hay un sistema de ficheros montado. Comprueba que
se trata de un directorio y consulta si el proceso tiene permiso de
búsqueda. Como no lo tiene la llamada al sistema falla.
Cache de bloques:
Número
de
bloque
Descripción: tipo de bloque y razón del acceso
8
DIR /. Busca una entrada con nombre “user” y obtiene su número de i-nodo (el 3).
4
I-N. Obtiene los 32 bytes del i-nodo 3.
10
DIR /user. Busca una entrada con nombre “jj” y obtiene su número de i-nodo (el 4). Este i-nodo se
encuentra en la tabla de i-nodos (no hay que cargarlo de disco).
c) Si un proceso perteneciente al usuario “ll” (de forma real y efectiva) ejecutase la llamada al
sistema execv(“/user/jj/p1”,..), ¿fallaría la llamada al sistema o se ejecutaría sin problemas?
Explicar brevemente la respuesta
La llamada fallaría. Uno de los pasos que realiza MINIX durante la ejecución de la llamada al sistema execv es la de
comprobar si se tiene permiso de ejecución del fichero indicado como primer parámetro. Para ello, usando el uid y el
gid efectivo del proceso (valor 44 para ambos) se resuelve la ruta de “/user/jj/p1”. Durante esta resolución, al llegar al
i-nodo del directorio “/user/jj” (i-nodo 4 con uid y gid 33) y comprobar el permiso de búsqueda para un proceso que ni
es el propietario ni pertenece al grupo del propietario, la resolución falla y por tanto la llamada al sistema falla.
Descargar