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设备

清理操作

posted @ 2016-10-24 17:12  fansik  阅读(200)  评论(0编辑  收藏  举报