说明

特定于PowerPC的subpage_prot()系统调用提供了控制在页面大小配置为64kB的系统上单个4kB子页面上访问权限的功能。

保护映射应用于从addr开始并持续len个字节的区域中的内存页。这两个参数必须与64kB边界对齐。

保护映射在映射所指向的缓冲区中指定。该映射每4 kB子页面有2位;因此,每个32位字指定了64 kB页内16个4 kB子页的保护(因此,map指向的32位字的数量应等于len指定的64 kB页的数量)。保护映射中的每个2位字段为0表示允许任何访问,为1表示禁止写操作,或者为2或3表示禁止所有访问。

遵循规范

此系统调用是特定于Linux的。

版本

从Linux 2.6.25开始,在PowerPC体系结构上提供了此系统调用。仅当内核配置有CONFIG_PPC_64K_PAGES时,才提供系统调用。没有提供库支持。

另外参见

mprotect(2),系统调用(2)

Linux内核源代码树中的Documentation / admin-guide / mm / hugetlbpage.rst

错误说明

EFAULT
map引用的缓冲区不可访问。
EINVAL
addr或len参数不正确。这两个参数都必须与系统页面大小的倍数对齐,并且它们不得引用进程地址空间之外的区域或由大页面组成的区域。
ENOMEM
内存不足。

名称

subpage_prot-为地址范围定义子页面保护

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

返回值

成功后,subpage_prot()返回0。否则,返回下面指定的错误代码之一。

语法

long subpage_prot(unsigned long addr, unsigned long len,
                  uint32_t *map);

注意:此系统调用没有glibc包装器。请参阅注释。

SUBPAGE_PROT - Linux手册页

Linux程序员手册 第2部分
更新日期: 2019-03-06

备注

Glibc没有为该系统调用提供包装器;使用syscall(2)调用它。

普通页面保护(在64-kB页面级别)也适用;子页面保护机制是一个附加的约束,因此将0放入2位字段中将不允许写入对页面进行其他保护的页面。

Rationale

提供此系统调用来辅助编写在PowerPC系统上使用64 kB页面运行的仿真器。当仿真使用较小页面大小的系统(例如x86)时,仿真器不能再使用内存管理单元(MMU)和常规系统调用来控制页面保护。 (仿真器可以通过检查并可能重新映射软件中每个内存访问的地址来仿真MMU,但这很慢。)这个想法是,仿真器提供了一系列保护掩码,可应用于指定范围的虚拟地址。这些掩码适用于基于Linux PTE将硬件页表条目(PTE)插入到硬件页表中的级别,因此Linux PTE不受影响。这暗含了将受保护的地址空间区域切换为使用4 kB硬件页面,而不是64 kB硬件页面(在具有硬件64 kB页面支持的机器上)。

日期:2019-08-20 17:59:31 来源:oir作者:oir