ΠΠ»Π΅ΠΊΡΠ°Π½Π΄Ρ ΠΡΠΈΠ½Π³ (Alexander Aring) ΠΈΠ· ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Red Hat, ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΠΈΠΉ Π² ΡΠ΄ΡΠ΅ Linux ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ IEEE 802.15.4, DLM ΠΈ flock/fcntl, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΠ°ΡΡΡΠ»ΠΊΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠ΄ΡΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ DLMPFS. ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ Π€Π‘ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ»ΠΎΠΉ Π΄Π»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° Π±Π°Π·Π΅ DLM (Distributed Lock Manager) ΠΈ ramfs. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ DLMPFS Π΄ΠΎΡΡΡΠΏΠ½Π° Π² ΡΠΎΡΠΌΠ΅ Π½Π°Π±ΠΎΡΠ° ΠΏΠ°ΡΡΠ΅ΠΉ ΠΊ ΡΠ΄ΡΡ Linux 6.19.
DLMPFS ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΉ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Ρ ΠΎΡΡΠΎΠ² ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠ΅ΠΉ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΡΠ°ΠΉΠ»Ρ ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ, Π²ΡΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ»ΠΈ ΡΠ½ΠΈΠΌΠ°ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π½Π° ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ°ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ flock() ΠΈ fcntl(). ΠΡΠΈ ΡΡΠΎΠΌ DLMPFS Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΈ ΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ², ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π·Π½Π°Ρ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ ΠΏΡΡΡ ΠΊ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ (DLM ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΠΌΡ ΡΠ΅ΡΡΡΡΠ° Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ).
ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ DLMPFS ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π·Π°Π²ΡΠ·Π°Π½Π½ΡΠ΅ Π½Π° Π²ΡΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΡΠ΅ΡΠ΅Π· API flock/fcntl, Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΡΡΠΎΠ² Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅, Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ Π€Π‘.
DLMPFS ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΠΎΡ ΠΎΠΆΠ΅ΠΉ Π€Π‘ DLMFS ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ API flock/fcntl Π²ΠΌΠ΅ΡΡΠΎ API, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ Π€Π‘ OCFS2. Π ΠΏΠ»Π°Π½Π°Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² DLMPFS ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΡΡ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ POSIX, ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π½ΡΡ Π±ΡΠΊΠ΅Π½Π΄ΠΎΠ² Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ DLM, Π½ΠΎ ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ°ΠΌΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ NFS lockd.
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ (Π½Π° Π²ΡΠΎΡΠΎΠΌ ΡΠ·Π»Π΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π° ΡΠ°ΠΉΠ» /mnt/lock Π±ΡΠ΄Π΅Ρ ΡΠ½ΡΡΠ° ΡΠ΅ΡΠ΅Π· 20 ΡΠ΅ΠΊΡΠ½Π΄): Π£Π·Π΅Π» 1: mount -t dlmpfs -o clname=$CLUSTERNAME none /mnt touch /mnt/lock flock /mnt/lock -c Β«echo βacquiredβ; sleep 20; echo βreleased'Β» Π£Π·Π΅Π» 2: mount -t dlmpfs -o clname=$CLUSTERNAME none /mnt touch /mnt/lock flock /mnt/lock -c Β«echo βacquiredβ; sleep 20; echo βreleased'Β»
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
