设为首页 收藏本站
查看: 501|回复: 0

[经验分享] linux系统启动流程

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-6 15:04:12 | 显示全部楼层 |阅读模式
linux CentOS 6的启动流程
   
    linux系统的结构可以分为三个部分:

        1.kernel+rootfs(内核与根文件系统)

        kernel主要负责进程管理,内存管理,网络管理,驱动程序,文件系统,安全功能等
        rootfs:面向用户的根文件系统

        
        2.库:函数集合,编译好的二进制文件,用于在链接阶段同目标代码一起生成可执行文件,不能直接使用,只能用来调用
          procedure: 过程调用
          函数调用:必须要有返回值即结果

        3.程序:依赖于配置文件的可执行应用


接下来我们开始介绍系统的启动流程:

    首先我们大概了解一下启动流程:
        POST --> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 --> 关闭或启动对应级别下的服务 --> 启动终端


    第一步:POST(Power-on self test):加电自检,其中包括BIOS(Basic Input and Output System)
            具体自检项目主要为系统的硬件:CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等
            
    第二步:BOOT Sequence(boot 引导次序):
                按次序查找各引导设备,第一个由引导程序的设备即为本次启动用到的设备,找到设备后,会加载主引导记录MBR,大小为512个字节,主要储存预启动信息,分区表信息
        注:MBR概括:
            bootloader: 主引导记录,占用446位
            Partition table:文件系统分区表,占用64位
            Magic number:磁盘的有效标志55AA,16进制检测是否存在,占用2位  

    所以对于磁盘来讲MBR所占用的字节为446+64+2=512位,位于第一块磁盘的前512个字节中,系统BIOS检测到磁盘里MBR以后即找到引导grub,grub就于MBR中

    第三步:boot loader引导装载程序,
            bootloader为操作系统内核运行的一小段程序,通过初始化硬件设备,建立内存空间的映射图,从而将软硬件环境初始化完成,boot loader有若干种,其中grub,Lilo和spfdisk是常见的boot loader
            这里我们选择grub,环境初始化成功后,系统读取内存中的grub配置信息即/boot/grub/grub.conf

    第四步:内核初始化(kernel):
            根据grub设定的内核映像所在路径,系统读取内存映像并进行解压缩操作此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。系统将解压后的内核放置于内存中,并调用start_kernel1()函数来启动一系列初始化函数并初始化各种设备,完成linux核心环境的建立,至此,linux内核建立完成,基于linux程序可以运行

    第五步:通过基于用户层的init来设置运行级别:
                内核加载后,第一个运行的程序为/sbin/init文件,该文件会读取/etc/inittab文件以完成初始化工作,其中包括设定运行系统的级别:

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

                由0-6,7个级别,分别如下
                    0:关机
                    1:单用户模式,(root,无须登陆)singel,维护模式
                    2:多用户模式,会启动网络功能,但不会启动NFS,维护模式
                    3: 多用户模式,正常模式:默认为文本界面
                    4:预留界别;可同3级别
                    5:多用户模式,正常模式,图形界面;
                    6:重启
            格式为:id:3:initdefault: 意思为当前系统运行级别为3级别

                默认级别为3和5

                切换级别:init #(#为以上数字级别)
               
1
2
3
4
[iyunv@www ~]# init 3#
                [iyunv@www ~]# runlevel ; who -r
                4 3   #上次使用级别为4 ,当前级别为3
                 run-level 3  2015-09-02 01:30   last=4



                查看当前运行级别:runlevel ; who -r
               
1
2
3
[iyunv@www ~]# runlevel ; who -r
                N 3
                     run-level 3  2015-09-01 16:59



     第六步: init进程执行/etc/rc.d/rc.sysinit文件
             设定完运行级别后,linux系统将执行第一个用户层文件就是rc.sysinit脚本文件,其中包括网络配置,启动swap,PATH等一些主要程序


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[iyunv@www rc.d]# vim rc.sysinit
# Taken in part from Miquel van Smoorenburg's bcheckrc.
#
HOSTNAME=$(/bin/hostname)  #主机名
set -m
if [ -f /etc/sysconfig/network ]; then
    . /etc/sysconfig/network    #加载网卡信息
fi
if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then
    HOSTNAME=localhost
fi
if [ ! -e /proc/mounts ]; then   #挂载伪文件系统
        mount -n -t proc /proc /proc
        mount -n -t sysfs /sys /sys >/dev/null 2>&1
fi
if [ ! -d /proc/bus/usb ]; then #检测是否有sub文件系统,否则创建挂载
        modprobe usbcore >/dev/null 2>&1 && mount -n -t usbfs /proc/bus/usb /proc/bus/usb
else
        mount -n -t usbfs /proc/bus/usb /proc/bus/usb
fi
#remount /dev/shm to set attributes from fstab #669700
mount -n -o remount /dev/shm >/dev/null 2>&1
#remount /proc to set attributes from fstab #984003
后边省略。。。



从上边我们可以看到rc.sysinit脚本加载的程序有很多

第七步: 启动内核模块

    具体依据/etc/modules.conf文件或/etc/modules.d目录下文件来装载内核模块

第八步:
    执行不同运行级别的脚本程序
  根据运行级别的不同,系统会运行rc0.d到rc6.d中相对应的文件来装载内核模块
[iyunv@www boot]# cd /etc/rc.d/
[iyunv@www rc.d]# ls
init.d  rc  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local  rc.sysinit
        
        rc 0 --> 意味着将读取/etc/rc.d/rc0.d/的文件:

                K*: K##*: #运行次序:数字越小,越先运行
                S*:S##*:##运行次序,数字越小,越先运行


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[iyunv@www rc.d]# ls
init.d  rc  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local  rc.sysinit
[iyunv@www rc.d]# cd rc0.d/
[iyunv@www rc0.d]# ls
K01smartd          K50netconsole        K80kdump           K89rdisc
K05atd             K60crond             K83bluetooth       K90network
K05wdaemon         K60nfs               K83nfslock         K92ip6tables
K10cups            K69rpcsvcgssd        K83rpcgssd         K92iptables
K10psacct          K72autofs            K84NetworkManager  K95firstboot
K10saslauthd       K73winbind           K84wpa_supplicant  K99cpuspeed
K15htcacheclean    K74acpid             K85mdmonitor       K99lvm2-monitor
K15httpd           K74haldaemon         K85messagebus      K99rngd
K16abrt-ccpp       K74ntpd              K87irqbalance      K99sysstat
K16abrtd           K75blk-availability  K87restorecond     S00killall
K25sshd            K75netfs             K87rpcbind         S01halt
K30postfix         K75ntpdate           K88auditd
K30spice-vdagentd  K75quota_nld         K88rsyslog
K50dnsmasq         K75udev-post         K89portreserve



第九步: 执行/etc/rc.d/rc.local文件

    这个文件主要为系统初始化进入工作后,用户可以自定义个性化的一步

第十步:执行/bin/login程序,进入登陆状态

    此时,系统就到达了登陆用户界面,输入uername和password即可登陆系统


启动流程到此结束,,启动流程中间会有好多复杂的函数库调用,这里以后慢慢补充吧!累了。。。。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-110244-1-1.html 上篇帖子: centos6系统启动流程 下篇帖子: Linux文件系统上的特殊权限(SUID、SGID、Sticky) linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表