摘要:详细研究了计算机的开机启动及系统加载等内容,结合硬件和软件之间的协同调用机制,给出了从计算机触发开机按钮到加载操作系统,最后出现开机界面整个过程的相对完善的论述。对于计算机初学者全面认识开机过程十分有帮助。
0引言
对于大多数非计算机类相关专业的人来说,对计算机的认识只停留在掌握其基本操作的层面上,并不十分了解其内部运行原理,探索开机过程可以帮助他们从更深层次认识计算机。计算机从接通电源到出现操作界面经历了一系列非常复杂的过程。首先计算机要对所有关键的硬件设备按一定顺序依次进行检测和配置,然后根据引导扇区从存储设备中加载操作系统,并进一步完成系统初始化工作。了解计算机开机启动过程,帮助用户加强对计算机的日常维护,通过升级硬件性能提高开机速度,使想要探究计算机科学技术的人对计算机的运行机制有一个初步认识。
1加电自检
计算机的初始化启动过程称为自举,也叫“Boot”(引导)。名词来源于一个说法,计算机启动的概念在刚开始确立的时候是矛盾的:计算机必须要先启动程序,机器才能运行,然而计算机不运行,机器就无法启动,究竟应该如何启动计算机曾经使人们百思不得其解。在经历了很长一段时间之后,最终工程师们想尽各种办法克服了这个矛盾。将开机程序写入内存,从而把计算机自检与操作系统加载连接起来,终于使计算机能够正常启动运行。
1.1CPU准备工作
当人们按下开机按钮时,电源开始向主板和其他设备供电。由于开始时电压不太稳定,主板上的控制芯片组会向CPU发出并保持一个宽度大于2 ms的正脉冲信号即RESET(复位)信号。一般经过100~500 ms电源将产生电压稳定的逻辑信号,当芯片组检测到这个信号时便撤去RESET信号。电脑中央处理器(Central Processing Unit, CPU)开始从地址FFFF0000H处读取指令,此时基本输入输出系统(Basic Input and Output System, BIOS)根据存放在这里的跳转指令找到自己真正的启动代码线程,开始一系列的检测和配置工作。
1.2系统BIOS的基本功能
在计算机系统中起着重要作用的BIOS是直接与硬件打交道的底层代码,它保存着计算机最重要的基本输入输出程序、开机自检程序和系统自启动程序。它由一种特殊的电脑主板上的电池来供电,从随机存取存储器(Complementary Metal Oxide Semiconductor, CMOS)中读写系统设置的具体信息,为操作系统提供了控制硬件设备的基本功能。BIOS包括有系统BIOS(即主板BIOS),显卡BIOS和其他设备(例如集成驱动器电子控制器、小型计算机系统接口卡或网卡等)的BIOS。BIOS一般存放在只读存储器(Read Only Memory, ROM),可以永久性地保存数据和程序信息,即使机器停电,这些数据也不会丢失。
1.3BIOS的检测过程
系统BIOS的启动代码首先进行硬件自检(PowerOn SelfTest, POST),主要检测系统中一些关键设备是否存在和能否正常工作,如内存和显卡等。由于此时显卡还没有初始化,如果在自检过程中发现硬件有问题系统会发出蜂鸣,声音的长短和次数代表了不同的错误类型。如果没有错误发生,POST过程会很快结束,之后会调用其他代码来进行更完整的硬件检测。
接下来系统BIOS将查找显卡的BIOS(在地址C0000H处),找到显卡BIOS之后就调用它的初始化代码来初始化显卡,对于大多数显卡来说都会将一些初始化信息显示在屏幕上,例如生产厂商、型号等基本信息,但几乎是一闪而过。系统BIOS接着会查找其他设备的BIOS程序,调用它们的初始化代码来初始化相关设备。最后,系统BIOS将显示出它自己的启动画面,列出系统BIOS的类型、序列号和版本号等内容。
下一步,系统BIOS将检测和显示CPU的类型和工作率,接着测试所有的随机存取存储器(Random Access Memory, RAM),同时在屏幕上显示内存测试的进度,内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,包括硬盘、CDROM等。接下来将要检测和配置系统中安装的即插即用设备,显示出检测到的设备名称和型号信息,为这些设备分配可用资源[1]。
所有硬件设备都检测完毕之后,屏幕上会显示出各种标准硬件设备使用的资源和相关工作参数等信息。然后系统BIOS将更新扩展系统配置数据(Extended System Configuration Data, ESCD),系统BIOS通过它来与操作系统交换硬件配置信息,这些数据被存放在CMOS中,通常ESCD数据只在系统硬件配置发生变化时才会更新。
2主引导记录
硬件自检完成之后,系统BIOS的操作界面上会显示出用户指定的启动设备顺序,所列外部存储设备可以是软盘、硬盘或者是光盘等。排在前面的设备拥有优先转交控制权,BIOS按照启动顺序读取设备中的主引导记录(Master Boot Record, MBR),放到7C0000H内存地址中,从MBR中查找接下来要读取的信息。
2.1主引导记录的结构
主引导记录位于硬盘的零柱面零磁头的第一个扇区上,共512 B。如果这512 B的最后两个字节是55AAH,则表示这个设备是可以启动的,如果不是则表示这个设备不能启动,需要把控制权转交给启动顺序表中的下一个设备。标准MBR的字节码含义如表1所示。
2.2分区表
找到主引导记录之后,系统开始读取有效的分区表。分区表的长度为64 B,细分成四个主分区,每个主分区占用16 B。硬盘分区有很多好处,可以在不同的分区中分别装入不同的操作系统,实现多系统共存。主引导记录通过分区表的第一个字节判断该主分区是否为激活分区,四个主分区中只有一个是激活的。分区表结构如表2所示。
从表2中可以看出,主分区的扇区个数共占4 B,故一个主分区的最大扇区总数为232个。如果每个扇区大小为512 B,则每个分区最大为2 TB(1 TB=240 B)。扇区的逻辑地址也占用32 bit,故硬盘最大可利用空间为2 TB。因此,如果要扩大硬盘空间有两个办法:一是提高每个扇区的字节数,二是增加扇区总数。目前硬盘存储容量已经达到了3 TB的阶段,相关技术还在持续发展中,存储容量仍将有所提升[2]。
3硬盘启动
3.1通过主分区启动硬盘
计算机读取激活分区的第一个扇区卷引导记录(Volume Boot Record, VBR),也叫做卷引导扇区或分区引导记录、分区引导扇区,通过主分区逻辑地址的起始地址找到相对应的VBR。如果存储设备未被分区,如软盘,则VBR位于该设备的第一个扇区。VBR中包含有很多信息,比如,每个扇区的字节数,每一簇包含的扇区数,保留区的扇区大小,文件分配表(File Allocation Table, FAT)中的文件数目,每一个FAT所占用的扇区大小,存放根信息的簇的位置等信息。通过VBR系统BIOS可以找到操作系统在这个分区中的具体位置,然后计算机将开始查找地址信息加载操作系统。从图1可以看到整个硬盘的逻辑结构[3]。
3.2通过扩展分区启动硬盘
四个主分区表中有且仅有一个区可以被定义成扩展分区(Extended Partition, EP),扩展分区中又有多个逻辑分区。计算机首先读取扩展分区的第一个扇区即“扩展引导记录”(Extended Boot Record, EBR),EBR中包含一张64 B的分区表,扩展分区可以包含无数个逻辑分区。但是,计算机很少选择这种方式启动操作系统。如果操作系统安装在扩展分区,一般会选择通过启动管理器的办法启动操作系统。
3.3通过启动管理器启动硬盘
在这种情况下,计算机在读取MBR时不会把控制权转交给某一分区,而是运行事先安装的启动管理器,由用户选择要启动的操作系统。在Linux系统下的启动管理器(G Rand Unified Boot loader, Grub)以MBR的前446 B作为自己的开始执行程序,可以选择操作系统分区上的不同内核,也可以向这些内核传递启动参数。
3.4文件系统
在操作系统中,与文件和目录相关的子系统称为文件系统,用来组织和管理文件。它把存储空间组织成物理位置,并提供一种可以对存放于其中的数据进行索引的机制。并且建立按层次安排的索引关系,将磁盘的物理分区转换成逻辑分区,再把数据分配到逻辑分区的位置。微软系统常用的文件系统主要有FAT16、FAT32和NTFS(New Technology File System)等。
FAT16即16位的文件分配表,使用最为广泛,在微软等的操作系统中,磁盘文件的分配以“簇”为单位,无论该文件占用整个容量的比例是多少,每个簇只对应一个文件使用,且它最大只能支持2 GB的分区,因此它存在硬盘实际空间利用率低的缺点。随着电脑硬件性能的提高,微软推出了增强的文件系统FAT32,它可以支持的最大磁盘大小为2 TB,采用更小的簇可以更有效地保存信息,FAT32文件系统可以重新定位根目录和使用FAT的备份副本,此外,它的启动记录被包含在一个含有关键数据的结构中,减少了电脑系统崩溃的可能性。NTFS是随着微软NT操作系统而产生的,它的优点是安全性和稳定性较强,在使用中不易产生文件碎片。NTFS可以支持的文件大小达到64 GB,远远高于FAT32下的4 GB,而且它可以支持长文件名[4]。
4加载操作系统
操作系统确定之后,它的内核先被载入内存,进行系统初始化,加载设备驱动程序。在Linux系统下,首先载入/boot目录下的操作系统kernel(内核),kernel是操作系统的核心部分,主要功能有控制和管理事件的调度和同步、进程间的消息传递、存储器管理和进程管理等。磁盘文件系统挂载,内核加载成功后,首先运行磁盘文件系统下/sbin /init中的程序,它根据配置文件产生init进程。这是Linux启动后的第一个进程,设置进程控制块中的进程识别号PID(Process Identification,PID)编号为1,其他进程都在它之后产生,为其子进程。然后init线程开始加载系统的各个模块,比如窗口程序和网络程序,最后执行/bin/login程序,出现登录界面,用户输入用户名和密码。成功登录之后,系统启动过程便顺利完成,接下来用户便可以进行正常的日常使用了。
5结论
计算机启动过程涉及到计算机底层硬件和系统软件等知识,了解整个过程之后,可以在此基础上加强对计算机系统的认识和维护。如果在启动计算机的过程中发生问题,用户可以根据问题产生的不同阶段进行分析,并找到解决办法,使计算机成功运行起来。
参考文献
[1] 孙维连,于莉莉,单琳娜. 硬盘维护与数据恢复[M]. 北京:中国水利水电出版社,2007.
[2] 赵乾伟. 电脑硬盘终极应用[M]. 北京:人民邮电出版社,2006.
[3] 阮一峰. 如何变得有思想[M]. 北京:人民邮电出版社,2014.
[4] 李换双,潘平,罗辉,等.计算机安全漏洞及防范研究[J].微型机与应用,2013,32(7):64-65,68.