我写操作系统的一点经验【原创】

来源:互联网 发布:ntp服务器搭建软件 编辑:程序博客网 时间:2024/05/19 13:23

我的项目代码: http://code.google.com/p/maray/

这两天我在写计划,完成后在此博客公布。

发信人: raywill (晓楚), 信区: Linux
标  题: 我写操作系统的一点经验
发信站: 武汉白云黄鹤站 (2007年09月14日22:39:30 星期五)

转瞬2年!Linux版上又见“有人写操作系统吗?”这样的帖子。2年前,有个叫raywill的
小子不也是发过这样的帖子吗?那个时候,raywill开始了内核之旅。在kernel旅途上一方
面长了见识经验,一方面认识了很多朋友,难得的很。长江后浪推前浪,世上新人赶旧人
,前两日听TmacD说Linux版上有人开始写内核了,那叫一个高兴!HUSTER们真不错!

我在OS方面实际上也都算不上入门,但多少算是磕磕碰碰过来的,有些经验,和新人们交
流下,也和所有OS爱好者交流下。

从进大学军训开始我就开始自觉不自觉地了解OS这一块了,无意淘到的第一本OS书是那本
著名的《Operating System Design and Implementation》,虽然是e文,但语言很浅显,
讲得内容也很条理清晰,断断续续基本都过了下,书后附的Minix源代码也在某些清晨爬在
床上交叉读了些,零碎的很,只当时兴趣爱好来读,没什么明确目的,所以效果至多也只
能算是潜移默化了我(天知道我“化”了没有),对Coding和Arch没有很大的提高。总之
一个:好玩而已!不过最遗憾的是,读Minix,我竟然还没明白微内核里头到底是怎么运作
的,不求甚解的害啊!大家千万不要效仿。读书,读就读懂,一知半解不适合阅读科学类
书籍。

还是在大一,我去听了操作系统(阳富民老师)和组成原理(高建生老师)的课。操作系
统感觉总是在念幻灯片,不好玩。而高老师的课简直就是太棒了!深入浅出,游刃有余。
几百人的大教室,座无虚席,一门工科课程,能做到这个份上,恐怕没有几个老师吧。后
来到了大三,我还想听高老师的课,可惜换成了小教室,更找不到座位了,终成遗憾。如
果你真的对OS感兴趣,操作系统,组成原理,还有接口技术,建议先自修或者找个课堂旁
听,益处多多,毋庸赘言。

大一暑假开始动手写Bootloader。没有前人引导,自己四处乱摸,大约半月,终于启动起
来了:不仅在虚拟机上,而且在真实的PC上!那时的激动心情这辈子也就体会过三两次吧

写Loader首先是看(抄!)别人的代码,很多都是涉及到了FAT文件系统,所以花了很多时
间去了解FAT,由于没系统学过,没有fat的概念,摸了很久,也没摸出个名堂。后来干脆
来简单的,什么fat都不问,直接在物理块上定位文件。初级阶段,这样省事!

第一个启动软盘我至今保存。

这个暑假还花了很多时间上在摸索建立编译和执行环境上,Google了个底儿朝天,最后使
用DJGPP(DOS GCC)+NASM+BOCHS作为平台。现在看来,这个平台还有很多改进的,比如,用
CYGWIN环境比DJGPP就要好得多。DJGPP上面貌似有些bug,很恼人。

那个暑假,刚买本本,没有网络,搜索信息只能去网吧,带个本子带支笔通宵,现在回想
起来,自己都感叹当初太Orz了。大一的暑假不像今年的暑假,整栋楼都空荡荡的,整个世
界都是自己的了,那感觉,很好!

到了大二,看了更多的书,兴致来了,就写写代码。这个时候完成了保护模式下的系统初
始化和中断处理这些比较关键的部分。开始用C来写代码了,很爽!
现在回想,大二的很多工作实际上都是在做CPU架构相关的初始化以及一些接口芯片的初始
化,都是些技术活,会了之后就感觉都没啥。比如CPU架构涉及到GDT,LDT,IDT,A20,T
SS等,中断涉及到8259芯片,时钟涉及到8253/8254,等等,以后还有DMA,IDE,SATA,P
CI等等,都是接口的干活。我当初没有意识到“接口”这样一个概念,上面那些东西都是
在其他学科的书上、网上零碎学习到的,所以走了很多弯路,浪费了很多时间。给点建议
:写Kernel之前确保你把《计算机接口技术》中的8053/8254部分,中断芯片部分,DMA部
分以及把80386架构搞清楚。接口部分可以先在DOS下做做实验,找对感觉,然后在写kern
el,事半功倍。

大三,生活变得复杂了。猛然发现,分数面前,我很渺小……开始节制自己,代码没怎么
弄了,不过后来还是忍不住在庞丽萍老师的操作系统课堂上把底层的内存

管理代码写出来了,最简单的那种,凑合可用。我还计划过把文件系统也弄个大概出来,
而且TmacD还帮忙把DMA读硬盘整出来了,后来还是由于时间重心的转移,放下了。
虽然没有写代码了,但在这一阶段,理论方面却有了很大的提高,组成、系统结构、接口
技术、网络这些课程的学习,让我对计算机有个比以前准确得多的把握。同时自己还看了
很多Linux相关的书籍,受益匪浅。这里不得不提到清华那本《数据结构》,里面很多不考
的算法都是与OS相关的,如Buddy System,内存管理,文件等章节,写的都很赞。写kern
el到后来,这些都是需要去面对的。有了数据结构里的这些知识,就可以站得高一些来看
那些具体实现,也就不至于迷失了。

大四,还是个未知数。如果能保研,kernel就可以继续了。额的神啊,保佑我吧~!
到那个时候,将一切重新来过:首先设计系统框架,划分单元,分步骤实现系统功能,至
少要做个多任务DOS等级的小kernel出来吧。另外,还要做好文档管理,把这个项目变活。


如果要折腾出什么有创意的东西,以后我还是把她变成一个USB启动的Player:插上U盘,
启动电脑,告别漫长的Windows启动过程,直接进入音乐播放界面,Play~!然后加入网络
歌曲功能,那样就比较nice了!


写内核,需要的是一分技术、二分热情、三分耐心。如果你决定写了,那就坚定地执行下
去。代码是用键盘敲出来的!
如果能有三两个志同道合、水平相当的人一起来做这件事,其乐趣其成绩必将更大。

路还很长,共勉之~Gogogo!

最后推荐几个资源:
《自己动手写操作系统》   -------------相见恨晚的一本书
 Intel手册,
Vol 3. System Programming Guide ------------- 可以让Intel免费邮寄书给你
 接口技术   -------------我们的口号是:不要再走弯路了!
 www.osdev.org   -------------最赞其论坛,其次是它的wiki。进阶必备!
 Books on Linux Kernel.
 


我的小kernel--Maray:
http://code.google.com/p/maray/


【*】
 

原创粉丝点击