Seqlock - Seqlock
![]() | Tento článek obsahuje a seznam doporučení, související čtení nebo externí odkazy, ale jeho zdroje zůstávají nejasné, protože mu chybí vložené citace.Srpna 2011) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
A seqlock (zkratka pro sekvenční zámek) je speciální zamykání mechanismus používaný v Linux pro podporu rychlých zápisů sdílených proměnných mezi dvěma paralelními operační systém rutiny. Sémantika se od verze 2.5.59 stabilizovala a jsou přítomna v řadě stabilních jader 2.6.x. Tyto seqlocks byly vyvinuty Stephenem Hemmingerem a původně se nazývaly flolocks, na základě dřívější práce Andrea Arcangeli. První implementace byla v časovém kódu x86-64, kde byla potřeba synchronizovat s uživatelským prostorem, kde nebylo možné použít skutečný zámek.
Je to čtenář - spisovatel důsledný mechanismus, který se vyhne problému spisovatel hladovění. Seqlock se skládá z úložiště pro uložení pořadového čísla kromě zámku. Zámek slouží k podpoře synchronizace mezi dvěma zapisovači a počítadlo slouží k označení konzistence čteček. Kromě aktualizace sdílených dat zapisovatel zvýší pořadové číslo, a to jak po získání zámku, tak před uvolněním zámku. Čtenáři čtou pořadové číslo před a po načtení sdílených dat. Pokud je pořadové číslo při každé příležitosti liché, zapisovatel vzal zámek během čtení dat a mohlo se to změnit. Pokud se pořadová čísla liší, zapisovatel během čtení změnil data. V obou případech čtenáři jednoduše opakují pokus (pomocí smyčky), dokud nenačtou stejné sudé pořadové číslo před a po.
Čtenář nikdy neblokuje, ale pokud probíhá zápis, bude možná muset znovu zkusit; to zrychluje čtečky v případě, že data nebyla změněna, protože nemusí získat zámek, jako by to bylo u tradičního zámku pro čtení a zápis. Spisovatelé také nečekají na čtenáře, zatímco u tradičních zámků pro čtení a zápis ano, což vede k možnému hladovění zdrojů v situaci, kdy existuje mnoho čtenářů (protože spisovatel musí počkat, až nebudou žádné čtenáře). Kvůli těmto dvěma faktorům jsou seqlocky efektivnější než tradiční zámky pro čtení a zápis pro situaci, kdy je mnoho čtenářů a málo spisovatelů. Nevýhodou je, že pokud je příliš mnoho zápisu nebo je čtečka příliš pomalá, mohli by živý zámek (a čtenáři mohou hladovět).
Technika nebude fungovat u dat, která obsahují ukazatele, protože jakýkoli zapisovač by mohl zneplatnit ukazatel, který již čtenář následoval. V tomto případě pomocí read-copy-update synchronizace je upřednostňována.
To bylo poprvé aplikováno na aktualizaci počítadla systémového času. Každé časové přerušení aktualizuje čas dne; pro interní použití a aplikace operačního systému může být v té době mnoho čtenářů, ale zápisy jsou relativně časté a vyskytují se pouze po jednom. Například kód BSD timecounter používá podobnou techniku.
Jeden jemný problém použití seqlocks pro časový čítač je, že je nemožné jej projít ladicím programem. Logika opakování se aktivuje po celou dobu, protože debugger je dostatečně pomalý, aby se závod čtení vždy vyskytoval.