线性地址
这里掠过分段和分页的概念
线性地址概念:线性地址是分段变换后的地址
以下是啰嗦把版本的,
CPU在保护模式下(保护模式是什么?),“段基址+段内偏移地址”叫做线性地址(是用分段来管理虚实地址转换吧,一直疑问分段在linux中应用),如果没开分页的话,线性地址则是物理地址;而如果开了分页,线性地址=虚拟地址,
high memory
这里以32位来讲,有high memory原因是CPU寻址位数不够,导致寻址空间不足(有点抽象,有没有例子),,,而64位系统下不会有high memory
以linux为例子,32位的CPU,最大寻址范围为2^32 - 1也就是4G的线性地址空间,Linux人为的规定把4G虚拟地址空间(32位地址最多寻址4G)分为3G+1G,
也就是说,kernal拥有1G的地址空间,用户态拥有3G的地址空间,(内核空间实际上只有839MB,其中100多MB预留给硬件)
或者说,kernel可以寻址1G.这里问题来了,如果系统占用超过了1G,则规定超过寻址空间的部分,是high memory,相反的,能直接访问到的是low memory,
总结:high memory是指物理内存中内核空间不能直接访问到的部分
high memory 和low memory的访问方法
low memory采用最简单的 物理地址+偏移=kernel虚拟地址空间
high memory部分,linux先预留了128MB来进行动态寻址,(具体怎么动态寻址呢TODO)
mapping
mapping是干嘛的呢,内核mapping可以分为临时mapping和永久mapping
参考资料
- [线性地址](