操作系统学习笔记(4)

B.windows操作系统的启动实现过程
 
香茗同学提出一个很好的问题,大致语意我理解了,说如果使用winHex提取引导扇区的信息,添加到boot.ini文件中是不是可以实现多引导启动。这个想法的确很好,但是是不可实现的。
 
下面我说下boot.ini文件是干嘛的?以及它在windows 操作系统的启动过程中担任那些工作,还有就是 windows 操作系统是怎么启动的还有启动的相关的状态描述是怎样的。
boot.ini是windows的setup程序创建的一个引导菜单文件,此文件包含了用于启动的windows版本选项。下面书一个boot.ini文件的例子:
【boot loader】
timeout=30
default=multi(0)rdisk(0)partition(1)/windows
[operating system]
mulit(0)disk(0)rdisk(1)/windows="win xp" /fastdetect
c:/='Microsoft windows"
这种路径指向是按照ARC命名规范来书写的,只有什么是ARC,大家可以下去自己了解。这里不作解释了。
说下multi()语法格式:multi(W)disk(X)rdisk(Y)partition(Z)
w 代表磁盘控制器编号,X在这里总是0,Y指定在控制器W上的具体物理硬盘。
此外ARC规范格式还有scsi()写法和signature()写法。具体自己参考相关文件熟悉了解。
boot.ini只属于一个配置文件,它本身不存在引导功能。那么windows是如何启动的,我们来看下启动过程:
windows setup讲mbr写到硬盘上的时候,它也会在该磁盘的第一个可引导分区写入一个引导扇区,如果存在了一个引导扇区,它会将其覆盖,这就是所谓的 MBR改写。同时它也会
检查这是不是一个有效的MS-DOS引导扇区,如果是的话,它会将其内容 cp到一个名为 bootsect.dos的文件中,放在分区目录下。
windows setup在写分区的引导扇区之前,用一种你所指定的文件系统类型来格式化此引导分区并将文件cp到这个分区。其中就包括 ntldr和ntdetect.com。其中ntldr才是真正的 windows引导程序,类似grub。
引导扇区将ntldr加载到内存后,开始移交控制权,但此时系统还处于实模式状态,它在创建完页表之后才完成向保护模式的切换。启动分页机制以后, ntldr仍然依赖引导代码所提供的函数来访问基于外界系统,此时暂时关闭分页机制,以便bios提供的服务能够执行。无法通过bios固件支持访问的,它需要加载ntbootdd.sys文件。比如SCSI硬盘。
ntldr开始从根目录读取boot.ini 文件,开始清屏,加载 hiberfil.sys(此文件只有在系统休眠转换的时候才起作用,为的是简化启动)。
根据boot.ini中的内容和指示位置来调用相应的有效的 bootsect.dos文件,启动系统。其中boot.ini可以根据需要配置启动参数。 此时开始加载 hal.dll和ntoskrnl.exe,控制权开始交接。具体如何完成操作系统的全面启动,我们在下次讨论。
这里只希望大家理解boot.ini文件的配置参数和ARC规范了解,有兴趣的同志也可以反汇编mbr理解下ntldr 是如何加载的。下次我们将针对ntldr 传递,ntoskrnl功能还有smss,csrss, 以及 winlogon功能作出讨论。

posted on 2009-06-10 19:14 2008momo2008 阅读(206) 评论(0)  编辑 收藏 引用

<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜