Zamykání souborů
Zamykání souborů je v informatice mechanizmus sloužící k omezení přístupu k souboru v souborovém systému počítače tím, že povolí přístup pouze jednomu uživateli nebo procesu v určitém čase. Lze tak zabránit vzniku souběhu tím, že jednotlivé procesy přistupují k souboru postupně (jsou řazeny do fronty).
Charakteristika
Důvod zamykání souborů lze ilustrovat na vzniku souběhu v následujícím scénáři:
- Proces A čte záznam o zákazníkovi ze souboru, který obsahuje informace o bankovním účtu, zůstatku a telefonní číslo.
- Proces B čte ten samý záznam o zákazníkovi ze souboru a má tak kopii tohoto souboru.
- Proces A změní zůstatek účtu ve své kopii a uloží záznam zpět do výchozího souboru.
- Proces B, který má stále původní hodnotu zůstatku ve své kopii souboru, uloží záznam zpět to souboru.
- Proces B tímto zápisem v dotyčném souboru způsobil ztrátu informace uložené procesem A.
Celý soubor je obvykle zamykán například při jeho úpravě uživatelem v nějakém textovém editoru. Zamykání celých souborů lze pozorovat i u databází, kde dochází k seřazení jednotlivých požadavků přistupujících k jednotlivým souborům, ve kterých je databáze uložena.
Většina operačních systémů podporuje kromě možnosti zamknutí celého souboru i koncept zamykání menších částí uvnitř jednoho souboru. Tím může soubor upravovat souběžně více procesů, což může být výhodnější než uzamčení celého souboru. Pokud jsou uvnitř souboru zamykány velké bloky, může být naopak efektivnější zamykat soubor celý.
Nevhodné použití zamykání může zhoršit výkon systému nebo způsobit deadlock.
Implementace
V historii operačních systémů došlo k postupnému zavádění zamykání souborů. Proto různé operační systémy přistupují k zamykání různě.
Mainframe
Společnost IBM použila zamykání souboru jako první v systému OS/360 na mainframe počítačích, kde zamykání bylo označeno jako „exkluzivní přístup“.
Microsoft Windows
Systém Microsoft Windows používá povinné zámky (anglicky mandatory lock), takže je-li zámek nastaven, jádro zajistí že další pokus o přístup selže. V systému jsou využívány tři rozdílné mechanismy ke kontrole přístupu sdílených souborů:
- využití ovládání sdíleného přístupu, které umožňuje aplikacím specifikovat přístup a sdílení celých souborů ke čtení/zápisu/smazání
- využití zámků podle bajtových rozsahů pro určení přístupu k určitým regionům v rámci souboru pro zápis či čtení
- zákazem zápisu nebo mazání vykonávaných souborů pomocí systému souboru Windows
Unixové systémy
V unixových systémech (tj. i distribucích Linuxu a Apple OS X) běžně nedochází k automatickému zamčení otevřených souborů nebo běžících programů. Z důvodů zpětné kompatibility a z historických důvodů jsou v unixových systémech používány dobrovolné zámky (anglicky advisory lock), takže je zodpovědností programátora si před přístupem k souboru zkontrolovat, zda na něm není nastaven zámek.
V rámci různých druhů Unixu existuje několik druhů zamykacích mechanismů a spousta operačních systémů podporuje více než jeden druh kvůli kompatibilitě. Nejčastěji používanými mechanismy jsou fcntl
[1] a flock(2)
.[2] Třetím používaným mechanismem je lockf(3)
,[3] který může být implementován odděleně nebo může být vytvořen implementací jednoho z prvních dvou mechanismů.
Reference
V tomto článku byl použit překlad textu z článku File locking na anglické Wikipedii.