Linux=kernel+rootfs
  kernel  进程管理 内存、网络管理,驱动程序,文件系统,安全功能
  rootfs
    glibc

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

  程序:

  内核设计流派
    单内核设计:Linux
        把所有功能集成于同一个程序
    微内核设计:windows,solaris
        每种功能使用一个单独子系统实现
    
  

    Linux内核特点
      支持模块化:  .ko
      支持模块的动态装载和卸载

      组成部分
          核心文件:/boot/vmlinuz-VERSION-release
        ramdisk:
            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 2:55AA
        GRUB :
            bootloader: 1st stage
            disk: 2nd stage
        
    kernel
        自身初始化
            探测可识别道德所有硬件设备
            加载硬件驱动程序:(有可能会借助于ramdisk加载驱动)
            以只读方式挂载根文件系统    
            运行用户空间的第一个应用程序: /sbin/init

            init程序的类型
                SysV:init,centos5
                    配置文件:/etc/inittab
                Upstart:init centos 6
                    配置文件: /etc/initab,/etc/init/*.conf
                Systemd: systemd centos7
                    配置文件: /usr/lib/systemd/system,/etc/systemd/system
                
            ramdisk 
                内核中特性之一:使用缓冲和缓存来回使对磁盘上的文件访问;    
                ramdisk-->ramfs
                centos 5 initrd 工具程序mkinitrd
                centos 6 initramfs 工具程序mkinitrd dracut
    系统初始化
    PST --> 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 上次和当前所在级别
        who -r  显示时间
配置文件 /etc/inittab

    每一行定义一种action以及与之对应的process
        id:runlevel:action:process
            action
                wait
                respawn 重启
                initdefault 设定默认运行级别
                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 0
        ...
        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
        命令chkconfig --list    列出级别
            chkconfig --level #  NAME  off|on 修改级别
        
        添加
            vim /etc/rc.d/init.d/testsrv

            #!/bin/bash
            #
            #chkconfig:345 66(S文件序号)  33(K文件的序号)  必须有这行注释用来读取序号  
            #description:test
            echo hello
        chkconfig --add testsrv
        chkconfig --list testsrv
        chkconfig --del testsrv
        修改指定的连接类型
        chconfig [--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清理操作
    


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


centos 6:
    init程序为  upstart,配置文件/etc/inittab,/etc/init/*.conf
    /sbin/init
    注意:/etc/init/*.conf文件语法遵循upstart配置文件语法格式

POSR --> Boot Sequence(BIOS) --> Boot loader(MBR) -->  Kernel (ramdisk) -->
switchroot --> /sbin/init -->(/etc/inittab  /etc/init/*.conf)  -->设置默认运行级别
--> 系统初始化脚本  --》关闭或启动对应级别下的服务--》启动终端