aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/ru/articles/linux-emulation/_index.po
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/content/ru/articles/linux-emulation/_index.po')
-rw-r--r--documentation/content/ru/articles/linux-emulation/_index.po221
1 files changed, 108 insertions, 113 deletions
diff --git a/documentation/content/ru/articles/linux-emulation/_index.po b/documentation/content/ru/articles/linux-emulation/_index.po
index cb02ba5937..3dcc5aa8b9 100644
--- a/documentation/content/ru/articles/linux-emulation/_index.po
+++ b/documentation/content/ru/articles/linux-emulation/_index.po
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2024-01-17 20:35-0300\n"
-"PO-Revision-Date: 2025-10-29 04:45+0000\n"
+"POT-Creation-Date: 2025-11-08 16:17+0000\n"
+"PO-Revision-Date: 2025-11-12 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/articleslinux-emulation_index/ru/>\n"
@@ -22,8 +22,7 @@ msgstr ""
#: documentation/content/en/articles/linux-emulation/_index.adoc:1
#, no-wrap
msgid "A technical description about the internals of the Linux emulation layer in FreeBSD"
-msgstr ""
-"Техническое описание внутреннего устройства слоя эмуляции Linux в FreeBSD"
+msgstr "Техническое описание внутреннего устройства слоя эмуляции Linux в FreeBSD"
#. type: YAML Front Matter: title
#: documentation/content/en/articles/linux-emulation/_index.adoc:1
@@ -59,8 +58,8 @@ msgid ""
"We, the emulation development team, are working on making the Linux(R) 2.6 "
"emulation the default emulation layer in FreeBSD."
msgstr ""
-"Эта магистерская диссертация посвящена обновлению слоя эмуляции Linux(R) ("
-"так называемого _Linuxulator_). Задача состояла в обновлении слоя для "
+"Эта магистерская диссертация посвящена обновлению слоя эмуляции Linux(R) "
+"(так называемого _Linuxulator_). Задача состояла в обновлении слоя для "
"соответствия функциональности Linux(R) 2.6. В качестве эталонной реализации "
"было выбрано ядро Linux(R) 2.6.16. Концепция основана на реализации NetBSD. "
"Большая часть работы была выполнена летом 2006 года в рамках программы "
@@ -195,8 +194,8 @@ msgstr ""
"идеи были использованы многими другими операционными системами по всему "
"миру, образовав так называемые UNIX(R)-подобные операционные системы. В наши "
"дни наиболее влиятельными из них являются Linux(R), Solaris и, возможно (в "
-"некоторой степени), FreeBSD. Существуют корпоративные производные UNIX(R) ("
-"AIX, HP-UX и т. д.), но они всё больше мигрируют на упомянутые системы. "
+"некоторой степени), FreeBSD. Существуют корпоративные производные UNIX(R) "
+"(AIX, HP-UX и т. д.), но они всё больше мигрируют на упомянутые системы. "
"Давайте подведём итог типичным характеристикам UNIX(R)."
#. type: Title ====
@@ -265,8 +264,8 @@ msgid ""
"reaction like sending a _signal_ (division by zero)."
msgstr ""
"Еще один возможный способ взаимодействия — использование _прерывания_. "
-"Прерывания происходят асинхронно после возникновения определенного события ("
-"деление на ноль, ошибка страницы и т.д.). Прерывание может быть прозрачным "
+"Прерывания происходят асинхронно после возникновения определенного события "
+"(деление на ноль, ошибка страницы и т.д.). Прерывание может быть прозрачным "
"для процесса (ошибка страницы) или привести к реакции, например, отправке "
"_сигнала_ (деление на ноль)."
@@ -314,9 +313,9 @@ msgstr ""
"запущенный процесс может создать свою идентичную копию, используя системный "
"вызов man:fork[2]. Были введены некоторые немного изменённые версии этого "
"системного вызова, но базовая семантика остаётся той же. Каждый запущенный "
-"процесс может превратиться в другой процесс, используя системный вызов "
-"man:exec[3]. Были введены некоторые модификации этого системного вызова, но "
-"все они служат одной и той же базовой цели. Процессы завершают своё "
+"процесс может превратиться в другой процесс, используя системный вызов man:"
+"exec[3]. Были введены некоторые модификации этого системного вызова, но все "
+"они служат одной и той же базовой цели. Процессы завершают своё "
"существование, вызывая системный вызов man:exit[2]. Каждый процесс "
"идентифицируется уникальным номером, называемым PID. У каждого процесса есть "
"определённый родитель (идентифицируемый его PID)."
@@ -536,8 +535,8 @@ msgstr ""
"которая является прослойкой в системном вызове man:execve[2]. Она использует "
"структуру `sysentvec`, описывающую ABI исполняемого файла. Эта структура "
"содержит такие элементы, как таблицу преобразования errno, таблицу "
-"преобразования сигналов, различные функции для обработки системных вызовов ("
-"исправление стека, создание дампов памяти и т.д.). Каждый ABI, который ядро "
+"преобразования сигналов, различные функции для обработки системных вызовов "
+"(исправление стека, создание дампов памяти и т.д.). Каждый ABI, который ядро "
"FreeBSD поддерживает, должен определять эту структуру, так как она "
"используется в дальнейшем в коде обработки системных вызовов и в некоторых "
"других местах. Системные вызовы обрабатываются обработчиками прерываний, где "
@@ -554,8 +553,8 @@ msgstr "Системные вызовы"
#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:209
msgid ""
-"Syscalls on FreeBSD are issued by executing interrupt `0x80` with register "
-"`%eax` set to a desired syscall number with arguments passed on the stack."
+"Syscalls on FreeBSD are issued by executing interrupt `0x80` with register `"
+"%eax` set to a desired syscall number with arguments passed on the stack."
msgstr ""
"Системные вызовы в FreeBSD выполняются путем прерывания `0x80` с "
"установленным в регистре `%eax` номером нужного системного вызова и "
@@ -798,10 +797,10 @@ msgstr ""
"Большая часть разработки Linux(R) происходит в системе контроля версий Git. "
"Git — это распределённая система, поэтому нет централизованного источника "
"кода Linux(R), но некоторые ветви считаются основными и официальными. Схема "
-"нумерации версий, используемая в Linux(R), состоит из четырёх чисел: "
-"A.B.C.D. В настоящее время разработка ведётся в ветке 2.6.C.D, где C "
-"обозначает мажорную версию, в которую добавляются или изменяются функции, а "
-"D — минорную версию, предназначенную только для исправления ошибок."
+"нумерации версий, используемая в Linux(R), состоит из четырёх чисел: A.B.C."
+"D. В настоящее время разработка ведётся в ветке 2.6.C.D, где C обозначает "
+"мажорную версию, в которую добавляются или изменяются функции, а D — "
+"минорную версию, предназначенную только для исправления ошибок."
#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:277
@@ -936,8 +935,8 @@ msgstr ""
"определяется не как уникальный для каждого процесса, поэтому для некоторых "
"процессов (потоков) man:getppid[2] возвращает одинаковое значение. "
"Уникальная идентификация процесса обеспечивается TID. Это связано с тем, что "
-"_NPTL_ (New POSIX(R) Thread Library) определяет потоки как обычные процессы ("
-"так называемая модель 1:1). Создание нового процесса в Linux(R) 2.6 "
+"_NPTL_ (New POSIX(R) Thread Library) определяет потоки как обычные процессы "
+"(так называемая модель 1:1). Создание нового процесса в Linux(R) 2.6 "
"происходит с использованием системного вызова `clone` (варианты fork "
"перереализованы с его использованием). Этот системный вызов clone определяет "
"набор флагов, которые влияют на поведение процесса клонирования в отношении "
@@ -1064,7 +1063,7 @@ msgid ""
msgstr ""
"Для непоточных программ PID и TID совпадают. Для поточных программ первый "
"поток имеет одинаковые PID и TID, а каждый созданный поток разделяет тот же "
-"PID и получает уникальный TID (поскольку передается `CLONE_THREAD`), также "
+"PID и получает уникальный TID (поскольку передаётся `CLONE_THREAD`), также "
"родительский процесс общий для всех процессов, образующих эту поточную "
"программу."
@@ -1486,10 +1485,10 @@ msgstr ""
"Атомарные операции реализуются через набор функций, выполняющих простые "
"арифметические действия над операндами в памяти атомарным образом по "
"отношению к внешним событиям (прерываниям, вытеснению и т. д.). Атомарные "
-"операции могут гарантировать атомарность только для небольших типов данных ("
-"порядка величины типа `.long` в архитектуре C), поэтому их следует редко "
-"использовать напрямую в конечном коде, разве что для очень простых операций ("
-"например, установки флага в битовой карте). На самом деле довольно просто и "
+"операции могут гарантировать атомарность только для небольших типов данных "
+"(порядка величины типа `.long` в архитектуре C), поэтому их следует редко "
+"использовать напрямую в конечном коде, разве что для очень простых операций "
+"(например, установки флага в битовой карте). На самом деле довольно просто и "
"часто можно допустить семантическую ошибку, полагаясь только на атомарные "
"операции (обычно называемые lock-less). Ядро FreeBSD предоставляет способ "
"выполнения атомарных операций в сочетании с барьерами памяти. Барьеры памяти "
@@ -1673,8 +1672,8 @@ msgstr ""
"указанное рядом с типом блокировки), ему запрещено захватывать блокировки "
"более высоких уровней, так как это нарушит заданную семантику пути. "
"Например, если поток удерживает блокирующую блокировку (уровень 2), ему "
-"разрешено захватывать спин-блокировку (уровень 1), но не спящую блокировку ("
-"уровень 3), поскольку блокирующие блокировки предназначены для защиты более "
+"разрешено захватывать спин-блокировку (уровень 1), но не спящую блокировку "
+"(уровень 3), поскольку блокирующие блокировки предназначены для защиты более "
"коротких путей, чем спящие блокировки (однако эти правила не касаются "
"атомарных операций или барьеров планирования)."
@@ -2173,7 +2172,7 @@ msgid ""
"notably `clone`) uses a different order but it is luckily easy to fix by "
"inserting a dummy parameter in the `linux_clone` prototype."
msgstr ""
-"Linux(R) передает аргументы системных вызовов через регистры (поэтому на "
+"Linux(R) передаёт аргументы системных вызовов через регистры (поэтому на "
"i386 ограничено 6 параметрами), тогда как FreeBSD использует стек. "
"Подпрограмма Linux(R) `prepsyscall` должна копировать параметры из регистров "
"в стек. Порядок регистров следующий: `%ebx`, `%ecx`, `%edx`, `%esi`, `%edi`"
@@ -2304,8 +2303,7 @@ msgid ""
"{ AS(close_args), (sy_call_t *)close, AUE_CLOSE, NULL, 0, 0 }, /* 6 = close */\n"
msgstr ""
"{ 0, (sy_call_t *)linux_fork, AUE_FORK, NULL, 0, 0 }, /* 2 = linux_fork */\n"
-"{ AS(close_args), (sy_call_t *)close, AUE_CLOSE, NULL, 0, 0 }, /* 6 = close "
-"*/\n"
+"{ AS(close_args), (sy_call_t *)close, AUE_CLOSE, NULL, 0, 0 }, /* 6 = close */\n"
#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:737
@@ -2486,12 +2484,12 @@ msgstr ""
"filename]#linux_ptrace.c#. Функции для преобразования регистров между "
"Linux(R) и FreeBSD и фактический системный вызов эмуляции man:ptrace[2]. "
"Системный вызов представляет собой длинный блок switch, который реализует "
-"свой аналог в FreeBSD для каждой команды man:ptrace[2]. Команды man:ptrace[2]"
-" в основном одинаковы между Linux(R) и FreeBSD, поэтому обычно требуется "
-"лишь небольшая модификация. Например, `PT_GETREGS` в Linux(R) работает с "
-"непосредственными данными, в то время как FreeBSD использует указатель на "
-"данные, поэтому после выполнения (нативного) системного вызова man:ptrace[2] "
-"необходимо выполнить copyout для сохранения семантики Linux(R)."
+"свой аналог в FreeBSD для каждой команды man:ptrace[2]. Команды man:"
+"ptrace[2] в основном одинаковы между Linux(R) и FreeBSD, поэтому обычно "
+"требуется лишь небольшая модификация. Например, `PT_GETREGS` в Linux(R) "
+"работает с непосредственными данными, в то время как FreeBSD использует "
+"указатель на данные, поэтому после выполнения (нативного) системного вызова "
+"man:ptrace[2] необходимо выполнить copyout для сохранения семантики Linux(R)."
#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:792
@@ -2621,15 +2619,15 @@ msgid ""
"the stuff necessary for loading Linux(R) A.OUT binaries is in [."
"filename]#imgact_linux.c# file."
msgstr ""
-"Эмуляционный слой Linux(R) на i386 также поддерживает бинарные файлы Linux(R)"
-" в формате A.OUT. Почти всё, что описано в предыдущих разделах, должно быть "
-"реализовано для поддержки A.OUT (кроме перевода ловушек и отправки сигналов)"
-". Поддержка бинарных файлов A.OUT больше не поддерживается, в частности, "
-"эмуляция 2.6 с ними не работает, но это не вызывает никаких проблем, так как "
-"linux-base в портах, вероятно, вообще не поддерживает бинарные файлы A.OUT. "
-"Эта поддержка, скорее всего, будет удалена в будущем. Большая часть кода, "
-"необходимого для загрузки бинарных файлов Linux(R) A.OUT, находится в файле ["
-".filename]#imgact_linux.c#."
+"Эмуляционный слой Linux(R) на i386 также поддерживает бинарные файлы "
+"Linux(R) в формате A.OUT. Почти всё, что описано в предыдущих разделах, "
+"должно быть реализовано для поддержки A.OUT (кроме перевода ловушек и "
+"отправки сигналов). Поддержка бинарных файлов A.OUT больше не "
+"поддерживается, в частности, эмуляция 2.6 с ними не работает, но это не "
+"вызывает никаких проблем, так как linux-base в портах, вероятно, вообще не "
+"поддерживает бинарные файлы A.OUT. Эта поддержка, скорее всего, будет "
+"удалена в будущем. Большая часть кода, необходимого для загрузки бинарных "
+"файлов Linux(R) A.OUT, находится в файле [.filename]#imgact_linux.c#."
#. type: Title ==
#: documentation/content/en/articles/linux-emulation/_index.adoc:842
@@ -2750,16 +2748,16 @@ msgid ""
"Linux(R) binary as it might harm things."
msgstr ""
"Слой эмуляции Linux(R) в FreeBSD поддерживает динамическую настройку "
-"эмулируемой версии. Это выполняется с помощью man:sysctl[8], а именно `compat"
-".linux.osrelease`. Установка этого man:sysctl[8] влияет на поведение слоя "
-"эмуляции во время выполнения. При установке значения 2.6.x устанавливается "
-"переменная `linux_use_linux26`, а при установке другого значения она "
-"остаётся сброшенной. Эта переменная (а также аналогичные переменные для "
-"каждой клетки) определяет, используется ли в коде инфраструктура 2.6 (в "
-"основном, преобразование PID). Настройка версии применяется глобально для "
-"всей системы и влияет на все процессы Linux(R). Не следует изменять "
-"man:sysctl[8] во время выполнения любого бинарного файла Linux(R), так как "
-"это может привести к проблемам."
+"эмулируемой версии. Это выполняется с помощью man:sysctl[8], а именно "
+"`compat.linux.osrelease`. Установка этого man:sysctl[8] влияет на поведение "
+"слоя эмуляции во время выполнения. При установке значения 2.6.x "
+"устанавливается переменная `linux_use_linux26`, а при установке другого "
+"значения она остаётся сброшенной. Эта переменная (а также аналогичные "
+"переменные для каждой клетки) определяет, используется ли в коде "
+"инфраструктура 2.6 (в основном, преобразование PID). Настройка версии "
+"применяется глобально для всей системы и влияет на все процессы Linux(R). Не "
+"следует изменять man:sysctl[8] во время выполнения любого бинарного файла "
+"Linux(R), так как это может привести к проблемам."
#. type: Title ====
#: documentation/content/en/articles/linux-emulation/_index.adoc:885
@@ -2777,8 +2775,8 @@ msgid ""
"other words a process. For single-threaded process the PID equals the TGID."
msgstr ""
"Семантика потоков в Linux(R) немного запутанная и использует совершенно "
-"другую терминологию по сравнению с FreeBSD. Процесс в Linux(R) состоит из `"
-"struct task`, включающей два поля идентификаторов — PID и TGID. PID — это "
+"другую терминологию по сравнению с FreeBSD. Процесс в Linux(R) состоит из "
+"`struct task`, включающей два поля идентификаторов — PID и TGID. PID — это "
"_не_ идентификатор процесса, а идентификатор потока. TGID идентифицирует "
"группу потоков, другими словами, процесс. Для однопоточного процесса PID "
"равен TGID."
@@ -2883,8 +2881,8 @@ msgid ""
msgstr ""
"PID используется для идентификации процесса FreeBSD, к которому присоединена "
"эта структура. `child_se_tid` и `child_clear_tid` используются для "
-"копирования адреса TID при завершении и создании процесса. Указатель `shared`"
-" указывает на структуру, разделяемую между потоками. Переменная "
+"копирования адреса TID при завершении и создании процесса. Указатель "
+"`shared` указывает на структуру, разделяемую между потоками. Переменная "
"`pdeath_signal` определяет сигнал завершения родительского процесса, а "
"указатель `threads` используется для связывания этой структуры со списком "
"потоков. Структура `linux_emuldata_shared` выглядит следующим образом:"
@@ -3006,8 +3004,8 @@ msgid ""
"The `clone` syscall is the way threads are created in Linux(R). The syscall "
"prototype looks like this:"
msgstr ""
-"`clone` — это системный вызов, с помощью которого создаются потоки в Linux(R)"
-". Прототип системного вызова выглядит следующим образом:"
+"`clone` — это системный вызов, с помощью которого создаются потоки в "
+"Linux(R). Прототип системного вызова выглядит следующим образом:"
#. type: delimited block . 4
#: documentation/content/en/articles/linux-emulation/_index.adoc:977
@@ -3044,15 +3042,15 @@ msgstr ""
"байт параметра `flags` является сигналом завершения для вновь созданного "
"процесса. Параметр `stack`, если он не `NULL`, указывает, где находится стек "
"потока, а если он `NULL`, предполагается копирование при записи стека "
-"вызывающего процесса (т.е. делать то же, что делает обычная функция "
-"man:fork[2]). Параметр `parent_tidptr` используется как адрес для "
-"копирования PID процесса (т.е. идентификатора потока) после того, как "
-"процесс достаточно инициализирован, но ещё не готов к выполнению. Параметр "
-"`dummy` присутствует из-за очень странного соглашения о вызовах этого "
-"системного вызова на i386. Он использует регистры напрямую и не позволяет "
-"компилятору делать это, что приводит к необходимости использования "
-"фиктивного системного вызова. Параметр `child_tidptr` используется как адрес "
-"для копирования PID после завершения ветвления процесса и при его завершении."
+"вызывающего процесса (т.е. делать то же, что делает обычная функция man:"
+"fork[2]). Параметр `parent_tidptr` используется как адрес для копирования "
+"PID процесса (т.е. идентификатора потока) после того, как процесс достаточно "
+"инициализирован, но ещё не готов к выполнению. Параметр `dummy` присутствует "
+"из-за очень странного соглашения о вызовах этого системного вызова на i386. "
+"Он использует регистры напрямую и не позволяет компилятору делать это, что "
+"приводит к необходимости использования фиктивного системного вызова. "
+"Параметр `child_tidptr` используется как адрес для копирования PID после "
+"завершения ветвления процесса и при его завершении."
#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:1001
@@ -3095,11 +3093,11 @@ msgstr ""
"эту возможность. Затем выполняется настройка `child_set_tid` и "
"`child_clear_tid`, что активирует соответствующую функциональность далее в "
"коде. На этом этапе мы копируем PID по адресу, указанному в `parent_tidptr`. "
-"Установка стека процесса выполняется простой перезаписью регистра `%esp` "
-"(`%rsp` на amd64) в кадре потока. Далее настраивается TLS для нового "
-"процесса. После этого может быть эмулирована семантика man:vfork[2], и, "
-"наконец, новый процесс помещается в очередь выполнения, а его PID "
-"возвращается родительскому процессу через возвращаемое значение `clone`."
+"Установка стека процесса выполняется простой перезаписью регистра `%esp` (`"
+"%rsp` на amd64) в кадре потока. Далее настраивается TLS для нового процесса. "
+"После этого может быть эмулирована семантика man:vfork[2], и, наконец, новый "
+"процесс помещается в очередь выполнения, а его PID возвращается "
+"родительскому процессу через возвращаемое значение `clone`."
#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:1004
@@ -3128,7 +3126,7 @@ msgid ""
"manipulate `linux_emuldata_shared`. The `emul_lock` is a nonsleepable "
"blocking mutex while `emul_shared_lock` is a sleepable blocking `sx_lock`. "
"Due to of the per-subsystem locking we can coalesce some locks and that is "
-"why the em find offers the non-locking access."
+"why the em_find offers the non-locking access."
msgstr ""
"Блокировка реализована на уровне подсистем, поскольку не ожидается высокой "
"конкуренции за эти ресурсы. Существует две блокировки: `emul_lock`, "
@@ -3198,10 +3196,10 @@ msgstr ""
"в данных, специфичных для конкретного потока, но доступных на уровне "
"процесса. Например, имя выполняемого потока или что-то подобное. "
"Традиционный API для работы с потоками в UNIX® — pthreads — предоставляет "
-"способ сделать это через функции `man:pthread_key_create[3]`, "
-"`man:pthread_setspecific[3]` и `man:pthread_getspecific[3]`, где поток может "
-"создать ключ к локальным данным потока и использовать "
-"`man:pthread_getspecific[3]` или `man:pthread_getspecific[3]` для управления "
+"способ сделать это через функции `man:pthread_key_create[3]`, `man:"
+"pthread_setspecific[3]` и `man:pthread_getspecific[3]`, где поток может "
+"создать ключ к локальным данным потока и использовать `man:"
+"pthread_getspecific[3]` или `man:pthread_getspecific[3]` для управления "
"этими данными. Легко заметить, что это не самый удобный способ. Поэтому "
"различные разработчики компиляторов C/C++ предложили более удобный метод. "
"Они ввели новое ключевое слово `thread`, которое указывает, что переменная "
@@ -3221,8 +3219,8 @@ msgstr ""
"необходимость перезагружать сегмент при каждом переключении контекста, что "
"может замедлять переключения. FreeBSD пытается минимизировать эти накладные "
"расходы, используя только 1 дескриптор сегмента, в то время как Linux® "
-"использует 3. Интересно, что почти ничто не использует больше 1 дескриптора ("
-"только Wine, кажется, использует 2), поэтому Linux® платит эту "
+"использует 3. Интересно, что почти ничто не использует больше 1 дескриптора "
+"(только Wine, кажется, использует 2), поэтому Linux® платит эту "
"необязательную цену при переключении контекстов."
#. type: Title ====
@@ -3244,9 +3242,9 @@ msgstr ""
"Архитектура i386 реализует так называемые сегменты. Сегмент — это описание "
"области памяти. Он включает базовый адрес (начало) области памяти, её конец "
"(границу), тип, защиту и т.д. Доступ к памяти, описываемой сегментом, может "
-"осуществляться с использованием регистров селекторов сегментов (`%cs`, `%ds`"
-", `%ss`, `%es`, `%fs`, `%gs`). Например, предположим, что у нас есть сегмент "
-"с базовым адресом 0x1234 и длиной, а также следующий код:"
+"осуществляться с использованием регистров селекторов сегментов (`%cs`, `"
+"%ds`, `%ss`, `%es`, `%fs`, `%gs`). Например, предположим, что у нас есть "
+"сегмент с базовым адресом 0x1234 и длиной, а также следующий код:"
#. type: delimited block . 4
#: documentation/content/en/articles/linux-emulation/_index.adoc:1053
@@ -3259,16 +3257,16 @@ msgstr "mov %edx,%gs:0x10\n"
msgid ""
"This will load the content of the `%edx` register into memory location "
"0x1244. Some segment registers have a special use, for example `%cs` is "
-"used for code segment and `%ss` is used for stack segment but `%fs` and "
-"`%gs` are generally unused. Segments are either stored in a global GDT "
-"table or in a local LDT table. LDT is accessed via an entry in the GDT. "
-"The LDT can store more types of segments. LDT can be per process. Both "
-"tables define up to 8191 entries."
+"used for code segment and `%ss` is used for stack segment but `%fs` and `"
+"%gs` are generally unused. Segments are either stored in a global GDT table "
+"or in a local LDT table. LDT is accessed via an entry in the GDT. The LDT "
+"can store more types of segments. LDT can be per process. Both tables "
+"define up to 8191 entries."
msgstr ""
"Это загрузит содержимое регистра `%edx` в ячейку памяти по адресу 0x1244. "
"Некоторые сегментные регистры имеют специальное назначение, например, `%cs` "
-"используется для сегмента кода, а `%ss` — для сегмента стека, но `%fs` и "
-"`%gs` обычно не используются. Сегменты хранятся либо в глобальной таблице "
+"используется для сегмента кода, а `%ss` — для сегмента стека, но `%fs` и `"
+"%gs` обычно не используются. Сегменты хранятся либо в глобальной таблице "
"GDT, либо в локальной таблице LDT. Доступ к LDT осуществляется через запись "
"в GDT. LDT может хранить больше типов сегментов. LDT может быть отдельной "
"для каждого процесса. Обе таблицы определяют до 8191 записей."
@@ -3295,7 +3293,7 @@ msgid ""
msgstr ""
"Существует два основных способа настройки TLS в Linux(R). Он может быть "
"настроен при клонировании процесса с использованием системного вызова `clone`"
-" или с помощью вызова `set_thread_area`. Когда процесс передает флаг "
+" или с помощью вызова `set_thread_area`. Когда процесс передаёт флаг "
"`CLONE_SETTLS` в `clone`, ядро ожидает, что память, на которую указывает "
"регистр `%esi`, будет содержать пользовательское представление сегмента в "
"Linux(R), которое преобразуется в машинное представление сегмента и "
@@ -3361,7 +3359,7 @@ msgstr ""
"пользовательском пространстве использует номер из дескриптора, но это "
"работает в большинстве случаев (никогда не встречалось ситуации, когда это "
"не срабатывало), так как процесс в пользовательском пространстве обычно "
-"передает 1. Затем мы преобразуем дескриптор из формата Linux(R) в "
+"передаёт 1. Затем мы преобразуем дескриптор из формата Linux(R) в "
"машинозависимую форму (т.е. независимую от операционной системы) и копируем "
"его в дескриптор сегмента, определенный FreeBSD. Наконец, мы можем загрузить "
"его. Мы назначаем дескриптор PCB потока (блок управления процессом) и "
@@ -3392,8 +3390,8 @@ msgstr ""
"Реализация amd64 аналогична реализации i386, но изначально не использовался "
"32-битный дескриптор сегмента для этой цели (поэтому даже нативные "
"пользователи 32-битного TLS не работали), поэтому нам пришлось добавить "
-"такой сегмент и реализовать его загрузку при каждом переключении контекста ("
-"когда установлен флаг, сигнализирующий о использовании 32-битного режима). "
+"такой сегмент и реализовать его загрузку при каждом переключении контекста "
+"(когда установлен флаг, сигнализирующий о использовании 32-битного режима). "
"Кроме этого, загрузка TLS точно такая же, только номера сегментов "
"отличаются, а формат дескриптора и загрузка немного различаются."
@@ -3538,9 +3536,7 @@ msgstr "Системный вызов futex выглядит следующим
#: documentation/content/en/articles/linux-emulation/_index.adoc:1150
#, no-wrap
msgid "int futex(void *uaddr, int op, int val, struct timespec *timeout, void *uaddr2, int val3);\n"
-msgstr ""
-"int futex(void *uaddr, int op, int val, struct timespec *timeout, void *"
-"uaddr2, int val3);\n"
+msgstr "int futex(void *uaddr, int op, int val, struct timespec *timeout, void *uaddr2, int val3);\n"
#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:1153
@@ -3872,9 +3868,9 @@ msgid ""
"futex. This cooperates with `futex_sleep`."
msgstr ""
"Пробуждение потока, ожидающего на фьютексе, выполняется в функции "
-"`futex_wake`. Сначала в этой функции мы имитируем странное поведение Linux(R)"
-", где пробуждаются N потоков для всех операций, за исключением того, что "
-"операции REQUEUE выполняются на N+1 потоках. Однако обычно это не имеет "
+"`futex_wake`. Сначала в этой функции мы имитируем странное поведение "
+"Linux(R), где пробуждаются N потоков для всех операций, за исключением того, "
+"что операции REQUEUE выполняются на N+1 потоках. Однако обычно это не имеет "
"значения, так как мы пробуждаем все потоки. Далее в функции в цикле мы "
"пробуждаем n потоков, после чего проверяем, есть ли новый фьютекс для "
"перестановки. Если есть, мы переставляем до n2 потоков на новый futex. Это "
@@ -4025,8 +4021,7 @@ msgstr ""
"openat(123, /tmp/bah\\, flags, mode)\t/* opens /tmp/bah */\n"
"openat(123, bah\\, flags, mode)\t\t/* opens /tmp/foo/bah */\n"
"openat(AT_FDWCWD, bah\\, flags, mode)\t/* opens /tmp/bah */\n"
-"openat(stdio, bah\\, flags, mode)\t/* returns error because stdio is not a "
-"directory */\n"
+"openat(stdio, bah\\, flags, mode)\t/* returns error because stdio is not a directory */\n"
#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:1331
@@ -4093,13 +4088,13 @@ msgstr ""
"Реализация выполнена путем изменения функции man:namei[9] (описанной выше) "
"для приема дополнительного параметра `dirfd` в структуре `nameidata`, "
"который указывает начальную точку для поиска пути вместо использования "
-"текущей рабочей директории каждый раз. Преобразование `dirfd` из номера "
+"текущего рабочего каталога каждый раз. Преобразование `dirfd` из номера "
"файлового дескриптора в vnode выполняется в нативных *at-системных вызовах. "
"Когда `dirfd` равен `AT_FDCWD`, запись `dvp` в структуре `nameidata` имеет "
"значение `NULL`, но если `dirfd` представляет другой номер, мы получаем файл "
"по этому дескриптору, проверяем его валидность и, если к нему прикреплен "
"vnode, получаем этот vnode. Затем проверяем, является ли этот vnode "
-"директорией. В самой функции man:namei[9] мы просто заменяем vnode `dvp` на "
+"каталогом. В самой функции man:namei[9] мы просто заменяем vnode `dvp` на "
"переменную `dp` в функции man:namei[9], которая определяет начальную точку. "
"Функция man:namei[9] используется не напрямую, а через цепочку различных "
"функций на разных уровнях. Например, `openat` работает следующим образом:"
@@ -4170,8 +4165,8 @@ msgstr ""
"обработчика. Существуют небольшие проблемы с этим подходом, поскольку "
"Linux(R) не всегда последовательно использует разделение на наборы, поэтому "
"иногда ioctls для другого набора оказываются внутри набора, к которому они "
-"не должны принадлежать (например, SCSI generic ioctls внутри набора cdrom и т"
-".д.). В настоящее время FreeBSD реализует не так много ioctls Linux(R) (по "
+"не должны принадлежать (например, SCSI generic ioctls внутри набора cdrom и "
+"т.д.). В настоящее время FreeBSD реализует не так много ioctls Linux(R) (по "
"сравнению с NetBSD, например), но планируется перенести их из NetBSD. "
"Тенденция такова, что ioctls Linux(R) используются даже в родных драйверах "
"FreeBSD для упрощения портирования приложений."
@@ -4402,8 +4397,8 @@ msgstr "Литература"
#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:1435
msgid ""
-"Marshall Kirk McKusick - George V. Nevile-Neil. Design and Implementation of "
-"the FreeBSD operating system. Addison-Wesley, 2005."
+"Marshall Kirk McKusick - George V. Neville-Neil. Design and Implementation "
+"of the FreeBSD operating system. Addison-Wesley, 2005."
msgstr ""
"Marshall Kirk McKusick - George V. Neville-Neil. Design and Implementation "
"of the FreeBSD operating system. Addison-Wesley, 2005 год."