Conceptos Clave de Procesos, Ficheros y Señales en Sistemas Operativos
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 4,51 KB
Llamadas al Sistema Fundamentales
fork()
Permite crear un nuevo proceso “por clonación”. Devuelve >0 al proceso que ejecutó fork y 0 al proceso creado. Devuelve -1 en caso de error.
Posibles fallos: Falta de recursos, disponibilidad de recursos, limitación del usuario, no queden entradas disponibles...
exit()
Finaliza un proceso. No falla nunca y no devuelve nada.
wait()
Bloquea un proceso a la espera de la finalización de sus hijos. Si ya ha finalizado, recoge el estado de finalización. El status lo recoge el parámetro que tenga dentro (entero). Devuelve el pid del hijo finalizado. Devuelve -1 en caso de fallo, como puede ser que el proceso que ejecuta wait no tenga hijos.
pause()
Bloquea un proceso. Sólo devuelve -1 cuando recibe una señal que previamente hayamos capturado. Si recibe una señal no capturada previamente, el proceso finalizará. No falla nunca.
alarm()
Planifica una alarma asociada al tiempo (nº de segundos) pasado como argumento. El proceso que lo ha ejecutado es señalado con SIGALRM. Devuelve 0 si no había ninguna previamente planificada, y devuelve el nº de segundos que faltan si hay una alarma previamente planificada. No falla nunca.
open()
Permite abrir un descriptor de fichero o canal para usar ese fichero. Devuelve -1 en caso de error, como pueden ser falta de permisos o que no exista ese archivo. Devuelve el descriptor de fichero usado luego en read y write para acceder a la información.
Conceptos sobre Procesos, Ficheros y Señales
Un proceso no puede abrir dos veces el mismo fichero (0'5 pts)
FALSO. Puede abrirlo tantas veces como quiera hasta que se agoten las entradas en la tabla de descriptores de fichero.
Es posible que dos procesos distintos compartan las mismas entradas en la Tabla de Ficheros Abiertos (TFA)
VERDADERO. Padres e hijos, después de la creación del proceso hijo, comparten las entradas en la Tabla de Ficheros Abiertos. No confundir con la TDF (Tabla de Descriptores de Fichero), que es de proceso y hay tantas como procesos, mientras que la TFA es de sistema y solo hay una. Al crear un proceso hijo, este copia la TDF de su padre, que aunque son iguales no son la misma; en cambio, la TFA se comparte.
Realizar una escritura en una tubería puede originar que el SO envíe la señal SIGPIPE al proceso escritor (0'5 pts)
VERDADERO. Cuando no exista descriptor de lectura asociado a la tubería, si intentamos escribir en ella, el SO nos envía la señal SIGPIPE.
La señal SIGCHILD la reciben los procesos hijos cuando finalizan sus padres (0'5 pts)
FALSO. La reciben los procesos padre cuando finalizan sus hijos. Esta señal se ignora; por lo tanto, si no es capturada, no sabemos que los procesos hijos han finalizado.
Es posible que 2 procesos distintos compartan la misma tabla de descriptores de ficheros (TDF)
FALSO. En el momento que se crea un proceso hijo, la TDF se copia, no se comparte, cambiando el pid de proceso y algunos datos, independientemente del trabajo que vayan a realizar los procesos.
Comportamiento Bloqueante de la Llamada read()
READ es bloqueadora en dos lecturas distintas: lectura de teclado y lectura de tubería. Cuando lee de teclado, queda bloqueada hasta que el usuario pulsa intro, y cuando lee de tubería, queda bloqueada si la tubería está vacía y los descriptores de escritura asociados a la tubería están activos.
Si leyendo de tubería, los descriptores de escritura asociados a la tubería no están activos, read devuelve 0 y se produce fin de fichero. Leyendo de teclado con un Ctrl+D
también se produce fin de fichero.
Leyendo de teclado, resolveremos el bloqueo con un intro haciendo que lea el buffer de teclado o con Ctrl+D
forzando un fin de fichero. Bloqueados en un tubo, se resuelve escribiendo en el tubo o cerrando el descriptor de escritura asociado para forzar fin de fichero y que read devuelva 0.
También se pueden cambiar las opciones de esta llamada para que no sea bloqueadora.