分享
 
 
 

手把手教你做操作系统(二)

王朝other·作者佚名  2006-02-01
窄屏简体版  字體: |||超大  

手把手教你做操作系统(二)

第二天:

先大概理个头绪,我们要做的操作系统,究竟是个什么样子的?究竟可以有哪些功能?

列个单子放在下面:

1, 代码行:最多10000行(因为是一个人做,太大的系统不现实);

2, 是real-time os还是time-sharing os?

我选time-sharing os,这样就可以和我们的“UNIX操作系统”课联系起来,可以省不少事呢。

3, 支持多任务吗?

既然是time-sharing os,那肯定是多任务的了。

4, 除了“设备管理,存储管理,文件管理”这些该有的功能外,系统还应该有什么功能?

考虑到工作量,暂时只想有个上网功能。

5, 是字符界面还是图形化界面?

实在点,就字符界面吧。说“图形化”界面,那是和自己的生命开玩笑!!!

6, 用不用虚拟存储器的功能?

用!

还有,确定下操作系统的大概分块:初启;存储管理;文件管理;系统调用(接口—库函数);系统重要函数;中断处理函数(汇编编写)。

OK,准备工作做的差不多了,大体的思想也有了,现在就可以甩开膀子大干一场啦。

今天先搞定系统的初启。

了解下系统初启的过程:

1, 硬盘初启:I,通电;

II,BIOS自检。在内存中的自检地址为0FFFF:0000。(注:这个时候还是在实模式下)。自检内容:CPU,主板,内存,硬盘,I/O设备。

III,计算机将主引导区MBR的512B的引导代码读入0000:7C00(好怪的位置,我也不知道为什么)。

IV,检查0000:7DFE(即被读入内容的最后两个字节)的内容是否为0XAA55(0XAA55标志该引导代码是否合法)。要是不等,则不执行引导代码,死机。

V,跳转到0000:7C00执行引导代码。

VI,MBR先将自己复制到0000:0600,继续执行。

VII,搜索是否有活动分区,没有或有多个活动分区,则停止执行。

VIII,将仅有的一个活动分区的第一个扇区的内容(即系统引导代码)覆盖0000:7C00。

IX,再次检查0000:7DFE的内容是否为0XAA55,不等的话,则尝试软盘启动。

X,跳转到0000:7C00,执行系统引导代码。

XI,系统启动。

2,软盘初启:I,通电;

II,BIOS自检。在内存中的自检地址为0FFFF:0000。(注:这个时候还是在实模式下)。自检内容:CPU,主板,内存,硬盘,I/O设备。

III,计算机将软盘中偏移量为0,大小为512B的内容复制到0000:7C00的地址处。

IV,检查0000:7DFE的内容是否为0XAA55。要是不等,则不执行引导代码,死机。

V,跳转到0000:7C00处,执行MBR代码。

VI,系统启动。

恩,现在可以写MBR了,暂时把它命名为boot.asm吧。(啊,忘说了,这里面的汇编一定要用NASM来编译,NASM很好找的,随便搜一下,一大把,用法与MASM基本相同。)

;boot1.asm

;first boot of the two boots ;二次引导中的第一部分

;第二个引导为系统引导

jmp 07c0h:start

;

start:

;设置段寄存器

mov ax,cs

mov ds,ax

mov es,ax

;

;reset the floppy

reset:

mov ax,0

mov dl,0

int 13h

jc reset

;把软盘第一个扇区以后的5个扇区内容读到1000:0000地址中

read:

mov ax,1000h

mov es,ax

mov bx,0

;

mov ah,2

mov al,5

mov ch,0

mov cl,2

mov dh,0

mov dl,0

int 13h

;

jc read

jmp 1000h:0000

times 510-($-$$) db 0 ;保证该段内容(MBR)有512B

dw 0aa55h

编译它

呵呵,一个简单的MBR就成功了。我们先测试一下它。编辑另一个测试程序test.asm如下:

;test

mov ax,cs

mov ds,ax

mov es,ax

mov ah,0eh

mov al,01

mov bl,07

int 10h

hang:

jmp hang

times 510-($-$$) db 0

dw 0aa55h

它的功能是输出一个笑脸^_^

编译它

现在做测试工作:

1, 格式化你的软盘,使之成为引导盘

2, 把你自己写的MBR以及测试程序写入软盘

3, 在bochs下建立floppy文件夹(功能为在bochs软件中模拟软盘启动)

在floppy中加入如下两个文件bochsrc.txt和start.bat

bochsrc.txt中的内容为:

##################################################################

megs: 32

romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000

vgaromimage: $BXSHARE/VGABIOS-elpin-2.40

floppya: 1_44=a:, status=inserted

floppyb: 1_44=a:, status=inserted

ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14

ata0-master: type=disk, path="boot.img", cylinders=306, heads=4, spt=17

boot: a

log: nul

mouse: enabled=1

keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-us.map

####################################################################

start.bat用记事本创建,改下后缀名就行,内容如下:

SET BXSHARE=c:\bochs-2.0

..\bochs

最后“开始”---“运行”----“c:\bochs-2.0\floppy\start.bat”-----“确定”

效果如下:

呵呵,这个引导程序的效果还不赖吧?

OK,今天的事情干完!

2005.11.08

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有