filesystems - que - ¿Qué es el cumplimiento de posix para el sistema de archivos?
sistemas de archivos de windows (3)
Cuando pienso en el cumplimiento de POSIX para sistemas de archivos distribuidos, utilizo el estándar general de que un sistema de archivos distribuidos es compatible con POSIX si varios procesos que se ejecutan en nodos diferentes ven el mismo comportamiento que si se estuvieran ejecutando en el mismo nodo utilizando un sistema de archivos local. Esto básicamente tiene dos implicaciones:
- Si el sistema tiene múltiples cachés de búfer, debe asegurar la consistencia del caché.
- Varios mecanismos para hacerlo incluyen bloqueos y arrendamientos. Un ejemplo de comportamiento incorrecto en este caso sería un escritor que escribe con éxito en un nodo, pero luego un lector en un nodo diferente recibe datos antiguos.
- Sin embargo, tenga en cuenta que si el escritor / lector compite independientemente entre sí, no hay un comportamiento definido correcto porque no saben qué operación ocurrirá primero. Pero si se coordinan entre sí a través de algún mecanismo, como la mensajería, sería incorrecto si el escritor se completa (especialmente si emite una llamada de sincronización ), envía un mensaje al lector que el lector recibe con éxito, y luego el lector lee y obtiene datos antiguos
- Si los datos se dividen en varios servidores de datos, las lecturas y escrituras que abarcan varias bandas deben ser atómicas.
- Por ejemplo, cuando un lector lee en franjas al mismo tiempo que un escritor escribe en esas mismas franjas, debe recibir todas las franjas como estaban antes de la escritura o todas las franjas como estaban después de la escritura. El comportamiento incorrecto sería que el lector reciba algo antiguo y algo nuevo.
- Contrariamente a lo anterior, este comportamiento debe funcionar correctamente incluso cuando el escritor / lector está compitiendo.
Aunque mis ejemplos eran lecturas / escrituras en un solo archivo, el comportamiento correcto también incluye escribir / escribir en un solo archivo, así como leer / escribir y escribir / escribir en el espacio de nombres jerárquico a través de llamadas como stat / readdir / mkdir / unlink / etc .
El cumplimiento de Posix es un estándar que ha sido seguido por muchas compañías. Tengo pocas preguntas en torno a esta área, 1. ¿todos los sistemas de archivos deben ser compatibles con posix? 2. ¿También se requiere que las aplicaciones sean compatibles con posix? 3. ¿Hay algún sistema de archivos que no sea posix?
En el área de "requiere la semántica del sistema de archivos POSIX" lo que normalmente se entiende es:
- Permite nombres de archivos jerárquicos y resolución (., .., ...)
- soporta al menos semántica de cierre
- permisos umask / unix, 3 tiempos de archivo
- Soporte de bytes de 8 bits
- soporta renombrados atómicos en el mismo sistema de archivos
- fsync () / dirfsync () garantía de durabilidad / limitación
- admite la protección multiusuario (el tamaño del archivo devuelve 0 bytes no basura)
- renombra y borra archivos abiertos (Windows no hace eso)
- nombres de archivos que admiten todos los bytes al lado de ''/'' y / 0
A veces también significa soporte de enlace simbólico / enlace duro, así como nombres de archivos y punteros de archivos de 32 bits (mínimo). En algunos casos, también se usa para referirse a funciones específicas de la API como fcntl()
, mmap()
o truncate()
o AIO.
Respondiendo a tus preguntas de una manera muy objetiva:
1. ¿Es necesario que todos los sistemas de archivos sean compatibles con posix? En realidad no. De hecho, POSIX define algunos estándares para sistemas operativos en general. Es bueno tenerlo, pero no es realmente necesario.
2. ¿También se requiere que las aplicaciones sean compatibles con posix? No.
3. ¿Hay algún sistema de archivos que no sea posix? HDFS (sistema de archivos hadoop)