荣新IT培训中心
全国咨询热线:400-1335-066
您现在的位置:首页>技术文章 > 正文

你所不知道的linux分段

时间:2018-02-26 14:32:37 来源:荣新IT教育培训 作者:荣新科技
关于linux的分段有很多同学并不明白,尤其是分段机制,那么linux是如何实现分段的完成的,下面我们一起来看看吧。
你所不知道的linux分段
Linux中分段的完成

前面说了那么多关于分段机制的完成,其实,对于Linux来说,并没有什么卵用。因为,Linux根本不运用分段的机制,或者说,Linux中的分段机制只是为了兼容IA32的硬件而规划的。

Intel微处理器的段机制是从8086开端提出的, 那时引进的段机制处理了从CPU内部16位地址到20位实地址的变换。为了坚持这种兼容性,386依然运用段机制,但比曾经杂乱得多。因而,Linux内 核的规划并没有悉数选用Intel所供给的段计划,仅仅有极限地运用了一下分段机制。这不只简化了Linux内核的规划,而且为把Linux移植到其他平 台发明了条件,因为许多RISC处理器并不支撑段机制。可是,对段机制相关常识的了解是进入Linux内核的必经之路。

从2.2版开端,Linux让一切的进程(或叫使命)都运用相同的逻辑地址空间,因而就没有必要运用局部描述符表LDT。但内核中也用到LDT,那只是在VM86模式中运转Wine,因为就是说在Linux上模仿运转Winodws软件或DOS软件的程序时才运用。

在 IA32 上恣意给出的地址都是一个虚拟地址,即恣意一个地址都是经过“选择符:偏移量”的方法给出的,这是段机制存拜访模式的根本特征。所以在IA32上规划操作 系统时无法逃避运用段机制。一个虚拟地址终究会经过“段基地址+偏移量”的方法转化为一个线性地址。 可是,因为绝大多数硬件渠道都不支撑段机制,只支撑分页机制,所以为了让 Linux 具有更好的可移植性,咱们需求去掉段机制而只运用分页机制。但不幸的是,IA32规则段机制是不行制止的,因而不行能绕过它直接给出线性地址空间的地址。 万般无奈之下,Linux的规划人员爽性让段的基地址为0,而段的界限为4GB,这时恣意给出一个偏移量,则等式为“0+偏移量=线性地址”,也就是说 “偏移量=线性地址”。别的因为段机制规则“偏移量<4GB”,所以偏移量的规模为0H~FFFFFFFFH,这恰好是线性地址空间规模,也就是说 虚拟地址直接映射到了线性地址,咱们今后所说到的虚拟地址和线性地址指的也就是同一地址。看来,Linux在没有逃避段机制的情况下奇妙地把段机制给绕过 去了。

别的,因为IA32段机制还规则,有必要为代码段和数据段创立不同的段,所以Linux有必要为代码段和数据段别离创立一个基地址为0,段界限为4GB 的段描述符。不只如此,因为Linux内核运转在特权级0,而用户程序运转在特权等级3,根据IA32段保护机制规则,特权级3的程序是无法拜访特权级为 0的段的,所以Linux有必要为内核用户程序别离创立其代码段和数据段。这就意味着Linux有必要创立4个段描述符——特权级0的代码段和数据段,特权级3的代码段和数据段。

分段机制是IA32架构CPU的特征,并不是操作系统寻址方法的必然选择。Linux为了跨渠道,奇妙的绕开段机制,首要运用分页机制来寻址
linux云计算和linux运维是比较适合一些知识水平不是很高的同学,想转行从事这块的可以考虑了,很多东西并不是大家看上去那么难,而是我们没有深入了解而已。好了,荣新教育祝愿大家在新的一年里万事如意心想事成。