`
sabolasi
  • 浏览: 910279 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

我的项目代码: 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/


【*】

分享到:
评论

相关推荐

    自己动手写操作系统(含源代码).part2

    我想,虽然第二版有着这样那样的变化,但有一点没有变,那就是本书试图将我在编写自己操作系统的过程中的经验尽可能地告诉读者,同时尽可能将我当初的思路和编码过程呈现出来。很可能读者比我更聪明,有更好的解决...

    自己动手写操作系统(含源代码).part1

    我想,虽然第二版有着这样那样的变化,但有一点没有变,那就是本书试图将我在编写自己操作系统的过程中的经验尽可能地告诉读者,同时尽可能将我当初的思路和编码过程呈现出来。很可能读者比我更聪明,有更好的解决...

    固定资产管理系统完整版(原创j2se版)

    这是我毕业设计做得东西,虽然现在看起来比较原始了一点,但是是我自己曾经努力的成果,也是我从别的专业转向学习软件开发的第一个作品,体现了我学习的流程和经历。现在完全提供给大家下载,希望现在对刚开始学习...

    系统硬盘安装器NT6 HDD Installer v3.1.4

    nt6 hdd installer 主要针对没有光驱或者u盘安装系统的用户,当然如果有光驱我也会选择用 nt6 hdd installer 因为实在是方便,可以支持x86和x64的系统,可以格式化c盘装成纯净的系统,也可以装成多系统,安装windows...

    nt6_hdd_installer(win7 &win8;双系统硬盘安装软件)

    三、重启选择nt6 hdd Installer后自动进入安装界面,安装操作和光盘一样,装在其它分区上成双系统、格式化C盘安装成单系统随你所需 安装vista或2008(系统安装过程需命令提示符操作) 一、虚拟光驱加载ISO后复制或...

    dell t110二代服务器RAID模式下安装win2003终极有效方法.zip

    PowerEdge T110 II系列服务器采用的是S100 RAID卡,DELL官方不对该系列服务器提供WIN2003的技术支持,官方给出的回复是:要么装2008系统,要么不用RAID卡模式,对此表示一点小小鄙视,既然官方不给方法,就只有测试...

    YYjia安卓应用市场网站系统(YYjiacms) v3.1 正式版.rar

    YYjia应用市场网站系统页面设计精美,用户访问体验超级好,对搜索引擎收录友好,整站静态,访问速度快,后台傻瓜式操作,智能简单,是建立一个app应用下载站最佳程序。 全面覆盖多**台 基于PHP MYSQL开发的新型...

    YYjia安卓应用市场网站系统(YYjiaCMS) v3.2.zip

    YYjia应用市场网站系统页面设计精美,用户访问体验超级好,对搜索引擎收录友好,整站静态,访问速度快,后台傻瓜式操作,智能简单,是建立一个app应用下载站最佳程序。   全面覆盖多平台 基于PHP MYSQL开发的...

    CwWps创文地方门户管理系统 v1.7

    程序采用原创模板引挚解析,生成静态文件,动手能力强一点的,可自行制作模板,调用数据简单,程序自带免费模板一套供大家使用。程序免费提供给大家使用,程序版权归创文网络所有。如在使用中遇到问题或者发现BUG请...

    asp.net知识库

    我对J2EE和.NET的一点理解 难分难舍的DSO(一) InternalsVisibleToAttribute,友元程序集访问属性 Essential .NET 读书笔记 [第一部分] NET FrameWork的Collections支持 .NET的反射在软件设计上的应用 关于跨程序集...

    神笔马良强制码字软件2.0版-神笔马良软件唯一正版-进小黑屋写文字

    本软件为原创制作,文稿安全有保障,非网上流传的其他同类软件的破解! 软件更新记录 2013年3月26号,神笔马良强制码字软件推出 V2.0 更新版本,主要更新记录如下: 全新界面,结构全新优化重装上线。 编辑器...

    打造自己的ACER一键恢复系统不完全手册

    1、隐藏分区文件全部还原后大约是2G,请在分空间时加上系统镜像文件大小,建议加大一点。另:原始隐藏分区大小是12000MB,喜欢“原味”的就分这么大吧。 2、由于条件所致没有测试在其它不同型号电脑上的通用性,仅供...

    江南大学论文盲审规则.pdf

    虽然繁琐一点,但是最后出炉的论文,摇身一变,焕然一新,论文检测系统无法检测。多加参考书目,把脚注一通乱加,那就是双重保险了!  4.英译中,然后理顺句子。跨语言的论文测谎系统还没有研发出来。广泛查阅...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    一、Qt Creator 的安装和hello world 程序的编写(原创) 1.首先到Qt 的官方网站上下载Qt Creator,这里我们下载windows 版的。 下载地址:http://qt.nokia.com/downloads 如下图我们下载:Download Qt SDK for ...

    NT6 HDD Installer V3.1.4

    三、重启选择nt6 hdd Installer后自动进入安装界面,安装操作和光盘一样,装在其它分区上成双系统、格式化C盘安装成单系统随你所需 安装vista或2008(系统安装过程需命令提示符操作) 一、虚拟光驱加载ISO后复制或...

    创文地方门户管理系统CwWps最新官方版

    创文地方门户管理系统CwWps最新官方版,创文地方门户管理系统集 新闻资讯、分类信息、招聘求职、商家黄页、交流论坛等功能于一体的综合性地方门户程序,致力市级、县级特色门户,程序功能齐全,操作简单,快捷安装,...

    YYjia安卓应用市场网站系统(YYjiacms) v2.1 正式版

    YYjia应用市场网站系统页面设计精美,用户访问体验超级好,对搜索引擎收录友好,整站静态,访问速度快,后台傻瓜式操作,智能简单,是建立一个app应用下载站最佳程序。 全面覆盖多平台 基于PHP+MYSQL开发的新型手机...

    nt6 hdd installer v3.1.2.exe

    三、重启选择nt6 hdd Installer后自动进入安装界面,安装操作和光盘一样,装在其它分区上成双系统、格式化C盘安装成单系统随你所需 安装vista或2008(系统安装过程需命令提示符操作) 一、虚拟光驱加载ISO后复制或...

    广告经理插件for pw7 pw7.3 pw7.3.2适用于需要自定义广告赚更多M的站长

    不修改系统数据表不增加第三方数据表,使用系统函数操作,确保插件的安全性。 操作简单只须修改模板页面在需要插入“自定义”广告位置加入广告变量,其它操作插件自动完成,广告投放范围与系统广告插件同步。 ...

    青果校园兼职网,阿赛企业网站管理

    优越感:编辑器全站通用单文件控制上传系统,编辑器支持各种类型的图片、动画、音频、视频等格式的上传,完善的订单系统,完整无限制、无误的后台操作平台,支持一级分类打开,横幅、广告图片后台直接覆盖式上传更新...

Global site tag (gtag.js) - Google Analytics