Linux组成

Linux: kernel+rootfs
    kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
    rootfs:程序和glibc
    库:函数集合, function, 调用接口(头文件负责描述)
          过程调用:procedure,无返回值
          函数调用:function
    程序:二进制执行文件

内核
Linux内核特点:

  • 支持模块化:.ko(内核对象)如:文件系统,硬件驱动,网络协议等
  • 支持内核模块的动态装载和卸载

组成部分:
核心文件:/boot/vmlinuz-VERSION-release
    ramdisk:辅助的伪根系统
    CentOS 5: /boot/initrd-VERSION-release.img
    CentOS 6,7: /boot/initramfs-VERSION-release.img
模块文件:/lib/modules/VERSION-release

CentOS6启动流程


1.加载BIOS的硬件信息,获取第一个启动设备
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4.核心执行init程序,并获取默认的运行信息
5.init程序执行/etc/rc.d/rc.sysinit文件
6.启动核心的外挂模块
7.init执行运行的各个批处理文件(scripts)
8.init执行/etc/rc.d/rc.local
9.执行/bin/login程序,等待用户登录
10.登录之后开始以Shell控制主机

启动流程的简单描述:

当用户打开电源后,BIOS开机自检,确定启动设备,安装启动设备,启动设备上面安装的GRUB开始引导Linux,Linux首先先进行内核引导,通过跟切换,执行init程序,init程序确定启动级别,根据启动级别进行系统初始化和运行的服务,然后返回init启动终端,用户通过验证成功登陆Shell,这就是一个从开机到登陆的启动过程。

一、硬件引导启动

当用户打开电源后POST开始自检,检测硬件设备是否确实或者存在故障(是否影响正常开机),如果不影响正常开机,就把任务交给BIOS。BIOS通过搜索,安装启动确定启动设备,启动项为硬盘,BIOS去读取硬盘的前512字节到内存,找到BootLoader,确定GRUB

二、GRUB引导启动内核

这一部分概况起来就是:GRUB程序加载执行并开始引导kernel程序

Boot Loader就是在操作系统内核运行之前运行的一小段程序。通过GRUB引导可以确定内核程序,因为引导扇区只有446字节,GRUB只是一个小的程序安装在里面,真正使用的在MBR后面的扇区存放,我们想使用Bootloader GRUB功能必须读取后面的文件,Bootloader GRUB功能程序的运行和加载配置选项分为三个阶段

  • Stage1阶段:

Stage1阶段其实就是执行系统安装时预先写入到MBR的Bootloader中的程序。

Stage1阶段的任务仅是将硬盘0柱面0磁道2扇区的内容读入内存并执行,它是Stage1.5阶段或Stage2阶段的入口,引导进入Stage1.5阶段或Stage2阶段。 在此Stage1阶段,还没有识别文件系统的能力。

  • Stage1.5阶段:

stage1.5阶段是stage1阶段和stage2阶段的中间桥梁。stage1.5阶段具有识别启动分区文件系统的能力,此后GRUB程序便有能力去访问/boot分区下/grub目录下的 stage2文件,并将stage2载入内存执行。

  • Stage2阶段

Stage2阶段执行时,首先会解析GRUB程序的配置文件grub.conf,并依配置文件决定是否显示系统启动菜单。然后加载内核镜像到内存中,通过initrd程序建立RAMDisk内存虚拟根文件系统。此时控制权将转交给内核程序。

三、内核引导启动

这一部分主要是通过在内存中建立虚拟根文件系统实现相关设备的驱动并建立和切换到真正的根文件系统。

解压内核镜像加载到内存,以及initrd程序建立RAMDisk内存虚拟根文件系统后,内核开始驱动基本硬件,并调用虚拟根文件系统中的init程序加载驱动模块初始化系统中各种设备的相关配置工作,其中包括CPU、I/O、存储设备等。当所需的驱动程序加载完后,会根据grub.conf配置文件中“root=XXX”部分所指定的内容创建一个根设备,然后将根文件系统以只读的方式挂载,并切换到真正的根文件系统上,同时调用系统进程的/sbin/init程序,进入系统初始化阶段。

四、系统初始化

这一步是通过/sbin/init,init程序准备软件运行坏境,启动系统服务

通过/etc/inittab文件确定运行级别,然后去执行系统初始化脚本/etc/rc.sysinit,为用户初始化用户空间环境,在完成初始化后,根据运行级别,系统开始对应级别的目录启动服务,关闭那些不要的服务(里面S99local -> ../rc.local)用户自动服务启动脚本

运行级别:为系统运行或维护等目的而设定;0-6:7个级别
0:关机
1:单用户模式(root自动登录), single, 维护模式
2: 多用户模式,启动网络功能,但不会启动NFS;维护模式
3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别
5:多用户模式,正常模式;图形界面
6:重启
默认级别:3, 5
切换级别:init #
查看级别:runlevel ; who -r

[root@centos6 ~]#vim /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
#   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)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:

系统初始化脚本:/etc/rc.d/rc.sysinit

(1)设置主机名;

(2)设置欢迎信息;

(3)激活udev和selinux;

(4)挂载/etc/fstab文件中定义的所有文件系统;

(5)检测根文件系统,并以读写方式重新挂载根文件系统;(重新挂载是指根文件检测完之后)

(6)设置系统时钟;

(7)根据/etc/sysctl.conf文件来设置内核参数;

(8)激活lvm即软raid设备;

(9)激活swap设备;

(10)加载额外设备的驱动程序;(内核加载驱动只加载根文件系统的)

(11)清理操作;

/etc/rc.d/文件

etc/rc.d/rc作用为当级别切换时启动或停止服务;此脚本接受传递的参数给脚本中$runlevel变量,然后,读取/etc/rc$runlevel.d/K*和/etc/rc$runlevel.d/S*所有文件,这些文件决定了机启动后,有些服务会自动启动,有些服务没有启动。

K*:要停止的服务,K##*,优先级,数字越小,越优先关闭,依赖的服务先关闭,然后再关闭被依赖的。

S*:要启动的服务,S##*,优先级,数字越小,越是优先启动,被依赖的服务先启动,而依赖的服务后启动。

[root@centos6 ~]#ls /etc/rc.d/rc5.d/
K01smartd        K75quota_nld       S10network           S26acpid
K02oddjobd       K76ypbind          S11auditd            S26haldaemon
K05wdaemon       K84wpa_supplicant  S11portreserve       S26udev-post
K10psacct        K87restorecond     S12rsyslog           S28autofs
K10saslauthd     K88sssd            S13cpuspeed          S50bluetooth
K15htcacheclean  K89netconsole      S13irqbalance        S55sshd
K15httpd         K89rdisc           S13rpcbind           S56xinetd
K50dnsmasq       K92iptables        S15mdmonitor         S70spice-vdagentd
K50kdump         K92pppoe-server    S22messagebus        S80postfix
K60nfs           K95firstboot       S23NetworkManager    S82abrtd
K61nfs-rdma      K99rngd            S24nfslock           S83abrt-ccpp
K69rpcsvcgssd    S01sysstat         S24rpcgssd           S90crond
K73winbind       S02lvm2-monitor    S25blk-availability  S95atd
K74ntpd          S05rdma            S25cups              S99certmonger
K75ntpdate       S08ip6tables       S25netfs             S99local

五、启动终端,用户登录

这一步是用户登录shell过程

如果没有改变级别,默认情况执行/sbin/mingetty打开6个纯文本终端,让用户输入用户名和密码。输入完成后,再调用login程序,核对密码。如果密码正确,就从文件 /etc/passwd 读取该用户指定的shell,然后启动这个shell。

Linux系统启动流程图

Linux启动流程详解相关推荐

  1. 引导linux为什么要用实模式,Linux引导过程与故障排除|第1章:Linux启动流程详解...

    1. BIOS 当你按下电源键的那一刻起,计算机的的启动就开始了.Intel x86 系列的 CPU 可以分别在 16 位 实模式(Real mode) 和 32 位 保护模式(Protected m ...

  2. 【正点原子Linux连载】第三十二章 U-Boot启动流程详解 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  3. U-Boot启动流程详解

    参考:U-Boot顶层目录链接脚本文件(u-boot.lds)介绍 作者:一只青木呀 发布时间: 2020-10-23 13:52:23 网址:https://blog.csdn.net/weixin ...

  4. golang程序启动流程详解

    golang程序启动流程详解 环境 go1.16.5 linux/amd64 用例 package mainimport "fmt"func main() {fmt.Println ...

  5. android zygote启动流程,Android zygote启动流程详解

    对zygote的理解 在Android系统中,zygote是一个native进程,是所有应用进程的父进程.而zygote则是Linux系统用户空间的第一个进程--init进程,通过fork的方式创建并 ...

  6. 【Autosar 启动流程详解】

    Autosar 启动流程详解 1. vLinkGen_Template.lsl 2. BrsHwStartup.c 3.BrsMainStartup.c 4.BrsMain.c 链接文件: 1. vL ...

  7. 【线上沙龙直播报名】App 启动流程详解及其优化

    点击上方"公众号"可以订阅哦 [美团点评技术沙龙Online]是美团点评技术团队推出的线上分享课程,每月2-3期,采用目前最火热的线上直播形式,邀请美团点评技术专家,面向互联网技术 ...

  8. Springboot启动流程详解

    SpringMVC请求流程详解 SpringMVC框架是一个基于请求驱动的Web框架,并且使用了'前端控制器'模型来进行设计,再根据'请求映射规则'分发给相应的页面控制器进行处理. (一)整体流程 每 ...

  9. Android App启动流程详解

    前言:在之前的文章中已经写了apk的打包流程.安装流程,今天就是梳理一下apk系列的最后的流程--app启动流程.经过今天的梳理以后咱们就可以对apk包是怎么编译生成的.apk是怎么被安装到安卓手机的 ...

最新文章

  1. .如何实现浏览器内多个标签页之间的通信?
  2. Myeclipse中遇到Unauthorized
  3. 面试不懂分布式锁?那得多吃亏
  4. 学计算机去大工中大,厦门大学和大连理工大学你 选哪个?哪个好。厦门大学和东南大学、天津大学、武汉大学、中山大学去那个...
  5. 开源代码分析技巧之——打印调用逻辑
  6. 幻影机器人庄园参观路线_市委老干部局机关党员干部一行赴机器人小镇参观考察...
  7. html ng-app,为什么AngularJs写了2个及以上的ng-app=会导致页面渲染不成功
  8. 【UML】部署图Deployment diagram(实现图)(转)
  9. matlab保存f黑白图片_Matlab微积分
  10. 动态分区分配存储管理方式的内存分配回收
  11. 了解计算机编码的一般特征,教招信息知识点:计算机编码的一般特征
  12. java监控网卡流量_流量监控脚本监控网卡
  13. 各省简称 拼音 缩写_近50个拼音/英文缩写合集 (一)
  14. JAVACC使用总结(四):LOOKAHEAD解决语法选择冲突的利刃
  15. 小米4c怎么添加语言怎么设置在哪个文件夹,小米4C怎么加密图片?私密文件夹使用方法...
  16. 基本农田卫星地图查询_天地图山东,购房者勘测利器,国产骄傲
  17. 【随笔记】做事要讲究轻重缓急,一定要把握主次轻重。
  18. 超详细!!vue、vue-cli脚手架项目使用prerender-spa-plugin,解决SEO并为其添加title,keyWords,descript
  19. Warshell算法实现
  20. 小米12s ultra,索尼xperia1 iv,数码相机 拍照对比

热门文章

  1. Go语言核心之美 2.3-复数
  2. 考研政治——马克思三大定律之否定之否定
  3. 24岁我有了自己的公司
  4. android应用市场 更新,当贝市场(com.dangbeimarket) - 4.2.9 - 应用 - 酷安
  5. oracle安装后,电脑变得很卡,解决办法(安装的是oracle11g)
  6. 二叉树的镜像和对称二叉树
  7. 软件构造-Reading 1:静态检查
  8. 介绍一个浏览器被劫持后不能跳转到主页的处理方法
  9. 美团项目 ---首页开发2
  10. HTML信件-一种奇特的实现方式