Linux的内核空间和用户空间是如何划分的(以32位系统为例)?

Linux的内核空间和用户空间是如何划分的(以32位系统为例)?,第1张

通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。地址分配如下图所示

 内核地址空间分布

直接映射区:线性空间中从3G开始最大896M的区间,为直接内存映射区,该区域的线性地址和物理地址存在线性转换关系:线性地址=3G+物理地址。

动态内存映射区:该区域由内核函数vmalloc来分配,特点是:线性空间连续,但是对应的物理空间不一定连续。vmalloc分配的线性地址所对应的物理页可能处于低端内存,也可能处于高端内存。

永久内存映射区:该区域可访问高端内存。访问方法是使用alloc_page(_GFP_HIGHMEM)分配高端内存页或者使用kmap函数将分配到的高端内存映射到该区域。

固定映射区:该区域和4G的顶端只有4k的隔离带,其每个地址项都服务于特定的用途,如ACPI_BASE等。

因为boot文件系统必须在主分区才能启动,所以要做一个boot分区。 下面我对不知道怎么分区的用户而言说说高级用户应该明白自己需要什么,例如确定自己使用的BIOS可能无法读取100GB后的位置或是要使用LVM等。  linux社区的一个问题是,很多老旧的资料还在网上传来传去。其中一些真的需要更新了,例如给/boot专门分一个100MB的分区这种做法。  曾经给/boot一个很小的分区是有十分充足的理由的,因为在二十几年前,BIOS只能认一个1024柱面的硬盘,如果启动文件放在0-1023(从0开始数,共1024个柱面)之外,BIOS就无法读取启动所需的文件,从而无法启动。 为了兼容这种BIOS,就需要在磁盘前端分出一个小分区专门来存储启动文件。  但是现在,应该是找不到那么古老的主板了,即使能找到,也无法安装现在的linux了。 100MB的boot分区,有什么害处呢?  太小了,放不下现在启动所需的文件了。现在的linux,留下两个内核是很正常的,如果新内核有什么问题,还可以用老内核。 这台机器上现在有两个版本的linux内核(3.13.0-85 和 4.4.0.21),一共多大呢?  看上去两个内核100MB勉强够用,但是现在的启动文件是越来越大的,例如3.13的initrd是29M,但4.4的initrd有35M,下一次升级内核,100MB就不够用了。  另外在Debian系的Linux发行版上,还有另一个问题,老旧的内核不会被自动清除。上次手动清理冗余内核的时候,/boot已经达到了700+MB。/boot分区满了,内核就无法安装,引发问题。  所以,不要划分/boot分区。  另外,使用gpt的硬盘那个EFI system partition不是boot分区,不要搞混了。 来自:https://zhidao.baidu.com/question/1994266546185618027.html


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/6187532.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-17
下一篇 2023-03-17

发表评论

登录后才能评论

评论列表(0条)

保存