从硬件到软件介绍计算机是如何启动的

    这是我最近阅读操作系统书籍以及查阅网上资料获得的收获,技术不牢,如有错误或疑问欢迎各位提出。

硬件部分

1.接通电源

插上电源线,首先ATX电源接入电,ATX电源先把220V的交流变成了直流(不稳定),然后通过变换器把直流变成交流,最后又把交流变成直流(稳定)输出到主板。同时实时时钟开始工作,向CMOS电路和开机电路发送实时时钟信号。

2.按下开机键

当你按动电源键的时候,开关元件会通过物理方式接通电路。
这时主板其待命电压自达南桥芯片(输出/输入控制器中心)或I/0芯片
CMOS电路回侦测到一个电压跳变,此时电源接头的第14引脚变成低电平。
南桥芯片发出指令给IO芯片,ATX电源全面工作。

在30MS(30毫秒,也就是一刹那)后,ATX电源内部的智能监测电路对ATX电源输出的各组电压进行检测(如有任何一组电压有短路,漏电等现象,ATX电源会切断所有的电压输出,这是ATX电源的自我保护)

电源接头的各个引脚向主板的各大系统和各个硬件输出相应的电压。

3.准备复位信号

所有供电输出无误后的100-500ms后,ATX电源会由第8引脚向主板发送出3V-5V的PowerGood信号,此信号分别提供给CPU、北桥和南桥,其中进入南桥的PowerGood信号作用在内部的复位模块上,另外,PowerGood信号经过南桥连接到系统的时钟!芯片的RST端,作为RST信号(复位信号)。

有了RST信号后,时钟芯片开始工作,并向主板发送各种频率的时钟信号,有了时钟信号南桥内部的复位模块开始工作。

这时北桥和CPU等主板的硬件设备开始复位。

4.CPU运行

电源管理芯(电源IC)在供电,
PG信号都正常的情况下会发出1-5组高频控制信号(具体要看CPU主供电有几组MOS管)
给CPU主供电的上下MOS管的G极—栅极,也是控制极让MOS管倒通。(先是上MOS管将电源IC送到的的电压拉低后从S极(源极)送给下MOS管的D极(漏极)在经过下MOS管的进一步控制下输出CPU所需要的电压经过一些电解电容,电感,电阻的滤波等一些列处理在之后让电压变得更平稳后。

送给CPU。(这时CPU还没有工作。数字电路工作必须满足三大条件,按先后循序为供电,时钟,复位。这时CPU还只有供电满足了)

于此同时,时钟芯片在供电,PG信号都正常的情况下开始工作。它会将14.318MHz的晶振所产生的频率通过时钟芯片内部的升频电路或降频电路将其升高或降低后输给各个需要的元件。(这时CPU的时钟满足了)

南桥芯片在供电,时钟都正常后开始工作,将经过了许多逻辑转换的PG信号在其内部的复位加工电路变成复位信号输给北桥芯片(CPU所在)!

北桥芯片在供电,时钟,复位都正常后开始工作。它将南桥芯片送来的复位信号再次加工后送给CPU!此时CPU的供电,时钟,复位都已满足,CPU开始工作,到此电脑的硬启动结束,也就是我们在没有看到屏幕上出现主板LOGO画面之前的所有工作。

软件部分

5.POST自检

在CPU开始工作后,首先需要进行自检,即开始读取POST自检程序(主要检测系统中一些关键设备是否存在和能否正常工作,如内存和显卡等。),

而自检程序在BIOS【BIOS是存储于主板盛一个芯片CMOS里的程序(基本I/O系统),后来将CMOS与它统称为BIOS】中存放,所以CPU通过前端总线的A0-A31地址线发送寻址信号寻找自检程序。在发送寻址信号前,先要检查前端总线是否被占用,CPU会检测DBSY(总线忙信号引脚)是否为低电平。低电平为空闲,高电平为忙。

如果前端总线空闲,则通过前端总线向北桥发送32位或64位寻址信息,北桥接收到寻址信息后,经过译码和电压转换后,北桥通过AD线(数据地址复合专线)发送给南桥。(当CPU的寻址指令到达南桥后,在PCI插槽的A34脚位上产生一个高频脉冲波形,称为“帧信号” 当到达BIOS芯片后会在长形BIOS的第22脚;方形BIOS的23脚上产生一个高频脉冲波形,称为“片选信号”!这两个信号用示波器可以看到)

南桥收到寻址信息后经过PCI总线译码后发给ISA总线,再由ISA总线控制其经过地址线译码、频率转换和电压转换后,发送给BIOS芯片。

BIOS接到寻址信息后,通过D0-D7输出自检程序,自检程序首先送到ISA总线缓冲区,再转成16位数据,传给ISA总线控制器。

ISA总线控制器经过译码、转换后,再将数据发送给PCI总线。PCI总线经过译码后产生32位的数据在发送给北桥芯片。
北桥接到数据后转换为64位数据,在经过前端总线发送给CPU,CPU接到数据后,开始安装程序开始自检硬件设备,自检完成。

6.显示画面

POST自检完成之后,BIOS会调用其他代码来进行更完整的硬件检测。接下 来 系 统 BIOS 将 查 找 显 卡 的 BIOS ( 在 地 址C0000H 处) ,找到显卡 BIOS 之后就调用它的初始化代码来初始化显卡,对于大多数显卡来说都会将一些初始化信息显示在屏幕上,例如生产厂商、 型号等基本信息,但几乎是一闪而过。系统 BIOS 接着会查找其他设备的 BIOS 程序,调用它们的初始化代码来初始化相关设备。

BIOS根据设定判断是否加载BIOS,如果加载则系统 BIOS 将显示出它自己的启动画面,列出系统 BIOS 的类型、 序列号和版本号等内容。
下一步,系统 BIOS 将检测和显示 CPU 的类型和工作率,接 着 测 试 所 有 的 随 机 存 取 存 储 器 ( Random Access Memory, RAM) ,同时在屏幕上显示内存测试的进度,内存测试通过之后,系统 BIOS 将开始检测系统中安装的一些标准硬件设备, 包括硬盘、 CD-ROM 等。接下来将要检测和配置系统中安装的即插即用设备,显示出检测到的设备名称和型号信息,为这些设备分配可用资源。
所有硬件设备都检测完毕之后,屏幕上会显示出各种标准硬件设备使用的资源和相关工作参数等信息。然后系统 BIOS 将 更 新 扩 展 系 统 配 置 数 据 ( Extended System Configuration Data, ESCD) ,系统 BIOS 通过它来与操作系统交换硬件配置信息, 这些数据被存放在 CMOS 中, 通常ESCD 数据只在系统硬件配置发生变化时才会更新。

如果设置不加载BIOS,则默认BIOS默认执行检测操作,检测完成后,交出CPU控制权。

7.启动硬盘

硬盘启动
BIOS完成检测后,系统 BIOS 的操作界面上会显示出用户指定的启动设备顺序,所列外部存储设备可以是软盘、 硬盘或者是光盘等。排在前面的设备拥有优先转交控制权,BIOS 按照启动顺序读取设备中的主引导记(MasterBoot Record, MBR) , 放 到 7C0000H 内 存 地 址 中, 从MBR中查找接下来要读取的信息。
计算机在读取 MBR 时不会把控制权转交给某一分区,而是运行事先安装的启动管理器, 由用户选择要启动的操作系统。在 Linux 系统下的启动管理
器( G Rand Unified Boot loader, Grub) 以 MBR的前 446 B作为自己的始执行程序,可以选择操作系统分区上的不同内核,也可以向这些内核传递启动参数。

机械硬盘系统
CPU读取MBR(主引导记录)位于整个硬盘的最开始扇区,①拥有446字节的引导程序;②参数64字节的分区表,每个分区项16字节,最大支持2T,4个主分区;③2字节的结束标记0x55和0xaa;

MBR由分区表中寻找“活动分区”—操作系统所在区,并将CPU使用权交由该去的引导程序(通常是内核加载器)OBR也称DBR

EBR用于扩展分区,与MBR结构相同但是位置和个数不同。

固态硬盘机器

固态硬盘系统一般使用的是UEFI+GUID启动的,其中UEFI是BIOS的升级版。

UEFI启动流程:

  1. 系统开机-上电自检( Power On Self Test或POST)。
  2. UEFI固件被加载,并由它初始化启动要用的硬件。
  3. 回件读取其引导管理器以确定从何处(比如,从哪个硬盘及分区)加载哪个UEF应用。
  4. 回件按照引导管理器中的启动项目,加载UEF应用
  5. 已启动的UEF应用还可以启动其他应用(对应于 UEFI shell或 rEFInd之类的引导管理器的情
    况)或者启动内核及 initramfs(对应于GRUB之类引导器的情况),这取决于UEF应用的配配置
    guid是由uefi启动的

GUID的是GUID Partition Table,即【全局唯一标识磁盘分区表】。

  1. 它是另外一种更加先进新颖的磁盘组织方式,一种使用UEFI启动的磁盘组织方式。
  2. 最开始是为了更好的兼容性,后来因为其更大的支持内存(mbr分区最多支持2T的磁盘),更多的兼容而被广泛使用,
  3. 特别是苹果的MAC系统全部使用guid分区。
  4. guid不在有分区的概念,所有CDEF盘都在一段信息中存储。
  5. 因为兼容问题,guid其实在引导的最开始部分也有一段mbr引导,也叫做【保护引导】,为了防止设备不支持uefi区别;

8.加载操作系统

在上一步CPU使用权交付给OBR/DBR(内核加载器)后,内核加载器装载系统,把机器的控制权移交给操作系统。
系统的内核先被载入内存,进行系统初始化,加载设备驱动程序。在 Linux 系统下, 首先载入 /boot 目录下的操作系统 kernel( 内核) , kernel 是操作系统的核心部分, 主要功能有控制和管理事件的调度和同步、 进程间的消息传递、 存储器管理和进程管理等。磁盘文件系统挂载,内核加载成功后, 首先运行磁盘文件系统下 /sbin /init 中的程序, 它根据配置文件产生 init 进程。这是 Linux 启动后的第一个进程, 设置进程控制块中的进程识别号 PID( Process Identification,PID) 编号为 1,其他进程都在它之后产生,为其子进程。然后 init 线程开始加载系统的各个模块,完成初始化,检查系统日志,如果之前有错误怎根据不同错误加载错误信息,一切正常则操作系统启动完成。用户便可以进行正常的日常使用了。

参考资料:
1.https://zhidao.baidu.com/question/1174101903220869099.html
2.《深入理解计算机操作系统》
3.袁茜茜.探究计算机的启动过程[J].微型机与应用,2016,35(03):38-40.
4.周振兴.基于GPT分区+UEFI引导和MBR分区+BIOS引导多分区安装Windows系统[J].福建电脑,2018,34(12):144-145.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值