⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 -+

📁 linux内核学习笔记 希望想看的人可以很快下载到
💻
字号:
any problems, send mails to sindybear@163.com


相关文件
	

相关函数
	pagetable_init


我们总是讨论内核空间和用户空间,但是应该仔细想一下两者是怎样合作的。因为对于一个cpu就一个
cr3寄存器,但是,每一个进程都有一个页目录表,当进程进行切换的时候,cr3就要进行切换,
换成新进程的页目录表。但是每一个进程所看到的内核空间都是3G--4G这个范围的。而且内核对应一个
全局页目录表swapper_pg_dir,那当一个进程进行系统调用的时候,也就是从用户态到内核态的时候。
是不是也要更换cr3,从用户的页目录表变成内核的页目录表呢?如果是这样,那么用户的页目录中的
数据到哪里去呢???

其实,这个问题所有的答案都在cpu所提供的一种全局页的功能上,PGE(Page Global Enable)。
当一个页面被标记为PGE的时候,那么由这个页面所对应的pte和上溯得到的pmd,pgd中的页目录项
都被固定在相应的位置上,即使cr3寄存器有变动,这些页目录项和他们所对应的页表项也不会被
移走。

因此,我们可以看出内核空间和用户空间是怎样进行区分以及怎样进行联系的。

(1)
内核使用一个固定的全局页目录表swapper_pg_dir,他的3G以上的高端都被映射好了,在系统启动的时候
就已经固定了。并且这些映射都被固定为PGE,所以不会被cr3的变更而被换出去。这样,内核空间中
的3G--4G这段空间就有了一个固定的映射。它始终处在cr3所指定的内存区域中。当进程进行切换更新
cr3寄存器的时候,只更新0--3G范围内的页表映射。不会触动高端的内存映射,所以对于每一个进程来说。
0--3G的用户空间的逻辑地址到物理地址的映射是随时在变动的,而内核地址永远不变。且所有的进程看到的
内核空间都一样。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -