Linux内核地址映照模型
x86 CPU采取了段页式地址映照模型。过程代码中的地址为逻辑地址,经由段页式地址映照后,才真正走访物理内存。文章源自微观生活(93wg.com)微观生活-https://93wg.com/2927.html
段页式机制如下图。文章源自微观生活(93wg.com)微观生活-https://93wg.com/2927.html
Linux内核地址空间划分文章源自微观生活(93wg.com)微观生活-https://93wg.com/2927.html
通常32位Linux内核地址空间划分03G为用户空间,34G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。文章源自微观生活(93wg.com)微观生活-https://93wg.com/2927.html
Linux内核高端内存的由来文章源自微观生活(93wg.com)微观生活-https://93wg.com/2927.html
当内核模块代码或线程走访内存时,代码中的内存地址都为逻辑地址,而对应到真实的物理内存地址,需要地址一对一的映照,如逻辑地址0xc0000003对应的物理地址为0x3,0xc0000004对应的物理地址为0x4,… …,逻辑地址与物理地址对应的关系为文章源自微观生活(93wg.com)微观生活-https://93wg.com/2927.html
物理地址 = 逻辑地址 – 0xC0000000文章源自微观生活(93wg.com)微观生活-https://93wg.com/2927.html
假定依照上述简单的地址映照关系,那么内核逻辑地址空间走访为0xc0000000 ~ 0xffffffff,那么对应的物理内存规模就为0x0 ~ 0x40000000,即只能走访1G物理内存。若机器中安装8G物理内存,那么内核就只能走访前1G物理内存,后面7G物理内存将会没法走访,由于内核的地址空间已经全体映照到物理内存地址规模0x0 ~ 0x40000000。即便安装了8G物理内存,那么物理地址为0x40000001的内存,内核该如何去走访呢?代码中必需要有内存逻辑地址的,0xc0000000 ~ 0xffffffff的地址空间已经被用完了,所以没法走访物理地址0x40000000文章源自微观生活(93wg.com)微观生活-https://93wg.com/2927.html
以上就是微观生活(93wg.com)关于“Linux内核高端内存”的详细内容,希望对大家有所帮助!文章源自微观生活(93wg.com)微观生活-https://93wg.com/2927.html 文章源自微观生活(93wg.com)微观生活-https://93wg.com/2927.html
评论