文档详情

《操作系统经典知识点剖析》.pdf

发布:2016-03-19约9.4万字共109页下载文档
文本预览下载声明
操作系统引导探究 前言 本篇文章打算从编写操作系统的角度出发,谈谈计算机怎样从加电开始,从无到有,将 操作系统运行起来,在其中将尽量详尽的描述从实模式到保护模式的过渡,为希望开发操作 系统的朋友留下一点资料,也为自己留下一点心得。本篇文章将以开发中的 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 只读 第一个扇区。 因此,在我们编写引导程序的时候,我们也必须注意上面的三点原则,符合上面三点原则的 程序都可以看作是引导程序,至少 BIOS 是这样认为的,虽然它也许可能是你随意写的一段 并没有什么实际意义的代码。因为 BIOS 一次只读一个扇区也即 512 字节的数据到内存中, 这显然是不够的,现在操作系统都比较庞大, 因此我们必须在引导扇区里将存在磁盘上的 操作系统的核心部份读进内存,然后再跳转到操作系统的核心部分去执行。 三、通过 BIOS 读磁盘扇区 从上面的描述我们可以知道,引导程序需要将存在于磁盘上的操作系统读入内存,因此 这里我们不得不再讲一讲,怎样不通过操作系统(因为现在还没有操作系统)去读磁盘磁区。 一般说来这有两种方法可以实现,一种是直接读写磁盘的 I/O 端口,一种是通过 BIOS 中断 实现。前一种方法是最低层的方法(后一种方法也是在它的基础上实现的) ,具有极高的 灵活性,可以将磁盘上的内容读到内存中的任意地方,但编程复杂。第二种方法是前一种方 法稍微高层一点的实现,牺牲了一点灵活性,比如,它不能把磁盘上的内容读到 0x0000:0x0000 ~ 0x0000:0x03FF 处。为什么不能读到此处呢?这里我们将不得不描述一下 CPU 在加电后的中断处理机制。 3.1 BIOS 的中断处理 中断是什么,相信学过计算机的人都不会陌生,如果你对中断一点都不了解建议你翻看 一下《计算机组成原理》 (高等教育出版社唐朔飞) ,上面有非常详尽的描述,而一般 的汇编教材也多有谈及,因此这里只打算讲讲 BIOS 对中断的处理。 由上图我们可以清楚的看到,当由中断信号产生时,中断信号通过“中断地址形成部件”产生 一个中断向量地址,此向量地址其实就是指向一个实际内存地址的指针,而这个实际内存地 址中往往按排一条跳转指令(jmp )跳转到实际处理此中断的中断服务程序中去执行。这一
显示全部
相似文档