File lock — bir nechta jarayonning bitta fayl yoki uning qismiga zid kirishini muvofiqlashtiradigan mexanizmdir. U yozuvlar aralashib ketishi, konfiguratsiya bir vaqtda yangilanishi yoki bitta vazifa ikki nusxada ishlashini cheklaydi. Lock ma’lumotning o‘zini himoya qilmaydi; barcha ishtirokchi bir xil protokolga amal qilishi kerak.
Advisory va mandatory
Advisory lockda operatsion tizim egalikni qayd etadi, ammo lockni tekshirmaydigan jarayon faylga baribir yozishi mumkin. Unixdagi ko‘p API shu modelga ega. Mandatory lock tizim chaqirig‘ining o‘zida ruxsatsiz o‘qish yoki yozishni bloklaydi, lekin portativligi va semantikasi cheklangan.
Whole-file lock butun faylni, record lock esa byte oralig‘ini himoya qiladi. Shared lock bir nechta o‘quvchiga, exclusive lock yozuvchiga beriladi. APIga qarab lock jarayonga, open file descriptionga yoki descriptor bilan bog‘langan bo‘lishi mumkin; descriptor nusxalash va forkdagi xatti-harakat hujjatdan tekshiriladi.
Atomar yangilash
Konfiguratsiyani joyida qisman yozish o‘rniga yangi vaqtinchalik fayl to‘liq yoziladi, fsync qilinadi va atomar rename bilan almashtiriladi. Bu o‘quvchining yarim fayl ko‘rishini cheklaydi. Lock yozuvchilarni navbatlaydi, rename esa ko‘rinadigan versiyani birdan almashtiradi. Katalog metadata mustahkamligi uchun zarur hollarda katalog ham sync qilinadi.
Lock fayli yaratish ham protokol bo‘lishi mumkin. O_CREAT|O_EXCL bitta yaratuvchini atomar tanlaydi. Ammo jarayon crash qilsa stale lock qoladi. Lock ichida PID yozish yetarli emas, chunki PID qayta ishlatiladi; host, start time va lease kabi ma’lumotlar bilan ehtiyotkor tekshiriladi.
Tarmoq fayl tizimi
NFS va SMBda lock server, reconnect va cache sabab lokal fayl tizimidan farq qiladi. Tarmoq bo‘linishida klient lockni ushlab turibman deb o‘ylashi, server esa lease tugagan deb yangi egaga berishi mumkin. Fencing token bo‘lmasa eski egasi keyin qaytib yangi ma’lumot ustiga yozadi.
Distributed ish uchun oddiy shared filesystem lock har doim yetarli emas. Ma’lumotlar bazasi unique constraint, coordinator yoki workload scheduler yagona bajaruvchini ishonchliroq tanlashi mumkin. Tanlov failure model va kerakli kafolatga bog‘liq.
Xatolar va diagnostika
Bir jarayon A fayl, keyin B faylni; boshqasi B, keyin A ni olsa deadlock yuz beradi. Global tartib va timeout qo‘llanadi. Timeoutdan keyin lock egasini majburan yo‘q deb hisoblash xavfli; amalning atomarligi va fencing alohida hal qilinadi.
Monitoring lock kutish vaqti, egasi, fayl identifikatori va ushlab turish davomiyligini ko‘rsatadi. Fayl nomini foydalanuvchi qiymati bilan cheksiz metric labelga aylantirish cardinalityni oshiradi. Diagnostika maxfiy yo‘llarni oshkor qilmasdan barqaror resurs kategoriyasidan foydalanadi.
Lock va permission
Faylni lock qilish access control emas. O‘qish permissioniga ega jarayon advisory lockni olmasdan ma’lumotni ko‘rishi mumkin, write permissioni bor noto‘g‘ri dastur esa protokolni buzadi. Permission, encryption va lock turli vazifani bajaradi. Lockni olishdan oldin symlink va path traversal tekshirilmasa hujumchi dasturga boshqa faylni qulflatishi yoki yangilatishi mumkin. Xavfsiz dastur katalogni nazorat qiladi, faylni descriptor orqali ochadi va keyingi amallarni ayni descriptor ustida bajaradi. Pathni tekshirib keyin qayta ochish TOCTOU poygasini yaratadi. Lock metadata’si world-writable katalogda ishonchsiz bo‘lsa egani aniqlashda foydalanilmaydi.
Bog‘liq tushunchalar
Advisory lock, Record locking, Atomic rename, Fencing token, NFS, Deadlock