计算机开机奥秘

来源:互联网 发布:java人民币大小写转换 编辑:程序博客网 时间:2024/05/08 08:52

计算机开机奥秘

几乎每天我们都要接触计算机,拿到计算机第一步就是开机,随手的一个开机动作却是蕴含了丰富的知识,深入浅出,这就是计算机知识的特点。

说到计算机开机启动,必须说一些基础知识,这些知识在介绍开机过程中都是必须要用到的。

1 基础知识模块

1.1 BIOS模块

谈到计算机开机,无法避及BIOS,但是,何为BIOS呢,在这里详细给大家介绍BIOS究竟为何物。

BIOS简介

首先,BIOS,是英文Basic Input Output System的缩写,也就是基本输入输出系统,其实它的全称应该是ROM-BIOS,意思是只读存储器基本输入输出系统。

一开始觉得它的命名很是奇怪,但BIOS的历史已经很长了,如果以现在的观点来看,恐怕难以理解。追溯到BIOS出现年代,大约1981年,在IBM研究自己的第一部个人计算机-IBM PC时,他们的工程师将开机程序的前导程序代码、计算机最重要的基本输入输出的程序、系统设置信息、开机上电自检程序和系统启动自举程序都放在了一块大约大小为32KB的PROM(Programmable ROM,可编程只读存储器)中。这些代码就叫做BIOS。所以我们所说的BIOS其实本质是代码,并不是硬件。

前面说到BIOS应该称作ROM-BIOS,从最初BIOS命名我们就可以看出,BIOS和硬件有着不可分割的联系。事实上,BIOS程序被固化到计算机主板上的一个ROM芯片上了。可以说BIOS是联系软件硬件的桥梁,这里说的软件就是操作系统,现在所用的BIOS芯片一般都是EEPROM(电可檫写只读ROM),它不需要供电也可以保持数据。总的来说,BIOS为计算机提供了最底层的、最直接的硬件设置和控制。

BIOS主要功能

       说完BIOS的历史,接着就要说BIOS究竟有什么功能了,认识BIOS的功能,必须知道BIOS芯片中到底固化了什么代码,这些代码是什么作用,前面提到过,BIOS芯片中主要存放了四种程序代码:

 

(1)自诊断程序:通过读取CMOS(接下来介绍)RAM(Random Access Memory,随机存储器)中的内容识别硬件 设置,并对其进行自检和初始化;

(2)CMOS设置程序:引导过程中,按特殊热键启动,设置完成,设置信息存入CMOS RAM中;

       (3)系统自举装载程序:在自检成功后将磁盘相对0道0扇区上的引导程序装入内存,让其运行以装入操作系统;

       (4)主要I/O设备的驱动程序和中断服务:由于BIOS直接和系统硬件资源打交道,因此总是针对某一类型的硬件系统,而各种硬件系统又各有不同,所以存在各种不同种类的BIOS,随着硬件技术的发展,同一种BIOS也先后出现了不同的版本。

 

       在加电自检(Power On Self Test,简称POST)阶段,BIOS将会检查电脑是否良好,通常完整的POST自检过程包括对CPU,640K基本内存,1M以上的拓展内存,ROM,主板,CMOS存储器,串并口,显示卡,软硬盘子系统以及键盘进行测试,一旦在自检中发现问题,对于非严重故障系统将会给出提示信息或鸣笛警告,等待用户处理而对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,也就不能给出任何提示或是信号。

       在初始化阶段,BIOS将会创建中断向量,设置寄存器,对一些外部设备进行初始化和检测等等,其中很重要的一部分是BIOS设置,主要是对硬件设置的一些参数,当电脑启动时会读取这些参数(CMOS RAM存储的数据),并和实际硬件设置进行比较,如果不符合,会影响系统的启动。

       BIOS中的引导程序,功能是引导操作系统,BIOS会先从硬盘的开始扇区读取引导记录,如果没有找到,那么会在显示器上显示没有引导设备,如果找到引导记录,那么BIOS会把电脑的控制权转给MBR(主引导扇区),并由MBR把操作系统装入计算机。在计算机启动成功后,BIOS的这部分任务就完成了。

从BIOS功能来看,BIOS的重要性不言而喻。

1.2 CMOS模块

       前面在介绍BIOS时提到了CMOS RAM,那么什么是CMOS呢,它有什么作用呢?

CMOS简介

       CMOS(Complementary Metal OxideSemiconductor),互补金属氧化物半导体。它是指制造大规模集成电路芯片用的一种技术或用这种技术制造出来的芯片。CMOS是电脑主板上的一块可以读写的RAM芯片,用来保存BIOS设置完电脑硬件参数后的数据,这个芯片仅仅用来存放数据,通常情况下,CMOS芯片都集成在主板的BIOS芯片里面,所以主板上一般看不到CMOS芯片。由于RAM(随机存储器)的特点,也就是断电后数据消失,而CMOS RAM又要保存数据,因此CMOS RAM都有纽扣电池供电,防止数据消失。CMOS RAM一般都有128字节到256字节的容量。

CMOS 功能

  CMOS中保存了当前系统的硬件配置信息和用户设定的某些参数。因此,在开机过程中,CMOS作用主要是为BIOS提供硬件配置信息和用户设定的参数。

1.3硬盘MBR模块

       BIOS并不是真正我们要使用的操作系统,BIOS提供了操作系统控制硬件的桥梁,操作硬件的控制权从BIOS过渡到操作系统的过程就是BIOS将加载操作系统的主控权交给硬盘内的主扇区(Master Boot Record,MBR)的过程。

计算机硬盘

      操作系统装在硬盘上,数据都存储在计算机硬盘上,硬盘对于计算机来说无比重要。

       现代计算机硬盘是由一个或是几个表面镀有磁性物质的金属或玻璃等物质盘片以及盘片两面所安装的磁头和相应的控制电路组成,其中盘片和磁头密封在无尘的金属壳中。

       硬盘存储数据是根据电磁转换原理实现的,硬盘工作时,硬盘盘片以设计转速高速旋转,设置在盘片表面的磁头则在电路控制下径向移动到指定位置后然后将数据存储或是读取出来。当系统向硬盘写入数据时,磁头中“写数据”电流产生磁场使得盘片表面磁性物质状态发生改变,并在写电流磁场消失后仍能保持改变后的状态,那么我们就称数据被成功存储在了硬盘的某个区域中,知识原来的人类能够认知的数据通过转换变成电流信号,再通过电磁转换,最后信息转换成了硬盘上的盘片表面磁性物质的物质状态。当系统从硬盘中读取数据时,磁头经过盘片指定区域,盘片表面磁场能够使得磁头产生感应电流或是线圈电阻的阻抗发生变化,经相关电路处理后还原成数据,和写数据是一个相反的过程。

硬盘是多个盘片组成的,对于每一个盘片,有磁道,扇区的概念。由于磁头只径向移动,而且盘片是绕轴转动的,因此磁头在一个径向位置进行读写时,盘片相对盘片的移动路径是一个圆,这个圆就叫做硬盘上的磁道,一个硬盘盘片上有多个磁道,那么其他条件相同时,如果硬盘磁道越多,硬盘的存储量就越大。一个磁道上可以存储一定的数据,但是操作系统要求读写数据往往并不需要一次读写那么多,于是一个磁道又被划分若干段,每段称为一个扇区,一个扇区只能存放512KB的数据,计算机对硬盘的读写,一次性读写一个扇区的内容,同一个磁道上的扇区都是有编号的,而且每个扇区并不仅仅是由512KB字节组成的,在这些由计算机存取的数据的前后两端,都另有一些特定的数据,这些数据构成了扇区的界限标志,标志中含有扇区的编号以及其他信息。而计算机就凭着这些标志来识别一个磁道上的不同扇区。

       那么我们日常存储数据的数据在硬盘上究竟是怎样分布的呢,是连续还是不连续存储呢?

       在解释清这个问题时,不得不提及硬盘上的数据按照不同的特点和作用大致分为5个部分,分别为:MBR区、DBR区、FAT区、DIR区和DATA区。我们先简单介绍一些与问题有关的FAT区。

       FAT(File Allocation Table,文件分配表)区。在解释这个FAT区之前,必须要说一说簇的概念。这就与数据在硬盘上存储分布情况有关了,文件占用磁盘空间时基本单位并不是字节而是簇。而簇的基本单位就是我们前面提到的扇区,一个簇究竟由几个扇区组成,这就要看硬盘容量了,可能是4、8、16、32、64扇区等,同一个文件的数据并不一定完整的存放在磁盘里的一个连续区域内,而往往会分成若干段,像一条链子一样存放。这种存储方式称为文件的链式存储,那么不同的簇组成的文件信息链计算机是怎么识别的呢,原来FAT区里就保存了簇与簇之间的连接信息,FAT区存储了文件分配表,在这个表里有很多表项,每项记录一个簇的信息,表中记录了哪些簇已经被文件占用,已经占用的簇的后继内容的下一个簇的簇号,对于文件最后一簇,记录本簇无后继簇。并且簇的分布也不是物理上连续的,经常是一个分区内零散分布。

       现在我们就清楚了,数据在硬盘上是以簇为单位存储的,一个文件数据通过簇链来存储,簇的基本单位为扇区,磁头一次性读写一个扇区,簇的物理位置是

零散分布的。

硬盘分区

       硬盘分区实质上是对硬盘的一种格式化,然后才能使用硬盘保存各种信息。创建分区时,就已经设置好了硬盘的各项物理参数,指定了硬盘主引导记录(即Master Boot Record,一般简称为MBR)和引导记录备份的存放位置。而对于文件系统以及其他操作系统管理硬盘所需要的信息则是通过之后的高级格式化,即Format命令来实现。 其实完全可以只创建一个分区使用全部或部分的硬盘空间。但不论划分了多少个分区,也不论使用的是SCSI硬盘还是IDE硬盘,必须把硬盘的主分区设定为活动分区,才能够通过硬盘启动系统。

硬盘分区之后,会形成3种形式的分区状态;即主分区、扩展分区和DOS分区

非DOS分区

在硬盘中非DOS分区(Non-DOS Partition)是一种特殊的分区形式,它是将硬盘中的一块区域单独划分出来供另一个操作系统使用,对主分区的操作系统来讲,是一块被划分出去的存储空间。只有非DOS分区的操作系统才能管理和使用这块存储区域

主分区

主分区则是一个比较单纯的分区,通常位于硬盘的最前面一块区域中,构成逻辑C磁盘。其中的主引导程序是它的一部分,此段程序主要用于检测硬盘分区的正确性,并确定活动分区,负责把引导权移交给活动分区的DOS或其他操作系统。此段程序损坏将无法从硬盘引导,但从软驱或光驱引导之后可对硬盘进行读写。

扩展分区

扩展分区的概念是比较复杂的,极容易造成硬盘分区与逻辑磁盘混淆;分区表的第四个字节为分区类型值,正常的可引导的大于32mb的基本DOS分区值为06,扩展的DOS分区值是05。如果把基本DOS分区类型改为05则无法启动系统,并且不能读写其中的数据。

如果把06改为DOS不识别的类型如efh,则DOS认为该分区不是DOS分区,当然无法读写。很多人利用此类型值实现单个分区的加密技术,恢复原来的正确类型值即可使该分区恢复正常。

分区格式

FAT16

对电脑老手而言,对这种硬盘分区格式是最熟悉不过了,我们大都是通过这种分区格式认识和踏入电脑门槛的。它采用16位的文件分配表,能支持的最大分区为2gb,是曾经应用最为广泛和获得操作系统支持最多的一种磁盘分区格式,几乎所有的操作系统都支持这一种格式,从DOS、Win 3.x、Win 95、Win 97到Win 98、Windows NT、Windows 2000、Windows XP以及Windows VistaWindows 7的非系统分区,一些流行的Linux都支持这种分区格式。

但是FAT16分区格式有一个最大的缺点,那就是硬盘的实际利用效率低。因为在DOS和 Windows 系统中,磁盘文件的分配是以簇为单位的,一个簇只分配给一个文件使用,不管这个文件占用整个簇容量的多少。而且每簇的大小由硬盘分区的大小来决定,分区越大,簇就越大。例如1GB的硬盘若只分一个区,那么簇的大小是32KB,也就是说,即使一个文件只有1字节长,存储时也要占32KB的硬盘空间,剩余的空间便全部闲置在那里,这样就导致了磁盘空间的极大浪费。FAT16支持的分区越大,磁盘上每个簇的容量也越大,造成的浪费也越大。所以随着当前主流硬盘的容量越来越大,这种缺点变得越来越突出。为了克服FAT16的这个弱点,微软公司在 Windows 97 操作系统中推出了一种全新的磁盘分区格式FAT32。

FAT32

这种格式采用32位的文件分配表,使其对磁盘的管理能力大大增强,突破了FAT16对每一个分区的容量只有2GB的限制,运用FAT32的分区格式后,用户可以将一个大硬盘定义成一个分区,而不必分为几个分区使用,大大方便了对硬盘的管理工作。而且,FAT32还具有一个最大的优点是:在一个不超过8GB的分区中,FAT32分区格式的每个簇容量都固定为4KB,与FAT16相比,可以大大地减少硬盘空间的浪费,提高了硬盘利用效率,但是,FAT32的单个文件不能超过4G。

支持这一磁盘分区格式的操作系统有Windows 97/98/2000/XP/Vista/7/8等。但是,这种分区格式也有它的缺点,首先是采用FAT32格式分区的磁盘,由于文件分配表的扩大,运行速度比采用FAT16格式分区的硬盘要慢;另外,由于DOS系统和某些早期的应用软件不支持这种分区格式,所以采用这种分区格式后,就无法再使用老的DOS操作系统和某些旧的应用软件了。

NTFS

NTFS是一种新兴的磁盘格式,早期在 Windows NT网络操作系统中常用,但随着安全性的提高,在 Windows Vista和 Windows 7操作系统中也开始使用这种格式,并且在 Windows Vista 和 Windows 7 中只能使用NTFS格式作为系统分区格式。其显著的优点是安全性和稳定性极其出色,在使用中不易产生文件碎片,对硬盘的空间利用及软件的运行速度都有好处。而且单个文件可以超过4G。它能对用户的操作进行记录,通过对用户权限进行非常严格的限制,使每个用户只能按照系统赋予的权限进行操作,充分保护了网络系统与数据的安全。

exFAT

exFAT(全称Extended File Allocation Table File System,扩展FAT,即扩展文件分配表)是Microsoft在Windows Embeded 6.0(包括Windows CE 6.0、Windows Mobile)中引入的一种适合于闪存的文件系统。对于闪存,NTFS文件系统过于复杂,exFAT更为适用。

相对FAT文件系统,exFAT有如下好处:

增强了台式电脑与移动设备的互操作能力

单文件大小最大可达16EB(2,305,843,009,213,693,952字节,就是16M个TB,1TB=1024G)

簇大小可高达32MB

采用了剩余空间分配表,剩余空间分配性能改进

同一目录下最大文件数可达65 536个

支持访问控制

支持TFAT

采用该文件系统的闪存盘不支持Windows Vista ReadyBoost。Windows Vista SP1支持该文件系统。

请注意:exFAT只是一个折中的方案,只为U盘而生。

需要严格注意的是,这种分区只有Vista、Win7、Win8等系统支持,其他系统不能使用,xp可以通过替换驱动文件的方式支持此格式,但是只能读写,不能格式化。

       每一个分区的最前端都会有一个引导扇区

MBR

       MBR(master boot record ,主引导扇区),BIOS在POST阶段检测完成后,将磁盘相对0道0扇区上的引导程序装入内存,让其运行,以装入操作系统。实际上BIOS在执行自己固有的程序以后就会jump到mbr中的第一条指令,将系统的控制权交给mbr来执行。MBR大小为512Bytes,其中的内容分为四个部分。第一部分,也是占据空间最大的部分,叫做Bootloader,也就是主引导程序,也就是BIOS将系统控制权移交的对象,当Bootloader取得系统的控制权以后,Bootloader运行自己的代码,在Bootloader运行过程中主要做四件事。第一,扫描分区表,找到一个激活(可引导)分区;第二,找到激活分区的起始扇区;第三,将激活分区的引导扇区装载到内存7C00处;第四,将控制权交给引导扇区代码;当引导扇区代码开始执行时,操作系统就开始启动了。

       MBR中的第二部分是DPT(Disk Partition Table)。操作系统为了便于用户对磁盘的管理,加入了磁盘分区的概念。即将一块磁盘逻辑划分为几块。硬盘分区表可以说是支持硬盘正常工作的骨架,操作系统正是通过它把硬盘划分为若干个分区,然后再在每个分区里面创建文件系统,写入数据文件。主分区表,也就是MBR中的分区表总是位于0柱面、0磁头、1扇区(MBR在硬盘中的位置),分区表有64字节。分区表一共由四项组成,每项16个字节,每项表示一个分区,因此,一个分区表至多只能表示4个分区。主分区表上的四项用来表示主分区和拓展分区的信息,而扩展分区最多只能有一个,所以硬盘最多可以有四个主分区或是三个分区,一个扩展分区。余下的分区表是表示逻辑分区的,逻辑区都是位于扩展分区里面的,并且逻辑分区的个数没有限制。

       分区表链实际上相当于一个单向链表结构。第一个分区表,也即主分区表,可以有一项 描述扩展分区。而这一项就相当于指针,指向扩展分区。然后我们根据该指针来到扩展分 区起始柱面的0头1扇区,找到第二个分区表。对于该分区表,通常情况下:第一项描述了扩展分区中第一个分区的信息,第二项描述下一个分区,而这第二项就相当于指向第二个分 区的指针,第三项,第四项一般均为0。我们可以根据该指针来到扩展分区中第二个分区起 始柱面的0头1扇区,找到第三个分区表。以此类推,直到最后一个分区表。而最后一个分 区表只有第一项有信息,余下三项均为0.相当于其指针为空.所以只要找到了一个分区表就可 以推导找出其后面所有分区表。不过该分区表前面的分区表就不好推导出来了。但令人高兴 的是这个链表的头节点,也即主分区表的位置是固定的位于(0柱面,0磁头,1扇区)处, 我们可以很轻易的找到它,然后把剩下的所有分区表一一找到。

       除了前两项,最后的两个字节是固定的“55 AA”用来标示MBR,相当于MBR的身份证。

计算机开机模块

       说了这么多,终于来到了计算机开机模块,在知道了上述基础之后,我相信,理解计算机如何开机就非常简单了。

       进入正题,按下电源开关,主板开关电路运作,使得电源开始向主板和其他设备供电。主板上的控制芯片组向CPU发出RESET信号,让CPU内部自动恢复到初始状态,这时CPU是不工作的。当芯片组检测到电源已经稳定供电后,便撤去CPU的RESET信号,CPU开始运作,首先CPU从地址FFFF0H处开始执行第一条跳转指令,转到系统BIOS中真正的启动代码处。

       接着,BIOS启动代码首先执行加电自检,即POST,BIOS检测系统的一些关键设备是否存在和能否正常工作,这是电脑是黑屏,接着BIOS查找显卡BIOS,存放显卡BIOS的只读芯片起始地址通常在C0000H处,BIOS找到显卡BIOS后就调用它的初始化代码,由显卡BIOS来初始化显卡,此时会在屏幕上显示出一些初始化信息,不过用户一般看不清就已经闪过了。

       在BIOS找完所有其他设备的BIOS之后,系统BIOS将会显示自己的画面,画面里会显示BIOS查找的硬件信息,还有BIOS类型、序列号和版本号等内容。这就是我们开机时感觉看到的第一个画面。

       接着系统BIOS将会检测和显示CPU类型和工作频率,然后开始测试RAM,同时在屏幕上显示内存测试的进度。然后BIOS将开始检测系统中安装的一些标准硬件设备,包括硬盘,光驱等等,然后就是检测即插即用的设备。

       到这里,所有的硬件都已经检测配置完毕了,系统BIOS会重新清屏并在屏幕上方显示出一个表格,其中概要地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数,这个表就是配置表。

       接下来,系统BIOS将会更新ESCD(扩展系统配置数据),ESCD是系统BIOS用来和操作系统交换硬件配置信息的一种数据,这些数据被存放在CMOS中。通常ESCD数据只在系统硬件配置发生改变后才会更新,因此并不是每次启动都能看到“Update ESCD……Success”这样的信息。

       ESCD更新完毕以后,系统BIOS的启动代码将根据用户指定的启动顺序从硬盘或是光驱启动。

       如果BIOS里面设置的是从硬盘启动,那么BIOS在执行自己固有的程序以后就会jump到mbr中的第一条指令,将系统的控制权交给mbr来执行。当Bootloader取得系统的控制权以后,Bootloader运行自己的代码,在Bootloader运行过程中主要做四件事。第一,扫描分区表,找到一个激活(可引导)分区;第二,找到激活分区的起始扇区;第三,将激活分区的引导扇区装载到内存7C00处;第四,将控制权交给引导扇区代码,引导扇区负责将CPU的控制权交给操作系统;当引导扇区代码开始执行时,操作系统就开始启动了。

       计算机就开始进入我们熟悉的操作系统中了,至此,计算机启动过程完成了。

      

原创粉丝点击