Page MenuHomeFreeBSD

D55723.id.diff
No OneTemporary

D55723.id.diff

This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/documentation/content/ru/books/arch-handbook/boot/_index.adoc b/documentation/content/ru/books/arch-handbook/boot/_index.adoc
--- a/documentation/content/ru/books/arch-handbook/boot/_index.adoc
+++ b/documentation/content/ru/books/arch-handbook/boot/_index.adoc
@@ -53,7 +53,7 @@
Эта глава представляет собой обзор процессов загрузки и инициализации системы, начиная с POST в BIOS (микропрограмме) и заканчивая созданием первого пользовательского процесса. Поскольку начальные этапы загрузки системы сильно зависят от архитектуры, в качестве примера используется архитектура IA-32. Однако архитектуры AMD64 и ARM64 гораздо важнее и интереснее, и их следует рассмотреть в ближайшем будущем в соответствии с темой этого документа.
-Процесс загрузки FreeBSD может быть удивительно сложным. После передачи управления от BIOS необходимо выполнить значительный объем низкоуровневой настройки перед загрузкой и выполнением ядра. Эта настройка должна быть выполнена простым и гибким способом, предоставляя пользователю широкие возможности для настройки и адаптации.
+Процесс загрузки FreeBSD может быть удивительно сложным. После передачи управления от BIOS необходимо выполнить значительный объём низкоуровневой настройки перед загрузкой и выполнением ядра. Эта настройка должна быть выполнена простым и гибким способом, предоставляя пользователю широкие возможности для настройки и адаптации.
[[boot-overview]]
== Обзор
@@ -131,9 +131,9 @@
Значение `0xfffffff0` немного меньше 4 ГБ, поэтому, если в машине нет 4 ГБ физической памяти, оно не может указывать на действительный адрес памяти. Аппаратное обеспечение компьютера преобразует этот адрес так, чтобы он указывал на блок памяти BIOS.
-BIOS (Basic Input Output System) — это микросхема на материнской плате, которая содержит относительно небольшой объем памяти только для чтения (ROM). Эта память включает различные низкоуровневые процедуры, специфичные для оборудования, поставляемого с материнской платой. Процессор сначала переходит по адресу 0xfffffff0, который фактически находится в памяти BIOS. Обычно по этому адресу содержится инструкция перехода к процедурам POST BIOS.
+BIOS (Basic Input Output System) — это микросхема на материнской плате, которая содержит относительно небольшой объём памяти только для чтения (ROM). Эта память включает различные низкоуровневые процедуры, специфичные для оборудования, поставляемого с материнской платой. Процессор сначала переходит по адресу 0xfffffff0, который фактически находится в памяти BIOS. Обычно по этому адресу содержится инструкция перехода к процедурам POST BIOS.
-POST (Power On Self Test) — это набор процедур, включающих проверку памяти, проверку системной шины и другую низкоуровневую инициализацию, чтобы процессор мог правильно настроить компьютер. Важным этапом на этой стадии является определение загрузочного устройства. Современные реализации BIOS позволяют выбирать загрузочное устройство, обеспечивая загрузку с дискеты, CD-ROM, жесткого диска или других устройств.
+POST (Power On Self Test) — это набор процедур, включающих проверку памяти, проверку системной шины и другую низкоуровневую инициализацию, чтобы процессор мог правильно настроить компьютер. Важным этапом на этой стадии является определение загрузочного устройства. Современные реализации BIOS позволяют выбирать загрузочное устройство, обеспечивая загрузку с дискеты, CD-ROM, жёсткого диска или других устройств.
Самым последним действием в POST является инструкция `INT 0x19`. Обработчик `INT 0x19` считывает 512 байт из первого сектора загрузочного устройства в память по адресу `0x7c00`. Термин _первый сектор_ происходит из архитектуры жёстких дисков, где магнитная пластина разделена на множество цилиндрических дорожек. Дорожки нумеруются, и каждая дорожка разделена на несколько (обычно 64) секторов. Нумерация дорожек начинается с 0, но нумерация секторов начинается с 1. Дорожка 0 находится на внешней стороне магнитной пластины, а сектор 1, первый сектор, имеет особое назначение. Он также называется MBR (Master Boot Record) или Главная Загрузочная Запись. Остальные секторы на первой дорожке не используются.
@@ -368,7 +368,7 @@
* BIOS выполнил первоначальную инициализацию оборудования, включая POST. MBR ([.filename]#boot0#) был загружен по адресу `0x7c00` из абсолютного сектора один с диска. Управление выполнением было передано по этому адресу.
* [.filename]#boot0# переместил себя по адресу, по которому он был скомпонован для выполнения (`0x600`), после чего выполнил переход для продолжения выполнения в соответствующем месте. В завершение, [.filename]#boot0# загрузил первый сектор диска из раздела FreeBSD по адресу `0x7c00`. Управление выполнением было передано по этому адресу.
-[.filename]#boot1# — это следующий шаг в последовательности загрузки. Это первая из трех стадий загрузки. Обратите внимание, что до сих пор мы работали исключительно с секторами диска. Действительно, BIOS загружает самый первый сектор, а [.filename]#boot0# загружает первый сектор раздела FreeBSD. Обе загрузки происходят по адресу `0x7c00`. Мы можем концептуально представлять эти секторы диска как содержащие файлы [.filename]#boot0# и [.filename]#boot1#, соответственно, но на самом деле это не совсем верно для [.filename]#boot1#. Строго говоря, в отличие от [.filename]#boot0#, [.filename]#boot1# не является частью загрузочных блоков footnote:[Файл /boot/boot1 существует, но он не записывается в начало раздела FreeBSD. Вместо этого он объединяется с boot2, формируя файл boot, который записывается в начало раздела FreeBSD и считывается во время загрузки.]. Вместо этого, единый полноценный файл [.filename]#boot# ([.filename]#/boot/boot#) в итоге записывается на диск. Этот файл представляет собой комбинацию [.filename]#boot1#, [.filename]#boot2# и `Boot Extender` (или BTX). Этот единый файл превышает размер одного сектора (больше 512 байт). К счастью, [.filename]#boot1# занимает _ровно_ первые 512 байт этого файла, поэтому, когда [.filename]#boot0# загружает первый сектор раздела FreeBSD (512 байт), он фактически загружает [.filename]#boot1# и передаёт ему управление.
+[.filename]#boot1# — это следующий шаг в последовательности загрузки. Это первая из трёх стадий загрузки. Обратите внимание, что до сих пор мы работали исключительно с секторами диска. Действительно, BIOS загружает самый первый сектор, а [.filename]#boot0# загружает первый сектор раздела FreeBSD. Обе загрузки происходят по адресу `0x7c00`. Мы можем концептуально представлять эти секторы диска как содержащие файлы [.filename]#boot0# и [.filename]#boot1#, соответственно, но на самом деле это не совсем верно для [.filename]#boot1#. Строго говоря, в отличие от [.filename]#boot0#, [.filename]#boot1# не является частью загрузочных блоков footnote:[Файл /boot/boot1 существует, но он не записывается в начало раздела FreeBSD. Вместо этого он объединяется с boot2, формируя файл boot, который записывается в начало раздела FreeBSD и считывается во время загрузки.]. Вместо этого, единый полноценный файл [.filename]#boot# ([.filename]#/boot/boot#) в итоге записывается на диск. Этот файл представляет собой комбинацию [.filename]#boot1#, [.filename]#boot2# и `Boot Extender` (или BTX). Этот единый файл превышает размер одного сектора (больше 512 байт). К счастью, [.filename]#boot1# занимает _ровно_ первые 512 байт этого файла, поэтому, когда [.filename]#boot0# загружает первый сектор раздела FreeBSD (512 байт), он фактически загружает [.filename]#boot1# и передаёт ему управление.
Основная задача [.filename]#boot1# — загрузить следующий этап загрузки. Этот следующий этап несколько сложнее. Он состоит из сервера под названием "Boot Extender" (BTX) и клиента под названием [.filename]#boot2#. Как мы увидим, последний этап загрузки, [.filename]#loader#, также является клиентом сервера BTX.
@@ -402,7 +402,7 @@
.[.filename]#stand/i386/boot2/boot1.S# [[boot-boot1-main]]
Как и [.filename]#boot0#, этот код перемещает [.filename]#boot1#, на этот раз по адресу `0x700`. Однако, в отличие от [.filename]#boot0#, он не переходит туда. [.filename]#boot1# скомпонован для выполнения по адресу `0x7c00`, фактически там, куда он был изначально загружен. Причина этого перемещения будет рассмотрена далее.
-Далее идет цикл, который ищет слайс FreeBSD. Хотя [.filename]#boot0# загрузил [.filename]#boot1# из слайса FreeBSD, ему не была передана информация об этом footnote:[На самом деле мы передали указатель на адрес слайса в регистре %si. Однако boot1 не предполагает, что он был загружен boot0 (возможно, его загрузил другой MBR и не передал эту информацию), поэтому он ничего не предполагает.], поэтому [.filename]#boot1# должен повторно просканировать таблицу разделов, чтобы найти начало слайса FreeBSD. Для этого он перечитывает MBR:
+Далее идёт цикл, который ищет слайс FreeBSD. Хотя [.filename]#boot0# загрузил [.filename]#boot1# из слайса FreeBSD, ему не была передана информация об этом footnote:[На самом деле мы передали указатель на адрес слайса в регистре %si. Однако boot1 не предполагает, что он был загружен boot0 (возможно, его загрузил другой MBR и не передал эту информацию), поэтому он ничего не предполагает.], поэтому [.filename]#boot1# должен повторно просканировать таблицу разделов, чтобы найти начало слайса FreeBSD. Для этого он перечитывает MBR:
[.programlisting]
....
@@ -426,7 +426,7 @@
....
.[.filename]#stand/i386/boot2/boot1.S# [[boot-boot2-make-fake-partition]]
-В частности, LBA для этой фиктивной раздела жестко закодирован как ноль. Это используется как аргумент для BIOS при чтении абсолютного сектора один с жесткого диска. Альтернативно, может использоваться адресация CHS. В этом случае, фиктивный раздел содержит цилиндр 0, головку 0 и сектор 1, что эквивалентно абсолютному сектору один.
+В частности, LBA для этой фиктивной раздела жёстко закодирован как ноль. Это используется как аргумент для BIOS при чтении абсолютного сектора один с жёсткого диска. Или же может использоваться адресация CHS. В этом случае фиктивный раздел содержит цилиндр 0, головку 0 и сектор 1, что эквивалентно абсолютному сектору один.
Продолжим, рассмотрев `nread`:
@@ -802,7 +802,7 @@
....
.[.filename]#stand/i386/btx/btx/btx.S# [[btx-prot]]
-Сначала вызывается `setpic` для программирования 8259A PIC (программируемого контроллера прерываний). Этот чип подключен к нескольким источникам аппаратных прерываний. При получении прерывания от устройства он сигнализирует процессору соответствующим вектором прерывания. Это можно настроить так, чтобы определенные прерывания были связаны с конкретными векторами прерываний, как объяснялось ранее. Затем регистры IDTR (Interrupt Descriptor Table Register) и GDTR (Global Descriptor Table Register) загружаются инструкциями `lidt` и `lgdt` соответственно. Эти регистры загружаются базовым адресом и предельным адресом для IDT и GDT. Следующие три инструкции устанавливают бит Protection Enable (PE) в регистре `%cr0`. Это фактически переключает процессор в 32-битный защищенный режим. Затем выполняется дальний переход на `init.8` с использованием селектора сегмента SEL_SCODE, который выбирает сегмент кода супервизора (Supervisor Code Segment). После этого перехода процессор фактически работает на уровне CPL 0 — наиболее привилегированном уровне. Наконец, для стека выбирается сегмент данных супервизора (Supervisor Data Segment) путем присвоения селектора сегмента SEL_SDATA регистру `%ss`. Этот сегмент данных также имеет уровень привилегий `0`.
+Сначала вызывается `setpic` для программирования 8259A PIC (программируемого контроллера прерываний). Этот чип подключен к нескольким источникам аппаратных прерываний. При получении прерывания от устройства он сигнализирует процессору соответствующим вектором прерывания. Это можно настроить так, чтобы определённые прерывания были связаны с конкретными векторами прерываний, как объяснялось ранее. Затем регистры IDTR (Interrupt Descriptor Table Register) и GDTR (Global Descriptor Table Register) загружаются инструкциями `lidt` и `lgdt` соответственно. Эти регистры загружаются базовым адресом и предельным адресом для IDT и GDT. Следующие три инструкции устанавливают бит Protection Enable (PE) в регистре `%cr0`. Это фактически переключает процессор в 32-битный защищенный режим. Затем выполняется дальний переход на `init.8` с использованием селектора сегмента SEL_SCODE, который выбирает сегмент кода супервизора (Supervisor Code Segment). После этого перехода процессор фактически работает на уровне CPL 0 — наиболее привилегированном уровне. Наконец, для стека выбирается сегмент данных супервизора (Supervisor Data Segment) путем присвоения селектора сегмента SEL_SDATA регистру `%ss`. Этот сегмент данных также имеет уровень привилегий `0`.
Наш последний блок кода отвечает за загрузку TR (Регистра Задач) с селектором сегмента для TSS, который мы создали ранее, и настройку окружения пользовательского режима перед передачей управления исполнения клиенту [.filename]#boot2#.
@@ -851,7 +851,7 @@
[[boot2]]
== Этап загрузки boot2
-`boot2` определяет важную структуру, `struct bootinfo`. Эта структура инициализируется `boot2` и передаётся загрузчику, а затем ядру. Некоторые узлы этой структуры устанавливаются `boot2`, остальные — загрузчиком. Эта структура, среди прочей информации, содержит имя файла ядра, геометрию жесткого диска в BIOS, номер диска в BIOS для загрузочного устройства, доступную физическую память, указатель `envp` и т.д. Ее определение выглядит так:
+`boot2` определяет важную структуру, `struct bootinfo`. Эта структура инициализируется `boot2` и передаётся загрузчику, а затем ядру. Некоторые узлы этой структуры устанавливаются `boot2`, остальные — загрузчиком. Эта структура, среди прочей информации, содержит имя файла ядра, геометрию жёсткого диска в BIOS, номер диска в BIOS для загрузочного устройства, доступную физическую память, указатель `envp` и т.д. Ее определение выглядит так:
[.programlisting]
....
@@ -1064,7 +1064,7 @@
Sysctl `kern.hz` представляет собой такт системных часов. Кроме того, эти параметры sysctl устанавливаются функцией `init_param1()`: `kern.maxswzone, kern.maxbcache, kern.maxtsiz, kern.dfldsiz, kern.maxdsiz, kern.dflssiz, kern.maxssiz, kern.sgrowsiz`.
Затем `init386()` подготавливает Глобальную Таблицу Дескрипторов
-(GDT). Каждая задача на x86 выполняется в своем собственном виртуальном
+(GDT). Каждая задача на x86 выполняется в своём собственном виртуальном
адресном пространстве, и это пространство адресуется парой
сегмент:смещение. Например, если текущая инструкция, которую должен
выполнить процессор, находится по адресу CS:EIP, то линейный виртуальный
@@ -1145,7 +1145,7 @@
#endif
....
-Сегмент состояния задачи (TSS) — это еще одна структура защищенного режима x86, используемая оборудованием для хранения информации о задаче при переключении задач.
+Сегмент состояния задачи (TSS) — это ещё одна структура защищенного режима x86, используемая оборудованием для хранения информации о задаче при переключении задач.
Локальная таблица дескрипторов (LDT) используется для ссылки на код и данные пользовательского пространства. Определено несколько селекторов, указывающих на LDT, включая шлюзы системных вызовов, а также селекторы кода и данных пользователя:
diff --git a/documentation/content/ru/books/arch-handbook/boot/_index.po b/documentation/content/ru/books/arch-handbook/boot/_index.po
--- a/documentation/content/ru/books/arch-handbook/boot/_index.po
+++ b/documentation/content/ru/books/arch-handbook/boot/_index.po
@@ -1,12 +1,12 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025, 2026.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2025-11-08 16:17+0000\n"
-"PO-Revision-Date: 2025-11-12 04:45+0000\n"
+"PO-Revision-Date: 2026-03-05 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksarch-handbookboot_index/ru/>\n"
@@ -65,7 +65,7 @@
"customization possibilities."
msgstr ""
"Процесс загрузки FreeBSD может быть удивительно сложным. После передачи "
-"управления от BIOS необходимо выполнить значительный объем низкоуровневой "
+"управления от BIOS необходимо выполнить значительный объём низкоуровневой "
"настройки перед загрузкой и выполнением ядра. Эта настройка должна быть "
"выполнена простым и гибким способом, предоставляя пользователю широкие "
"возможности для настройки и адаптации."
@@ -333,9 +333,9 @@
"jump instruction to the BIOS's POST routines."
msgstr ""
"BIOS (Basic Input Output System) — это микросхема на материнской плате, "
-"которая содержит относительно небольшой объем памяти только для чтения "
-"(ROM). Эта память включает различные низкоуровневые процедуры, специфичные "
-"для оборудования, поставляемого с материнской платой. Процессор сначала "
+"которая содержит относительно небольшой объём памяти только для чтения (ROM)"
+". Эта память включает различные низкоуровневые процедуры, специфичные для "
+"оборудования, поставляемого с материнской платой. Процессор сначала "
"переходит по адресу 0xfffffff0, который фактически находится в памяти BIOS. "
"Обычно по этому адресу содержится инструкция перехода к процедурам POST BIOS."
@@ -354,7 +354,7 @@
"процессор мог правильно настроить компьютер. Важным этапом на этой стадии "
"является определение загрузочного устройства. Современные реализации BIOS "
"позволяют выбирать загрузочное устройство, обеспечивая загрузку с дискеты, "
-"CD-ROM, жесткого диска или других устройств."
+"CD-ROM, жёсткого диска или других устройств."
#. type: Plain text
#: documentation/content/en/books/arch-handbook/boot/_index.adoc:179
@@ -1307,7 +1307,7 @@
"and transferring control to it."
msgstr ""
"[.filename]#boot1# — это следующий шаг в последовательности загрузки. Это "
-"первая из трех стадий загрузки. Обратите внимание, что до сих пор мы "
+"первая из трёх стадий загрузки. Обратите внимание, что до сих пор мы "
"работали исключительно с секторами диска. Действительно, BIOS загружает "
"самый первый сектор, а [.filename]#boot0# загружает первый сектор раздела "
"FreeBSD. Обе загрузки происходят по адресу `0x7c00`. Мы можем концептуально "
@@ -1438,7 +1438,7 @@
"rescan the partition table to find where the FreeBSD slice starts. "
"Therefore it rereads the MBR:"
msgstr ""
-"Далее идет цикл, который ищет слайс FreeBSD. Хотя [.filename]#boot0# "
+"Далее идёт цикл, который ищет слайс FreeBSD. Хотя [.filename]#boot0# "
"загрузил [.filename]#boot1# из слайса FreeBSD, ему не была передана "
"информация об этом footnote:[На самом деле мы передали указатель на адрес "
"слайса в регистре %si. Однако boot1 не предполагает, что он был загружен "
@@ -1519,11 +1519,11 @@
"fake partition holds cylinder 0, head 0 and sector 1, which is equivalent to "
"absolute sector one."
msgstr ""
-"В частности, LBA для этой фиктивной раздела жестко закодирован как ноль. Это "
+"В частности, LBA для этой фиктивной раздела жёстко закодирован как ноль. Это "
"используется как аргумент для BIOS при чтении абсолютного сектора один с "
-"жесткого диска. Альтернативно, может использоваться адресация CHS. В этом "
-"случае, фиктивный раздел содержит цилиндр 0, головку 0 и сектор 1, что "
-"эквивалентно абсолютному сектору один."
+"жёсткого диска. Или же может использоваться адресация CHS. В этом случае "
+"фиктивный раздел содержит цилиндр 0, головку 0 и сектор 1, что эквивалентно "
+"абсолютному сектору один."
#. type: Plain text
#: documentation/content/en/books/arch-handbook/boot/_index.adoc:591
@@ -2904,7 +2904,7 @@
"контроллера прерываний). Этот чип подключен к нескольким источникам "
"аппаратных прерываний. При получении прерывания от устройства он "
"сигнализирует процессору соответствующим вектором прерывания. Это можно "
-"настроить так, чтобы определенные прерывания были связаны с конкретными "
+"настроить так, чтобы определённые прерывания были связаны с конкретными "
"векторами прерываний, как объяснялось ранее. Затем регистры IDTR (Interrupt "
"Descriptor Table Register) и GDTR (Global Descriptor Table Register) "
"загружаются инструкциями `lidt` и `lgdt` соответственно. Эти регистры "
@@ -3110,7 +3110,7 @@
"инициализируется `boot2` и передаётся загрузчику, а затем ядру. Некоторые "
"узлы этой структуры устанавливаются `boot2`, остальные — загрузчиком. Эта "
"структура, среди прочей информации, содержит имя файла ядра, геометрию "
-"жесткого диска в BIOS, номер диска в BIOS для загрузочного устройства, "
+"жёсткого диска в BIOS, номер диска в BIOS для загрузочного устройства, "
"доступную физическую память, указатель `envp` и т.д. Ее определение выглядит "
"так:"
@@ -3696,7 +3696,7 @@
"selector). FreeBSD's GDT holds descriptors for 15 selectors per CPU:"
msgstr ""
"Затем `init386()` подготавливает Глобальную Таблицу Дескрипторов (GDT). "
-"Каждая задача на x86 выполняется в своем собственном виртуальном адресном "
+"Каждая задача на x86 выполняется в своём собственном виртуальном адресном "
"пространстве, и это пространство адресуется парой сегмент:смещение. "
"Например, если текущая инструкция, которую должен выполнить процессор, "
"находится по адресу CS:EIP, то линейный виртуальный адрес этой инструкции "
@@ -3887,7 +3887,7 @@
"The Task State Segment is another x86 protected mode structure, the TSS is "
"used by the hardware to store task information when a task switch occurs."
msgstr ""
-"Сегмент состояния задачи (TSS) — это еще одна структура защищенного режима "
+"Сегмент состояния задачи (TSS) — это ещё одна структура защищенного режима "
"x86, используемая оборудованием для хранения информации о задаче при "
"переключении задач."
diff --git a/documentation/content/ru/books/arch-handbook/driverbasics/_index.adoc b/documentation/content/ru/books/arch-handbook/driverbasics/_index.adoc
--- a/documentation/content/ru/books/arch-handbook/driverbasics/_index.adoc
+++ b/documentation/content/ru/books/arch-handbook/driverbasics/_index.adoc
@@ -140,7 +140,7 @@
[[driverbasics-char]]
== Символьные устройства
-Драйвер символьного устройства — это драйвер, который передаёт данные напрямую между устройством и пользовательским процессом. Это наиболее распространенный тип драйвера устройств, и в дереве исходного кода есть множество простых примеров.
+Драйвер символьного устройства — это драйвер, который передаёт данные напрямую между устройством и пользовательским процессом. Это наиболее распространённый тип драйвера устройств, и в дереве исходного кода есть множество простых примеров.
Этот простой пример псевдоустройства запоминает все значения, записанные в него, и может затем воспроизводить их при чтении.
diff --git a/documentation/content/ru/books/arch-handbook/driverbasics/_index.po b/documentation/content/ru/books/arch-handbook/driverbasics/_index.po
--- a/documentation/content/ru/books/arch-handbook/driverbasics/_index.po
+++ b/documentation/content/ru/books/arch-handbook/driverbasics/_index.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2025-05-01 19:56-0300\n"
-"PO-Revision-Date: 2025-11-12 04:45+0000\n"
+"PO-Revision-Date: 2025-11-20 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksarch-handbookdriverbasics_index/ru/>\n"
@@ -306,7 +306,7 @@
msgstr ""
"Драйвер символьного устройства — это драйвер, который передаёт данные "
"напрямую между устройством и пользовательским процессом. Это наиболее "
-"распространенный тип драйвера устройств, и в дереве исходного кода есть "
+"распространённый тип драйвера устройств, и в дереве исходного кода есть "
"множество простых примеров."
#. type: Plain text
diff --git a/documentation/content/ru/books/arch-handbook/isa/_index.adoc b/documentation/content/ru/books/arch-handbook/isa/_index.adoc
--- a/documentation/content/ru/books/arch-handbook/isa/_index.adoc
+++ b/documentation/content/ru/books/arch-handbook/isa/_index.adoc
@@ -340,7 +340,7 @@
Сначала может быть выделен (а затем освобожден) блок непрерывной памяти, соответствующий требованиям тега. Обычно это используется для выделения относительно долгоживущих областей памяти для взаимодействия с устройством. Загрузка такой памяти в карту тривиальна: она всегда рассматривается как один блок в соответствующем диапазоне физической памяти.
-Второй момент: произвольная область виртуальной памяти может быть загружена в карту. Каждая страница этой памяти будет проверяться на соответствие требованиям карты. Если она соответствует, то остается на своем исходном месте. Если нет, то выделяется новая соответствующая промежуточная страница (bounce page), которая используется как промежуточное хранилище. При записи данных с несоответствующих исходных страниц они сначала копируются на свои промежуточные страницы, а затем передаются с промежуточных страниц на устройство. При чтении данные поступают с устройства на промежуточные страницы, а затем копируются на свои несоответствующие исходные страницы. Процесс копирования между исходными и промежуточными страницами называется синхронизацией. Обычно это используется для каждой передачи: буфер для каждой передачи загружается, передача выполняется, и буфер выгружается.
+Второй момент: произвольная область виртуальной памяти может быть загружена в карту. Каждая страница этой памяти будет проверяться на соответствие требованиям карты. Если она соответствует, то остаётся на своём исходном месте. Если нет, то выделяется новая соответствующая промежуточная страница (bounce page), которая используется как промежуточное хранилище. При записи данных с несоответствующих исходных страниц они сначала копируются на свои промежуточные страницы, а затем передаются с промежуточных страниц на устройство. При чтении данные поступают с устройства на промежуточные страницы, а затем копируются на свои несоответствующие исходные страницы. Процесс копирования между исходными и промежуточными страницами называется синхронизацией. Обычно это используется для каждой передачи: буфер для каждой передачи загружается, передача выполняется, и буфер выгружается.
Функции, работающие с памятью DMA:
@@ -463,7 +463,7 @@
Ниже представлены типичные последовательности вызовов при использовании карты в зависимости от её назначения. Символы -> используются для обозначения последовательности во времени.
-Для буфера, который остается практически неизменным в течение всего времени между присоединением и отсоединением устройства:
+Для буфера, который остаётся практически неизменным в течение всего времени между присоединением и отсоединением устройства:
bus_dmamem_alloc -> bus_dmamap_load -> ...use buffer... -> -> bus_dmamap_unload -> bus_dmamem_free
@@ -711,7 +711,7 @@
return ENXIO;
....
-Конечно, обычно для таких вещей следует использовать процедуру `identify()` драйвера. Однако может быть одна веская причина, почему лучше сделать это в `probe()`: если этот обнаружение может привести к сбою другого чувствительного устройства. Процедуры обнаружения упорядочены с учетом флага `sensitive`: чувствительные устройства проверяются первыми, а остальные устройства — позже. Но процедуры `identify()` вызываются до любого обнаружения, поэтому они не учитывают чувствительные устройства и могут вызвать их сбой.
+Конечно, обычно для таких вещей следует использовать процедуру `identify()` драйвера. Однако может быть одна веская причина, почему лучше сделать это в `probe()`: если этот обнаружение может привести к сбою другого чувствительного устройства. Процедуры обнаружения упорядочены с учётом флага `sensitive`: чувствительные устройства проверяются первыми, а остальные устройства — позже. Но процедуры `identify()` вызываются до любого обнаружения, поэтому они не учитывают чувствительные устройства и могут вызвать их сбой.
Вот, после того как мы получили начальный порт, необходимо установить количество портов (за исключением устройств PnP), так как в файле конфигурации ядра эта информация отсутствует.
diff --git a/documentation/content/ru/books/arch-handbook/isa/_index.po b/documentation/content/ru/books/arch-handbook/isa/_index.po
--- a/documentation/content/ru/books/arch-handbook/isa/_index.po
+++ b/documentation/content/ru/books/arch-handbook/isa/_index.po
@@ -1,12 +1,12 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025, 2026.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2025-05-01 19:56-0300\n"
-"PO-Revision-Date: 2025-11-12 04:45+0000\n"
+"PO-Revision-Date: 2026-03-04 20:01+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksarch-handbookisa_index/ru/>\n"
@@ -1467,7 +1467,7 @@
msgstr ""
"Второй момент: произвольная область виртуальной памяти может быть загружена "
"в карту. Каждая страница этой памяти будет проверяться на соответствие "
-"требованиям карты. Если она соответствует, то остается на своем исходном "
+"требованиям карты. Если она соответствует, то остаётся на своём исходном "
"месте. Если нет, то выделяется новая соответствующая промежуточная страница ("
"bounce page), которая используется как промежуточное хранилище. При записи "
"данных с несоответствующих исходных страниц они сначала копируются на свои "
@@ -2113,7 +2113,7 @@
"For a buffer which stays practically fixed during all the time between "
"attachment and detachment of a device:"
msgstr ""
-"Для буфера, который остается практически неизменным в течение всего времени "
+"Для буфера, который остаётся практически неизменным в течение всего времени "
"между присоединением и отсоединением устройства:"
#. type: Plain text
@@ -3064,7 +3064,7 @@
"Конечно, обычно для таких вещей следует использовать процедуру `identify()` "
"драйвера. Однако может быть одна веская причина, почему лучше сделать это в "
"`probe()`: если этот обнаружение может привести к сбою другого "
-"чувствительного устройства. Процедуры обнаружения упорядочены с учетом флага "
+"чувствительного устройства. Процедуры обнаружения упорядочены с учётом флага "
"`sensitive`: чувствительные устройства проверяются первыми, а остальные "
"устройства — позже. Но процедуры `identify()` вызываются до любого "
"обнаружения, поэтому они не учитывают чувствительные устройства и могут "
diff --git a/documentation/content/ru/books/arch-handbook/jail/_index.adoc b/documentation/content/ru/books/arch-handbook/jail/_index.adoc
--- a/documentation/content/ru/books/arch-handbook/jail/_index.adoc
+++ b/documentation/content/ru/books/arch-handbook/jail/_index.adoc
@@ -48,7 +48,7 @@
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
-На большинстве систем UNIX(R) пользователь `root` обладает неограниченной властью. Это не способствует безопасности. Если злоумышленник получит права `root` в системе, у него окажутся все функции под рукой. В FreeBSD существуют sysctl-параметры, которые ограничивают власть `root`, чтобы минимизировать ущерб от действий злоумышленника. В частности, одна из таких функций называется `уровни безопасности`. Аналогично, другая функция, доступная начиная с FreeBSD 4.0, — это утилита man:jail[8] — клетка. Клетка создает chroot-окружение и накладывает определенные ограничения на процессы, запущенные внутри `клетки`. Например, процесс в `клетке` не может влиять на процессы вне её, использовать определенные системные вызовы или наносить какой-либо ущерб основной системе.
+На большинстве систем UNIX(R) пользователь `root` обладает неограниченной властью. Это не способствует безопасности. Если злоумышленник получит права `root` в системе, у него окажутся все функции под рукой. В FreeBSD существуют sysctl-параметры, которые ограничивают власть `root`, чтобы минимизировать ущерб от действий злоумышленника. В частности, одна из таких функций называется `уровни безопасности`. Аналогично, другая функция, доступная начиная с FreeBSD 4.0, — это утилита man:jail[8] — клетка. Клетка создает chroot-окружение и накладывает определённые ограничения на процессы, запущенные внутри `клетки`. Например, процесс в `клетке` не может влиять на процессы вне её, использовать определённые системные вызовы или наносить какой-либо ущерб основной системе.
Клетка становится новой моделью безопасности. Пользователи запускают потенциально уязвимые серверы, такие как Apache, BIND и sendmail, внутри клеток, так что если злоумышленник получит права `root` внутри клетки, это будет лишь неудобством, а не катастрофой. Данная статья в основном сосредоточена на внутреннем устройстве (исходном коде) клетки. Для получения информации о настройке клетки см. extref:{handbook}jails[раздел о клетках Руководства FreeBSD, jails-synopsis].
@@ -313,7 +313,7 @@
}
....
-Когда процесс создается из родительского процесса, системный вызов man:fork[2] использует `crhold()` для поддержания учетных данных нового процесса. Это автоматически сохраняет учетные данные нового дочернего процесса согласованными с родительским, поэтому дочерний процесс также остается в клетке.
+Когда процесс создается из родительского процесса, системный вызов man:fork[2] использует `crhold()` для поддержания учётных данных нового процесса. Это автоматически сохраняет учётные данные нового дочернего процесса согласованными с родительским, поэтому дочерний процесс также остаётся в клетке.
[.programlisting]
....
@@ -402,7 +402,7 @@
=== Протоколы
-Существуют определенные протоколы, которые очень распространены, такие как TCP, UDP, IP и ICMP. IP и ICMP находятся на одном уровне: сетевом уровне 2. Принимаются определенные меры предосторожности, чтобы предотвратить привязку протокола к определенному адресу процессом в клетке, только если установлен параметр `nam`. `nam` является указателем на структуру `sockaddr`, которая описывает адрес, к которому привязывается служба. Более точное определение заключается в том, что `sockaddr` "может использоваться как шаблон для ссылки на идентификационный тег и длину каждого адреса". В функции `in_pcbbind_setup()`, `sin` — это указатель на структуру `sockaddr_in`, которая содержит порт, адрес, длину и семейство доменов сокета, который должен быть привязан. В основном, это запрещает любым процессам из клетки указывать адрес, который не принадлежит клетке, в которой существует вызывающий процесс.
+Существуют определённые протоколы, которые очень распространены, такие как TCP, UDP, IP и ICMP. IP и ICMP находятся на одном уровне: сетевом уровне 2. Принимаются определённые меры предосторожности, чтобы предотвратить привязку протокола к определённому адресу процессом в клетке, только если установлен параметр `nam`. `nam` является указателем на структуру `sockaddr`, которая описывает адрес, к которому привязывается служба. Более точное определение заключается в том, что `sockaddr` "может использоваться как шаблон для ссылки на идентификационный тег и длину каждого адреса". В функции `in_pcbbind_setup()`, `sin` — это указатель на структуру `sockaddr_in`, которая содержит порт, адрес, длину и семейство доменов сокета, который должен быть привязан. В основном, это запрещает любым процессам из клетки указывать адрес, который не принадлежит клетке, в которой существует вызывающий процесс.
[.programlisting]
....
@@ -442,7 +442,7 @@
}
....
-Вы можете задаться вопросом, какую функцию выполняет `prison_ip()`. `prison_ip()` принимает три аргумента: указатель на учетные данные (представленные как `cred`), любые флаги и IP-адрес. Она возвращает 1, если IP-адрес НЕ принадлежит клетке, и 0 в противном случае. Как видно из кода, если это действительно IP-адрес, не принадлежащий клетке, протоколу не разрешается привязываться к этому адресу.
+Вы можете задаться вопросом, какую функцию выполняет `prison_ip()`. `prison_ip()` принимает три аргумента: указатель на учётные данные (представленные как `cred`), любые флаги и IP-адрес. Она возвращает 1, если IP-адрес НЕ принадлежит клетке, и 0 в противном случае. Как видно из кода, если это действительно IP-адрес, не принадлежащий клетке, протоколу не разрешается привязываться к этому адресу.
[.programlisting]
....
diff --git a/documentation/content/ru/books/arch-handbook/jail/_index.po b/documentation/content/ru/books/arch-handbook/jail/_index.po
--- a/documentation/content/ru/books/arch-handbook/jail/_index.po
+++ b/documentation/content/ru/books/arch-handbook/jail/_index.po
@@ -1,12 +1,12 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025, 2026.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2025-11-08 16:17+0000\n"
-"PO-Revision-Date: 2025-11-11 04:45+0000\n"
+"PO-Revision-Date: 2026-03-04 20:01+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksarch-handbookjail_index/ru/>\n"
@@ -52,9 +52,9 @@
"минимизировать ущерб от действий злоумышленника. В частности, одна из таких "
"функций называется `уровни безопасности`. Аналогично, другая функция, "
"доступная начиная с FreeBSD 4.0, — это утилита man:jail[8] — клетка. Клетка "
-"создает chroot-окружение и накладывает определенные ограничения на процессы, "
+"создает chroot-окружение и накладывает определённые ограничения на процессы, "
"запущенные внутри `клетки`. Например, процесс в `клетке` не может влиять на "
-"процессы вне её, использовать определенные системные вызовы или наносить "
+"процессы вне её, использовать определённые системные вызовы или наносить "
"какой-либо ущерб основной системе."
#. type: Plain text
@@ -820,11 +820,11 @@
"process. It inherently keep the newly forked child's credential consistent "
"with its parent, so the child process is also jailed."
msgstr ""
-"Когда процесс создается из родительского процесса, системный вызов man:"
-"fork[2] использует `crhold()` для поддержания учетных данных нового "
-"процесса. Это автоматически сохраняет учетные данные нового дочернего "
+"Когда процесс создается из родительского процесса, системный вызов "
+"man:fork[2] использует `crhold()` для поддержания учётных данных нового "
+"процесса. Это автоматически сохраняет учётные данные нового дочернего "
"процесса согласованными с родительским, поэтому дочерний процесс также "
-"остается в клетке."
+"остаётся в клетке."
#. type: delimited block . 4
#: documentation/content/en/books/arch-handbook/jail/_index.adoc:324
@@ -1169,10 +1169,10 @@
"disallows any processes from jail to be able to specify the address that "
"does not belong to the jail in which the calling process exists."
msgstr ""
-"Существуют определенные протоколы, которые очень распространены, такие как "
+"Существуют определённые протоколы, которые очень распространены, такие как "
"TCP, UDP, IP и ICMP. IP и ICMP находятся на одном уровне: сетевом уровне 2. "
-"Принимаются определенные меры предосторожности, чтобы предотвратить привязку "
-"протокола к определенному адресу процессом в клетке, только если установлен "
+"Принимаются определённые меры предосторожности, чтобы предотвратить привязку "
+"протокола к определённому адресу процессом в клетке, только если установлен "
"параметр `nam`. `nam` является указателем на структуру `sockaddr`, которая "
"описывает адрес, к которому привязывается служба. Более точное определение "
"заключается в том, что `sockaddr` \"может использоваться как шаблон для "
@@ -1268,8 +1268,8 @@
"that address."
msgstr ""
"Вы можете задаться вопросом, какую функцию выполняет `prison_ip()`. "
-"`prison_ip()` принимает три аргумента: указатель на учетные данные "
-"(представленные как `cred`), любые флаги и IP-адрес. Она возвращает 1, если "
+"`prison_ip()` принимает три аргумента: указатель на учётные данные ("
+"представленные как `cred`), любые флаги и IP-адрес. Она возвращает 1, если "
"IP-адрес НЕ принадлежит клетке, и 0 в противном случае. Как видно из кода, "
"если это действительно IP-адрес, не принадлежащий клетке, протоколу не "
"разрешается привязываться к этому адресу."
diff --git a/documentation/content/ru/books/arch-handbook/kobj/_index.adoc b/documentation/content/ru/books/arch-handbook/kobj/_index.adoc
--- a/documentation/content/ru/books/arch-handbook/kobj/_index.adoc
+++ b/documentation/content/ru/books/arch-handbook/kobj/_index.adoc
@@ -70,7 +70,7 @@
Kobj работает путем генерации описаний методов. Каждое описание содержит уникальный идентификатор, а также функцию по умолчанию. Адрес описания используется для однозначной идентификации метода в таблице методов класса.
-Класс создается путем построения таблицы методов, связывающей одну или несколько функций с описаниями методов. Перед использованием класс компилируется. В процессе компиляции выделяется кэш и связывается с классом. Уникальный идентификатор назначается каждому описанию метода в таблице методов класса, если это еще не было сделано другой ссылающейся компиляцией класса. Для каждого используемого метода скриптом генерируется функция для проверки аргументов и автоматического обращения к описанию метода для поиска. Сгенерированная функция ищет метод, используя уникальный идентификатор, связанный с описанием метода, в качестве хэша для доступа к кэшу, связанному с классом объекта. Если метод не найден в кэше, сгенерированная функция использует таблицу класса для поиска метода. Если метод найден, используется связанная с ним функция внутри класса; в противном случае используется функция по умолчанию, связанная с описанием метода.
+Класс создается путем построения таблицы методов, связывающей одну или несколько функций с описаниями методов. Перед использованием класс компилируется. В процессе компиляции выделяется кэш и связывается с классом. Уникальный идентификатор назначается каждому описанию метода в таблице методов класса, если это ещё не было сделано другой компиляцией, ссылающейся на этот класс. Для каждого используемого метода скриптом генерируется функция для проверки аргументов и автоматического обращения к описанию метода для поиска. Сгенерированная функция ищет метод, используя уникальный идентификатор, связанный с описанием метода, в качестве хэша для доступа к кэшу, связанному с классом объекта. Если метод не найден в кэше, сгенерированная функция использует таблицу класса для поиска метода. Если метод найден, используется связанная с ним функция внутри класса; в противном случае используется функция по умолчанию, связанная с описанием метода.
Эти перенаправления можно визуализировать следующим образом:
diff --git a/documentation/content/ru/books/arch-handbook/kobj/_index.po b/documentation/content/ru/books/arch-handbook/kobj/_index.po
--- a/documentation/content/ru/books/arch-handbook/kobj/_index.po
+++ b/documentation/content/ru/books/arch-handbook/kobj/_index.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2025-05-01 19:56-0300\n"
-"PO-Revision-Date: 2025-07-02 04:45+0000\n"
+"PO-Revision-Date: 2025-11-26 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksarch-handbookkobj_index/ru/>\n"
@@ -133,10 +133,10 @@
"несколько функций с описаниями методов. Перед использованием класс "
"компилируется. В процессе компиляции выделяется кэш и связывается с классом. "
"Уникальный идентификатор назначается каждому описанию метода в таблице "
-"методов класса, если это еще не было сделано другой ссылающейся компиляцией "
-"класса. Для каждого используемого метода скриптом генерируется функция для "
-"проверки аргументов и автоматического обращения к описанию метода для "
-"поиска. Сгенерированная функция ищет метод, используя уникальный "
+"методов класса, если это ещё не было сделано другой компиляцией, ссылающейся "
+"на этот класс. Для каждого используемого метода скриптом генерируется "
+"функция для проверки аргументов и автоматического обращения к описанию "
+"метода для поиска. Сгенерированная функция ищет метод, используя уникальный "
"идентификатор, связанный с описанием метода, в качестве хэша для доступа к "
"кэшу, связанному с классом объекта. Если метод не найден в кэше, "
"сгенерированная функция использует таблицу класса для поиска метода. Если "
diff --git a/documentation/content/ru/books/arch-handbook/mac/_index.adoc b/documentation/content/ru/books/arch-handbook/mac/_index.adoc
--- a/documentation/content/ru/books/arch-handbook/mac/_index.adoc
+++ b/documentation/content/ru/books/arch-handbook/mac/_index.adoc
@@ -135,12 +135,12 @@
[[mac-framework-kernel-arch-label-synchronization]]
=== Синхронизация меток
-Поскольку к объектам ядра обычно может обращаться более одного потока одновременно, и допускается одновременный вход нескольких потоков в MAC Framework, хранение атрибутов безопасности, поддерживаемое MAC Framework, тщательно синхронизировано. Как правило, существующая синхронизация ядра для данных объектов ядра используется для защиты меток безопасности MAC Framework на объекте: например, метки MAC на сокетах защищаются с помощью существующего мьютекса сокета. Аналогично, семантика параллельного доступа обычно идентична семантике контейнерных объектов: для учетных данных поддерживается семантика копирования при записи для содержимого меток, как и для остальной структуры учетных данных. MAC Framework устанавливает необходимые блокировки на объекты при вызове с ссылкой на объект. Авторам политик необходимо учитывать эти семантики синхронизации, так как они иногда ограничивают типы доступа к меткам: например, когда ссылка только для чтения на учетные данные передаётся политике через точку входа, разрешены только операции чтения для состояния метки, прикрепленного к учетным данным.
+Поскольку к объектам ядра обычно может обращаться более одного потока одновременно, и допускается одновременный вход нескольких потоков в MAC Framework, хранение атрибутов безопасности, поддерживаемое MAC Framework, тщательно синхронизировано. Как правило, существующая синхронизация ядра для данных объектов ядра используется для защиты меток безопасности MAC Framework на объекте: например, метки MAC на сокетах защищаются с помощью существующего мьютекса сокета. Аналогично, семантика параллельного доступа обычно идентична семантике контейнерных объектов: для учётных данных поддерживается семантика копирования при записи для содержимого меток, как и для остальной структуры учётных данных. MAC Framework устанавливает необходимые блокировки на объекты при вызове с ссылкой на объект. Авторам политик необходимо учитывать эти семантики синхронизации, так как они иногда ограничивают типы доступа к меткам: например, когда ссылка только для чтения на учётные данные передаётся политике через точку входа, разрешены только операции чтения для состояния метки, прикрепленного к учётным данным.
[[mac-framework-kernel-arch-policy-synchronization]]
=== Синхронизация политики и параллелизм
-Модули политик должны быть написаны с учетом того, что множество потоков ядра могут одновременно войти в одну или несколько точек входа политики из-за параллельной и вытесняющей природы ядра FreeBSD. Если модуль политики использует изменяемое состояние, это может потребовать применения примитивов синхронизации внутри политики, чтобы предотвратить несогласованные представления этого состояния, ведущие к некорректной работе политики. Политики, как правило, могут использовать существующие примитивы синхронизации FreeBSD для этой цели, включая мьютексы, блокировки с ожиданием, условные переменные и счётные семафоры. Однако политики должны быть написаны так, чтобы применять эти примитивы осторожно, соблюдая существующие порядки блокировок в ядре и учитывая, что некоторые точки входа не допускают ожидания, ограничивая использование примитивов в этих точках входа мьютексами и операциями пробуждения.
+Модули политик должны быть написаны с учётом того, что множество потоков ядра могут одновременно войти в одну или несколько точек входа политики из-за параллельной и вытесняющей природы ядра FreeBSD. Если модуль политики использует изменяемое состояние, это может потребовать применения примитивов синхронизации внутри политики, чтобы предотвратить несогласованные представления этого состояния, ведущие к некорректной работе политики. Политики, как правило, могут использовать существующие примитивы синхронизации FreeBSD для этой цели, включая мьютексы, блокировки с ожиданием, условные переменные и счётные семафоры. Однако политики должны быть написаны так, чтобы применять эти примитивы осторожно, соблюдая существующие порядки блокировок в ядре и учитывая, что некоторые точки входа не допускают ожидания, ограничивая использование примитивов в этих точках входа мьютексами и операциями пробуждения.
Когда модули политики обращаются к другим подсистемам ядра, они обычно должны освобождать любые блокировки внутри политики, чтобы избежать нарушения порядка блокировок ядра или риска рекурсивных блокировок. Это позволит сохранить блокировки политики как конечные блокировки в глобальном порядке блокировок, помогая избежать взаимоблокировки.
@@ -152,7 +152,7 @@
[[mac-framework-kernel-arch-entrypoints]]
=== Точки входа
-Ядро взаимодействует с MAC Framework двумя способами: вызывает набор API для уведомления фреймворка о соответствующих событиях и предоставляет указатель на структуру меток, не зависящую от политики, в объектах, связанных с безопасностью. Указатель метки управляется MAC Framework через точки входа управления метками, что позволяет фреймворку предоставлять службу маркировки модулям политик с относительно минимальными изменениями в подсистеме ядра, управляющей объектом. Например, указатели меток были добавлены к процессам, учетным данным процессов, сокетам, каналам, vnode, Mbuf, сетевым интерфейсам, очередям сборки IP-пакетов и множеству других структур, связанных с безопасностью. Ядро также вызывает MAC Framework при принятии важных решений по безопасности, позволяя модулям политик дополнять эти решения на основе собственных критериев (включая, возможно, данные, хранящиеся в метках безопасности). Большинство этих критически важных решений по безопасности будут явными проверками контроля доступа; однако некоторые влияют на более общие функции принятия решений, такие как сопоставление пакетов для сокетов и переход меток при выполнении программы.
+Ядро взаимодействует с MAC Framework двумя способами: вызывает набор API для уведомления фреймворка о соответствующих событиях и предоставляет указатель на структуру меток, не зависящую от политики, в объектах, связанных с безопасностью. Указатель метки управляется MAC Framework через точки входа управления метками, что позволяет фреймворку предоставлять службу маркировки модулям политик с относительно минимальными изменениями в подсистеме ядра, управляющей объектом. Например, указатели меток были добавлены к процессам, учётным данным процессов, сокетам, каналам, vnode, Mbuf, сетевым интерфейсам, очередям сборки IP-пакетов и множеству других структур, связанных с безопасностью. Ядро также вызывает MAC Framework при принятии важных решений по безопасности, позволяя модулям политик дополнять эти решения на основе собственных критериев (включая, возможно, данные, хранящиеся в метках безопасности). Большинство этих критически важных решений по безопасности будут явными проверками контроля доступа; однако некоторые влияют на более общие функции принятия решений, такие как сопоставление пакетов для сокетов и переход меток при выполнении программы.
[[mac-framework-kernel-arch-composition]]
=== Композиция политик
@@ -266,7 +266,7 @@
Авторы модулей политик должны быть осведомлены о стратегии блокировок в ядре, а также о том, какие блокировки объектов доступны на различных точках входа. Им следует избегать сценариев взаимоблокировок, не захватывая нелистовые блокировки внутри точек входа, а также соблюдать протокол блокировок для доступа и изменения объектов. В частности, авторы должны учитывать, что хотя необходимые блокировки для доступа к объектам и их меткам обычно удерживаются, достаточные блокировки для изменения объекта или его метки могут отсутствовать для всех точек входа. Информация о блокировках аргументов документирована в описании точек входа фреймворка MAC.
-Точки входа политики будут передавать ссылку на метку объекта вместе с самим объектом. Это позволяет помеченным политикам не знать внутренней структуры объекта, но при этом принимать решения на основе метки. Исключением из этого являются учетные данные процесса, для которые предполагается, что политики понимают их, как объект безопасности первого класса в ядре.
+Точки входа политики будут передавать ссылку на метку объекта вместе с самим объектом. Это позволяет помеченным политикам не знать внутренней структуры объекта, но при этом принимать решения на основе метки. Исключением из этого являются учётные данные процесса, для которые предполагается, что политики понимают их, как объект безопасности первого класса в ядре.
[[mac-entry-point-reference]]
== Справочник по точкам входа политики MAC
@@ -420,7 +420,7 @@
|
|===
-Инициализировать метку для вновь созданных учетных данных пользователя. Разрешено приостанавливать выполнение.
+Инициализировать метку для вновь созданных учётных данных пользователя. Разрешено приостанавливать выполнение.
[[mac-mpo-init-devfsdirent]]
==== `mpo_init_devfsdirent_label`
@@ -704,7 +704,7 @@
|
|===
-Уничтожить метку на дескрипторе BPF. В этой точке входа политика должна освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно было уничтожить.
+Уничтожить метку на дескрипторе BPF. В этой точке входа политика должна освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно было уничтожить.
[[mac-mpo-destroy-cred]]
==== `mpo_destroy_cred_label`
@@ -726,7 +726,7 @@
|
|===
-Уничтожить метку на учетных данных. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно было уничтожить.
+Уничтожить метку на учётных данных. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно было уничтожить.
[[mac-mpo-destroy-devfsdirent]]
==== `mpo_destroy_devfsdirent_label`
@@ -748,7 +748,7 @@
|
|===
-Уничтожить метку на записи devfs. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно было уничтожить.
+Уничтожить метку на записи devfs. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно было уничтожить.
[[mac-mpo-destroy-ifnet-label]]
==== `mpo_destroy_ifnet_label`
@@ -770,7 +770,7 @@
|
|===
-Уничтожить метку на удаленном интерфейсе. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно было уничтожить.
+Уничтожить метку на удаленном интерфейсе. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно было уничтожить.
[[mac-mpo-destroy-ipq-label]]
==== `mpo_destroy_ipq_label`
@@ -792,7 +792,7 @@
|
|===
-Уничтожить метку в очереди IP-фрагментов. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно было уничтожить.
+Уничтожить метку в очереди IP-фрагментов. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно было уничтожить.
[[mac-mpo-destroy-mbuf-label]]
==== `mpo_destroy_mbuf_label`
@@ -814,7 +814,7 @@
|
|===
-Уничтожить метку в заголовке mbuf. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно было уничтожить.
+Уничтожить метку в заголовке mbuf. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно было уничтожить.
[[mac-mpo-destroy-mount-label]]
==== `mpo_destroy_mount_label`
@@ -836,7 +836,7 @@
|
|===
-Уничтожить метки на точке монтирования. В этой точке входа модуль политики должен освободить внутреннее хранилище, связанное с `mntlabel`, чтобы ее можно было уничтожить.
+Уничтожить метки на точке монтирования. В этой точке входа модуль политики должен освободить внутреннее хранилище, связанное с `mntlabel`, чтобы её можно было уничтожить.
[[mac-mpo-destroy-mount]]
==== `mpo_destroy_mount_label`
@@ -884,7 +884,7 @@
|
|===
-Уничтожить метку на сокете. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно было уничтожить.
+Уничтожить метку на сокете. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно было уничтожить.
[[mac-mpo-destroy-socket-peer-label]]
==== `mpo_destroy_socket_peer_label`
@@ -906,7 +906,7 @@
|
|===
-Уничтожить метку однорангового узла на сокете. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно было уничтожить.
+Уничтожить метку однорангового узла на сокете. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно было уничтожить.
[[mac-mpo-destroy-pipe-label]]
==== `mpo_destroy_pipe_label`
@@ -950,7 +950,7 @@
|
|===
-Уничтожить метку на процессе. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно было уничтожить.
+Уничтожить метку на процессе. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно было уничтожить.
[[mac-mpo-destroy-vnode-label]]
==== `mpo_destroy_vnode_label`
@@ -972,7 +972,7 @@
|
|===
-Уничтожить метку на vnode. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно было уничтожить.
+Уничтожить метку на vnode. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно было уничтожить.
[[mac-mpo-copy-mbuf-label]]
==== `mpo_copy_mbuf_label`
@@ -1664,7 +1664,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`mp`
@@ -1708,7 +1708,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`mount`
@@ -1759,7 +1759,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`mp`
@@ -1775,7 +1775,7 @@
|
|===
-Заполнить метки на точке монтирования, создаваемой переданными учетными данными субъекта. Этот вызов будет выполнен при монтировании новой файловой системы.
+Заполнить метки на точке монтирования, создаваемой переданными учётными данными субъекта. Этот вызов будет выполнен при монтировании новой файловой системы.
[[mac-mpo-create-root-mount]]
===== `mpo_create_root_mount`
@@ -1796,7 +1796,7 @@
3+|См. crossref:mac[mac-mpo-create-mount, `mpo_create_mount`].
|===
-Заполнить метки на точке монтирования, создаваемой переданными учетными данными субъекта. Этот вызов будет выполнен при монтировании корневой файловой системы после `mpo_create_mount;`.
+Заполнить метки на точке монтирования, создаваемой переданными учётными данными субъекта. Этот вызов будет выполнен при монтировании корневой файловой системы после `mpo_create_mount;`.
[[mac-mpo-relabel-vnode]]
===== `mpo_relabel_vnode`
@@ -1815,7 +1815,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -1831,7 +1831,7 @@
|
|===
-Обновить метку на переданном vnode с учетом переданной обновленной метки vnode и переданных учетных данных субъекта.
+Обновить метку на переданном vnode с учётом переданной обновленной метки vnode и переданных учётных данных субъекта.
[[mac-mpo-setlabel-vnode-extattr]]
===== `mpo_setlabel_vnode_extattr`
@@ -1850,7 +1850,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -1958,7 +1958,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`pipe`
@@ -1970,7 +1970,7 @@
|
|===
-Установить метку на только что созданном канале из переданных учетных данных субъекта. Этот вызов выполняется при создании нового канала.
+Установить метку на только что созданном канале из переданных учётных данных субъекта. Этот вызов выполняется при создании нового канала.
[[mac-mpo-create-socket]]
===== `mpo_create_socket`
@@ -1989,7 +1989,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|Неизменяемый
|`so`
@@ -2001,7 +2001,7 @@
|
|===
-Установить метку на новом сокете из переданных учетных данных субъекта. Этот вызов выполняется при создании сокета.
+Установить метку на новом сокете из переданных учётных данных субъекта. Этот вызов выполняется при создании сокета.
[[mac-mpo-create-socket-from-socket]]
===== `mpo_create_socket_from_socket`
@@ -2056,7 +2056,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`pipe`
@@ -2091,7 +2091,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|Неизменяемый
|`so`
@@ -2200,7 +2200,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|Неизменяемый
|`bpf_d`
@@ -2616,7 +2616,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`ifnet`
@@ -2632,7 +2632,7 @@
|
|===
-Обновить метку сетевого интерфейса, `ifnet`, на основе переданной новой метки, `newlabel`, и переданных учетных данных субъекта, `cred`.
+Обновить метку сетевого интерфейса, `ifnet`, на основе переданной новой метки, `newlabel`, и переданных учётных данных субъекта, `cred`.
[[mac-mpo-update-ipq]]
===== `mpo_update_ipq`
@@ -2688,7 +2688,7 @@
| Блокировка
|`parent_cred`
-|Учетные данные субъекта‐родителя
+|Учётные данные субъекта‐родителя
|
|`child_cred`
@@ -2716,11 +2716,11 @@
| Блокировка
|`old`
-|Учетные данные существующего субъекта
+|Учётные данные существующего субъекта
|Неизменяемый
|`new`
-|Учетные данные нового субъекта для добавления метки
+|Учётные данные нового субъекта для добавления метки
|
|`vp`
@@ -2732,7 +2732,7 @@
|
|===
-Обновить метку учетных данных вновь созданного субъекта (`new`) на основе переданных учетных данных существующего субъекта (`old`) в соответствии с переходом метки, вызванным выполнением переданного vnode (`vp`). Этот вызов происходит, когда процесс выполняет переданный vnode, и одна из политик возвращает успех из точки входа `mpo_execve_will_transition`. Политики могут выбрать реализацию этого вызова просто путем вызова `mpo_create_cred` и передачи двух субъектов учетных данных, чтобы не реализовывать событие перехода. Политики не должны оставлять эту точку входа нереализованной, если они реализуют `mpo_create_cred`, даже если они не реализуют `mpo_execve_will_transition`.
+Обновить метку учётных данных вновь созданного субъекта (`new`) на основе переданных учётных данных существующего субъекта (`old`) в соответствии с переходом метки, вызванным выполнением переданного vnode (`vp`). Этот вызов происходит, когда процесс выполняет переданный vnode, и одна из политик возвращает успех из точки входа `mpo_execve_will_transition`. Политики могут выбрать реализацию этого вызова просто путем вызова `mpo_create_cred` и передачи двух субъектов учётных данных, чтобы не реализовывать событие перехода. Политики не должны оставлять эту точку входа нереализованной, если они реализуют `mpo_create_cred`, даже если они не реализуют `mpo_execve_will_transition`.
[[mac-mpo-execve-will-transition]]
===== `mpo_execve_will_transition`
@@ -2751,7 +2751,7 @@
| Блокировка
|`old`
-|Учетные данные субъекта перед man:execve[2]
+|Учётные данные субъекта перед man:execve[2]
|Неизменяемый
|`vp`
@@ -2763,7 +2763,7 @@
|
|===
-Определить, будет ли политика выполнять событие перехода в результате выполнения переданного vnode с использованием переданных учетных данных субъекта. Вернуть 1, если переход требуется, и 0, если нет. Даже если политика возвращает 0, она должна корректно обрабатывать неожиданный вызов `mpo_execve_transition`, так как этот вызов может произойти из-за запроса перехода другой политикой.
+Определить, будет ли политика выполнять событие перехода в результате выполнения переданного vnode с использованием переданных учётных данных субъекта. Вернуть 1, если переход требуется, и 0, если нет. Даже если политика возвращает 0, она должна корректно обрабатывать неожиданный вызов `mpo_execve_transition`, так как этот вызов может произойти из-за запроса перехода другой политикой.
[[mac-mpo-create-proc0]]
===== `mpo_create_proc0`
@@ -2781,11 +2781,11 @@
| Блокировка
|`cred`
-|Учетные данные субъекта для заполнения
+|Учётные данные субъекта для заполнения
|
|===
-Создать учетные данные субъекта процесса 0, родителя всех процессов ядра.
+Создать учётные данные субъекта процесса 0, родителя всех процессов ядра.
[[mac-mpo-create-proc1]]
===== `mpo_create_proc1`
@@ -2803,11 +2803,11 @@
| Блокировка
|`cred`
-|Учетные данные субъекта для заполнения
+|Учётные данные субъекта для заполнения
|
|===
-Создать учетные данные субъекта процесса 1, родителя всех пользовательских процессов.
+Создать учётные данные субъекта процесса 1, родителя всех пользовательских процессов.
[[mac-mpo-relabel-cred]]
===== `mpo_relabel_cred`
@@ -2825,7 +2825,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`newlabel`
@@ -2833,7 +2833,7 @@
|
|===
-Обновить метку на учетных данных субъекта из переданной обновляемой метки.
+Обновить метку на учётных данных субъекта из переданной обновляемой метки.
[[mac-access-control-checks]]
=== Проверки контроля доступа
@@ -2913,7 +2913,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|===
@@ -2935,7 +2935,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`name`
@@ -2961,7 +2961,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`name`
@@ -2987,7 +2987,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`name`
@@ -3014,7 +3014,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -3044,7 +3044,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|===
@@ -3066,7 +3066,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|===
@@ -3089,7 +3089,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`pipe`
@@ -3128,7 +3128,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`pipe`
@@ -3159,7 +3159,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`pipe`
@@ -3190,7 +3190,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`pipe`
@@ -3225,7 +3225,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`pipe`
@@ -3256,7 +3256,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`pipe`
@@ -3287,7 +3287,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`socket`
@@ -3320,7 +3320,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`socket`
@@ -3355,7 +3355,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`so`
@@ -3386,7 +3386,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`so`
@@ -3416,11 +3416,11 @@
| Блокировка
|`u1`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`u2`
-|Учетные данные объекта
+|Учётные данные объекта
|
|===
@@ -3443,7 +3443,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`socket`
@@ -3472,7 +3472,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`ifnet`
@@ -3488,7 +3488,7 @@
|
|===
-Определить, может ли учетные данные субъекта перемаркировать переданный сетевой интерфейс в соответствии с переданным обновлением метки.
+Определить, может ли учётные данные субъекта перемаркировать переданный сетевой интерфейс в соответствии с переданным обновлением метки.
[[mac-mpo-cred-check-socket-relabel]]
==== `mpo_check_socket_relabel`
@@ -3507,7 +3507,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`socket`
@@ -3541,7 +3541,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`newlabel`
@@ -3549,7 +3549,7 @@
|
|===
-Определить, могут ли учетные данные субъекта перемаркировать себя в соответствии с переданным обновлением метки.
+Определить, могут ли учётные данные субъекта перемаркировать себя в соответствии с переданным обновлением метки.
[[mac-mpo-cred-check-vnode-relabel]]
==== `mpo_check_vnode_relabel`
@@ -3568,7 +3568,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|Неизменяемый
|`vp`
@@ -3603,7 +3603,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`mp`
@@ -3615,7 +3615,7 @@
|
|===
-Определить, могут ли учетные данные субъекта видеть результаты выполнения statfs для файловой системы. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии меток или EPERM при отсутствии привилегий. Этот вызов может выполняться в различных ситуациях, включая вызовы man:statfs[2] и связанных функций, а также для определения, какие файловые системы исключать из списка, например, при вызове man:getfsstat[2].
+Определить, могут ли учётные данные субъекта видеть результаты выполнения statfs для файловой системы. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии меток или EPERM при отсутствии привилегий. Этот вызов может выполняться в различных ситуациях, включая вызовы man:statfs[2] и связанных функций, а также для определения, какие файловые системы исключать из списка, например, при вызове man:getfsstat[2].
[[mac-mpo-cred-check-proc-debug]]
==== `mpo_check_proc_debug`
@@ -3633,7 +3633,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|Неизменяемый
|`proc`
@@ -3660,7 +3660,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -3676,7 +3676,7 @@
|
|===
-Определить, как должны возвращаться вызовы man:access[2] и связанные вызовы для субъекта с указанными учетными данными при выполнении на переданном vnode с использованием переданных флагов доступа. Обычно это должно быть реализовано с использованием той же семантики, что и в `mpo_check_vnode_open`. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии меток или EPERM при отсутствии привилегий.
+Определить, как должны возвращаться вызовы man:access[2] и связанные вызовы для субъекта с указанными учётными данными при выполнении на переданном vnode с использованием переданных флагов доступа. Обычно это должно быть реализовано с использованием той же семантики, что и в `mpo_check_vnode_open`. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии меток или EPERM при отсутствии привилегий.
[[mac-mpo-cred-check-vnode-chdir]]
==== `mpo_check_vnode_chdir`
@@ -3695,7 +3695,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`dvp`
@@ -3726,7 +3726,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`dvp`
@@ -3757,7 +3757,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`dvp`
@@ -3777,7 +3777,7 @@
|
|===
-Определить, могут ли учетные данные субъекта создать vnode с указанным родительским каталогом, информацией о имени и атрибутами. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий. Этот вызов может выполняться в различных ситуациях, включая вызовы man:open[2] с O_CREAT, man:mkfifo[2] и другие.
+Определить, могут ли учётные данные субъекта создать vnode с указанным родительским каталогом, информацией о имени и атрибутами. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий. Этот вызов может выполняться в различных ситуациях, включая вызовы man:open[2] с O_CREAT, man:mkfifo[2] и другие.
[[mac-mpo-cred-check-vnode-delete]]
==== `mpo_check_vnode_delete`
@@ -3797,7 +3797,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`dvp`
@@ -3821,7 +3821,7 @@
|
|===
-Определить, может ли субъект с данными учетными данными удалить vnode из переданного родительского каталога и переданной информации о имени. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий. Этот вызов может быть выполнен в различных ситуациях, включая вызовы man:unlink[2] и man:rmdir[2]. Политики, реализующие эту точку входа, также должны реализовывать `mpo_check_rename_to` для авторизации удаления объектов в результате их переименования.
+Определить, может ли субъект с данными учётными данными удалить vnode из переданного родительского каталога и переданной информации о имени. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий. Этот вызов может быть выполнен в различных ситуациях, включая вызовы man:unlink[2] и man:rmdir[2]. Политики, реализующие эту точку входа, также должны реализовывать `mpo_check_rename_to` для авторизации удаления объектов в результате их переименования.
[[mac-mpo-cred-check-vnode-deleteacl]]
==== `mpo_check_vnode_deleteacl`
@@ -3840,7 +3840,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|Неизменяемый
|`vp`
@@ -3856,7 +3856,7 @@
|
|===
-Определить, могут ли учетные данные субъекта удалить ACL указанного типа из переданного vnode. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий.
+Определить, могут ли учётные данные субъекта удалить ACL указанного типа из переданного vnode. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий.
[[mac-mpo-cred-check-vnode-exec]]
==== `mpo_check_vnode_exec`
@@ -3875,7 +3875,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -3906,7 +3906,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -3941,7 +3941,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -3953,7 +3953,7 @@
|
|`attrnamespace`
-|Пространство имен расширенных атрибутов
+|Пространство имён расширенных атрибутов
|
|`name`
@@ -3965,7 +3965,7 @@
|
|===
-Определить, может ли субъект с указанными учетными данными получить расширенный атрибут с заданным пространством имен и именем из указанного vnode. Политики, реализующие маркировку с использованием расширенных атрибутов, могут требовать особой обработки операций с этими атрибутами. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий.
+Определить, может ли субъект с указанными учётными данными получить расширенный атрибут с заданным пространством имён и именем из указанного vnode. Политики, реализующие маркировку с использованием расширенных атрибутов, могут требовать особой обработки операций с этими атрибутами. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий.
[[mac-mpo-check-vnode-link]]
==== `mpo_check_vnode_link`
@@ -3985,7 +3985,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`dvp`
@@ -4028,7 +4028,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -4098,7 +4098,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -4129,11 +4129,11 @@
| Блокировка
|`active_cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`file_cred`
-|Учетные данные, связанные со структурой file
+|Учётные данные, связанные со структурой file
|
|`vp`
@@ -4165,7 +4165,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`dvp`
@@ -4209,7 +4209,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`dvp`
@@ -4256,7 +4256,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`socket`
@@ -4287,7 +4287,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`dvp`
@@ -4322,7 +4322,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -4338,7 +4338,7 @@
|
|===
-Определить, могут ли учетные данные субъекта выполнить операцию открытия переданного vnode с указанным режимом доступа. Возвращает 0 в случае успеха или значение errno при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий.
+Определить, могут ли учётные данные субъекта выполнить операцию открытия переданного vnode с указанным режимом доступа. Возвращает 0 в случае успеха или значение errno при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий.
[[mac-mpo-cred-check-vnode-readdir]]
==== `mpo_check_vnode_readdir`
@@ -4357,7 +4357,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`dvp`
@@ -4369,7 +4369,7 @@
|
|===
-Определить, могут ли учетные данные субъекта выполнить операцию `readdir` для переданного vnode каталога. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий.
+Определить, могут ли учётные данные субъекта выполнить операцию `readdir` для переданного vnode каталога. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий.
[[mac-mpo-cred-check-vnode-readlink]]
==== `mpo_check_vnode_readlink`
@@ -4388,7 +4388,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -4400,7 +4400,7 @@
|
|===
-Определить, могут ли учетные данные субъекта выполнить операцию `readlink` для переданного символьного vnode. Возвращает 0 в случае успеха или значение `errno` в случае ошибки. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий. Этот вызов может быть выполнен в различных ситуациях, включая явный вызов `readlink` пользовательским процессом или неявный `readlink` во время поиска имени процессом.
+Определить, могут ли учётные данные субъекта выполнить операцию `readlink` для переданного символьного vnode. Возвращает 0 в случае успеха или значение `errno` в случае ошибки. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий. Этот вызов может быть выполнен в различных ситуациях, включая явный вызов `readlink` пользовательским процессом или неявный `readlink` во время поиска имени процессом.
[[mac-mpo-cred-check-vnode-revoke]]
==== `mpo_check_vnode_revoke`
@@ -4419,7 +4419,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -4450,7 +4450,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -4489,7 +4489,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -4501,7 +4501,7 @@
|
|`attrnamespace`
-|Пространство имен расширенных атрибутов
+|Пространство имён расширенных атрибутов
|
|`name`
@@ -4513,7 +4513,7 @@
|
|===
-Определить, могут ли учетные данные субъекта установить расширенный атрибут с переданным именем и пространством имен на переданном vnode. Политики, реализующие метки безопасности, основанные на расширенных атрибутах, могут предусматривать дополнительные защиты для этих атрибутов. Кроме того, политикам следует избегать принятия решений на основе данных, на которые ссылается `uio`, так как существует потенциальное состояние гонки между этой проверкой и фактической операцией. `uio` также может быть `NULL`, если выполняется операция удаления. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий.
+Определить, могут ли учётные данные субъекта установить расширенный атрибут с переданным именем и пространством имён на переданном vnode. Политики, реализующие метки безопасности, основанные на расширенных атрибутах, могут предусматривать дополнительные защиты для этих атрибутов. Кроме того, политикам следует избегать принятия решений на основе данных, на которые ссылается `uio`, так как существует потенциальное состояние гонки между этой проверкой и фактической операцией. `uio` также может быть `NULL`, если выполняется операция удаления. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий.
[[mac-mpo-cred-check-vnode-setflags]]
==== `mpo_check_vnode_setflags`
@@ -4532,7 +4532,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -4567,7 +4567,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -4602,7 +4602,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -4622,7 +4622,7 @@
|
|===
-Определить, могут ли учетные данные субъекта установить переданный uid и переданный gid в качестве uid файла и gid файла для переданного vnode. Идентификаторы могут быть установлены в (`-1`) для запроса отсутствия обновления. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий.
+Определить, могут ли учётные данные субъекта установить переданный uid и переданный gid в качестве uid файла и gid файла для переданного vnode. Идентификаторы могут быть установлены в (`-1`) для запроса отсутствия обновления. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий.
[[mac-mpo-cred-check-vnode-setutimes]]
==== `mpo_check_vnode_setutimes`
@@ -4641,7 +4641,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -4679,7 +4679,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`proc`
@@ -4687,7 +4687,7 @@
|
|===
-Определить, могут ли учетные данные субъекта изменить параметры планирования переданного процесса. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки, EPERM при отсутствии привилегий или ESRCH для ограничения видимости.
+Определить, могут ли учётные данные субъекта изменить параметры планирования переданного процесса. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки, EPERM при отсутствии привилегий или ESRCH для ограничения видимости.
См. man:setpriority[2] для получения дополнительной информации.
@@ -4707,7 +4707,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`proc`
@@ -4738,7 +4738,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -4750,7 +4750,7 @@
|
|===
-Определить, могут ли учетные данные субъекта выполнять `stat` для переданного vnode. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий.
+Определить, могут ли учётные данные субъекта выполнять `stat` для переданного vnode. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий.
См. man:stat[2] для получения дополнительной информации.
@@ -4771,7 +4771,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`ifnet`
@@ -4810,7 +4810,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`ifnet`
@@ -4849,7 +4849,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|Неизменяемый
|`so`
@@ -4861,7 +4861,7 @@
|
|===
-Определить, могут ли учетные данные субъекта cred "видеть" переданный сокет (`socket`), используя функции системного мониторинга, такие как те, что применяются в man:netstat[8] и man:sockstat[1]. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии меток, EPERM при отсутствии привилегий или ESRCH для скрытия видимости.
+Определить, могут ли учётные данные субъекта cred "видеть" переданный сокет (`socket`), используя функции системного мониторинга, такие как те, что применяются в man:netstat[8] и man:sockstat[1]. Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при несоответствии меток, EPERM при отсутствии привилегий или ESRCH для скрытия видимости.
[[mac-mpo-check-system-acct]]
==== `mpo_check_system_acct`
@@ -4880,7 +4880,7 @@
| Блокировка
|`ucred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -4910,7 +4910,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|===
@@ -4932,7 +4932,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`howto`
@@ -4958,7 +4958,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|===
@@ -4981,7 +4981,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`vp`
@@ -5012,7 +5012,7 @@
| Блокировка
|`cred`
-|Учетные данные субъекта
+|Учётные данные субъекта
|
|`name`
@@ -5054,7 +5054,7 @@
[[mac-userland-arch]]
== Пользовательская архитектура
-В фреймворк TrustedBSD MAC входит ряд элементов, не зависящих от политик, включая интерфейсы MAC-библиотеки для абстрактного управления метками, изменения в управлении системными учетными данными и библиотеках входа в систему для поддержки назначения MAC-меток пользователям, а также набор инструментов для мониторинга и изменения меток процессов, файлов и сетевых интерфейсов. Более подробная информация о пользовательской архитектуре будет добавлена в этот раздел в ближайшее время.
+В фреймворк TrustedBSD MAC входит ряд элементов, не зависящих от политик, включая интерфейсы MAC-библиотеки для абстрактного управления метками, изменения в управлении системными учётными данными и библиотеках входа в систему для поддержки назначения MAC-меток пользователям, а также набор инструментов для мониторинга и изменения меток процессов, файлов и сетевых интерфейсов. Более подробная информация о пользовательской архитектуре будет добавлена в этот раздел в ближайшее время.
[[mac-userland-labels]]
=== API для управления метками, не зависящими от политики
@@ -5081,4 +5081,4 @@
[[mac-conclusion]]
== Заключение
-Фреймворк TrustedBSD MAC позволяет модулям ядра расширять политику безопасности системы высокоинтегрированным способом. Они могут делать это на основе существующих свойств объектов или данных меток, которые поддерживаются с помощью фреймворка MAC. Фреймворк достаточно гибкий для реализации различных типов политик, включая политики безопасности информационных потоков, такие как MLS и Biba, а также политики, основанные на существующих учетных данных BSD или защите файлов. Авторам политик может быть полезно ознакомиться с этой документацией, а также с существующими модулями безопасности при реализации новой службы безопасности.
+Фреймворк TrustedBSD MAC позволяет модулям ядра расширять политику безопасности системы высокоинтегрированным способом. Они могут делать это на основе существующих свойств объектов или данных меток, которые поддерживаются с помощью фреймворка MAC. Фреймворк достаточно гибкий для реализации различных типов политик, включая политики безопасности информационных потоков, такие как MLS и Biba, а также политики, основанные на существующих учётных данных BSD или защите файлов. Авторам политик может быть полезно ознакомиться с этой документацией, а также с существующими модулями безопасности при реализации новой службы безопасности.
diff --git a/documentation/content/ru/books/arch-handbook/mac/_index.po b/documentation/content/ru/books/arch-handbook/mac/_index.po
--- a/documentation/content/ru/books/arch-handbook/mac/_index.po
+++ b/documentation/content/ru/books/arch-handbook/mac/_index.po
@@ -1,12 +1,12 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025, 2026.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2025-05-01 19:56-0300\n"
-"PO-Revision-Date: 2025-11-12 04:45+0000\n"
+"PO-Revision-Date: 2026-03-04 20:01+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksarch-handbookmac_index/ru/>\n"
@@ -509,14 +509,14 @@
"данных объектов ядра используется для защиты меток безопасности MAC "
"Framework на объекте: например, метки MAC на сокетах защищаются с помощью "
"существующего мьютекса сокета. Аналогично, семантика параллельного доступа "
-"обычно идентична семантике контейнерных объектов: для учетных данных "
+"обычно идентична семантике контейнерных объектов: для учётных данных "
"поддерживается семантика копирования при записи для содержимого меток, как и "
-"для остальной структуры учетных данных. MAC Framework устанавливает "
+"для остальной структуры учётных данных. MAC Framework устанавливает "
"необходимые блокировки на объекты при вызове с ссылкой на объект. Авторам "
"политик необходимо учитывать эти семантики синхронизации, так как они иногда "
"ограничивают типы доступа к меткам: например, когда ссылка только для чтения "
-"на учетные данные передаётся политике через точку входа, разрешены только "
-"операции чтения для состояния метки, прикрепленного к учетным данным."
+"на учётные данные передаётся политике через точку входа, разрешены только "
+"операции чтения для состояния метки, прикрепленного к учётным данным."
#. type: Title ===
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:163
@@ -540,7 +540,7 @@
"entry points are not permitted to sleep, limiting the use of primitives in "
"those entry points to mutexes and wakeup operations."
msgstr ""
-"Модули политик должны быть написаны с учетом того, что множество потоков "
+"Модули политик должны быть написаны с учётом того, что множество потоков "
"ядра могут одновременно войти в одну или несколько точек входа политики из-"
"за параллельной и вытесняющей природы ядра FreeBSD. Если модуль политики "
"использует изменяемое состояние, это может потребовать применения примитивов "
@@ -639,7 +639,7 @@
"управления метками, что позволяет фреймворку предоставлять службу маркировки "
"модулям политик с относительно минимальными изменениями в подсистеме ядра, "
"управляющей объектом. Например, указатели меток были добавлены к процессам, "
-"учетным данным процессов, сокетам, каналам, vnode, Mbuf, сетевым "
+"учётным данным процессов, сокетам, каналам, vnode, Mbuf, сетевым "
"интерфейсам, очередям сборки IP-пакетов и множеству других структур, "
"связанных с безопасностью. Ядро также вызывает MAC Framework при принятии "
"важных решений по безопасности, позволяя модулям политик дополнять эти "
@@ -1363,7 +1363,7 @@
"Точки входа политики будут передавать ссылку на метку объекта вместе с самим "
"объектом. Это позволяет помеченным политикам не знать внутренней структуры "
"объекта, но при этом принимать решения на основе метки. Исключением из этого "
-"являются учетные данные процесса, для которые предполагается, что политики "
+"являются учётные данные процесса, для которые предполагается, что политики "
"понимают их, как объект безопасности первого класса в ядре."
#. type: Title ==
@@ -2167,7 +2167,7 @@
"Initialize the label for a newly instantiated user credential. Sleeping is "
"permitted."
msgstr ""
-"Инициализировать метку для вновь созданных учетных данных пользователя. "
+"Инициализировать метку для вновь созданных учётных данных пользователя. "
"Разрешено приостанавливать выполнение."
#. type: Title ====
@@ -2529,7 +2529,7 @@
"destroyed."
msgstr ""
"Уничтожить метку на дескрипторе BPF. В этой точке входа политика должна "
-"освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно "
+"освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно "
"было уничтожить."
#. type: Title ====
@@ -2561,8 +2561,8 @@
"should free any internal storage associated with `label` so that it may be "
"destroyed."
msgstr ""
-"Уничтожить метку на учетных данных. В этой точке входа модуль политики "
-"должен освободить любое внутреннее хранилище, связанное с `label`, чтобы ее "
+"Уничтожить метку на учётных данных. В этой точке входа модуль политики "
+"должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её "
"можно было уничтожить."
#. type: Title ====
@@ -2585,7 +2585,7 @@
"destroyed."
msgstr ""
"Уничтожить метку на записи devfs. В этой точке входа модуль политики должен "
-"освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно "
+"освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно "
"было уничтожить."
#. type: Title ====
@@ -2608,7 +2608,7 @@
"may be destroyed."
msgstr ""
"Уничтожить метку на удаленном интерфейсе. В этой точке входа модуль политики "
-"должен освободить любое внутреннее хранилище, связанное с `label`, чтобы ее "
+"должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её "
"можно было уничтожить."
#. type: Title ====
@@ -2631,7 +2631,7 @@
"may be destroyed."
msgstr ""
"Уничтожить метку в очереди IP-фрагментов. В этой точке входа модуль политики "
-"должен освободить любое внутреннее хранилище, связанное с `label`, чтобы ее "
+"должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её "
"можно было уничтожить."
#. type: Title ====
@@ -2654,7 +2654,7 @@
"destroyed."
msgstr ""
"Уничтожить метку в заголовке mbuf. В этой точке входа модуль политики должен "
-"освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно "
+"освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно "
"было уничтожить."
#. type: Title ====
@@ -2685,7 +2685,7 @@
"be destroyed."
msgstr ""
"Уничтожить метки на точке монтирования. В этой точке входа модуль политики "
-"должен освободить внутреннее хранилище, связанное с `mntlabel`, чтобы ее "
+"должен освободить внутреннее хранилище, связанное с `mntlabel`, чтобы её "
"можно было уничтожить."
#. type: delimited block - 4
@@ -2739,7 +2739,7 @@
"destroyed."
msgstr ""
"Уничтожить метку на сокете. В этой точке входа модуль политики должен "
-"освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно "
+"освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно "
"было уничтожить."
#. type: Title ====
@@ -2775,7 +2775,7 @@
msgstr ""
"Уничтожить метку однорангового узла на сокете. В этой точке входа модуль "
"политики должен освободить любое внутреннее хранилище, связанное с `label`, "
-"чтобы ее можно было уничтожить."
+"чтобы её можно было уничтожить."
#. type: Title ====
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1033
@@ -2833,7 +2833,7 @@
"destroyed."
msgstr ""
"Уничтожить метку на процессе. В этой точке входа модуль политики должен "
-"освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно "
+"освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно "
"было уничтожить."
#. type: Title ====
@@ -2856,7 +2856,7 @@
"destroyed."
msgstr ""
"Уничтожить метку на vnode. В этой точке входа модуль политики должен "
-"освободить любое внутреннее хранилище, связанное с `label`, чтобы ее можно "
+"освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно "
"было уничтожить."
#. type: Title ====
@@ -3978,7 +3978,7 @@
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:5310
#, no-wrap
msgid "Subject credential"
-msgstr "Учетные данные субъекта"
+msgstr "Учётные данные субъекта"
#. type: Table
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:1858
@@ -4170,7 +4170,7 @@
"Fill out the labels on the mount point being created by the passed subject "
"credential. This call will be made when a new file system is mounted."
msgstr ""
-"Заполнить метки на точке монтирования, создаваемой переданными учетными "
+"Заполнить метки на точке монтирования, создаваемой переданными учётными "
"данными субъекта. Этот вызов будет выполнен при монтировании новой файловой "
"системы."
@@ -4203,7 +4203,7 @@
"credential. This call will be made when the root file system is mounted, "
"after `mpo_create_mount;`."
msgstr ""
-"Заполнить метки на точке монтирования, создаваемой переданными учетными "
+"Заполнить метки на точке монтирования, создаваемой переданными учётными "
"данными субъекта. Этот вызов будет выполнен при монтировании корневой "
"файловой системы после `mpo_create_mount;`."
@@ -4274,8 +4274,8 @@
"Update the label on the passed vnode given the passed update vnode label and "
"the passed subject credential."
msgstr ""
-"Обновить метку на переданном vnode с учетом переданной обновленной метки "
-"vnode и переданных учетных данных субъекта."
+"Обновить метку на переданном vnode с учётом переданной обновленной метки "
+"vnode и переданных учётных данных субъекта."
#. type: Title =====
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2024
@@ -4595,7 +4595,7 @@
"Set the label on a newly created pipe from the passed subject credential. "
"This call is made when a new pipe is created."
msgstr ""
-"Установить метку на только что созданном канале из переданных учетных данных "
+"Установить метку на только что созданном канале из переданных учётных данных "
"субъекта. Этот вызов выполняется при создании нового канала."
#. type: Title =====
@@ -4656,7 +4656,7 @@
"Set the label on a newly created socket from the passed subject credential. "
"This call is made when a socket is created."
msgstr ""
-"Установить метку на новом сокете из переданных учетных данных субъекта. Этот "
+"Установить метку на новом сокете из переданных учётных данных субъекта. Этот "
"вызов выполняется при создании сокета."
#. type: Title =====
@@ -5681,7 +5681,7 @@
"label, `newlabel`, and the passed subject credential, `cred`."
msgstr ""
"Обновить метку сетевого интерфейса, `ifnet`, на основе переданной новой "
-"метки, `newlabel`, и переданных учетных данных субъекта, `cred`."
+"метки, `newlabel`, и переданных учётных данных субъекта, `cred`."
#. type: Title =====
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2843
@@ -5757,7 +5757,7 @@
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2897
#, no-wrap
msgid "Parent subject credential"
-msgstr "Учетные данные субъекта‐родителя"
+msgstr "Учётные данные субъекта‐родителя"
#. type: Table
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2900
@@ -5812,7 +5812,7 @@
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2927
#, no-wrap
msgid "Existing subject credential"
-msgstr "Учетные данные существующего субъекта"
+msgstr "Учётные данные существующего субъекта"
#. type: Table
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2930
@@ -5825,7 +5825,7 @@
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2931
#, no-wrap
msgid "New subject credential to be labeled"
-msgstr "Учетные данные нового субъекта для добавления метки"
+msgstr "Учётные данные нового субъекта для добавления метки"
#. type: Table
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2935
@@ -5848,13 +5848,13 @@
"`mpo_create_cred`, even if they do not implement "
"`mpo_execve_will_transition`."
msgstr ""
-"Обновить метку учетных данных вновь созданного субъекта (`new`) на основе "
-"переданных учетных данных существующего субъекта (`old`) в соответствии с "
+"Обновить метку учётных данных вновь созданного субъекта (`new`) на основе "
+"переданных учётных данных существующего субъекта (`old`) в соответствии с "
"переходом метки, вызванным выполнением переданного vnode (`vp`). Этот вызов "
"происходит, когда процесс выполняет переданный vnode, и одна из политик "
"возвращает успех из точки входа `mpo_execve_will_transition`. Политики могут "
"выбрать реализацию этого вызова просто путем вызова `mpo_create_cred` и "
-"передачи двух субъектов учетных данных, чтобы не реализовывать событие "
+"передачи двух субъектов учётных данных, чтобы не реализовывать событие "
"перехода. Политики не должны оставлять эту точку входа нереализованной, если "
"они реализуют `mpo_create_cred`, даже если они не реализуют "
"`mpo_execve_will_transition`."
@@ -5879,7 +5879,7 @@
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2965
#, no-wrap
msgid "Subject credential prior to man:execve[2]"
-msgstr "Учетные данные субъекта перед man:execve[2]"
+msgstr "Учётные данные субъекта перед man:execve[2]"
#. type: Plain text
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:2979
@@ -5892,7 +5892,7 @@
"a result of another policy requesting a transition."
msgstr ""
"Определить, будет ли политика выполнять событие перехода в результате "
-"выполнения переданного vnode с использованием переданных учетных данных "
+"выполнения переданного vnode с использованием переданных учётных данных "
"субъекта. Вернуть 1, если переход требуется, и 0, если нет. Даже если "
"политика возвращает 0, она должна корректно обрабатывать неожиданный вызов "
"`mpo_execve_transition`, так как этот вызов может произойти из-за запроса "
@@ -5915,7 +5915,7 @@
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3019
#, no-wrap
msgid "Subject credential to be filled in"
-msgstr "Учетные данные субъекта для заполнения"
+msgstr "Учётные данные субъекта для заполнения"
#. type: Plain text
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3001
@@ -5923,7 +5923,7 @@
"Create the subject credential of process 0, the parent of all kernel "
"processes."
msgstr ""
-"Создать учетные данные субъекта процесса 0, родителя всех процессов ядра."
+"Создать учётные данные субъекта процесса 0, родителя всех процессов ядра."
#. type: Title =====
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3003
@@ -5942,7 +5942,7 @@
msgid ""
"Create the subject credential of process 1, the parent of all user processes."
msgstr ""
-"Создать учетные данные субъекта процесса 1, родителя всех пользовательских "
+"Создать учётные данные субъекта процесса 1, родителя всех пользовательских "
"процессов."
#. type: Title =====
@@ -5967,7 +5967,7 @@
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3049
msgid "Update the label on a subject credential from the passed update label."
msgstr ""
-"Обновить метку на учетных данных субъекта из переданной обновляемой метки."
+"Обновить метку на учётных данных субъекта из переданной обновляемой метки."
#. type: Title ===
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3051
@@ -6609,7 +6609,7 @@
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3645
#, no-wrap
msgid "Object credential"
-msgstr "Учетные данные объекта"
+msgstr "Учётные данные объекта"
#. type: Plain text
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:3652
@@ -6680,7 +6680,7 @@
"Determine whether the subject credential can relabel the passed network "
"interface to the passed label update."
msgstr ""
-"Определить, может ли учетные данные субъекта перемаркировать переданный "
+"Определить, может ли учётные данные субъекта перемаркировать переданный "
"сетевой интерфейс в соответствии с переданным обновлением метки."
#. type: Title ====
@@ -6745,7 +6745,7 @@
"Determine whether the subject credential can relabel itself to the passed "
"label update."
msgstr ""
-"Определить, могут ли учетные данные субъекта перемаркировать себя в "
+"Определить, могут ли учётные данные субъекта перемаркировать себя в "
"соответствии с переданным обновлением метки."
#. type: Title ====
@@ -6845,7 +6845,7 @@
"determine what file systems to exclude from listings of file systems, such "
"as when man:getfsstat[2] is invoked."
msgstr ""
-"Определить, могут ли учетные данные субъекта видеть результаты выполнения "
+"Определить, могут ли учётные данные субъекта видеть результаты выполнения "
"statfs для файловой системы. Возвращает 0 при успехе или значение `errno` "
"при ошибке. Рекомендуемые ошибки: EACCES при несоответствии меток или EPERM "
"при отсутствии привилегий. Этот вызов может выполняться в различных "
@@ -6938,7 +6938,7 @@
"lack of privilege."
msgstr ""
"Определить, как должны возвращаться вызовы man:access[2] и связанные вызовы "
-"для субъекта с указанными учетными данными при выполнении на переданном "
+"для субъекта с указанными учётными данными при выполнении на переданном "
"vnode с использованием переданных флагов доступа. Обычно это должно быть "
"реализовано с использованием той же семантики, что и в `mpo_check_vnode_open`"
". Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые "
@@ -7076,7 +7076,7 @@
"privilege. This call may be made in a number of situations, including as a "
"result of calls to man:open[2] with O_CREAT, man:mkfifo[2], and others."
msgstr ""
-"Определить, могут ли учетные данные субъекта создать vnode с указанным "
+"Определить, могут ли учётные данные субъекта создать vnode с указанным "
"родительским каталогом, информацией о имени и атрибутами. Возвращает 0 при "
"успехе или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при "
"несоответствии метки или EPERM при отсутствии привилегий. Этот вызов может "
@@ -7119,7 +7119,7 @@
"`mpo_check_rename_to` to authorize deletion of objects as a result of being "
"the target of a rename."
msgstr ""
-"Определить, может ли субъект с данными учетными данными удалить vnode из "
+"Определить, может ли субъект с данными учётными данными удалить vnode из "
"переданного родительского каталога и переданной информации о имени. "
"Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые "
"ошибки: EACCES при несоответствии метки или EPERM при отсутствии привилегий. "
@@ -7168,7 +7168,7 @@
"failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of "
"privilege."
msgstr ""
-"Определить, могут ли учетные данные субъекта удалить ACL указанного типа из "
+"Определить, могут ли учётные данные субъекта удалить ACL указанного типа из "
"переданного vnode. Возвращает 0 при успехе или значение `errno` при ошибке. "
"Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при "
"отсутствии привилегий."
@@ -7268,7 +7268,7 @@
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4773
#, no-wrap
msgid "Extended attribute namespace"
-msgstr "Пространство имен расширенных атрибутов"
+msgstr "Пространство имён расширенных атрибутов"
#. type: Table
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4210
@@ -7301,8 +7301,8 @@
"or an `errno` value for failure. Suggested failure: EACCES for label "
"mismatch, or EPERM for lack of privilege."
msgstr ""
-"Определить, может ли субъект с указанными учетными данными получить "
-"расширенный атрибут с заданным пространством имен и именем из указанного "
+"Определить, может ли субъект с указанными учётными данными получить "
+"расширенный атрибут с заданным пространством имён и именем из указанного "
"vnode. Политики, реализующие маркировку с использованием расширенных "
"атрибутов, могут требовать особой обработки операций с этими атрибутами. "
"Возвращает 0 при успехе или значение `errno` при ошибке. Рекомендуемые "
@@ -7495,7 +7495,7 @@
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4389
#, no-wrap
msgid "Credential associated with the struct file"
-msgstr "Учетные данные, связанные со структурой file"
+msgstr "Учётные данные, связанные со структурой file"
#. type: Table
#: documentation/content/en/books/arch-handbook/mac/_index.adoc:4393
@@ -7694,7 +7694,7 @@
"errno value for failure. Suggested failure: EACCES for label mismatch, or "
"EPERM for lack of privilege."
msgstr ""
-"Определить, могут ли учетные данные субъекта выполнить операцию открытия "
+"Определить, могут ли учётные данные субъекта выполнить операцию открытия "
"переданного vnode с указанным режимом доступа. Возвращает 0 в случае успеха "
"или значение errno при ошибке. Рекомендуемые ошибки: EACCES при "
"несоответствии метки или EPERM при отсутствии привилегий."
@@ -7729,7 +7729,7 @@
"for failure. Suggested failure: EACCES for label mismatch, or EPERM for "
"lack of privilege."
msgstr ""
-"Определить, могут ли учетные данные субъекта выполнить операцию `readdir` "
+"Определить, могут ли учётные данные субъекта выполнить операцию `readdir` "
"для переданного vnode каталога. Возвращает 0 при успехе или значение `errno` "
"при ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM "
"при отсутствии привилегий."
@@ -7760,7 +7760,7 @@
"explicit `readlink` call by the user process, or as a result of an implicit "
"`readlink` during a name lookup by the process."
msgstr ""
-"Определить, могут ли учетные данные субъекта выполнить операцию `readlink` "
+"Определить, могут ли учётные данные субъекта выполнить операцию `readlink` "
"для переданного символьного vnode. Возвращает 0 в случае успеха или значение "
"`errno` в случае ошибки. Рекомендуемые ошибки: EACCES при несоответствии "
"метки или EPERM при отсутствии привилегий. Этот вызов может быть выполнен в "
@@ -7866,8 +7866,8 @@
"for success, or an `errno` value for failure. Suggested failure: EACCES for "
"label mismatch, or EPERM for lack of privilege."
msgstr ""
-"Определить, могут ли учетные данные субъекта установить расширенный атрибут "
-"с переданным именем и пространством имен на переданном vnode. Политики, "
+"Определить, могут ли учётные данные субъекта установить расширенный атрибут "
+"с переданным именем и пространством имён на переданном vnode. Политики, "
"реализующие метки безопасности, основанные на расширенных атрибутах, могут "
"предусматривать дополнительные защиты для этих атрибутов. Кроме того, "
"политикам следует избегать принятия решений на основе данных, на которые "
@@ -8000,7 +8000,7 @@
"failure. Suggested failure: EACCES for label mismatch, or EPERM for lack of "
"privilege."
msgstr ""
-"Определить, могут ли учетные данные субъекта установить переданный uid и "
+"Определить, могут ли учётные данные субъекта установить переданный uid и "
"переданный gid в качестве uid файла и gid файла для переданного vnode. "
"Идентификаторы могут быть установлены в (`-1`) для запроса отсутствия "
"обновления. Возвращает 0 при успехе или значение `errno` при ошибке. "
@@ -8086,7 +8086,7 @@
"for failure. Suggested failure: EACCES for label mismatch, EPERM for lack "
"of privilege, or ESRCH to limit visibility."
msgstr ""
-"Определить, могут ли учетные данные субъекта изменить параметры планирования "
+"Определить, могут ли учётные данные субъекта изменить параметры планирования "
"переданного процесса. Возвращает 0 при успехе или значение `errno` при "
"ошибке. Рекомендуемые ошибки: EACCES при несоответствии метки, EPERM при "
"отсутствии привилегий или ESRCH для ограничения видимости."
@@ -8158,7 +8158,7 @@
"Return 0 for success, or an `errno` value for failure. Suggested failure: "
"EACCES for label mismatch, or EPERM for lack of privilege."
msgstr ""
-"Определить, могут ли учетные данные субъекта выполнять `stat` для "
+"Определить, могут ли учётные данные субъекта выполнять `stat` для "
"переданного vnode. Возвращает 0 при успехе или значение `errno` при ошибке. "
"Рекомендуемые ошибки: EACCES при несоответствии метки или EPERM при "
"отсутствии привилегий."
@@ -8262,7 +8262,7 @@
"value for failure. Suggested failure: EACCES for label mismatches, EPERM "
"for lack of privilege, or ESRCH to hide visibility."
msgstr ""
-"Определить, могут ли учетные данные субъекта cred \"видеть\" переданный "
+"Определить, могут ли учётные данные субъекта cred \"видеть\" переданный "
"сокет (`socket`), используя функции системного мониторинга, такие как те, "
"что применяются в man:netstat[8] и man:sockstat[1]. Возвращает 0 при успехе "
"или значение `errno` при ошибке. Рекомендуемые ошибки: EACCES при "
@@ -8505,7 +8505,7 @@
msgstr ""
"В фреймворк TrustedBSD MAC входит ряд элементов, не зависящих от политик, "
"включая интерфейсы MAC-библиотеки для абстрактного управления метками, "
-"изменения в управлении системными учетными данными и библиотеках входа в "
+"изменения в управлении системными учётными данными и библиотеках входа в "
"систему для поддержки назначения MAC-меток пользователям, а также набор "
"инструментов для мониторинга и изменения меток процессов, файлов и сетевых "
"интерфейсов. Более подробная информация о пользовательской архитектуре будет "
@@ -8653,6 +8653,6 @@
"поддерживаются с помощью фреймворка MAC. Фреймворк достаточно гибкий для "
"реализации различных типов политик, включая политики безопасности "
"информационных потоков, такие как MLS и Biba, а также политики, основанные "
-"на существующих учетных данных BSD или защите файлов. Авторам политик может "
+"на существующих учётных данных BSD или защите файлов. Авторам политик может "
"быть полезно ознакомиться с этой документацией, а также с существующими "
"модулями безопасности при реализации новой службы безопасности."
diff --git a/documentation/content/ru/books/arch-handbook/pccard/_index.adoc b/documentation/content/ru/books/arch-handbook/pccard/_index.adoc
--- a/documentation/content/ru/books/arch-handbook/pccard/_index.adoc
+++ b/documentation/content/ru/books/arch-handbook/pccard/_index.adoc
@@ -96,7 +96,7 @@
product ARCHOS ARC_ATAPI 0x0043 MiniCD
....
-Ключевое слово `product` следует за именем производителя, повторяющимся сверху. После него идет название продукта, которое используется драйвером и должно быть допустимым идентификатором в C, но также может начинаться с цифры. Как и в случае с производителями, шестнадцатеричный идентификатор продукта для этой карты следует тем же соглашениям для `0xffffffff` и `0xffff`. Наконец, идет строковое описание самого устройства. Эта строка обычно не используется в FreeBSD, поскольку драйвер шины pccard в FreeBSD формирует строку из читаемых человеком записей CIS, но она может быть использована в редких случаях, когда этого недостаточно. Продукты перечислены в алфавитном порядке по производителю, затем в числовом порядке по идентификатору продукта. Перед записями каждого производителя есть комментарий в C, а между записями — пустая строка.
+Ключевое слово `product` следует за именем производителя, повторяющимся сверху. После него идёт название продукта, которое используется драйвером и должно быть допустимым идентификатором в C, но также может начинаться с цифры. Как и в случае с производителями, шестнадцатеричный идентификатор продукта для этой карты следует тем же соглашениям для `0xffffffff` и `0xffff`. Наконец, идёт строковое описание самого устройства. Эта строка обычно не используется в FreeBSD, поскольку драйвер шины pccard в FreeBSD формирует строку из читаемых человеком записей CIS, но она может быть использована в редких случаях, когда этого недостаточно. Продукты перечислены в алфавитном порядке по производителю, затем в числовом порядке по идентификатору продукта. Перед записями каждого производителя есть комментарий в C, а между записями — пустая строка.
Третий раздел аналогичен предыдущему разделу производителей, но все числовые идентификаторы производителей установлены в `-1`, что означает "совпадение с любым найденным" в коде шины pccard FreeBSD. Поскольку это идентификаторы C, их имена должны быть уникальными. В остальном формат идентичен первому разделу файла.
@@ -206,4 +206,4 @@
[[pccard-pr]]
=== Отправка кода для нового устройства
-Пожалуйста, не отправляйте записи о новых устройствах автору напрямую. Вместо этого оформите их как PR и сообщите автору номер PR для учета. Это гарантирует, что записи не будут потеряны. При отправке PR нет необходимости включать в патч diff-файлы [.filename]#pccardevs.h#, так как они будут перегенерированы. Однако необходимо включить описание устройства, а также патчи для клиентского драйвера. Если название устройства неизвестно, используйте имя OEM99, и автор скорректирует OEM99 после изучения. Коммиттеры не должны коммитить OEM99, а вместо этого найти наибольший OEM-номер и закоммитить на единицу больше.
+Пожалуйста, не отправляйте записи о новых устройствах автору напрямую. Вместо этого оформите их как PR и сообщите автору номер PR для учёта. Это гарантирует, что записи не будут потеряны. При отправке PR нет необходимости включать в патч diff-файлы [.filename]#pccardevs.h#, так как они будут перегенерированы. Однако необходимо включить описание устройства, а также патчи для клиентского драйвера. Если название устройства неизвестно, используйте имя OEM99, и автор скорректирует OEM99 после изучения. Коммиттеры не должны коммитить OEM99, а вместо этого найти наибольший OEM-номер и закоммитить на единицу больше.
diff --git a/documentation/content/ru/books/arch-handbook/pccard/_index.po b/documentation/content/ru/books/arch-handbook/pccard/_index.po
--- a/documentation/content/ru/books/arch-handbook/pccard/_index.po
+++ b/documentation/content/ru/books/arch-handbook/pccard/_index.po
@@ -1,12 +1,12 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025, 2026.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2025-05-01 19:56-0300\n"
-"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"PO-Revision-Date: 2026-03-05 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksarch-handbookpccard_index/ru/>\n"
@@ -300,11 +300,11 @@
"manufacturer's entries and there is a blank line between entries."
msgstr ""
"Ключевое слово `product` следует за именем производителя, повторяющимся "
-"сверху. После него идет название продукта, которое используется драйвером и "
+"сверху. После него идёт название продукта, которое используется драйвером и "
"должно быть допустимым идентификатором в C, но также может начинаться с "
"цифры. Как и в случае с производителями, шестнадцатеричный идентификатор "
"продукта для этой карты следует тем же соглашениям для `0xffffffff` и "
-"`0xffff`. Наконец, идет строковое описание самого устройства. Эта строка "
+"`0xffff`. Наконец, идёт строковое описание самого устройства. Эта строка "
"обычно не используется в FreeBSD, поскольку драйвер шины pccard в FreeBSD "
"формирует строку из читаемых человеком записей CIS, но она может быть "
"использована в редких случаях, когда этого недостаточно. Продукты "
@@ -705,7 +705,7 @@
"highest OEM entry and commit one more than that."
msgstr ""
"Пожалуйста, не отправляйте записи о новых устройствах автору напрямую. "
-"Вместо этого оформите их как PR и сообщите автору номер PR для учета. Это "
+"Вместо этого оформите их как PR и сообщите автору номер PR для учёта. Это "
"гарантирует, что записи не будут потеряны. При отправке PR нет необходимости "
"включать в патч diff-файлы [.filename]#pccardevs.h#, так как они будут "
"перегенерированы. Однако необходимо включить описание устройства, а также "
diff --git a/documentation/content/ru/books/arch-handbook/scsi/_index.adoc b/documentation/content/ru/books/arch-handbook/scsi/_index.adoc
--- a/documentation/content/ru/books/arch-handbook/scsi/_index.adoc
+++ b/documentation/content/ru/books/arch-handbook/scsi/_index.adoc
@@ -62,7 +62,7 @@
Документ иллюстрирован примерами на псевдокоде. Хотя иногда примеры содержат много деталей и выглядят как настоящий код, это всё ещё псевдокод. Он был написан, чтобы продемонстрировать концепции в понятной форме. Для реального драйвера могут быть более модульные и эффективные подходы. Также он абстрагируется от деталей оборудования, а также от вопросов, которые могли бы затмить демонстрируемые концепции или которые предполагается описать в других главах руководства разработчика. Такие детали обычно показаны в виде вызовов функций с описательными именами, комментариев или псевдооператоров. К счастью, полные примеры из реальной жизни со всеми деталями можно найти в реальных драйверах.
[[scsi-general]]
-== Общая Архитектура
+== Общая архитектура
CAM означает Common Access Method (Общий Метод Доступа). Это универсальный способ адресации шин ввода-вывода в стиле SCSI. Это позволяет отделить общие драйверы устройств от драйверов, управляющих шиной ввода-вывода: например, драйвер диска получает возможность управлять дисками как на SCSI, IDE, так и на любой другой шине, так что часть драйвера диска не нужно переписывать (или копировать и изменять) для каждой новой шины ввода-вывода. Таким образом, двумя наиболее важными активными сущностями являются:
@@ -255,7 +255,7 @@
`xpt_done()` не обязательно вызывать из `xxx_action()`: Например, запрос ввода-вывода может быть поставлен в очередь внутри драйвера SIM и/или его SCSI-контроллера. Затем, когда устройство пошлет прерывание, сигнализирующее о завершении обработки этого запроса, `xpt_done()` может быть вызван из процедуры обработки прерывания.
-На самом деле, статус CCB не только присваивается в качестве кода возврата, но и CCB всегда имеет какой-то статус. Перед тем как CCB передаётся в процедуру `xxx_action()`, он получает статус CCB_REQ_INPROG, означающий, что запрос находится в процессе выполнения. В [.filename]#/sys/cam/cam.h# определено удивительно большое количество значений статуса, которые должны детально отражать состояние запроса. Что еще интереснее, статус фактически представляет собой "побитовое ИЛИ" перечисленного значения статуса (младшие 6 бит) и возможных дополнительных флагов (старшие биты). Перечисленные значения будут подробно рассмотрены далее. Их краткое описание можно найти в разделе "Сводка ошибок". Возможные флаги статуса:
+На самом деле, статус CCB не только присваивается в качестве кода возврата, но и CCB всегда имеет какой-то статус. Перед тем как CCB передаётся в процедуру `xxx_action()`, он получает статус CCB_REQ_INPROG, означающий, что запрос находится в процессе выполнения. В [.filename]#/sys/cam/cam.h# определено удивительно большое количество значений статуса, которые должны детально отражать состояние запроса. Что ещё интереснее, статус фактически представляет собой "побитовое ИЛИ" перечисленного значения статуса (младшие 6 бит) и возможных дополнительных флагов (старшие биты). Перечисленные значения будут подробно рассмотрены далее. Их краткое описание можно найти в разделе "Сводка ошибок". Возможные флаги статуса:
* _CAM_DEV_QFRZN_ - если драйвер SIM получает серьёзную ошибку (например, устройство не отвечает на выборку или нарушает протокол SCSI) при обработке CCB, он должен заморозить очередь запросов, вызвав `xpt_freeze_simq()`, вернуть другие поставленные в очередь, но ещё не обработанные CCB для этого устройства обратно в очередь CAM, затем установить этот флаг для проблемного CCB и вызвать `xpt_done()`. Этот флаг заставляет подсистему CAM разморозить очередь после обработки ошибки.
* _CAM_AUTOSNS_VALID_ - если устройство вернуло состояние ошибки и флаг CAM_DIS_AUTOSENSE не установлен в CCB, драйвер SIM должен автоматически выполнить команду REQUEST SENSE, чтобы извлечь данные sense (расширенную информацию об ошибке) из устройства. Если попытка была успешной, данные sense должны быть сохранены в CCB, а этот флаг установлен.
@@ -282,7 +282,7 @@
#define ccb_hcb spriv_ptr1 /* for hardware control block */
....
-Наиболее распространенные запросы в режиме инициатора:
+Наиболее распространённые запросы в режиме инициатора:
=== _XPT_SCSI_IO_ — выполнить транзакцию ввода-вывода
@@ -673,7 +673,7 @@
return;
....
-Вот и все, что касается запроса ABORT, хотя есть еще один момент. Поскольку сообщение ABORT очищает все текущие транзакции на LUN, нам необходимо пометить все остальные активные транзакции на этом LUN как прерванные. Это должно быть выполнено в процедуре аппаратного прерывания после того, как транзакция будет прервана.
+Вот и все, что касается запроса ABORT, хотя есть ещё один момент. Поскольку сообщение ABORT очищает все текущие транзакции на LUN, нам необходимо пометить все остальные активные транзакции на этом LUN как прерванные. Это должно быть выполнено в процедуре аппаратного прерывания после того, как транзакция будет прервана.
Реализация прерывания CCB в виде функции может быть довольно хорошей идеей, эта функция может быть повторно использована, если транзакция ввода-вывода превысит время ожидания. Единственное различие будет в том, что для транзакции с истекшим временем ожидания будет возвращён статус CAM_CMD_TIMEOUT. Тогда код в case XPT_ABORT будет небольшим, например:
@@ -842,7 +842,7 @@
return;
....
-Это дает общее представление, точный расчет зависит от особенностей конкретной BIOS. Если BIOS не предоставляет возможности установить флаг "расширенной трансляции" в EEPROM, этот флаг обычно следует считать равным 1. Другие популярные геометрии:
+Это даёт общее представление, точный расчет зависит от особенностей конкретной BIOS. Если BIOS не предоставляет возможности установить флаг "расширенной трансляции" в EEPROM, этот флаг обычно следует считать равным 1. Другие популярные геометрии:
[.programlisting]
....
@@ -850,7 +850,7 @@
16 heads, 63 sectors - old controllers
....
-Некоторые системные BIOS и SCSI BIOS конфликтуют друг с другом с переменным успехом. Например, комбинация Symbios 875/895 SCSI и Phoenix BIOS может выдавать геометрию 128/63 после включения питания и 255/63 после жесткого сброса или мягкой перезагрузки.
+Некоторые системные BIOS и SCSI BIOS конфликтуют друг с другом с переменным успехом. Например, комбинация Symbios 875/895 SCSI и Phoenix BIOS может выдавать геометрию 128/63 после включения питания и 255/63 после жёсткого сброса или мягкой перезагрузки.
=== _XPT_PATH_INQ_ — запрос пути, другими словами, получение свойств драйвера SIM и контроллера SCSI (также известного как HBA - Host Bus Adapter)
@@ -864,7 +864,7 @@
** PI_SDTR_ABLE - может согласовать синхронную скорость передачи
** PI_LINKED_CDB - поддерживает связанные команды
** PI_TAG_ABLE - поддерживает помеченные команды
-** PI_SOFT_RST — поддерживает альтернативу мягкого сброса (жесткий сброс и мягкий сброс являются взаимоисключающими в пределах шины SCSI)
+** PI_SOFT_RST — поддерживает альтернативу мягкого сброса (жёсткий сброс и мягкий сброс являются взаимоисключающими в пределах шины SCSI)
* target_sprt - флаги поддержки целевого режима, 0 если не поддерживается
* hba_misc - различные функции контроллера:
** PIM_SCANHILO - сканирование шины от высокого ID к низкому ID
diff --git a/documentation/content/ru/books/arch-handbook/scsi/_index.po b/documentation/content/ru/books/arch-handbook/scsi/_index.po
--- a/documentation/content/ru/books/arch-handbook/scsi/_index.po
+++ b/documentation/content/ru/books/arch-handbook/scsi/_index.po
@@ -1,12 +1,12 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025, 2026.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2025-05-01 19:56-0300\n"
-"PO-Revision-Date: 2025-11-12 04:45+0000\n"
+"PO-Revision-Date: 2026-03-04 20:01+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksarch-handbookscsi_index/ru/>\n"
@@ -106,7 +106,7 @@
#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:73
#, no-wrap
msgid "General Architecture"
-msgstr "Общая Архитектура"
+msgstr "Общая архитектура"
#. type: Plain text
#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:79
@@ -833,7 +833,7 @@
"процедуру `xxx_action()`, он получает статус CCB_REQ_INPROG, означающий, что "
"запрос находится в процессе выполнения. В [.filename]#/sys/cam/cam.h# "
"определено удивительно большое количество значений статуса, которые должны "
-"детально отражать состояние запроса. Что еще интереснее, статус фактически "
+"детально отражать состояние запроса. Что ещё интереснее, статус фактически "
"представляет собой \"побитовое ИЛИ\" перечисленного значения статуса ("
"младшие 6 бит) и возможных дополнительных флагов (старшие биты). "
"Перечисленные значения будут подробно рассмотрены далее. Их краткое описание "
@@ -1001,7 +1001,7 @@
#. type: Plain text
#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:347
msgid "The most common initiator mode requests are:"
-msgstr "Наиболее распространенные запросы в режиме инициатора:"
+msgstr "Наиболее распространённые запросы в режиме инициатора:"
#. type: Title ===
#: documentation/content/en/books/arch-handbook/scsi/_index.adoc:348
@@ -2157,7 +2157,7 @@
"all the other active transactions on this LUN as aborted. That should be "
"done in the interrupt routine, after the transaction gets aborted."
msgstr ""
-"Вот и все, что касается запроса ABORT, хотя есть еще один момент. Поскольку "
+"Вот и все, что касается запроса ABORT, хотя есть ещё один момент. Поскольку "
"сообщение ABORT очищает все текущие транзакции на LUN, нам необходимо "
"пометить все остальные активные транзакции на этом LUN как прерванные. Это "
"должно быть выполнено в процедуре аппаратного прерывания после того, как "
@@ -2711,7 +2711,7 @@
"translation\" flag in EEPROM this flag should normally be assumed equal to "
"1. Other popular geometries are:"
msgstr ""
-"Это дает общее представление, точный расчет зависит от особенностей "
+"Это даёт общее представление, точный расчет зависит от особенностей "
"конкретной BIOS. Если BIOS не предоставляет возможности установить флаг "
"\"расширенной трансляции\" в EEPROM, этот флаг обычно следует считать равным "
"1. Другие популярные геометрии:"
@@ -2736,7 +2736,7 @@
msgstr ""
"Некоторые системные BIOS и SCSI BIOS конфликтуют друг с другом с переменным "
"успехом. Например, комбинация Symbios 875/895 SCSI и Phoenix BIOS может "
-"выдавать геометрию 128/63 после включения питания и 255/63 после жесткого "
+"выдавать геометрию 128/63 после включения питания и 255/63 после жёсткого "
"сброса или мягкой перезагрузки."
#. type: Title ===
@@ -2804,7 +2804,7 @@
"PI_SOFT_RST - supports soft reset alternative (hard reset and soft reset are "
"mutually exclusive within a SCSI bus)"
msgstr ""
-"PI_SOFT_RST — поддерживает альтернативу мягкого сброса (жесткий сброс и "
+"PI_SOFT_RST — поддерживает альтернативу мягкого сброса (жёсткий сброс и "
"мягкий сброс являются взаимоисключающими в пределах шины SCSI)"
#. type: Plain text
diff --git a/documentation/content/ru/books/arch-handbook/smp/_index.adoc b/documentation/content/ru/books/arch-handbook/smp/_index.adoc
--- a/documentation/content/ru/books/arch-handbook/smp/_index.adoc
+++ b/documentation/content/ru/books/arch-handbook/smp/_index.adoc
@@ -83,7 +83,7 @@
Если вам нужна блокировка для проверки состояния переменной, чтобы можно было выполнить действие на основе прочитанного состояния, вы не можете просто удерживать блокировку во время чтения переменной, а затем снять блокировку перед выполнением действия на основе прочитанного значения. Как только вы снимаете блокировку, переменная может измениться, что сделает ваше решение недействительным. Таким образом, вы должны удерживать блокировку как во время чтения переменной, так и во время выполнения действия в результате проверки.
[[smp-design]]
-== Общая Архитектура и Дизайн
+== Общая архитектура и дизайн
=== Обработка прерываний
@@ -138,7 +138,7 @@
Критические секции в настоящее время предотвращают миграцию, поскольку они не допускают переключения контекстов. Однако это может быть слишком строгим требованием в некоторых случаях, так как критическая секция также эффективно блокирует потоки прерываний на текущем процессоре. В результате был предоставлен другой API, позволяющий текущему потоку указать, что если он будет вытеснен, он не должен мигрировать на другой CPU.
-Этот API известен как закрепление потока и предоставляется планировщиком. API состоит из двух функций: `sched_pin` и `sched_unpin`. Эти функции управляют счетчиком вложенности `td_pinned` для каждого потока. Поток считается закрепленным, когда его счетчик вложенности больше нуля, и прекращает быть закрепленным с нулевым счетчиком вложенности. Каждая реализация планировщика должна гарантировать, что закрепленные потоки выполняются только на том CPU, на котором они выполнялись при первом вызове `sched_pin`. Поскольку счетчик вложенности изменяется только самим потоком и читается другими потоками только тогда, когда закрепленный поток не выполняется, но удерживается `sched_lock`, то `td_pinned` не требует блокировки. Функция `sched_pin` увеличивает счетчик вложенности, а `sched_unpin` уменьшает его. Обратите внимание, что эти функции работают только с текущим потоком и привязывают текущий поток к CPU, на котором он выполняется в данный момент. Для привязки произвольного потока к определенному CPU следует использовать функции `sched_bind` и `sched_unbind`.
+Этот API известен как закрепление потока и предоставляется планировщиком. API состоит из двух функций: `sched_pin` и `sched_unpin`. Эти функции управляют счетчиком вложенности `td_pinned` для каждого потока. Поток считается закрепленным, когда его счетчик вложенности больше нуля, и прекращает быть закрепленным с нулевым счетчиком вложенности. Каждая реализация планировщика должна гарантировать, что закрепленные потоки выполняются только на том CPU, на котором они выполнялись при первом вызове `sched_pin`. Поскольку счетчик вложенности изменяется только самим потоком и читается другими потоками только тогда, когда закрепленный поток не выполняется, но удерживается `sched_lock`, то `td_pinned` не требует блокировки. Функция `sched_pin` увеличивает счетчик вложенности, а `sched_unpin` уменьшает его. Обратите внимание, что эти функции работают только с текущим потоком и привязывают текущий поток к CPU, на котором он выполняется в данный момент. Для привязки произвольного потока к определённому CPU следует использовать функции `sched_bind` и `sched_unbind`.
=== Обратные вызовы
@@ -149,17 +149,17 @@
[[smp-lock-strategies]]
== Конкретные стратегии блокировки
-=== Учетные данные
+=== Учётные данные
-`struct ucred` — это внутренняя структура учетных данных ядра, которая обычно используется в качестве основы для управления доступом на уровне процессов внутри ядра. Системы, производные от BSD, используют модель «копирования при записи» для учетных данных: могут существовать множественные ссылки на структуру учетных данных, и когда требуется внести изменение, структура дублируется, изменяется, а затем ссылка заменяется. Благодаря широко распространенному кэшированию учетных данных для реализации контроля доступа при открытии, это приводит к значительной экономии памяти. С переходом на детализированную SMP (симметричную многопроцессорность), эта модель также существенно экономит на операциях блокировки, требуя, чтобы модификации выполнялись только для неразделяемых учетных данных, избегая необходимости явной синхронизации при использовании известных разделяемых учетных данных.
+`struct ucred` — это внутренняя структура учётных данных ядра, которая обычно используется в качестве основы для управления доступом на уровне процессов внутри ядра. Системы, производные от BSD, используют модель «копирования при записи» для учётных данных: могут существовать множественные ссылки на структуру учётных данных, и когда требуется внести изменение, структура дублируется, изменяется, а затем ссылка заменяется. Благодаря широко распространённому кэшированию учётных данных для реализации контроля доступа при открытии, это приводит к значительной экономии памяти. С переходом на детализированную SMP (симметричную многопроцессорность), эта модель также существенно экономит на операциях блокировки, требуя, чтобы модификации выполнялись только для неразделяемых учётных данных, избегая необходимости явной синхронизации при использовании известных разделяемых учётных данных.
-Структуры учетных данных с единственной ссылкой считаются изменяемыми; разделяемые структуры учетных данных не должны изменяться, иначе возникает риск состояния гонки. Мьютекс `cr_mtxp` защищает счетчик ссылок структуры `struct ucred` для поддержания согласованности. Любое использование структуры требует действительной ссылки на протяжении всего времени использования, иначе структура может быть освобождена из-под нелегитимного потребителя.
+Структуры учётных данных с единственной ссылкой считаются изменяемыми; разделяемые структуры учётных данных не должны изменяться, иначе возникает риск состояния гонки. Мьютекс `cr_mtxp` защищает счетчик ссылок структуры `struct ucred` для поддержания согласованности. Любое использование структуры требует действительной ссылки на протяжении всего времени использования, иначе структура может быть освобождена из-под нелегитимного потребителя.
Мьютекс `struct ucred` является листовым мьютексом и реализован через пул мьютексов по соображениям производительности.
-Обычно учетные данные используются в режиме только для чтения для принятия решений по контролю доступа, и в этом случае `td_ucred`, как правило, предпочтительнее, поскольку не требует блокировки. Когда учетные данные процесса обновляются, блокировка `proc` должна удерживаться на протяжении операций проверки и обновления, чтобы избежать состояний гонки. Учетные данные процесса `p_ucred` должны использоваться для операций проверки и обновления, чтобы предотвратить гонки между временем проверки и временем использования.
+Обычно учётные данные используются в режиме только для чтения для принятия решений по контролю доступа, и в этом случае `td_ucred`, как правило, предпочтительнее, поскольку не требует блокировки. Когда учётные данные процесса обновляются, блокировка `proc` должна удерживаться на протяжении операций проверки и обновления, чтобы избежать состояний гонки. Учётные данные процесса `p_ucred` должны использоваться для операций проверки и обновления, чтобы предотвратить гонки между временем проверки и временем использования.
-Если при системных вызовах будет выполняться контроль доступа после обновления учетных данных процесса, значение `td_ucred` также должно быть обновлено до текущего значения процесса. Это предотвратит использование устаревших учетных данных после изменения. Ядро автоматически обновляет указатель `td_ucred` в структуре потока из `p_ucred` процесса всякий раз, когда процесс входит в ядро, что позволяет использовать свежие учетные данные для контроля доступа в ядре.
+Если при системных вызовах будет выполняться контроль доступа после обновления учётных данных процесса, значение `td_ucred` также должно быть обновлено до текущего значения процесса. Это предотвратит использование устаревших учётных данных после изменения. Ядро автоматически обновляет указатель `td_ucred` в структуре потока из `p_ucred` процесса всякий раз, когда процесс входит в ядро, что позволяет использовать свежие учётные данные для контроля доступа в ядре.
=== Дескрипторы файлов и таблицы дескрипторов файлов
@@ -215,7 +215,7 @@
Служба SIGIO позволяет процессам запрашивать доставку сигнала SIGIO своей группе процессов при изменении статуса чтения/записи указанных файловых дескрипторов. Не более одного процесса или группы процессов может зарегистрироваться для получения SIGIO от любого заданного объекта ядра, и такой процесс или группа называется владельцем. Каждый объект, поддерживающий регистрацию SIGIO, содержит поле-указатель, которое имеет значение `NULL`, если объект не зарегистрирован, или указывает на структуру `struct sigio`, описывающую регистрацию. Это поле защищено глобальным мьютексом `sigio_lock`. Вызывающие функции обслуживания SIGIO должны передавать это поле «по ссылке», чтобы локальные копии регистра не создавались без защиты блокировкой.
-Один `struct sigio` выделяется для каждого зарегистрированного объекта, связанного с любым процессом или группой процессов, и содержит обратные ссылки на объект, владельца, информацию о сигнале, учетные данные и общее состояние регистрации. Каждый процесс или группа процессов содержит список зарегистрированных структур `struct sigio`: `p_sigiolst` для процессов и `pg_sigiolst` для групп процессов. Эти списки защищены блокировками процесса или группы процессов соответственно. Большинство полей в каждой `struct sigio` остаются постоянными на протяжении регистрации, за исключением поля `sio_pgsigio`, которое связывает `struct sigio` со списком процесса или группы процессов. Разработчикам, реализующим новые объекты ядра с поддержкой SIGIO, как правило, следует избегать удержания блокировок структур при вызове функций поддержки SIGIO, таких как `fsetown` или `funsetown`, чтобы не определять порядок блокировок между блокировками структур и глобальной блокировкой SIGIO. Обычно это возможно за счет использования повышенного счетчика ссылок на структуру, например, путем опоры на ссылку файлового дескриптора на канал во время операции с каналом.
+Один `struct sigio` выделяется для каждого зарегистрированного объекта, связанного с любым процессом или группой процессов, и содержит обратные ссылки на объект, владельца, информацию о сигнале, учётные данные и общее состояние регистрации. Каждый процесс или группа процессов содержит список зарегистрированных структур `struct sigio`: `p_sigiolst` для процессов и `pg_sigiolst` для групп процессов. Эти списки защищены блокировками процесса или группы процессов соответственно. Большинство полей в каждой `struct sigio` остаются постоянными на протяжении регистрации, за исключением поля `sio_pgsigio`, которое связывает `struct sigio` со списком процесса или группы процессов. Разработчикам, реализующим новые объекты ядра с поддержкой SIGIO, как правило, следует избегать удержания блокировок структур при вызове функций поддержки SIGIO, таких как `fsetown` или `funsetown`, чтобы не определять порядок блокировок между блокировками структур и глобальной блокировкой SIGIO. Обычно это возможно за счет использования повышенного счетчика ссылок на структуру, например, путем опоры на ссылку файлового дескриптора на канал во время операции с каналом.
=== Sysctl
diff --git a/documentation/content/ru/books/arch-handbook/smp/_index.po b/documentation/content/ru/books/arch-handbook/smp/_index.po
--- a/documentation/content/ru/books/arch-handbook/smp/_index.po
+++ b/documentation/content/ru/books/arch-handbook/smp/_index.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2025-05-01 19:56-0300\n"
-"PO-Revision-Date: 2025-11-08 16:33+0000\n"
+"PO-Revision-Date: 2025-12-18 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksarch-handbooksmp_index/ru/>\n"
@@ -287,7 +287,7 @@
#: documentation/content/en/books/arch-handbook/smp/_index.adoc:90
#, no-wrap
msgid "General Architecture and Design"
-msgstr "Общая Архитектура и Дизайн"
+msgstr "Общая архитектура и дизайн"
#. type: Title ===
#: documentation/content/en/books/arch-handbook/smp/_index.adoc:92
@@ -786,7 +786,7 @@
"`sched_unpin` уменьшает его. Обратите внимание, что эти функции работают "
"только с текущим потоком и привязывают текущий поток к CPU, на котором он "
"выполняется в данный момент. Для привязки произвольного потока к "
-"определенному CPU следует использовать функции `sched_bind` и `sched_unbind`."
+"определённому CPU следует использовать функции `sched_bind` и `sched_unbind`."
#. type: Title ===
#: documentation/content/en/books/arch-handbook/smp/_index.adoc:147
@@ -847,7 +847,7 @@
#: documentation/content/en/books/arch-handbook/smp/_index.adoc:156
#, no-wrap
msgid "Credentials"
-msgstr "Учетные данные"
+msgstr "Учётные данные"
#. type: Plain text
#: documentation/content/en/books/arch-handbook/smp/_index.adoc:159
@@ -864,19 +864,19 @@
"occur on an unshared credential, avoiding the need for explicit "
"synchronization when consuming a known-shared credential."
msgstr ""
-"`struct ucred` — это внутренняя структура учетных данных ядра, которая "
+"`struct ucred` — это внутренняя структура учётных данных ядра, которая "
"обычно используется в качестве основы для управления доступом на уровне "
"процессов внутри ядра. Системы, производные от BSD, используют модель «"
-"копирования при записи» для учетных данных: могут существовать множественные "
-"ссылки на структуру учетных данных, и когда требуется внести изменение, "
+"копирования при записи» для учётных данных: могут существовать множественные "
+"ссылки на структуру учётных данных, и когда требуется внести изменение, "
"структура дублируется, изменяется, а затем ссылка заменяется. Благодаря "
-"широко распространенному кэшированию учетных данных для реализации контроля "
+"широко распространённому кэшированию учётных данных для реализации контроля "
"доступа при открытии, это приводит к значительной экономии памяти. С "
"переходом на детализированную SMP (симметричную многопроцессорность), эта "
"модель также существенно экономит на операциях блокировки, требуя, чтобы "
-"модификации выполнялись только для неразделяемых учетных данных, избегая "
+"модификации выполнялись только для неразделяемых учётных данных, избегая "
"необходимости явной синхронизации при использовании известных разделяемых "
-"учетных данных."
+"учётных данных."
#. type: Plain text
#: documentation/content/en/books/arch-handbook/smp/_index.adoc:161
@@ -888,8 +888,8 @@
"for the duration of the use, or the structure may be released out from under "
"the illegitimate consumer."
msgstr ""
-"Структуры учетных данных с единственной ссылкой считаются изменяемыми; "
-"разделяемые структуры учетных данных не должны изменяться, иначе возникает "
+"Структуры учётных данных с единственной ссылкой считаются изменяемыми; "
+"разделяемые структуры учётных данных не должны изменяться, иначе возникает "
"риск состояния гонки. Мьютекс `cr_mtxp` защищает счетчик ссылок структуры `"
"struct ucred` для поддержания согласованности. Любое использование структуры "
"требует действительной ссылки на протяжении всего времени использования, "
@@ -914,11 +914,11 @@
"process credential `p_ucred` must be used for check and update operations to "
"prevent time-of-check, time-of-use races."
msgstr ""
-"Обычно учетные данные используются в режиме только для чтения для принятия "
+"Обычно учётные данные используются в режиме только для чтения для принятия "
"решений по контролю доступа, и в этом случае `td_ucred`, как правило, "
-"предпочтительнее, поскольку не требует блокировки. Когда учетные данные "
+"предпочтительнее, поскольку не требует блокировки. Когда учётные данные "
"процесса обновляются, блокировка `proc` должна удерживаться на протяжении "
-"операций проверки и обновления, чтобы избежать состояний гонки. Учетные "
+"операций проверки и обновления, чтобы избежать состояний гонки. Учётные "
"данные процесса `p_ucred` должны использоваться для операций проверки и "
"обновления, чтобы предотвратить гонки между временем проверки и временем "
"использования."
@@ -935,11 +935,11 @@
"access control."
msgstr ""
"Если при системных вызовах будет выполняться контроль доступа после "
-"обновления учетных данных процесса, значение `td_ucred` также должно быть "
+"обновления учётных данных процесса, значение `td_ucred` также должно быть "
"обновлено до текущего значения процесса. Это предотвратит использование "
-"устаревших учетных данных после изменения. Ядро автоматически обновляет "
+"устаревших учётных данных после изменения. Ядро автоматически обновляет "
"указатель `td_ucred` в структуре потока из `p_ucred` процесса всякий раз, "
-"когда процесс входит в ядро, что позволяет использовать свежие учетные "
+"когда процесс входит в ядро, что позволяет использовать свежие учётные "
"данные для контроля доступа в ядре."
#. type: Title ===
@@ -1249,7 +1249,7 @@
msgstr ""
"Один `struct sigio` выделяется для каждого зарегистрированного объекта, "
"связанного с любым процессом или группой процессов, и содержит обратные "
-"ссылки на объект, владельца, информацию о сигнале, учетные данные и общее "
+"ссылки на объект, владельца, информацию о сигнале, учётные данные и общее "
"состояние регистрации. Каждый процесс или группа процессов содержит список "
"зарегистрированных структур `struct sigio`: `p_sigiolst` для процессов и "
"`pg_sigiolst` для групп процессов. Эти списки защищены блокировками процесса "
diff --git a/documentation/content/ru/books/arch-handbook/sysinit/_index.adoc b/documentation/content/ru/books/arch-handbook/sysinit/_index.adoc
--- a/documentation/content/ru/books/arch-handbook/sysinit/_index.adoc
+++ b/documentation/content/ru/books/arch-handbook/sysinit/_index.adoc
@@ -137,7 +137,7 @@
=== Выключение системы
-Макрос `SYSUNINIT()` ведет себя аналогично макросу `SYSINIT()`, за исключением того, что добавляет данные SYSINIT в набор данных завершения работы SYSINIT.
+Макрос `SYSUNINIT()` ведёт себя аналогично макросу `SYSINIT()`, за исключением того, что добавляет данные SYSINIT в набор данных завершения работы SYSINIT.
.Пример `SYSUNINIT()`
[example]
diff --git a/documentation/content/ru/books/arch-handbook/sysinit/_index.po b/documentation/content/ru/books/arch-handbook/sysinit/_index.po
--- a/documentation/content/ru/books/arch-handbook/sysinit/_index.po
+++ b/documentation/content/ru/books/arch-handbook/sysinit/_index.po
@@ -1,12 +1,12 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025, 2026.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2025-05-01 19:56-0300\n"
-"PO-Revision-Date: 2025-07-02 04:45+0000\n"
+"PO-Revision-Date: 2026-03-04 20:01+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksarch-handbooksysinit_index/ru/>\n"
@@ -340,7 +340,7 @@
"The `SYSUNINIT()` macro behaves similarly to the `SYSINIT()` macro except "
"that it adds the SYSINIT data to SYSINIT's shutdown data set."
msgstr ""
-"Макрос `SYSUNINIT()` ведет себя аналогично макросу `SYSINIT()`, за "
+"Макрос `SYSUNINIT()` ведёт себя аналогично макросу `SYSINIT()`, за "
"исключением того, что добавляет данные SYSINIT в набор данных завершения "
"работы SYSINIT."
diff --git a/documentation/content/ru/books/arch-handbook/usb/_index.adoc b/documentation/content/ru/books/arch-handbook/usb/_index.adoc
--- a/documentation/content/ru/books/arch-handbook/usb/_index.adoc
+++ b/documentation/content/ru/books/arch-handbook/usb/_index.adoc
@@ -53,7 +53,7 @@
Универсальная последовательная шина (USB) — это новый способ подключения устройств к персональным компьютерам. Архитектура шины поддерживает двустороннюю связь и была разработана в ответ на усложнение устройств, требующих большего взаимодействия с хостом. Поддержка USB включена во все современные чипсеты ПК и, следовательно, доступна во всех недавно собранных компьютерах. Выпуск Apple iMac только с USB стал серьёзным стимулом для производителей оборудования выпускать USB-версии своих устройств. Согласно будущим спецификациям ПК, все устаревшие разъёмы должны быть заменены одним или несколькими USB-разъёмами, обеспечивающими универсальные возможности plug and play. Поддержка USB-оборудования появилась в NetBSD на очень раннем этапе и была разработана Леннартом Аугустссоном для проекта NetBSD. Код был портирован в FreeBSD, и в настоящее время мы поддерживаем общую кодовая базу. Для реализации подсистемы USB важны некоторые особенности USB.
-_Леннарт Аугустссон выполнил большую часть работы по реализации поддержки USB для проекта NetBSD. Огромная благодарность за этот невероятный объем работы. Также большое спасибо Арди и Дирку за их комментарии и вычитку этой статьи._
+_Леннарт Аугустссон выполнил большую часть работы по реализации поддержки USB для проекта NetBSD. Огромная благодарность за этот невероятный объём работы. Также большое спасибо Арди и Дирку за их комментарии и вычитку этой статьи._
* Устройства подключаются к портам компьютера напрямую или через устройства, называемые концентраторами, образуя древовидную структуру устройств.
* Устройства можно подключать и отключать во время работы.
@@ -92,7 +92,7 @@
Контроллер UHCI поддерживает список кадров (framelist) с 1024 указателями на структуры данных для каждого кадра. Он распознаёт два типа данных: дескрипторы передачи (TD) и головы очередей (QH). Каждый TD представляет пакет для передачи в конечную точку устройства или из неё. QH служат для группировки TD (и других QH) вместе.
-Каждая передача состоит из одного или нескольких пакетов. Драйвер UHCI разделяет большие передачи на несколько пакетов. Для каждой передачи, за исключением изохронных, выделяется QH. Для каждого типа передачи эти QH собираются в QH для соответствующего типа. Изохронные передачи должны выполняться первыми из-за требования фиксированной задержки и непосредственно указываются указателем в списке кадров. Последний изохронный TD ссылается на QH для прерывающих передач для этого кадра. Все QH для прерывающих передач указывают на QH для управляющих передач, который, в свою очередь, указывает на QH для массовых передач. Следующая диаграмма дает графическое представление этого:
+Каждая передача состоит из одного или нескольких пакетов. Драйвер UHCI разделяет большие передачи на несколько пакетов. Для каждой передачи, за исключением изохронных, выделяется QH. Для каждого типа передачи эти QH собираются в QH для соответствующего типа. Изохронные передачи должны выполняться первыми из-за требования фиксированной задержки и непосредственно указываются указателем в списке кадров. Последний изохронный TD ссылается на QH для прерывающих передач для этого кадра. Все QH для прерывающих передач указывают на QH для управляющих передач, который, в свою очередь, указывает на QH для массовых передач. Следующая диаграмма даёт графическое представление этого:
В результате выполняется следующее расписание в каждом кадре. После получения указателя на текущий кадр из списка кадров контроллер сначала выполняет TDs для всех изохронных пакетов в этом кадре. Последний из этих TDs ссылается на QH для прерывающих передач этого кадра. Хост-контроллер затем переходит от этого QH к QHs для отдельных прерывающих передач. После завершения этой очереди, QH для прерывающих передач ссылается на QH для всех управляющих передач. Он выполняет все подочереди, запланированные там, а затем все передачи, поставленные в очередь в QH для массовых передач. Для упрощения обработки завершенных или неудачных передач аппаратное обеспечение генерирует различные типы прерываний в конце каждого кадра. В последнем TD для передачи бит *Interrupt-On Completion* устанавливается драйвером HC, чтобы вызвать прерывание по завершении передачи. Прерывание ошибки возникает, если TD достигает максимального количества ошибок. Если в TD установлен бит *short packet detect* и передано меньше установленной длины пакета, это прерывание уведомляет драйвер контроллера о завершении передачи. Задача драйвера хост-контроллера — определить, какая передача завершилась или вызвала ошибку. При вызове процедура обслуживания прерывания находит все завершенные передачи и вызывает их callback-функции.
@@ -133,7 +133,7 @@
Если передача через канал превышает максимальный размер пакета, указанный в соответствующем дескрипторе конечной точки, хост-контроллер (OHCI) или драйвер HC (UHCI) разделит передачу на пакеты максимального размера, при этом последний пакет может быть меньше максимального размера.
-Иногда для устройства не является проблемой вернуть меньше данных, чем запрошено. Например, при передаче данных в режиме bulk-in на модем может быть запрошено 200 байт данных, но у модема в данный момент доступно только 5 байт. Драйвер может установить флаг короткого пакета (SPD). Это позволяет хост-контроллеру принять пакет, даже если объем переданных данных меньше запрошенного. Этот флаг действителен только для in-передач, так как объем данных, отправляемых на устройство, всегда известен заранее. Если во время передачи в устройстве происходит неустранимая ошибка, канал останавливается (stalled). Прежде чем принимать или отправлять дополнительные данные, драйвер должен устранить причину остановки и сбросить условие остановки конечной точки, отправив запрос `clear endpoint halt` через канал по умолчанию. Конечная точка по умолчанию никогда не должна останавливаться.
+Иногда для устройства не является проблемой вернуть меньше данных, чем запрошено. Например, при передаче данных в режиме bulk-in на модем может быть запрошено 200 байт данных, но у модема в данный момент доступно только 5 байт. Драйвер может установить флаг короткого пакета (SPD). Это позволяет хост-контроллеру принять пакет, даже если объём переданных данных меньше запрошенного. Этот флаг действителен только для in-передач, так как объём данных, отправляемых на устройство, всегда известен заранее. Если во время передачи в устройстве происходит неустранимая ошибка, канал останавливается (stalled). Прежде чем принимать или отправлять дополнительные данные, драйвер должен устранить причину остановки и сбросить условие остановки конечной точки, отправив запрос `clear endpoint halt` через канал по умолчанию. Конечная точка по умолчанию никогда не должна останавливаться.
Существует четыре различных типа конечных точек и соответствующих каналов: - Управляющий канал / канал по умолчанию: На каждое устройство приходится один управляющий канал, подключенный к конечной точке по умолчанию (конечная точка 0). Этот канал передаёт запросы устройства и связанные с ними данные. Разница между передачами через канал по умолчанию и другими каналами заключается в том, что протокол для этих передач описан в спецификации USB. Эти запросы используются для сброса и настройки устройства. Базовый набор команд, который должен поддерживаться каждым устройством, приведен в главе 9 спецификации USB. Команды, поддерживаемые на этом канале, могут быть расширены спецификацией класса устройства для обеспечения дополнительной функциональности.
diff --git a/documentation/content/ru/books/arch-handbook/usb/_index.po b/documentation/content/ru/books/arch-handbook/usb/_index.po
--- a/documentation/content/ru/books/arch-handbook/usb/_index.po
+++ b/documentation/content/ru/books/arch-handbook/usb/_index.po
@@ -1,12 +1,12 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025, 2026.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2025-11-08 16:17+0000\n"
-"PO-Revision-Date: 2025-11-12 04:45+0000\n"
+"PO-Revision-Date: 2026-03-04 20:01+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksarch-handbookusb_index/ru/>\n"
@@ -83,7 +83,7 @@
"paper._"
msgstr ""
"_Леннарт Аугустссон выполнил большую часть работы по реализации поддержки "
-"USB для проекта NetBSD. Огромная благодарность за этот невероятный объем "
+"USB для проекта NetBSD. Огромная благодарность за этот невероятный объём "
"работы. Также большое спасибо Арди и Дирку за их комментарии и вычитку этой "
"статьи._"
@@ -403,7 +403,7 @@
"непосредственно указываются указателем в списке кадров. Последний изохронный "
"TD ссылается на QH для прерывающих передач для этого кадра. Все QH для "
"прерывающих передач указывают на QH для управляющих передач, который, в свою "
-"очередь, указывает на QH для массовых передач. Следующая диаграмма дает "
+"очередь, указывает на QH для массовых передач. Следующая диаграмма даёт "
"графическое представление этого:"
#. type: Plain text
@@ -753,8 +753,8 @@
"запрошено. Например, при передаче данных в режиме bulk-in на модем может "
"быть запрошено 200 байт данных, но у модема в данный момент доступно только "
"5 байт. Драйвер может установить флаг короткого пакета (SPD). Это позволяет "
-"хост-контроллеру принять пакет, даже если объем переданных данных меньше "
-"запрошенного. Этот флаг действителен только для in-передач, так как объем "
+"хост-контроллеру принять пакет, даже если объём переданных данных меньше "
+"запрошенного. Этот флаг действителен только для in-передач, так как объём "
"данных, отправляемых на устройство, всегда известен заранее. Если во время "
"передачи в устройстве происходит неустранимая ошибка, канал останавливается "
"(stalled). Прежде чем принимать или отправлять дополнительные данные, "
diff --git a/documentation/content/ru/books/arch-handbook/vm/_index.adoc b/documentation/content/ru/books/arch-handbook/vm/_index.adoc
--- a/documentation/content/ru/books/arch-handbook/vm/_index.adoc
+++ b/documentation/content/ru/books/arch-handbook/vm/_index.adoc
@@ -81,7 +81,7 @@
Сущности, используемые для управления этим процессом, известны как файловые буферы, структуры ``struct buf`` или ``bp``. Когда файловая система должна работать с частью объекта виртуальной памяти, она обычно отображает часть объекта в структуру struct buf, а затем отображает страницы из этой структуры в KVM. Точно так же операции с дисковым вводом-выводом обычно выполняются путём отображения частей объектов в структуры буферов и последующего выполнения ввода-вывода на этих структурах. Соответствующие им страницы vm_page_t обычно блокируются на время выполнения операции ввода-вывода. Файловые буферы также имеют собственное представление о состоянии занятости, что полезно для кода драйвера файловой системы, который предпочитает работать с файловыми буферами, а не с обычными страницами виртуальной памяти.
-FreeBSD резервирует ограниченный объем виртуальной памяти ядра для хранения отображений из структур struct buf на физические страницы памяти, но следует подчеркнуть, что эта память используется исключительно для хранения отображений и не ограничивает возможность кэширования данных. Кэширование физических данных строго связано с ``vm_page_t``, а не с файловыми буферами. Однако, поскольку файловые буферы используются для операций ввода-вывода, они ограничивают количество возможных параллельных операций ввода-вывода. Тем не менее, поскольку обычно доступно несколько тысяч файловых буферов, это редко становится проблемой.
+FreeBSD резервирует ограниченный объём виртуальной памяти ядра для хранения отображений из структур struct buf на физические страницы памяти, но следует подчеркнуть, что эта память используется исключительно для хранения отображений и не ограничивает возможность кэширования данных. Кэширование физических данных строго связано с ``vm_page_t``, а не с файловыми буферами. Однако, поскольку файловые буферы используются для операций ввода-вывода, они ограничивают количество возможных параллельных операций ввода-вывода. Тем не менее, поскольку обычно доступно несколько тысяч файловых буферов, это редко становится проблемой.
[[vm-pagetables]]
== Отображение таблиц страниц `vm_map_t, vm_entry_t`
@@ -108,7 +108,7 @@
Если ваша система будет активно использовать сеть, возможно, вам захочется увеличить значение `NMBCLUSTERS`. Типичные значения варьируются от 1024 до 4096.
-Параметр `NBUF` также традиционно используется для масштабирования системы. Этот параметр определяет объем виртуальной памяти ядра, который система может использовать для отображения файловых буферов для ввода-вывода. Обратите внимание, что этот параметр никак не связан с унифицированным буферным кэшем! В ядрах 3.0-CURRENT и позднее этот параметр динамически настраивается, и в целом не следует настраивать его вручную. Мы рекомендуем вам _не_ пытаться задавать параметр NBUF. Позвольте системе выбрать его автоматически. Слишком малое значение может привести к крайне неэффективной работе файловой системы, в то время как слишком большое значение может привести к истощению очередей страниц из-за того, что слишком много страниц будет закреплено в памяти.
+Параметр `NBUF` также традиционно используется для масштабирования системы. Этот параметр определяет объём виртуальной памяти ядра, который система может использовать для отображения файловых буферов для ввода-вывода. Обратите внимание, что этот параметр никак не связан с унифицированным буферным кэшем! В ядрах 3.0-CURRENT и позднее этот параметр динамически настраивается, и в целом не следует настраивать его вручную. Мы рекомендуем вам _не_ пытаться задавать параметр NBUF. Позвольте системе выбрать его автоматически. Слишком малое значение может привести к крайне неэффективной работе файловой системы, в то время как слишком большое значение может привести к истощению очередей страниц из-за того, что слишком много страниц будет закреплено в памяти.
По умолчанию ядра FreeBSD не оптимизированы. Вы можете установить флаги отладки и оптимизации с помощью директивы `makeoptions` в конфигурации ядра. Обратите внимание, что не следует использовать флаг `-g`, если вы не можете разместить в системе большие ядра (обычно более 7 МБ), которые получаются в результате.
@@ -122,6 +122,6 @@
Настройка виртуальной памяти (VM) и системы во время работы относительно проста. Во-первых, используйте Soft Updates на ваших файловых системах UFS/FFS, когда это возможно. Файл [.filename]#/usr/src/sys/ufs/ffs/README.softupdates# содержит инструкции (и ограничения) по конфигурации этой функции.
-Во-вторых, настройте достаточный объем подкачки (swap). Вы должны создать раздел подкачки на каждом физическом диске, до четырёх, даже на "рабочих" дисках. Объём подкачки должен быть как минимум в 2 раза больше объёма основной памяти, а возможно — и больше, если у вас немного ОЗУ. Размер раздела подкачки следует выбирать с учётом максимальной конфигурации памяти, которую вы когда-либо планируете установить на эту машину, чтобы в будущем не пришлось переразбивать диски. Если вы хотите иметь возможность сохранять дампы при сбое, ваш первый swap-раздел должен быть не меньше объёма основной памяти, а каталог [.filename]#/var/crash# должен иметь достаточно свободного места для хранения дампа.
+Во-вторых, настройте достаточный объём подкачки (swap). Вы должны создать раздел подкачки на каждом физическом диске, до четырёх, даже на "рабочих" дисках. Объём подкачки должен быть как минимум в 2 раза больше объёма основной памяти, а возможно — и больше, если у вас немного ОЗУ. Размер раздела подкачки следует выбирать с учётом максимальной конфигурации памяти, которую вы когда-либо планируете установить на эту машину, чтобы в будущем не пришлось переразбивать диски. Если вы хотите иметь возможность сохранять дампы при сбое, ваш первый swap-раздел должен быть не меньше объёма основной памяти, а каталог [.filename]#/var/crash# должен иметь достаточно свободного места для хранения дампа.
Подкачка на базе NFS вполне допустима в системах версии 4.X и новее, однако необходимо учитывать, что основная нагрузка на подкачку ляжет на NFS-сервер.
diff --git a/documentation/content/ru/books/arch-handbook/vm/_index.po b/documentation/content/ru/books/arch-handbook/vm/_index.po
--- a/documentation/content/ru/books/arch-handbook/vm/_index.po
+++ b/documentation/content/ru/books/arch-handbook/vm/_index.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2025-05-01 19:56-0300\n"
-"PO-Revision-Date: 2025-08-26 04:45+0000\n"
+"PO-Revision-Date: 2025-11-21 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksarch-handbookvm_index/ru/>\n"
@@ -287,7 +287,7 @@
"the amount of concurrent I/O possible. However, as there are usually a few "
"thousand filesystem buffers available, this is not usually a problem."
msgstr ""
-"FreeBSD резервирует ограниченный объем виртуальной памяти ядра для хранения "
+"FreeBSD резервирует ограниченный объём виртуальной памяти ядра для хранения "
"отображений из структур struct buf на физические страницы памяти, но следует "
"подчеркнуть, что эта память используется исключительно для хранения "
"отображений и не ограничивает возможность кэширования данных. Кэширование "
@@ -456,7 +456,7 @@
"many pages to become wired down."
msgstr ""
"Параметр `NBUF` также традиционно используется для масштабирования системы. "
-"Этот параметр определяет объем виртуальной памяти ядра, который система "
+"Этот параметр определяет объём виртуальной памяти ядра, который система "
"может использовать для отображения файловых буферов для ввода-вывода. "
"Обратите внимание, что этот параметр никак не связан с унифицированным "
"буферным кэшем! В ядрах 3.0-CURRENT и позднее этот параметр динамически "
@@ -529,7 +529,7 @@
"swap partition must be at least as large as main memory and [.filename]#/var/"
"crash# must have sufficient free space to hold the dump."
msgstr ""
-"Во-вторых, настройте достаточный объем подкачки (swap). Вы должны создать "
+"Во-вторых, настройте достаточный объём подкачки (swap). Вы должны создать "
"раздел подкачки на каждом физическом диске, до четырёх, даже на \"рабочих\" "
"дисках. Объём подкачки должен быть как минимум в 2 раза больше объёма "
"основной памяти, а возможно — и больше, если у вас немного ОЗУ. Размер "

File Metadata

Mime Type
text/plain
Expires
Sat, May 16, 2:38 PM (15 h, 54 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33090139
Default Alt Text
D55723.id.diff (268 KB)

Event Timeline