计算机启动操作系统的过程,操作系统启动过程

操作系统启动过程简单分为四部分,从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]

8316e28b398e569e792583f2b9907737.png

图1

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

1)Partition ID

2)Partition起始磁柱

3)Partition的磁柱数量

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

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

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

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

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

实模式下内存分布

2a80410202d616e5b734b44f6b3815a4.png

图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]

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值