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.178linux.com/30175