From nobody Sun May 17 18:17:26 2026 X-Original-To: dev-commits-doc-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gJTgJ0vhbz6clr9 for ; Sun, 17 May 2026 18:17:32 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gJTgJ0c76z49hD for ; Sun, 17 May 2026 18:17:32 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1779041852; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=WQy3kVQOe2dAQJ5BEG9+hN2/D77OG01H9GGp8JeaxII=; b=n9xYKZwfr5FR0Ode7taUe9ygQlZ1cBKl10YuHKTXM0SS4VWMOmzaCJf5e2OuzhYa4R0bqR dPcW+Yqz8KfVNe3pvANr+k+usXOcSf6K853KkRr+OWVGKRlVQPcIhMuHnoqtRFx6uqYHFh xIEHdXm8B6nx4b51QNUoSUxbjd3ADEpID0TiU56IZyeoYTUJTKV9KfrNU3SMVZOyDiBujb qLFp0WdEznpJVMNY3jqqWcz/a35tCLFfaZ/x+1vllmLG7ommtMeQG2toqnXIqIkHX0AzzI bJgRTIl/w2kLPw3IMvP1itPXWGhTf7HmY1YdyI8beRftTBZbaaOd5nvL22YHBw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1779041852; a=rsa-sha256; cv=none; b=GiBK6L9iQd9vQxhyC/MNj26NI3v+AhquaiF1aRYnbN53gBVKHk0LR99v2z3FjQrS7D2W5U pkgZTpwZ+cBagZK0xoVYUfil2f8os4RbFsZZIMba82kWmEqLDWoyBfOL9D48A2nZ8PYCPg XLe+nXS1kJ83BWwHSx5xr764kVfoQVVOplkMN+DF8uHUyytT3no9/d/oFfDdq22nR7nze9 IYeaDCSTDJJF5jezYQv5zGOcG6QQbSZ5IUQzNd0VwgoCtD4XDkQ6W0wEsyrilM1rf332IE T1Y56YFw+SrpjTwXwA4unv98iT/G/hpZFs0uYpI5/csAHyShGaYpvWyK+01CJw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1779041852; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=WQy3kVQOe2dAQJ5BEG9+hN2/D77OG01H9GGp8JeaxII=; b=qdDRQrgSKdt9zCUkMUbdn20nXK0mNqH5zBVvxlS8euUU48PbShNrdVcF6REBWBFtUDHsQi HemAgntAaUpwvUh1YyrGpfatDzP3ru9euBqALhrqyEGYFHNY7qKmRx4tpFMSbi68aB/vGp rTecZNpBcKGv70TBOu2FB4l2kZh9jmGD1WgNeV0B6CGExPUPh+7HIOv1dpkpxHS4usdJ2Y ENTAvlQIHWFx4d60ps/zxa2YiW0bwDeQlyKARM4HN0ddoqjTNJK9qo0ap7qGH1i6sVdlIW pDzaH+AlUQL+KX4BeNDd38zWCCA8sH9hTG/k23zIeyYXxryrzgKyQqDWw0mNIQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gJTgB741RzsmY for ; Sun, 17 May 2026 18:17:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 24849 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 17 May 2026 18:17:26 +0000 To: doc-committers@FreeBSD.org, dev-commits-doc-all@FreeBSD.org From: Vladlen Popolitov Subject: git: c8bb62a28f - main - update translation of books/arch-handbook to Russian List-Id: Commit messages for all branches of the doc repository List-Archive: https://lists.freebsd.org/archives/dev-commits-doc-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-doc-all@freebsd.org Sender: owner-dev-commits-doc-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: vladlen X-Git-Repository: doc X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c8bb62a28f9e664e42ef704ad3b5a6ad1eb897de Auto-Submitted: auto-generated Date: Sun, 17 May 2026 18:17:26 +0000 Message-Id: <6a0a0636.24849.b46a85e@gitrepo.freebsd.org> The branch main has been updated by vladlen: URL: https://cgit.FreeBSD.org/doc/commit/?id=c8bb62a28f9e664e42ef704ad3b5a6ad1eb897de commit c8bb62a28f9e664e42ef704ad3b5a6ad1eb897de Author: Vladlen Popolitov AuthorDate: 2026-05-17 18:17:18 +0000 Commit: Vladlen Popolitov CommitDate: 2026-05-17 18:17:18 +0000 update translation of books/arch-handbook to Russian Reviewed by: andy Differential Revision: https://reviews.freebsd.org/В56935 --- .../content/ru/books/arch-handbook/_index.po | 4 +-- .../content/ru/books/arch-handbook/book.po | 4 +-- .../ru/books/arch-handbook/boot/_index.adoc | 14 ++++----- .../content/ru/books/arch-handbook/boot/_index.po | 35 +++++++++++----------- .../ru/books/arch-handbook/driverbasics/_index.po | 4 +-- .../content/ru/books/arch-handbook/isa/_index.adoc | 6 ++-- .../content/ru/books/arch-handbook/isa/_index.po | 8 ++--- .../ru/books/arch-handbook/jail/_index.adoc | 10 +++---- .../content/ru/books/arch-handbook/jail/_index.po | 22 +++++++------- .../ru/books/arch-handbook/kobj/_index.adoc | 2 +- .../content/ru/books/arch-handbook/kobj/_index.po | 6 ++-- .../content/ru/books/arch-handbook/mac/_index.adoc | 8 ++--- .../content/ru/books/arch-handbook/mac/_index.po | 10 +++---- .../ru/books/arch-handbook/newbus/_index.adoc | 2 +- .../ru/books/arch-handbook/newbus/_index.po | 6 ++-- .../ru/books/arch-handbook/scsi/_index.adoc | 4 +-- .../content/ru/books/arch-handbook/scsi/_index.po | 6 ++-- .../content/ru/books/arch-handbook/smp/_index.po | 4 +-- .../ru/books/arch-handbook/sound/_index.adoc | 2 +- .../content/ru/books/arch-handbook/sound/_index.po | 6 ++-- .../ru/books/arch-handbook/sysinit/_index.adoc | 2 +- .../ru/books/arch-handbook/sysinit/_index.po | 4 +-- .../content/ru/books/arch-handbook/usb/_index.po | 2 +- 23 files changed, 85 insertions(+), 86 deletions(-) diff --git a/documentation/content/ru/books/arch-handbook/_index.po b/documentation/content/ru/books/arch-handbook/_index.po index 4e60b24fe0..7a70ffea59 100644 --- a/documentation/content/ru/books/arch-handbook/_index.po +++ b/documentation/content/ru/books/arch-handbook/_index.po @@ -1,12 +1,12 @@ # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. -# Vladlen Popolitov , 2025. +# Vladlen Popolitov , 2025, 2026. msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-11-08 16:17+0000\n" -"PO-Revision-Date: 2025-11-11 04:45+0000\n" +"PO-Revision-Date: 2026-03-23 04:45+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" diff --git a/documentation/content/ru/books/arch-handbook/book.po b/documentation/content/ru/books/arch-handbook/book.po index 605ee60cd1..1f73e27d8b 100644 --- a/documentation/content/ru/books/arch-handbook/book.po +++ b/documentation/content/ru/books/arch-handbook/book.po @@ -1,12 +1,12 @@ # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. -# Vladlen Popolitov , 2025. +# Vladlen Popolitov , 2025, 2026. msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-11-08 16:17+0000\n" -"PO-Revision-Date: 2025-11-11 04:45+0000\n" +"PO-Revision-Date: 2026-03-23 04:45+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" diff --git a/documentation/content/ru/books/arch-handbook/boot/_index.adoc b/documentation/content/ru/books/arch-handbook/boot/_index.adoc index abfcf1feaa..305858635f 100644 --- a/documentation/content/ru/books/arch-handbook/boot/_index.adoc +++ b/documentation/content/ru/books/arch-handbook/boot/_index.adoc @@ -566,7 +566,7 @@ seta20.3: * [.filename]#boot0# перемещает себя по адресу `0x600`, по которому он был слинкован для выполнения, и переходит туда. Затем он читает первый сектор среза FreeBSD (который содержит [.filename]#boot1#) в адрес `0x7c00` и переходит туда. * [.filename]#boot1# загружает первые 16 секторов среза FreeBSD по адресу `0x8c00`. Эти 16 секторов, или 8192 байта, представляют собой весь файл [.filename]#boot#. Файл является объединением [.filename]#boot1# и [.filename]#boot2#. [.filename]#boot2#, в свою очередь, содержит сервер BTX и клиент [.filename]#boot2#. Наконец, выполняется переход по адресу `0x9010`, точке входа сервера BTX. -Прежде чем изучать сервер BTX подробно, давайте рассмотрим, как создается единый, всеобъемлющий файл [.filename]#boot#. Способ сборки [.filename]#boot# определен в его [.filename]#Makefile# ([.filename]#stand/i386/boot2/Makefile#). Рассмотрим правило, которое создает файл [.filename]#boot#: +Прежде чем изучать сервер BTX подробно, давайте рассмотрим, как создаётся единый, всеобъемлющий файл [.filename]#boot#. Способ сборки [.filename]#boot# определен в его [.filename]#Makefile# ([.filename]#stand/i386/boot2/Makefile#). Рассмотрим правило, которое создаёт файл [.filename]#boot#: [.programlisting] .... @@ -587,7 +587,7 @@ seta20.3: .... .[.filename]#stand/i386/boot2/Makefile# [[boot-boot1-make-boot1]] -Для применения правила создания [.filename]#boot1# необходимо собрать [.filename]#boot1.out#. Это, в свою очередь, зависит от наличия [.filename]#boot1.o#. Последний файл является результатом ассемблирования нашего знакомого [.filename]#boot1.S# без компоновки. Теперь применяется правило создания [.filename]#boot1.out#. Оно указывает, что [.filename]#boot1.o# должен быть скомпонован с точкой входа `start` и начальным адресом `0x7c00`. Наконец, [.filename]#boot1# создается из [.filename]#boot1.out# применением соответствующего правила. Это команда [.filename]#objcopy#, применяемая к [.filename]#boot1.out#. Обратите внимание на флаги, п ередаваемые [.filename]#objcopy#: `-S` указывает на удаление всей информации о перемещении и символов; `-O binary` указывает формат вывода, то есть простой, неформатированный двоичный файл. +Для применения правила создания [.filename]#boot1# необходимо собрать [.filename]#boot1.out#. Это, в свою очередь, зависит от наличия [.filename]#boot1.o#. Последний файл является результатом ассемблирования нашего знакомого [.filename]#boot1.S# без компоновки. Теперь применяется правило создания [.filename]#boot1.out#. Оно указывает, что [.filename]#boot1.o# должен быть скомпонован с точкой входа `start` и начальным адресом `0x7c00`. Наконец, [.filename]#boot1# создаётся из [.filename]#boot1.out# применением соответствующего правила. Это команда [.filename]#objcopy#, применяемая к [.filename]#boot1.out#. Обратите внимание на флаги, п ередаваемые [.filename]#objcopy#: `-S` указывает на удаление всей информации о перемещении и символов; `-O binary` указывает формат вывода, то есть простой, неформатированный двоичный файл. Имея [.filename]#boot1#, давайте посмотрим, как устроен [.filename]#boot2#: @@ -642,7 +642,7 @@ seta20.3: .[.filename]#stand/i386/boot2/boot2.h# [[boot-boot1-make-boot2h]] Напомним, что [.filename]#boot1# был перемещён (т.е. скопирован из `0x7c00` в `0x700`). Это перемещение теперь обретает смысл, потому что, как мы увидим, сервер BTX освобождает часть памяти, включая область, куда [.filename]#boot1# был изначально загружен. Однако серверу BTX необходим доступ к функции `xread` из [.filename]#boot1#; согласно выводу [.filename]#boot2.h#, эта функция находится по адресу `0x725`. Действительно, сервер BTX использует функцию `xread` из перемещённого кода [.filename]#boot1#. Теперь эта функция доступна из клиента [.filename]#boot2#. -Следующее правило указывает компоновщику на необходимость связать различные файлы ([.filename]#ashldi3.o#, [.filename]#boot2.o# и [.filename]#sio.o#). Обратите внимание, что выходной файл [.filename]#boot2.out# компонуется для выполнения по адресу `0x2000` (${ORG2}). Напомним, что [.filename]#boot2# будет выполняться в пользовательском режиме внутри специального пользовательского сегмента, созданного сервером BTX. Этот сегмент начинается с адреса `0xa000`. Также помните, что часть [.filename]#boot2# в [.filename]#boot# была скопирована по адресу `0xc000`, то есть со смещением `0x2000` от начала пользовательского сег мента, поэтому [.filename]#boot2# будет работать корректно при передаче управления на него. Далее, [.filename]#boot2.bin# создается из [.filename]#boot2.out# путем удаления символов и информации о формате; boot2.bin представляет собой _сырой_ бинарный файл. Теперь обратите внимание, что файл [.filename]#boot2.ldr# создается как 512-байтный файл, заполненный нулями. Это пространство зарезервировано для bsdlabel. +Следующее правило указывает компоновщику на необходимость связать различные файлы ([.filename]#ashldi3.o#, [.filename]#boot2.o# и [.filename]#sio.o#). Обратите внимание, что выходной файл [.filename]#boot2.out# компонуется для выполнения по адресу `0x2000` (${ORG2}). Напомним, что [.filename]#boot2# будет выполняться в пользовательском режиме внутри специального пользовательского сегмента, созданного сервером BTX. Этот сегмент начинается с адреса `0xa000`. Также помните, что часть [.filename]#boot2# в [.filename]#boot# была скопирована по адресу `0xc000`, то есть со смещением `0x2000` от начала пользовательского сег мента, поэтому [.filename]#boot2# будет работать корректно при передаче управления на него. Далее, [.filename]#boot2.bin# создаётся из [.filename]#boot2.out# путем удаления символов и информации о формате; boot2.bin представляет собой _сырой_ бинарный файл. Теперь обратите внимание, что файл [.filename]#boot2.ldr# создаётся как 512-байтный файл, заполненный нулями. Это пространство зарезервировано для bsdlabel. Теперь, когда у нас есть файлы [.filename]#boot1#, [.filename]#boot2.bin# и [.filename]#boot2.ldr#, осталось только добавить сервер BTX перед созданием универсального файла [.filename]#boot#. Сервер BTX находится в [.filename]#stand/i386/btx/btx#; у него есть собственный [.filename]#Makefile# со своим набором правил для сборки. Важно отметить, что он также компилируется как _сырой_ бинарный файл и линкуется для выполнения по адресу `0x9000`. Подробности можно найти в [.filename]#stand/i386/btx/btx/Makefile#. @@ -651,8 +651,8 @@ seta20.3: Сервер BTX подготавливает простое окружение и переключается из 16-битного реального режима в 32-битный защищённый режим, непосредственно перед передачей управления клиенту. Это включает инициализацию и обновление следующих структур данных: * Изменяет `Таблицу Векторов Прерываний (IVT)`. IVT предоставляет обработчики исключений и прерываний для кода в Реальном Режиме. -* Создается `Таблица дескрипторов прерываний (IDT)`. В ней предусмотрены записи для исключений процессора, аппаратных прерываний, двух системных вызовов и интерфейса V86. IDT предоставляет обработчики исключений и прерываний для кода в защищенном режиме. -* Создается `Сегмент состояния задачи (TSS)`. Это необходимо, потому что процессор работает на _наименее_ привилегированном уровне при выполнении клиента ([.filename]#boot2#), но на _наиболее_ привилегированном уровне при выполнении сервера BTX. +* Создаётся `Таблица дескрипторов прерываний (IDT)`. В ней предусмотрены записи для исключений процессора, аппаратных прерываний, двух системных вызовов и интерфейса V86. IDT предоставляет обработчики исключений и прерываний для кода в защищенном режиме. +* Создаётся `Сегмент состояния задачи (TSS)`. Это необходимо, потому что процессор работает на _наименее_ привилегированном уровне при выполнении клиента ([.filename]#boot2#), но на _наиболее_ привилегированном уровне при выполнении сервера BTX. * Устанавливается GDT (Глобальная Таблица Дескрипторов). Создаются записи (дескрипторы) для кода и данных супервизора, кода и данных пользователя, а также кода и данных реального режима. footnote:[Код и данные реального режима необходимы при переключении обратно в реальный режим из защищённого режима, как указано в руководствах Intel.] Приступим к изучению фактической реализации. Напомним, что [.filename]#boot1# выполнил переход на адрес `0x9010` — точку входа сервера BTX. Прежде чем изучать выполнение программы там, обратите внимание, что сервер BTX имеет специальный заголовок в диапазоне адресов `0x9000-0x900f`, непосредственно перед точкой входа. Этот заголовок определён следующим образом: @@ -732,7 +732,7 @@ init.0: mov %bx,(%di) # Store IP .... .[.filename]#stand/i386/btx/btx/btx.S# [[btx-ivt]] -Следующий блок создает IDT (таблицу дескрипторов прерываний). IDT в защищенном режиме аналогична IVT в реальном режиме. То есть, IDT описывает различные обработчики исключений и прерываний, используемые, когда процессор работает в защищенном режиме. По сути, она также состоит из массива пар сегмент/смещение, хотя структура несколько сложнее, поскольку сегменты в защищенном режиме отличаются от реального режима, и применяются различные механизмы защиты: +Следующий блок создаёт IDT (таблицу дескрипторов прерываний). IDT в защищенном режиме аналогична IVT в реальном режиме. То есть, IDT описывает различные обработчики исключений и прерываний, используемые, когда процессор работает в защищенном режиме. По сути, она также состоит из массива пар сегмент/смещение, хотя структура несколько сложнее, поскольку сегменты в защищенном режиме отличаются от реального режима, и применяются различные механизмы защиты: [.programlisting] .... @@ -1195,7 +1195,7 @@ sys/kern/init_main.c: Хотя фреймворк sysinit описан в extref:{developers-handbook}[Руководстве разработчика], я рассмотрю его внутреннее устройство. -Каждый объект инициализации системы (объект sysinit) создается путем вызова макроса SYSINIT(). Возьмем, к примеру, объект sysinit `announce`. Этот объект выводит сообщение об авторских правах: +Каждый объект инициализации системы (объект sysinit) создаётся путем вызова макроса SYSINIT(). Возьмем, к примеру, объект sysinit `announce`. Этот объект выводит сообщение об авторских правах: [.programlisting] .... diff --git a/documentation/content/ru/books/arch-handbook/boot/_index.po b/documentation/content/ru/books/arch-handbook/boot/_index.po index 8d2920051f..8dcf7b5bbd 100644 --- a/documentation/content/ru/books/arch-handbook/boot/_index.po +++ b/documentation/content/ru/books/arch-handbook/boot/_index.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-11-08 16:17+0000\n" -"PO-Revision-Date: 2026-03-05 04:45+0000\n" +"PO-Revision-Date: 2026-04-05 04:45+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" @@ -2005,11 +2005,10 @@ msgid "" "filename]#stand/i386/boot2/Makefile#). Let us look at the rule that creates " "the [.filename]#boot# file:" msgstr "" -"Прежде чем изучать сервер BTX подробно, давайте рассмотрим, как создается " -"единый, всеобъемлющий файл [.filename]#boot#. Способ сборки [." -"filename]#boot# определен в его [.filename]#Makefile# ([.filename]#stand/" -"i386/boot2/Makefile#). Рассмотрим правило, которое создает файл [." -"filename]#boot#:" +"Прежде чем изучать сервер BTX подробно, давайте рассмотрим, как создаётся " +"единый, всеобъемлющий файл [.filename]#boot#. Способ сборки [.filename]#boot#" +" определен в его [.filename]#Makefile# ([.filename]#stand/i386/boot2/" +"Makefile#). Рассмотрим правило, которое создаёт файл [.filename]#boot#:" #. type: delimited block . 4 #: documentation/content/en/books/arch-handbook/boot/_index.adoc:775 @@ -2086,12 +2085,12 @@ msgstr "" "filename]#boot1.out#. Это, в свою очередь, зависит от наличия [." "filename]#boot1.o#. Последний файл является результатом ассемблирования " "нашего знакомого [.filename]#boot1.S# без компоновки. Теперь применяется " -"правило создания [.filename]#boot1.out#. Оно указывает, что [." -"filename]#boot1.o# должен быть скомпонован с точкой входа `start` и " -"начальным адресом `0x7c00`. Наконец, [.filename]#boot1# создается из [." -"filename]#boot1.out# применением соответствующего правила. Это команда [." -"filename]#objcopy#, применяемая к [.filename]#boot1.out#. Обратите внимание " -"на флаги, передаваемые [.filename]#objcopy#: `-S` указывает на удаление всей " +"правило создания [.filename]#boot1.out#. Оно указывает, что [.filename]#boot1" +".o# должен быть скомпонован с точкой входа `start` и начальным адресом " +"`0x7c00`. Наконец, [.filename]#boot1# создаётся из [.filename]#boot1.out# " +"применением соответствующего правила. Это команда [.filename]#objcopy#, " +"применяемая к [.filename]#boot1.out#. Обратите внимание на флаги, " +"передаваемые [.filename]#objcopy#: `-S` указывает на удаление всей " "информации о перемещении и символов; `-O binary` указывает формат вывода, то " "есть простой, неформатированный двоичный файл." @@ -2287,10 +2286,10 @@ msgstr "" "filename]#boot# была скопирована по адресу `0xc000`, то есть со смещением " "`0x2000` от начала пользовательского сегмента, поэтому [.filename]#boot2# " "будет работать корректно при передаче управления на него. Далее, [." -"filename]#boot2.bin# создается из [.filename]#boot2.out# путем удаления " +"filename]#boot2.bin# создаётся из [.filename]#boot2.out# путем удаления " "символов и информации о формате; boot2.bin представляет собой _сырой_ " "бинарный файл. Теперь обратите внимание, что файл [.filename]#boot2.ldr# " -"создается как 512-байтный файл, заполненный нулями. Это пространство " +"создаётся как 512-байтный файл, заполненный нулями. Это пространство " "зарезервировано для bsdlabel." #. type: Plain text @@ -2368,7 +2367,7 @@ msgid "" "interface. The IDT provides exception and interrupt handlers for Protected-" "Mode code." msgstr "" -"Создается `Таблица дескрипторов прерываний (IDT)`. В ней предусмотрены " +"Создаётся `Таблица дескрипторов прерываний (IDT)`. В ней предусмотрены " "записи для исключений процессора, аппаратных прерываний, двух системных " "вызовов и интерфейса V86. IDT предоставляет обработчики исключений и " "прерываний для кода в защищенном режиме." @@ -2381,7 +2380,7 @@ msgid "" "filename]#boot2#), but in the _most_ privileged level when executing the BTX " "server." msgstr "" -"Создается `Сегмент состояния задачи (TSS)`. Это необходимо, потому что " +"Создаётся `Сегмент состояния задачи (TSS)`. Это необходимо, потому что " "процессор работает на _наименее_ привилегированном уровне при выполнении " "клиента ([.filename]#boot2#), но на _наиболее_ привилегированном уровне при " "выполнении сервера BTX." @@ -2655,7 +2654,7 @@ msgid "" "complex, because segments in protected mode are different than in real mode, " "and various protection mechanisms apply:" msgstr "" -"Следующий блок создает IDT (таблицу дескрипторов прерываний). IDT в " +"Следующий блок создаёт IDT (таблицу дескрипторов прерываний). IDT в " "защищенном режиме аналогична IVT в реальном режиме. То есть, IDT описывает " "различные обработчики исключений и прерываний, используемые, когда процессор " "работает в защищенном режиме. По сути, она также состоит из массива пар " @@ -4033,7 +4032,7 @@ msgid "" "SYSINIT() macro. Let us take as example an `announce` sysinit object. This " "object prints the copyright message:" msgstr "" -"Каждый объект инициализации системы (объект sysinit) создается путем вызова " +"Каждый объект инициализации системы (объект sysinit) создаётся путем вызова " "макроса SYSINIT(). Возьмем, к примеру, объект sysinit `announce`. Этот " "объект выводит сообщение об авторских правах:" diff --git a/documentation/content/ru/books/arch-handbook/driverbasics/_index.po b/documentation/content/ru/books/arch-handbook/driverbasics/_index.po index 3116e73e78..db9883e78e 100644 --- a/documentation/content/ru/books/arch-handbook/driverbasics/_index.po +++ b/documentation/content/ru/books/arch-handbook/driverbasics/_index.po @@ -1,12 +1,12 @@ # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. -# Vladlen Popolitov , 2025. +# Vladlen Popolitov , 2025, 2026. msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-05-01 19:56-0300\n" -"PO-Revision-Date: 2025-11-20 04:45+0000\n" +"PO-Revision-Date: 2026-03-08 09:11+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" diff --git a/documentation/content/ru/books/arch-handbook/isa/_index.adoc b/documentation/content/ru/books/arch-handbook/isa/_index.adoc index a36105d19f..64363a8eb9 100644 --- a/documentation/content/ru/books/arch-handbook/isa/_index.adoc +++ b/documentation/content/ru/books/arch-handbook/isa/_index.adoc @@ -334,7 +334,7 @@ flags - уровень приоритета прерывания, один из: Теги организованы в иерархию в виде дерева с наследованием свойств. Дочерний тег наследует все требования родительского тега и может делать их более строгими, но никогда более мягкими. -Обычно создается один корневой тег (без родителя) для каждого устройства. Если для каждого устройства требуется несколько областей памяти с разными требованиями, то для каждой из них может быть создан тег как дочерний по отношению к родительскому тегу. +Обычно создаётся один корневой тег (без родителя) для каждого устройства. Если для каждого устройства требуется несколько областей памяти с разными требованиями, то для каждой из них может быть создан тег как дочерний по отношению к родительскому тегу. Теги могут быть использованы для создания карты двумя способами. @@ -413,7 +413,7 @@ dmat - тег, который должен быть уничтожен. * `int bus_dmamap_load(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, bus_size_t buflen, bus_dmamap_callback_t *callback, void *callback_arg, int flags)` + -Загрузить буфер в карту (карта должна быть предварительно создана с помощью `bus_dmamap_create()` или `bus_dmamem_alloc()`). Все страницы буфера проверяются на соответствие требованиям тега, и для несоответствующих выделяются промежуточные страницы. Создается массив дескрипторов физических сегментов и передаётся в подпрограмму обратного вызова. Ожидается, что эта подпрограмма обработает его каким-либо образом. Количество промежуточных буферов в системе ограничено, поэтому, если эти буферы требуются, но недоступны немедленно, запрос будет поставле в очередь, и обратный вызов будет выполнен, когда промежуточные буферы станут доступны. Возвращает 0, если обратный вызов был выполнен немедленно, или `EINPROGRESS`, если запрос был поставлен в очередь для выполнения в будущем. В последнем случае синхронизация с подпрограммой обратного вызова, поставленной в очередь, является обязанностью драйвера. +Загрузить буфер в карту (карта должна быть предварительно создана с помощью `bus_dmamap_create()` или `bus_dmamem_alloc()`). Все страницы буфера проверяются на соответствие требованиям тега, и для несоответствующих выделяются промежуточные страницы. Создаётся массив дескрипторов физических сегментов и передаётся в подпрограмму обратного вызова. Ожидается, что эта подпрограмма обработает его каким-либо образом. Количество промежуточных буферов в системе ограничено, поэтому, если эти буферы требуются, но недоступны немедленно, запрос будет поставле в очередь, и обратный вызов будет выполнен, когда промежуточные буферы станут доступны. Возвращает 0, если обратный вызов был выполнен немедленно, или `EINPROGRESS`, если запрос был поставлен в очередь для выполнения в будущем. В последнем случае синхронизация с подпрограммой обратного вызова, поставленной в очередь, является обязанностью драйвера. + ** _dmat_ - тег ** _map_ - карта @@ -479,7 +479,7 @@ bus_dmamem_alloc -> bus_dmamap_load -> ...use buffer... -> -> bus_dmamap_unload -> bus_dmamap_destroy .... -При загрузке карты, созданной `bus_dmamem_alloc()`, переданные адрес и размер буфера должны быть такими же, как использованные в `bus_dmamem_alloc()`. В этом случае гарантируется, что весь буфер будет отображен как один сегмент (так что обратный вызов может основываться на этом предположении) и запрос будет выполнен немедленно (EINPROGRESS никогда не будет возвращен). Все, что нужно сделать обратному вызову в этом случае, — это сохранить физический адрес. +При загрузке карты, созданной `bus_dmamem_alloc()`, переданные адрес и размер буфера должны быть такими же, как использованные в `bus_dmamem_alloc()`. В этом случае гарантируется, что весь буфер будет отображён как один сегмент (так что обратный вызов может основываться на этом предположении) и запрос будет выполнен немедленно (EINPROGRESS никогда не будет возвращен). Все, что нужно сделать обратному вызову в этом случае, — это сохранить физический адрес. Типичный пример: diff --git a/documentation/content/ru/books/arch-handbook/isa/_index.po b/documentation/content/ru/books/arch-handbook/isa/_index.po index 20b145402c..38e962e4a9 100644 --- a/documentation/content/ru/books/arch-handbook/isa/_index.po +++ b/documentation/content/ru/books/arch-handbook/isa/_index.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-05-01 19:56-0300\n" -"PO-Revision-Date: 2026-03-04 20:01+0000\n" +"PO-Revision-Date: 2026-04-05 04:45+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" @@ -1425,7 +1425,7 @@ msgid "" "device then a tag for each of them may be created as a child of the parent " "tag." msgstr "" -"Обычно создается один корневой тег (без родителя) для каждого устройства. " +"Обычно создаётся один корневой тег (без родителя) для каждого устройства. " "Если для каждого устройства требуется несколько областей памяти с разными " "требованиями, то для каждой из них может быть создан тег как дочерний по " "отношению к родительскому тегу." @@ -1865,7 +1865,7 @@ msgstr "" "Загрузить буфер в карту (карта должна быть предварительно создана с помощью " "`bus_dmamap_create()` или `bus_dmamem_alloc()`). Все страницы буфера " "проверяются на соответствие требованиям тега, и для несоответствующих " -"выделяются промежуточные страницы. Создается массив дескрипторов физических " +"выделяются промежуточные страницы. Создаётся массив дескрипторов физических " "сегментов и передаётся в подпрограмму обратного вызова. Ожидается, что эта " "подпрограмма обработает его каким-либо образом. Количество промежуточных " "буферов в системе ограничено, поэтому, если эти буферы требуются, но " @@ -2164,7 +2164,7 @@ msgstr "" "При загрузке карты, созданной `bus_dmamem_alloc()`, переданные адрес и " "размер буфера должны быть такими же, как использованные в " "`bus_dmamem_alloc()`. В этом случае гарантируется, что весь буфер будет " -"отображен как один сегмент (так что обратный вызов может основываться на " +"отображён как один сегмент (так что обратный вызов может основываться на " "этом предположении) и запрос будет выполнен немедленно (EINPROGRESS никогда " "не будет возвращен). Все, что нужно сделать обратному вызову в этом случае, —" " это сохранить физический адрес." diff --git a/documentation/content/ru/books/arch-handbook/jail/_index.adoc b/documentation/content/ru/books/arch-handbook/jail/_index.adoc index cc414c6ffa..ebfc174b42 100644 --- a/documentation/content/ru/books/arch-handbook/jail/_index.adoc +++ b/documentation/content/ru/books/arch-handbook/jail/_index.adoc @@ -48,7 +48,7 @@ toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] -На большинстве систем UNIX(R) пользователь `root` обладает неограниченной властью. Это не способствует безопасности. Если злоумышленник получит права `root` в системе, у него окажутся все функции под рукой. В FreeBSD существуют sysctl-параметры, которые ограничивают власть `root`, чтобы минимизировать ущерб от действий злоумышленника. В частности, одна из таких функций называется `уровни безопасности`. Аналогично, другая функция, доступная начиная с FreeBSD 4.0, — это утилита man:jail[8] — клетка. Клетка создает chroot-окружение и накладывает определённые огранич ения на процессы, запущенные внутри `клетки`. Например, процесс в `клетке` не может влиять на процессы вне её, использовать определённые системные вызовы или наносить какой-либо ущерб основной системе. +На большинстве систем UNIX(R) пользователь `root` обладает неограниченной властью. Это не способствует безопасности. Если злоумышленник получит права `root` в системе, у него окажутся все функции под рукой. В FreeBSD существуют sysctl-параметры, которые ограничивают власть `root`, чтобы минимизировать ущерб от действий злоумышленника. В частности, одна из таких функций называется `уровни безопасности`. Аналогично, другая функция, доступная начиная с FreeBSD 4.0, — это утилита man:jail[8] — клетка. Клетка создаёт chroot-окружение и накладывает определённые огранич ения на процессы, запущенные внутри `клетки`. Например, процесс в `клетке` не может влиять на процессы вне её, использовать определённые системные вызовы или наносить какой-либо ущерб основной системе. Клетка становится новой моделью безопасности. Пользователи запускают потенциально уязвимые серверы, такие как Apache, BIND и sendmail, внутри клеток, так что если злоумышленник получит права `root` внутри клетки, это будет лишь неудобством, а не катастрофой. Данная статья в основном сосредоточена на внутреннем устройстве (исходном коде) клетки. Для получения информации о настройке клетки см. extref:{handbook}jails[раздел о клетках Руководства FreeBSD, jails-synopsis]. @@ -277,7 +277,7 @@ struct ucred { }; .... -В файле [.filename]#kern_jail.c# функция `jail()` вызывает функцию `jail_attach()` с заданным `jid`. Затем `jail_attach()` вызывает функцию `change_root()` для изменения корневого каталога вызывающего процесса. Функция `jail_attach()` создает новую структуру `ucred` и присоединяет её к вызывающему процессу после успешного присоединения структуры `prison` к структуре `ucred`. С этого момента вызывающий процесс считается находящимся в клетке. Когда в ядре вызывается функция `jailed()` с вновь созданной структурой `ucred` в качестве аргумента, она возвращает 1, указывая, что учётные данные связаны клеткой. Общим родительским процессом для всех процессов, созданных внутри клетки, является процесс, запускающий man:jail[8], так как он вызывает системный вызов man:jail[2]. При выполнении программы через man:execve[2] она наследует свойство клетки из структуры `ucred` родительского процесса, следовательно, у нее структура `ucred` тоже со свойством клетки. +В файле [.filename]#kern_jail.c# функция `jail()` вызывает функцию `jail_attach()` с заданным `jid`. Затем `jail_attach()` вызывает функцию `change_root()` для изменения корневого каталога вызывающего процесса. Функция `jail_attach()` создаёт новую структуру `ucred` и присоединяет её к вызывающему процессу после успешного присоединения структуры `prison` к структуре `ucred`. С этого момента вызывающий процесс считается находящимся в клетке. Когда в ядре вызывается функция `jailed()` с вновь созданной структурой `ucred` в качестве аргумента, она возвращает 1, указывая, что учётные данные связаны клеткой. Общим родительским процессом для всех процессов, созданных внутри клетки, является процесс, запускающий man:jail[8], так как он вызывает системный вызов man:jail[2]. При выполнении программы через man:execve[2] она наследует свойство клетки из структуры `ucred` родительского процесса, следовательно, у неё структура `ucred` тоже со свойством клетки. [.programlisting] .... @@ -313,7 +313,7 @@ jail_attach(struct thread *td, struct jail_attach_args *uap) } .... -Когда процесс создается из родительского процесса, системный вызов man:fork[2] использует `crhold()` для поддержания учётных данных нового процесса. Это автоматически сохраняет учётные данные нового дочернего процесса согласованными с родительским, поэтому дочерний процесс также остаётся в клетке. +Когда процесс создаётся из родительского процесса, системный вызов man:fork[2] использует `crhold()` для поддержания учётных данных нового процесса. Это автоматически сохраняет учётные данные нового дочернего процесса согласованными с родительским, поэтому дочерний процесс также остаётся в клетке. [.programlisting] .... @@ -359,7 +359,7 @@ if (!jail_sysvipc_allowed && jailed(td->td_ucred)) [.filename]#/usr/src/sys/kern/sysv_sem.c#: * `semctl(semid, semnum, cmd, ...)`: `semctl` выполняет указанную команду `cmd` для очереди семафоров, указанной в `semid`. -* `semget(key, nsems, flag)`: `semget` создает массив семафоров, соответствующих `key`. +* `semget(key, nsems, flag)`: `semget` создаёт массив семафоров, соответствующих `key`. + `key и flag имеют то же значение, как и в msgget.` * `semop(semid, array, nops)`: `semop` выполняет набор операций, указанных в `array`, для набора семафоров, идентифицируемых `semid`. @@ -369,7 +369,7 @@ if (!jail_sysvipc_allowed && jailed(td->td_ucred)) [.filename]#/usr/src/sys/kern/sysv_shm.c#: * `shmctl(shmid, cmd, buf)`: `shmctl` выполняет различные управляющие операции над областью разделяемой памяти, идентифицируемой `shmid`. -* `shmget(key, size, flag)`: `shmget` обращается к существующей или создает новую область разделяемой памяти размером `size` байт. +* `shmget(key, size, flag)`: `shmget` обращается к существующей или создаёт новую область разделяемой памяти размером `size` байт. * `shmat(shmid, addr, flag)`: `shmat` присоединяет область разделяемой памяти, идентифицируемую `shmid`, к адресному пространству процесса. * `shmdt(addr)`: `shmdt` отсоединяет ранее присоединенную область разделяемой памяти по адресу `addr`. diff --git a/documentation/content/ru/books/arch-handbook/jail/_index.po b/documentation/content/ru/books/arch-handbook/jail/_index.po index 43d8e6834c..7a249aa6a1 100644 --- a/documentation/content/ru/books/arch-handbook/jail/_index.po +++ b/documentation/content/ru/books/arch-handbook/jail/_index.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-11-08 16:17+0000\n" -"PO-Revision-Date: 2026-03-04 20:01+0000\n" +"PO-Revision-Date: 2026-04-05 04:45+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" @@ -52,7 +52,7 @@ msgstr "" "минимизировать ущерб от действий злоумышленника. В частности, одна из таких " "функций называется `уровни безопасности`. Аналогично, другая функция, " "доступная начиная с FreeBSD 4.0, — это утилита man:jail[8] — клетка. Клетка " -"создает chroot-окружение и накладывает определённые ограничения на процессы, " +"создаёт chroot-окружение и накладывает определённые ограничения на процессы, " "запущенные внутри `клетки`. Например, процесс в `клетке` не может влиять на " "процессы вне её, использовать определённые системные вызовы или наносить " "какой-либо ущерб основной системе." @@ -730,17 +730,17 @@ msgstr "" "В файле [.filename]#kern_jail.c# функция `jail()` вызывает функцию " "`jail_attach()` с заданным `jid`. Затем `jail_attach()` вызывает функцию " "`change_root()` для изменения корневого каталога вызывающего процесса. " -"Функция `jail_attach()` создает новую структуру `ucred` и присоединяет её к " +"Функция `jail_attach()` создаёт новую структуру `ucred` и присоединяет её к " "вызывающему процессу после успешного присоединения структуры `prison` к " "структуре `ucred`. С этого момента вызывающий процесс считается находящимся " "в клетке. Когда в ядре вызывается функция `jailed()` с вновь созданной " "структурой `ucred` в качестве аргумента, она возвращает 1, указывая, что " "учётные данные связаны с клеткой. Общим родительским процессом для всех " -"процессов, созданных внутри клетки, является процесс, запускающий man:" -"jail[8], так как он вызывает системный вызов man:jail[2]. При выполнении " -"программы через man:execve[2] она наследует свойство клетки из структуры " -"`ucred` родительского процесса, следовательно, у нее структура `ucred` тоже " -"со свойством клетки." +"процессов, созданных внутри клетки, является процесс, запускающий man:jail[8]" +", так как он вызывает системный вызов man:jail[2]. При выполнении программы " +"через man:execve[2] она наследует свойство клетки из структуры `ucred` " +"родительского процесса, следовательно, у неё структура `ucred` тоже со " +"свойством клетки." #. type: delimited block . 4 #: documentation/content/en/books/arch-handbook/jail/_index.adoc:296 @@ -820,7 +820,7 @@ msgid "" "process. It inherently keep the newly forked child's credential consistent " "with its parent, so the child process is also jailed." msgstr "" -"Когда процесс создается из родительского процесса, системный вызов " +"Когда процесс создаётся из родительского процесса, системный вызов " "man:fork[2] использует `crhold()` для поддержания учётных данных нового " "процесса. Это автоматически сохраняет учётные данные нового дочернего " "процесса согласованными с родительским, поэтому дочерний процесс также " @@ -997,7 +997,7 @@ msgid "" "`semget(key, nsems, flag)`: `semget` creates an array of semaphores, " "corresponding to `key`." msgstr "" -"`semget(key, nsems, flag)`: `semget` создает массив семафоров, " +"`semget(key, nsems, flag)`: `semget` создаёт массив семафоров, " "соответствующих `key`." #. type: Plain text @@ -1049,7 +1049,7 @@ msgid "" "`shmget(key, size, flag)`: `shmget` accesses or creates a shared memory " "region of `size` bytes." msgstr "" -"`shmget(key, size, flag)`: `shmget` обращается к существующей или создает " +"`shmget(key, size, flag)`: `shmget` обращается к существующей или создаёт " "новую область разделяемой памяти размером `size` байт." #. type: Plain text diff --git a/documentation/content/ru/books/arch-handbook/kobj/_index.adoc b/documentation/content/ru/books/arch-handbook/kobj/_index.adoc index 7d9e498d53..ed4ed83fd0 100644 --- a/documentation/content/ru/books/arch-handbook/kobj/_index.adoc +++ b/documentation/content/ru/books/arch-handbook/kobj/_index.adoc @@ -70,7 +70,7 @@ endif::[] Kobj работает путем генерации описаний методов. Каждое описание содержит уникальный идентификатор, а также функцию по умолчанию. Адрес описания используется для однозначной идентификации метода в таблице методов класса. -Класс создается путем построения таблицы методов, связывающей одну или несколько функций с описаниями методов. Перед использованием класс компилируется. В процессе компиляции выделяется кэш и связывается с классом. Уникальный идентификатор назначается каждому описанию метода в таблице методов класса, если это ещё не было сделано другой компиляцией, ссылающейся на этот класс. Для каждого используемого метода скриптом генерируется функция для проверки аргументов и автоматического обращения к описанию метода для поиска. Сгенерир ванная функция ищет метод, используя уникальный идентификатор, связанный с описанием метода, в качестве хэша для доступа к кэшу, связанному с классом объекта. Если метод не найден в кэше, сгенерированная функция использует таблицу класса для поиска метода. Если метод найден, используется связанная с ним функция внутри класса; в противном случае используется функция по умолчанию, связанная с описанием метода. +Класс создаётся путем построения таблицы методов, связывающей одну или несколько функций с описаниями методов. Перед использованием класс компилируется. В процессе компиляции выделяется кэш и связывается с классом. Уникальный идентификатор назначается каждому описанию метода в таблице методов класса, если это ещё не было сделано другой компиляцией, ссылающейся на этот класс. Для каждого используемого метода скриптом генерируется функция для проверки аргументов и автоматического обращения к описанию метода для поиска. Сгенерир ванная функция ищет метод, используя уникальный идентификатор, связанный с описанием метода, в качестве хэша для доступа к кэшу, связанному с классом объекта. Если метод не найден в кэше, сгенерированная функция использует таблицу класса для поиска метода. Если метод найден, используется связанная с ним функция внутри класса; в противном случае используется функция по умолчанию, связанная с описанием метода. Эти перенаправления можно визуализировать следующим образом: diff --git a/documentation/content/ru/books/arch-handbook/kobj/_index.po b/documentation/content/ru/books/arch-handbook/kobj/_index.po index 26ad1feeb8..16e7975549 100644 --- a/documentation/content/ru/books/arch-handbook/kobj/_index.po +++ b/documentation/content/ru/books/arch-handbook/kobj/_index.po @@ -1,12 +1,12 @@ # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. -# Vladlen Popolitov , 2025. +# Vladlen Popolitov , 2025, 2026. msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-05-01 19:56-0300\n" -"PO-Revision-Date: 2025-11-26 04:45+0000\n" +"PO-Revision-Date: 2026-04-05 04:45+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" @@ -129,7 +129,7 @@ msgid "" "associated function within the class is used; otherwise, the default " "function associated with the method description is used." msgstr "" -"Класс создается путем построения таблицы методов, связывающей одну или " +"Класс создаётся путем построения таблицы методов, связывающей одну или " "несколько функций с описаниями методов. Перед использованием класс " "компилируется. В процессе компиляции выделяется кэш и связывается с классом. " "Уникальный идентификатор назначается каждому описанию метода в таблице " diff --git a/documentation/content/ru/books/arch-handbook/mac/_index.adoc b/documentation/content/ru/books/arch-handbook/mac/_index.adoc index 133fe61ed3..dd87dd1b0f 100644 --- a/documentation/content/ru/books/arch-handbook/mac/_index.adoc +++ b/documentation/content/ru/books/arch-handbook/mac/_index.adoc @@ -126,7 +126,7 @@ FreeBSD включает экспериментальную поддержку [[mac-framework-kernel-arch-synchronization]] === Список политик параллелизма и синхронизации -Поскольку набор активных политик может изменяться во время выполнения, а вызов точек входа не является атомарным, требуется синхронизация для предотвращения загрузки или выгрузки политик во время выполнения вызова точки входа, фиксируя набор активных политик на время выполнения. Это достигается с помощью счетчика занятости фреймворка: при входе в точку входа счетчик увеличивается; при выходе из нее — уменьшается. Пока счетчик занятости повышен, изменения списка политик запрещены, и потоки, пытающиеся изменить список политик, буд т ждать, пока список не освободится. Счетчик занятости защищается мьютексом, а условная переменная используется для пробуждения потоков, ожидающих изменений списка политик. Побочным эффектом этой модели синхронизации является то, что рекурсивный вход в MAC Framework из модуля политики разрешен, хотя обычно не используется. +Поскольку набор активных политик может изменяться во время выполнения, а вызов точек входа не является атомарным, требуется синхронизация для предотвращения загрузки или выгрузки политик во время выполнения вызова точки входа, фиксируя набор активных политик на время выполнения. Это достигается с помощью счетчика занятости фреймворка: при входе в точку входа счетчик увеличивается; при выходе из неё — уменьшается. Пока счетчик занятости повышен, изменения списка политик запрещены, и потоки, пытающиеся изменить список политик, буд т ждать, пока список не освободится. Счетчик занятости защищается мьютексом, а условная переменная используется для пробуждения потоков, ожидающих изменений списка политик. Побочным эффектом этой модели синхронизации является то, что рекурсивный вход в MAC Framework из модуля политики разрешен, хотя обычно не используется. Для снижения накладных расходов счётчика занятости используются различные оптимизации, включая избегание полной стоимости увеличения и уменьшения, если список пуст или содержит только статические записи (политики, загруженные до старта системы, которые нельзя выгрузить). Также предоставляется опция на этапе компиляции, которая предотвращает любые изменения в наборе загруженных политик во время выполнения, что устраняет затраты на блокировку мьютексов, связанные с поддержкой динамически загружаемых и выгружаемых политик, поско льку синхронизация больше не требуется. @@ -770,7 +770,7 @@ void mpo_destroy_ifnet_label(struct label *label); | |=== -Уничтожить метку на удаленном интерфейсе. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно было уничтожить. +Уничтожить метку на удалённом интерфейсе. В этой точке входа модуль политики должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её можно было уничтожить. [[mac-mpo-destroy-ipq-label]] ==== `mpo_destroy_ipq_label` @@ -1605,7 +1605,7 @@ void mpo_create_devfs_device(dev_t dev, struct devfs_dirent *devfs_dirent, | |`devfs_dirent` -|Запись в каталоге devfs, для которой создается метка. +|Запись в каталоге devfs, для которой создаётся метка. | |`label` @@ -2178,7 +2178,7 @@ void mpo_set_socket_peer_from_socket(struct socket *oldsocket, | |=== -Установите метку однорангового узла на потоковом UNIX-сокете из переданной конечной точки удаленного сокета. Этот вызов будет выполнен при соединении пары сокетов и будет произведен для обеих конечных точек. +Установите метку однорангового узла на потоковом UNIX-сокете из переданной конечной точки удалённого сокета. Этот вызов будет выполнен при соединении пары сокетов и будет произведен для обеих конечных точек. [[mac-net-labeling-event-ops]] ==== Действия с событиями меток сетевых объектов diff --git a/documentation/content/ru/books/arch-handbook/mac/_index.po b/documentation/content/ru/books/arch-handbook/mac/_index.po index e6580c7a99..da876cc02b 100644 --- a/documentation/content/ru/books/arch-handbook/mac/_index.po +++ b/documentation/content/ru/books/arch-handbook/mac/_index.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-05-01 19:56-0300\n" -"PO-Revision-Date: 2026-03-04 20:01+0000\n" +"PO-Revision-Date: 2026-04-05 04:45+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" @@ -433,7 +433,7 @@ msgstr "" "предотвращения загрузки или выгрузки политик во время выполнения вызова " "точки входа, фиксируя набор активных политик на время выполнения. Это " "достигается с помощью счетчика занятости фреймворка: при входе в точку входа " -"счетчик увеличивается; при выходе из нее — уменьшается. Пока счетчик " +"счетчик увеличивается; при выходе из неё — уменьшается. Пока счетчик " "занятости повышен, изменения списка политик запрещены, и потоки, пытающиеся " "изменить список политик, будут ждать, пока список не освободится. Счетчик " "занятости защищается мьютексом, а условная переменная используется для " @@ -2607,7 +2607,7 @@ msgid "" "module should free any internal storage associated with `label` so that it " "may be destroyed." msgstr "" -"Уничтожить метку на удаленном интерфейсе. В этой точке входа модуль политики " +"Уничтожить метку на удалённом интерфейсе. В этой точке входа модуль политики " "должен освободить любое внутреннее хранилище, связанное с `label`, чтобы её " "можно было уничтожить." @@ -3720,7 +3720,7 @@ msgstr "`devfs_dirent`" #: documentation/content/en/books/arch-handbook/mac/_index.adoc:1790 #, no-wrap msgid "Devfs directory entry to be labeled." -msgstr "Запись в каталоге devfs, для которой создается метка." +msgstr "Запись в каталоге devfs, для которой создаётся метка." #. type: Table #: documentation/content/en/books/arch-handbook/mac/_index.adoc:1794 @@ -4942,7 +4942,7 @@ msgid "" "and will be made for both endpoints." msgstr "" "Установите метку однорангового узла на потоковом UNIX-сокете из переданной " -"конечной точки удаленного сокета. Этот вызов будет выполнен при соединении " +"конечной точки удалённого сокета. Этот вызов будет выполнен при соединении " "пары сокетов и будет произведен для обеих конечных точек." #. type: Title ==== diff --git a/documentation/content/ru/books/arch-handbook/newbus/_index.adoc b/documentation/content/ru/books/arch-handbook/newbus/_index.adoc index a132c0da51..0a00ad2dd6 100644 --- a/documentation/content/ru/books/arch-handbook/newbus/_index.adoc +++ b/documentation/content/ru/books/arch-handbook/newbus/_index.adoc @@ -152,7 +152,7 @@ Newbus также позволяет определять методы инте int FOO_DOIT_TO_CHILD(device_t dev, device_t child); .... -Исходный файл `[.filename]#foo_if.c#` также создается для сопровождения автоматически сгенерированного заголовочного файла; он содержит реализации функций, которые ищут расположение соответствующих функций в таблице методов объекта и вызывают эту функцию. +Исходный файл `[.filename]#foo_if.c#` также создаётся для сопровождения автоматически сгенерированного заголовочного файла; он содержит реализации функций, которые ищут расположение соответствующих функций в таблице методов объекта и вызывают эту функцию. Система определяет два основных интерфейса. Первый фундаментальный интерфейс называется _"device"_ (устройство) и включает методы, которые относятся ко всем устройствам. Методы в интерфейсе _"device"_ включают _"probe"_ (обнаружение), _"attach"_ (присоединение) и _"detach"_ (отсоединение) для управления обнаружением оборудования, а также _"shutdown"_ (выключение), _"suspend"_ (приостановка) и _"resume"_ (возобновление) для уведомления о критических событиях. diff --git a/documentation/content/ru/books/arch-handbook/newbus/_index.po b/documentation/content/ru/books/arch-handbook/newbus/_index.po index dc3d29458c..5de7be37bd 100644 --- a/documentation/content/ru/books/arch-handbook/newbus/_index.po +++ b/documentation/content/ru/books/arch-handbook/newbus/_index.po @@ -1,12 +1,12 @@ # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. -# Vladlen Popolitov , 2025. +# Vladlen Popolitov , 2025, 2026. msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-05-01 19:56-0300\n" -"PO-Revision-Date: 2025-07-05 04:45+0000\n" +"PO-Revision-Date: 2026-04-05 04:45+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" @@ -466,7 +466,7 @@ msgid "" "functions which look up the location of the relevant functions in the " "object's method table and call that function." msgstr "" -"Исходный файл `[.filename]#foo_if.c#` также создается для сопровождения " +"Исходный файл `[.filename]#foo_if.c#` также создаётся для сопровождения " "автоматически сгенерированного заголовочного файла; он содержит реализации " "функций, которые ищут расположение соответствующих функций в таблице методов " "объекта и вызывают эту функцию." diff --git a/documentation/content/ru/books/arch-handbook/scsi/_index.adoc b/documentation/content/ru/books/arch-handbook/scsi/_index.adoc index 399cde1b8c..ae492e234c 100644 --- a/documentation/content/ru/books/arch-handbook/scsi/_index.adoc +++ b/documentation/content/ru/books/arch-handbook/scsi/_index.adoc @@ -364,7 +364,7 @@ CAM поддерживает SCSI-контроллеры, работающие Затем настройте команду SCSI. Хранилище команды может быть указано в CCB различными способами, определяемыми флагами CCB. Буфер команды может содержаться в CCB или указываться на него; в последнем случае указатель может быть физическим или виртуальным. Поскольку оборудованию обычно требуется физический адрес, мы всегда преобразуем адрес в физический, как правило, используя API busdma. -В случае, если запрашивается физический адрес, допустимо вернуть CCB со статусом `CAM_REQ_INVALID`, текущие драйверы так и делают. При необходимости физический адрес также может быть преобразован или отображен обратно в виртуальный, но с большими трудностями, поэтому мы этого не делаем. +В случае, если запрашивается физический адрес, допустимо вернуть CCB со статусом `CAM_REQ_INVALID`, текущие драйверы так и делают. При необходимости физический адрес также может быть преобразован или отображён обратно в виртуальный, но с большими трудностями, поэтому мы этого не делаем. [.programlisting] .... @@ -902,7 +902,7 @@ CAM поддерживает SCSI-контроллеры, работающие static void xxx_poll(struct cam_sim *); .... -Функция poll используется для имитации прерываний, когда подсистема прерываний не функционирует (например, когда система аварийно завершила работу и создает дамп памяти). Подсистема CAM устанавливает соответствующий уровень прерывания перед вызовом процедуры poll. Таким образом, все, что ей нужно сделать, — это вызвать процедуру прерывания (или наоборот, процедура poll может выполнять реальные действия, а процедура прерывания просто вызывает процедуру poll). Зачем тогда нужна отдельная функция? Это связано с различными соглашениями о вызов ах. Процедура `xxx_poll` получает указатель на структуру cam_sim в качестве аргумента, в то время как процедура прерывания PCI по общему соглашению получает указатель на структуру `xxx_softc`, а процедура прерывания ISA получает только номер устройства. Таким образом, процедура poll обычно выглядит следующим образом: +Функция poll используется для имитации прерываний, когда подсистема прерываний не функционирует (например, когда система аварийно завершила работу и создаёт дамп памяти). Подсистема CAM устанавливает соответствующий уровень прерывания перед вызовом процедуры poll. Таким образом, все, что ей нужно сделать, — это вызвать процедуру прерывания (или наоборот, процедура poll может выполнять реальные действия, а процедура прерывания просто вызывает процедуру poll). Зачем тогда нужна отдельная функция? Это связано с различными соглашениями о вызов ах. Процедура `xxx_poll` получает указатель на структуру cam_sim в качестве аргумента, в то время как процедура прерывания PCI по общему соглашению получает указатель на структуру `xxx_softc`, а процедура прерывания ISA получает только номер устройства. Таким образом, процедура poll обычно выглядит следующим образом: [.programlisting] .... diff --git a/documentation/content/ru/books/arch-handbook/scsi/_index.po b/documentation/content/ru/books/arch-handbook/scsi/_index.po index 59aea88e0f..ad93c332ea 100644 --- a/documentation/content/ru/books/arch-handbook/scsi/_index.po +++ b/documentation/content/ru/books/arch-handbook/scsi/_index.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-05-01 19:56-0300\n" -"PO-Revision-Date: 2026-03-04 20:01+0000\n" +"PO-Revision-Date: 2026-04-05 04:45+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" @@ -1295,7 +1295,7 @@ msgid "" msgstr "" "В случае, если запрашивается физический адрес, допустимо вернуть CCB со " "статусом `CAM_REQ_INVALID`, текущие драйверы так и делают. При необходимости " -"физический адрес также может быть преобразован или отображен обратно в " +"физический адрес также может быть преобразован или отображён обратно в " "виртуальный, но с большими трудностями, поэтому мы этого не делаем." #. type: delimited block . 4 @@ -2982,7 +2982,7 @@ msgid "" msgstr "" "Функция poll используется для имитации прерываний, когда подсистема " "прерываний не функционирует (например, когда система аварийно завершила " -"работу и создает дамп памяти). Подсистема CAM устанавливает соответствующий " +"работу и создаёт дамп памяти). Подсистема CAM устанавливает соответствующий " "уровень прерывания перед вызовом процедуры poll. Таким образом, все, что ей " "нужно сделать, — это вызвать процедуру прерывания (или наоборот, процедура " "poll может выполнять реальные действия, а процедура прерывания просто " diff --git a/documentation/content/ru/books/arch-handbook/smp/_index.po b/documentation/content/ru/books/arch-handbook/smp/_index.po index 0b5a7208a3..8eed7ab72a 100644 --- a/documentation/content/ru/books/arch-handbook/smp/_index.po +++ b/documentation/content/ru/books/arch-handbook/smp/_index.po @@ -1,12 +1,12 @@ # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. -# Vladlen Popolitov , 2025. +# Vladlen Popolitov , 2025, 2026. msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-05-01 19:56-0300\n" -"PO-Revision-Date: 2025-12-18 04:45+0000\n" +"PO-Revision-Date: 2026-03-08 09:11+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" diff --git a/documentation/content/ru/books/arch-handbook/sound/_index.adoc b/documentation/content/ru/books/arch-handbook/sound/_index.adoc index 453ee52e64..70441feb97 100644 --- a/documentation/content/ru/books/arch-handbook/sound/_index.adoc +++ b/documentation/content/ru/books/arch-handbook/sound/_index.adoc @@ -104,7 +104,7 @@ man:pcm[4] — это центральный компонент подсисте Существует два возможных способа работы с устройствами, не поддерживающими PnP: -* Используйте метод `device_identify()` (пример: [.filename]#sound/isa/es1888.c#). Метод `device_identify()` проверяет наличие оборудования по известным адресам и, если находит поддерживаемое устройство, создает новое pcm-устройство, которое затем передаётся для probe/attach. +* Используйте метод `device_identify()` (пример: [.filename]#sound/isa/es1888.c#). Метод `device_identify()` проверяет наличие оборудования по известным адресам и, если находит поддерживаемое устройство, создаёт новое pcm-устройство, которое затем передаётся для probe/attach. * Используйте пользовательскую конфигурацию ядра с соответствующими подсказками для устройств pcm (пример: [.filename]#sound/isa/mss.c#). [.filename]#pcm# драйверы должны реализовывать подпрограммы `device_suspend`, `device_resume` и `device_shutdown`, чтобы управление питанием и выгрузка модулей работали корректно. diff --git a/documentation/content/ru/books/arch-handbook/sound/_index.po b/documentation/content/ru/books/arch-handbook/sound/_index.po index 57d7fdbc59..3e9abd9cac 100644 --- a/documentation/content/ru/books/arch-handbook/sound/_index.po +++ b/documentation/content/ru/books/arch-handbook/sound/_index.po @@ -1,12 +1,12 @@ # SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. -# Vladlen Popolitov , 2025. +# Vladlen Popolitov , 2025, 2026. msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-11-08 16:17+0000\n" -"PO-Revision-Date: 2025-11-12 04:45+0000\n" +"PO-Revision-Date: 2026-04-05 04:45+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" @@ -319,7 +319,7 @@ msgid "" msgstr "" "Используйте метод `device_identify()` (пример: [.filename]#sound/isa/es1888." "c#). Метод `device_identify()` проверяет наличие оборудования по известным " -"адресам и, если находит поддерживаемое устройство, создает новое pcm-" +"адресам и, если находит поддерживаемое устройство, создаёт новое pcm-" "устройство, которое затем передаётся для probe/attach." #. type: Plain text diff --git a/documentation/content/ru/books/arch-handbook/sysinit/_index.adoc b/documentation/content/ru/books/arch-handbook/sysinit/_index.adoc index 8d6ec7c1e0..450b8d5170 100644 --- a/documentation/content/ru/books/arch-handbook/sysinit/_index.adoc +++ b/documentation/content/ru/books/arch-handbook/sysinit/_index.adoc @@ -87,7 +87,7 @@ SYSUNINIT(uniquifier, subsystem, order, func, ident) === Запуск -Макрос `SYSINIT()` создает необходимые данные SYSINIT в наборе данных инициализации системы, чтобы SYSINIT мог отсортировать и выполнить функцию при запуске системы и загрузке модуля. `SYSINIT()` принимает уникальный идентификатор, который SYSINIT использует для идентификации конкретных данных вызова функции, порядок подсистемы, порядок элемента подсистемы, функцию для вызова и данные для передачи в функцию. Все функции должны принимать аргумент в виде константного указателя. +Макрос `SYSINIT()` создаёт необходимые данные SYSINIT в наборе данных инициализации системы, чтобы SYSINIT мог отсортировать и выполнить функцию при запуске системы и загрузке модуля. `SYSINIT()` принимает уникальный идентификатор, который SYSINIT использует для идентификации конкретных данных вызова функции, порядок подсистемы, порядок элемента подсистемы, функцию для вызова и данные для передачи в функцию. Все функции должны принимать аргумент в виде константного указателя. .Пример `SYSINIT()` [example] diff --git a/documentation/content/ru/books/arch-handbook/sysinit/_index.po b/documentation/content/ru/books/arch-handbook/sysinit/_index.po index b8e7b4377d..cb124c78a2 100644 --- a/documentation/content/ru/books/arch-handbook/sysinit/_index.po +++ b/documentation/content/ru/books/arch-handbook/sysinit/_index.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-05-01 19:56-0300\n" -"PO-Revision-Date: 2026-03-04 20:01+0000\n" +"PO-Revision-Date: 2026-04-05 04:45+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n" @@ -206,7 +206,7 @@ msgid "" "subsystem element order, the function to call, and the data to pass the " "function. All functions must take a constant pointer argument." msgstr "" -"Макрос `SYSINIT()` создает необходимые данные SYSINIT в наборе данных " +"Макрос `SYSINIT()` создаёт необходимые данные SYSINIT в наборе данных " "инициализации системы, чтобы SYSINIT мог отсортировать и выполнить функцию " "при запуске системы и загрузке модуля. `SYSINIT()` принимает уникальный " "идентификатор, который SYSINIT использует для идентификации конкретных " diff --git a/documentation/content/ru/books/arch-handbook/usb/_index.po b/documentation/content/ru/books/arch-handbook/usb/_index.po index 372952d6f3..ab16e356c9 100644 --- a/documentation/content/ru/books/arch-handbook/usb/_index.po +++ b/documentation/content/ru/books/arch-handbook/usb/_index.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2025-11-08 16:17+0000\n" -"PO-Revision-Date: 2026-03-04 20:01+0000\n" +"PO-Revision-Date: 2026-03-08 09:11+0000\n" "Last-Translator: Vladlen Popolitov \n" "Language-Team: Russian \n"