Linux進程查看及管理(2)
CentOS5和6的啟動流程: Liunx中的啟動:kernel和rootfs(根文件系統) kernel:進程管理,內存管理,網絡管理功能,驅動程序,文件系統,安全功能(權限模型), rootfs:glibc(lib,lib64) 庫:函數集合,function(功能模塊)有其調用接口(頭文件是對函數功能或調用參數的功能進行描述)沒有直接入口-->需要進行調用: 過程調用:procedure:沒有返回值 函數調用:function:有返回值 程序: 完整系統概念:kernel+庫+程序
內核設計流派
單內核設計:把所有功能集成于同一個程序,中央集權運作,統一進行使用,如果出現問題導致系統崩潰;效率高! 微內核設計:每一個功能都是一個獨立的子系統:使用統一調用完成功能;聯邦式運作!效率低,風險低;實現線程模型; Liunx內核特點: 支持模塊化:.ko 支持模塊化的動態裝載和卸載; 組成部分:核心文件:(/boot/vmlinuz-VERSION-release) ramdisk:虛擬硬盤根文件系統;在安裝操作系統最后一步生成: CentOS5:/boot/initrd-VERSION-release.img CentOS6:/boot/initramfs-VERSION-release.img 模塊文件:/lib/modules/VERSION-release [root@wanghongkai boot]# file /boot/vmlinuz-2.6.32-358.el6.x86_64 /boot/vmlinuz-2.6.32-358.el6.x86_64: Linux kernel x86 boot executable bzImage, version 2.6.32-358.el6.x86_64 (mockbuil, RO-rootFS, swap_dev 0x3, Normal VGA 內核模塊與內核版本號要嚴格匹配: [root@wanghongkai tmp]# cd /lib/modules/ [root@wanghongkai modules]# ls 2.6.32-358.el6.x86_64 2.6.32-642.3.1.el6.x86_64 真正的內核文件都在: [root@wanghongkai 2.6.32-642.3.1.el6.x86_64]# cd /lib/modules/2.6.32-358.el6.x86_64/kernel/ [root@wanghongkai kernel]# ls arch crypto drivers fs kernel lib mm net sound
CentOS系統啟動流程:
POST:加電自檢:由ROM芯片上的CMOS程序決定的 BIOS:基本輸入輸出系統:Basic Input and Output System BOOT Sequence:必須有引導加載器:bootloader Liunx:LILO:LInux LOaer GRUB:GRand Unifrom Bootloader GRUB 0.X :GRUB legacy-->CentOS7之前 GRUB 1.X :GRUB2-->CentOS7 功能:提供一個菜單,允許用戶選擇要啟動系統或不同的內核版本,把用戶指定的內核轉載進內存空間中;-->解壓,展開-->將控制權轉交給內核; CentOS5.6[root@wanghongkai kernel]# rpm -q grub grub-0.97-94.el6_7.1.x86_64 按次序查找各引導設備,第一個有引導程序的設備即為本次啟動用戶設備; MBR:446-->bootloader,64-->fat,2-->55AA GRUB:必須要識別分區上文件系統! bootloader:1st stage disk:2nd stage -->必須要磁盤分區: [root@wanghongkai ~]# ls /boot/grub/ device.map grub.conf minix_stage1_5 stage2 e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 ufs2_stage1_5 fat_stage1_5 jfs_stage1_5 splash.xpm.gz vstafs_stage1_5 ffs_stage1_5 menu.lst stage1 xfs_stage1_5 kernel:需要自解壓或grub解壓 第一次加載根-->只讀方式加載; 自身初始化: 探測可識別到的所有硬件設備: 加載硬件驅動程序:(有可能會借助于ramdisk加載驅動) 以只讀方式掛載根文件系統: 運行用戶空間的第一個應用程序:/sbin/init init程序類型: SysV:init,CentOS 5 配置文件:/etc/inittab Upstart:接近于并行啟動:init 配置文件:/etc/inittab,/etc/init/*.conf-->upstart的配置文件; Systemd:systemd,CentOS 7由sysctl來啟動服務: 配置文件:/usr/lib/systemd/system,/etc/systemd/system ramdisk: 內核中特性之一:使用緩沖和緩存來對磁盤上的文件訪問; ramdisk-->ramfs CentOS 5 :initrd,工具程序:mkinitrd(腳本) CentOS 6 :initramfs,工具程序:mkinitrd,dracut
總結系統初始化:
POST-->BootSequence(BIOS)-->Bootloader(MBR)-->kernel(ramdisk)-->已只讀方式(根文件系統)rootfs-->init CentOS5:運行級別:為了系統的運行或維護等應用目的而設定: 級別:0-6,7個級別 0:關機,1:單用戶模式-->single,2:多用戶模式(啟動網絡功能),3:多用戶模式,正常模式:(文本界面);4:預留級別,5:多用戶模式(圖形界面);6:重啟系統; 默認級別:3,5都是可以的 級別切換:init # 查看級別:runlevel,who -r [root@wanghongkai ~]# who -r run-level 5 2016-07-31 04:26 [root@wanghongkai ~]# runlevel N 5-->N代表為0 每個級別對應的配置文件: 每一行定義一種action以及與之對應的process [root@wanghongkai ~]# cat /etc/inittab # inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # ****id:5:initdefault:-->設定默認運行級別! -->id 用戶名,5,運行級別: wait:切換至次級別運行一次: respwan:此process終止,就重新啟動之: initdefault:設定默認運行級別:process省略 sysinit:完成系統初始化:設定系統初始化方式,此處一搬為指定/etc/rc.d/rc.sysinit:完成系統初始化:設定系統初始化方式,此處一搬為指定/etc/rc.d/sysinit:完成系統初始化:設定系統初始化方式,此處一搬為指定/etc/rc chkconfig命令:顯示在每個級別下每個服務被傳遞了stop還是start參數 [root@wanghongkai rc5.d]# chkconfig --list NetworkManager 0:off 1:off 2:on 3:on 4:on 5:on 6:off abrt-ccpp 0:off 1:off 2:off 3:on 4:off 5:on 6:off abrtd 0:off 1:off 2:off 3:on 4:off 5:on 6:off acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off autofs 0:off 1:off 2:off 3:on 4:on 5:on 6:off blk-availability 0:off 1:on 2:on 3:on 4:on 5:on 6:off 修改某個級別參數stop或start chkconfig --level5 服務名 stop或start [root@wanghongkai init.d]# cat NetworkManager #!/bin/sh # # NetworkManager: NetworkManager daemon # ****# chkconfig: - 23 84-->???依賴于chkconfig修改 # description: This is a daemon for automatically switching network \ # connections to the best available connection. # # processname: NetworkManager # pidfile: /var/run/NetworkManager/NetworkManager.pid # ****### BEGIN INIT INFO-->???依賴于Upstart # Provides: network_manager $network # Required-Start: messagebus # Required-Stop: messagebus # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: start and stop NetworkManager # Description: NetworkManager is a tool for easily managing network connections ### END INIT INFO 添加:chkconfig --add name SysV的服務腳本放置于/etc/rc.d/init.d(/etc/init.d) 自定義創建啟動服務: 1:在/etc/init.d下創建服務以及名稱: 2:chkconfig --add name 將服務加入到自啟動項中: 3:使用chmod +x 給自定義服務執行權限; 注意:正常級別下,最后啟動一個服務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)-->設置默認運行級別-->運行系統初始化腳本,完成系統初始化-->關閉對應下需要關閉的服務,啟動需要啟動服務-->設置登錄終端; CentOS6: init程序為:upstart 其配置文件; /etc/inittab,/etc/init/*.conf 注意:/etc/init/*.conf文件語法,遵循 upstart配置文件語法格式; 啟動系統時,設置其運行級別1; 1:shutdown -r now
原創文章,作者:wostop,如若轉載,請注明出處:http://www.www58058.com/30175