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

原创 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的格式将其重新放置正确。最后将控制权交给内核。

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

至此,结束

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

《自己动手写操作系统》 第一章总结

《自己动手写操作系统》 第一章总结俗话说万事开头难,为了督促自己能在假期好好学习,打算认真做一下学习笔记。先记录一下在学习过程中遇到的问题和解决方案:自己动手写操作系统 第一章总结 书籍和工具下载地址...

自己动手写操作系统 第四章总结

自己动手写操作系统 第四章总结 本章主要内容是建立一个功能比较完善的引导扇区也称为 boot sector 首先回顾一下一个操作系统从开机到运行的过程 1.引...

自己动手写操作系统一书的总结

Orange 总结Orange分为Boot部分,load部分和内核kernel部分:具体内存分布如下图所示:系统启动过程:bios加载boot部分(512byte)于内存7c00h处并跳转到7c00h...

《自己动手写一个操作系统》个人实践1

根据《自己动手写操作系统》一书个人的实践,用ubuntu14制作 boot.bin 开始步骤: 注意: 如果在安装ubuntu14系统过程中没有设置root密码,安装完后 在ubuntu14中通过命令...

《自己动手写操作系统》多进程代码分析

主要的代码有三部分:(在chapter6\k\kernel中)   (1)kernel.asm中时钟中断处理的部分:    ; 中断和异常 -- 硬件中断 ; ---------...

《自己动手写操作系统》第三章 pmtest9源码解析——中断处理程序

本节,我们将学习现代操作系统的一个重要的特点——中断处理机制。同样,中断处理也是软硬件协同完成的,其中硬件部分:8259A负责可编程中断控制器,通过读写端口,实现中断信号和中断号的绑定等工作;CPU通...

全面剖析《自己动手写操作系统》的pmtest1.asm

段机制轻松体验 内存寻址: 实模式下的内存寻址: 让我们首先来回顾实模式下的寻址方式 段首地址×16+偏移量 = 物理地址 为什么要×16?因为在8086CPU中,地址线是20位,...

自己动手写操作系统

转自:http://blog.csdn.net/littlehedgehog/article/details/2250362  磨刀不误砍柴工 刺猬@http://blog.csdn.net/...

开篇:学习 《自己动手写操作系统 》于渊

操作系统启动流程:开电源->加电自检->寻找启动盘->若为软盘则检查0面0磁道0扇区,并寻找是否以0xAA55结束,若是,则BIOS认为是一个引导扇区。此段代码应少于512字节,启动跳转到该段代码后,...

自己动手写操作系统

《自己动手写操作系统》读后感                http://blog.csdn.net/zgh1988/article/det...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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