diff --git a/ru_RU.KOI8-R/books/arch-handbook/locking/chapter.sgml b/ru_RU.KOI8-R/books/arch-handbook/locking/chapter.sgml new file mode 100644 index 0000000000..67bc140449 --- /dev/null +++ b/ru_RU.KOI8-R/books/arch-handbook/locking/chapter.sgml @@ -0,0 +1,346 @@ + + + + Замечания по блокировке + + SMP Next Generation Project + Эта глава поддерживается проектом FreeBSD SMP Next + Generation Project. Комментарии и пожелания направляйте + в &a.smp;. + + блокировка + multi-processing + мьютексы + lockmgr + атомарные операции + Этот документ описывает механизм блокировки, используемый в ядре + FreeBSD для обеспечения эффективной поддержки нескольких процессоров в + ядре. Блокировку можно рассматривать с нескольких точек зрения. + Структуры данных могут быть защищены с помощью блокировок mutex или + &man.lockmgr.9;. Несколько переменных защищены просто в силу атомарности + используемых для доступа к ним операций. + + + Мьютексы + + Мьютекс (mutex) - это просто блокировка, используемая для + реализации гарантированной исключительности. В частности, в каждый + момент времени мьютексом может владеть только один объект. Если + какой-то объект хочет получить мьютекс, который уже кто-то занял, он + должен дождаться момента его освобождения. В ядре FreeBSD владельцами + мьютексов являются процессы. + + Мьютексы могут быть затребованы рекурсивно, но предполагается, что + они занимаются на короткое время. В частности, владельцу мьютекса + нельзя выдерживать паузу. Если вам нужно выполнить блокировку на время + паузы, используйте блокировку через &man.lockmgr.9;. + + Каждый мьютекс имеет несколько представляющих интерес + характеристик: + + + + Имя переменной + + Имя переменной struct mtx в исходных текстах + ядра. + + + + + Логическое имя + + Имя мьютекса, назначенное ему через + mtx_init. Это имя выводится в сообщениях + трассировки KTR и диагностических предупреждающих и ошибочных + сообщениях и используется для идентификации мьютексов в + отладочном коде. + + + + + Тип + + Тип мьютекса в терминах флагов MTX_*. + Значение каждого флага связано с его смыслом так, как это описано + в &man.mutex.9;. + + + + MTX_DEF + + Sleep-мьютекс + + + + + MTX_SPIN + + Spin-мьютекс + + + + + MTX_RECURSE + + Этому мьютексу разрешается блокировать + рекурсивно. + + + + + + + + Защиты + + Список структур данных или членов структур данных, которые + защищает этот мьютекс. Для членов структур данных имя будет в + форме + + + + + + Зависимые функции + + Функции, которые можно вызвать, если этот мьютекс + занят. + + + + + + Список мьютексов + + блокировки + sched_lock + + блокировки + vm86pcb_lock + + блокировки + Giant + + блокировки + callout_lock + + + + + Имя переменной + Логическое имя + Тип + Защиты + Зависимые функции + + + + + + + sched_lock + sched lock + + MTX_SPIN | + MTX_RECURSE + + + _gmonparam, + cnt.v_swtch, + cp_time, + curpriority, + pscnt, + slpque, + itqueuebits, + itqueues, + rtqueuebits, + rtqueues, + queuebits, + queues, + idqueuebits, + idqueues, + switchticks, + + + setrunqueue, + remrunqueue, + mi_switch, + chooseproc, + schedclock, + resetpriority, + updatepri, + maybe_resched, + cpu_switch, + cpu_throw, + need_resched, + resched_wanted, + clear_resched, + aston, + astoff, + astpending, + calcru, + proc_compare + + + + + + vm86pcb_lock + vm86pcb lock + + MTX_DEF + + + vm86pcb + + + vm86_bioscall + + + + + + Giant + Giant + + MTX_DEF | + MTX_RECURSE + + nearly everything + lots + + + + + callout_lock + callout lock + + MTX_SPIN | + MTX_RECURSE + + + + callfree, + callwheel, + nextsoftcheck, + softticks, + ticks + + + + + + +
+
+ + + Разделяемые эксклюзивные блокировки + + Эти блокировки обеспечивают базовый тип + функциональности - на чтение/запись и могут + поддерживаться процессами, находящимся в состоянии + ожидания. На текущий момент они реализованы в &man.lockmgr.9;. + + + Список разделяемых эксклюзивных блокировок + блокировки + allproc_lock + блокировки + proctree_lock + + + + + Имя переменной + Защиты + + + + + allproc_lock + + allproc + zombproc + pidhashtbl + nextpid + + + + proctree_lock + + + + + +
+
+ + + Атомарно защищенные переменные + + атомарно защищённые переменные + + Переменной, защищенной атомарно, является особая переменная, + которая не защищается явной блокировкой. Вместо этого для доступа к + данным переменных используются специальные атомарные операции, как + описано в &man.atomic.9;. Лишь несколько переменных используются таким + образом, хотя другие примитивы синхронизации, такие как мьютексы, + реализованы с атомарно защищенными переменными. + + + + + + + +