linux系统启动过程介绍

linux系统流程

在这里插入图片描述
通电->BIOS->MBR->GRUB->Kernel->/sbin/init->Runlevel

1、加电

电脑启动后,CPU逻辑电路被设计为只能运行内存中的程序,没有能力直接运行存在于软盘或硬盘中的操作系统,如果想要运行,必须要加载到内存(RAM)中。

  • BIOS是如何启动的,CPU硬件逻辑设计为在加电瞬间强行将CS值置为0XF000,IP为0XFFF0,这样CS:IP就指向0XFFFF0这个位置,这个位置正是BIOS程序的入口地址。
  • BIOS程序被固化在计算机主机板上的一块很小的ROM芯片里。现在CS:IP已经指向了0XFFFF0这个位置,意味着BIOS开始启动。
    在这里插入图片描述

2、BIOS

POST自检 +初始化设备

在这里插入图片描述
1、电脑主机打开电源的时候,随后会听到滴的一声,系统启动开始了开机自检(POST-power on self test)自检开始):

  • 这个过程中主要是检测计算机硬件设备比如:CPU,内存,主板,显卡,CMOS等设备是否有故障存在

2、初始化设备

有一项对启动操作系统至关重要的工作,那就是BIOS在内存中建立中断向量表和中断服务程序。

  • BIOS程序在内存最开始的位置(0x00000)用1KB的内存空间(0x000000x003FF)构建中断向量表,在紧挨着它的位置用256KB的内存空间构建BIOS数据区(0x004000x004FF),并在大约57KB以后得位置(0x0e05b)加载了8KB左右的与中断向量表相应的若干中断服务程序。
  • 中断向量表有256个中断向量,每个中断向量占4个字节,其中两个字节是CS值,两个字节是IP值。每个中断向量都指向一个具体的中断服务程序。

为了启动操作系统,BIOS的runtime服务将搜索那些激活状态的或是可引导启动的设备,搜索的顺序则由CMOS设置决定(也就是我们平时所谓的在BIOS中设置的启动顺序)。一个软驱,一台光驱,一个硬盘上的分区,网络上的设备甚至一个usb 闪存盘都可以作为一个启动设备。

当然,linux通常是从硬盘启动的。硬盘上的MBR(主启动记录)包含有基本的boot loader,它是一个512字节大小的扇区,位于磁盘的第一个扇区(0磁头0磁道1扇区)。当MBR被装载到RAM中后,BIOS就会将控制权转交给MBR。

3、主引导记录(Master boot record,MBR)——如何找到操作系统?

按照BIOS所设定的系统启动流程,如果检测通过,则根据引导次序(Boot Sequence)开始在第一台设备上支持启动程序,我们的启动设备主要包括硬盘、USB、SD等,我们一般用的是硬盘,然后进行读取第一个设备就是硬盘,第一个要读去的就是该硬盘的主引导记录MBR(Master Boot Record),然后系统可以根据启动区安装的引导加载程序(Boot Loader)开始执行核心识别的工作。

在这里插入图片描述
主引导记录只有512个字节,它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统。
主引导记录由三个部分组成:

  • 第1-446字节:调用操作系统的机器码(boot loader)。
  • 第447-510字节:分区表(Partition table)。
  • 第511-512字节:主引导记录签名(0x55和0xAA)。

1、first stage

将控制权交给主引导代码(主boot loader)。主引导代码的任务包括

  • 扫描分区表,找到一个激活(可引导)分区;
  • 找到激活分区的起始扇区;
  • 将激活分区的引导扇区装载到内存7C00处;
  • 将控制权交给引导扇区代码;

4、GRUB(次引导加载程序)->Kernel

2、second stage
一旦找到该分区(用户选择要加载的内核之后),它就会搜索第二个阶段引导加载程序。例如:GRUB,并将其加载到内存中。次引导加载程序(GRUB)就会根据/boot/grub.conf配置文件中所设置的信息,从/boot/所在的分区上读取Linux内核映像,然后把内核映像加载到内存中并把控制权交给Linux内核。

在这里插入图片描述
在这里插入图片描述
引导加载程序所选的内核映像,并将控制权给内核。由于内核是被压缩过的,所以首要任务就是先进行内核解压。在此之后,检查和分析系统硬件并初始化内核中内置的硬件设备驱动程序。

linux内核获得控制权之后的操作:

  • 1、解压缩自己并安装必要驱动
  • 2、初始化与文件系统相关的虚拟设备,LVM或RAID
  • 3、装载根文件系统,挂在根目录下面
  • 4、完成之后,linux在进程空间里面加载init程序,下面轮到init干活

5、sbin/init

内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。
在这里插入图片描述
除了启动系统之外,init还负责保持系统的运行和彻底关闭系统。它充当了所有非内核进程的“最后的管理者”,在必要时清理它们,并在用户登录和退出时重新启动用户登录服务。

6、Runlevel programs

当LINUX系统启动完成后,你会发现许多的服务进程也启动了,例如:“starting sendmail …. OK”. 这些服务程序都放在相应LINUX系统启动级别的文件夹下面。
Linux的运行等级设定如下:

  • 0:关机

  • 1:单用户模式

  • 2:无网络支持的多用户模式

  • 3:有网络支持的多用户模式

  • 4:保留,未使用

  • 5:有网络支持有X-Window支持的多用户模式

  • 6:重新引导系统,即重启

参考

1、https://blog.csdn.net/gatieme/article/details/50914250
2、https://blog.csdn.net/zzq060143/article/details/73870806

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值