手机版 | 登陆 | 注册 | 留言 | 设首页 | 加收藏
当前位置: 网站首页 > 音响设备技术 > 文章 当前位置: 音响设备技术 > 文章

小型操作系统开发

时间:2009-08-12    点击: 次    来源:本站原创    作者:佚名 - 小 + 大

 

小型操作系统开发

2007-02-05 10:01

1         学习目地:

查找资料,踏出毕业设计的第一步。

2         参考书目:

       《自己动手写操作系统》作者:于渊 出版社:电子工业出版社。下文中所提到的书除特别说明,都为这本《自己动手写操作系统》。

3         主要内容:

       在网上搜了不少关于开发操作系统的资料,这本由于渊写的《自己动手写操作系统》算是一本通俗易懂的,不防就先从这里入手,在弄清楚开发操作系统所需知识的同识,也许,可以给自己一点信心。

虽然这是我的毕业设计,但我选择“小型操作系统”这一题目更多的是出于自己的兴趣,所以学习过程是以实践为主,遇到问题再寻找解决的办法。

3.1      环境搭建

万事开头难,回想一个月前我刚刚学习LINUX内核知识,每一步都是那么的难走。首先是开发环境。

按书中所说,在硬件方面,一台计算机(有软驱),空白软盘。现在(2006-10-12)看看自己周围,想找一个有软驱的电脑还真是不容易,不过即然有虚拟光驱的存在,想找找虚拟软驱也不会有什么难的。vFloppy V1.5这就是一款虚拟软驱的软件。

软件,汇编编译器选择NASM,可在http://sourceforge.net/中搜索并下载到。其它工具在书附光盘中有提供,以后使用中再一点点学。

3.2      10分钟完成的操作系统”

-------------------------------------------

     org  07c00h                  告诉编译器程序加载到7c00

     mov ax, cs

     mov ds, ax

     mov es, ax

     call  DispStr                 调用显示字符串例程

     jmp  $                   无限循环

DispStr:

     mov ax, BootMessage

     mov bp, ax                   ; ES:BP = 串地址

     mov cx, 16                   ; CX = 串长度

     mov ax, 01301h            ; AH = 13,   AL = 01h

     mov bx, 000ch              页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)

     mov dl, 0

     int    10h                ; 10h 号中断

     ret

BootMessage:              db    "Hello,OS world!"

times    510-($-$$)      db    0     填充剩余空间,使生成的二进制代码恰好为512字节

dw       0xaa55                         结束标志

---------------------------------------------------------------

       也许自信心就是这么建立起来的:我用书中提供的一个名为FloppyWriter的工具把这段代码编译并拷贝到软盘(镜像)中,并通过虚拟软驱启动电脑。计算机没有像以往一样提示我插入系统启动盘,而是显示了红色的“Hello,OS world!”。我兴奋不已,于是重新回到了Windows下面,将这段代码改了一下:

       BootMessage:         db    "Solo is the best!"

哈哈,第一步走的很顺利,一个有我自己属名的计算机引导盘。虽然,它看上去还什么都做不了。

       我喜欢在激动的时候立刻冷静下来,这更能让我看清楚事实真像。继续读书中的文字,这样写着:“你可能还没有从刚刚的兴奋中走出来,可是我不得不告诉你,实际上,你刚刚所完成的并不是一个完整的OS,而仅仅是一个最最简单的引导扇区(Boot Sector)。”和我想像的一样,这一小段代码怎么可能是会是一个“操作系统”。我对引导扇区这个名词早有耳闻,可是它的内部究竟是怎样的。有了在实践中找出的问题,我对理论知识产生了兴趣。

3.3      计算机的启动过程

“计算机电源被打开时,它会先进行加电自检(post),然后寻找启动盘(或许就是我刚刚写的那个东西?),如果是从软盘启动,计算机就会检查软盘的00磁道1扇区,如果发现它以0xAA55结束,则BIOS认为这是一个引导扇区,也就是我们说的Boot Sector……

好了,一旦BIOS发现了Boot Sector,就会将这扇区的内容装载到内存的0000:7c00处,然后跳转到0000:7c00处将控制权彻底交给这段引导代码。由此开始,计算机就受我们所写的操作系统来控制了。”

刚刚运行代码时,我不明不白了改了一个字符串,不过现在回过头来对比看看代码,和上面这段文字,仿佛有很多地方都开使变得明朗起来,我已经迫不急代的想知道那段代码究竟做了什么。

3.4      代码解释

现在,我不得不承认我汇编没有好好学了,上面这段代码,在一个月前我是弄了好久

才看懂的。程序的主体是从第2行到第6行,通过三个mov指令初始化dses两个段寄存吕指向与cs相同的段,然后调用了DispStr子函数来显示一个字符串,最后通过jmp $进入无限循环。

       $:表示当前语句所在的地址

       $$:表示当前语句所在的段地址

最后还想说说这两句代码:

times      510-($-$$)      db    0

dw 0xaa55

“填充剩余空间,使生成的二进制代码恰好为512字节”为什么是512呢?因为BIOS加载的Boot Sector的大小固定为512字节,并且以511512两字节内容是否为AA55来判断引导扇区,所以,通过times   510-($-$$)      db    0填充0值,并设置511512两个字节的值为AA55。这样,便构造了一个引导扇区。

3.5      搭建虚拟环境

如果每次写完一段代码都要重启电脑,那开发操作系统的时间可大多浪费在重启电脑上了。选择一个虚拟机还是很有必要的。常用的虚拟机有VMwareVirtual PC。下图是上面写的引导代码在Virtual PC中的运行效果。

512字节毕竟还是太小了

很明显,一个引导扇区只有512字节,不管怎样的操作系统都不可能在这么小的空间内做什么大的文章。所以,在如何引导了计算机这一问题解决了之后,我们应该想想,怎样能够突破512字节的限制。

4         学习总结

这一次学习笔记将一个月来的准备,以及总分学习内容总结了一下,感觉写的还算蛮详细的。其中不少概念都不是当时就能想清楚的。不过随着接触的时间多了,一点点的都解开了。操作系统可大可以,大的如UnixWindowsLinux,需要装一张CD,甚至是DVD,小的如MenuetOSDOS,只要一张或几张软盘。不过怎么说,都少不了一个512K的引导扇区。

 
原文网址: http://hi.baidu.com/wmsnet/blog/item/8aa5152ae8eba9385243c1c9.html

上一篇:引导型病毒分析-第2章

下一篇:DEBUG百度百科

备案ICP编号  |   QQ:285250603  |  地址:湛江市  |  电话:15322199012  |  
Copyright © 2026 天人文章管理系统 版权所有,授权www.yajiupc.top使用 Powered by 55TR.COM