RHCA05--进程管理与文件系统管理
文章目录
- 一、进程管理
- 1. 进程
- (1)ps命令
- (2)ps命令结果讲解
- (3)应用案例
- (4)进程管理基础
- (5)进程管理命令
- (6)top命令
- 2. 信号
- (1)例题:文件操作进程信号应用
- (2)例题:非正常关闭文件损坏问题
- 二、进程管理及调优
- 1. 进程信号管理
- (1)信号的基本概念
- (2)信号操作演示
- (3)信号完整列表
- (4)信号实践技巧
- 2. 信号的作用
- 3. kill命令
- (1)命令对比
- (2)安装与使用
- 4. 查看与发送信号
- (1)进程优先级
- (2)信号综合应用
- 5. 进程优先级
- (1)Nice值概念
- (2)Nice值查看方法
- (3)Nice值调整方法
- (4)Nice与renice的区别
- (5)优先级调整的意义
- 6. 应用案例
- (1)例题:使用Nice调整程序优先级
- 7. 进程优先级管理
- (1)Nice与cgroup的区别
- (2)后台进程管理
- (3)实时优先级系统
- 8. 静态优先级
- (1)静态优先级演示
- (2)例题:实时优先级查看
- (3)例题:实时优先级设置
- (4)实时优先级的参数
- 9. 进程优先级设置问题解析
- (1)Nice值与PR值的关系
- (2)优先级设置实例
- (3)常见问题解答
- 三、文件系统管理
- 1. 文件系统的构成
- (1)基本组成结构
- (2)inode详解
- (3)文件操作原理
- (4)快照技术原理
- (5)文件识别机制
- (6)重要特性说明
- 2. 应用案例
- (1)例题:文件操作
- (2)例题:命令操作
一、进程管理
1. 进程
(1)ps命令
-
基本概念:任何运行的命令都会成为一个进程,ps命令用于显示进程信息。
-
命令区别:
- 直接使用ps:仅显示当前终端下的进程。
- ps aux:显示系统所有进程,包括其他终端的进程。
-
参数说明:
- a:显示所有用户的进程。
- u:显示进程的拥有人信息。
- x:显示进程的额外信息。
-
输出字段解析:
- USER:进程拥有人。
- PID:进程ID,每个进程运行时的唯一标识。
- %CPU:CPU使用百分比。
- %MEM:内存使用百分比。
- VSZ:虚拟内存大小(Virtualization Size)。
- RSS:真实内存大小(Resident Set Size)。
- TTY:终端关联信息。
- STAT:进程状态。
- START:启动时间。
- TIME:运行时间。
- COMMAND:执行的命令。
-
例题:ps aux命令示例
- 内存类型说明:
- 虚拟内存:应用程序申请的内存空间。
- 物理内存:实际分配的内存空间。
- 类比:类似虚拟机磁盘的精简模式,按需分配实际空间。
- 内存类型说明:
-
例题:火狐浏览器内存占用情况
- 内存分析:
- 使用
pmap 5208
查看火狐浏览器进程内存。 - 虚拟内存:约2GB(2142192KB)。
- 物理内存:约260MB(266420KB)。
- 说明:应用程序通常会申请比实际使用更多的虚拟内存空间。
- 使用
- 内存管理概念:
- 虚拟内存不是swap空间。
- 从应用程序视角看,swap也属于物理内存。
- 详细内存管理将在后续章节讲解。
- 内存分析:
(2)ps命令结果讲解
-
进程与终端关系
- 终端标识:TTY列显示进程运行的终端,问号表示进程不属于任何终端。
- 虚拟内存与物理内存:VSZ表示虚拟内存使用量,RSS表示物理内存使用量。
- 终端类型:
- tty1-tty6:虚拟终端(通过Ctrl+Alt+F1-F6切换)。
- pts/0、pts/1:伪终端(图形界面打开的终端或SSH连接)。
- ttyS0:串口终端(COM口)。
-
终端类型详解
- 物理终端:直接连接主机的物理设备。
- 虚拟终端:通过Ctrl+Alt+F1-F6切换的6个虚拟控制台。
- 伪终端:
- 图形界面中打开的终端窗口。
- 通过SSH远程连接的终端(如pts/0、pts/1)。
- 串口终端:通过串行接口连接的设备(如ttyS0)。
-
系统进程分类
- 终端相关进程:显示具体TTY值的进程(如bash、sshd等)。
- 系统守护进程:
- TTY显示为问号。
- 在系统启动过程中产生(如systemd、kworker等)。
- 不依赖任何终端存在。
- 用户进程:
- 通过终端启动的应用程序。
- 关闭终端可能导致进程终止(除非使用nohup等方式)。
-
进程状态解析
- STAT列含义:
- S:可中断睡眠状态。
- s:会话首进程。
- +:位于前台进程组。
- I:空闲的内核线程。
- <:高优先级进程。
- 常见进程示例:
- sshd:SSH守护进程。
- bash:命令行解释器。
- kworker:内核工作线程。
- systemd:系统初始化进程。
- STAT列含义:
(3)应用案例
- 例题:vsftpd进程相关命令使用
- 进程状态查询:使用
systemctl status vsftpd
命令可以查看vsftpd服务的详细状态信息,包括:- 服务是否已加载(Loaded)。
- 是否开机自启(enabled)。
- 当前运行状态(Active)。
- 主进程ID(Main PID)。
- 内存和CPU使用情况。
- 终端关联性:
- 问号(?)表示该进程不属于任何终端,通常是系统服务进程。
- 开机自启的进程通常没有关联终端。
- 当前终端可通过ps命令查看,如pts/1表示第一个伪终端。
- 进程状态解析:
- S(sleep):休眠状态,进程正在等待任务。
- I(interactive):交互式进程,正在等待任务执行。
- <:表示高优先级进程。
- N:表示低优先级进程。
- s:表示该进程是会话首进程。
- 时间统计说明:
- START字段显示进程启动时间。
- TIME字段显示进程实际占用CPU的时间总和。
- 系统服务进程的TIME通常显示为0,因为:
- 只在有请求时才会激活。
- 统计的是实际处理请求的时间,而非总运行时间。
- 休眠期间不计入CPU时间。
- 内存相关指标:
- VSZ:虚拟内存使用量(KB)。
- RSS:实际物理内存使用量(KB)。
- 通过ps aux命令可以查看这些内存指标。
- 特殊符号含义:
- <和N等符号与进程优先级相关。
- 高优先级进程能更快获得CPU资源。
- 系统内核进程通常具有较高优先级。
- 进程状态查询:使用
(4)进程管理基础
-
进程基本概念
- 本质:加载到内存中的一段指令。
- 标识方式:
- 通过PID唯一标识进程。
- 通过UID/GID和SELinux上下文决定文件系统存取权限。
- 权限继承:
- 通常继承执行用户的权限。
- 子进程会继承父进程的属性信息。
-
进程查看命令
- ps命令
- 常用参数组合:
- ps aux:查看所有终端进程及所有者信息。
- ps -ef:查看系统所有进程及额外信息。
- 排序功能:
- –sort=-%mem:按内存使用率降序排列。
- –sort=-%cpu:按CPU使用率降序排列。
- 实际案例:
- 执行
vim /etc/passwd
会产生新进程。 - 进程结束时会立即从内存释放。
- 执行
- 常用参数组合:
- top命令
- 运行状态标识:
- R (Running):表示正在运行的进程。
- S (Sleeping):表示休眠状态的进程。
- 交互指令:
- 数字1:显示多核CPU详情。
- c:显示完整命令路径。
- top -n 2:只刷新2次后自动退出。
- 系统概览:
- 显示总进程数及状态分布。
- 实时更新CPU/内存使用情况。
- 运行状态标识:
- ps命令
-
进程生命周期
- 创建机制:
- 通过fork创建子进程。
- 通过exec加载新程序。
- 终止过程:
- 正常退出会发送exit信号。
- 可能进入zombie(僵尸)状态。
- 父子关系:
- 子进程终止时会向父进程发送wait信号。
- 父进程需要正确处理子进程终止。
- 创建机制:
(5)进程管理命令
-
ps命令详解
- 基本参数:
- a: 查看所有终端的进程。
- u: 打印进程所有者信息。
- x: 查看不属于任何终端的进程。
- e: 查看系统所有进程。
- f: 查看额外的完整信息。
- o: 指定格式输出。
- 排序功能:
- –sort: 指定排序参数,例如
--sort=-%mem
按内存使用降序排列。
- –sort: 指定排序参数,例如
- 常用组合:
ps aux
或ps -ef
是最常用的查看进程命令组合。
- 基本参数:
-
进程状态解析
- 状态标识:
- D: 不可中断睡眠(通常是在IO操作)。
- R: 正在运行或可运行(在运行队列排队中)。
- S: 可中断睡眠(休眠中,受阻)。
- T: 已停止的进程。
- Z: 僵尸进程(进程已终止但描述符存在)。
- <: 高优先级进程。
- N: 低优先级进程。
- L: 页面锁定在内存。
- s: 会话首进程。
- l: 多线程进程。
- +: 前台进程组。
- 状态标识:
-
进程排序实践
- 排序方法:
- 内存排序:
ps aux --sort=-%mem
(降序排列)。 - CPU排序:
ps aux --sort=-%cpu
(降序排列)。
- 内存排序:
- 注意: 不加排序参数时,输出不会自动按资源使用排序。
- 排序方法:
-
IO监控工具
- 专用工具:
- iotop: 专门用于监控磁盘IO的工具。
- 特点: 按IO大小排序显示进程IO使用情况。
- 与ps区别: 普通ps命令不显示IO信息,需使用专门工具。
- 专用工具:
-
命令输出字段
- 关键字段:
- USER: 进程所有者。
- PID: 进程ID。
- %CPU: CPU占用百分比。
- %MEM: 内存占用百分比。
- VSZ: 虚拟内存大小。
- RSS: 实际使用的物理内存。
- STAT: 进程状态。
- START: 进程启动时间。
- TIME: 累计CPU使用时间。
- COMMAND: 启动命令。
- 关键字段:
(6)top命令
-
基本功能与选项
- 刷新间隔设置:
- 使用-d选项指定刷新间隔时间,默认3秒刷新一次。
- 交互模式下按s键可实时修改刷新频率。
- 示例:
top -d 2
设置为2秒刷新一次。
- 进程监控:
- -p选项可指定监控单个进程ID。
- 示例:
top -p 830
只监控PID为830的进程。 - 示例:
top -p 1
只监控系统初始进程。
- CPU状态显示:
- 可显示CPU等待时间百分比(St状态)。
- 按数字1键可切换显示各逻辑CPU核心的使用情况。
- 刷新间隔设置:
-
交互命令操作
- 显示控制:
- c键:切换显示完整命令行或命令名称。
- f键:自定义显示字段内容。
- 排序功能:
- M键:按内存占用百分比排序。
- P键:按CPU使用百分比排序。
- T键:按进程运行时间/累计时间排序。
- 操作示例:
- 按c键可查看进程的完整启动命令。
- 按M键可快速找出内存占用最高的进程。
- 按数字1键可查看多核CPU每个核心的负载情况。
- 显示控制:
-
动态监控特点
- 与ps命令对比:
- ps提供静态进程快照。
- top提供实时动态监控界面。
- top更适合持续观察系统资源变化。
- 界面元素说明:
- 顶部显示系统运行时间、用户数、平均负载。
- 中间显示CPU和内存使用情况。
- 底部显示详细的进程列表。
- 与ps命令对比:
-
例题:top命令示例
- 操作演示:
- 通过
top -d 2
设置2秒刷新频率。 - 使用
top -p 830
监控特定进程。 - 交互模式下按M键按内存排序。
- 通过
- 注意事项:
- 默认刷新间隔为3秒,可通过-d修改。
- 监控单个进程时界面只显示该进程信息。
- 排序功能帮助快速定位资源占用高的进程。
- 操作演示:
2. 信号
- 定义:信号是Linux系统中进程间通信的一种方式,用于通知进程发生了某个事件。
- 特点:
- 直接给进程发送信号,不需要用户界面。
- 通过名称或数字标识不同信号。
- 常用信号:
- 15(TERM):正常终止进程(默认信号)。
- 9(KILL):立即强制终止进程。
- 1(HUP):让进程重新读取配置文件。
- 可通过
man 7 signal
查看完整信号列表。
(1)例题:文件操作进程信号应用
- 操作流程:
- 使用vim编辑文件时会产生进程。
- 通过
ps aux | grep vim
查找进程ID(如1562)。
- 发送信号:
kill -15 1562
:正常终止。kill 1562
:默认发送15信号。
- 正常终止表现:
- 进程收到TERM信号。
- 文件修改内容会正常保存。
- 系统显示"Vim: Finished"提示。
(2)例题:非正常关闭文件损坏问题
- 强制终止操作:
- 使用
kill -9 进程ID
立即终止。 - 示例:
kill -9 1569
。
- 使用
- 问题表现:
- 文件非正常关闭。
- 产生.swp交换文件(如passwd.swp)。
- 再次打开文件时内容混乱或无法打开。
- 关键区别:
- 信号15:允许进程完成清理工作后再终止。
- 信号9:立即终止,不执行任何清理。
- 使用建议:
- 优先使用信号15正常终止。
- 仅在进程无响应时使用信号9。
- 强制终止可能导致数据丢失或文件损坏。
- 发送方式:
- 通过PID:
kill [signal] pid...
。 - 通过名称:
killall [signal] comm...
。 - 通过模式:
pkill [-signal] pattern
。
- 通过PID:
- 其他信号:
- 信号19:暂停进程。
- 信号23:恢复暂停的进程。
- 可通过数字或名称指定信号。
二、进程管理及调优
1. 进程信号管理
(1)信号的基本概念
- 信号本质:对进程的任何操作本质上都是通过发送信号实现的,无需用户界面交互。
- 信号标识:可通过名称(如SIGTERM)或数字(如15)来指定信号。
- 常见信号:
- Signal 15 (TERM):正常终止进程(默认信号)。
- Signal 9 (KILL):立即强制终止进程。
- Signal 1 (HUP):让进程重新读取配置文件。
- Signal 19 (STOP):暂停进程执行。
(2)信号操作演示
- 进程终止示例
- 普通终止:使用
kill -15 1562
发送TERM信号终止vim进程。 - 强制终止:当普通终止无效时,使用
kill -9 1569
发送KILL信号强制终止。 - 验证方法:通过
ps aux | grep vim
命令确认进程状态变化。
- 普通终止:使用
- 进程暂停与恢复
- 暂停进程:执行
cp -i -r /usr/ /tmp/
时,使用kill -19 1599
发送STOP信号暂停复制操作。 - 查看状态:通过
jobs
命令可查看被暂停的进程状态显示为"Stopped"。 - 信号特性:某些信号如SIGKILL(9)和SIGSTOP不能被捕获、阻塞或忽略。
- 暂停进程:执行
(3)信号完整列表
- 查看方式:使用
man 7 signal
命令查看系统所有信号定义。 - 重要信号:
- SIGCONT (18,25):恢复被暂停的进程。
- SIGTSTP (20):终端停止信号。
- SIGCHLD:子进程终止或停止时发送。
- 信号动作类型:
- Term:终止进程。
- Core:终止并生成core dump。
- Stop:暂停进程。
- Cont:恢复被暂停的进程。
(4)信号实践技巧
- 进程恢复:对暂停的进程发送CONT信号(如
kill -18 1599
)可使其继续执行。 - 多信号等效:某些信号如STOP对应多个数字(17/19/23),效果相同。
- 信号管理本质:所有进程控制操作最终都转换为特定信号的发送。
- 注意事项:
- 重要进程应避免使用SIGKILL(9),可能导致数据损坏。
- 服务进程常用SIGHUP(1)实现配置重载。
- 交互式程序应处理SIGTSTP(20)实现后台运行。
2. 信号的作用
- 多进程管理场景:适用于需要同时管理一个服务产生的多个进程的情况(如httpd服务产生21516/1718等多个进程)。
- 传统方式缺陷:使用普通kill命令需要逐个终止进程ID,操作繁琐。
- 信号默认值:当不指定信号类型时,默认使用15号信号(SIGTERM)。
3. kill命令
(1)命令对比
kill
:必须指定进程ID,如kill 21516
。killall
:通过命令名称操作,如killall httpd
。pkill
:综合型命令,支持进程ID或命令名两种操作方式。
(2)安装与使用
- 依赖安装:需要先安装killall对应的软件包(课程中演示安装kr o包)。
- 操作验证:通过反复启动/终止httpd服务验证命令效果,确认进程被批量终止。
4. 查看与发送信号
(1)进程优先级
- 基础概念:与C1课程内容衔接,涉及进程的nice值调整。
- 应用场景:系统资源分配时,可通过调整优先级优化关键进程的执行效率。
(2)信号综合应用
- 参数位置:信号编号作为可选参数位于命令中间位置。
- 操作建议:推荐使用pkill作为通用解决方案,兼具kill和killall的功能优势。
5. 进程优先级
(1)Nice值概念
- 取值范围:Linux系统中Nice值的范围是-20到19,数值越小表示优先级越高。
- 默认值:当进程运行时未指定优先级,Nice值默认为0。
- 优先级关系:低的Nice值对应高的CPU优先级,例如-20的优先级高于19。
(2)Nice值查看方法
- 查看命令:使用
ps -aXO PID,Nice
或ps -lO PID,Nice
命令。 - 示例输出:可以看到各进程的Nice值,如FTP进程通常显示为0。
(3)Nice值调整方法
- 启动时指定
- 命令格式:
nice -n <优先级值> <命令>
。 - 示例:
nice -n -10 vim
会以Nice值-10启动vim。 - 特点:仅适用于新启动的进程。
- 命令格式:
- 运行中调整
- 命令格式:
renice <优先级值> -p <PID>
。 - 示例:
renice -20 830
将PID为830的进程优先级调整为-20。 - 特点:可以实时修改已运行进程的优先级。
- 命令格式:
(4)Nice与renice的区别
- 应用时机:
- nice:用于指定新启动进程的优先级。
- renice:用于调整已运行进程的优先级。
- 实际效果:两者最终都能改变进程的CPU资源分配比例。
(5)优先级调整的意义
- 资源分配:通过调整Nice值可以让重要进程获得更多CPU资源。
- 系统优化:合理设置优先级可以优化系统性能,确保关键任务优先执行。
6. 应用案例
(1)例题:使用Nice调整程序优先级
- 优先级调整演示:
- 初始状态:四个进程平等运行,各占25% CPU资源。
- 调整过程:将进程三零七四的nice值设为-20(最高优先级)。
- 优先级效果验证:
- 调整后:三零七四进程独占100% CPU资源。
- 其他进程:共享剩余处理器资源。
- 对比数据:从平均分配到优先级独占的明显变化。
- nice值作用原理:
- 取值范围:-20(最高优先级)到19(最低优先级)。
- 实际效果:值越小优先级越高,CPU分配比例越大。
- 系统表现:高优先级进程可抢占多个处理器资源。
- 操作命令示例:
- 设置优先级:
nice -n -20 三零七四
。 - 终止进程:
kill %1 %2 %3 %4
(演示结束后的清理操作)。
- 设置优先级:
- 实验结论:
- 优先级调整对CPU资源分配有直接影响。
- 合理设置nice值可优化多任务处理效率。
- 系统管理员可通过nice值管理关键进程资源。
注:本案例通过实时系统演示验证了进程优先级的实际作用效果,展示了从初始状态到调整后的完整对比过程,包含具体的数值变化和系统响应表现。
7. 进程优先级管理
(1)Nice与cgroup的区别
- 功能差异:
- Nice仅调整进程的CPU优先级(范围-20到19)。
- cgroup可管理CPU、内存、磁盘IO等多维度资源。
- 应用场景:
- Nice适合临时性优先级调整(如测试环境)。
- cgroup适合长期资源分配(如生产环境服务/容器)。
- 权限控制:
- root用户可自由调整nice值(包括提高优先级)。
- 普通用户只能降低自身进程优先级(增大nice值)。
(2)后台进程管理
- 操作命令:
command &
:直接后台运行。Ctrl+Z
:暂停并放入后台(相当于发送SIGTSTP信号)。bg %n
:将暂停的作业转为后台运行。fg %n
:将后台作业调至前台。jobs
:查看所有后台任务。
- 信号机制:
- 后台暂停对应信号19(SIGSTOP)。
- 前后台切换本质是信号控制过程。
(3)实时优先级系统
- 优先级体系对比
- 动态优先级(平民):
- nice值范围:-20到19。
- 数字越小优先级越高。
- 共40个优先级级别。
- 静态优先级(贵族):
- 实时优先级范围:1到99。
- 数字越大优先级越高。
- 动态优先级对其等效为0。
- 动态优先级(平民):
- 调度策略
- FIFO策略:
- 先进先出,独占式执行。
- 类比:厕所独占使用模式。
- RR策略:
- 时间片轮转(默认100ms)。
- 高优先级获得更长时间片。
- 类比:轮流使用厕所的计时模式。
- FIFO策略:
- 管理命令
- chrt命令:
chrt -p <pid>
:查看实时优先级。chrt -f -p <priority> <pid>
:设置为FIFO策略。chrt -r -p <priority> <pid>
:设置为RR策略。
- chrt命令:
- 注意事项:
- 实时进程可能造成系统饥饿。
- 需要root权限设置实时优先级。
8. 静态优先级
(1)静态优先级演示
- CPU核心数与优先级基础
- CPU核心识别:在红帽5系统中,通过编号0、1、2、3确认系统有4个CPU核心。
- top命令验证:运行top命令可查看CPU使用率,当CPU使用率达到100%时系统会出现明显卡顿。
- 先进先出(FIFO)调度策略
- 优先级抢占机制:
- 高优先级进程会抢占低优先级进程的资源。
- 被抢占的进程会重新排队到优先级队列头部。
- 当有进程结束时,队列头部的进程将获得运行机会。
- 极端案例演示:
- 设置4个FIFO优先级进程后系统完全卡死。
- 说明FIFO进程未结束前其他进程无法获取资源。
- 与普通优先级(nice)进程的区别:普通优先级下运行5个进程仍不会死机。
- 优先级抢占机制:
- 实时优先级设置
- chrt命令语法:
chrt -f [优先级] [命令]
:设置先进先出策略。chrt -p [优先级] [PID]
:修改已有进程优先级。
- 优先级范围:1-99(数字越大优先级越高)。
- chrt命令语法:
- 优先级动态调整:
- 更高优先级进程可以抢占正在运行的低优先级进程。
- 被抢占进程会保留在队列最前面等待下次调度。
- 系统进程分类:
- 实时进程:使用FIFO或RR策略。
- 普通进程(Other):动态优先级为0,相当于没有特权。
- 轮询(RR)调度策略
- 时间片分配:
- 相同优先级的RR进程采用轮询方式分配时间片。
- 每个进程获得固定时间片(如5毫秒)。
- 时间片耗尽处理:
- 进程用完时间片后会被移到队列末尾。
- 需等待其他进程运行完毕才能再次获得时间片。
- 优先级影响:
- 高优先级RR进程能获得更长的时间片。
- 但不会像FIFO那样完全独占CPU资源。
- 时间片分配:
- 系统进程优先级查看
- PR值含义:
- 在进程列表中PR字段表示进程的调度策略。
- FIFO进程会有特殊标识。
- 权限限制:
- 某些系统进程不允许修改优先级。
- 尝试修改时会出现"操作不被允许"提示。
- PR值含义:
(2)例题:实时优先级查看
- 实时优先级显示规则
- PR值含义:在top命令中显示的PR值代表进程优先级,数字越小表示优先级越高。
- 实时优先级标识:rt表示实时优先级,其优先级数值范围特殊。
- 数值转换规则:
- 系统显示值 = 140 - 设置值。
- 例如:设置值为50时,系统显示为-51(140-50=90,但实际显示为-51,说明有特殊转换规则)。
- 最高优先级:设置99显示为-100,设置98显示为-99。
- Nice值关系:
- Nice值-20对应PR值0。
- Nice值-19对应PR值1。
- 说明Nice值与PR值存在线性关系。
- 优先级显示特性
- 显示与设置差异:
- 人为设置值:1-99,数字越大优先级越高。
- 系统显示值:数字越小优先级越高(如-99比-20优先级高)。
- 取值范围:
- 实时优先级最高显示值:-99。
- 普通优先级范围:正数(如20表示低优先级)。
- 显示与设置差异:
(3)例题:实时优先级设置
- chrt命令使用
- 基本语法:
chrt -f <优先级> <命令>
。 - -f 参数表示设置实时优先级。
- 优先级范围:1-99。
- 基本语法:
- 设置问题:
- 实验中出现设置失败情况(如
chrt -f 11 md5sum /dev/zero
)。 - 原因:系统参数限制导致。
- 实验中出现设置失败情况(如
- 解决方案:
- 需要调整系统参数后才能设置高优先级。
- 成功案例:
chrt -f 10 -p 3376
(设置进程3376的优先级为10)。
- 优先级设置原理
- 数值转换验证:
- 设置50 → 显示-51。
- 设置90 → 显示-91。
- 设置99 → 显示-100(最高优先级)。
- 系统限制:
- 某些情况下无法直接设置最高优先级。
- 需要先修改系统参数(具体参数未明确说明,但演示中通过调整后设置成功)。
- 数值转换验证:
(4)实时优先级的参数
- 实时优先级的时间分配
- 默认值:系统默认分配给实时优先级的运行时间为0.095秒/秒(即95毫秒/秒),其余时间分配给普通进程。
- 单位:参数rt_runtime_us以微秒为单位设置。
- 保护机制:系统会限制实时优先级的运行时间,避免其耗尽所有CPU资源。
- 实时优先级的危险设置
- 负一设置:将参数设为-1表示不限制实时优先级的运行时间。
- 系统影响:
- 可能导致系统资源被完全占用(特别是双核CPU环境)。
- 红帽5系统会因此死机,红帽7及以上版本有保护机制。
- 实际表现为系统响应几乎停滞。
- 实时优先级的类型
- FIFO(先进先出):
- 进程必须完全执行完毕才会释放CPU。
- 危险性较高,可能造成系统资源独占。
- RR(轮询):
- 采用时间片轮转方式。
- 相比FIFO更安全。
- FIFO(先进先出):
- 优先级范围:实时优先级范围为1-99,远高于普通进程的-20到19。
- 优先级比较规则
- 绝对优势:任何实时优先级(1-99)都高于普通进程(视为0)。
- 同类型比较:
- 相同优先级时,FIFO高于RR。
- 不同优先级时,数值大的优先级更高(如RR12 > FIFO11)。
- 系统默认配置
- 系统进程:部分关键系统进程默认配置为FIFO 99优先级。
- 查看方法:使用
chrt -p <PID>
命令查看进程的调度策略和优先级。 - 设计目的:确保核心系统功能不受应用程序影响。
- 服务配置方法
- 配置文件:
/etc/systemd/system/<service>.service.d/*.conf
。 - 配置语法:在[Service]段添加
CPUAccounting=1
和CPUSchedulingPolicy=fifo|rr
。 - 持久化:通过systemd配置可实现开机自动应用优先级设置。
- 配置文件:
- 使用注意事项
- 安全建议:生产环境慎用实时优先级,特别是FIFO策略。
- 故障恢复:错误设置可能导致系统无法响应,需强制重启。
- 资源平衡:需要合理分配实时优先级的时间配额,避免系统资源耗尽。
9. 进程优先级设置问题解析
(1)Nice值与PR值的关系
- Nice值转换规则:
- 当Nice值设为0时,PR值显示为20。
- Nice值设为-20时,PR值对应为0。
- Nice值设为10时,PR值显示为-10。
- 示例:设置Nice为98时,PR值显示为-99。
- 优先级判断标准:
- 系统最终比较的是PR值(优先级数值),而非Nice值。
- PR值越小表示优先级越高(如-99比0优先级高)。
- 单纯比较Nice值可能得出错误结论,必须通过PR值判断。
(2)优先级设置实例
- 设置验证:
- 设置Nice为-20 → PR值显示0(最高优先级)。
- 设置Nice为0 → PR值显示20(默认优先级)。
- 设置Nice为20 → PR值显示-20(最低优先级)。
- 调度影响:
- 高优先级进程(PR值小的)会获得更多CPU时间片。
- 系统会优先运行PR值较小的进程。
- 静态优先级最终都反映在PR值上。
(3)常见问题解答
- 显示异常解释:
- 设置98显示-99属于正常现象,这是Nice值到PR值的转换结果。
- 默认Nice值为-1时对应特定PR值。
- 注意事项:
- 先进先出(FIFO)调度策略不会改变Nice值。
- 优先级比较必须通过PR值进行,这是系统最终采用的优先级标准。
- 修改Nice值实质是通过影响PR值来改变进程优先级。
三、文件系统管理
1. 文件系统的构成
(1)基本组成结构
- 双组件结构:文件系统由两部分组成,分别是inode(索引节点)和block(数据块)。
- 功能分工:
- inode存储元数据(metadata)。
- block存储实际数据内容(如"hello world"等具体数据)。
(2)inode详解
- 全称解释:inode是"index disk node"的缩写,本质是文件的索引结构。
- 存储内容:
- 文件大小、权限信息。
- 三个时间戳(atime访问时间、mtime修改时间、ctime状态变更时间)。
- 文件类型。
-数据块指针(指向实际存储位置的指针)
- 注意:文件名不存储在inode中,而是记录在目录的inode里
(3)文件操作原理
- 操作本质:大多数文件操作实际上是对inode的操作而非数据块。
- 示例1:快照功能通过操作inode实现快速创建。
- 示例2:备份系统通过检查mtime/ctime判断文件是否需要备份。
- 示例3:删除文件时仅删除inode,数据块仍保留(因此可能恢复)。
(4)快照技术原理
- COW机制:Copy-On-Write(写时复制)是快照的核心技术。
- 工作流程:
- 创建快照时备份inode信息。
- 当修改文件时,先将原数据块复制到COW专用区域。
- 新数据写入原位置,inode指针更新指向新数据。
- 快照保持指向COW区域的旧数据。
- 优势:保证数据一致性且不影响性能。
(5)文件识别机制
- 双重标识系统:
- 人类通过文件名识别文件。
- 系统通过inode编号(可通过
ls -li
查看)识别文件。
- 编号规则:
- 每个文件系统有独立的inode编号体系。
- 跨分区复制文件会生成新的inode编号。
- 同分区内复制也会分配新inode(采用"补缺"机制而非"增补")。
(6)重要特性说明
- 关键限制:
- 文件系统的inode数量在格式化时固定。
- 每个inode占用512字节空间。
- 当inode耗尽时即使有剩余空间也无法创建新文件。
- 恢复限制:
- 删除文件后若新文件占用相同inode,原数据将永久丢失。
- 设计原理:避免已删除文件持续占用存储空间。
2. 应用案例
(1)例题:文件操作
- 同分区文件移动原理:
- 当文件在同一个分区内移动时(如从/data目录剪切到/rehead目录),索引号870692保持不变。
- 原因:实际只移动了目录索引,数据块未发生物理移动。
- 优势:即使移动10GB大文件也仅需1秒,因为仅修改目录索引信息。
- 目录索引机制:
- 文件名的索引记录在所属目录的索引信息中。
- 每个目录都有独立的索引结构。
- 移动操作实质是修改父目录的索引指向。
- 跨分区移动特性:
- 当文件跨分区移动(如从/rehead到/boot)时:
- 索引号必定改变(使用目标分区的索引机制)。
- 实际执行"复制+删除"操作。
- 数据块会发生物理复制。
- 当文件跨分区移动(如从/rehead到/boot)时:
(2)例题:命令操作
- 硬链接原理:
- 创建命令:
ln 源文件 硬链接文件
。 - 特征:
- 索引号与源文件相同(如示例中均为870692)。
- 链接计数会增加(如从1变为2)。
- 修改任一链接都会同步内容。
- 删除源文件不影响其他硬链接访问。
- 硬链接限制:
- 不能跨分区创建(因不同分区索引系统独立)。
- 本质是给同一数据块创建多个目录入口。
- 创建命令:
- 软链接特性:
- 创建命令:
ln -s 源文件 软链接文件
。 - 与硬链接的区别:(原文未详细说明具体区别)
- 创建命令:
- 应用场景选择:
- 需要保证文件持续可用 → 硬链接。
- 需要跨分区引用 → 软链接。
- 需要节省存储空间 → 软链接。