分享
 
 
 

基于i386的Linux实现特点剖析——基础的基础

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

摘要

??本文讨论的是linux在i386体系的cpu上实现特点。通过介绍i386cpu的保护方式下的中断机制、存储器的段页式管理以及任务切换而提供的硬件机制,比较Linux的具体实现的特点与i386的设计意图之间的差异。描述了Linux中断向量表的设置过程,中断请求队列的初始化以及如何将特定的中断服务程序挂入指定的中断请求队列中。跟踪Linux中从逻辑地址到线性地址再到物理地址的变换过程,着重于线性地址到物理地址的页式变换,并结合i386cpu分析地址变换的效率。

基于i386体系结构的Linux实现特点剖析

一 前言

??本文讨论的是linux在i386体系的cpu上实现特点。通过介绍i386cpu的保护方式下的中断机制、存储器的段页式管理以及任务切换而提供的硬件机制,比较Linux的具体实现的特点与i386的设计意图之间的差异。描述了Linux中断向量表的设置过程,中断请求队列的初始化以及如何将特定的中断服务程序挂入指定的中断请求队列中。跟踪Linux中从逻辑地址到线性地址再到物理地址的变换过程,着重于线性地址到物理地址的页式变换,并结合i386cpu分析地址变换的效率。

二 80386 保护方式

??80386有两种工作方式:实方式和保护方式。尽管实方式下80386的功能较Intel先前的微处理器有很大的提高,但只有在保护方式下,80386才能真正发挥作用。在保护方式下,全部32根地址有效,可寻址达4G字节的物理空间;扩充的存储器分段管理机制和可选的存储器分页管理机制,不仅为存储器共享和保护提供了硬件支持,而且为实现虚拟存储器提供了硬件支持;支持多任务,能快速的进行任务切换和任务保护环境;4个特权级和完善的特权检查机制,既能实现资源共享又能保证代码及数据的安全和保密及任务的隔离;支持虚拟8086方式,便于执行8086代码。

??1、80386 保护方式的寻址

??在保护方式下,当寻址扩展内存中的数据和程序时,仍然使用偏移地址访问位于存储器内的信息,但保护方式下的段地址不再像实方式那样有段寄存器提供,而是在原来放段地址的段寄存器里含有一个选择子,用于选择描述符表内的一个描述符。描述符描述存储器的位置、长度和访问权限。

??保护方式下有两个描述符表:全局描述符表和局部描述符表。全局描述符表包含适用于所有程序的段定义,而局部描述符表通常用于唯一的应用程序。每个描述符表包含8129个描述符,所以任何时刻应用程序最多可用16384个描述符。

??每个描述符长8字节,全局和局部描述符表每个最长为64kb。

??80386描述符格式:

这里有表格

??描述符的基地址指示存储段的起始位置,32位的基地址允许段其始于4GB存储器的任何地方。

??段界限包含该段中最后的偏移地址,20位的段界限使得段的长度为1KB至1MB之间或者4KB至4GB之间。描述符中特征位:G位(粒度位),若G=0,说明段的界限为0000H到FFFFFH(从0到1MB),若G=1,段的界限值要乘4K段的长度为4KB到4GB。

??若D=0,则指令是16位的,意味着使用16位偏移地址和默认的16位寄存器;若D=1,则指令就位32位。

??访问权限字节具体如下:

有表格

P=0 描述符没有定义 P=1 段包含有效基地址和界限值

DPL 描述符的优先级

S=0 系统描述符 S=1 代码或数据段描述符

E=0 描述符描述数据段

ED=0 段向上扩展(数据段) ED=1 段向下扩展(堆栈段)

W=0 数据不能被写入 W=1 数据可以被写入

E=1 描述符描述代码段

C=0 忽视描述符的优先级 C=1 遵循描述符的优先级

R=0 代码段不能被读 R=1 代码段可以被读

A=0 段未被访问 A=1 段已经被访问

??保护方式操作期间段寄存器的内容:

有表格

??选择子从8192个全局或局部描述符表,为了访问和指定这些表的地址,微处理器中包含了一些程序不可见寄存器。在保护方式下,这些寄存器控制着微处理器。

??在保护方式下,每个段寄存器都含有一个程序不可见区域,通常称为告诉缓冲器。每当段寄存器中的内容改变时,基地址、界限和访问权限就装入段寄存器中的不可见区域。这就允许微处理器重复访问一个段时,不必每次都去查询段描述符表。

有表格

??全局描述符表的基地址和界限包含爱GDTR(全局描述符表寄存器)中。全局描述符表的最大长度为64K,因此描述符表的界限为16位。要使微处理器工作与保护方式,全局描述表的基地址和界限要装入GDTR。

有表格

??而局部描述符表的位置是从全局描述符表中选择。为了寻址局部描述符表,必须建立一个全局描述符。为了访问局部描述符表,必须将选择子装入LDTR(局部描述符表寄存器),如同选择子装入段寄存器一样。这个选择子访问全局描述符表,并且将局部描述符表的基地址、界限和访问权限装入LDTR的告诉缓冲存储区。

有表格

??分页机制式存储管理机制的第二部分。分页机制在段机制之后进行操作,以完成虚拟地址到物理地址的转换。段机制把虚拟地址转换为线性地址,分页机制进一步把线性地址转换为物理地址。

??分页机制由微处理器中控制寄存器的内容控制。分页机制由CRO中的PG位启用。若PG=1,启用分页机制。PG=0,紧用分页机制,直接把段机制生成的线性地址当作物理地址。

CR1 保留未用

CR2 中存放出现页故障时的线性地址

CR3 中的PCD和PWT位控制微处理器PCD和PWT引脚的操作。

如果PCD置位,则PCD引脚在非分页总线周期变为逻辑1,这

就允许外部硬件控制二级高速缓冲存储器。PWT位也在非分

页周期出现在PWT引脚上,用于控制写直达系统中的高速缓

冲存储器。CR3还包含页目录基地址(CR3的高10位),用于

定位页转换部件的页目录。这个基地址将页目录定位于任何

以4KB为边界的存储器中。

??由软件生成的线性地址分为三部分,分别用于寻址页目录项、页表项和页偏移地址。

线性地址: 有表格

??页目录表存储在一个4k字节的页中。页目录表共有1024个表项,每个页目录表项为4字节长,并指向一个页表。线性地址的高10位用量产生对页目录表的索引,由索引得到的表项重,指定并选择了1024个4字节的表项,每个表项用以选择对应的物理页。

??页目录和页表项:

有表格

??页目录和页表项高20位包含物理地址的高20位,而低12位包含页的属性。

有表格

??P 存在位,该位表示表项对地址转换有效(P=1)或无效(P=0)。在页转换期间,遇到无效表项,都会产生异常。若P=0,表项中的其余各位80386不对其做解释,可供软件使用。事实上,Linux在页面交换时就采用这种方法。当一个页面在内存中时,页面表中的表项的P位为,表示页面在内存中,而其余各位表示页面的各种属性。当一个页面被交换到了磁盘上,则相应的表项不再指向一个物理页面,而变成了一个磁盘页面,指示这个页面的去向。由于此时最低位为0,表示页面不再内存中,所以微处理器中的MMU单元对其各位都忽略不顾,而Linux内核中,就用它来唯一的确定一个页面在磁盘上的位置,包括在哪个文件或设备,以及页面在此文件汇中的位置。

??R/M 该/写位。若该位为1,对页表指定的页可进行读、写或执行;若该位为0,该页可读或执行,但不能对该页进行写操作。然而读写位并不总起作用。但微处理器在超级特权级之一(0、1或2级)执行时,R/M位被忽略。在目录表项中的R/M位,应用于该目录表项所映射的所有页。

??U/S 用户/系统位。若该委为1,页表指定的页可由在任何特权级下执行的程序访问;若该位为0,则该页只能在超级特权级执行阿程序访问。在目录表项中的U/S位,应用于该目录表项映射的所有各页。

??PMT 写直达位。控制用写直达或写回策略应用于页表或页面缓存管理。若该位为1,页表或页面采用写直达的缓存策略;若该位为0,采用写回策略。

??PCD 禁用高速缓冲位。若该位为1,页表和页面不用高速缓存;若该位为0,则可用高速缓存。当CRO中的CD位(Cache Disable)被置位,微处理器将忽略PCD位。

??A 访问位。若该位为1,表明指向的页表和页面已经被访问过(读或写);反之,指向的页表和页面未被访问。

??D 表明该页是否被写过。内存管理机制把某页调入物理内存时,将该位复位;当微处理器对其有写操作时,该位将会被置位。

??AVL 供软件使用。

??线性地址最低的12位和从页表项中的物理地址(高20位)形成了最后的物理地址。

??2 保护方式下的中断

??保护方式使用一组存储在中断描述符表(IDT,interrupt descriptor table)中的256个中断描述符取代实方式下的中断向量。中断描述符表为256*8(2K)字节长,每个描述符长8字节。中断描述符表由中断描述符表地址寄存器(IDTR)定位于系统中任一存储单元。IDTR长48位,其中32位的基地址规定IDT的基地址,16位的界限规定IDT的段界限。由于80386只支持最多256个中断/异常,所以IDT表最大长度是2K,以字节单位的段界限为7FFH。

??描述符项又称为“门”,意思是当中断发生时必须通过这些门,才能进入相应的服务程序。但是,这样的门并不是光为中断而设的,只要想切换CPU的运行状态,即其优先级别,例如从用户的3级进入系统的0级,就都要通过一道门。而从用户态进入系统态的途径也不只限于中断(或异常,或陷阱),还可以通过子程序调用指令CALL和转移指令JMP来达到目的。

??按不同的用途和目的,CPU一共有四种门,即任务门(task gate)、中断门(interrupt gate)、陷阱门(trap gate)和调用门(call gate)。除任务门外,其他三种门的结构基本相同,不过调用门

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有