Кіріспе

Seqlock (sequence lock) – екі параллель операциялық жүйелік түйін арасында ортақ айнымалылардың жылдам жазылуын қолдау үшін Linux-та қолданылатын арнайы құлыптау механизмі. Семантикасы 2.5.59 нұсқасында бекітілді және 2.6.x тұрақты ядро сериясында қолданылады. Seqlock-тар Стивен Хемингермен әзірленді, ал бастапқыда Андреа Арканджелидің бұрынғы жұмысына негізделген frlock деп аталды. Алғашқы іске асырылу x86 64 уақыт кодында болды, онда нақты құлыпты пайдалану мүмкін болмаған пайдаланушы кеңістігімен синхрондау қажет болды. Бұл оқырман-жазушы тұрақтылығын қамтамасыз ететін және жазушының аштықтан қалуын болдырмайтын механизм. Seqlock құлыптан басқа реттік нөмірді сақтау үшін жад бөлігін қамтиды. Құлып екі жазушының синхрондауын қамтамасыз етеді, ал санауыш оқырмандардағы сәйкестікті көрсетеді. Жазушы ортақ деректерді жаңартудан басқа, құлыпты алғаннан кейін де, босатқаннан бұрын да реттік нөмірді арттырады. Оқырмандар ортақ деректерді оқығаннан бұрын және кейін реттік нөмірді тексереді. Егер реттік нөмір екі рет те тақ болса, жазушы деректерді оқыған кезде құлыпты алған және деректер өзгеруі мүмкін. Егер реттік нөмірлер әртүрлі болса, жазушы деректерді оқылып жатқанда өзгерткен. Екі жағдайда да оқырмандар бір реттік нөмірді бұрын және кейін оқығанға дейін қайталап талпынады (цикл арқылы). Оқырман ешқашан тоқтамайды, бірақ жазу орындалып жатса, қайталап көруі мүмкін; бұл деректер өзгертпеген жағдайда оқырмандарды жеделдетеді, себебі олар дәстүрлі оқу-жазу құлыптарындағыдай құлыпты алудың қажеті жоқ. Сондай-ақ, жазушылар оқырмандарды күтпейді, ал дәстүрлі оқу-жазу құлыптарында күтеді, көптеген оқырмандар болған жағдайда ресурстардың аштығына әкелуі мүмкін (себебі жазушы оқырмандардың болмауын күтуі керек). Осы екі фактордың арқасында seqlock көптеген оқырмандар мен азырақ жазушылар бар жағдайда дәстүрлі оқу-жазу құлыптарынан тиімдірек. Кемшілігі – жазу белсенділігі тым жоғары болса немесе оқырман тым баяу болса, олар тікелей тұрып қалуы мүмкін (және оқырмандар аштықтан зардап шегуі мүмкін). Бұл техника меңзерлерді қамтитын деректер үшін жұмыс істемейді, өйткені кез келген жазушы оқырман бұрыннан орындаған меңзерді жарамсыз деп тануы мүмкін. Seqlock арқылы көрсетілген жад бөлігін жаңарту қалыпты, бірақ меңзердің өзін жаңартуға рұқсат етілмейді. Егер меңзерлерді жаңарту немесе өзгерту қажет болса, оқылған көшірмені жаңартуды синхрондау әдісін қолдану ұсынылады. Бұл алғаш рет жүйелік уақыт санағышын жаңартуда қолданылды. Әр уақыт үзілісі күннің уақытын жаңартады; операциялық жүйенің ішкі пайдалануы мен қосымшалар үшін уақытты көптеген оқырмандар оқи алады, бірақ жазулар салыстырмалы түрде сирек және бір мезгілде бір ғана болады. Мысалы, BSD уақыт санағыш коды ұқсас әдісті қолданады. Seqlock-ты уақыт санағышы үшін пайдаланудың бір қиындығы – оны жөндеушімен аяқтау мүмкін емес. Қайталап тексеру логикасы әрдайым іске қосылады, өйткені жөндеуші оқу жарысын орындау үшін жеткілікті баяу.