tyrone的专栏

开源组件与复用

赵磊ID:tyrone1979
126648次访问,排名650好友0人,关注者3
tyrone1979的文章
原创 93 篇
翻译 1 篇
转载 2 篇
评论 88 篇
tyrone的公告

支持开源与组件重用

It's time to reuse!

请使用贝宝付款,这是快捷、免费和安全的付款方式!
最近评论
ztyls:可否发一份security-policy.xml,邮箱ZTYLS@126.com,谢谢
HT_Steven_Gerrard:确实,我同意楼上的想法
现在很少搞桌面操作系统开发,前一段时间redhat停止了它的桌面操作系统的开发,更让我觉得挑战微软在这个市场的权威的必要性,或许大家觉得这是很傻的想法,但没有不可能,不求一蹴而就,脚踏实地做好每一布。
而且现在在网络上有在做操作系统开发的,像博主这样的也有一些,但仅仅做了个简单模型就停手了,其实还可以进一步,一小步一小步的前进,慢慢的就会发觉这个小……
jxqdxm:关注中,希望你尽快进入C语言编写阶段,并且最终完成它。
alZou:现在我还没有时间仔细研究楼主的代码,但感觉楼主做的工作很有意义,在这里先给楼主提几点建议。
1,楼主要完成这个操作系统估计需要写多少篇这样的文章,每篇文章的标题是什么,网址在什么地方,应该有个详细的清单,便于大家查看。
2,这个操作系统的图形界面能不能搞成1024*768的,如果只是320*200的,最终只能是一个玩具性操作系统,只能供编写操作系统爱好者练……
Q282898034:另外用筛法配合BitArray类会比较快哦
文章分类
收藏
相册
Blog
King_play(RSS)
杜汪洋的专栏(RSS)
技术网站
IBM开发者(中文)(RSS)
IT之源
matrix-与Java共舞(RSS)
中国Java实验室
中国开发者网络(RSS)
微软开发者网络(RSS)
开源网站
Apache组织(RSS)
Eclipse开源IDE(RSS)
GNU开源鼻祖(RSS)
Java技术发源地
Linux组织
MySQL开源数据库
ObjectWeb
SourceForge开源项目平台
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 1个人开发操作系统-初篇收藏

新一篇: 解读PE/COFF文件格式 | 旧一篇: JVM GC的Heap

开发操作系统一直被认为是高不可攀的事,的确,开发一个安全的,完整的,健全的OS是非常复杂的工作,不是一两个人能完成的。但是一个简易的操作系统是可以由一个人在很短的时间开发出来的。我将陆续发表开发简易操作系统的全过程,尽力提供完整的源代码,参考资料和文字说明,我也是OS开发的初学者,希望能得到各位读者的技术支持。该简易操作系统我称为Colimas Simple OS,它包括引导程序,图形界面,鼠标和键盘驱动,内存管理,计时器,多任务处理,控制台,Shell命令,API

 

1. 开发环境

本文使用Qemu虚拟机,可以在Windows XP内虚拟软盘镜像文件。Qemu是开源软件,可以在http://fabrice.bellard.free.fr/qemu/下载。C编译器使用Cygwin下的GCC,汇编编译器使用Nasm,可以在http://sources.redhat.com/cygwin/下载。

操作系统开发在FAT12文件系统的软盘里,FAT12文件系统格式参考http://en.wikipedia.org/wiki/FAT32#FAT12Design部分

 

2. 引导程序

;boot.s

;Colimas Simple OS

       org 0x7c00    ;程序始位置

;Fat12文件系格式参考 http://en.wikipedia.org/wiki/FAT32#FAT12

;                  |offset|Length|Descripton

       jmp entry       

       db  0x90         ; 0x00   3     Jump instruction(to skip over header on boot)

       db     "COLIMAS " ; 0X03   8     OEM Name

       db  512          ; 0x0b     2        Bytes per sector. The BIOS Parmeter Block starts here.

       db     1                ; 0x0d   1     Sectors per cluster

       db     1                ; 0x0e     2        Reserved sector count(including boot sector)

       db  2            ; 0x10   1     Number of file allocation tables

       db  224          ; 0x11   2     Maximum number o root directory entries

       db  2880       ; 0x13   2     Total sector:80 tracks * 18 sectors * 2 sides=2880

       db  0xf0       ; 0x15   1     Media descriptor

       db  9          ; 0x16   2     Sectors per File Allocation Table

       db  18         ; 0x18   2     Sectors per track

       db  2            ; 0x1a   2     Number of heads

       db  0          ; 0x1c   4     Hidden sectors

       db  2880       ; 0x20   4     Total sectors again

       db  0          ; 0x24   1     Physical drive number

       db  0          ; 0x25   1     Reserved("current head")

       db  0x29       ; 0x26   1     Signature

       db  0xffffffff ; 0x27   4     ID(serial number)

       db  "Colimas OS "; 0x2b 11    Volume Label

       db  "FAT12   " ; 0x36   8     FAT file system type, FAT12

       resb 18       ; 了安全添加18 bytes0

 

entry:

       mov  ax,0     ;寄存器初始化

       mov  ss,ax

       mov  sp,0x7c00 ;针赋为0x7c00,既引程序初始地址

       mov  ds,ax

       mov  es,ax

       mov  si,msg    ;source indexmsg第一个字符地址

 

putloop:

       mov  al,[si]   ;第一个字符->al

       add  si,1      ;si+1

       cmp  al,0      ;0找最后一个字符,msg之后的byte0

       je   fin       ;如果等于0fin

;video bios参考http://en.wikipedia.org/wiki/BIOS_interrupt_call

       mov  ah,0x0e   ;示字符

       mov  bx,15     ;黑色

       int  0x10      ;video bios中断

       jmp  putloop

fin:

       hlt            ;cpu停止

       jmp   fin      ;死循

      

msg:

       db   0x0a,0x0a ;

       db   "Colimas Simple OS Initialize..."

       db   0x0a      ;

       db   0

      

       resb 0x1fe-($-$$) ;510 bytes1止均设为0

       db   0x55,0xaa ;sector

 编译与运行:

$ nasm boot.s -o boot.bin

$ cp boot.bin ../qemu

$ ./qemu-win.bat

其中qemu-win.bat的内容是

@set SDL_VIDEODRIVER=windib

@set QEMU_AUDIO_DRV=none

@set QEMU_AUDIO_LOG_TO_MONITOR=0

qemu.exe -L . -m 32 -localtime -std-vga -fda boot.bin

运行结果

3引导程序2

       上文已经作了简单的引导程序,引导程序利用了软盘的第一个Sector作为引导sector,下面开始读取软盘第2Sector

       读取磁盘需要使用Disk Biosint 13中断,参考http://en.wikipedia.org/wiki/BIOS_interrupt_call#INT_13h_AH.3D02h:_Read_Sectors_From_Drive

 

;boot.s

;Colimas Simple OS

       org 0x7c00    ;程序始位置

;Fat12文件系格式参考 http://en.wikipedia.org/wiki/FAT32#FAT12

;                  |offset|Length|Descripton

       jmp entry       

       db  0x90         ; 0x00   3     Jump instruction(to skip over header on boot)

       db     "COLIMAS " ; 0X03   8     OEM Name

       db  512          ; 0x0b     2        Bytes per sector. The BIOS Parmeter Block starts here.

       db     1                ; 0x0d   1     Sectors per cluster

       db     1                ; 0x0e     2        Reserved sector count(including boot sector)

       db  2            ; 0x10   1     Number of file allocation tables

       db  224          ; 0x11   2     Maximum number o root directory entries

       db  2880       ; 0x13   2     Total sector:80 tracks * 18 sectors * 2 sides=2880

       db  0xf0       ; 0x15   1     Media descriptor

       db  9          ; 0x16   2     Sectors per File Allocation Table

       db  18         ; 0x18   2     Sectors per track

       db  2            ; 0x1a   2     Number of heads

       db  0          ; 0x1c   4     Hidden sectors

       db  2880       ; 0x20   4     Total sectors again

       db  0          ; 0x24   1     Physical drive number

       db  0          ; 0x25   1     Reserved("current head")

       db  0x29       ; 0x26   1     Signature

       db  0xffffffff ; 0x27   4     ID(serial number)

       db  "Colimas OS "; 0x2b 11    Volume Label

       db  "FAT12   " ; 0x36   8     FAT file system type, FAT12

       resb 18       ;