table of contents
subpage_prot(2) | System Calls Manual | subpage_prot(2) |
ИМЯ¶
subpage_prot - определяет подстраничную защиту адресного диапазона
LIBRARY¶
Standard C library (libc, -lc)
СИНТАКСИС¶
#include <sys/syscall.h> /* определения констант SYS_* */ #include <unistd.h>
int syscall(SYS_subpage_prot, unsigned long addr, unsigned long len, uint32_t *map);
Note: glibc provides no wrapper for subpage_prot(), necessitating the use of syscall(2).
ОПИСАНИЕ¶
Системный вызов (есть только для PowerPC) subpage_prot() предоставляет возможность контроля доступа к отдельным 4 КБ подстраницам в системах, где размер страницы равен 64 КБ.
Карта защиты налагается на страницы памяти для области, начинающейся с addr и имеющей размер len байт. Значения обоих аргументов должны быть выровнены на 64-КБ границу.
Карта защиты задаётся в буфере, на который указывает map. В карте на каждую 4-килобайтную подстраницу выделяется 2 бита; таким образом, в каждом 32-битном слове задаётся защита для 16 4-килобайтных подстраниц внутри 64-килобайтной страницы (поэтому количество 32-битных слов, на которые указывает map, должно быть равно количеству 64-килобайтных страниц, указанному в len). Каждое 2-битное поле в карте защиты может быть: 0 — полный доступ, 1 — защита от записи, 2 или 3 — запрет на любой доступ.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении subpage_prot() возвращается 0. В противном случае возвращается один из кодов ошибок, описанных далее.
ОШИБКИ¶
- EFAULT
- Буфер, на который ссылается map, недоступен.
- EINVAL
- Некорректное значение аргумента addr или len. Оба значения должны быть кратны размеру системной страницы, и они не должны указывать на область вне адресного пространства процесса, или на область, которая состоит из огромных страниц.
- ENOMEM
- Не хватает памяти.
СТАНДАРТЫ¶
Linux.
ИСТОРИЯ¶
Linux 2.6.25 (PowerPC).
The system call is provided only if the kernel is configured with CONFIG_PPC_64K_PAGES.
ПРИМЕЧАНИЯ¶
Обычная страничная защита также работает (на уровне 64-килобайтных страниц); механизм подстраничной защиты является дополнительным ограничением, поэтому указание 0 в 2-битном поле не разрешит запись в страницу, которая защищена от записи другим способом.
Обоснование¶
Данный системный вызов предоставляется для облегчения написания эмуляторов, которые работают с 64-КБ страницами в системах PowerPC. При эмуляции систем, в которых используется меньший размер страницы (таких как x86), эмулятор не может использовать блок управления памятью (MMU) и обычные системные вызовы управления защитой страниц (эмулятор может эмулировать MMU с помощью ПО проверяя и, возможно, перераспределяя адрес при каждом обращении к памяти, но это медленно). Идея в том, что эмулятор задаёт массив защитных масок для указанного диапазона виртуальных адресов. Эти маски накладываются в месте, где аппаратные табличные записи страниц (PTE) вставляются в аппаратную таблицу страниц на основе Linux PTE, при этом Linux PTE не затрагиваются. В этом случае для защищённых областей адресного пространства начинают неявно использоваться 4-килобайтные аппаратные страницы, а не 64-килобайтные аппаратные страницы (на машинах с аппаратной поддержкой 64-килобайтных страниц).
СМОТРИТЕ ТАКЖЕ¶
Documentation/admin-guide/mm/hugetlbpage.rst в дереве исходного кода ядра Linux
ПЕРЕВОД¶
Русский перевод этой страницы руководства разработал Alexander Golubev <fatzer2@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Hotellook, Nikita <zxcvbnm3230@mail.ru>, Spiros Georgaras <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику по его адресу электронной почты или по адресу списка рассылки русских переводчиков.
2 мая 2024 г. | Linux man-pages (unreleased) |