zoukankan      html  css  js  c++  java
  • Linux:Day13(上) CentOS系统启动流程

    CentOS 5和6的启动流程

      Linux:kernel+rootfs

        kernel:进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能

        rootfs:

          glibc

        库:函数集合,function,调用接口

          过程调用:procedure,无返回值。

          函数调用:function,有返回值。

        程序

        操作系统启动过程简要描述:开机后,想办法让内核运行起来,内核运行起来后让它加载根文件系统,运行根文件系统上的第一个应用程序init,init负责整个用户空间所有应用程序的启动、回收等。

      内核设计流派:

        单内核设计:Linux

          把所有功能集成于同一个程序;

        微内核设计:Windows,Solaris

          每种功能使用一个单独子系统实现;

      Linux内核特点:

        支持模块化:.ko

        支持模块的动态装载和卸载;

        组成部分:

          核心文件:/boot/vmlinuz-VERSION-release

            ramdisk:

              CentOS 5:/boot/initrd-VERSION-release.img

              CentOS 6:/boot/initramfs-VERSION-release.img

          模块文件:/lib/modules/VERSION-release  # 内核模块目录版本号必须与内核严格匹配。

    CentOS 系统启动流程:

      POST:加电自检;

        ROM:CMOS

          BIOS:Basic Input and Output System

          ROM+RAM

      BOOT Sequence:

        按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到的设备;

        bootloader:引导加载器,程序

          windows:ntloader

          Linux:

            LILO:LInux LOader

            GRUB:GRand Uniform Bootloader

              GRUB 0.X:GRUB Legacy

              GRUB 1.X:GRUB2

          功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核;

        MBR:

          446:bootloader

          64:fat  File Allocation Table

          2:55AA

        GRUB:

          bootloader:1st stage

          disk:2nd stage

      kernel:

        自身初始化:

          探测可识别到的所有硬件设备;

          加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)

          以只读方式挂载根文件系统;

          运行用户空间的第一个应用程序:/sbin/init

          init程序的类型:

            SysV:init,CentOS 5

              配置文件:/etc/inittab

            Upstart:init,CentOS 6

              配置文件:/etc/inittab,/etc/init/*.conf

            Systemd:systemd,CentOS 7

              配置文件:/usr/lib/systemd/system,/etc/systemd/system

          ramdisk:

            内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问;

              ramdisk --> ramfs

              CentOS 5:initrd,工具程序:mkinitrd

              CenOS 6:initramfs,工具程序:mkinitrd,dracut

        系统初始化:

          POST --> BootSequence(BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只读) --> init

    /sbin/init

      CentOS 5:

        运行级别:为了系统的运行或维护等应用目的而设定;

          0-6:7个级别

            0:关机

            1:单用户模式(root,无须登录),single,维护模式;

            2:多用户模式,会启动网络功能,但不会启动NFS,维护模式;

            3:多用户模式,正常模式;文本界面;

            4:预留级别;可同3级别;

            5:多用户模式,正常模式;图形界面;

            6:重启

          默认级别:

            3,5

          切换级别:

            init #

          查看级别

            runlevel

            

            前一个为之前级别,后一个为当前级别。N表是None

            who -r

      配置文件:/etc/inittab

        每一行定义一种action以及与之对应的process

          id:runlevel:action:process  # id可以是任何字母组成,当然也可以用id本身。

            action:

              wait:切换至此级别运行一次;

              respawn:此process终止,就重新启动之;

              initdefault:设定默认运行级别;porcess省略;

              sysinit:设定系统初始方式,此处一般为指定/etc/rc.d/rc.sysinit;

          id:3:initdefault:

          si::sysinit:/etc/rc.d/rc.sysinit

          l0:0:wait:/etc/rc.d/rc 0

          l1:1:wait:/etc/rc.d/rc 1

          ...

          l6:6:wait:/etc/rc.d/rc 6

          说明:rc 0 --> 意味着读取/etc/rc.d/rc0.d/

            K*:K##*:##运行次序:数字越小,越先运行;数字越小的服务,通常为依赖到别的服务;

            S*:S##*:##运行次序:数字越小,越先运行;数字越小的服务,通常为被依赖到的服务;

            for srv in /etc/rc.d/rc0.d/K*;do

              $srv stop

            done

            for srv in /etc/rc.d/rc0.d/S*;do

              $srv stop

            done

          chkconfig命令

            查看服务在所级别的启动或关闭设定情形:

              chkconfig [--list] [--type type][name]

            添加:

              SysV的服务脚本放置于/etc/rc.d/init.d(/etc/int.d)

              chkconfig --add name

                #!/bin/bash

                #

                #chkconfig:LLLL nn nn

            删除:

              chkconfig --del name

            修改指定的链接类型

              chkconfig [--level levels] name <on|off|reset>

                --level LLLL:指定要设置的级别;省略时表示2345;

          注意:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本;因此,不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中;

        tty1:2345:respawn:/usr/sbin/mingetty tty1

        tty2:2345:respawn:/usr/sbin/mingetty tty2

        ....

        tty6:2345:respawn:/usr/sbin/mingetty tty6

          mingetty会调用login程序

      

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

        (1)设置主机名;

        (2)设置欢迎信息;

        (3)激活udev和selinux;

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

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

        (6)设置系统时钟;

        (7)激活swap设备;

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

        (9)激活lvm及software raid设备;

        (10)加载额外设备的驱动程序;

        (11)清理操作;

      总结:/sbin/init --> (/etc/inittab) --> 设置默认运行级别 --> 运行系统初始化脚本、完成系统初始化 --> 关闭对应下需要关闭的服务,启动需要启动服务 --> 设置登陆终端

    CentOS 6:

      init程序为:upstart,其配置文件:/etc/initab,/etc/init/*.conf

        注意:/etc/init/*.conf文件语法遵循upstart配置文件语法格式;

    博客作业:系统启动流程;

    启动系统时,设置其运行级别1; 

  • 相关阅读:
    【MySQL疑难杂症】如何将树形结构存储在数据库中(方案二 Path Enumeration)
    【MySQL疑难杂症】如何将树形结构存储在数据库中(方案一 Adjacency List)
    【Java疑难杂症】利用Java核心库实现简单的AOP
    【Java入门提高篇】Day5 Java中的回调(二)
    【Java入门提高篇】Day4 Java中的回调
    【SpringMVC】使用Myeclipse创建SpringMVC项目【超详细教程】
    使用GDAL/OGR读写矢量文件
    WebGL简易教程(四):颜色
    WebGL简易教程(三):绘制一个三角形(缓冲区对象)
    OSG与Shader的结合使用
  • 原文地址:https://www.cnblogs.com/sq5288/p/10628796.html
Copyright © 2011-2022 走看看