Sistemas operativos modernos

asociar un semáforo con cada directorio o archivo y lograr la exclusión mutua, haciendo que los procesos efectúen una operación down con el semáforo apropiado antes de acceder a los datos. Sin embargo, existe la desventaja de que todo un directorio o archivo queda inaccesible, aunque sólo se necesite un registro. Por este motivo, POSIX ofrece un mecanismo flexible y de grano fino para que los proce­ sos bloqueen desde un byte hasta un archivo entero con una sola operación indivisible. El me­ canismo de bloqueos requiere que el invocador especifique el archivo por bloquear, el byte inicial y el número de bytes. Si la operación tiene éxito, el sistema creará una entrada de tabla que indique que los bytes en cuestión (por ejemplo, un registro de base de datos) están bloqueados. Se proporcionan dos fipos de bloqueos: bloqueos compartidos y bloqueos exclusivos. Si una porción de un archivo ya tiene un bloqueo compartido, se permite un segundo intento por establecer en dicha porción otro bloqueo compartido, pero fallará un intento por establecer un bloqueo exclusivo. Si una porción de un archivo contiene un bloqueo exclusivo, cualquier in­ tento por bloquear esa porción fallará en tanto no se libere el bloqueo. Para establecer un blo­ queo, todos los bytes de la región en la que se establezca deben estar disponibles. Al establecer un bloqueo, el proceso que lo establece debe especificar si quiere bloquear­ se o no en caso de que no sea posible establecerlo. Si opta por bloquearse, cuando se quite el bloqueo existente el proceso se desbloqueará y establecerá su bloqueo. Si el proceso opta por no bloquearse si no puede establecer un bloqueo, la llamada al sistema regresará de inmedia­ to, y el código de estado indicará si se pudo establecer el bloqueo o no. Las regiones bloqueadas pueden traslaparse. En la figura 10-27a vemos que el proceso A ha establecido un bloqueo compartido en los bytes 4 a 7 de un archivo. Después, el proceso B establece un bloqueo compartido en los bytes 6 a 9, como se muestra en la figura 10-27b. Por úlfimo, C establece un bloqueo en los bytes 2 a 1i. Mientras todos estos bloqueos sean com­ partidos, podrán coexistir. Consideremos ahora qué sucede si un proceso trata de establecer un bloqueo exclusivo en el byte 9 de la figura 10-27c, que opta por bloquearse si no logra estable­ cerlo. Puesto que dos bloqueos previos cubren este byte, el invocador se bloqueará y seguirá bloqueado hasta que tanto B como C liberen sus bloqueos. 10.6.2 Llamadas al sistema de archivos en UNIX Muchas llamadas al sistema tienen que ver con archivos y con el sistema de archivos. Primero examinaremos las que operan con archivos individuales; después examinaremos las que fienen que ver con directorios o con el sistema de archivos en su totaUdad. Para crear un archivo nue­ vo puede usarse la llamada creat. (Cuando se le preguntó a Ken Thompson qué haría de for­ ma diferente si tuviera la oportunidad de reinventar UNIX, contestó que escribiría create (“crear”, correctamente escrito en inglés] en vez de creat.) Los parámetros proporcionan el nombre del archivo y el modo de protección. Por lo tanto, fd = creat("abc", modo); crea un archivo llamado abe con los bits de protección tomados de modo. Estos bits determinan qué usuarios pueden tener acceso al archivo y de qué modo. Los describiremos más adelante.

RkJQdWJsaXNoZXIy MjI4NDcx