计算机 启动 原理图,【美文美图】计算机与操作系统启动原理

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

在刚开机加电时,根据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的特性。经过一系列复杂操作后,最后将控制权转移给操作系统。

对于linux而言,开机磁盘的boot sector上的正是linux的bootsect程序,也就是说,bootsect是第一个被读入内存中并执行的程序。(鉴于大家研究linux不多,linux有源代码可参,bootsect.S->setup.S->head.S ->main.c,所以我就将linux以后的启动略去,主要看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系统调用.用来进行系统配置的检测.所有检测到的东西将被存到系统注册表的HKLMHARDWAREDESCRIPTION项下. 接下来被加载的2个文件组成了WINDOWS NT的核心.那就是:HAL.DLL,NTOSKRNL.EXE.这2个文件在装载时将被检测PE校验和,如果有问题或找不到.NT又要死机了.加载完这2个文件后,NTLDR再加载所有引导必须的驱动程序,然后加载HKEY_LOCAL_MACHINESYSTEMServices里的值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_MACHINESYSTEMCurrentControlSetControlWindowsCSDVersion取出.当进程管理器初始化完成后(进程管理器是NTOSKRNL.EXE里最后被初始化的一个管理器),进程管理器产生2个进程.一个,乃是IDLE进程.一个,乃是SYSTEM进程.而当返回到ExpInitializeExecutive后,ExpInitializeExecutive就变成了IDLE线程.而IDLE线程的优先级是最低的.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值