吴文官 发表于 2002-11-24 19:11:02

个人读书笔记(连载)

今天主要看了计算机的启动过程。
1、开机
2、BIOS加电自检(Power On Self Test 缩写为POST------一直不知道这个POST是什么意思,原来如此),此时的内存地址为0FFFF:0000
3、将硬盘0头0磁道1扇区,即BOOT SECTOR 读入内存0000:7C00处
4、检查0000:7DFE是否等于0xAA55,若不等于,则转而引导其它介质,若无其它介质,则死机
5、跳转到0000:7C00处执行MBR中的程序
6、MBR首先将自己复制到0000:0600处
7、在主分区表中搜索标志为活动的分区,若搜索失败(没有活动分区或不只一个活动分区),则停止(这个地方我有点不懂)
8、将活动分区的第一个扇区读入内存的0000:7C00处
9、检查0000:7DEF是否等于0xAA55,若不等于,则显示“Missing Operating System”后停止或从软盘启动
10、跳转到0000:7C00处继续执行特定的启动程序
11、启动系统

其中:2、3、4、5由BIOS引导程序完成
            6、7、8、9、10由MBR中的引导程序完成

吴文官 发表于 2002-11-24 19:34:34

硬盘的主引导扇区

硬盘的主引导扇区

主引导扇区是硬盘的第一个物理扇区,包括主引导记录(MBR)和硬盘分区表(DPT)和Magic Number(幻数?)。
MBR占用446字节(偏移地址0 ~ 1BDH)
DPT占用64字节(偏移地址1BEH ~ 1FDH)
最后两个字节 “55”、“AA”(偏移地址1FEH ~ 1FFH) 是分区的结束标志

主引导记录中包含了硬盘的参数和一段引导程序
引导程序主要用来在自检完成后引导具有激活标志的分区中的操作系统,执行到最后是一条JMP 指令跳到操作系统的引导程序

硬盘分区表:由4个16字节的分区信息表组成
BYTE State       : 分区状态, 0 = 未激活, 0x80 = 激活 (注意此项)
BYTE StartHead   : 分区起始磁头号,
WORD StartSC   : 分区起始扇区和柱面号, 底字节的低6位为扇区号,高2位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
BYTE Type      : 分区类型, 如 0x0B = FAT32, 0x83 = Linux 等,00 表示此项未用
BYTE EndHead   : 分区结束磁头号
WORD EndSC       : 分区结束扇区和柱面号, 定义同前
DWORD Relative   : 在线性寻址方式下的分区相对扇区地址(对于基本分区即为绝对地址)
DWORD Sectors    : 分区大小 (总扇区数)

最后两个标志“55”、“AA”为分区表结束标志,若被破坏,则找不到有效的分区表。

由此,主引导扇区=MBR+DPT+MagicNumber=446+64+2=512

netdigger 发表于 2002-11-25 15:15:46

最后两个标志“55”、“AA”为分区表结束标志,若被破坏,则找不到有效的分区表
更正一下,这个是为启动分区的标志,如不是,则表示此分区不能启动。

吴文官 发表于 2002-11-25 17:57:39

多谢指教!
但我觉得还是前一种说法更确切一点。从前边的启动过程看,如果这里被破坏,根本连MBR都找不到,更不用说是分区表了。而确定此分区能否启动的则是后边搜索活动分区的那一步。
总之,我还是很迷糊,还得再找一下资料证实一下。

还有一个问题想请教一下:这里只有4个分区的分区信息,那么其它分区的分区信息放在哪里了?还有就是,判断“0xAA55”时,是不是用“0x55AA”作“与”运算,再判断其它结果是否为0?

这几天发现自己不懂的东西太多了,从今天开始看汇编,头晕呀!

netdigger 发表于 2002-11-25 18:54:27

对,这个是硬盘的第一个扇区,如果此硬盘可以启动,那么最后两个字节为"AA55",然后再去寻找相关启动信息。我也没有讲清楚。而且我就知道这么多了。

wweiradio 发表于 2002-11-27 14:55:27

希望继续下去

:-D

吴文官 发表于 2002-11-28 16:10:05

多谢指教!
每一个区都有一个BOOT SECTOR吗?但是,如果每一分区都有一个BOOT SECTOR,那么在格式化该分区时岂不是把这个BOOT SECTOR都格式化掉了?
我认为是一个硬盘只有一个BOOT SECTOR,是独立于任何分区之外的。整个硬盘的第一扇和MBR还是有很大区别的吧?
至于自检的过程,我以前在华中科技大学蹭课时学过一点,不过现在都记不来了,好象是初始化几个芯片吧?我学这些引导过程的目的是为了分析后边的bootsector.s,所以这些只是了解一下而已,没想到自己所想的根本就是错误的。
毕竟我不是计算机专业的学生,问的问题让您见笑了。

mozilla 发表于 2002-11-28 17:02:33

真要学内核就买一套《Linux内核源代码情景分析》。150RMB。
胡希明、毛德操著。浙江大学出版社出版。

吴文官 发表于 2002-11-28 17:10:15

kao,你以为我大款呀!早就看上这本书了,不过一直没钱买。胡希明在90年代初写过的一本UNIX的源码分析的书也很不错,我在图书馆读过,不过其时还什么都不懂。

mozilla 发表于 2002-11-28 17:15:00

唉,150元,忍一忍就有了。知识无价呀!晚学不如早学。

mozilla 发表于 2002-11-28 17:28:29

如果你在北京,我倒是可以借给你看。
关于boot sector:
每个逻辑盘的第一个扇区是引导扇区,分别用于相应逻辑盘中操作系统(如果有的话)的映象(映象???不太理解)。整个硬盘的第一个扇区不属于任何一个逻辑分区。BIOS把它作为整个硬盘的引导扇区,加电时从这个扇区引导,所以该扇区成为“主引导扇区”MBR。MBR中包含有关于分区划分的信息和一段简短的程序,一共512个字节。不过MBR中的程序并不直接引导操作系统,而是根据分区划分的信息从一个预定的“活跃”分区中读入其引导扇区,再由这个引导扇区采取进一步行动。不过也可以把用来“引导”LILO的程序和分区划分信息放在MBR中,使整个引导过程少转一道弯。

(抄自《Linux内核源代码情景分析》的第十章:系统引导和初始化。抄得我好累)

吴文官 发表于 2002-11-28 17:44:40

多谢两位!
我还是分析我的《莱昂氏UNIX源代码分析》吧。

ilrainyday 发表于 2002-12-1 14:24:29

对于每个partition都有一个boot sector,MBR(master boot record)是独立于所有的partition的。对于每个分区的format都会建立相应的filesystem(包括boot sector,fat,fdt),不过不用担心这么多的boot sector会造成启动的混乱,因为那一个partiton作为boot partiton是在partition talbe中决定的。

《操作系统原理dos篇》里面的文件系统部分对于现在的FAT32没有介绍。作为基础,这本书还是不错的。(有些部分比较庞统,比如存储器管理,进程管理)

ilrainyday 发表于 2002-12-1 14:30:50

也正是因为有多个boot sector,才使得mutilboot成为可能

吴文官 发表于 2002-12-7 20:25:24

为什么磁盘会有1024柱面的限制?

BIOS的int13调用是采用三个位元组的CHS编码,10位为柱                  
面号,8位为磁头号,6位为扇区号。可能的柱面号码是0~1023,可                     
能的磁头号码是0~255,而磁道上可能的扇区号码是1~63,以这24                     
位最多可以定址8455716864个位元组(7.875GB)。

由此带来的问题是:什么是int13调用?什么是CHS编码?1024柱面的限制是如何解决的?

学习中~~~~~~~~
页: [1] 2
查看完整版本: 个人读书笔记(连载)