.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2016, IBM Corporation. .\" Written by Mike Rapoport .\" and Copyright (C) 2016 Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH ioctl_userfaultfd 2 "15 декабря 2022 г." "Linux man\-pages 6.03" .SH ИМЯ ioctl_userfaultfd \- создаёт файловый дескриптор для обработки страничных ошибок в пользовательском пространстве .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP /* определения констант \fBUFFD*\fP */ \fB#include \fP .PP \fBint ioctl(int \fP\fIfd\fP\fB, int \fP\fIcmd\fP\fB, ...);\fP .fi .SH ОПИСАНИЕ Над объектом userfaultfd (созданным вызовом \fBuserfaultfd\fP(2)) можно выполнять различные операции \fBioctl\fP(2) используя вызовы вида: .PP .in +4n .EX ioctl(fd, cmd, argp); .EE .in Здесь \fIfd\fP — файловый дескриптор, ссылающийся на объект userfaultfd, \fIcmd\fP — одна из команд, перечисленных ниже, а \fIargp\fP — указатель на структуру данных, используемую командой \fIcmd\fP. .PP .\" Операции \fBioctl\fP(2) описаны ниже. Операции \fBUFFDIO_API\fP, \fBUFFDIO_REGISTER\fP и \fBUFFDIO_UNREGISTER\fP используются для \fIнастройки\fP поведения userfaultfd. Они позволяют вызывающему выбрать какие свойства нужно включить и какие типы событий будут доставляться приложению. Остальные операции являются операциями над \fIдиапазоном\fP. Эти операции позволяют вызывающему приложению воспринимать события страничных ошибок. .SS UFFDIO_API (начиная с Linux 4.3) Включить работу с userfaultfd и выполнить согласование программного интерфейса. .PP В аргументе \fIargp\fP содержится указатель на структуру \fIuffdio_api\fP, определённую следующим образом: .PP .in +4n .EX struct uffdio_api { __u64 api; /* запрашиваемая версия API (входные данные) */ __u64 features; /* запрашиваемые свойства (входные/выходные) */ __u64 ioctls; /* доступные операции ioctl() (выходные данные) */ }; .EE .in .PP В поле \fIapi\fP задаётся версия программного интерфейса, запрашиваемого приложением. .PP Ядро проверяет, что поддерживает запрашиваемую версию программного интерфейса и изменять поля \fIfeatures\fP и \fIioctls\fP в битовой маске, представляющей все доступные свойства и общие операции \fBioctl\fP(2). .PP Before Linux 4.11, the \fIfeatures\fP field must be initialized to zero before the call to \fBUFFDIO_API\fP, and zero (i.e., no feature bits) is placed in the \fIfeatures\fP field by the kernel upon return from \fBioctl\fP(2). .PP Начиная с Linux 4.11 поле \fIfeatures\fP можно использовать для запроса поддержки определённых свойств и явно включить свойства userfaultfd, которые по умолчанию выключены. Ядро всегда сообщает о всех доступных свойствах через поле \fIfeatures\fP. .PP .\" FIXME add more details about feature negotiation and enablement Чтобы включить свойство userfaultfd приложение должно установить соответствующий бит в поле \fIfeatures\fP. Если ядро поддерживает все запрошенные свойств, то он включит их. В противном случае оно обнулит возвращаемую структуру \fIuffdio_api\fP и вернёт \fBEINVAL\fP. .PP Могут устанавливаться следующие биты свойств: .TP \fBUFFD_FEATURE_EVENT_FORK\fP (начиная с Linux 4.11) Если это свойство включено, то объекты userfaultfd, связанные с родительским процессом, дублируются в дочернем процессе при вызове \fBfork\fP(2), а событие \fBUFFD_EVENT_FORK\fP доставляется отслеживающему userfaultfd. .TP \fBUFFD_FEATURE_EVENT_REMAP\fP (начиная с Linux 4.11) Если это свойство включено, то при вызове \fBmremap\fP(2) процессом с ошибкой отслеживающий userfaultfd будет получать событие с типом \fBUFFD_EVENT_REMAP\fP. .TP \fBUFFD_FEATURE_EVENT_REMOVE\fP (начиная с Linux 4.11) Если это свойство включено, то при вызове \fBmadvise\fP(2)со значением совета \fBMADV_DONTNEED\fP или \fBMADV_REMOVE\fP для освобождения области виртуальной памяти процессом с ошибкой отслеживающий userfaultfd будет получать событие с типом \fBUFFD_EVENT_REMOVE\fP. .TP \fBUFFD_FEATURE_EVENT_UNMAP\fP (начиная с Linux 4.11) Если это свойство включено, то при явном вызове \fBmremap\fP(2) или неявном вызове \fBmmap\fP(2) или \fBmremap\fP(2) процессом с ошибкой отслеживающий userfaultfd будет получать событие с типом \fBUFFD_EVENT_UNMAP\fP. .TP \fBUFFD_FEATURE_MISSING_HUGETLBFS\fP (начиная с Linux 4.11) Если этот бит установлен, то ядро включает поддержку регистрации диапазонов userfaultfd для областей виртуальной памяти hugetlbfs. .TP \fBUFFD_FEATURE_MISSING_SHMEM\fP (начиная с Linux 4.11) Если этот бит установлен, то ядро включает поддержку регистрации диапазонов userfaultfd для общих областей виртуальной памяти. К ним относятся все программные интерфейсы общей памяти ядра: общая память System V, \fBtmpfs\fP(5), общие отображения \fI/dev/zero\fP, \fBmmap\fP(2) с флагом \fBMAP_SHARED\fP, \fBmemfd_create\fP(2) и т. д. .TP \fBUFFD_FEATURE_SIGBUS\fP (начиная с Linux 4.14) .\" commit 2d6d6f5a09a96cc1fec7ed992b825e05f64cb50e Если этот бит установлен, то события о страничных ошибках (\fBUFFD_EVENT_PAGEFAULT\fP) не доставляются. Вместо них в ошибшийся процесс будет послан сигнал \fBSIGBUS\fP. Приложениям, использующим этой свойство, не потребуется использовать слежение за userfaultfd для обработки доступа к областям памяти, зарегистрированным в userfaultfd. .TP \fBUFFD_FEATURE_THREAD_ID\fP (начиная с Linux 4.14) If this feature bit is set, \fIuffd_msg.pagefault.feat.ptid\fP will be set to the faulted thread ID for each page\-fault message. .TP \fBUFFD_FEATURE_MINOR_HUGETLBFS\fP (начиная с Linux 5.13) If this feature bit is set, the kernel supports registering userfaultfd ranges in minor mode on hugetlbfs\-backed memory areas. .TP \fBUFFD_FEATURE_MINOR_SHMEM\fP (начиная с Linux 5.14) If this feature bit is set, the kernel supports registering userfaultfd ranges in minor mode on shmem\-backed memory areas. .PP .\" FIXME This user-space API seems not fully polished. Why are there .\" not constants defined for each of the bit-mask values listed below? Возвращаемое поле \fIioctls\fP можно содержать следующие биты: .TP \fB1 << _UFFDIO_API\fP Поддерживается операция \fBUFFDIO_API\fP. .TP \fB1 << _UFFDIO_REGISTER\fP Поддерживается операция \fBUFFDIO_REGISTER\fP. .TP \fB1 << _UFFDIO_UNREGISTER\fP Поддерживается операция \fBUFFDIO_UNREGISTER\fP. .PP This \fBioctl\fP(2) operation returns 0 on success. On error, \-1 is returned and \fIerrno\fP is set to indicate the error. Possible errors include: .TP \fBEFAULT\fP Значение \fIargp\fP ссылается на адрес, который находится вне доступного адресного пространства вызывающего процесса. .TP \fBEINVAL\fP Дескриптор userfaultfd уже включён предыдущей операцией \fBUFFDIO_API\fP. .TP \fBEINVAL\fP .\" FIXME In the above error case, the returned 'uffdio_api' structure is .\" zeroed out. Why is this done? This should be explained in the manual page. .\" .\" Mike Rapoport: .\" In my understanding the uffdio_api .\" structure is zeroed to allow the caller .\" to distinguish the reasons for -EINVAL. .\" Версия программного интерфейса, запрошенная в поле \fIapi\fP, не поддерживается данным ядром, или в переданном ядру поле \fIfeatures\fP установлены биты, которые не поддерживаются текущей версией ядра. .SS UFFDIO_REGISTER (Since Linux 4.3.) Register a memory address range with the userfaultfd object. The pages in the range must be "compatible". Please refer to the list of register modes below for the compatible memory backends for each mode. .PP В аргументе \fIargp\fP содержится указатель на структуру \fIuffdio_register\fP, определённую следующим образом: .PP .in +4n .EX struct uffdio_range { __u64 start; /* начало диапазона */ __u64 len; /* длина диапазона (в байтах) */ }; struct uffdio_register { struct uffdio_range range; __u64 mode; /* желаемый режим операции (входные данные) */ __u64 ioctls; /* доступные операции ioctl() (результат) */ }; .EE .in .PP В поле \fIrange\fP задаётся диапазон памяти (начинающийся с \fIstart\fP и длиной \fIlen\fP байт), который должен обрабатываться userfaultfd. .PP В поле \fImode\fP задаётся режим операции на этим диапазоном памяти. У режима userfaultfd могут быть указаны следующие значения (через операцию ИЛИ) для задаваемого диапазона: .TP \fBUFFDIO_REGISTER_MODE_MISSING\fP Track page faults on missing pages. Since Linux 4.3, only private anonymous ranges are compatible. Since Linux 4.11, hugetlbfs and shared memory ranges are also compatible. .TP \fBUFFDIO_REGISTER_MODE_WP\fP Track page faults on write\-protected pages. Since Linux 5.7, only private anonymous ranges are compatible. .TP \fBUFFDIO_REGISTER_MODE_MINOR\fP Track minor page faults. Since Linux 5.13, only hugetlbfs ranges are compatible. Since Linux 5.14, compatibility with shmem ranges was added. .PP If the operation is successful, the kernel modifies the \fIioctls\fP bit\-mask field to indicate which \fBioctl\fP(2) operations are available for the specified range. This returned bit mask can contain the following bits: .TP \fB1 << _UFFDIO_COPY\fP Поддерживается операция \fBUFFDIO_COPY\fP. .TP \fB1 << _UFFDIO_WAKE\fP Поддерживается операция \fBUFFDIO_WAKE\fP. .TP \fB1 << _UFFDIO_WRITEPROTECT\fP The \fBUFFDIO_WRITEPROTECT\fP .TP \fB1 << _UFFDIO_ZEROPAGE\fP The \fBUFFDIO_ZEROPAGE\fP operation is supported. .TP \fB1 << _UFFDIO_CONTINUE\fP Поддерживается операция \fBUFFDIO_CONTINUE\fP. .PP .\" FIXME Is the following error list correct? .\" This \fBioctl\fP(2) operation returns 0 on success. On error, \-1 is returned and \fIerrno\fP is set to indicate the error. Possible errors include: .TP \fBEBUSY\fP Отображение в указанном диапазоне зарегистрировано в другом объекте userfaultfd. .TP \fBEFAULT\fP Значение \fIargp\fP ссылается на адрес, который находится вне доступного адресного пространства вызывающего процесса. .TP \fBEINVAL\fP В поле \fImode\fP указан некорректный или неподдерживаемый бит или поле \fImode\fP равно нулю. .TP \fBEINVAL\fP Отображение в указанном адресном диапазоне отсутствует. .TP \fBEINVAL\fP Значение \fIrange.start\fP или \fIrange.len\fP не кратно размеру системной страницы или значение \fIrange.len\fP равно или эти поля содержат другие некорректные значения. .TP \fBEINVAL\fP .\" Mike Rapoport: .\" ENOMEM if the process is exiting and the .\" mm_struct has gone by the time userfault grabs it. В указанном адресном диапазоне имеется несовместимое отображение. .SS UFFDIO_UNREGISTER (начиная с Linux 4.3) Снять регистрацию диапазона адресов памяти в userfaultfd. Страницы в диапазоне должны быть «совместимыми» (смотрите описание \fBUFFDIO_REGISTER\fP). .PP Снимаемый с регистрации диапазон адресов задаётся в структуре \fIuffdio_range\fP, которая указывается в \fIargp\fP. .PP This \fBioctl\fP(2) operation returns 0 on success. On error, \-1 is returned and \fIerrno\fP is set to indicate the error. Possible errors include: .TP \fBEINVAL\fP Поле \fIstart\fP или \fIlen\fP структуры \fIufdio_range\fP не кратно размеру системной страницы или поле \fIlen\fP равно нулю или эти поля содержат другие некорректные значения. .TP \fBEINVAL\fP В указанном адресном диапазоне имеется несовместимое отображение. .TP \fBEINVAL\fP .\" Отображение в указанном адресном диапазоне отсутствует. .SS UFFDIO_COPY (начиная с Linux 4.3) Атомарно копировать непрерывный участок памяти в зарегистрированный в userfault диапазон и разбудить заблокированную нить (не обязательно). Адреса источника и назначения и количество копируемых байт задаётся в полях \fIsrc\fP, \fIdst\fP и \fIlen\fP структуры \fIuffdio_copy\fP, на которую указывает \fIargp\fP: .PP .in +4n .EX struct uffdio_copy { __u64 dst; /* Destination of copy */ __u64 src; /* Source of copy */ __u64 len; /* Number of bytes to copy */ __u64 mode; /* Flags controlling behavior of copy */ __s64 copy; /* Number of bytes copied, or negated error */ }; .EE .in .PP Для изменения поведения операции \fBUFFDIO_COPY\fP можно использовать следующие значения \fImode\fP (побитовое ИЛИ): .TP \fBUFFDIO_COPY_MODE_DONTWAKE\fP Не будить нить, которая ждёт решения страничной ошибки .TP \fBUFFDIO_COPY_MODE_WP\fP Copy the page with read\-only permission. This allows the user to trap the next write to the page, which will block and generate another write\-protect userfault message. This is used only when both \fBUFFDIO_REGISTER_MODE_MISSING\fP and \fBUFFDIO_REGISTER_MODE_WP\fP modes are enabled for the registered range. .PP .\" FIXME Above: Why is the 'copy' field used to return error values? .\" This should be explained in the manual page. Поле \fIcopy\fP используется ядром для возврата количества байт, которые были скопированы, или ошибки (отрицательное значение, подобное \fIerrno\fP). Если значение, возвращённое в \fIcopy\fP, не совпадает со значением, указанным в \fIlen\fP, то операция завершается ошибкой \fBEAGAIN\fP. Поле \fIcopy\fP используется только для результата; оно не читается операцией \fBUFFDIO_COPY\fP. .PP This \fBioctl\fP(2) operation returns 0 on success. In this case, the entire area was copied. On error, \-1 is returned and \fIerrno\fP is set to indicate the error. Possible errors include: .TP \fBEAGAIN\fP Количество скопированных байт (т. е., значение, возвращаемое в поле \fIcopy\fP) не равно значению, указанному в поле \fIlen\fP. .TP \fBEINVAL\fP Значение \fIdst\fP или \fIlen\fP не кратно размеру системной страницы или диапазон, заданный в \fIsrc\fP и \fIlen\fP или \fIdst\fP и \fIlen\fP является неправильным. .TP \fBEINVAL\fP В поле \fImode\fP установлен недопустимый бит. .TP \fBENOENT\fP (начиная с Linux 4.11) Процесс с ошибкой изменил раскладку своей виртуальной памяти одновременно имея незавершённую операцию \fBUFFDIO_COPY\fP. .TP \fBENOSPC\fP (в Linux 4.11 по Linux 4.13) Процесс с ошибкой завершил работу в момент выполнения операции \fBUFFDIO_COPY\fP. .TP \fBESRCH\fP (начиная с Linux 4.13) .\" Процесс с ошибкой завершил работу в момент выполнения операции \fBUFFDIO_COPY\fP. .SS UFFDIO_ZEROPAGE (начиная с Linux 4.3) Обнулить диапазон памяти, зарегистрированный в userfaultfd. .PP Запрашиваемый диапазон указывается в поле \fIrange\fP структуры \fIuffdio_zeropage\fP, на которую указывает \fIargp\fP: .PP .in +4n .EX struct uffdio_zeropage { struct uffdio_range range; __u64 mode; /* флаги, определяющие поведение копирования */ __s64 zeropage; /* количество обнуляемых байт или отрицательная ошибка */ }; .EE .in .PP Для изменения поведения операции \fBUFFDIO_ZEROPAGE\fP можно использовать следующие значения \fImode\fP (побитовое ИЛИ): .TP \fBUFFDIO_ZEROPAGE_MODE_DONTWAKE\fP Не будить нить, которая ждёт решения страничной ошибки. .PP .\" FIXME Why is the 'zeropage' field used to return error values? .\" This should be explained in the manual page. Поле \fIzeropage\fP используется ядром для возврата количества байт, которые были обнулены, или ошибки (также, как для \fBUFFDIO_COPY\fP). Если значение, возвращённое в \fIzeropage\fP, не совпадает со значением, указанным в \fIrange.len\fP, то операция завершается ошибкой \fBEAGAIN\fP. Поле \fIzeropage\fP используется только для результата; оно не читается операцией \fBUFFDIO_ZEROPAGE\fP. .PP This \fBioctl\fP(2) operation returns 0 on success. In this case, the entire area was zeroed. On error, \-1 is returned and \fIerrno\fP is set to indicate the error. Possible errors include: .TP \fBEAGAIN\fP Количество обнулённых байт (т. е., значение, возвращаемое в поле \fIzeropage\fP) не равно значению, указанному в поле \fIrange.len\fP. .TP \fBEINVAL\fP Значение \fIrange.start\fP или \fIrange.len\fP не кратно размеру системной страницы, значение \fIrange.len\fP равно нулю, указанный диапазон является неправильным. .TP \fBEINVAL\fP В поле \fImode\fP установлен недопустимый бит. .TP \fBESRCH\fP (начиная с Linux 4.13) .\" Процесс с ошибкой завершил работу в момент выполнения операции \fBUFFDIO_ZEROPAGE\fP. .SS UFFDIO_WAKE (начиная с Linux 4.3) Разбудить нить, которая ждёт решения страничной ошибки в указанном диапазоне адресов памяти. .PP Операция \fBUFFDIO_WAKE\fP используется вместе с \fBUFFDIO_COPY\fP и \fBUFFDIO_ZEROPAGE\fP, у которых установлен бит \fBUFFDIO_COPY_MODE_DONTWAKE\fP или \fBUFFDIO_ZEROPAGE_MODE_DONTWAKE\fP в поле \fImode\fP. При отслеживании userfault можно выполнять несколько операций \fBUFFDIO_COPY\fP и \fBUFFDIO_ZEROPAGE\fP вместе и затем явно будить нить с ошибкой с помощью \fBUFFDIO_WAKE\fP. .PP В аргументе \fIargp\fP содержится указатель на структуру \fIuffdio_range\fP (показана выше), в которой задаётся диапазон адресов. .PP This \fBioctl\fP(2) operation returns 0 on success. On error, \-1 is returned and \fIerrno\fP is set to indicate the error. Possible errors include: .TP \fBEINVAL\fP Поле \fIstart\fP или \fIlen\fP структуры \fIufdio_range\fP не кратно размеру системной страницы или поле \fIlen\fP равно нулю или указанный диапазон является неправильным. .SS "UFFDIO_WRITEPROTECT (начиная с Linux 5.7)" Write\-protect or write\-unprotect a userfaultfd\-registered memory range registered with mode \fBUFFDIO_REGISTER_MODE_WP\fP. .PP The \fIargp\fP argument is a pointer to a \fIuffdio_range\fP structure as shown below: .PP .in +4n .EX struct uffdio_writeprotect { struct uffdio_range range; /* Range to change write permission*/ __u64 mode; /* Mode to change write permission */ }; .EE .in .PP There are two mode bits that are supported in this structure: .TP \fBUFFDIO_WRITEPROTECT_MODE_WP\fP When this mode bit is set, the ioctl will be a write\-protect operation upon the memory range specified by \fIrange\fP. Otherwise it will be a write\-unprotect operation upon the specified range, which can be used to resolve a userfaultfd write\-protect page fault. .TP \fBUFFDIO_WRITEPROTECT_MODE_DONTWAKE\fP When this mode bit is set, do not wake up any thread that waits for page\-fault resolution after the operation. This can be specified only if \fBUFFDIO_WRITEPROTECT_MODE_WP\fP is not specified. .PP This \fBioctl\fP(2) operation returns 0 on success. On error, \-1 is returned and \fIerrno\fP is set to indicate the error. Possible errors include: .TP \fBEINVAL\fP Поле \fIstart\fP или \fIlen\fP структуры \fIufdio_range\fP не кратно размеру системной страницы или поле \fIlen\fP равно нулю или указанный диапазон является неправильным. .TP \fBEAGAIN\fP The process was interrupted; retry this call. .TP \fBENOENT\fP The range specified in \fIrange\fP is not valid. For example, the virtual address does not exist, or not registered with userfaultfd write\-protect mode. .TP \fBEFAULT\fP .\" Encountered a generic fault during processing. .SS UFFDIO_CONTINUE (Since Linux 5.13.) Resolve a minor page fault by installing page table entries for existing pages in the page cache. .PP The \fIargp\fP argument is a pointer to a \fIuffdio_continue\fP structure as shown below: .PP .in +4n .EX struct uffdio_continue { struct uffdio_range range; /* Range to install PTEs for and continue */ __u64 mode; /* Flags controlling the behavior of continue */ __s64 mapped; /* Number of bytes mapped, or negated error */ }; .EE .in .PP Для изменения поведения операции \fBUFFDIO_CONTINUE\fP можно использовать следующие значения \fImode\fP (побитовое ИЛИ): .TP \fBUFFDIO_CONTINUE_MODE_DONTWAKE\fP Не будить нить, которая ждёт решения страничной ошибки. .PP The \fImapped\fP field is used by the kernel to return the number of bytes that were actually mapped, or an error in the same manner as \fBUFFDIO_COPY\fP. If the value returned in the \fImapped\fP field doesn't match the value that was specified in \fIrange.len\fP, the operation fails with the error \fBEAGAIN\fP. The \fImapped\fP field is output\-only; it is not read by the \fBUFFDIO_CONTINUE\fP operation. .PP This \fBioctl\fP(2) operation returns 0 on success. In this case, the entire area was mapped. On error, \-1 is returned and \fIerrno\fP is set to indicate the error. Possible errors include: .TP \fBEAGAIN\fP The number of bytes mapped (i.e., the value returned in the \fImapped\fP field) does not equal the value that was specified in the \fIrange.len\fP field. .TP \fBEINVAL\fP Значение \fIrange.start\fP или \fIrange.len\fP не кратно размеру системной страницы, значение \fIrange.len\fP равно нулю, указанный диапазон является неправильным. .TP \fBEINVAL\fP В поле \fImode\fP установлен недопустимый бит. .TP \fBEEXIST\fP One or more pages were already mapped in the given range. .TP \fBENOENT\fP Процесс с ошибкой изменил раскладку своей виртуальной памяти одновременно имея незавершённую операцию \fBUFFDIO_CONTINUE\fP. .TP \fBENOMEM\fP Allocating memory needed to setup the page table mappings failed. .TP \fBEFAULT\fP No existing page could be found in the page cache for the given range. .TP \fBESRCH\fP .\" Процесс с ошибкой завершил работу в момент выполнения операции \fBUFFDIO_CONTINUE\fP. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" Смотрите описание приведённое выше для каждой операции. .SH ОШИБКИ Смотрите описание приведённое выше для каждой операции. Также для всех описанных выше операций могут возникать общие ошибки: .TP \fBEFAULT\fP Значение \fIargp\fP указывает на некорректный адрес памяти. .TP \fBEINVAL\fP (для все операций кроме \fBUFFDIO_API\fP) Объект userfaultfd пока не включён (с помощью операции \fBUFFDIO_API\fP). .SH СТАНДАРТЫ Данные операции \fBioctl\fP(2) есть только в Linux. .SH ДЕФЕКТЫ Чтобы определить доступные свойства userfault и включить некоторые из них нужно закрыть файловый дескриптор userfaultfd после первой операции \fBUFFDIO_API\fP, которая запрашивает доступность свойств, и повторно открыть его перед второй операцией \fBUFFDIO_API\fP, которая теперь включит желаемый свойства. .SH ПРИМЕРЫ Смотрите \fBuserfaultfd\fP(2). .SH "СМ. ТАКЖЕ" \fBioctl\fP(2), \fBmmap\fP(2), \fBuserfaultfd\fP(2) .PP Файл \fIDocumentation/admin\-guide/mm/userfaultfd.rst\fP из дерева исходного кода ядра Linux .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov , Dmitriy S. Seregin , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .