系统启动的原理

                                                                             一,总概述

                

                                                                         系统启动步骤一(POST)

    POST开机自检:电脑主机打开电源的时候,系统启动开始了开机自检(POST-power on self test)自检开始),这个过程中主要是检测计算机硬件设备比如:CPU,内存,主板,显卡,CMOS等设备是否有故障存在,如果有硬件故障的话将按两种情况理:对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理),如果没有故障,POST完整自己的接力任务,将尾部工作交接给BIOS处理。

   

 

                                                                    系统启动步骤二(BIOS)

BIOS:Basic Input Output System 基本输入输出系统
       计算机加电自检完成后第一个读取的地方就是就是BIOS,BIOS里面记录了主机板的芯片集与相关设置,如CPU与接口设备的通信频率、启动设备的搜索顺序、硬盘的大小与类型、系统时间、外部总线、各种接口设备的I/O地址、已经与CPU通信的IRQ中断信息,所以,启动如果要顺利启动,首先要读取BIOS设置(Alarm(警告),Date/Time(日期和时间),Password(密码设置),StartUp(启动选项)Restart(重新启动))。
BIOS进行内部检测boot sequence程序,寻找系统引导设备
win中的BIOS图


                                                                           系统启动步骤三(加载MBR)

 按照BIOS所设定的系统启动流程,如果检测通过,则根据引导次序(Boot Sequence)开始在第一台设备上支持启动程序,我们的启动设备主要包括硬盘、USB、SD等,我们一般用的是硬盘,然后进行读取第一个设备就是硬盘,第一个要读去的就是该硬盘的主引导记录MBR(Master Boot Record),然后系统可以根据启动区安装的引导加载程序(BootLoader)开始执行核心识别的工作。MBR程序只是找到只是硬盘分区内最前面的446个字节的Boot Loader,然后查找相关配置和定义。
       MBR:主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA)。因此,在使用“主引导记录”(MBR)这个术语的时候,需要根据具体情况判断其到底是指整个主引导扇区,还是主引导扇区的前446字节。

 

MABA加载过程
读取主引导记录(MBR)。当BIOS检查到硬件正常并与 CMOS 中的设置相符后,按照 CMOS 中对启动设备的设置顺序检测可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H 处。
检查0000:7CFEH-0000:7CFFH(MBR的结束标志位)是否等于55AAH,若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示"NO ROM BASIC"然后死机。
当检测到有启动设备满足要求后,BIOS将控制权交给相应启动设备。启动设备的MBR将自己复制到0000:0600H处, 然后继续执行。
根据MBR中的引导代码启动引导程序。
详细介绍https://zh.wikipedia.org/wiki/%E4%B8%BB%E5%BC%95%E5%AF%BC%E8%AE%B0%E5%BD%95

                                                                   系统启动步骤四(Boot Loader)

   Boot Loader 加载Grub程序
     在这个过程中主要靠Grub的引导开始的,Grub分为两个阶段: 
              stage1:主要是Boot loader 
               stage 1.5:过渡 
              stage2:主要是/boot/grub:
   我们看看/boot/grub/中有什么

在/boot/grub/下面我们看到了stage1,stage2及grub工具的配置文件  grub.conf,那么grub.conf内都定义??


 

                                                                         系统启动步骤五(内核初始化系统)

根据Grub内的定义,grub读取完毕后就把下面的工作交个内核了。kernel主要是完成系统硬件探测及硬件驱动的初始化,并且以读写的方式挂载根文件系统(根切换),那么这里就出现了一个“先有鸡还是先有蛋的文件了”,具体是什么那? 
      要想访问真正的根文件系统(rootfs)的话,就必须加载根文件系统中的设备,这时根文件系统又没有挂载,要挂载根文件系统又得加载根文件系统中的驱动程序,哪怎么办呢?为了解决这个问题,这是就用到了initrd文件了。  在来说下kernel初始化所要工作的内容做下简单总结:  
       探测硬件->加载驱动(initrd)->挂载根文件系统->rootfs(/sbin/init)
initrd文件如何打开
1,为了保护原文件先将文件进行备份
2,为了方便进行重命名:   mv initrd-2.6.5.13.58.img  initrd.gz
3,进行解压;  gzip -d initrd.gz(这时候会解开文件包。变成一个initrd的文件)
4,把initrd挂载到  mnt目录下     mount -t proc initrd     /mnt  (-t proc是指定挂载文件系统类型 )
5,cd /mnt目录下 ls就可以看到

                                                              系统启动步骤六(initrd

到此止内核空间的相关工作已经完成,内核空间的任务开始向用户空间转移,内核空间通过一个间接的initrd(微型linux)向用户空间的/sbin/init过度,所以gurb开始引导内核转向initrd。  initrd:一个虚拟的文件系统,里面有lib、bin、sbin、usr、proc、sys、var、dev、boot等一些目录,其实你会发现里面的目录有点像真的/对吧,所以我们称之为虚拟的根文件系统,作用就是将kernel和真的根文件系建立关联关系,让kernel去initrd中加载根文件系统所需要的驱动程序,以读写的方式挂载根文件系统,并让执行用户当中第一个进程init。
init进程的主要工作:
       挂载 :将initrd中的/proc, /sys  /dev 挂载到当前的主分区中的相应目录                  
       创建目录:/dev/mapper           
通过mknod完成block or character special files的创建  
相关模块的挂载  
创建root设备  
挂载 /sysroot  
最后完成根切换 

                                                                        系统启动步骤七(启动/etc/inittab)

   init执行完毕以后会启动系统内的/etc/inittab文件,来完成系统系统的初始化工作。下面我们来介绍一下inittab这个配置文件内的详细内容

   

 

#   0 - halt (Do NOT set initdefault to this)     //关机  
#   1 - Single user mode   //单用户维护模式)  
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)   //不支持NFS功能  
#   3 - Full multiuser mode    //完整的多用户模式
#   4 - unused    //一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。
#   5 - X11   //进到X Window系统了。
#   6 - reboot (Do NOT set initdefault to this)//重启 

 

inittab内定义的初始化脚本:rc.sysinit  --/etc/rc.d/rc.sysinit

打开rc.sysinit脚本可知里面定义了一些与系统初始化的定义 
设定主机名 
检测并挂载/etc/fstab中其他文件系统 
启动swap分区 
/etc/sysctl.conf设定内核参数 
装载键映射-->键盘上每个键的功能 
然后根据系统运行级别运行相关的服务脚本:/etc/rc.d/init.d/脚本和/etc/rc.d/rc#d 

在/etc/rc.d中的文件信息

 



从上图可推出rc0-rc6目录下脚本: 
K*     ##只要是以K开头的文件均执行stop工作  
S*     ##只要是以S开头的文件均执行start工作  
0-99  (执行次序,数字越小越先被执行) 
用户自定义开机启动程序(/etc/rc.d/rc.local)  
可以根据自己的需求将一些执行命令或是脚本写到/etc/rc.d/rc.local里,当开机时,就可以加载啦

 

经过这七步就可以使用计算机




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值