07 第七章 操作系统启动顺序和方法PPT课件
- 格式:ppt
- 大小:2.03 MB
- 文档页数:30
我们每天使用计算机必须要经过的一个步骤就是启动了,但是,你是否知道计算机到底是怎样启动的呢?或许,你会认为这并不重要,是的,对于我们一般人而言,它确实不重要,事实上,我们更关心它启动得有多快,但是,这却实在是一个很“基本”的问题,每天都在用计算机,却不知道它是怎样启动的,似乎总感觉有些别扭(当然了,多数人都不知道的话也就没什么好别扭的了)。
下面就为大家介绍一下我们使用的计算机到底是怎样启动起来的,由于这个问题比较大,我将它分为了两部分来介绍,这样可能比较好接受一些。
这次只介绍前半部分(即和操作系统无关的部分)。
另外,为方便大家理解,我特意制作了相关的流程图,建议大家对照着看。
如果你愿意了解一下,希望你能通过下面的介绍弄懂这个问题,如果你没什么兴趣,也没关系,毕竟,它是个比较边缘的东西,不太了解也行。
像大多数介绍此知识的文章一样,这里还是需要先介绍一下两个基本而重要的概念。
BIOS:即“Basic Input/Output System”(基本输入输出系统),它是一组被“固化”在计算机主板上的一块ROM中直接关联硬件的程序,保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序,其主要功能是为计算机提供最底层的、最直接的硬件设置和控制,它包括系统BIOS(主板BIOS).其它设备BIOS(例如IDE控制器BIOS、显卡BIOS等)其中系统BIOS占据了主导地位.计算机启动过程中各个BIOS的启动都是在它的控制下进行的.内存地址:我曾在虚拟内存的介绍中提到过它,我们知道,内存空间的最基本单位是位,8位视为一个字节,即我们常用的单位B,内存中的每一个字节都占有一个地址(地址是为了让CPU识别这些空间,是按照16进制表示的),而最早的8086处理器只能识别1MB(2的20次方B)的空间,这1MB内存中低端(即最后面)的640KB就被称为基本内存,而剩下的内存(所有的)则是扩展内存。
操作系统的启动流程1、预引导(Pre-Boot)阶段2、引导阶段3、加载内核阶段4、初始化内核阶段5、登陆每个启动阶段的详细介绍一、预引导阶段在按下计算机电源使计算机启动,并且在Windows XP操作系统启动之前这段时间,我们称之为预引导(Pre-Boot)阶段,在这个阶段里,计算机首先运行Power On Self Test(POST),POST检测系统的总内存以及其他硬件设备的现状。
如果计算机系统的BIOS(基础输入/输出系统)是即插即用的,那么计算机硬件设备将经过检验以及完成配置。
计算机的基础输入/输出系统(BIOS)定位计算机的引导设备,然后MBR(Master Boot Record)被加载并运行。
在预引导阶段,计算机要加载Windows XP的NTLDR文件。
二、引导阶段 Windows XP Professional引导阶段包含4个小的阶段。
首先,计算机要经过初始引导加载器阶段(Initial Boot Loader),在这个阶段里,NTLDR将计算机微处理器从实模式转换为32位平面内存模式。
在实模式中,系统为MS-DOS保留640kb内存,其余内存视为扩展内存,而在32位平面内存模式中,系统(Windows XP Professional)视所有内存为可用内存。
接着,NTLDR启动内建的mini-file system drivers,通过这个步骤,使NTLDR可以识别每一个用NTFS或者FAT文件系统格式化的分区,以便发现以及加载Windows XP Professional,到这里,初始引导加载器阶段就结束了。
接着系统来到了操作系统选择阶段,如果计算机安装了不止一个操作系统(也就是多系统),而且正确设置了boot.ini使系统提供操作系统选择的条件下,计算机显示器会显示一个操作系统选单,这是NTLDR读取boot.ini的结果。
三、加载内核阶段在加载内核阶段,ntldr加载称为Windows XP 内核的ntokrnl.exe。
操作系统启动过程系统的启动过程:任何一台计算机,在开机后,它要做的第一件事情就是引导(Booting),通过引导,计算机为自身搭建好运行环境,为以后OS的启动与运行做好准备.首先,我们来看看一台计算机是如何引导自身的.在机器加电后,电源供电稳定后,电源会传给8284A时钟生成器一个"Power Good"低电位信号,随后8284A会输出有效的RESET信号,使CPU复位,这时CS:IP = FFFF:0000.CPU在这里执行一条jmp far addr类指令,跳转到实际BIOS映射代码的位置,开始执行BIOS代码.上述是机器在加电后的启动过程,大家都知道计算机的启动是分为冷启动与热启动的,那么对于热启动,其过程又是怎样的呢?其实热启动只不过是将键盘中断程序置复位标志为1234h,然后再跳转到BIOS处执行,其主要是省去了在自检过程中对存储器的检测.在跳转到BIOS后,首先会先关闭中断,然后开始自检(POST)工作,这个自检主要检测计算机最基本设备的运转状态.其主要包括对,CPU内部寄存器测试,BIOS芯片字节的检查,8237 DMA控制器测试,基本32K RAM检测等最基本内容.由于被检测设备在系统运行中的重要性,因此在此过程中,BIOS一旦检测到任何异常,都将判为致命性错误,系统将被停机.通过上面的自检后,BIOS开始初始化8259可编程中断控制器,并设置BIOS的8个主要中断向量(int 10h-int 17h),然后初始化并测试CRT 视频接口以及显示内存(对于热启动这一步将跳过),在确认正常后,执行其内部的显示卡标准驱动程序(注意这里的驱动跟安装操作系统下的驱动是不一样的),这段代码会存放在C0000h,其主要目的是初始化显示卡.然后BIOS会打印显卡信息.接着BIOS开始检查其他设备,其包括对8259中断控制器测试,8253定时器测试,键盘复位和卡键测试,扩展I/O测试,设置硬件中断向量,扩展RAM测试(这里的RAM测试会检测除0-32K以外的整个RAM空间,对于热启动同样也会跳过这一阶段),.然后BIOS会搜索其他设备的ROM,如果找到,则会执行它们.接着测试ROM-BASIC的字节检查,测试磁盘驱动器(如:FDC等),测试打印机端口和RS-232,并设置他们的地址.然后打开NMI(不可屏蔽中断),最后就是调用Int 19h进行自举.这一阶段的自检如果发生错误,系统会判断其为一般性错误,并显示出相应的提示信息.在此过程中,BIOS会将检测收集到的数据保存在内存低1K--2K的区域,并将BIOS中断向量表,以及BIOS程序运行所需要的stack保存在内存低0K--1K的地方.下面就是系统自举工作了,系统调用int 19h进行自举,寻找启动设备,如:软驱,硬盘,光驱等等.找到后系统读取启动设备的0号逻辑扇区(如是软盘就读取0面0道1扇区的整个内容),并将读取的内容放到内存地址为0000:7C00的地方.当然,如果找不到启动设备,BIOS就会调用Int 18h,并给出相应的提示信息,然后进入ROM-BASIC.(有些机器会在等待一段时间后自动进入CMOS.如:很久以前海洋的AMD 386DX/40主板)至此,BIOS的引导程序结束,CPU开始执行0000:7C00处的代码.在这里需要说明一下的是,BIOS的引导程序是与操作系统无关的,但随后CPU开始执行的代码就开始与操作系统存在较大的相关性了,因此对于不同的操作系统,下面这一部分可能会存在着较大的不同.不过,从目的上来讲,它们是相同的,即都是为将要运行OS的内核(Kernel)作准备.进入这一部分的首要工作就是执行启动设备的引导程序.硬盘与软盘的对于引导程序的存放结构是不同的.硬盘有一个叫做MBR (Master Boot Record)的扇区,系统会首先执行它,以判断那个分区是启动分区,并读入该分区的第一个扇区,并执行.并且在这个扇区中还存放着硬盘分区表(DPT),这个表的地位相当重要,因为它包含了各个分区的诸如:分区类型,起始位置,结束位置等重要参数.下面我们来详细介绍一下MBR的结构.MBR的结构分为三部分,首先是可执行代码,占446个字节,然后是4个分区表,每个占16个字节,共64个字节,最后是签字AA55H.下表列出了分区信息的详细内容:长度描述0 字节分区状态0:非活动分区,80h活动分区(可引导)1 字节分区起始头2 字分区起始扇区和起始柱4 字节分区类型5 字节分区中止头6 字分区中止扇区和中止柱8 双字分区起始绝对扇区0Ch 双字分区扇区数然后我们开始介绍MBR中的可执行代码部分:首先,程序会检测MBR的签字是否合法,即判断其最后字是否为AA55h.通过后,将自身移动到内存中的其他地方,以备将来在此装入引导分区的Boot扇区.然后,程序检查四个分区的分区状态,找出活动分区,并将该分区的Boot扇区读入到0000:7C00h处,并检查其签字是否合法,在通过后,程序跳转到0000:7C00h处执行,即将控制权交给活动分区的Boot程序;对于软盘则没有那么复杂,软盘的第一个扇区就是它的Boot区,系统自举时将直接将其读入到0000:7C00h处并执行.从功能上来讲软盘与硬盘的Boot区是相同的,其任务都是将OS的内核(Kernel)读入到内存并执行.但具体来看,由于绝大多数OS的Kernel是以文件形式存放在磁盘上的,要读取它就要涉及到对文件系统的操作,这使得它们在实现上又是很不相同的.因此,对于Boot区的分析我们将放在后面的内容中具体介绍.2.保护模式简述最早的Intel系列的CPU只存在一种操作模式,即现在所说的实模式(Real Mode,以下简称RM).在Intel推出80286之后,为了增强CPU 的处理能力,同时也为了适应当时的软件开发需求,Intel提出了保护模式(Protected Mode,以下简称PM),但在80286下的PM由于CPU本身设计的问题,并没有使其发挥出很大的功效.在80386推出之后,Intel完善了 CPU的设计形成了最终的IA-32架构,并提出了另一种模式系统管理模式(System Management Mode).本章我们的讨论就围绕着这三种模式进行展开,并重点讨论PM.首先,对这三种模式做一简单概述.RM:此模式是主机在加电或复位后自动进入的模式,在此模式下其可以执行16位指令,并可以切换到PM或者SMM.PM:在此模式下,CPU能够支持其自身的32位特性,使自身处于最高性能表现.这些特性主要包括:1.最大可访问4GB内存空间.事实上,在RM下通过一些未公开的特性,也可以达到同样的效果,但其对于代码段和堆栈空间却是无效的.况且后面的所有特性都是基于PM的,对RM没有效果.2.虚拟存储.处于PM下的CPU其内存管理单元(MMU)支持这项特性.前面我已经说到,在PM下CPU最大寻址空间为4GB,而在实际中,我们并没有如此大的物理内存空间.因此通过MMU,可以将外存设备(如:硬盘)的一部分空间模拟成物理内存进行使用.3.地址映射.即MMU可以在地址使用前对其进行转换,即所谓的映射.4.改进的分段机制.本文后面将对此进行重点论述.5.内存保护与任务保护.即在PM状态下,引入了权限机制.通过权限控制可以达到保护相关代码和数据的目的.6.改进的寻址模式.在RM下,只有常数,BX或BP,SI或DI可以用来形成地址,而在RM下可以通过任意寄存器进行寻址,并且可以包含一个为2,4或8的比例因子.7.多任务支持.在PM下,CPU提供了特殊的机制能够进行快速的上下文切换.SMM:该模式为操作系统实现特定平台指定的功能提供了一种有效的机制.值得注意的是,在PM下,CPU允许在受保护的情况下,执行RM程序,这个特性被称为虚拟8086模式(Virtual-8086 Mode),但其本质上却不是真正的RM.对于三种模式关系的形象解释可以通过下图来描绘:正如上面所说的,只有在PM下,CPU才能充分发挥其自身的所有特性,而计算机在启动之后,默认的CPU操作模式却是RM.因此摆在我们面前的一个主要问题就是如何在RM与PM之间相互切换.那么如何在RM和PM之间相互切换呢.核心步骤其实很简单,只要改变CPU中的CR0寄存器中PE标志位的值,就可以实现.在PE=1时,CPU进入PM,而在PE = 0时,则进入RM.但这仅仅是整个切换过程中的一小部分,在进入保护模式之前我们还需要做很多事情,其中最关键的就是建立好一个被称为GDT的表.在谈到GDT之前,我们先回顾一下,在RM中,内存中寻址的方式---段:偏移量.其中段(Segment)表明了一个基地址,其最大长度固定为64KB(FFFFH),即16bit数所能表示的最大数值.而偏移量(Offset),就是指在指定段内的位置.由此可见,通过段+偏移量这种表示方式,就可以表示出内存中的绝对地址.需要指出的是,在CPU实际处理过程中,CPU 会将段寄存器的值左移动4位,再与偏移量相加,形成地址,放入20位的总线当中.在PM中,对于段模式来讲,上面的寻址方式,在大部分上仍然是适用的.但由于PM是工作在32位下的,因此上面的各个值,也就都相应的变成了32位.与 RM不同的是,在PM下,一个段的长度不再固定,其可以在CPU允许的规则下任意设置.并且CPU为段模式提供了保护机制,即增加了对自身的访问权限.因此在PM下,对于一个段,需要有三个变量给于描述,即基地址,段界限和访问权限.事实上,CPU将这三个值保存为一个64位长的段描述符.但出于兼容性的考虑,Intel并没有将段寄存器改为64位可用--虽然,段寄存器在事实上确是 64位,但对于程序来讲,高于16位的部分却是不可见的--因此,我们需要另一种方法去存放这些数据.Intel选择了将这些段描述符统统存入到一个全局数组中的方法,在访问段时,向相应的段寄存器填入该数组的下标值来实现间接引用.这个全局数组就称其为GDT(全局描述符表).由于GDT可以存放在内存中的任何位置,因此要引用它,就必须知道他的入口地址.Intel为我们提供了GDTR寄存器和LGDT指令.其中GDTR寄存器存放的是GDT的入口地址(32位)和其界限(16位),共48位.这里的入口地址是一个线性地址,界限则是表的字节长度减一.可见该表最多可以长达64KB,存储8192条描述符号,而LGDT指令的作用就是将GDT装载到放入GDTR寄存器当中.顾名思义,GDT是全局描述符,因此其在内存中存在且仅存在一个,并且它的存在对于所有的任务来讲,都是可见的.显然,这种做法对于多任务来讲是不易管理的.因此,Intel又引入了LDT(局部描述符表),该描述符与GDT不同之处在于,LDT在系统中可以有许多个,但每个任务只允许有一个LDT,且其只能该任务自身可见.其与GDT的主要关系在于,每一个LDT都会作为一个段,存入GDT中.由于CPU在任何时刻只能执行一个任务的代码,因此存储LDT所需要的寄存器也就只需要一个,Intel将其命名为LDTR,与GDT相同,Intel为装入LDT设置了LLDT指令.与GDT不同的是,LLDT指令的操作数却是一个16位的段选择子,即前面说到的要装入的LDT在GDT中的索引值.这里需要指出的是,LDT并不是必须的,你的程序可以选择使用,或者不使用它.前面提到了一个新概念--段选择子.我们说段选择子是要引用段在GDT或LDT中的索引值,其实这种说法并不正确.因为段选择子除了含有索引值以外,它还包含了其他内容.段选择子的结构如下图:由于是从Word文档中复制过来,表格无法显示,详情请查阅相关文档。
CompTIA Strata PC OSE操作系统工程师实训(验)项目单Training Item编制部门:编制人:编制日期:3.EXT.exe:将压缩在CAB包中的CAB文件释放到硬盘上,运行EXT后按提示输入Win98安装文件的位置、所有释放的CAB文件位置和存放位置即可,比直接使用Extract.exe命令简单得多。
用于升级BIOS的干净启动盘在升级主板或显卡的BIOS时需要制作一张干净的启动盘。
所谓干净的启动盘,就是指这张启动盘除了Msdos.sys、Io.sys、三个系统文件外,不允许再有任何驻留内存的程序,如光驱驱动程序、Autoexec.bat、Config.sys等文件存在。
这样在升级BIOS时才不会与系统发生冲突,保证更新BIOS成功和可靠,那么,怎样制作一张干净的启动盘呢?其实方法很简单,只要我们进入纯DOS状态下(不是“程序/MS-DOS方式”,而是“关闭系统/重新启动计算机并切换到DOS方式”的DOS窗口),用“FORMAT A:/S”命令制作的启动盘才是一张真正干净的启动盘。
另外我们也可以用“SYS A:”命令传送系统文件到A盘,也只有这样的启动盘才可以用于BIOS升级。
在DOS下制作启动盘当Win98系统崩溃,无法进入Win98的图形界面,你想重装系统又没有现成启动盘,这时除了到别人的机器上制作启动盘和用光盘启动外,假如你的系统仍然能够进入DOS状态,那么你可以运行Win98目录Command下的Bootdisk.bat批处理文件,运行后会提示你插入一张已经格式化的软盘,回车后,一张启动盘很快就制作完成了。
进入Win98图形界面的启动盘大多数用过Win98启动盘的朋友可能有同感:虽然它名曰启动盘,但实际上无法用Win98启动盘启动进入Win98。
解决这一问题的方法是:将C盘根目录下的msdos.sys文件拷贝到Win98启动盘,覆盖掉启动盘根目录下的同名文件即可(注意如果在Win98根目录下没有显示msdos.sys和io.sys,就需要将文件夹属性中的“显示所有文件”选项选中)。