操作系统启动过程简单分为四部分,从BIOS自检、系统引导、启动内核、初始化系统。其中每个部分又分为多个子部分,操作系统的建立是一个相对比较复杂的事情。以下以Linux2.6.32版本为基础,介绍操作系统启动过程。

中文名

操作系统启动过程

分    为程    序

boot strapping,和BIOS

操    作

开机执行BIOS

操作系统启动过程简介

编辑

语音

Linux内核是从入口点开始执行的,入口点程序又称为初始化程序,其任务是为Linux操作系统的运行做好必要的准备,如将内核镜像(bzimage)在物理地址展开、获取计算机组成部分的配置参数、建立各种管理用的数据结构、启动各类守护进程、建立人机交互环境等。

Linux内核是一个驻留在外存中的程序,在运行前必须先将其读入物理内存。将Linux内核读入内存的工作成为引导,完成引导的程序被称为引导程序。引导也是在外存中的程序,所以在运行之前需要将其读入内存。将引导读入内存的工作由BIOS(basic input output system)完成。BIOS驻留在非易失存储器中,不需要引导。

引导程序在linux内核读入后,将控制权交给内核头部的实模式初始化程序(main.c),在实模式下完成初始化工作,再将处理器切换到保护模式,而后转入解压程序。解压程序将内核镜像解压到物理地址中,然后把处理器的控制权交给内核首部程序。内核首部程序正式完成内核初始化。

每个过程都执行了自己该做的初始化部分的事情,有些过程又可分为好几个子过程。接下来,我们就对每个阶段做一个详细分析和讲解。

操作系统启动过程BIOS自检

编辑

语音

在计算机开机时,boot被自动执行,指引CPU把操作系统从大容量存储器中传送到主存储器的易失区[1]

。BIOS的功能由两部分组成,分别是POST码和Runtime服务。POST阶段完成后它将从存储器中被清除,而Runtime服务会被一直保留,用于目标操作系统的启动。BIOS两个阶段所做的详细工作如下:

步骤1:上电自检POST(Power-on self test),主要负责检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。例如,最常见的是内存松动的情况,BIOS自检阶段会报错,系统就无法启动起来;

步骤2:步骤1成功后,便会执行一段小程序用来枚举本地设备并对其初始化。这一步主要是根据我们在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器,如硬盘、光盘、U盘、软盘和网络等。我们以硬盘启动为例,BIOS此时去读取硬盘驱动器的第一个扇区(MBR,512字节),然后执行里面的代码。实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,它只是负责读取该扇区内容、并执行。

至此,BIOS的任务就完成了,此后将系统启动的控制权移交到MBR部分的代码。

Linux的启动是从0xFFFF0地址开始的,该地址位于FLASH memory中,是BIOS的入口。然后会选择引导设将其第一个扇面(可能是MBR或GRUB)的内容读到0x7C00处,并跳转到该位置。

操作系统启动过程系统引导

编辑

语音

我们首先来了解一下MBR,它是Master Boot Record的缩写。硬盘的0柱面、0磁头、1扇区称为主引导扇区。它由三个部分组成,主引导程序(Bootloader)、 硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA),其结构图如图1所示[2]

图1

磁盘分区表包含以下三部分:

1)Partition ID

2)Partition起始磁柱

3)Partition的磁柱数量

引导程序的核心工作是将linux内核从外存读入内存,并将其放在合适的位置中。Linux的内核被分为三部分;

1)主体部分是在保护模式或64位中运行的内核镜像(bzimage),已被压缩

2)在内核镜像之前有一段解压缩程序,用于解压缩内核

3)文件头部是一段实模式的初始化程序,用于在实模式运行

由于处理器最开始运行在实模式下,内存空间只有1MB(20位地址总线8086体系),内存分布如图2所示:

实模式下内存分布

图2

引导程序必须将内核的实模式下的初始化程序放在基本内存中,应将内核镜像放在1MB以上的位置。

同时为了缩减内核规模,实现内核的灵活性和适应性,内核被分为两部分:基础部分(bzImage)和扩展部分(busybox等)。基本内核实现内核最基本的管理功能,不随计算机的变化而变化;扩展功能实现内核一些独立的模块(如驱动和文件系统),会发生变化,被放在initrd中,需要引导程序一并读入。在qemu中使用 qemu-systems-i386 -kernel bzImage -initrd busybox命令载入基本内核和扩展内核。

这里有必要给大家再多介绍一下initrd:

initrd 的英文含义是 bootloader initialized RAM disk,就是由 boot loader 初始化的内存盘。在 linu2.6内核启动前,boot loader 会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统。在 boot loader 配置了 initrd 的情况下,内核启动被分成了两个阶段,第一阶段先执行 initrd 文件系统中的init,完成加载驱动模块等任务,第二阶段才会执行真正的根文件系统中的 /sbin/init 进程。

操作系统启动过程启动内核

编辑

语音

当处理器离开引导程序的时候,它处于实模式下面,需要执行实模式下面的引导程序后,跳转到保护模式解压内核镜像。

在实模式中,引导程序进行三项工作:

1)收集系统参数

2)设置基本环境

3)切换处理器操作模式

操作系统启动过程解压内核

编辑

语音

如前面讲到的,linux在内存中的为内存镜像,需要进行解压,解压后需要把内核放在适当的位置。这个位置在老的版本为0x100000(1MB)处,新版本要求在物理内存的0x1000000(16MB)处,这样可以节省16MB以下的内存空间给DMA使用。借此就进入了保护模式的内核初始化下了。

词条图册

更多图册

参考资料

1.

计算机科学概论(Brookshear)

2.

Linux系统启动过程分析

.www.cnblogs.com.2016-10-20[引用日期2019-07-06]

计算机启动操作系统的过程,操作系统启动过程相关推荐

  1. 计算机加电后操作系统启动过程

    揭开钢琴的盖子:操作系统好比一个架美丽的钢琴,我们可以用上面的琴键弹出优美的旋律.但是我们不能满足于只会弹奏,如果我们要更深入理解钢琴,必须打开钢琴的盖子,一探究竟.所以学习操作系统,不能停留上系统A ...

  2. 浅谈-LINUX 操作系统启动过程

    LINUX 操作系统启动过程 通过一段时间的学习已经对linux有了一定的了解,接下来就开始研究一下linux 操作系统的启动过程吧.当然这是为了让大家比较容易发现linux启动过程中容易发生问题的地 ...

  3. 操作系统启动过程——硬件自检+系统引导+系统加载+系统登录

    以下的内容都是在网上搜集并整理的,希望有问题的朋友在提问之前能先在这里看一看,不要浪费了众多为网络奉献的众多网友的心血! 电脑及操作系统的启动过程是一个很复杂的过程,对于我们大多数只是希望把电脑玩的更 ...

  4. 学习笔记:操作系统启动过程

    学习笔记:操作系统启动过程 参考资料: 1.<操作系统真象还原>郑钢 2.<操作系统引导探究> 谢煜波 操作系统启动过程 按下电源后: 电源键连接的电信号线发送一个电信号给主板 ...

  5. Parallels Desktop 安装Win 10提示“安全启动功能防止操作系统启动”该怎么解决?

    Parallels Desktop 安装 Windows10 提示"安全启动功能防止操作系统启动"该怎么解决?未来小编就来帮大家解决这个难题!一起来看以下教程吧- pd17虚拟机 ...

  6. Parallels Desktop 安装 Windows10 提示“安全启动功能防止操作系统启动”怎么解决?

    Parallels Desktop 17.1.0 安装 Windows10 提示"安全启动功能防止操作系统启动"怎么解决?如下图提示: 安装 Parallels Desktop 1 ...

  7. rhel系统启动过程_Linux系统启动过程

    Linux启动过程 前言: Linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布.在加上用户空间的应用程序之后,成为Linux操作系统. ...

  8. 华为手机关联启动记录-被操作系统启动分析

    现象: 华为手机上 手机管家会监测应用间的相互启动,并根据用户之前设置的关联启动开关(默认关闭即禁止)情况判断是否进行拦截关联启动操作:但是在关联启动记录中有一个很有意思的现象,就是记录中会有多条&q ...

  9. 什么是BIOS?为什么开机先从BIOS开始?以及操作系统启动过程

    1.什么是BIOS? BIOS是英文bai"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统".其实,它是 ...

最新文章

  1. 【转】最佳 WordPress 缓存插件:WP Super Cache
  2. suse系统关闭防火墙
  3. SpringBoot高级-任务-异步任务
  4. 1019 General Palindromic Number (20分)_18行代码AC
  5. Vs Code:Remote SSH
  6. 11g oracle xe启动_详解Oracle等待事件的分类、发现及优化
  7. 调试利器:浏览器 Logger
  8. Java线程池架构(一)原理和源码解析
  9. java2的7次方怎么表示_一元二次方程常见题型之方程根的解法
  10. 我怕三十的红包太多,先发为敬!
  11. Binary XML file line #23: Error inflating class android.widget.TextView
  12. 电子设计教程19:晶体管负反馈放大电路的原理设计
  13. php第三方微信app支付接口开发,PHP开发APP微信支付接口
  14. Mac使用技巧:磁盘如何分区
  15. 十六进制加减乘除运算c语言,16进制加减乘除计算器
  16. Smartbi电子表格创建查询条件
  17. VMware虚拟机无法识别U盘解决方案
  18. H3C交换机如何进行批量端口配置
  19. Android 系统名字、版本、API level的对应关系
  20. 媒体-PR-微商-地摊儿…… 媒体人的转型你到了哪一步?

热门文章

  1. squid ldap认证(AD)
  2. Matlab的内部常数
  3. C里面的scanf那个功能在matlab中实现
  4. Linux Shell实例精讲学习笔记
  5. Python-面向对象编程
  6. OpenCV图像处理使用笔记(八)——Sobel算子
  7. SQL Server 2016 列存储技术做实时分析
  8. 输出EXCEL文件的通用函数
  9. Firefox自带下载功能进行断点续传
  10. Spring Boot 项目打包 + Shell 脚本部署实践,太有用了!