《自己动手写操作系统》总结(上)

原创 2007年09月23日 20:28:00

 东西比较多,打算分两次来写。

写操作系统有许多的限制,比如要用汇编,要直接操纵硬件等(BIOS中断算是唯一可以小小依靠一下的功能调用,还不能在保护模式下运用)。在使用C语言之前需要为其准备相应的环境,到现在我还没搞清楚到底需要准备些什么环境(书上也没怎么说,或许我没看到)等我知道了,我立刻把它更新进来,或者哪位大侠知道,也望告知 谢谢拉。

计算机通电后,BIOS运行加电自检程序(POST),然后初始化硬件和中断向量表(就是将来我们可以在实模式下调用的函数表),还有BIOS参数(主要是放入内存指定位置,0x400h处)。接着运行基本自引导加载程序(先用loader_1命名,后面还有好几个加载程序)。

loader_1先按照BIOS参数中的启动顺序依次寻找启动盘,如果从软盘启动,则检查软盘的0面0磁道1扇区(硬盘启动现在不说,以后和硬盘结构一起介绍),如果它的最后两个字节为0xAA55,则认定为合法的引导扇区,并把第一扇区的内容转载到内存0000:7c00处,并将控制权交给它(即跳到0000:7c00处运行)。

我们的工作从此开始。我们要按它的要求写一个引导扇区(boot),它的作用就是为将来OS内核的运行准备环境。这些环境要求包括进入保护模式,启动分页机。保护模式的内容非常庞杂,算是真正进入内核前最艰难的部分。

进入保护模式需要设置GDT,GDTR,选择子,关中断,开启A20,最后才跳转进入保护模式。保护模式和实模式主要的区别在寻址,同一个变量,在实模式下的LABEL和在保护模式下的会有不同,这需要了解内存的存放情况才能决定。

还有另外一个重点是特权级。有三个特权级标志CPL,当前特权级,是被存在当前代码段寄存器CS和SS的0、1位上。DPL是段或门的特权级,被存储在段或门的描述符中。RPL则是放在段选择子的0、1位。

特权级的检查是DPL将与CPL、RPL分别进行比较,并会对不同的段或门类型区别对待。感觉很复杂,不多说了,在将保护模式的文档中都会有详细介绍。

看起来要做的工作很多,很难在512字节的范围内完成,所以决定把这些工作放在一个loader.bin中完成,而boot的工作则是把loader.bin放入内存,并交给它运行。这就牵涉到了软盘的读写,通过BIOS调用完成(在实模式下)。

因为将来的内核要用C来写,并且用elf格式编译连接生成(这应该算是一个用C语言的条件,详细的还不清楚……),所以需要了解ELF文件的格式。而loader.bin的还有个任务就是把内核kernal.bin读入内存(同loader.bin),然后按照elf的格式将其重新放置正确。最后将控制权交给内核。

接下来就是内核的工作了,我们下次再说~辛苦啊,那么多内容……

至此,结束

自己动手写操作系统(五)

这里开始就进入了core的启动流程(类似于linux的kernel)。core的入口函数是start_core,如何定义如何函数呢?我们这里通过编译指令就可以了。参看下面的配置文件: ENTRY (...
  • wang_sun_1983
  • wang_sun_1983
  • 2017年07月16日 21:37
  • 326

《自己动手写操作系统》—— 工作环境搭建

最近在看《自己动手写操作系统》 于渊著,看第一页头就蒙了,书上说要准备一张空白软盘,都2010年了,上哪去找软盘啊,自从接触计算机以来我还没见过软盘呢,估计要到科技博物馆才找得到吧,呵呵。其实在第二章...
  • feixiaku
  • feixiaku
  • 2014年07月14日 00:32
  • 3041

自己动手写操作系统(一)

从去年就想好好的读一下这本书,跟着书上做一下,但是给耽搁了,现在就好好的开始探索这么书吧! 虽然我很想在这里吹一段这本书有多么的厉害,但是!我第一章都没有看完,吹不了!!!等我读的个七七八八再回来吹吧...
  • YuDale
  • YuDale
  • 2017年03月24日 21:11
  • 649

想下载自己动手写操作系统PDF 于渊 70M 超清晰版 part 1 of 5 的朋友注意啦

原链接年久失效,请转到115网盘下载完整PDF书,http://115.com/file/dp7nifwi
  • goshja
  • goshja
  • 2012年03月13日 22:58
  • 2343

《自己动手写操作系统》源码解析——第三章pmtest5.asm

在pmtest4中,我们已经看到,对于非一致性代码,如何从低特权级转移向高特权级。但是我们该怎样从高特权级别,转移到低特权级别呢?一开始我们在实模式,是ring 0,我们怎样从ring 0到ring3...
  • trochiluses
  • trochiluses
  • 2014年02月27日 17:59
  • 1481

读《自己动手写操作系统》(于渊著)第一节

最近开始看《自己动手写操作系统》,虽然很早以前就读过一点点,但一直没有机会动手实践。本着光说不练假把式的原则, 今天动手实践了开头的一部分。(说得这么正经其实你就是看了一点点吧!囧)废话不多说,在这里...
  • ecjtusbs
  • ecjtusbs
  • 2016年08月21日 20:12
  • 1111

全面剖析《自己动手写操作系统》第六章---进程

转载请标注:http://blog.csdn.net/zgh1988/article/details/7371754 在一开始学习进程的时候,我们大概每个人都会遇到过这样的问题,下面就让我们带着这些...
  • zgh1988
  • zgh1988
  • 2012年03月20日 10:22
  • 2773

全面剖析《自己动手写操作系统》第五章---makefile文件

转载请标注:  全面剖析《自己动手写操作系统》第五章---makefile文件   http://blog.csdn.net/zgh1988/article/details/7338380 1、...
  • zgh1988
  • zgh1988
  • 2012年03月09日 22:20
  • 3490

《自己动手写操作系统》环境配置

最近一直在用windows,为了配置环境又装了Xp。环境配置:Virtual PC 5.2+MSodc6.22工具:windows下的NASM(nasm-0.99.04-win)和随书光盘中一些工具说...
  • zdwzzu2006
  • zdwzzu2006
  • 2009年03月24日 22:22
  • 1421

自己动手写操作系统——开发环境搭建

本文参考于渊老师写的《Orange S:一个操作系统的实现》一书。 参考文章: http://www.linuxidc.com/Linux/2016-10/135905.htm http://b...
  • zjdnwpu
  • zjdnwpu
  • 2017年04月16日 11:25
  • 628
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《自己动手写操作系统》总结(上)
举报原因:
原因补充:

(最多只允许输入30个字)