Linux内核
内核概述
如图,最上面是用户空间(User Space),是用户程序执行的地方;用户空间之下是内核空间(Kernel Space),内核位于此。基于此,GUN C Library(glibc)提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制,因为内核空间和用户空间的应用程序使用的是不同的保护地址空间。用户空间的进程使用的是自己的虚拟地址空间
,而内核则占用单独的地址空间。
内核的核心功能:
-
系统调用接口(System call interface)
-
程序管理(Process control)
-
内存管理(Memory management)
-
文件系统管理(Filesystem management)
-
设备的驱动(Device drivers)
Linux内核的特点
-
支持模块化
-
支持模块的动态装载和卸载
linux内核的设计原则
单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。
内核的组成部分
核心文件:
/boot/vmlinuz-VERSION-release ramdisk: CentOS 5:/boot/initrd-VERSION-release.img CentOS 6:/boot/initramfs-VERSION-release.img
模块文件:/lib/modules/VERSION-release/
CentOS 系统启动流程
POST(Power On Self Test):
检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。
加载BIOS(Basic Input and Output System):
根据在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器(硬盘、光盘、U盘等)。在平时的启动过程中,大多为硬盘启动,基于此,BIOS会读取硬盘的第0磁道的第1扇区(MBR)的内容来引导启动。
BOOT Sequence:
按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备
MBR(Master Boot Record):
三部分组成,分别是主引导程序(Bootloader)、硬盘分区表DPT(Disk Partition Table)和magic number。
Bootloader:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核。
在Linux中常用的主引导程序有LILO(LInux LOader)和GRUB(GRand Uniform Bootloader),此处以GRUB引导为例。
启动引导程序GRUB:
stage1:stage1的代码直接存在于MBR,是后续引导的入口,无识别文件系统的能力。
stage1.5: MBR之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统,具有识别文件系统的能力。
stage2:加载磁盘分区(/boot/grub/)
启动内核:
当stage2被载入内存执行时,首先会解析grub的配置文件/boot/grub/grub.conf,然后加载内核镜像到内存中,并将控制权转交给内核。而内核会立即作自身初始化。
-
探测可识别的所有硬件设备
-
加载硬件驱动程序(可能会借助于ramdisk加载驱动)
-
以只读方式挂载rootfs
-
运行用户空间的第一个应用程序:/sbin/init
运行init程序
-
CentOS 5:SysV
-
CentOS 6:Upstart
-
CentOS 7:Systemd
设置默认运行级别
-
CentOS 5:/etc/inittab
-
CentOS 6:/etc/inittab,/etc/init/*.conf
-
CentOS 7:default.target–>/usr/lib/systemd/system/*.target
运行系统初始脚本,完成系统初始化
/etc/rc.d/rc.sysinit
启动内核模块
/etc/modules.conf
/etc/modules.d/*
关闭对应级别下应关闭的服务,启动需要启动的服务
/etc/rc.d/rc#.d/*
执行自定义引导程序
/etc/rc.d/rc.local
设置登陆终端
/sbin/mingetty
原创文章,作者:Jeason,如若转载,请注明出处:http://www.178linux.com/30369