aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/ru/articles/linux-emulation
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/content/ru/articles/linux-emulation')
-rw-r--r--documentation/content/ru/articles/linux-emulation/_index.adoc10
-rw-r--r--documentation/content/ru/articles/linux-emulation/_index.po474
2 files changed, 244 insertions, 240 deletions
diff --git a/documentation/content/ru/articles/linux-emulation/_index.adoc b/documentation/content/ru/articles/linux-emulation/_index.adoc
index 9d60209b00..322804579b 100644
--- a/documentation/content/ru/articles/linux-emulation/_index.adoc
+++ b/documentation/content/ru/articles/linux-emulation/_index.adoc
@@ -443,9 +443,9 @@ if (__predict_true(p->p_sysent != &elf_Linux(R)_sysvec))
* `fhold` - ссылается на обработчик файла
[[md]]
-== Слой эмуляции Linux(R) - машинно-зависимая часть
+== Слой эмуляции Linux(R) - машинозависимая часть
-В этом разделе рассматривается реализация слоя эмуляции Linux(R) в операционной системе FreeBSD. Сначала описывается машинно-зависимая часть, рассказывающая о том, как и где реализовано взаимодействие между пользовательским пространством и ядром. Рассматриваются системные вызовы, сигналы, ptrace, ловушки и исправление стека. Эта часть посвящена архитектуре i386, но написана в общем виде, поэтому другие архитектуры не должны сильно отличаться. Следующая часть — машинно-независимая часть Linuxulator. Этот раздел охватывает только i386 и обработку ELF. A.OUT устарел и не поддерживается.
+В этом разделе рассматривается реализация слоя эмуляции Linux(R) в операционной системе FreeBSD. Сначала описывается машинозависимая часть, рассказывающая о том, как и где реализовано взаимодействие между пользовательским пространством и ядром. Рассматриваются системные вызовы, сигналы, ptrace, ловушки и исправление стека. Эта часть посвящена архитектуре i386, но написана в общем виде, поэтому другие архитектуры не должны сильно отличаться. Следующая часть — машинонезависимая часть Linuxulator. Этот раздел охватывает только i386 и обработку ELF. A.OUT устарел и не поддерживается.
[[syscall-handling]]
=== Обработка системных вызовов
@@ -576,9 +576,9 @@ translate_traps(int signal, int trap_code)
Эмуляционный слой 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#.
[[mi]]
-== Слой эмуляции Linux(R) - машино-независимая часть
+== Слой эмуляции Linux(R) - машинонезависимая часть
-В этом разделе рассматривается машинно-независимая часть Linuxulator. Он охватывает инфраструктуру эмуляции, необходимую для эмуляции Linux(R) 2.6, реализацию thread local storage (TLS) (на i386) и фьютексы. Затем мы кратко обсуждаем некоторые системные вызовы.
+В этом разделе рассматривается машинонезависимая часть Linuxulator. Он охватывает инфраструктуру эмуляции, необходимую для эмуляции Linux(R) 2.6, реализацию thread local storage (TLS) (на i386) и фьютексы. Затем мы кратко обсуждаем некоторые системные вызовы.
[[nptl-desc]]
=== Описание NPTL
@@ -713,7 +713,7 @@ mov %edx,%gs:0x10
[[tls-i386]]
===== i386
-Загрузка TLS для текущего потока происходит путем вызова `set_thread_area`, тогда как загрузка TLS для второго процесса в `clone` выполняется в отдельном блоке в `clone`. Эти две функции очень похожи. Единственное различие заключается в фактической загрузке сегмента GDT, которая происходит при следующем переключении контекста для вновь созданного процесса, в то время как `set_thread_area` должен загрузить его напрямую. Код в основном делает следующее. Он копирует дескриптор сегмента в формате Linux(R) из пользовательского пространства. Код проверяет номер дескриптора, но поскольку он различается между FreeBSD и Linux(R), мы немного имитируем его. Мы поддерживаем только индексы 6, 3 и -1. Число 6 — это оригинальный номер Linux(R), 3 — оригинальный номер FreeBSD, а -1 означает авто-выбор. Затем мы устанавливаем номер дескриптора на константу 3 и копируем его обратно в пользовательское пространство. Мы полагаемся на то, что процесс в пользовательском пространстве использует номер из дескриптора, но это работает в большинстве случаев (никогда не встречалось ситуации, когда это не срабатывало), так как процесс в пользовательском пространстве обычно передает 1. Затем мы преобразуем дескриптор из формата Linux(R) в машинно-зависимую форму (т.е. независимую от операционной системы) и копируем его в дескриптор сегмента, определенный FreeBSD. Наконец, мы можем загрузить его. Мы назначаем дескриптор PCB потока (блок управления процессом) и загружаем сегмент `%gs` с помощью `load_gs`. Эта загрузка должна выполняться в критической секции, чтобы ничто не могло нас прервать. Случай `CLONE_SETTLS` работает точно так же, только загрузка с помощью `load_gs` не выполняется. Сегмент, используемый для этого (сегмент номер 3), разделяется между процессами FreeBSD и Linux(R), поэтому слой эмуляции Linux(R) не добавляет накладных расходов по сравнению с обычным FreeBSD.
+Загрузка TLS для текущего потока происходит путем вызова `set_thread_area`, тогда как загрузка TLS для второго процесса в `clone` выполняется в отдельном блоке в `clone`. Эти две функции очень похожи. Единственное различие заключается в фактической загрузке сегмента GDT, которая происходит при следующем переключении контекста для вновь созданного процесса, в то время как `set_thread_area` должен загрузить его напрямую. Код в основном делает следующее. Он копирует дескриптор сегмента в формате Linux(R) из пользовательского пространства. Код проверяет номер дескриптора, но поскольку он различается между FreeBSD и Linux(R), мы немного имитируем его. Мы поддерживаем только индексы 6, 3 и -1. Число 6 — это оригинальный номер Linux(R), 3 — оригинальный номер FreeBSD, а -1 означает авто-выбор. Затем мы устанавливаем номер дескриптора на константу 3 и копируем его обратно в пользовательское пространство. Мы полагаемся на то, что процесс в пользовательском пространстве использует номер из дескриптора, но это работает в большинстве случаев (никогда не встречалось ситуации, когда это не срабатывало), так как процесс в пользовательском пространстве обычно передает 1. Затем мы преобразуем дескриптор из формата Linux(R) в машинозависимую форму (т.е. независимую от операционной системы) и копируем его в дескриптор сегмента, определенный FreeBSD. Наконец, мы можем загрузить его. Мы назначаем дескриптор PCB потока (блок управления процессом) и загружаем сегмент `%gs` с помощью `load_gs`. Эта загрузка должна выполняться в критической секции, чтобы ничто не могло нас прервать. Случай `CLONE_SETTLS` работает точно так же, только загрузка с помощью `load_gs` не выполняется. Сегмент, используемый для этого (сегмент номер 3), разделяется между процессами FreeBSD и Linux(R), поэтому слой эмуляции Linux(R) не добавляет накладных расходов по сравнению с обычным FreeBSD.
[[tls-amd64]]
===== amd64
diff --git a/documentation/content/ru/articles/linux-emulation/_index.po b/documentation/content/ru/articles/linux-emulation/_index.po
index 0296103bc0..cb02ba5937 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: 2025-10-13 23:41+0300\n"
-"PO-Revision-Date: 2025-10-03 04:45+0000\n"
+"POT-Creation-Date: 2024-01-17 20:35-0300\n"
+"PO-Revision-Date: 2025-10-29 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"
@@ -18,13 +18,14 @@ msgstr ""
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.17\n"
-#. type: Yaml Front Matter Hash Value: description
+#. type: YAML Front Matter: description
#: 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 Hash Value: title
+#. type: YAML Front Matter: title
#: documentation/content/en/articles/linux-emulation/_index.adoc:1
#, no-wrap
msgid "Linux® emulation in FreeBSD"
@@ -36,12 +37,12 @@ msgstr "Эмуляция Linux® в FreeBSD"
msgid "Linux(R) emulation in FreeBSD"
msgstr "Эмуляция Linux(R) в FreeBSD"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:44
msgid "Abstract"
msgstr "Аннотация"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:54
msgid ""
"This masters thesis deals with updating the Linux(R) emulation layer (the so "
@@ -58,8 +59,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 года в рамках программы "
@@ -73,7 +74,7 @@ msgstr ""
"разработчиков эмуляции, работаем над тем, чтобы сделать эмуляцию Linux(R) "
"2.6 стандартным слоем эмуляции в FreeBSD."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:56
msgid "'''"
msgstr "'''"
@@ -84,7 +85,7 @@ msgstr "'''"
msgid "Introduction"
msgstr "Введение"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:67
msgid ""
"In the last few years the open source UNIX(R) based operating systems "
@@ -111,7 +112,7 @@ msgstr ""
"пользователей. Это приводит к ситуации, когда для Linux(R) доступно "
"множество проприетарных программ, которые не поддерживают FreeBSD."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:69
msgid ""
"Naturally, a need for the ability to run Linux(R) binaries on a FreeBSD "
@@ -122,7 +123,7 @@ msgstr ""
"бинарников в системе FreeBSD, и именно этому посвящена данная работа: "
"эмуляции ядра Linux(R) в операционной системе FreeBSD."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:72
msgid ""
"During the Summer of 2006 Google Inc. sponsored a project which focused on "
@@ -141,7 +142,7 @@ msgstr ""
msgid "A look inside..."
msgstr "Взгляд изнутри..."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:80
msgid ""
"In this section we are going to describe every operating system in "
@@ -163,7 +164,7 @@ msgstr ""
msgid "What is UNIX(R)"
msgstr "Что такое UNIX(R)"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:94
msgid ""
"UNIX(R) is an operating system with a long history that has influenced "
@@ -194,8 +195,8 @@ msgstr ""
"идеи были использованы многими другими операционными системами по всему "
"миру, образовав так называемые UNIX(R)-подобные операционные системы. В наши "
"дни наиболее влиятельными из них являются Linux(R), Solaris и, возможно (в "
-"некоторой степени), FreeBSD. Существуют корпоративные производные UNIX(R) "
-"(AIX, HP-UX и т. д.), но они всё больше мигрируют на упомянутые системы. "
+"некоторой степени), FreeBSD. Существуют корпоративные производные UNIX(R) ("
+"AIX, HP-UX и т. д.), но они всё больше мигрируют на упомянутые системы. "
"Давайте подведём итог типичным характеристикам UNIX(R)."
#. type: Title ====
@@ -206,7 +207,7 @@ msgstr ""
msgid "Technical details"
msgstr "Технические детали"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:104
msgid ""
"Every running program constitutes a process that represents a state of the "
@@ -233,7 +234,7 @@ msgstr ""
msgid "Communication between kernel and user space process"
msgstr "Обмен данными между ядром и пользовательским процессом"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:114
msgid ""
"Common UNIX(R) API defines a syscall as a way to issue commands from a user "
@@ -255,7 +256,7 @@ msgstr ""
"различными способами (зависит от реализации). Системные вызовы являются "
"синхронными."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:118
msgid ""
"Another possible way to communicate is by using a _trap_. Traps occur "
@@ -264,8 +265,8 @@ msgid ""
"reaction like sending a _signal_ (division by zero)."
msgstr ""
"Еще один возможный способ взаимодействия — использование _прерывания_. "
-"Прерывания происходят асинхронно после возникновения определенного события "
-"(деление на ноль, ошибка страницы и т.д.). Прерывание может быть прозрачным "
+"Прерывания происходят асинхронно после возникновения определенного события ("
+"деление на ноль, ошибка страницы и т.д.). Прерывание может быть прозрачным "
"для процесса (ошибка страницы) или привести к реакции, например, отправке "
"_сигнала_ (деление на ноль)."
@@ -275,7 +276,7 @@ msgstr ""
msgid "Communication between processes"
msgstr "Обмен данными между процессами"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:125
msgid ""
"There are other APIs (System V IPC, shared memory etc.) but the single most "
@@ -296,7 +297,7 @@ msgstr ""
msgid "Process management"
msgstr "Управление процессами"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:137
msgid ""
"Kernel instances are processed first in the system (so called init). Every "
@@ -326,7 +327,7 @@ msgstr ""
msgid "Thread management"
msgstr "Управление потоками"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:145
msgid ""
"Traditional UNIX(R) does not define any API nor implementation for "
@@ -343,7 +344,7 @@ msgstr ""
"всей группы потоков в один процесс с управлением потоками в пользовательском "
"пространстве (потоки 1:N). Сравнение основных особенностей каждого подхода:"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:147
msgid "1:1 threading"
msgstr "Потоки 1:1"
@@ -372,7 +373,7 @@ msgstr "нет необходимости в обёртке системных
msgid "can utilize multiple CPUs"
msgstr "может использовать несколько процессоров"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:154
msgid "1:N threading"
msgstr "Потоки 1:N"
@@ -403,7 +404,7 @@ msgstr "не может использовать более одного CPU"
msgid "What is FreeBSD?"
msgstr "Что такое FreeBSD?"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:169
msgid ""
"The FreeBSD project is one of the oldest open source operating systems "
@@ -425,7 +426,7 @@ msgstr ""
"своё имя благодаря либеральной лицензии. Другая группа создала операционную "
"систему NetBSD с другими целями. Мы сосредоточимся на FreeBSD."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:174
msgid ""
"FreeBSD is a modern UNIX(R)-based operating system with all the features of "
@@ -445,42 +446,42 @@ msgstr ""
"UNIX(R)-подобных операционных систем. По состоянию на декабрь 2006 года и "
"разработку 7-CURRENT поддерживаются следующие функции эмуляции:"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:176
msgid "FreeBSD/i386 emulation on FreeBSD/amd64"
msgstr "Совместимость FreeBSD/i386 на FreeBSD/amd64"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:177
msgid "FreeBSD/i386 emulation on FreeBSD/ia64"
msgstr "FreeBSD/i386 эмуляция на FreeBSD/ia64"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:178
msgid "Linux(R)-emulation of Linux(R) operating system on FreeBSD"
msgstr "Эмуляция Linux(R) операционной системы Linux(R) на FreeBSD"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:179
msgid "NDIS-emulation of Windows networking drivers interface"
msgstr "NDIS-эмуляция интерфейса сетевых драйверов Windows"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:180
msgid "NetBSD-emulation of NetBSD operating system"
msgstr "NetBSD-эмуляция операционной системы NetBSD"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:181
msgid "PECoff-support for PECoff FreeBSD executables"
msgstr "Поддержка PECoff для исполняемых файлов FreeBSD в формате PECoff"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:182
msgid "SVR4-emulation of System V revision 4 UNIX(R)"
msgstr "Эмуляция SVR4 System V revision 4 UNIX(R)"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:185
msgid ""
"Actively developed emulations are the Linux(R) layer and various FreeBSD-on-"
@@ -491,7 +492,7 @@ msgstr ""
"FreeBSD-on-FreeBSD. Остальные в настоящее время не должны работать корректно "
"или быть пригодными к использованию."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:195
msgid ""
"FreeBSD is traditional flavor of UNIX(R) in the sense of dividing the run of "
@@ -518,7 +519,7 @@ msgstr ""
msgid "System entries"
msgstr "Системные записи"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:204
msgid ""
"FreeBSD has an abstraction called an execution class loader, which is a "
@@ -535,8 +536,8 @@ msgstr ""
"которая является прослойкой в системном вызове man:execve[2]. Она использует "
"структуру `sysentvec`, описывающую ABI исполняемого файла. Эта структура "
"содержит такие элементы, как таблицу преобразования errno, таблицу "
-"преобразования сигналов, различные функции для обработки системных вызовов "
-"(исправление стека, создание дампов памяти и т.д.). Каждый ABI, который ядро "
+"преобразования сигналов, различные функции для обработки системных вызовов ("
+"исправление стека, создание дампов памяти и т.д.). Каждый ABI, который ядро "
"FreeBSD поддерживает, должен определять эту структуру, так как она "
"используется в дальнейшем в коде обработки системных вызовов и в некоторых "
"других местах. Системные вызовы обрабатываются обработчиками прерываний, где "
@@ -550,7 +551,7 @@ msgstr ""
msgid "Syscalls"
msgstr "Системные вызовы"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:209
msgid ""
"Syscalls on FreeBSD are issued by executing interrupt `0x80` with register "
@@ -560,7 +561,7 @@ msgstr ""
"установленным в регистре `%eax` номером нужного системного вызова и "
"аргументами, переданными через стек."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:215
msgid ""
"When a process issues an interrupt `0x80`, the `int0x80` syscall trap "
@@ -602,7 +603,7 @@ msgstr ""
msgid "Traps"
msgstr "Ловушки (trap)"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:224
msgid ""
"Handling of traps in FreeBSD is similar to the handling of syscalls. "
@@ -629,7 +630,7 @@ msgstr ""
msgid "Exits"
msgstr "Выходы"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:230
msgid ""
"Exits from kernel to userspace happen using the assembler routine `doreti` "
@@ -648,7 +649,7 @@ msgstr ""
msgid "UNIX(R) primitives"
msgstr "Примитивы UNIX(R)"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:238
msgid ""
"FreeBSD operating system adheres to the traditional UNIX(R) scheme, where "
@@ -665,7 +666,7 @@ msgstr ""
"осуществляется с помощью линейного поиска в пространстве PID. Каждый поток в "
"процессе получает тот же номер PID в результате вызова man:getpid[2]."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:249
msgid ""
"There are currently two ways to implement threading in FreeBSD. The first "
@@ -700,7 +701,7 @@ msgstr ""
"обработка этого идентификатора внутренняя для библиотеки и не может быть "
"использована напрямую."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:257
msgid ""
"As stated previously there are two implementations of threading in FreeBSD. "
@@ -734,7 +735,7 @@ msgstr ""
msgid "What is Linux(R)"
msgstr "Что такое Linux(R)"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:263
msgid ""
"Linux(R) is a UNIX(R)-like kernel originally developed by Linus Torvalds, "
@@ -751,7 +752,7 @@ msgstr ""
"разработки, полной поддержкой оборудования и моделью организации по принципу "
"\"доброжелательного диктатора\"."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:267
msgid ""
"Linux(R) development started in 1991 as a hobbyist project at University of "
@@ -767,7 +768,7 @@ msgstr ""
"в общем, всё необходимое. Также присутствуют высокоуровневые функции, такие "
"как виртуализация и т. д."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:270
msgid ""
"As of 2006 Linux(R) seems to be the most widely used open source operating "
@@ -783,7 +784,7 @@ msgstr ""
"доступна только в бинарном виде, поэтому перекомпиляция для других "
"операционных систем невозможна."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:275
msgid ""
"Most of the Linux(R) development happens in a Git version control system. "
@@ -802,12 +803,12 @@ msgstr ""
"обозначает мажорную версию, в которую добавляются или изменяются функции, а "
"D — минорную версию, предназначенную только для исправления ошибок."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:277
msgid "More information can be obtained from [3]."
msgstr "Дополнительную информацию можно получить из [3]."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:286
msgid ""
"Linux(R) follows the traditional UNIX(R) scheme of dividing the run of a "
@@ -822,7 +823,7 @@ msgstr ""
"осуществляется только одним способом. Далее описание относится к Linux(R) "
"2.6 на архитектуре i386(TM). Эта информация взята из [2]."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:296
msgid ""
"Syscalls in Linux(R) are performed (in userspace) using `syscallX` macros "
@@ -849,37 +850,37 @@ msgstr ""
"предполагает передачу параметров системного вызова через регистры, как "
"показано здесь:"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:298
msgid "parameter -> `%ebx`"
msgstr "параметр -> `%ebx`"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:299
msgid "parameter -> `%ecx`"
msgstr "параметр -> `%ecx`"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:300
msgid "parameter -> `%edx`"
msgstr "параметр -> `%edx`"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:301
msgid "parameter -> `%esi`"
msgstr "параметр -> `%esi`"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:302
msgid "parameter -> `%edi`"
msgstr "параметр -> `%edi`"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:303
msgid "parameter -> `%ebp`"
msgstr "параметр -> `%ebp`"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:305
msgid ""
"There are some exceptions to this, where Linux(R) uses different calling "
@@ -888,18 +889,18 @@ msgstr ""
"Существуют некоторые исключения из этого правила, где Linux(R) использует "
"другие соглашения о вызовах (наиболее примечателен системный вызов `clone`)."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:310
msgid ""
"The trap handlers are introduced in [.filename]#arch/i386/kernel/traps.c# "
"and most of these handlers live in [.filename]#arch/i386/kernel/entry.S#, "
"where handling of the traps happens."
msgstr ""
-"Обработчики ловушек представлены в файле [.filename]#arch/i386/kernel/"
-"traps.c#, а большинство этих обработчиков находятся в [.filename]#arch/i386/"
-"kernel/entry.S#, где происходит обработка ловушек."
+"Обработчики ловушек представлены в файле [.filename]#arch/i386/kernel/traps."
+"c#, а большинство этих обработчиков находятся в [.filename]#arch/i386/kernel/"
+"entry.S#, где происходит обработка ловушек."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:316
msgid ""
"Return from the syscall is managed by syscall man:exit[3], which checks for "
@@ -915,13 +916,13 @@ msgstr ""
"восстанавливаются из стека, а процесс возвращается в пользовательское "
"пространство."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:327
msgid ""
"In the 2.6 version, the Linux(R) operating system redefined some of the "
"traditional UNIX(R) primitives, notably PID, TID and thread. PID is defined "
-"not to be unique for every process, so for some processes (threads) "
-"man:getppid[2] returns the same value. Unique identification of process is "
+"not to be unique for every process, so for some processes (threads) man:"
+"getppid[2] returns the same value. Unique identification of process is "
"provided by TID. This is because _NPTL_ (New POSIX(R) Thread Library) "
"defines threads to be normal processes (so called 1:1 threading). Spawning "
"a new process in Linux(R) 2.6 happens using the `clone` syscall (fork "
@@ -935,83 +936,83 @@ 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 определяет "
"набор флагов, которые влияют на поведение процесса клонирования в отношении "
"реализации потоков. Семантика немного размыта, так как нет единого флага, "
"указывающего системному вызову создать поток."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:329
msgid "Implemented clone flags are:"
msgstr "Реализованные флаги клонирования:"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:331
msgid "`CLONE_VM` - processes share their memory space"
msgstr "`CLONE_VM` - процессы разделяют общее адресное пространство"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:332
msgid "`CLONE_FS` - share umask, cwd and namespace"
msgstr ""
"`CLONE_FS` — совместно использовать umask, текущий рабочий каталог и "
"пространство имён"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:333
msgid "`CLONE_FILES` - share open files"
msgstr "`CLONE_FILES` - совместно использовать открытые файлы"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:334
msgid "`CLONE_SIGHAND` - share signal handlers and blocked signals"
msgstr ""
"`CLONE_SIGHAND` - разделять обработчики сигналов и заблокированные сигналы"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:335
msgid "`CLONE_PARENT` - share parent"
msgstr "`CLONE_PARENT` - использовать один процесс к качестве родительского"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:336
msgid "`CLONE_THREAD` - be thread (further explanation below)"
msgstr "`CLONE_THREAD` — быть потоком (дальнейшие пояснения ниже)"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:337
msgid "`CLONE_NEWNS` - new namespace"
msgstr "`CLONE_NEWNS` - новое пространство имен"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:338
msgid "`CLONE_SYSVSEM` - share SysV undo structures"
msgstr "`CLONE_SYSVSEM` - совместное использование структур отмены SysV"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:339
msgid "`CLONE_SETTLS` - setup TLS at supplied address"
msgstr "`CLONE_SETTLS` - настройка TLS по указанному адресу"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:340
msgid "`CLONE_PARENT_SETTID` - set TID in the parent"
msgstr "`CLONE_PARENT_SETTID` - установить TID в родителе"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:341
msgid "`CLONE_CHILD_CLEARTID` - clear TID in the child"
msgstr "`CLONE_CHILD_CLEARTID` - очистить TID в дочернем процессе"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:342
msgid "`CLONE_CHILD_SETTID` - set TID in the child"
msgstr "`CLONE_CHILD_SETTID` - установить TID в дочернем процессе"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:348
msgid ""
"`CLONE_PARENT` sets the real parent to the parent of the caller. This is "
@@ -1033,7 +1034,7 @@ msgstr ""
"флагов `CLONE_*_*TID` устанавливает/сбрасывает предоставленный пользователем "
"адрес в TID или 0."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:352
msgid ""
"As you can see the `CLONE_THREAD` does most of the work and does not seem to "
@@ -1052,7 +1053,7 @@ msgstr ""
"разделение, так как glibc не использует его, и только ручное использование "
"clone позволяет программисту получить доступ к этим возможностям."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:355
msgid ""
"For non-threaded programs the PID and TID are the same. For threaded "
@@ -1067,7 +1068,7 @@ msgstr ""
"родительский процесс общий для всех процессов, образующих эту поточную "
"программу."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:357
msgid ""
"The code that implements man:pthread_create[3] in NPTL defines the clone "
@@ -1271,8 +1272,8 @@ msgstr ""
msgid ""
"The same goes with the UNIX(R) API. Most programs can live with a very "
"limited set of syscalls working. Those syscalls tend to be the oldest ones "
-"(man:read[2]/man:write[2], man:fork[2] family, man:signal[3] handling, "
-"man:exit[3], man:socket[2] API) hence it is easy to emulate because their "
+"(man:read[2]/man:write[2], man:fork[2] family, man:signal[3] handling, man:"
+"exit[3], man:socket[2] API) hence it is easy to emulate because their "
"semantics is shared among all UNIX(R)es, which exist todays."
msgstr ""
"То же самое касается UNIX(R) API. Большинство программ могут работать с "
@@ -1485,10 +1486,10 @@ msgstr ""
"Атомарные операции реализуются через набор функций, выполняющих простые "
"арифметические действия над операндами в памяти атомарным образом по "
"отношению к внешним событиям (прерываниям, вытеснению и т. д.). Атомарные "
-"операции могут гарантировать атомарность только для небольших типов данных "
-"(порядка величины типа `.long` в архитектуре C), поэтому их следует редко "
-"использовать напрямую в конечном коде, разве что для очень простых операций "
-"(например, установки флага в битовой карте). На самом деле довольно просто и "
+"операции могут гарантировать атомарность только для небольших типов данных ("
+"порядка величины типа `.long` в архитектуре C), поэтому их следует редко "
+"использовать напрямую в конечном коде, разве что для очень простых операций ("
+"например, установки флага в битовой карте). На самом деле довольно просто и "
"часто можно допустить семантическую ошибку, полагаясь только на атомарные "
"операции (обычно называемые lock-less). Ядро FreeBSD предоставляет способ "
"выполнения атомарных операций в сочетании с барьерами памяти. Барьеры памяти "
@@ -1519,8 +1520,8 @@ msgid ""
"even something like a spin-mutex is deprecated. Using the refcount "
"interface for structures, where a mutex is already used is often wrong since "
"we should probably close the reference counter in some already protected "
-"paths. A manpage discussing refcount does not exist currently, just check "
-"[.filename]#sys/refcount.h# for an overview of the existing API."
+"paths. A manpage discussing refcount does not exist currently, just check [."
+"filename]#sys/refcount.h# for an overview of the existing API."
msgstr ""
"Счетчики ссылок (refcounts) — это интерфейсы для работы с подсчетом ссылок. "
"Они реализованы с использованием атомарных операций и предназначены для "
@@ -1672,8 +1673,8 @@ msgstr ""
"указанное рядом с типом блокировки), ему запрещено захватывать блокировки "
"более высоких уровней, так как это нарушит заданную семантику пути. "
"Например, если поток удерживает блокирующую блокировку (уровень 2), ему "
-"разрешено захватывать спин-блокировку (уровень 1), но не спящую блокировку "
-"(уровень 3), поскольку блокирующие блокировки предназначены для защиты более "
+"разрешено захватывать спин-блокировку (уровень 1), но не спящую блокировку ("
+"уровень 3), поскольку блокирующие блокировки предназначены для защиты более "
"коротких путей, чем спящие блокировки (однако эти правила не касаются "
"атомарных операций или барьеров планирования)."
@@ -1975,11 +1976,11 @@ msgstr "namei"
msgid ""
"The man:namei[9] routine is a central entry point to pathname lookup and "
"translation. It traverses the path point by point from the starting point "
-"to the end point using lookup function, which is internal to VFS. The "
-"man:namei[9] syscall can cope with symlinks, absolute and relative paths. "
-"When a path is looked up using man:namei[9] it is inputed to the name cache. "
-"This behavior can be suppressed. This routine is used all over the kernel "
-"and its performance is very critical."
+"to the end point using lookup function, which is internal to VFS. The man:"
+"namei[9] syscall can cope with symlinks, absolute and relative paths. When "
+"a path is looked up using man:namei[9] it is inputed to the name cache. This "
+"behavior can be suppressed. This routine is used all over the kernel and "
+"its performance is very critical."
msgstr ""
"Функция man:namei[9] является центральной точкой входа для поиска и "
"преобразования путей. Она проходит по пути шаг за шагом от начальной до "
@@ -2111,7 +2112,7 @@ msgstr "`fhold` - ссылается на обработчик файла"
#: documentation/content/en/articles/linux-emulation/_index.adoc:658
#, no-wrap
msgid "Linux(R) emulation layer -MD part"
-msgstr "Слой эмуляции Linux(R) - машинно-зависимая часть"
+msgstr "Слой эмуляции Linux(R) - машинозависимая часть"
#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:666
@@ -2126,12 +2127,12 @@ msgid ""
"is obsolete and untested."
msgstr ""
"В этом разделе рассматривается реализация слоя эмуляции Linux(R) в "
-"операционной системе FreeBSD. Сначала описывается машинно-зависимая часть, "
+"операционной системе FreeBSD. Сначала описывается машинозависимая часть, "
"рассказывающая о том, как и где реализовано взаимодействие между "
"пользовательским пространством и ядром. Рассматриваются системные вызовы, "
"сигналы, ptrace, ловушки и исправление стека. Эта часть посвящена "
"архитектуре i386, но написана в общем виде, поэтому другие архитектуры не "
-"должны сильно отличаться. Следующая часть — машинно-независимая часть "
+"должны сильно отличаться. Следующая часть — машинонезависимая часть "
"Linuxulator. Этот раздел охватывает только i386 и обработку ELF. A.OUT "
"устарел и не поддерживается."
@@ -2149,11 +2150,11 @@ msgid ""
"a Linux(R) process running on FreeBSD issues a syscall, the general syscall "
"routine calls linux prepsyscall routine for the Linux(R) ABI."
msgstr ""
-"Обработка системных вызовов в основном реализована в файле "
-"[.filename]#linux_sysvec.c#, который покрывает большинство процедур, "
-"указанных в структуре `sysentvec`. Когда процесс Linux(R), выполняющийся на "
-"FreeBSD, делает системный вызов, общая процедура обработки системных вызовов "
-"вызывает linux prepsyscall для ABI Linux(R)."
+"Обработка системных вызовов в основном реализована в файле [."
+"filename]#linux_sysvec.c#, который покрывает большинство процедур, указанных "
+"в структуре `sysentvec`. Когда процесс Linux(R), выполняющийся на FreeBSD, "
+"делает системный вызов, общая процедура обработки системных вызовов вызывает "
+"linux prepsyscall для ABI Linux(R)."
#. type: Title ====
#: documentation/content/en/articles/linux-emulation/_index.adoc:674
@@ -2175,11 +2176,10 @@ msgstr ""
"Linux(R) передает аргументы системных вызовов через регистры (поэтому на "
"i386 ограничено 6 параметрами), тогда как FreeBSD использует стек. "
"Подпрограмма Linux(R) `prepsyscall` должна копировать параметры из регистров "
-"в стек. Порядок регистров следующий: `%ebx`, `%ecx`, `%edx`, `%esi`, "
-"`%edi`, `%ebp`. Однако это верно только для _большинства_ системных "
-"вызовов. Некоторые (особенно `clone`) используют другой порядок, но это, к "
-"счастью, легко исправить, добавив фиктивный параметр в прототип "
-"`linux_clone`."
+"в стек. Порядок регистров следующий: `%ebx`, `%ecx`, `%edx`, `%esi`, `%edi`"
+", `%ebp`. Однако это верно только для _большинства_ системных вызовов. "
+"Некоторые (особенно `clone`) используют другой порядок, но это, к счастью, "
+"легко исправить, добавив фиктивный параметр в прототип `linux_clone`."
#. type: Title ====
#: documentation/content/en/articles/linux-emulation/_index.adoc:683
@@ -2239,14 +2239,14 @@ msgstr ""
#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:708
msgid ""
-"From [.filename]#syscalls.master# a script generates three files: "
-"[.filename]#linux_syscall.h#, [.filename]#linux_proto.h# and "
-"[.filename]#linux_sysent.c#. The [.filename]#linux_syscall.h# contains "
+"From [.filename]#syscalls.master# a script generates three files: [."
+"filename]#linux_syscall.h#, [.filename]#linux_proto.h# and [."
+"filename]#linux_sysent.c#. The [.filename]#linux_syscall.h# contains "
"definitions of syscall names and their numerical value, e.g.:"
msgstr ""
-"Из файла [.filename]#syscalls.master# скрипт генерирует три файла: "
-"[.filename]#linux_syscall.h#, [.filename]#linux_proto.h# и "
-"[.filename]#linux_sysent.c#. Файл [.filename]#linux_syscall.h# содержит "
+"Из файла [.filename]#syscalls.master# скрипт генерирует три файла: [."
+"filename]#linux_syscall.h#, [.filename]#linux_proto.h# и [."
+"filename]#linux_sysent.c#. Файл [.filename]#linux_syscall.h# содержит "
"определения имен системных вызовов и их числовых значений, например:"
#. type: delimited block . 4
@@ -2304,7 +2304,8 @@ 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
@@ -2345,8 +2346,8 @@ msgstr ""
"Слой эмуляции Linux(R) не является полным, так как некоторые системные "
"вызовы реализованы неправильно, а некоторые не реализованы вовсе. В слое "
"эмуляции используется механизм для пометки нереализованных системных вызовов "
-"с помощью макроса `DUMMY`. Эти заглушки находятся в файле "
-"[.filename]#linux_dummy.c# в форме `DUMMY(syscall);`, которые затем "
+"с помощью макроса `DUMMY`. Эти заглушки находятся в файле [."
+"filename]#linux_dummy.c# в форме `DUMMY(syscall);`, которые затем "
"преобразуются в различные вспомогательные файлы системных вызовов, а их "
"реализация сводится к выводу сообщения о том, что данный системный вызов не "
"реализован. Прототип `UNIMPL` не используется, потому что мы хотим иметь "
@@ -2470,8 +2471,8 @@ msgstr ""
#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:788
msgid ""
-"Linux(R) emulation in FreeBSD implements the man:ptrace[2] facility in "
-"[.filename]#linux_ptrace.c#. The routines for converting registers between "
+"Linux(R) emulation in FreeBSD implements the man:ptrace[2] facility in [."
+"filename]#linux_ptrace.c#. The routines for converting registers between "
"Linux(R) and FreeBSD and the actual man:ptrace[2] syscall emulation "
"syscall. The syscall is a long switch block that implements its counterpart "
"in FreeBSD for every man:ptrace[2] command. The man:ptrace[2] commands are "
@@ -2481,16 +2482,16 @@ msgid ""
"(native) man:ptrace[2] syscall, a copyout must be done to preserve Linux(R) "
"semantics."
msgstr ""
-"Эмуляция Linux(R) в FreeBSD реализует механизм man:ptrace[2] в файле "
-"[.filename]#linux_ptrace.c#. Функции для преобразования регистров между "
+"Эмуляция Linux(R) в FreeBSD реализует механизм man:ptrace[2] в файле [."
+"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
@@ -2617,24 +2618,24 @@ msgid ""
"especially the 2.6 emulation does not work with it but this does not cause "
"any problem, as the linux-base in ports probably do not support A.OUT "
"binaries at all. This support will probably be removed in future. Most of "
-"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#."
+"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#."
#. type: Title ==
#: documentation/content/en/articles/linux-emulation/_index.adoc:842
#, no-wrap
msgid "Linux(R) emulation layer -MI part"
-msgstr "Слой эмуляции Linux(R) - машино-независимая часть"
+msgstr "Слой эмуляции Linux(R) - машинонезависимая часть"
#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:847
@@ -2644,7 +2645,7 @@ msgid ""
"thread local storage (TLS) implementation (on i386) and futexes. Then we "
"talk briefly about some syscalls."
msgstr ""
-"В этом разделе рассматривается машинно-независимая часть Linuxulator. Он "
+"В этом разделе рассматривается машинонезависимая часть Linuxulator. Он "
"охватывает инфраструктуру эмуляции, необходимую для эмуляции Linux(R) 2.6, "
"реализацию thread local storage (TLS) (на i386) и фьютексы. Затем мы кратко "
"обсуждаем некоторые системные вызовы."
@@ -2738,27 +2739,27 @@ msgstr "Определение эмуляции 2.6 во время выполн
#: documentation/content/en/articles/linux-emulation/_index.adoc:883
msgid ""
"The Linux(R) emulation layer in FreeBSD supports runtime setting of the "
-"emulated version. This is done via man:sysctl[8], namely "
-"`compat.linux.osrelease`. Setting this man:sysctl[8] affects runtime "
-"behavior of the emulation layer. When set to 2.6.x it sets the value of "
-"`linux_use_linux26` while setting to something else keeps it unset. This "
-"variable (plus per-prison variables of the very same kind) determines "
-"whether 2.6 infrastructure (mainly PID mangling) is used in the code or "
-"not. The version setting is done system-wide and this affects all Linux(R) "
+"emulated version. This is done via man:sysctl[8], namely `compat.linux."
+"osrelease`. Setting this man:sysctl[8] affects runtime behavior of the "
+"emulation layer. When set to 2.6.x it sets the value of `linux_use_linux26` "
+"while setting to something else keeps it unset. This variable (plus per-"
+"prison variables of the very same kind) determines whether 2.6 "
+"infrastructure (mainly PID mangling) is used in the code or not. The "
+"version setting is done system-wide and this affects all Linux(R) "
"processes. The man:sysctl[8] should not be changed when running any "
"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
@@ -2776,8 +2777,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."
@@ -2882,8 +2883,8 @@ msgid ""
msgstr ""
"PID используется для идентификации процесса FreeBSD, к которому присоединена "
"эта структура. `child_se_tid` и `child_clear_tid` используются для "
-"копирования адреса TID при завершении и создании процесса. Указатель "
-"`shared` указывает на структуру, разделяемую между потоками. Переменная "
+"копирования адреса TID при завершении и создании процесса. Указатель `shared`"
+" указывает на структуру, разделяемую между потоками. Переменная "
"`pdeath_signal` определяет сигнал завершения родительского процесса, а "
"указатель `threads` используется для связывания этой структуры со списком "
"потоков. Структура `linux_emuldata_shared` выглядит следующим образом:"
@@ -3005,8 +3006,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
@@ -3072,10 +3073,10 @@ msgid ""
"the functionality later in the code. At this point we copy out the PID to "
"the address specified by `parent_tidptr`. The setting of process stack is "
"done by simply rewriting thread frame `%esp` register (`%rsp` on amd64). "
-"Next part is setting up TLS for the newly created process. After this "
-"man:vfork[2] semantics might be emulated and finally the newly created "
-"process is put on a run queue and copying out its PID to the parent process "
-"via `clone` return value is done."
+"Next part is setting up TLS for the newly created process. After this man:"
+"vfork[2] semantics might be emulated and finally the newly created process "
+"is put on a run queue and copying out its PID to the parent process via "
+"`clone` return value is done."
msgstr ""
"Системный вызов продолжает выполнение, устанавливая соответствующие флаги в "
"зависимости от переданных аргументов. Например, `CLONE_VM` преобразуется в "
@@ -3103,9 +3104,9 @@ msgstr ""
#. type: Plain text
#: documentation/content/en/articles/linux-emulation/_index.adoc:1004
msgid ""
-"The `clone` syscall is able and in fact is used for emulating classic "
-"man:fork[2] and man:vfork[2] syscalls. Newer glibc in a case of 2.6 kernel "
-"uses `clone` to implement man:fork[2] and man:vfork[2] syscalls."
+"The `clone` syscall is able and in fact is used for emulating classic man:"
+"fork[2] and man:vfork[2] syscalls. Newer glibc in a case of 2.6 kernel uses "
+"`clone` to implement man:fork[2] and man:vfork[2] syscalls."
msgstr ""
"Системный вызов `clone` способен и фактически используется для эмуляции "
"классических системных вызовов man:fork[2] и man:vfork[2]. Более новые "
@@ -3131,9 +3132,9 @@ msgid ""
msgstr ""
"Блокировка реализована на уровне подсистем, поскольку не ожидается высокой "
"конкуренции за эти ресурсы. Существует две блокировки: `emul_lock`, "
-"используемая для защиты манипуляций с `linux_emuldata`, и "
-"`emul_shared_lock`, используемая для манипуляций с `linux_emuldata_shared`. "
-"`emul_lock` представляет собой неспящий блокирующий мьютекс, в то время как "
+"используемая для защиты манипуляций с `linux_emuldata`, и `emul_shared_lock`"
+", используемая для манипуляций с `linux_emuldata_shared`. `emul_lock` "
+"представляет собой неспящий блокирующий мьютекс, в то время как "
"`emul_shared_lock` — это спящий блокирующий `sx_lock`. Благодаря блокировке "
"на уровне подсистем мы можем объединять некоторые блокировки, поэтому "
"em_find предлагает доступ без блокировки."
@@ -3165,30 +3166,30 @@ msgid ""
"their own data. Sometimes there is a need for process-wide data specific to "
"a given thread. Imagine a name of the thread in execution or something like "
"that. The traditional UNIX(R) threading API, pthreads provides a way to do "
-"it via man:pthread_key_create[3], man:pthread_setspecific[3] and "
-"man:pthread_getspecific[3] where a thread can create a key to the thread "
-"local data and using man:pthread_getspecific[3] or "
-"man:pthread_getspecific[3] to manipulate those data. You can easily see "
-"that this is not the most comfortable way this could be accomplished. So "
-"various producers of C/C++ compilers introduced a better way. They defined "
-"a new modifier keyword thread that specifies that a variable is thread "
-"specific. A new method of accessing such variables was developed as well "
-"(at least on i386). The pthreads method tends to be implemented in "
-"userspace as a trivial lookup table. The performance of such a solution is "
-"not very good. So the new method uses (on i386) segment registers to "
-"address a segment, where TLS area is stored so the actual accessing of a "
-"thread variable is just appending the segment register to the address thus "
-"addressing via it. The segment registers are usually `%gs` and `%fs` acting "
-"like segment selectors. Every thread has its own area where the thread "
-"local data are stored and the segment must be loaded on every context "
-"switch. This method is very fast and used almost exclusively in the whole "
-"i386 UNIX(R) world. Both FreeBSD and Linux(R) implement this approach and "
-"it yields very good results. The only drawback is the need to reload the "
-"segment on every context switch which can slowdown context switches. "
-"FreeBSD tries to avoid this overhead by using only 1 segment descriptor for "
-"this while Linux(R) uses 3. Interesting thing is that almost nothing uses "
-"more than 1 descriptor (only Wine seems to use 2) so Linux(R) pays this "
-"unnecessary price for context switches."
+"it via man:pthread_key_create[3], man:pthread_setspecific[3] and man:"
+"pthread_getspecific[3] where a thread can create a key to the thread local "
+"data and using man:pthread_getspecific[3] or man:pthread_getspecific[3] to "
+"manipulate those data. You can easily see that this is not the most "
+"comfortable way this could be accomplished. So various producers of C/C++ "
+"compilers introduced a better way. They defined a new modifier keyword "
+"thread that specifies that a variable is thread specific. A new method of "
+"accessing such variables was developed as well (at least on i386). The "
+"pthreads method tends to be implemented in userspace as a trivial lookup "
+"table. The performance of such a solution is not very good. So the new "
+"method uses (on i386) segment registers to address a segment, where TLS area "
+"is stored so the actual accessing of a thread variable is just appending the "
+"segment register to the address thus addressing via it. The segment "
+"registers are usually `%gs` and `%fs` acting like segment selectors. Every "
+"thread has its own area where the thread local data are stored and the "
+"segment must be loaded on every context switch. This method is very fast "
+"and used almost exclusively in the whole i386 UNIX(R) world. Both FreeBSD "
+"and Linux(R) implement this approach and it yields very good results. The "
+"only drawback is the need to reload the segment on every context switch "
+"which can slowdown context switches. FreeBSD tries to avoid this overhead "
+"by using only 1 segment descriptor for this while Linux(R) uses 3. "
+"Interesting thing is that almost nothing uses more than 1 descriptor (only "
+"Wine seems to use 2) so Linux(R) pays this unnecessary price for context "
+"switches."
msgstr ""
"В компьютерных науках потоки (threads) — это сущности внутри процесса, "
"которые могут планироваться независимо друг от друга. Потоки в процессе "
@@ -3220,8 +3221,8 @@ msgstr ""
"необходимость перезагружать сегмент при каждом переключении контекста, что "
"может замедлять переключения. FreeBSD пытается минимизировать эти накладные "
"расходы, используя только 1 дескриптор сегмента, в то время как Linux® "
-"использует 3. Интересно, что почти ничто не использует больше 1 дескриптора "
-"(только Wine, кажется, использует 2), поэтому Linux® платит эту "
+"использует 3. Интересно, что почти ничто не использует больше 1 дескриптора ("
+"только Wine, кажется, использует 2), поэтому Linux® платит эту "
"необязательную цену при переключении контекстов."
#. type: Title ====
@@ -3243,9 +3244,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
@@ -3293,8 +3294,8 @@ msgid ""
"entry. We exploit this in the emulation and in fact depend on it."
msgstr ""
"Существует два основных способа настройки TLS в Linux(R). Он может быть "
-"настроен при клонировании процесса с использованием системного вызова "
-"`clone` или с помощью вызова `set_thread_area`. Когда процесс передает флаг "
+"настроен при клонировании процесса с использованием системного вызова `clone`"
+" или с помощью вызова `set_thread_area`. Когда процесс передает флаг "
"`CLONE_SETTLS` в `clone`, ядро ожидает, что память, на которую указывает "
"регистр `%esi`, будет содержать пользовательское представление сегмента в "
"Linux(R), которое преобразуется в машинное представление сегмента и "
@@ -3360,16 +3361,16 @@ msgstr ""
"пользовательском пространстве использует номер из дескриптора, но это "
"работает в большинстве случаев (никогда не встречалось ситуации, когда это "
"не срабатывало), так как процесс в пользовательском пространстве обычно "
-"передает 1. Затем мы преобразуем дескриптор из формата Linux(R) в машинно-"
-"зависимую форму (т.е. независимую от операционной системы) и копируем его в "
-"дескриптор сегмента, определенный FreeBSD. Наконец, мы можем загрузить его. "
-"Мы назначаем дескриптор PCB потока (блок управления процессом) и загружаем "
-"сегмент `%gs` с помощью `load_gs`. Эта загрузка должна выполняться в "
-"критической секции, чтобы ничто не могло нас прервать. Случай `CLONE_SETTLS` "
-"работает точно так же, только загрузка с помощью `load_gs` не выполняется. "
-"Сегмент, используемый для этого (сегмент номер 3), разделяется между "
-"процессами FreeBSD и Linux(R), поэтому слой эмуляции Linux(R) не добавляет "
-"накладных расходов по сравнению с обычным FreeBSD."
+"передает 1. Затем мы преобразуем дескриптор из формата Linux(R) в "
+"машинозависимую форму (т.е. независимую от операционной системы) и копируем "
+"его в дескриптор сегмента, определенный FreeBSD. Наконец, мы можем загрузить "
+"его. Мы назначаем дескриптор PCB потока (блок управления процессом) и "
+"загружаем сегмент `%gs` с помощью `load_gs`. Эта загрузка должна выполняться "
+"в критической секции, чтобы ничто не могло нас прервать. Случай "
+"`CLONE_SETTLS` работает точно так же, только загрузка с помощью `load_gs` не "
+"выполняется. Сегмент, используемый для этого (сегмент номер 3), разделяется "
+"между процессами FreeBSD и Linux(R), поэтому слой эмуляции Linux(R) не "
+"добавляет накладных расходов по сравнению с обычным FreeBSD."
#. type: Title =====
#: documentation/content/en/articles/linux-emulation/_index.adoc:1097
@@ -3391,8 +3392,8 @@ msgstr ""
"Реализация amd64 аналогична реализации i386, но изначально не использовался "
"32-битный дескриптор сегмента для этой цели (поэтому даже нативные "
"пользователи 32-битного TLS не работали), поэтому нам пришлось добавить "
-"такой сегмент и реализовать его загрузку при каждом переключении контекста "
-"(когда установлен флаг, сигнализирующий о использовании 32-битного режима). "
+"такой сегмент и реализовать его загрузку при каждом переключении контекста ("
+"когда установлен флаг, сигнализирующий о использовании 32-битного режима). "
"Кроме этого, загрузка TLS точно такая же, только номера сегментов "
"отличаются, а формат дескриптора и загрузка немного различаются."
@@ -3537,7 +3538,9 @@ 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
@@ -3869,9 +3872,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. Это "
@@ -3889,8 +3892,8 @@ msgid ""
"The `FUTEX_WAKE_OP` operation is quite complicated. First we obtain two "
"futexes at addresses `uaddr` and `uaddr2` then we perform the atomic "
"operation using `val3` and `uaddr2`. Then `val` waiters on the first futex "
-"is woken up and if the atomic operation condition holds we wake up `val2` "
-"(i.e. `timeout`) waiter on the second futex."
+"is woken up and if the atomic operation condition holds we wake up `val2` (i."
+"e. `timeout`) waiter on the second futex."
msgstr ""
"Операция `FUTEX_WAKE_OP` довольно сложна. Сначала мы получаем два фьютекса "
"по адресам `uaddr` и `uaddr2`, затем выполняем атомарную операцию с "
@@ -4022,7 +4025,8 @@ 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
@@ -4166,8 +4170,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 для упрощения портирования приложений."