Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102105
  • 博文数量: 19
  • 博客积分: 840
  • 博客等级: 准尉
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-02 21:25
文章分类

全部博文(19)

文章存档

2011年(1)

2010年(5)

2009年(13)

我的朋友

分类: WINDOWS

2009-10-28 17:25:10

作者:weibo.com/myduanli
来源:
http://duanli.cublog.cn
说明:转载请注明来源,交流请Email给作者

参考一书,总结软盘结构及启动扇区,结合bochs的虚拟软驱进行试验,加深对操作系统引导过程的认识!!



一、软盘结构

软盘

软盘用来储存数据文件,如备份重要的数据、各种表格的上报等等。在软盘片上进行数据存储是利用磁层被磁化后磁性方向的不同来表示0和1的。磁盘片的大小和容量有两种:5.25英寸的1.2MB,3.5英寸的1.44MB。

软盘容量

以3.5英寸的软盘为例,它有80个磁道,每个磁道有18个扇区,两面都可以存储数据。其容量的计算如下图所示:

二、软盘结构

软盘由一个引导扇区,一个管理块(比如说MSFATEXT2inode)和一个基本数据区的形式组织在一起的。由于管理块是与特定文件系统相关的,我们也可以把它归为数据区的一部分,引导扇区中存放着用于启动的代码,以及一些有关特定文件系统的信息,在它的最后,存放着一个启动标志,如果它是0xAA55,代表这个引导扇区是可用于启动的。


使用DOS外部命令format格式化一张软盘(现在谁电脑有软盘,幸好有虚拟软盘工具),format主要完成两部分工作:
1)把软盘划分为若干个磁道,每一磁道划分为若干扇区;
2)将划分的扇区分为引导记录区、文件分配表1和2、根目录区以及数据区5大区域。(后4个分区作用??可以不关心)

我们主要关注MS-DOS
的引导记录区(0磁道0头1扇区),记录内各个项目的偏移如上图所示,
000h-03dh:BIOS Parameter Block(BPB),62Bytes参数块
注意:在软盘地址000h处存储的是一条跳转到0x3E处的代码
03eh:引导扇区引导代码,352Bytes
19eh:引导代码定义的消息,72B
1e6h:Dos隐藏文件名字,24B
1FEh:MBR分区标志,2Bytes(即内容0xAA55)

三、DOS软盘启动过程
1) 机器加电;
2)BIOS加电自检(Power On Self Test):BIOS在内存中起始地址为0FFFF:0000,加电自检就是从这开始的。主要工作包括:CPU,内存及硬盘等关键设备的检测,即插即用设备的检测。完成这些检查后,将依据检查结果更新ESCD(Extended System Configuration Data,扩展系统配置数据)。
3)计算机将A盘0磁道0磁头1扇区的内容读入0000:7C00处。
4)检查(WORD)0000:7DFE处内容(1扇区512字节末两字节)是否等于0AA55,若不等于转去尝试其他启动介质,如果没有其他启动介质则显示“No ROM BASIC”,然后死机;
5)跳到0000:7C00处执行MBR中程序

MBR负责把DOS系统两个隐含文件io.sys和msdos.sys装入内存,并提供DOS进行磁盘读写所需要的磁盘I/O参数表。

读者还可以看看这篇:
DOS主引导扇区分析(转载理由:写DOS引导PC启动写得很具体,很前辈的)
http://hengch.blog.163.com/blog/static/10780067200971610626606/


附录:

DEBUG 的指令:

T --- 单步执行 ,一次执行一个指令
G

--- 执行到
就停下来
G --- 执行完载入的程式
N --- 定义档名 (配合 "L" 或 "W" 用)
L --- 载入档案(LOAD)
W --- 写入档案(SAVE)


阅读(2263) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~