sistemas distribuidos basados archivos filesystems locking

filesystems - basados - sistemas de archivos distribuidos



¿Cómo manejan los sistemas de archivos la lectura/escritura concurrente? (2)

El usuario A le pide al sistema que lea el archivo foo y al mismo tiempo el usuario B quiere guardar sus datos en el mismo archivo. ¿Cómo se maneja esta situación en el nivel del sistema de archivos?


La mayoría de los sistemas de archivos (pero no todos) usan bloqueo para proteger el acceso concurrente al mismo archivo. El bloqueo puede ser exclusivo, por lo que el primer usuario que obtiene el bloqueo obtiene acceso; los usuarios subsiguientes obtienen un error de "acceso denegado". En su escenario de ejemplo, el usuario A podrá leer el archivo y obtener el bloqueo del archivo, pero el usuario B no podrá escribir mientras el usuario A está leyendo.

Algunos sistemas de archivos (por ejemplo, NTFS) permiten especificar el nivel de bloqueo, para permitir, por ejemplo, lectores concurrentes, pero no escritores. Los bloqueos de rango de bytes también son posibles.

A diferencia de las bases de datos, los sistemas de archivos generalmente no son transaccionales, no atómicos y los cambios de diferentes usuarios no están aislados (incluso si se pueden ver cambios, el bloqueo puede prohibir esto).

El uso de bloqueos de archivos completos es un enfoque de grano grueso, pero protegerá contra las actualizaciones inconsistentes. No todos los sistemas de archivos admiten bloqueos de archivos completos, por lo que es una práctica común utilizar un archivo de bloqueo, un archivo típicamente vacío cuya presencia indica que su archivo asociado está en uso. (La creación de un archivo es una operación atómica en la mayoría de los sistemas de archivos).


Para Linux, la respuesta breve es que podría obtener información extraña de un archivo si hay un escritor concurrente. El kernel utiliza el bloqueo interno para ejecutar cada operación de lectura () y de escritura () en serie. (Aunque, olvido si todo el archivo está bloqueado o si está en una granularidad por página). Pero si la aplicación usa varias llamadas de escritura () para escribir información en el archivo, podría producirse una lectura () entre cualquiera de esas llamadas. , por lo que podría ver datos inconsistentes. Esta es una violación de atomicidad en el sistema operativo.

Como mdma ha mencionado, puede usar el bloqueo de archivos para asegurarse de que solo haya un lector y un escritor a la vez. Parece que NTFS utiliza el bloqueo obligatorio , donde si un programa bloquea el archivo, todos los demás programas reciben mensajes de error cuando intentan acceder a él.

Los programas Unix generalmente no usan bloqueo en absoluto, y cuando lo hacen, el bloqueo suele ser de advertencia . Un bloqueo de aviso solo evita que otros procesos obtengan un bloqueo de aviso en el mismo archivo; en realidad no impide la lectura o escritura. (Es decir, solo bloquea el archivo para aquellos que controlan el bloqueo).