操作系统学习手册,系统操作手册


操作系统是计算机相关专业本科课程中最重要的课程!

操作系统是计算机相关专业本科课程中最重要的课程!

操作系统是计算机相关专业本科课程中最重要的课程!

重要的事情说三遍。大学读了两年半了,学习了3,4门硬件课程。我发现在我的大学中,本科硬件课程总体偏理论,旨在构建计算机硬件理论体系。之前汇编,组成原理和之后的体系结构,其实都是一轮一轮的在学生脑海中构建计算机硬件体系结构。作为硬件课程的核心课程,操作系统的重要性不言而喻。

接下来开始介绍相关信息。

LDT,即local descriptor table,局部解释器表,由ldtr这个寄存器找到。ldtr存放的是selector值,selector就是段选择子,用来存放段信息。段选择子是一个16位寄存器,它各位的含义如下图:

其中RPL是请求特权级,当访问一个段时,处理器要检查RPL和CPL(放在cs的位0和位1中,用来表示当前代码的特权级),即使程序有足够的特权级(CPL)来访问一个段,但如果RPL(如放在ds中,表示请求数据段)的特权级不足,则仍然不能访问,即如果RPL的数值大于CPL(数值越大,权限越小),则用RPL的值覆盖CPL的值。而段选择子中的TI是表指示标记,如果TI=0,则表示段描述符(段的详细信息)在GDT(全局描述符表)中,即去GDT中去查;而TI=1,则去LDT(局部描述符表)中去查。

在32位处理器下,逻辑地址是我们获得的第一个地址。那么什么是逻辑地址呢?

逻辑地址:intel 8086实模式下,逻辑地址就是物理地址。什么是实模式?

实模式:intel8086采取按1M内存索引的方式。因此,intel8086总线一共20位。在此模式下,段基址左移1位(乘16)之后加上段偏移,再模1M,就得到物理地址。在实模式下,段选择子叫“段选择器”,在保护模式下,段选择器叫“段选择子”

回到LDT。逻辑地址高13位作为索引,下一位作为LDT 或者GDT选择符。逻辑地址高16位的最后两位就是优先级策略,一共4个等级。LDT和GDT的结构一样,每项占8个字节。

接下来看看段描述符里面放置的是什么内容:

可以看到,段描述符是一个64位二进制的数,存放了段基址和段限长等重要的数据。其中位P(Present)是段是否存在的标记;位S用来表示是系统段描述符(S=0)还是代码或数据段描述符(S=1);四位TYPE用来表示段的类型,如数据段、代码段、可读、可写等;DPL是段的权限,和CPL、RPL对应使用;位G是粒度,G=0表示段限长以位为单位,G=1表示段限长以4KB为单位;其他内容就不详细解释了。

假设我们找到的段描述符为:0x00003fff 0x10c0f300,我们来提取重要信息:

首先,第一个0000位基地址高16位。10c0f300中的高二和低二组合:1000,连接上刚才的0000,即为:10000000,这就是我们找到的基地址。加上段偏移,即可得到线性地址。

从线性地址到物理地址,我们需要用到分页管理方式。假如不存在分页管理方式,那么线性地址就是物理地址。首先,我们辛辛苦苦找到的32位的线性地址得分成10+10+12的模式。前十位作为页目录号,用来在页目录表中找到页表值。如下图:

 

页目录表的位置由CR3寄存器指引。页目录表和页表都是10位,寻址范围为1k,由于每个地址存放4B(32位)的地址,因此页目录表加上页表总共占内存8k。页目录表找到页表之后,中间十位在页表中找到物理地址基址,加上最后的12位,就得到 了内存条上看得见摸得着的物理地址。

页目录表和页表每条目录都是32位,其中前20位存放的是地址,而后12位存放其他属性,我们需要的是前20位。

我们按照以上方法,就能逐步根据逻辑地址找到物理地址。最后,什么是虚拟地址呢?虚拟地址是一种扩展内存的策略。打个比方,我要从哈尔滨去沈阳,我其实没必要铺上这将近600公里的铁路。起始,我只需要10公里的铁轨就行----每行驶完10公里,就把末端的铁轨拆下来铺到火车前面即可。当然,这个过程需要很快。计算机中就可以执行这么快,因此计算机可以拆后轨铺前轨。这就是虚拟地址的原理。

相关内容