zoukankan      html  css  js  c++  java
  • Linux系统初始流程

    一、0S(内核的功能):平台类软件(通用软件)

    进程管理:进程调度器(scheduler)维持一个任务结构(task_struct)

    内存管理:如何使用线性地址空间,如何分段,如何分页,如何避免内存(页内,页外)碎片等

    I/O管理:给设备提供驱动程序,以及让各设备注册I/O,完成中断

    文件系统:ext4,reiserfs,xfs

    驱动程序:驱动硬件设备

    安全相关:SELinux,加密解密库

    二、内核设计的两大流派

    1、单内核设计(单一体系结构):将所有功能都做成一个整体在内核中

    Linux是单内核(兼具微内核的特性):

    模块化设计:核心+外围功能性模块组成

    .ko:kernel object

    内核支持动态装卸载模块

    2、微内核(多体系结构):将各功能做成内核子系统

    Windows是微内核:更适合线程类的编程

    3、进程由fork()而来,而init负责管理用户空间的进程,这也是之所以init的PID(进程ID)号永远为1的原因,/sbin/init可执行文件

    三、Linux系统的初始化流程

    1、POST(Power On Self Test)加电自检:ROM+RAM

    2、BIOS:Boot Sequence(启动次序)

    3、MBR:

    前446KB:bootloader

        LILO:Linux Loader

            不能引导位于1024 Cylinder以后的分区中的OS

        GRUB:GRand Unified Bootloader

            1st stage:位于MBR中,为了引导2nd stage

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

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

            boot分区大小:

                CentOS5:100M

                CentOS6:200M

            Grub的功能:

                选择要启动的内核或系统

                交互式接口

                基于密码的保护

    grub.conf配置文件语法:

    default=#:指定默认启动的内核或OS

    timeout=#:等待用户选择要启动的内核或OS的时长,单位为秒

    splahimage=/path/to/splashimage_file:指定使用的背景图片

    hiddenmenu:隐藏菜单

    title

        root(hd0,0)

            (Device,Part)

            Device表示方式:在gurb中,全部以hd开头,并紧跟一个数字做各磁盘设备的标记,从0开始编号

            Part:表示方式,代表分区,从0开始编号

        kernel

            指定内核文件及传递给内核的参数

            参数:ro root=/path/to/DEVICE quiet(初始化信息以静默模式,不再输出)

        initrd

             文件:通常为cpio归档,并使用gzip压缩;通常以img作为文件名后缀

    grub的安装:

    第一种方式:

    # grup

    grub> root (hd#,#)

    grub> setup (hd#)

    grub> quit

    第二种方式:

    # chroot /mnt/sysimage

    # grub-install --root-directory=/ /dev/sda(指磁盘)

        然后64KB:分区表

    最后2KB:5A(特殊标记,用来表示分区表是否有效)

    kernel文件:必须要放在基本磁盘分区上(CentOS5:initrd,CentOS6:initramfs)

    4、/sbin/init

    /lib/modules

    initrd:

        rd:ram disk,把内存当做磁盘来使用

    /sbin/init:

        /etc/inittab

        /etc/rc.d/rc.sysinit脚本

    (CentOS5:/etc/inittab,CentOS6:/etc/init/*.conf)

    init:

        CentOS 5:SysV格式的系统初始化程序

           串行化:A --> B --> C

           需要A启动完成后才能启动B,B启动完成后才能启动C

        CentOS 6:Upstart并不兼容SysV

            基于dbus通信

            并行初始化:A启动了不用等到A启动完成就启动B

        /etc/inittab中定义的操作:

        设定默认运行级别

        指定系统运行的初始脚本

        启动指定级别下的要启动的服务,并关闭需要停止的服务

            /etc/init.d/

                /etc/rc.d/rcN.d(0-6)

                    S##

                    K##

        定义Ctrl+Alt+Delete组合的动作

        初始化字符终端

            终端:对应的设备

              /dev/tty#,/dev/ttyS#,/dev/console,/dev/pts/#

              调用:login-->/etc/issue

        启动图形终端

              X-Window,调用桌面管理器

        CentOS 7:SystemD参考了OS X中并行初始化的特性,又能完全兼容SysV

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

    设置主机名

    打印文本欢迎信息

    激活SELinux和udev

    激活swap

    挂载/etc/fstab定义的本地文件系统

    检测根文件系统并对其以读写方式重新挂载

    设置系统时钟

    挂载键盘映射

    根据/etc/sysctl.conf设置内核参数

    激活RAID和LVM设备

    清理操作

  • 相关阅读:
    libyuv 代码结构分析,借用其NEON/ARM64优化代码
    Android 交叉编译 IPerf3
    Android Change TCP Congestion Control
    Unpack & Repack Android system.img & data.img
    Android can only be built by versions 3.81 and 3.82
    Build Android Kernel && Kernel Module
    换行符
    python之%s、%d、%f的使用
    Python+selenium 实现不定位元素,输入enter键
    进程间通信 (IPC) 方法总结(三)
  • 原文地址:https://www.cnblogs.com/fansik/p/5993723.html
Copyright © 2011-2022 走看看