Linux操作系统启动流程浅析

启动BIOS程序

  当电源键按下之后,BIOS(Basic nput Output System)就会由主板上的闪存来运行。BIOS程序会把自己解压缩到系统的内存之中,然后读取CMOS(Complementary Metal Oxide Semiconductor)内存储的信息(例如系统时间,启动设备顺序等)来对系统进行配置。同时进行自检(POST:Power-On Self Test)。检测系统的硬件是否存在问题,自检通过之后,BIOS会加载第一启动设备的MBR(Master Boot Record:主引导扇区)中的boot loader程序。

  需要说明的一点是,BIOS加载bootloader是通过硬件的INT 13中断功能来加载的。即,BIOS读取到了磁盘之后,通过INT 13这条通道来读取该磁盘的第一个扇区中的boot loader程序!

  下面是BIOS程序的几张截图:

  

  图1.1:BIOS程序的基本配置界面

  

  图1.2:BIOS程序调整设备启动顺序的界面

启动Bootloader程序

  Linux下面的Bootloader有多种,比如早期默认使用LILO,还有目前主流的grub。下面以目前Linux系统上面主流的grub来说明一下bootloader主要干了哪些事情?

  Grub启动时会自动读取/boot/grub/grub.conf这个配置文件,然后执行其中的grub命令!图2.1是在centos6.5上面的一个grub.conf配置文件!Grub命令为红线框内的部分,它主要分为三个部分:

  

  图2.1

  1.设置启动的硬盘分区(root命令),传递给这个命令的参数是分区,这个命令会去分析并挂载这个分区,然后读取出其中的/boot文件夹下面的内容。比如图2.2所示,执行了命令之后,就能够读取出boot文件夹下面的内容了!

  

  图2.2

  2.选择引导的内核文件,并设置好内核参数(kernel命令)

  3.加载initrd文件,设置虚拟文件系统。(initrd命令)

  需要特别说明的是这个initrd文件,这个其实是一个虚拟文件系统(Initial RAM Disk)。在Linux系统中,有些磁盘的驱动程序并没有编译在内核中,而是被打包成了模块存放在了/lib/modules目录下面,而当内核启动了之后就需要加载磁盘的驱动程序。可是/lib/modules还没有被挂载,这时就产生矛盾了!为了解决这个矛盾,就产生了虚拟文件系统的这个概念。我们可以讲initrd文件加载到内存中(为了担心影响到磁盘上的文件系统,此时根目录的挂载是以只读的方式来挂载的),虚拟出一个根文件系统出来,然后读取虚拟根文件系统中的磁盘驱动程序,然后再从新挂载真正的根目录。

  如图2.3所示,这些文件就是initrd文件所解压出来的内容。

   

  图2.3

加载系统内核与硬件驱动程序

  Grub程序运行完上面三个命令之后,内核文件(vmlinuz-$(uname -r))就会被解压到了内存之中开始运行了!此时,内核会自己再来从新检测一遍硬件并加载驱动程序!检查完成之后,内核就会调用Init程序,创建系统的第一个进程!

Init进程进行系统的初始化

  Init程序启动之后,会首先去读取/etc/inittab这个文件来获取操作系统的Run Level(运行级别)。什么是运行级别呢,Linux下面系统根据有无网络和X Window来将

  系统分为了七个运行级别。它们的内容如图3.1所示:

  

  图3.1

  这是在Linux的/etc/inittab文件中关于这其中模式的说明。

  模式0代表了关机状态,模式1代表了单用户模式(维护模式),模式2代表了多用户的命令行模式,但是并没有网络。模式3代表了包含网络的多用户的命令行模式。模式4是系统保留的功能。模式5代表了图形界面模式。模式6代表了系统重启的状态。

  对应于每个运行级别,/etc目录下面分别设置的不同的目录,如图3.2所示:

  

  图3.2

  系统运行某个级别,就会去运行相应目录(/etc/rc[运行级别].d)内的脚本文件。这里那个rc代表的是run command,即开始时要运行的命令,那个.d代表directory,代表的是目录的意思!

  Inittab文件中出了能够设置系统的启动级别外,还有一些其他的功能,如图3.3所示:

  

  图3.3

  这个是在CentOS6.5上面inittab文件中关于其他配置的说明。

  总之,Init程序在获取完了系统的运行等级之后,会继续执行下面这几个功能:

  对系统进行初始化(执行/etc/init/rcS.conf这个脚本文件或者通过/etc/init/rc.conf来运行一些自定义的运行等级程序)

  加载系统服务项(运行/etc/rc[运行等级].d/中的脚本文件)

  设置好Ctrl + Alt + Del键的功能

  运行mingetty来设置好六个相应的终端机

运行终端机并接受用户登陆

  当系统的初始化内容完成之后,系统就会调用mingetty函数,来设置终端机,并等待用户登陆!它的具体流程是这样的,init进程先fork一个子进程,然后这个子进程来exec一个getty程序。Getty程序会试着去打开一个终端,如果打开成功了,那么就会去屏幕上显示login字样,当用户键入了用户名之后,getty程序的任务就完成了!然后它在以exec的方式来调用login程序。Login程序会去读取用户名和用户密码,然后读取shadow文件来检验用户的密码是否正确。如果密码不正确,则login通过调用exit 1来退出,此时init进程重新fork来重复上述步骤。

  如果密码验证成功的话,那么login程序就会设置一些系统运行的环境(比如设置工作目录,设置uid和gid,用户名等)。设置好了这些系统环境之后,login程序就会通过exec来调用shell程序,shell程序执行并读取一些启动脚本(例如/etc/bashrc等)。读取完这些启动脚本之后,shell就打印出提示符,然后等待用户键入命令!此时我们的系统就正常启动了!

时间: 2024-08-01 11:29:36

Linux操作系统启动流程浅析的相关文章

linux操作系统启动流程和光盘镜像制作

1.简述linux操作系统启动流程 POST (加电自检):自检主要硬件设备如:CPU.内存.硬盘是否正常,以及输入输出设备是否存在问题等. BIOS(Boot Sequence):BIOS(基本的输入输出系统)装载在硬件芯片CMOS之上,自检时会启动这个程序,并根据CMOS上的配置信息去读取其他的硬件信息,检测正常之后进行硬件设备的初始化. 读取MBR:引导加载程序,在MBR(主引导记录)中,主要功能是识别,加载系统的核心文件,并提交到内存中运行来启动对应的系统. Kernel运行:Kerne

Linux操作系统启动流程

一般来说,所有的操作系统的启动流程基本就是: 总的来说,linux系统启动流程可以简单总结为以下几步:1)开机BIOS自检,加载硬盘.2)读取MBR,进行MBR引导.3)grub引导菜单(Boot Loader).4)加载内核kernel.5)启动init进程,依据inittab文件设定运行级别6)init进程,执行rc.sysinit文件.7)启动内核模块,执行不同级别的脚本程序.8)执行/etc/rc.d/rc.local9)启动mingetty,进入系统登陆界面. linux系统安装时,如

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

LINUX 操作系统启动过程 通过一段时间的学习已经对linux有了一定的了解,接下来就开始研究一下linux 操作系统的启动过程吧.当然这是为了让大家比较容易发现linux启动过程中容易发生问题的地方以及解决办法. 目录 一.简述 二.详解 1.BIOS加电自检 2.读取MBR 三.加载内核 1.Grub引导分为三个阶段 2.Stage1.5阶段存在的原因 3.详解三阶段引导过程 四.调用init进程 1.init的功能作用 2.init初始化流程 3.init 执行 run-level 的各

Linux操作系统启动管理器GRUB

转载:http://58vpn.blog.sohu.com/309434214.html [GRUB是什么]GNU GRUB(简称"GRUB")是一个来自GNU项目的启动引导程序.GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统.GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数.GRUB是在计算机启动后运行的第一个程序,他是用来负责加载.传输控制到操作系统的内核,一旦把内核挂载,系统引导管理器的任

linux操作系统启动流程一

linux系统的启动流程: POST --> BootSequence(BIOS) --> bootloader --> kernel [-->ramfs] --> rootfs[ro]--> /sbin/init --> 设定默认运行级别 --> 进行系统初始化 --> 并行执行ctrl+alt+del热键功能定义,系统服务的开启和关闭,电源的管理,dbus管理 -->登录提示符 在我们linux系统的启动过程中存在着这样的启动流程,下面我们一

Linux操作系统启动管理器-grub

一.GRUB简介 GRUB(GRand Unified Bootloader简称"GRUB")是一个来自GNU项目的多操作系统启动程序.GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统.GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数. =================================================================================

Linux基础--系统启动流程

基本上Linux的启动过程如图所示,不同版本之间可能有一些细微的差别,后面再做介绍,但总体上就是这样一个流程. 从机器上电开始,首先直接将ROM芯片中的BIOS程序加载到内存中运行.BIOS程序首先进行POST(Power On Self Test),即硬件自检,自检通过则按照BIOS中Boot Sequence中定义启动顺序去找相应设备上的0号扇区,尝试寻找其中的BootLoader程序. 如果找到了BootLoader程序则将其加载到内存中,将系统控制权交给BootLoader.而BootL

linux 笔记--系统启动流程

POST(开机自检)-->BIOS(boot seqvence)-->MBR(boot loader)-->kernel-->initrd-->sbin/init 内核设计:    单内核:linux  轻量级线程    微内核:windows 支持多线程内核位置:/lib/modules 以版本号命名的目录 ldd 路径:显示共享库的依赖关系(which查看命令的绝对路径) 启动的服务不同,运行的级别也不相同:     0 halt 关机    6 reboot 重启  

linux开机系统启动流程

启动流程 1,按下电源 2,bios自检:主要检测主机硬件设备如:cpu,内存.硬盘等显卡设备是否正常,在测试完成后,会按照bios的系统设置顺序来启动. 3,系统引导 MBR:硬盘的0柱面,0磁头,一扇区称为主引导扇区.它由三部分组成,主引导程序(Bootloader),硬盘的分区表(Disk Partition table)和硬盘有效标志(55AA) 4,linux内核启动 bootloader 为引导加载程序,它的主要功能为 1,提供菜单,允许用户选择启动的系统或不同的内核版本 2,加载选