dan*_*how 5 linux memory multithreading memory-management
mprotect()
用于保护内存页面,例如将页面设为只读。它为整个过程设置了这种保护,也就是说,如果页面是只读的,则没有线程可以写入该页面。有没有一种方法可以针对不同的线程以不同的方式保护页面?例如,1个线程可以写入P页,而程序中的所有其他线程只能从P页读取。
小智 2
对于较新的 Intel CPU,您可以使用内存保护键 [1] 对进程中每个线程的不同访问设置。在 Linux 上,运行lscpu
并检查pku
和ospke
标志。
手册页 [2] 上的示例有点过时,因为不再需要手动调用相应的系统调用。相反,glibc 提供以下 API 调用:
由于维护每个保护键的权限位的寄存器是线程本地的,因此每个线程可以进行不同的保护设置。保护键设置只能进一步锁定一般设置,并不影响取指令。
[1] https://www.kernel.org/doc/Documentation/x86/protection-keys.txt
[2] http://man7.org/linux/man-pages/man7/pkeys.7.html
归档时间: |
|
查看次数: |
975 次 |
最近记录: |