计算机启动和操作系统加载小话
整个启动和加载过程可分为若干步骤,或者称为若干个状态,或者快照,下面的每一段都是描述一个快照。(类似自动状态机)
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
计算机启动和操作系统加载小话相关推荐
- Linux内核启动及文件系统加载过程
当u-boot开始执行bootcmd命令,就进入linux内核启动阶段 与 u-boot 类似,普通 Linux 内核的启动过程也可以分为两个阶段,但针对压缩了的内核如 uImage 就要包括内核自解 ...
- android 图标弹跳动画,动效教程 | 5 分钟快速制作弹跳加载小动画
前言 今天墨染哥教你如何5分钟快速制作一个弹跳的加载小动画,如下图所示,这个小动画要快速做出来,需要解决解决两个技术难点,第一个是食物图标的弹跳,第二个是文本的弹跳. 食物图标的弹跳 话不多说,先看看 ...
- web项目的启动时文件加载顺序
web项目的启动时文件加载顺序 转自:http://www.cnblogs.com/yw-ah/p/5751509.html 一. 1.启动一个WEB项目,WEB容器会先去读取它的配置文件web.xm ...
- java中项目启动时加载_如何在项目启动时,加载或解析某配置文件
在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到 ...
- 服务器启动将字典加载到内存中@PostConstruct
使用@PostConstruct注解完成服务器启动将字典加载到内存中 @Slf4j @Service @Transactional(rollbackFor = Exception.class) pub ...
- ionic 去掉启动页的加载动画 菊花转
ionic 去掉启动页的加载动画 菊花转 在config.xml文件里添加 <preference name="ShowSplashScreenSpinner" value= ...
- 解决eclipse环境下maven项目tomcat启动,未加载到项目的问题
解决eclipse环境下maven项目tomcat启动,未加载到项目的问题 参考文章: (1)解决eclipse环境下maven项目tomcat启动,未加载到项目的问题 (2)https://www. ...
- [feather]StarlingUi框架——初识feather、界面启动及Ui加载
这个星期六星期天,一是完结上周遗留下来的事情,也就是用feather来做一个应用:二是将这周的3D知识好好的记录和汇总一下. feather初识: 这是一个基于Starling的Ui框架集,Starl ...
- android 图标弹跳动画,动效教程 | 5 分钟快速做个弹跳加载小动画
小编:APP的动效现今是越来越重要了,以前是加分项,现在是必会技能-今天给大家带来的是AE动效教程 -- 5 分钟快速做个弹跳加载小动画,一起来学习学习吧-- 前言 哈喽,今天给大家解禁一个墨染动效特 ...
最新文章
- 面试-设计模式六大原则
- python prettytable_让python的print变得更好看——prettytable和colorama
- (附源码gitHub下载地址)spring boot -jta-atomikos分布式事务
- Elasticsearch-head插件的安装与使用
- devops 开发_DevOps如何消除开发瓶颈
- MyBatis出现参数索引越界
- 北京邮电大学计算机专业录取名单,祝福!“跪地谢母”考生被北京邮电大学计算机类专业录取...
- 仿小米官网首页 动态交互(HTML+css+jq)1.通栏以及logo部分
- android 广播 更新ui,详解Android UI更新的几种方法
- hp打印机计算机接口,hp打印机的端口怎么设置?各是什么意思?
- 第1140期AI100_机器学习日报(2017-11-01)
- STM32-esp8266-MQTT服务器通信
- Altium designer2020基础使用教程
- 数据库SQL去重,保留一条数据
- linux查看磁盘及磁盘类型
- 电路原理计算机解法,电路原理学习指导与习题全解
- 紫书已经基本学完现在开启紫书题目补完计划!!!
- Hadoop web端打开hdfs上的文件问题
- 网络安全应急响应:网络窃听安全事件检测
- 【方法】如何使用DeepMask和SharpMask