• Linux系统启动流程(2)


    内核设计风格:

    RedHat, SUSE
    核心:动态加载 内核模块
    内核:/lib/modules/“内核版本号命令的目录”/
    vmlinuz-2.6.32
    /lib/modules/2.6.32/

    RedHat5: ramdisk-->initrd
    RedHat6: ramfs-->initramfs






        单内核:Linux (LWP轻量级进程)
            核心:ko(kernel object)
            
            
            
            so()
            
        微内核:Windows, Solaris (线程)

    chroot: chroot /PATH/TO/TEMPROOT [COMMAND...]
        chroot /test/virrrot  /bin/bash
        
    ldd /PATH/TO/BINARY_FILE:显示二进制文件所依赖的共享库




    MBR(bootloader)--> Kernel --> initrd(initramfs) --> (ROOTFS) --> /sbin/init(/etc/inittab)
        /etc/inittab, /etc/init/*.conf
        upstart
        
    init /etc/inittab
    id:runlevels:action:process

    id:5:initdefault:

    si::sysinit:/etc/rc.d/rc.sysinit
    OS初始化

    l0:0:wait:/etc/rc.d/rc 0
        rc0.d/
            K*
                stop
            S*
                start
                
    /etc/rc.d/init.d, /etc/init.d

    服务类脚本:
        start
        
        SysV: /etc/rc.d/init.d
            start|stop|restart|status
            reload|configtest

    chkconfig         
            
    # chkconfig: runlevels SS KK              当chkconfig命令来为此脚本在rc#.d目录创建链接时,runlevels表示默认创建为S*开头的链接,-表示没有级别默认为S*开头的链接;除此之外的级别默认创建为K*开头的链接;
        S后面的启动优先级为SS所表示的数字;K后面关闭优先次序为KK所表示的数字;
    # description: 用于说明此脚本的简单功能; \, 续行

    chkconfig --list: 查看所有独立守护服务的启动设定;独立守护进程!
        chkconfig --list SERVICE_NAME
        
    chkconfig --add SERVICE_NAME

    chkconfig --del SERVICE_NAME

    chkconfig [--level RUNLEVELS] SERVICE_NAME {on|off}
        如果省略级别指定,默认为2345级别;


    样例脚本:
    #!/bin/bash
    #
    # chkconfig: 2345 77 22
    # description: Test Service
    #
    LOCKFILE=/var/lock/subsys/myservice

    status() {
      if [ -e $LOCKFILE ]; then
        echo "Running..."
      else
        echo "Stopped."
      fi
    }

    usage() {
      echo "`basename $0` {start|stop|restart|status}"
    }

    case $1 in
    start)
      echo "Starting..."
      touch $LOCKFILE ;;
    stop)
      echo "Stopping..."
      rm -f $LOCKFILE &> /dev/null
      ;;
    restart)
      echo "Restarting..." ;;
    status)
      status ;;
    *)
      usage ;;
    esac


    /etc/rc.d/rc.local:系统最后启动的一个服务,准确说,应该执行的一个脚本;


    /etc/inittab的任务:
    1、设定默认运行级别;
    2、运行系统初始化脚本;
    3、运行指定运行级别对应的目录下的脚本;
    4、设定Ctrl+Alt+Del组合键的操作;
    5、定义UPS电源在电源故障/恢复时执行的操作;
    6、启动虚拟终端(2345级别);
    7、启动图形终端(5级别);



    守护进程的类型:
        独立守护进程
        xinetd:超级守护进程,代理人
            瞬时守护进程:不需要关联至运行级别
            
        

    核心:/boot/vmlinuz-version
    内核模块(ko): /lib/modules/version/

    内核设计:
        单内核
            模块化设计
        微内核

    装载模块:
        insmod
        modprobe

    www.kernel.org:


        
    用户空间访问、监控内核的方式:
    /proc, /sys

    伪文件系统

    /proc/sys: 此目录中的文件很多是可读写的
    /sys/: 某些文件可写


    设定内核参数值的方法:
    echo VALUE > /proc/sys/TO/SOMEFILE
    sysctl -w kernel.hostname=
        
    能立即生效,但无法永久有效;

    永久有效:/etc/sysctl.conf

    修改文件完成之后,执行如下命令可立即生效:
    sysctl -p    
    sysctl -a: 显示所有内核参数及其值



    内核模块管理:
    lsmod: 查看

    modprobe MOD_NAME:装载某模块
    modprobe -r MOD_NAME: 卸载某模块

    modinfo MOD_NAME: 查看模块的具体信息

    insmod /PATH/TO/MODULE_FILE: 装载模块    
    rmmod MOD_NAME

    depmod /PATH/TO/MODILES_DIR

  • 相关阅读:
    创建基于MailKit和MimeKit的.NET基础邮件服务
    MailKit---获取邮件
    C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法
    .net 开源 FTP 组件 edtFTPnet
    Consul1-window安装consul
    通信传输利器Netty(Net is DotNetty)介绍
    工作中,如何衡量一个人的 JavaScript 编码水平?
    10个有趣又能编译为JavaScript的语言,你用过哪些?
    一定要你明白Java中的volatile
    面试总被问到HTTP缓存机制及原理?看完你就彻底明白了
  • 原文地址:https://www.cnblogs.com/jjzd/p/5812655.html
Copyright © 2020-2023  润新知