Что такое соответствие posix для файловой системы?
Соответствие Posix - это стандарт, которому следуют многие компании. У меня есть несколько вопросов в этой области: 1. Все ли файловые системы должны быть совместимы с posix? 2. Обязательно ли приложения должны быть совместимы с posix? 3. есть ли не файловые системы без posix?
3 ответа
В области "требуется семантика файловой системы POSIX" обычно подразумевается следующее:
- позволяет иерархические имена файлов и разрешение (., .., ...)
- поддерживает как минимум близкую к открытой семантику
- права доступа umask/unix, 3 раза
- Поддержка 8 бит
- поддерживает атомные переименования в той же файловой системе
- fsync()/dirfsync() гарантия долговечности / ограничение
- поддерживает многопользовательскую защиту (изменение размера файла возвращает 0 байтов, а не мусор)
- переименовывать и удалять открытые файлы (Windows этого не делает)
- имена файлов, поддерживающие все байты, кроме '/' и \0
Иногда это также означает поддержку символических ссылок / жестких ссылок, а также имена файлов и 32-битные файловые указатели (минимум). В некоторых случаях он также используется для ссылки на определенные функции API, такие как fcntl()
замок, mmap()
или же truncate()
или AIO.
Когда я думаю о соответствии POSIX для распределенных файловых систем, я использую общий стандарт, согласно которому распределенная файловая система совместима с POSIX, если несколько процессов, работающих на разных узлах, видят то же поведение, как если бы они выполнялись на одном и том же узле с использованием локальной файловой системы. Это в основном имеет два значения:
- Если система имеет несколько буферных кешей, она должна обеспечить согласованность кеша.
- Различные механизмы для этого включают в себя замки и аренду. Примером неправильного поведения в этом случае может быть писатель, который успешно пишет на одном узле, но затем читатель на другом узле получает старые данные.
- Однако обратите внимание, что, если писатель / читатель независимо друг от друга соревнуются друг с другом, правильного определенного поведения не существует, поскольку они не знают, какая операция произойдет первой. Но если они координируют друг друга с помощью какого-либо механизма, такого как обмен сообщениями, то было бы неправильно, если писатель завершает (особенно если он выполняет синхронизирующий вызов), отправляет читателю сообщение, которое успешно принимается читателем, а затем Читатель читает и получает устаревшие данные.
- Если данные чередуются на нескольких серверах данных, операции чтения и записи, охватывающие несколько полос, должны быть атомарными.
- Например, когда читатель читает по полосам одновременно с тем, как писатель пишет по тем же полосам, читатель должен либо получить все полосы, какими они были до записи, либо все полосы, какими они были после записи. Неправильное поведение будет для читателя, чтобы получить некоторые старые и некоторые новые.
- Вопреки вышеизложенному, это поведение должно работать правильно, даже когда писатель / читатель участвуют в гонке.
Хотя моими примерами были чтение / запись в один файл, правильное поведение также включает в себя запись / запись в один файл, а также чтение / запись и запись / запись в иерархическое пространство имен с помощью вызовов типа stat/readdir/mkdir/unlink/etc,
Отвечать на ваши вопросы очень объективно:
1. все ли файловые системы должны быть совместимы с posix? Вообще-то нет. Фактически POSIX определяет некоторые стандарты для операционных систем в целом. Хорошо иметь, но на самом деле не требуется.
2. Обязательно ли приложения должны быть совместимы с posix? Нет.
3. есть ли не файловые системы без posix? HDFS (файловая система hadoop)