linux的分段

linux 更倾向于使用分页方式,不怎么喜欢使用分段,
分段可以给美国进程分配不同的线性地址空间,分页可以把同一个线性地址隐射到不同的物理地址(这跟linlux的分页机制有关)

因为这样更容易跨平台,但是由于分段是硬件就支持的,linux还是使用了分段;

用户代码段
用户数据段
内核代码段
内核数据段

关注的Base字段都是0x00000000,G位为1,用户态的DPL为3(最小优先级),内核态的DPL为0(最高优先级)

G为粒度标志,1代表以4K为单位
这样不管是用户态以及内核态就能寻址2的32次方-1的地址,4G。
不管是用户态以及内核态的所有进程的逻辑地址是一样的。
这样linux的逻辑地址跟线性地址是一致的,即逻辑地址中的32偏移量的值与最后转换出来的线性地址的值是一样的。

当发生内核态跟用户态的切换时,其实CPU的当前特权级CPL也会相应的改变,CPL=3为用户态,CPL=0为内核态,其CPU的cs,ds,ss都会相应的装入段选择符。


由于linux的逻辑地址跟线性地址是一致的,这样就方便很多,例如执行某个指令时,仅制定逻辑地址的偏移地址即可,不用指定段选择符,因为当前的cpu对应的寄存器就默认是对应的段描述符,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值