第一步:POST(Power On Safe Test)加电自检

当按下电源键以后,CPU因为有电流通过便开始对自身、I/O设备、内存等硬件进行检验。那么CPU如何得知这些自检指令?我们知道指令存在于内存当中,寻找内存也需要指令。这看起来似乎是一个“死结”。如何解决呢?在CPU生厂商生产CPU的时候会给CPU内置一系列指令,让CPU通电以后就在固定的内存(ROM)中寻找自检指令,进行自检。所以,内存不仅仅只有我们可见的RAM,还有我们不可见,CPU可见ROM。

第二步:BIOS(Basic Input Output System)

BIOS是一组固化在主板上ROM芯片上的程序,该程序的主要功能是完成系统的加电自检、系统的自启动程序。

由于一台计算机中可能会存在很多磁盘,每个磁盘都可以装载一个操作系统,此时BIOS中的Boot Sequence模块会决定启动那个磁盘中的操作系统。

第三步:MBR(Master Boot Recorder)引导将内核加载到内存中

在完成自检以及选择好装载哪个操作系统之后,BIOS会将选定磁盘的0号扇区上的MBR加载进内存引导其加载内核模块。

MBR(512B)= Boot Loader(446B)+ Partition information(16B*4)+ Reserve(2B)

为了方便的访问内核所在的磁盘,MBR中的Boot Loader会将内核所在的分区暂时指定为“根文件分区”,然后通过该种路径访问内核,并将其加载进内存中。内核加载完毕以后,会指定非本分区的一个分区为真实的根分区,并将内核所在的分区挂载到真实根分区的/boot目录下,此时用户可以通过/boot/对内核文件进行访问。

加载的内核文件由两部分组成:压缩的内核文件和进行内核解压的程序。内核的真实文件非常大,为了减小加载过程中IO的消耗,将内核文件压缩后再加载进内存,然后由内核解压模块对压缩程序进行解压。

当前常用的Boot Loader就是GRUB。其分为三个阶段(查看/boot/grub):

1st stage:位于MBR中,用于引导2nd stage。

1.5 stage:位于boot基本磁盘分区当中,为了识别内核文件所在的文件系统提供文件系统识别扩展。

2nd stage:位于boot基本磁盘分区当中,GRUB的引导程序。

问题:boot分区和内核分区可以是存在于一个分区内吗?

答:为了方便boot分区支持更多的分区类型,如LVM、raid等中。boot分区最好不要和内核分区位于同一分区当中,因为内核分区只支持基本分区类型,若boot非基本分区类型,则MBR中Boot Loader中的1st stage不能识别2nd stage。

第四步:操作系统的安装

当内核被加载进内存以后,内核的解压程序会将压缩的内核模块解压在内存中,此时内核便会启动第一个进程(0号进行)。由于启动改进程需要执行/sbin/init,此时内核并不一定存在识别‘/’文件系统的功能。因为没有加载相应硬件的驱动程序。为了适应不同的硬件平台,内核被设计成一个多模块程序,在不同的硬件平台下加载不同的驱动程序。

那如何得知需要加载哪些驱动程序呢?在Boot Loader将内核加载到内存之后,Boot Loader还会加载一个能够识别各种硬件驱动的程序,也就是initrd(init ram disk)。该程序会检测内核运行的硬件平台,得知需要加载哪些驱动程序以后,将这些应用程序打包加载进内存当中。

此时由于真实的根文件系统并没有挂载,所以initrd被内核当做根文件系统进行访问,启动各种驱动程序。initrd会挂载新的根分区,并生成一个init(0号进程)进行管理有initrd启动起来的进程,同时将自身识别的各种硬件文件一并复制但真实的根分区之后就自行退出了。

第五步:初始化工作(/sbin/init)

操作系统安装完毕之后,会执行一系列初始化动作,这些动作被定义在/etc/inittab,该文件中定义的init都要完成的任务有:

1、设置默认运行级别。

运行级别:

0:关机

1:单用户模式,直接以root身份进入系统,常用不密码修改。

2:多用户模式,支持网络,不支持NFS(Network File System)。

3:多用户模式,字符界面,支持网络和NFS。(常用)

4:预留模式。

5:多用户模式,图形界面。(常用)

6:重启系统。

运行级别的相关命令:

# init  [0-6] :切换运行级别

# runlevel / who  -r :查看当前的运新级别。

2、指定用户初始化脚本(/etc/rc.sysinit)。

3、启动指定级别下要(启动|关闭)系统服务。

查看系统服务命令:

# chkconfig  --list

系统如何得知该启动或关闭哪些服务呢?在/etc/rc.d/文件夹中存在每个运行级别对应的文件夹,如rc0.d、rc3.d、rc5.d等,每个文件夹中的文件如下:

[root@anna-laptop case_and_function]# ll /etc/rc.d/rc3.d/
K10saslauthd         K87named             S10network           S25blk-availability  S90crond
K15htcacheclean      K87restorecond       S11auditd            S25netfs             S95atd
K15httpd             K89rdisc             S11portreserve       S26haldaemon         S97rhnsd
K15svnserve          S02lvm2-monitor      S12rsyslog           S26udev-post         S97rhsmcertd
K50netconsole        S08ip6tables         S15mdmonitor         S55sshd              S99libvirt-guests
K75ntpdate           S08iptables          S22messagebus        S80postfix           S99local

上述的文件的命名都以[K|S][num][server_name]命名:

* 以S开头的是要启动的服务。

* 以K开头的是要关闭的服务。

* num表示该服务启动或者关闭的次序。

系统启动服务的时候就会读取在对应运行级别下的该文件,然后以num的大小对服务进行遍历,对于以S开头的文件执行“/etc/rc.d/rc#.d/S#server_name start”命令。以K开头的文件执行“/etc/rc.d/rc#.d/K#server_name stop”命令。

4、定义“Ctrl+Alt+Delete”的操作。

5、初始化字符终端,启动login服务,并显示/etc/issue文件中的内容。

6、如果需要启动图形界面,会启动图形终端。

转载于:https://blog.51cto.com/11229885/1754905

Linux系统开机自启流程相关推荐

  1. linux系统的服务器怎么设置上电自启,Linux系统开机自启流程

    第一步:POST(Power On Safe Test)加电自检 当按下电源键以后,CPU因为有电流通过便开始对自身.I/O设备.内存等硬件进行检验.那么CPU如何得知这些自检指令?我们知道指令存在于 ...

  2. Linux系统捕获数据包流程

    Linux系统捕获数据包流程 为了提高数据包的捕获效率,瓶颈问题是一个需要非常关注的焦点.减少在捕获数据包过程中的瓶颈,就能够提高数据包捕获的整体性能.下面本文将以Linux操作系统为平台,分析捕获数 ...

  3. linux系统开机过程描述

    本文描述linux系统开机过程,属于个人理解范畴,如果文中表述有误请大家批评指正! 计算机开机之后,首先要加载BIOS(基本输入输出系统)信息,BIOS包含了很多重要的信息,包括CPU信息,设备启动顺 ...

  4. Linux添加开机自启服务

    Linux添加开机自启服务 su - chmod +x /etc/rc.local vim /etc/rc.local #末行追加启动命令 #例如 systemctl restart mysql su ...

  5. linux 开机速度 固态,Windows/Linux系统开机OCZ胜出

    SSD评测报告 以下是相关测试项目结果: Windows系统开机效率 作业系统的开机过程,对於硬盘.SSD来说,是相当重要的测试,因为复杂的开机文件读入,是很好的综合性读入评量,也反应最终用户操作计算 ...

  6. Linux系统开机启动流程介绍

    一.linux系统进程启动流程图: 二.简单概括描述linux系统从开机到登陆界面的启动过程 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核 5.启动init进程 6.读取i ...

  7. linux开机引导进程是什么,Linux系统开机启动流程介绍

    一.linux系统进程启动流程图: 二.简单概括描述linux系统从开机到登陆界面的启动过程 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核 5.启动init进程 6.读取i ...

  8. Linux系统开机过程详细分析

    各位是否曾经对电脑整个开机的流程感到好奇呢 ? 这一次 , 我们所要讨论的  主题 , 就是 Linux 从开机的一瞬间到 login 为止 , 到底发生了什么事情 ? 想必各位都知道 , 在刚开机时 ...

  9. linux设置开机自启服务,linux设置服务开机自启动的三种方式

    linux设置服务开机自启动的三种方式 这里介绍一下linux开机自动启动的几种方法,共计3种,大家可以借鉴一下!经验里面以centos 5.3系统为例! 方法1:.利用ntsysv命令进行设置,利用 ...

最新文章

  1. Core Animation1-简介
  2. 【转】Linux程序编译速度提高方法
  3. Hadoop简介(1):什么是Map/Reduce
  4. PHP如何安装和配置Zend Studio
  5. kettle 空字符串 null问题解决
  6. linux二进制数据16进制数据转换,[轉]16进制字符文本/二进制文件迷你互转器
  7. linux hosts请求报错
  8. 动手试试Android Studio插件开发
  9. verilog 产生m序列
  10. 云计算概论-大数据与云计算
  11. html 点击方块旋转,前端每日实战:86# 视频演示如何用纯 CSS 创作一个方块旋转动画...
  12. 混合云存储跨云灾备方案之跨云备份
  13. 高速公路收费标准c语言,c语言课程设计报告-高速公路收费系统
  14. 计算机usb接口不工作原理,电脑usb接口不能用,详细教您电脑usb接口不能用怎么办...
  15. android跑马灯效果横向,Android TextView 横向滚动(跑马灯效果)
  16. VMware vCenter/vSphere/vSan/Esxi/7.0 lic许可
  17. qq空间把android改成iphone,qq空间改iPhone6 Plus的教程
  18. Angular2组件与Echarts饼状图交互之饼图制作
  19. 开发一款app软件需要什么样的服务器
  20. 第四方支付平台哪个好?这类第四方支付或惨遭淘汰

热门文章

  1. PHP 实例 - AJAX RSS 阅读器
  2. Error: could not open `C:\Java\jre7\lib\i386\jvm.cfg
  3. 让不带www的域名跳转到带www的域名
  4. PHP图形图像的典型应用 --常用图像的应用(验证码)
  5. c 最大子序列和_算法总结:左神class8—跳台阶+最长递增公共子序列
  6. Vim的使用和快捷键介绍
  7. 2021年广西高考成绩查询方法,2021年广西高考成绩查询网站查分网址:https://www.gxeea.cn/...
  8. 关于 There is no getter for property named ‘id‘ in ‘class java.lang.Integer‘
  9. @EnableConfigurationProperties 注解和@ConfigurationProperties注解实现配置绑定
  10. IDEA 创建 SpringCloud项目-多项目方式