- 论坛徽章:
- 0
|
因为没有看到相关的资料,只好自己假设一下,请高手给与指点,另外,以下的假设基于x86处理器。
假设1、在处于用户空间时,用户进程的页转换查找表中只有0—3G空间的页表项可能有效。在通过系统调用进入进程上下文内核态时,会把需要的3--4G空间的页表项填入到进程的页表转换查找表中。在从内核空间返回用户空间时,会清零3—4G虚拟空间对应的页表项。这种方式显然比较耗费CPU资源。
假设2、有资料介绍,linux中用到了四个全局段,即内核代码段、内核数据段、用户数据段、用户代码段。假设内核代码段和内核数据段映射0—4G的空间,而用户数据段和用户代码段只映射0—3G的空间。这样的话,用户态空间和用户上下文件内核态空间就可以用同一个页转换查找表了。这样就可以用段保护方式防止用户访问3G以上的线性空间了。
假设3、用户态空间和进程上下文内核态空间使用同一个页转换表。只是在3G以上线性空间对应的页转换表项中设置了超级用户标识,只有超级用户(即内核态)能访问(在x86系统中页表项保护中0,1,2为超级用户级,3为用户级),这样使用页表项的保护阻止用户进程访问高于3G线性空间。这个假设可能性最大,因为在进程上下文内核态,有时需要把0号进程的3—4G空间对应的页表项拷贝到本进程的3—4G空间页表项。
|
|