ntldr是怎样被加载到内存的

来源:百度知道 编辑:UC知道 时间:2024/06/12 18:58:00
操作系统加载时,MBR中的程序找的引导分区的第一个扇区,并加载到内存将其执行,此后的一步“引导分区中的程序”时怎样找到ntldr这个文件?ntldr也存在于硬盘分区的固定扇区吗?还是先加载了文件系统,然后通过文件系统找到ntldr?

不知道你有没有用过grub这样的引导程序。grub在linux很常见。grub引导windows系统时候大概是这样的参数
rootnoverify (hd0,0)
chainloader +1
boot
第一行指出win在什么位置,第二行包含你的问题,第二行的意思是从分区的开始顺序加载引导文件。boot就是启动的意思了。所以ntldr是存在于windows所在分区的最开始的位置,至于占有多少扇区 就是其大小就不知道了,反正是存在于最开始的位置的。对于xp在MBR中写的什么,我也不知道。但是根据grub这样的引导器基本上可以推测在MBR中他指明了NTldr在那个分区,以从ntldr所在分区的开始位置顺序加载NTldr文件

大致流程如下:
1.系统BIOS自检
2.读取MBR启动代码,此段代码很小,它会读取ntldr程序,然后将启动交给ntldr来处理
3.ntldr程序自带一个小型的文件系统,也即它可以识别包含ntfs在内的文件系统,所以它可以继续启动其它文件;
4.ntldr会启动NTDETECT.COM程序,此程序的作用是检测安装在系统上的硬件;虽然bios测试也会对硬件做简单的检测,但是这个程序检测会很详细,检测好的数据写入注册表中的系统部分;
5.硬件检测好之后,ntldr开始启动系统内核文件,hal.dll和ntoskrnl.exe
6.接下俩就是系统内核初始化,然后启动GUI登录界面等过程.
--->
系统安装的时候,安装程序会修改mbr代码,让mbr可以启动ntldr程序;
为什么ntldr和NTDETECT.COM放置在系统根目录,而不是像其它程序放置在windows等目录下面,因为系统刚刚启动时候,文件系统还没有加载,如果把他们放置在很深的目录树下面,则无法读取这些程序.

要先加载(活动分区的)文件系统,再找ntldr
ntldr本身是个文件