《自己动手写操作系统》心得

 

不知道是从哪里来的兴趣想起自己了解一下操作系统的具体实现来了,实话实说,之前也学过操作系统,只不过学校的课程跟我完全不是一个风格。理论一大堆,我知道那是在讲什么,操作系统嘛当然^^。太深刻了!就像跟一个盲人描述一头象:象是动物,长鼻子、大耳朵、四只腿哦,原来那就是大象啊!?

别自欺欺人了,如果你真是一个‘盲人’,OK没关系!管它是什么呢,有个印象就不错了。当然这取决于你想深究到的层次,还有就是你的风格。

对于我来说更想倾向于实践主义而非理论主义,但我也相信无论你适合哪种主义,It’s all right!就像LinusEric,前者的Linux内核正在撼动着微软的地位,后者的开源思想以及理论巨著《大教堂与集市》(等)也是影响着一大批的牛人!说到这里就不得不提提GNU的创始人Richard ,个人感觉‘教父‘这个称呼甚是恰当!不仅是炒了MIT,最重要的是它的Free SoftwareGNU’S NOT UNIX,呵呵,嬉皮的定义手法!他们重写了UNIX下的Program,我想这不仅只是版权的问题,GNU践行着自己的理想,传播着自由的意识!这可不是崇拜,每个人都有自己的理想,没有必要崇拜什么!

Okay,还是回归正题吧,回来写写心得吧,呵呵,很不错的一本书!这可不是做广告哦,毕竟作者跟我没有利益关系嘛。之所以说不错是因为这确实符合我的风格,一点一点的让你有成就感,一点一点的把你引向操作系统的大门!其实这本书是写了一个很小很小的内核!就像Linux内核一样,只是还没有那么高级。按照Richard的说法,内核只是操作系统的一部分,当年他们规划GNU的时候也是做过内核的设计,只不过他们规划的系统很复杂,听他的描述,应该是一个微内核,各个模块彼此间异步传信,完成不同的功能,由于没有很好的调试手段,BUG很难定位,后来发现了Linux内核,这也正是GNU缺少的了,Free的世界就是自由,于是直接拿了Linux做内核,这也导致以后大家都说是Linux系统而非GNU系统,其实严格来讲Linux有很多种发行版本,GNU/Linux只是其中一种!RedHatDebianUbuntu…听说最近网上又有了GreenHat国产的Linux系统,不知道是不是对RedHat的恶搞。我想了解这一点还是有必要的,操作系统不只是内核提供的内存管理、进程管理、设备管理如果这样那它只是一个内核而已,内核提供了其它程序运行的环境,为它们分配内存,执行相应的处理机分配算法、进程调度算法以及管理相应的硬件设备。然而除此之外我们还需要比如CompilerDebugerEditor等等等等。呵呵,现在我们还是不讨论什么是操作系统了吧,就让我们暂且认为内核就是一个操作系统吧,毕竟那太复杂

《自己动手写操作体统》的一个优点就是在不断给你鼓励,而且把复杂的问题简单化抽取最本质的东西拿给你看,用作者的话讲就是慢慢的把你引到冰山的脚下!

下边就针对这本书具体内容写一下自己的理解吧!

之一:寻址

不管是操作系统还是普通程序,首先要解决的就是一个寻址的问题!只有知道了地址,CPU才能知道到哪里找它想要的东西,如指令、数据。其实,书中很大一部分就是在解决这个问题。8086的寻址能力是1M386变成了4G,相应的编程方式由实模式变成了保护模式,所谓的保护模式书中作者有很多总结,有兴趣的还是自己看的好,实模式下采用的是 :偏移址,而保护模式下则不再是这么简单,当然也并不复杂并因此引出了相应的概念,GDTLDTIDT…其实这一切都是因为IntelCPU的改进,在386之后的CPU中增加了GDT寄存器、LDT寄存器、IDT寄存器、CR0CR3寄存器、TSS寄存器(这里只列出了书中介绍的,实际情况远远不止这些)那么它的寻址方式最简单的情况下需要以下四步:

GDTR找到GDT(全局描述符表)

由加载到段寄存器(CS DS ES SS GS)中的选择子找到相应段描述符号在GDT中的偏移,实际上不考虑选择子第三位的话他就是一个偏移

然后在由找到的段描述符中段基址就找到了相应的段

再由指定的偏移就可以定位(寻址)到相应的内容

一点说明:描述符中段基址是32位(4G),它不再是段(16)<<4+偏移,而是GDTà段描述符à段基址(32)à段基址+偏移(32),这样做的目的是扩大寻址范围,而并没有体现保护模式,不过这也是第一遇到保护模式地方,那就是在描述符、选择子上做的文章了,实际上在书中描述符是通过一个汇编宏实现的,其中有一个字段是DPL,而选择子中低2位存放的是RPL,而选择子在被加载到CS中时,低2位存放的是CPLCPU在通过比较相应段的这三个权限就可以起到相应的保护规则具体是个怎么规则还是看书吧,呵呵

当然也不是说你说它是保护模式就是保护模式,我们要经过相应的步骤才能进入保护模式:准备GDTà加载GDTRà打开A20地址线àCR0PE(保护模式)位à跳转到保护模式(由16位的实模式下代码跳转到保护模式下的代码),要返回的话还要执行相应的动作。

实际上这样的寻址是在未开启页机制的情况下,它得到的是一个线性地址,在开启了页式存储机制后(CR0PG)又变成了如下机制(线性地址是由上边得到的)

 

下的LDTIDT、调用门,这些都是以此为基础,只是在相应的调用权限规则上做了一些规定,来实现‘保护’的机制,比如说特权级转移、比如说堆栈切换,而且个人感觉保护模式下的寻址就是一个间接寻址的‘完美’应用,如果给我一张现在的主流硬盘做目录就可以编址宇宙中的每一个分子呵呵,开玩笑,没算过!

好了,先写到这里,以后在补充吧!^^

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值