操作系统内核的功能:
进程调度
内存管理
文件系统
硬件驱动
网络功能
安全
提供缓冲和缓存加速系统性能
内核的设计模式:
微内核:内核只保留最核心的功能,而其它应该由内核实现的功能交由子系统来实现
单内核:把所有功能全部做进内核
linux: 单内核,把许多功能做成了内核模块(ko: kernel object)
内核模块可以动态装载和卸载
/boot/kernel-vision --> /lib/modules/vision/kernel/*
linux系统的启动流程:
POST(上电自检) -->BIOS -->Boot Squence --> MBR -->Boot Loader(代码)-->Kernel(初始化)-->initrd-->/sbin/init(/etc/inittab)-->login
1.系统会先去加载 BIOS (Basic Input Output System),并透过BIOS 程序去加载CMOS中的信息,并且藉由 CMOS 内的配置值取得主机的各项硬件配置, 例如CPU 与周边设备的沟通时钟频率、启动装置的搜寻顺序、硬盘的大小与类型、 系统时间、各周边汇流排的是否启动 Plug and Play (PnP, 随插即用装置) 、设备的 I/O 位址、以及与 CPU 沟通的 IRQ 中断等等的信息。
2.在取得这些信息后,BIOS 会进行启动自我测试 (Power-on Self Test, POST) 。 然后开始运行硬件侦测的初始化,并配置 PnP 装置,之后再定义出可启动的装置顺序, 接下来就会开始进行启动装置的数据读取。
3.BIOS 是透过硬件的INT 13中断功能来读取 MBR 的,也就是说,只要 BIOS 能够侦测的到你的磁盘 (不论是 SATA 还是 IDE 的,那他就有办法透过INT 13 这条通道来读取该磁碟的第一个磁区内的 MBR !这样 boot loader 也就能够被运行!
4. Boot Loader 的最主要功能是要认识操作系统的文件格式并加载 kernel 文件到主内存中去运行
5. Linux 会将核心解压缩到主内存当中, 并且利用核心的功能,开始测试与驱动各个周边装置,包括储存装置、CPU、网络卡、声卡等等。 此时 Linux 核心会 以自己的功能重新侦测一次硬件,核心此时才开始接管 BIOS 后的工作。 一般来说,核心文件会被放置到 /boot 里面,并且取名为 /boot/vmlinuz 才对!
6. 虚拟文件系统 (Initial RAM Disk) 一般使用的文件名为 /boot/initrd
# zcat /boot/initrd-kernel-versiso | cpio -id -->当前目录
编辑init文件 # find . | cpio -o -H newc --quiet | gzip -9 >/mnt/boot/initrd.gz
7. 启动第一支程序 init
配置文件: /etc/inittab 与 runlevel
init 处理系统初始化流程 (/etc/rc.d/rc.sysinit)
Kernel启动时完成的任务:
硬件探测
硬件驱动初始化(initrd: RAMDISK)
挂载根文件系统(根切换initrd-->rootfs)
启动init进程
init(/etc/inittab):
设定默认运行级别
执行系统的初始化脚本(/etc/rc.d/rc.sysinit)
运行某级别相应的脚本(/etc/rc.d/rcN.d)
K
S
启动虚拟终端
对于5级别而言,还要初始图形界面
/etc/inittab:
这个文件的语法是利用冒号 (:) 将配置分隔成为四个栏位,每个栏位的意义与说明如下:
[ID]:[run level]:[init 的动作行为]:[命令项目]
1. ID:最多四个字节,代表 init 的主要工作项目,只是标识说明。
2. run level:该项目在哪些 run level 底下进行的意思。如果是 35 则代表 runlevel 3 与 5 都会运行。
3. init 的动作项目:主要可以进行的动作项目意义有:
1):initdefault --> 设定默认运行级别
2):sysinit --> 系统初始化的动作项目
3): ctrlaltdel --> 代表 [ctrl]+[alt]+[del] 三个按键是否可以重新启动的配置
4): wait --> 等待进入其相应级别以后才执行后面的命令
5): respawn -->代表后面栏位的命令可以无限制的再生(重新启动)。会首先执行一次PROCESS,当PROCESS终止时会自动重新启动
4. 命令项目:可以进行的命令,通常是一些 script。
系统初始化脚本完成的任务:-->/etc/rc.d/rc/sysinit
激活udev和selinux
根据/etc/sysctl.conf配置文件设置内核参数
设定系统时钟
设置键映射
启动交换分区
设置主机名称
重新检测根文件系统,并以读写方式重新挂载
激活RIADT和LVM
启用磁盘配额
检查和挂载其它文件系统 --> /etc/fstab
清理一些过期文件锁和PID文件等
/etc/rc.d/rc.sysinit
微型linux
POST --> BIOS(boot seq) -->Bootloader(MBR(446)) -->Kernel(RAMDISK: initrd) --> init(/etc/inittab)(rootfs)
bootloader ,kernel ,initrd, init(/etc/inttab) ,bash
配置文件:
/etc/inittab
/boot/grub/grub.conf
脚本:
/etc/rc.d/rc.sysinit
二进制程序:
/sbin/init
/bin/bash
/bin/sh -->/bin/bash
/bin/hostname
库:
使用ldd命令查看某二进制程序依赖的库,而后合部复制到对应目标目录下
/lib
查看某程序依赖的库文件:
ldd command