Linux用户空间与内核空间(理解高端内存)

小微 科技Linux用户空间与内核空间(理解高端内存)已关闭评论106字数 772阅读模式
摘要Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户...

Linux 操作系统以及驱动程序运行在内核空间,利用程序运行在用户空间,二者不能简单地使用指针传递数据,由于Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。

Linux内核地址映照模型文章源自微观生活(93wg.com)微观生活-https://93wg.com/2931.html

x86 CPU采取了段页式地址映照模型。过程代码中的地址为逻辑地址,经由段页式地址映照后,才真正走访物理内存。文章源自微观生活(93wg.com)微观生活-https://93wg.com/2931.html

段页式机制如下图。文章源自微观生活(93wg.com)微观生活-https://93wg.com/2931.html

Linux内核地址空间划分文章源自微观生活(93wg.com)微观生活-https://93wg.com/2931.html

通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。文章源自微观生活(93wg.com)微观生活-https://93wg.com/2931.html

Linux内核高端内存的由来文章源自微观生活(93wg.com)微观生活-https://93wg.com/2931.html

当内核模块代码或线程走访内存时,代码中的内存地址都为逻辑地址,而对应到真实的物理内存地址,需要地址一对一的映照,如逻辑地址0xc0000003对应的物理地址为0×3,0xc0000004对应的物理地址为0×4,… …,逻辑地址与物理地址对应的关系为文章源自微观生活(93wg.com)微观生活-https://93wg.com/2931.html

物理地址 = 逻辑地址 – 0xC0000000文章源自微观生活(93wg.com)微观生活-https://93wg.com/2931.html

假 设依照上述简单的地址映照关系,那么内核逻辑地址空间走访为0xc0000000 ~ 0xffffffff,那么对应的物理内存规模就为0×0 ~ 0×40000000,即只能走访1G物理内存。若机器中安装8G物理内存,那么内核就只能走访前1G物理内存,后面7G物理内存将会没法走访,由于内核 的地址空间已经全体映照到物理内存地址规模0×0 ~ 0×40000000。即便安装了8G物理内存,那么物理地址为0×40000001的内存,内核该如何去走访呢?代码中必需要有内存逻辑地址 的,0xc0000000 ~ 0xffffffff的地址空间已经被用完了,所以没法走访物理地址0×40000000文章源自微观生活(93wg.com)微观生活-https://93wg.com/2931.html

以上就是微观生活(93wg.com)关于“Linux用户空间与内核空间(理解高端内存)”的详细内容,希望对大家有所帮助!文章源自微观生活(93wg.com)微观生活-https://93wg.com/2931.html

 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/2931.html