导语
>> linux系统的组成部分:
由内核、根文件系统组成,内核提供对进程、内存、网络协议栈、文件系统、驱动程序、安全的管理;
进程与进程之间是可以通信的,这种通信类型叫IPC (inter process communication , 进程间通信);
IPC一般包括消息队列(message queue), 信号量(semaphores), 共享内存(shared memory , 简写shm)等;
主机之间的通信是通过socket原始套接字进程进行的;
>> 运行中的系统环境可分为2层,内核空间和用户空间;
用户空间主要运行应用程序,表现为具体的进程或线程;
用户空间中的进程或线程需要执行某些特权级指令时,会向内核代码的系统调用发起请求,由内核代码代为完成特权级的操作;
内核空间主要运行内核代码,内核代码通常都是特权级操作,通过系统调用向用户空间的进程或线程进行输出;
用户空间也叫用户模式,内核空间也叫内核模式;
文件系统工作在内核空间;
>> 内核设计流派:
单内核设计:把所有功能集成于同一个程序;linux属于单内核设计类型
微内核设计:每种功能使用一个单独的子系统实现;Windows、Solaris属于微内核设计类型;
>> Linux内核特点:
支持模块化;
支持模块运行时动态装载或卸载;
>> Linux内核组成部分:
核心文件:[centos 7 : /boot/vmlinuz-VERSION-release ]
ramdisk:
CentOS 5 : /boot/initrd-VERSION-release.img , 此文件可用工具程序创建’mkinitrd’;
CentOS 6,7 : /boot/initramfs-VERSION-release.img , 此文件可用工具程序创建’dracut’,’mkinitrd’;
各种模块文件;[centos 7 : /lib/modules/vmlinuz-VERSION-release]
linux内核的特性之一:使用缓冲和缓存来加速对磁盘上的文件的访问;
ramdisk是把内存当磁盘使用,这样就会在内存中有双缓冲;所以 CentOS 6/7采用的是 ‘initramfs’文件方式;
CentOS系统的启动流程(PC架构,MBR启动类型):
————————————————————————–
1、 POST加电自检;
POST里面内置有ROM芯片,芯片中内置有CMOS(Complementary Metal Oxide Semiconductor,互补金属氧化物半导体),
CMOS里面有基本的输入输出系统—BIOS (Basic Input and Ooutput System);
2、Boot Sequence :
按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用到的设备;
3、bootloader : 引导加载器,引导程序;
> 引导加载器的分类: >> Windows的引导加载器:ntloader; >> Linux的引导加载器: >>> LILO : Linux Loader; >>> GRUB : Grand Uniform Bootloader; >>>> CentOS 5,6 : GRUB 0.X (Grub Legacy) >>>> CentOS 7 : GRUB 1.X (Grub2) > 引导程序(引导加载器)的功能: >> 提供一个菜单,允许用户选择要启动的系统版本或内核版本; >> 把用户选定的内核装载到RAM的特定空间中,经过解压、展开操作后将系统控制权移交给内核; MBR : Master Boot Record ,主引导记录,一共占用512bytes; >> 446bytes : bootloader引导程序; >> 64bytes : DPT (Disk Partition Table,硬盘分区表); >> 2bytes : magic number,固定为55AA; Grub Legacy : >> 第1阶段,1st stage :bootloader >> 第1.5阶段,1_5 stage : Partition ,filesystem driver >> 第2阶段,2nd stage :Partition,/boot/grub
4、加载内核到RAM,解压,展开后,初始化内核自身:
探测可识别到的所有硬件设备;
加载硬件驱动程序(有可能会借助于ramdisk加载驱动);
以只读方式挂载根文件系统;;;;
运行用户空间的第一个应用程序:/sbin/init;;;;
>> init程序类型: >>> CentOS 5: SysV init , 配置文件为 /etc/inittab >>> CentOS 6: Upstart , 配置文件为 /etc/init/*.conf; /etc/inittab(仅用于定义默认运行级别) >>> CentOS 7: Systemd , 配置文件为 /usr/lib/systemd/system/ , /etc/systemd/system/
阶段总结(CentOS 5),系统初始化(内核级别):
POST —> BootSequence(BIOS) —> Bootloader(MBR) —> 加载kernel(ramdisk) —> 挂载根文件系统rootfs —-> /sbin/init
>> 运行级别:为了系统的运行或维护等目的而设定的机制;总共有7个级别(0-6)[CentOS 5:SysV init 为例];; 0 : shutdown , 关机; 1 : single user ,单用户模式;root用户使用,无需认证;维护模式; 2 : multi user , 多用户模式;回启动网络功能,但不启动NFS;维护模式; 3 : multi user , 多用户模式;文本界面,完全功能模式; 4 : 预留级别,目前无特别使用目的,但习惯以同3级别功能使用; 5 : multi user , 多用户模式;图形界面,完全功能模式; 6 : reboot ,重启;
级别查看命令:
~]# runlevel
~]# who -r
级别切换:
~]# init # ‘#’表示级别的数字;
5、 配置文件:/etc/inittab; 每行定义一种’action’以及与之对应的’process’;
id:runlevels:action:process
字段解释:
id : 一个任务的表示符;
runlevels : 在哪些级别启动此任务;
action : 在什么条件下启动此任务;
wait : 等待切换至此任务所在的级别时执行一次;
respawn : 一旦此任务终止,就自动重新启动之;
initdefault : 设定默认运行级别;此时,’process’字段为空;
sysinit : 设定系统初始化方式;此处一般指定脚本’/etc/rc.d/rc.sysinit’;[CentOS 5/6有此脚本;CentOS 7没有];
process : 任务名字;
举例:”id:3:wait:/etc/rc.d/rc 3″
说明:’rc’脚本可接受一个运行级别的数字;此脚本会去调用’/etc/rc.d/rc3.d/’目录下的脚本来控制相关服务;
>> ‘/etc/rc.d/rc$runlevel.d/’目录下的文件类别说明:
K* : ‘K’开头的脚本文件,要停止的服务的相关脚本;脚本文件名格式为’K##*’,其中’##’表示数字,代表优先级;数字越小,越优先关闭;依赖的服务先关闭,最后关闭被依赖的服务;
S* : ‘S’开头的脚本文件,要启动的服务的相关脚本;脚本文件名格式为’S##*’,其中’##’表示数字,代表优先级;数字越小,越优先启动;被依赖的服务先启动,最后启动依赖的服务;
***************
>> CentOS 7 的’/etc/inittab’文件内容如下:
[root@kouyuushinn ~]# [root@kouyuushinn ~]# more /etc/inittab # inittab is no longer used when using systemd. # # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target # # systemd uses 'targets' instead of runlevels. By default, there are two main targets: # # multi-user.target: analogous to runlevel 3 # graphical.target: analogous to runlevel 5 # # To view current default target, run: # systemctl get-default # # To set a default target, run: # systemctl set-default TARGET.target # [root@kouyuushinn ~]#
总结,CentOS 7 查看与修改启动级别命令:
~]# systemctl get-default 查看启动级别;
~]# systemctl set-default multi-user.target 修改/设置为’3’启动级别;
~]# systemctl set-default graphical.target 修改/设置为’5’启动级别;
>> 系统初始化脚本:
CentOS 5/6 : /etc/rc.d/rc.sysinit
1> 设置主机名;
2> 设置欢迎信息;
3> 激活udev和SELinux;
4> 挂载’/etc/fstab’文件中定义的所有文件系统;
5> 检测根文件系统,并以读写方式重新挂载根文件系统;
6> 设置系统时钟;
7> 根据’/etc/sysctl.conf’文件来设置内核参数;
8> 激活lvm及软raid设备;
9> 激活swap设备;
10> 加载额外设备的驱动程序;
11> 清理操作;
阶段总结(CentOS 5/6),用户空间的启动流程:/sbin/init(/etc/inittab)
设置默认运行级别 —> 运行系统初始化脚本,完成初始化 —> 关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务 —> 设置登录终端 [—> 启动图形终端]
CentOS 6 启动:
Upstart , 配置文件为 /etc/init/*.conf; /etc/inittab(仅用于定义默认运行级别)
rcS.conf 系统初始化脚本;
rc.conf 关闭和启动服务;
start-ttys.conf 设置登录终端;
CentOS 7 启动:
Systemd ,配置文件为 /usr/lib/systemd/system/ , /etc/systemd/system/ ;
****************************************************************************