无用的内存分段

分段是80X86体系的处理器支持的一种特性,也就是说硬件已经支持了这内存分段的功能, 用或不用的选择权在操作系统手中,linux系统就没有使用分段的功能,而使用了分页的功能。

linux虽然没有用分段,但了解分段对于整个linux系统的了解,还有linux初始化的时的流程,还是很有用的。

参考资料 《深入理解Linux内核》第二章,大概讲了12页,我也看了几遍才看懂,以下内容就算个读书笔记。

一,内存地址的分类

1,逻辑地址:   由段和偏移量组成

2,线性地址: 可以想像成指针地址,就是我们在C语言中的用的指针

3,物理地址: 实实在在的物理内存地址

二,处理器有哪硬件特性支持分段

如下图所示,CPU提供了6个段寄存器(cs,ss...)和6个段描述符寄存器(图中矩形)

段寄存器:16比特,其中存的是段描述符的索引,即段选择符

段描述符:8个字节,存的是段的描述信息,此寄存器不可编程,它随着段寄存器值的改变而改变,由硬件完成。

gdtr寄存器:当操作系统初始化时,会在内存中创建GDT(段全局描述符表),然后将这个表的地址放入gdtr寄存器中。

三,逻辑地址怎么样转换为线性地址

假如我们现在有了一个逻辑地址,1:100,1代表段选择符,100代表偏移量,那么我们根据段选择符1就可以从寄存器中拿到段描述符。从段描述符中可以取到段的起始地址,然后再加上偏移量,就得到了线性地址,整个过程由硬件完成。

四,Linux怎么使用分段

如下图所示,linux中所有分段的起始地址都定义成了0,这就得出了一个重要的结论:在Linux下,逻辑地址和线性地址是一样的。

也就是说,linux绕开了硬件的分段功能!!!

按书上的说法,原因有二

1,简单,因为linux用了分页,再用分段,会比较复杂。

2,移植性,因为很多处理器对分段支持不好

转载于:https://www.cnblogs.com/hxdoit/p/3610475.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值