windows之启动过程(一)
来源:互联网 发布:泛微协同软件 编辑:程序博客网 时间:2024/06/06 18:29
windows的启动过程一直是我比较感兴趣的。下面看一下他是怎么启动的。
1. BIOS 加电自检
(包括枚举设备,初始化显卡等。这时可以进入BIOS内进行一些主板设置,如修改主板时间、设置从USB启动等)
2. BIOS 选择一个启动设备,执行主引导记录(MBR)。
- MBR是一个设备的第一个扇区,包含引导代码和分区数据。最多支持4个分区数据,如果你把系统安装到一个分区中,则在MBR中有该分区信息,并标记该分区为主引导分区。
- MBR从分区数据中找到一个引导分区,然后跳到该分区的引导扇区的代码块执行。
3. 执行引导扇区代码。
- 引导扇区是一个分区的第一个扇区,该扇区中包含对该分区的描述信息也包含启动代码。描述信息包括:是哪一种文件系统(FAT\FAT32\NTFS)、分区占得扇区个数、一个簇包含多少个扇区等信息。
- 由于引导扇区为512个字节,所以代码很少,这时候可能需要更多的扇区的代码来完成加载。
4. 加载NTLDR
- 由于引导扇区中的代码包含了文件系统代码(该代码不是完整的,只有读功能,并且不支持子目录),所以可以找到NTLDR,并加载到内存执行。
- NTLDR包含2个部分:实模式部分和保护模式部分(OS Loader)。
- NTLDR会做一些初始化(如清空键盘缓冲区)然后开启CPU 保护模式(到目前为止一直在实模式下运行),如果是64位CPU,会开启长模式。
- 虽然开启了保护模式,但是还不能使用地址转译服务,只是可以使用32位的物理内存。
5. NTLDR Os Loader 部分
首先把物理内存管理起来,使用内存描述符数组吧每段内存的大小和用途记录下来。然后设置页目录和页表,使16MB以下的物理内存已经可以通过页面映射的机制访问。
在设置好页目录寄存器(CR3)、打开分页机制。
紧接着会对其他设备进行初始化,如IO设备
如果他需要使用BIOS中的服务(比如中断13h),必须保护好保护模式下的设置,并暂时切换到实模式,待服务完成后再切换到保护模式。
OS Loader 读取Boot.ini文件。OS Loader 包含文件系统代码(支持子目录)。
紧接着检查根目录下是否存在一个有效的Hiberfil.sys。如果存在,则从休眠系统恢复。
如果不从休眠恢复,则解析BOOT.ini,如果有多个引导选项,则会显示一个引导选项菜单,否则不显示。(引导选项中包含了各种参数,如是否开启调试模式及各种内存参数)
接下来他会加载并执行NTDetect.com程序,该程序是一个16位实模式程序,他利用BIOS来查询系统的基本设备和配置信息(包括系统日期和时间、总线类型、磁盘信息、IO接口等),并把这些信息写入注册表(HKLM\HARDWARE\DESCRIPTION)
加载Ntoskrnl.exe和hal.dll(这两个名字可以通过引导选项修改)
加载注册表的System储巢,并把标记为”引导启动“(BOOT_START)的驱动加载进来。
构造Loader_Parameter_Block参数块然后调用Ntoskrnl.exe模块的入口函数(KiSystemStartup)。该函数不会返回。
未完,请参看第二篇:
windows之启动过程(二)
参考书籍:
《windows内核原理和实现》
《深入解析windows操作系统》第4版
参考操作系统源码:
wrk1.2
ReactOs 0.3.14
转载请注明出处。ddlx studio。点点灵犀。 http://blog.csdn.net/sunyikuyu
- windows之启动过程(一)
- windows之启动过程(二)
- uboot一之启动过程
- Storm杂谈之Topology的启动过程(一)
- 1.8.S5PV210启动过程详解(一)之预备知识
- 内核之旅-Windows启动过程
- tomcat启动过程(一)
- linux启动过程(一)
- MFC启动过程(一)
- ServiceManager启动过程(一)
- Activity启动过程(一)
- 计算机启动过程(windows XP 系统)
- Windows开机启动过程
- Windows启动过程详解
- Windows启动过程详解
- Windows启动过程详解
- Windows启动过程详解
- Windows启动过程详解
- 积分直方图加速HOG特征计算
- Objective-C的@property 详解(ios,iphone,xcode,retain,release,assign,copy)
- rqnoj-238
- 杭电acm1028.整数拆分
- 求多边形或轮廓的凸包(Hull)
- windows之启动过程(一)
- hdu 2072 单词数
- uva 670The dog task
- 第八周项目五----string类的扩充
- HOG参数简介及Hog特征维数的计算
- 2013省赛集训5 - Triangle
- EJB项目:角色授权(一)
- 极客技术专题【001期】:jQuery初学者入门
- InitInstance()函数