Linux: kernel+rootfs
kernel: 進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能
rootfs:
glibc
庫:函數集合, function, 調用接口
過程調用:procedure
函數調用:function
程序
內核設計流派:
單內核設計:Linux
把所有功能集成于同一個程序;
微內核設計:Windows, Solaris
每種功能使用一個單獨子系統實現;
Linux內核特點:
支持模塊化:.ko
支持模塊的動態裝載和卸載;
組成部分:
核心文件:/boot/vmlinuz-VERSION-release
例一:內核的核心文件
[root@localhost lib]# ls /boot/ vmlinuz-3.10.0-514.el7.x86_64
ramdisk:
CentOS 5: /boot/initrd-VERSION-release.img
CentOS 6: /boot/initramfs-VERSION-release.img
模塊文件:/lib/modules/VERSION-release
例一:查看模塊文件
[root@localhost lib]# ls /lib/modules/3.10.0-514.el7.x86_64/ build modules.block modules.devname modules.softdep vdso extra modules.builtin modules.drm modules.symbols weak-updates kernel modules.builtin.bin modules.modesetting modules.symbols.bin modules.alias modules.dep modules.networking source modules.alias.bin modules.dep.bin modules.order updates
CentOS 系統啟動流程:
POST:加電自檢;
ROM:CMOS
BIOS:Basic Input and Output System
ROM+RAM
BOOT Sequence:
按次序查找各引導設備,第一個有引導程序的設備即為本次啟動用到設備;
bootloader: 引導加載器,程序
windows: ntloader
Linux:
LILO:LInux LOader
GRUB: GRand Uniform Bootloader
GRUB 0.X: GRUB Legacy
GRUB 1.x: GRUB2
功能:提供一個菜單,允許用戶選擇要啟動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,并把系統控制權移交給內核;
MBR:
446: bootloader
64: fat
2: 55AA
GRUB:
bootloader: 1st stage
disk: 2nd stage
kernel:
自身初始化:
探測可識別到的所有硬件設備;
加載硬件驅動程序;(有可能會借助于ramdisk加載驅動)
以只讀方式掛載根文件系統;
運行用戶空間的第一個應用程序:/sbin/init
init程序的類型:
SysV: init, CentOS 5
配置文件:/etc/inittab
Upstart: init, CentOS 6
配置文件:/etc/inittab, /etc/init/*.conf
Systemd:systemd, CentOS 7
配置文件:/usr/lib/systemd/system, /etc/systemd/system
例一:centos7 init內核配置文件
[root@localhost ~]# ls /etc/systemd/system basic.target.wants display-manager.service bluetooth.target.wants getty.target.wants
例二:centos7 init內核配置文件
[root@localhost ~]# ls /usr/lib/systemd/system abrt-ccpp.service paths.target abrtd.service plymouth-halt.service
ramdisk:
內核中的特性之一:使用緩沖和緩存來回事對磁盤上的文件訪問;
ramdisk –> ramfs
CentOS 5: initrd, 工具程序:mkinitrd
CentOS 6: initramfs, 工具程序:mkinitrd, dracut
系統初始化:
POST –> BootSequence (BIOS) –> Bootloader(MBR) –> kernel(ramdisk) –> rootfs(只讀) –> init
/sbin/init
CentOS 5:
運行級別:為了系統的運行或維護等應用目的而設定;
0-6:7個級別
0:關機
1:單用戶模式(root, 無須登錄), single, 維護模式;
2: 多用戶模式,會啟動網絡功能,但不會啟動NFS;維護模式;
3:多用戶模式,正常模式;文本界面;
4:預留級別;可同3級別;
5:多用戶模式,正常模式;圖形界面;
6:重啟
默認級別:
3, 5
切換級別:
init #
查看級別:
runlevel
who -r
配置文件:/etc/inittab
每一行定義一種action以及與之對應的process
id:runlevel:action:process
action:
wait: 切換至此級別運行一次;
respawn:此process終止,就重新啟動之;
initdefault:設定默認運行級別;process省略;
sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit;
…
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
…
l6:6:wait:/etc/rc.d/rc 6
說明:rc 0 –> 意味著讀取/etc/rc.d/rc0.d/
K*: K##*:##運行次序;數字越小,越先運行;數字越小的服務,通常為依賴到別的服務;
S*: S##*:##運行次序;數字越小,越先運行;數字越小的服務,通常為被依賴到的服務;
for srv in /etc/rc.d/rc0.d/K*; do
$srv stop
done
for srv in /etc/rc.d/rc0.d/S*; do
$srv start
done
chkconfig命令
查看服務在所有級別的啟動或關閉設定情形:
chkconfig [–list] [name]
例一:查看所有服務 ,
[root@localhost ~]# chkconfig --list
例二:更改服務權限
[root@localhost ~]# chkconfig --level 3 network off
添加:
SysV的服務腳本放置于/etc/rc.d/init.d (/etc/init.d)
chkconfig –add name
#!/bin/bash
#
# chkconfig: LLLL nn nn
刪除:
chkconfig –del name
修改指定的鏈接類型
chkconfig [–level levels] name <on|off|reset>
–level LLLL: 指定要設置的級別;省略時表示2345;
注意:正常級別下,最后啟動一個服務S99local沒有鏈接至/etc/rc.d/init.d一個服務腳本,而是指向了/etc/rc.d/rc.local腳本;因此,不便或不需寫為服務腳本放置于/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置于/etc/rc.d/rc.local文件中;
tty1:2345:respawn:/usr/sbin/mingetty tty1
tty2:2345:respawn:/usr/sbin/mingetty tty2
…
tty6:2345:respawn:/usr/sbin/mingetty tty6
mingetty會調用login程序
/etc/rc.d/rc.sysinit: 系統初始化腳本
(1) 設置主機名;
(2) 設置歡迎信息;
(3) 激活udev和selinux;
(4) 掛載/etc/fstab文件中定義的文件系統;
(5) 檢測根文件系統,并以讀寫方式重新掛載根文件系統;
(6) 設置系統時鐘;
(7) 激活swap設備;
(8) 根據/etc/sysctl.conf文件設置內核參數;
(9) 激活lvm及software raid設備;
(10) 加載額外設備的驅動程序;
(11) 清理操作;
總結:/sbin/init –> (/etc/inittab) –> 設置默認運行級別 –> 運行系統初始腳本、完成系統初始化 –> 關閉對應下需要關閉的服務,啟動需要啟動服務 –> 設置登錄終端
CentOS 6:
init程序為: upstart, 其配置文件:
/etc/inittab, /etc/init/*.conf
注意:/etc/init/*.conf文件語法 遵循 upstart配置文件語法格式;
回顧:
CentOS 6啟動流程:
POST –> Boot Sequence(BIOS) –> Boot Loader (MBR) –> Kernel(ramdisk) –> rootfs –> switchroot –> /sbin/init –>(/etc/inittab, /etc/init/*.conf) –> 設定默認運行級別 –> 系統初始化腳本 –> 關閉或啟動對應級別下的服務 –> 啟動終端
原創文章,作者:kang,如若轉載,請注明出處:http://www.www58058.com/77615