从零开始研究OS启动过程.doc

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
从零开始研究OS启动过程课案

前言 ??? 本篇文章并不旨在完整的讨论一个多引导系统程序怎样去引导不同的操作系统,而只打算从编写操作系统的角度出发,谈谈计算机怎样从加电开始,从无到有,将操作系统运行起来,在其中将尽量详尽的描述从实模式到保护模式的过渡,目的只在于能将所学与广大爱好者更享,为希望开发操作系统的朋友留下一点资料,也为自己留下一点心得。本篇文章将以开发中的 pyos 系统引导程序为例,pyos 是一个正在开发中的实验型操作系统,它并不打算以目前任何一种运行中的操作系统为模式,而只想通过自己编写一个从头到尾的操作系统来学习知识,积累技术,如果你有兴趣,非常欢迎你的加入!本篇纯属学习过程中的一点心得体会,如果你发现其中有错误或不当之处,非常希望你来信指教。 一、计算机从加电开始都做了什么? ??? 当机算机的电源键被按下时,同这个键相联的电信号线就会送出一个电信号给主板,主板将此电信号传给供电系统,供电系统开始工作,为整个系统供电,并送出一个电信号给BIOS,通知 BIOS 供电系统已经准备完毕。随后 BIOS启动一个程序,进行主机自检,主机 ??? 自检的主要工作是确保系统的每一个部分都得到了电源支持, 内存储器、 主板上的其它芯片、键盘、鼠标、磁盘控制器及一些 I/O 端口正常可用,此后,自检程序将控制权还给 BIOS。接下来 BIOS 读取 BIOS 设置,得到引导驱动器的顺序,然后依次检查,直到找到可以用来引导的驱动器(或说可以用来引导的磁盘,包括软盘、硬盘、光盘等) ,然后调用这个驱动器上磁盘的引导扇区进行引导。BIOS 是怎么知道或说分辨哪一个磁盘可以用来引导的呢? 二、认识引导程序 ??? BIOS 将所检查磁盘的第一个扇区(512B)载入内存,放在 0x0000:0x7c00处(见图三) ,如果个扇区的最后两个字节是“55 AA” ,那么这就是一个引导扇区,这个磁盘也就是一块可引导盘。 通常这个大小为 512B 的程序就称为引导程序 (boot) 。 如果最后两个字节不是 “55AA” ,那么 BIOS 就检查下一个磁盘驱动器。通过上面的表述我可可以总结出如下三点引导程序所具有的特点: ??? 1它的大小是 512B,不能多一字节也不能少一字节,因为 BIOS 只读 512B 到内存中去。 ??? 2它的结尾两字节必须是“55 AA” ,这是引导扇区的标志。 ??? 3它总是放在磁盘的第一个扇区上(0 磁头,0 磁道,1 扇区) ,因为 BIOS 只读第一个扇区。 3.2 系统的内存安排(1M) 要回答上面的两个问题,我们需要看看系统中内存是怎么安排的。在 CPU 被加点的时候,最初的 1M 的内存,是由 BIOS 为我们安排好了的,每一字节都有特殊的用处。 由上图我们现在可以很方便的问答上面提出的两个问题。由于 0x00000~0x003FF 是中断向量表所在,因此不能将磁盘从的操作系统读到此处,因为这样会覆盖中断向量表,就无法再通过 BIOS 中断读取磁盘内容了。你也许会说:我是先调用中断,再读的啊。但事实在BIOS 在读的过程中自己会多次调用其它中断辅助完成。 3.3 利用 BIOS 13 号中断读取磁盘扇区 有了前面的描述作为基础,下面我们可以正式描述怎样通过 BIOS 中断读取磁盘扇区了。要读取磁盘扇区,我们需要使用 BIOS 的 13 号中断,13 号中断会将几个寄存器的值作为其参数,因此,我们在调用 13 号中断的过程中需要首先设置寄存器。那么当怎样设置寄存器呢?会用到哪些寄存器呢?请往下看: AH寄存器:存放功能号,为 2 的时候,表示使用读磁盘功能 DL 寄存器:存驱动器号,表示欲读哪一个驱动器 CH寄存器:存磁头号,表示欲读哪一个磁头 CL 寄存器:存扇区号,表示欲读的启始扇区 AL 寄存器 :存计数值,表示欲读入的扇区数量 在设置了这几个寄存器后,我们就可以使用 int 13 这条指令调用 BIOS 13 号中断读取指定的磁盘扇区,它将磁盘扇区读入 ES:BX 处,因此,在调用它之前,我们实际上还需要设置 ES与 BX寄存器,以指出数据在内存中存放的位置。 四、保护模式下段模式内存地址的访问 写程序离不开对内存的访问,然而在保护模式下内存的访问与在实模式下内存的访问完全不同,这里我们将详细描述一下保护模式下内存的访问方法。当然,这里并不打算完整的介绍保护模式下所有的内存访问方法与机制, 只介绍从实模式转到保护模式下所需要进行的转换,完整的内存访问请你最好参见《Intel用户手册》 ,当然,随着 pyos 的实验进行,我也会在后面的实验报告与心得体会中渐渐描述,现在不描述主要原因是我还为通过 pyos 进行实验, 对与没经过实验验证的东西, 我并不打算也不敢妄下结论, 因为在前言中已然说过,这篇文章只是我的一些心

您可能关注的文档

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档