整个启动和加载过程可分为若干步骤,或者称为若干个状态,或者快照,下面的每一段都是描述一个快照。(类似自动状态机)

1、电源稳定(POWER GOOD)

按下启动键后,电源首先启动。为了保证安全使用,电源的设计采取了许多保护措施,所以电源从起振到稳定有一定的延迟。电源各部分(各输入电压和输出电压等)稳定后,会分别发送一个检测信号,此信号电压为高时表示稳定。所有检测信号都为高时,就产生一个POWER GOOD信号。如果主板接收不到该信号,时钟芯片会一直向cpu发送RESET信号(等同于按下重启键),这样cpu就不会工作。

2、CPU电压稳定

CPU的VID0-VID3引脚,使CPU工作电压与时钟信号匹配。

3、CPU跳转到BIOS程序

CPU预编程,使CPU执行0XFFFF0H处的JUMP指令,从而跳转到BIOS(basic input/output system)程序(不同的BIOS,所在地址不同)。

4、CPU执行POST(power on self-test 上电自检)

BIOS首先进行的就是上电自检,用来检测各硬件设备工作状态是否正常。BIOS厂商对每一个设备都给出了检测代码(POST CODE,即开机自我检测代码),对某一个设备进行检测时,首先将检测代码发送到80H检测端口,检测通过后,再发送下一个设备的检测代码进行检测。如果检测失败,检测代码会留在80H端口,检测程序也会停止,并根据预先设定好的警报声(此时显卡还未初始化,不能显示)进行报警(BIOS厂商对不同的设备定义了不同的报警声,我们可以根据报警声的不同来判断故障,Intel POST相关)。

5、初始化

包括创建中断向量表、设置寄存器、对一些外部设备(显卡等)进行初始化和检测,其中最重要的是对BIOS的设置,主要是对硬件参数的设置。初始化完毕,如果硬件配置发生变化,会进行ESCD更新。ESCD是BIOS和操作系统交换硬件配置信息的一种方法,它保存在CMOS中。

6、BIOS按CMOS设定的顺序启动相应设备

7、寻找活动分区

假设操作系统放在硬盘上,在启动硬盘后并不知道硬盘里有什么,一个硬盘有几个区,每个区都可能有操作系统,要想启动操作系统,就必须找到存放操作系统的区。所以,对待硬盘,所有的BIOS都先读取硬盘的0磁头0柱面1扇区,这里存放着主引导记录MBR(Main boot record ),该扇区称为主引导扇区。BIOS将控制权交给MBR,来找到并加载操作系统。

要了解如何找到活动分区,首先必须了解主引导扇区的结构。

主引导扇区是0磁头0柱面1扇区,磁头和柱面都是从0计数,扇区则从1计数。0磁头0柱面1扇区是第一物理扇区。该扇区共512字节,分为三部分。第一部分是MBR,存放程序,大小是446字节,范围是0-445字节(0x00H - 0x1BDH);第二部分是磁盘分区表DPT(Disk Partition table),大小为64字节,范围是446-509字节(0x1BEH-0x1FDH);第三部分是结束标志,大小为2字节,范围是510-511字节(0x1FEH-0x1FFH),其值一般为0xAA55H。

MBR里有启动代码和数据,不同的boot loader启动代码不同,但不论如何,分区表的结构都是相同的,所以先介绍一下分区表。

分区表可以容纳四个分区的信息,每个分区占16个字节。每个分区的16个字节表示的信息如下:

第0个字节:引导字节。80H代表活动分区,00H代表非活动分区;

第1-3个字节:本分区的起始扇区。最低位字节(第一个字节)代表磁头号,次高位字节的低6位代表扇区号,次高位字节的高2位和最高位字节的8位表示柱面号。

第4个字节:分区类型符。

  00H——代表该分区未用(即没有指定)

  01H——FAT12基本分区

  04H——FAT16基本分区

  06H——big FAT16基本分区

  0BH——FAT32基本分区

  05H——扩展分区

  07H——NTFS分区

  0FH——(LBA模式)扩展分区

  83H——linux分区

第5-7个字节:本分区的结束扇区。结构类似开始分区;

第8-11个字节:本分区起始扇区距该分区的分区表所在扇区的扇区数之差;

第12-15个字节:本分区的总扇区数;

下面介绍DOS下引导操作系统的过程。注意:MBR程序的作用是找到活动分区(将要启动的操作系统所在的分区),并将控制权交给活动分区的系统引导程序。

1)BIOS把主引导扇区的512字节拷贝到内存的0:7c00H(为了和软盘的拷贝位置一致,BIOS自动完成此拷贝)处,将控制交给MBR代码。

2)MBR把512个字节搬移到0:600处,为之后活动分区引导程序留出空间。

3)MBR检查依次检测四个分区表的第一个字节,若为80H,则继续检测其他分区表确保只有一个活动分区,否则会发生错误;若为00H,则继续检测其他分区,若四个分区检查完毕,仍没有检测到活动分区,说明没有可以启动的分区,则调用INT 18H进入ROM BASIC(一种程序解释器,可以自己编写BASIC程序运行)。

4)找到活动分区后,根据分区表中分区起始位置等信息,读取该分区第一个扇区的内容到0:7c00H,将控制全交给该活动分区引导程序。该引导程序将加载内核,内核会加载操作系统。

Grub主引导扇区暂留。

8、加载内核和操作系统

转载于:https://www.cnblogs.com/ithink/p/3576464.html

计算机启动和操作系统加载小话相关推荐

  1. Linux内核启动及文件系统加载过程

    当u-boot开始执行bootcmd命令,就进入linux内核启动阶段 与 u-boot 类似,普通 Linux 内核的启动过程也可以分为两个阶段,但针对压缩了的内核如 uImage 就要包括内核自解 ...

  2. android 图标弹跳动画,动效教程 | 5 分钟快速制作弹跳加载小动画

    前言 今天墨染哥教你如何5分钟快速制作一个弹跳的加载小动画,如下图所示,这个小动画要快速做出来,需要解决解决两个技术难点,第一个是食物图标的弹跳,第二个是文本的弹跳. 食物图标的弹跳 话不多说,先看看 ...

  3. web项目的启动时文件加载顺序

    web项目的启动时文件加载顺序 转自:http://www.cnblogs.com/yw-ah/p/5751509.html 一. 1.启动一个WEB项目,WEB容器会先去读取它的配置文件web.xm ...

  4. java中项目启动时加载_如何在项目启动时,加载或解析某配置文件

    在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到 ...

  5. 服务器启动将字典加载到内存中@PostConstruct

    使用@PostConstruct注解完成服务器启动将字典加载到内存中 @Slf4j @Service @Transactional(rollbackFor = Exception.class) pub ...

  6. ionic 去掉启动页的加载动画 菊花转

    ionic 去掉启动页的加载动画 菊花转 在config.xml文件里添加 <preference name="ShowSplashScreenSpinner" value= ...

  7. 解决eclipse环境下maven项目tomcat启动,未加载到项目的问题

    解决eclipse环境下maven项目tomcat启动,未加载到项目的问题 参考文章: (1)解决eclipse环境下maven项目tomcat启动,未加载到项目的问题 (2)https://www. ...

  8. [feather]StarlingUi框架——初识feather、界面启动及Ui加载

    这个星期六星期天,一是完结上周遗留下来的事情,也就是用feather来做一个应用:二是将这周的3D知识好好的记录和汇总一下. feather初识: 这是一个基于Starling的Ui框架集,Starl ...

  9. android 图标弹跳动画,动效教程 | 5 分钟快速做个弹跳加载小动画

    小编:APP的动效现今是越来越重要了,以前是加分项,现在是必会技能-今天给大家带来的是AE动效教程 -- 5 分钟快速做个弹跳加载小动画,一起来学习学习吧-- 前言 哈喽,今天给大家解禁一个墨染动效特 ...

最新文章

  1. 面试-设计模式六大原则
  2. python prettytable_让python的print变得更好看——prettytable和colorama
  3. (附源码gitHub下载地址)spring boot -jta-atomikos分布式事务
  4. Elasticsearch-head插件的安装与使用
  5. devops 开发_DevOps如何消除开发瓶颈
  6. MyBatis出现参数索引越界
  7. 北京邮电大学计算机专业录取名单,祝福!“跪地谢母”考生被北京邮电大学计算机类专业录取...
  8. 仿小米官网首页 动态交互(HTML+css+jq)1.通栏以及logo部分
  9. android 广播 更新ui,详解Android UI更新的几种方法
  10. hp打印机计算机接口,hp打印机的端口怎么设置?各是什么意思?
  11. 第1140期AI100_机器学习日报(2017-11-01)
  12. STM32-esp8266-MQTT服务器通信
  13. Altium designer2020基础使用教程
  14. 数据库SQL去重,保留一条数据
  15. linux查看磁盘及磁盘类型
  16. 电路原理计算机解法,电路原理学习指导与习题全解
  17. 紫书已经基本学完现在开启紫书题目补完计划!!!
  18. Hadoop web端打开hdfs上的文件问题
  19. 网络安全应急响应:网络窃听安全事件检测
  20. 【方法】如何使用DeepMask和SharpMask

热门文章

  1. 2022-2028年中国高粘保护膜行业市场专项调研及发展趋势分析报告
  2. Python速度提升
  3. python -m参数
  4. virtualenv创建虚拟环境为主_多版本
  5. 通俗理解tf.name_scope()、tf.variable_scope()
  6. TensorRT原理图示
  7. NSight Compute 用户手册(中)
  8. ARM NEON指令集优化理论与实践
  9. Linux服务器上监控网络带宽的18个常用命令
  10. git命令合并分支代码