zoukankan      html  css  js  c++  java
  • linux开机后第一个程序--init

    背景知识

    计算机启动基本流程如下

    1)首先开机自检-POST,

    2)自检通过后根据CMOS的配置找到第一个可启动磁盘的MBR中的boot loader程序(一般在启动磁盘的第一个物理扇区,占446字节),并把控制权交给boot loader

    3)bootloader完成操作系统内核的加载,并把控制权交给内核

    4)内核继续完成系统的启动

    说明:

    1)POST,会检查自身硬件是否正常. 在BIOS进行设置,管理

    2)BIOS:保存着系统最重要的基本输入输出程序,系统信息设置、开机上电自检程序和系统启动自举程序等。

    3)CMOS:主板上的一块可读写的RAM芯片,主要用来保存当前系统的硬件配置和操作人员对某些参数的设定。由系统通过一块后备电池供电,因此无论是在关机状态中,还是遇到系统掉电情况,CMOS信息都不会丢失。现在多数厂家将CMOS设置程序做到了 BIOS芯片中,在开机时通过按下某个特定键就可进入CMOS设置程序而非常方便地对系统进行设置,因此这种CMOS设置又通常被叫做BIOS设置。

    4)MBR:主引导记录,一共512字节,详细内容如下

                    446: bootloader
                    64: fat--磁盘分区表
                    2: 55AA--bootloader是否有效的标记
     
    要了解boot loader,首先需要说下boot sequnence.
     
    5)BOOT Sequence: 按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备。引导设备中用到的程序叫 bootloader(引导加载器)。
           例如:
                  windows上的引导加载器叫ntloader
                  Linux:LILO:LInux loader
         
           为了能够引导不同的操作系统,于是有了GRUB
                  GRUB: GRand Uniform Bootloader---统一引导加载器,可引导多个引导系统,现在发展到第2代。
                            GRUB 0.X: GRUB Legacy
                            GRUB 1.x: GRUB2---2代GRUB,完全重写了
                    功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,然后解压、展开,并把系统控制权移交给内核;    
     
          GRUB: 启动加载过程     http://blog.csdn.net/u011797751/article/details/50256907
     
    6)内核加载后需要解压,展开,然后进行自身初始化,包括如下内容:
        
                    1)探测可识别到的所有硬件设备;
                    2)加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)
                    3)以只读方式挂载根文件系统;
                    4)运行用户空间的第一个应用程序:/sbin/init

     7)ramdisk--虚拟内存盘,通过软件将一部分内存(RAM)模拟为硬盘来使用的一种技术

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

    这种技术在centos5中存在一个问题:内存把ramdisk当作是一个硬盘,即使这部分已经放在内存中,依然会被ramdisk当作硬盘放到缓冲区,浪费了资源,而ramfs可以被视为一个文件系统,可以直接在内存中运行,所以centos5-->6做了一个升级,ramdisk --> ramfs

                            CentOS 5: initrd,  工具程序:mkinitrd
                            CentOS 6: initramfs, 工具程序:mkinitrd, dracut

    正文开始

     1.  /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,例如id:5:initdefault:
     
                            action:
                                wait: 切换至此级别运行一次;
                                respawn:此process终止,就重新启动之;
                                initdefault:设定默认运行级别;process省略;
                                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 start
                                done
    etc/rc.d/init.d/目录下的所有启动脚本都被链接到/etc/rc.d/目录下的各级别目录中,比如/rc3.d, rc4.d, rc5.d
     
    CentOS 7 ,配置文件:/usr/lib/systemd/system, /etc/systemd/system 
    CentOS 6,配置文件:/etc/inittab, /etc/init/*.conf (其实用的这个)
     
     
     
    2.  chkconfig命令:   
                                             
    查看服务在所有级别的启动或关闭设定情形: chkconfig [--list] [name]      
                         
    添加:新添加了一个服务程序,需要把启动脚本放在目录/etc/rc.d/init.d (/etc/init.d),然后需要在各级别上创建链接文件
             chkconfig --add name,在配置文件中指明级别,优先级如下                
               #!/bin/bash
               #
               # chkconfig: LLLL nn nn  (这里的LLLL表示各级别,写上的就表示S,第一个nn表示S的优先级,第2个nn表示K的优先级,例如chkconfig: 345 66 33,一般K的优先级要小于S的优先级)                     
             查看链接文件,比如新建服务名字是testsrv,ls -l /etc/rc.d/rc0.d/K33testsrv      ls -l /etc/rc.d/rc3.d/S66testrv
                                      
    删除:chkconfig --del name
                                    
    修改指定的链接类型:
    chkconfig [--level levels] name <on|off|reset>
    --level LLLL: 指定要设置的级别;省略时表示2345;
     
    注意:
    正常级别下(ls /etc/rc.d/rc3.d/目录中),最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本(ls -l /etc/rc.d/rc3.d/S99local查看);因此,不便或不需写成脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中(里面放置开机服务最后一步要运行的东西);
     
     
     
     
    3. update-rc.d命令
     
    ubuntu中和chkconfig类似的开机启动控制命令
    以tomcat为例子,如果是启动命令,可以在/etc/rc.local中添加
    如果想运行脚本,则需要先将脚本复制或者软连接到/etc/init.d/目录下,然后用:update-rc.d tomcat defaults NN命令(NN为启动顺序,比如95),如果想卸载, update-rc.d -f tomcat remove
  • 相关阅读:
    一个简单XQuery查询的例子
    《Microsoft Sql server 2008 Internals》读书笔记第七章Special Storage(1)
    《Microsoft Sql server 2008 Internals》读书笔记第八章The Query Optimizer(4)
    《Microsoft Sql server 2008 Internal》读书笔记第七章Special Storage(4)
    SQL Server中SMO备份数据库进度条不显示?
    《Microsoft Sql server 2008 Internal》读书笔记第七章Special Storage(5)
    《Microsoft Sql server 2008 Internal》读书笔记第七章Special Storage(3)
    《Microsoft Sql server 2008 Internal》读书笔记第八章The Query Optimizer(2)
    省市三级联动的DropDownList+Ajax的三种框架(aspnet/Jquery/ExtJs)示例
    FireFox意外崩溃时的手工恢复命令
  • 原文地址:https://www.cnblogs.com/regit/p/7825924.html
Copyright © 2011-2022 走看看