免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 1941|回复: 2
收起左侧

[资料] 计算机及操作系统启动原理

[复制链接]

7711

主题

31万

铜板

892

好友

超级版主

地信网论坛贵宾

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

积分
128758

宣传勋章优秀斑主灌水勋章活跃勋章贡献勋章童话节勋章

QQ
发表于 2010-9-17 15:02 | 显示全部楼层 |阅读模式
第一步:

在刚开机加电时,根据X386CUP的特性,代码段(CS,CODE SEGMENT)寄存器的值为全1,指令计数器

(IP,INSTRUCTION POINTER)的值为全0,既CS=FFFF、IP=0000。这时CPU根据CS和IP 的值执行FFFF0H处

的指令。由于FFFF0H已经到了基本内存的高地址顶端,所以,FFFF0H处的指令一般总是一个JMP指令,

jump到另一个位於ROM BIOS中的位置(就是执行BIOS中的系统测试代码,随着制作BIOS厂商的不同而会有

些许差异 )它负责开机自检。如检查内存,键盘等。在自检过程中,ROM BIOS会在上位内存(UMB,

UPPERMEMORY BLOCK)中进行扫描,看看是否存在合法的设备控制卡ROM BIOS(如:SCSI卡上的ROM),如

果有,就执行其中的一些初始化代码。

第二步:

紧接着系统测试码之后,控制权会转移给ROM中的启动程序(ROM bootstrap routine),这个程序会将磁

盘上的第零轨第零扇区读入内存中(这就是一般所谓的boot sector,如果你曾接触过电脑病毒,就大概

听过它的大名。假定硬盘是系统的启动磁盘。硬盘的第一扇区称为主引导记录(MBR, MASTER

BOOTRECORD)。MBR 的长度为512字节。可分为两部分:第一部分为引导(PRE-BOOT)区,占了446个字

节;第二部分为分区表(PARTITION PABLE),共有66个字节,记录硬盘的分区信息。预引导区的作用之

一是找到标记为活动(ACTIVE)的分区,并将活动分区的引导区读入内存。如果用软盘启动计算机,ROM

BIOS 读入的是软盘的引导区,既软盘的第一个扇区。),至於被读到内存的哪里呢? --绝对位置

07C0:0000(即07C00h处),这是IBM系列PC的特性。经过一系列复杂操作后,最后将控制权转移给操作系

统。当然,U盘启动计算机,ROM BIOS将会读入U盘的引导区。

第三步:

对于linux而言,开机磁盘的boot sector上的正是linux的bootsect程序,也就是说,bootsect是第一个

被读入内存中并执行的程序。(鉴于大家研究linux不多,linux有源代码可参,bootsect.S->setup.S

->head.S ->main.c,所以我就将linux以后的启动略去。

Nt启动模式分析:

主要看Windows的启动,且主要对于NT而言,2k类似。--因为9X已成为历史)对于NT而言,boot

sector上的正是Windows引导扇的引导代码(他是在Windows安装时被写入的). 当引导扇区被引导后,他

首先查找NTLDR.(该文件必须存在于根目录下,否则系统提示:

BOOT:Couldn't find NTLDR.或A kernel file is missing from the disk.NT.接着该死机了)NTLDR首

先将CPU从实模式转换到保护模式下.当NTLDR将所有的1M以下的内存页描述符创建好后,NTLDR再开启页映

射功能,现在NT可以访问4G内存了。

第四步:

NTLDR通过内建的文件系统代码来查找根目录下的BOOT.INI并根据BOOT.INI(这也是我们可以修改启动选

项的地方)的内容提示用户可选的操作系统.当用户在缺省的时间内没有选择.NTLDR就引导缺省的操作系

统.然后NTLDR加载NTDECT.COM.调用INTxx来执行一大堆的BIOS系统调用.用来进行系统配置的检测.所有

检测到的东西将被存到系统注册表的HKLM\HARDWARE\DESCRIPTION项下. 接下来被加载的2个文件组成了

WINDOWS NT的核心.那就是:HAL.DLL,NTOSKRNL.EXE.这2个文件在装载时将被检测PE校验和,如果有问题或

找不到.NT又要死机了.加载完这2个文件后,NTLDR再加载所有引导必须的驱动程序,然后加载

HKEY_LOCAL_MACHINE\SYSTEM\Services里的值SERVICE_BOOT_START的DRIVER.(此时不初始化.)然后NTLDR

就会锁定NTOSKRNL.EXE的main()函数,然后将控制转移给NTOSKRNL.EXE. 接下来NT开始了自己复杂的OS核

心初始化.首先调用ExpInitializeExecutive,而该函数则调用HAL.DLL里引出的函数HallnitSystem().这

时.NT就完成了对中断控制器的初始化和时间片的设定.当HallnitSystem()返回,接下来进行的就是对内

存管理器,安全引用监视器,对象管理器,进程管理器的初始化.在内存管理器完成初始化后,NT才显示

Microsoft (R) Windows NT (TM) Version 4.0 (Build 1381)之类的.而后面的SERVICE PACK号码则是从

注册表里HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\CSDVersion取出.当进程管

理器初始化完成后(进程管理器是NTOSKRNL.EXE里最后被初始化的一个管理器),进程管理器产生2个进程.

一个,乃是IDLE进程.一个,乃是SYSTEM进程.而当返回到ExpInitializeExecutive

后,ExpInitializeExecutive就变成了IDLE线程.而IDLE线程的优先级是最低的.

现在调用HAL激活多CPU的功能.然后将依次调用Object Manager, Executive, Kernel, Security

Reference Monitor,Memory Manager,Cache Manager,Configuration Manager,I/O Manager, Process

Manager. 3 d0 Z, E0 w. F4 J2 A

其中IO管理器负责完成启动值为SERVICE_BOOT_START的驱动程序的初始化,紧接着,启动注册表内启动值

为SERVICE_SYSTEM_START的装载. 2 G4 n. k# H9 J  x( Z3 s1 s

所有的DRIVER完成初始化后,还没有任何USER MODE的程序,也没有任何环境子系统.系统进程将调用核心

函数ExInitializeSystem创建SMSS进程.就是SESSION MANAGER进程.SMSS是第一个USER MODE的应用程序.

他又是一个真正的NATIVE APPLICATION.他不依赖于任何子系统.SMSS唯一需要的就是NTDLL.DLL.而且就

是他创建了WIN32子系统.

然后SMSS开始工作: : w: a9 \3 u$ a1 D& D

创建LPC端口对象\SmApiPort.2个线程,等待客户请求如加载子系统等.

创建环境变量. ' j9 I: R( z& n4 Y4 w; M

定义DOS符号联接. 1 t. w& W* [) T: `" ~4 S

创建附加的页面调度文件. # J- m9 x8 C  f+ L! Z1 ]2 K

从HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Session Manager\BootExecute找出引导时加载的

NATIVE APPLICATION. 通常有CHKDSK.EXE等.

调用CONFIG MANAGER完成对 HKEY_LOCAL_MACHINE\SAM,HKEY_LOCAL_MACHINE\SAM\SECURITY,

HKEY_LOCAL_MACHINE\SOFTWARE配置. 5 U0 f* i8 [$ V- m! w

然后加载WIN32K.SYS.这时系统就被切换到图形状态. 2 I5 J3 X3 G! z  {' k& b( L9 [

启动WIN32子系统.即CSRSS.EXE.

启动WINLOGON.EXE.

创建用于调试的LPC端口,并创建线程来监视.

完成了这些工作后,SMSS就永远等待WINLOGON和CSRSS的进程对象.把自己挂起.

WINLOGON在被启动后.启动SCM(服务管理器).将所有的"自动启动"的SERVICE启动起来.当然,WINLOGON并

不等待任何SERVICE的完成启动.很有可能用户已经登陆而SERVICE没有启动出来.当用户的START组里有某

些应用程序需要依赖于某些SERVICE的存在的话,就有可能出错.

当所有的SERVICE启动无误后,现在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet就成为了LAST KNOWN

GOOD CONTROL SET. ) |, n' N/ q& c0 Y

当启动SCM后,WINLOGON就创建个工作站,代表KBD,MOUSE,MONITOR.并确保连SERVICE也不能访问该工作站,

以保证安全性.当工作站创建好后,就打开3个桌面.APP,SCR SAVER,WINLOGON.然后就是建立LSA和LPC联接

.用于登陆.注销.口令操作.

通过调用LsaLookupAuthenticationPackage获取MSV1_0的相关ID,用于验证身份.创建WINLOGON窗口类.确

保SAS序列键按下后窗口过程被调用.只有WINLOGON桌面解锁后才能切换到其他应用程序桌面.
该会员没有填写今日想说内容.

0

主题

4096

铜板

8

好友

教授级高工

平常心  平静

Rank: 12Rank: 12Rank: 12

积分
1333
QQ
发表于 2010-9-17 16:05 | 显示全部楼层
说的挺好的    要是给我们讲个课就更好了   谢了
该会员没有填写今日想说内容.
头像被屏蔽

0

主题

1849

铜板

1

好友

禁止发言

积分
1405
发表于 2019-4-15 13:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表