第10章 无持久存储的文件系统 (1)
目录
前言
10.1 proc文件系统
10.1.1 /proc 内容
本专栏文章将有70篇左右,欢迎+关注,查看后续文章。
前言
即存在于内存中的文件系统。如:
proc:
sysfs:
即/sys目录。
内容不一定是ASCII文本,可能是二进制。
收集内核对象kobject的拓扑信息。
debugfs:
作用:快速向应用层导出,或从应用层导入值
原理:使用了 libfs+顺序文件。
10.1 proc文件系统
procfs,即 process data filesystem。
proc 文件系统作用:
1. cat 文件时,动态生成相关信息。
2. echo " " > 文件,修改系统配置。
10.1.1 /proc 内容
proc 信息分为几类:
1. 内存管理
2. 进程信息
3. 文件系统
4. 设备驱动
5. 系统总线
6. 电源管理
7. 系统控制参数
1. 特定于进程的数据
cat /proc/3883/ 数字为进程 PID
cmdline:开启该进程的命令,如 ./a.out 1 2
environ:该进程设置的环境变量。
maps:进程本身,及其使用的库的内存映射(可用于定位进程crash)
status
fd: 进程打开的文件描述符,都是链接文件。
如:
/proc/2820/fd/1 -> /dev/null
/proc/2820/fd/4 -> socket:[10030]
cwd:进程当前的工作目录。
exe:链接指向进程的二进制程序。
如:
/proc/2820/exe -> /bin/cbsd
举例:
cat /proc/906/status
Name: systemd 对应可执行文件名字。
Umask: 0022 该进程创建文件的默认权限掩码。
State: S (sleeping)
Tgid: 906 线程组ID。
Ngid: 0 下一个可用的线程组ID。
Pid: 906 进程ID。
PPid: 1 父进程ID。
TracerPid: 0 跟踪该进程的调试器进程ID。
Uid: 0 0 0 0
实际用户ID、有效用户ID、保存的设置用户ID、文件系统用户ID。
Gid: 0 0 0 0
进程的实际组ID、有效组ID、保存的设置组ID、文件系统组ID。
FDSize: 1024 进程的文件描述符限制大小。
Groups:
NStgid: 906 NS=namespace
NSpid: 906
NSpgid: 906
NSsid: 906
VmPeak: 1311540 kB
进程使用的虚拟内存峰值。
VmSize: 1071592 kB
进程使用的虚拟内存当前值。
不等于实际使用物理内存(如部分数据可存储在交换区)。
VmLck: 0 kB
锁定的内存区域大小。
即不被swap到磁盘,也无法回收。
VmHWM: 244276 kB 进程使用的物理内存峰值。
VmRSS: 239916 kB 进程当前使用物理内存值。
RssAnon: 36428 kB 进程的匿名内存的大小(如堆、栈、共享内存)
RssFile: 10140 kB 进程文件缓存页大小。
RssShmem: 0 kB 进程使用的共享内存的总大小。
VmData: 628048 kB 数据段大小。
VmStk: 136 kB 栈大小。
VmExe: 32 kB 代码段大小。
VmLib: 57908 kB 库大小。
VmPTE: 2388 kB 页表的大小。
VmSwap: 0 kB 使用swap的大小。
Threads: 1
SigQ: 0/13035 当前未处理信号数量 / 进程可接收信号最大数量。
SigPnd: 0000000000000000 等待处理的信号位掩码。
ShdPnd: 0000000000000000 共享的挂起信号掩码。
SigBlk: 0000000000000000 进程阻塞信号掩码。
SigIgn: 0000000000001000 进程忽略的信号掩码。
SigCgt: 0000000000002000 进程可接收并可处理的信号。
CapInh: 00000000a80425fb 从父进程继承的能力。
CapPrm: 00000000a80425fb 进程当前的能力集合。
CapEff: 00000000a80425fb 当前实际拥有的能力集合
CapBnd: 00000000a80425fb 进程不能超出的能力集合。
CapAmb: 0000000000000000 可接受的能力集合。
NoNewPrivs: 0
是否设置Privileges位,即不可增加特权。若设置,execve程序不能有更高权限。
Seccomp: 0 安全计算模式,限定进程可使用的系统调用
Cpus_allowed: f 允许允许的CPU掩码。
Cpus_allowed_list: 0-3
Mems_allowed: 00000000,00000001 允许使用的内存节点的掩码。
Mems_allowed_list: 0
voluntary_ctxt_switches: 397
主动放弃CPU的次数,如进程阻塞I/O。
nonvoluntary_ctxt_switches: 253
被迫放弃CPU的次数,如时间片用完。
mlock系统调用:
作用:将进程指定的虚拟内存区域锁定在物理内存中,防止被交换出去。
RSS:常驻集大小(Resident Set Size)
当前驻留在物理内存中的大小。不包括被换出到交换空间(Swap)的部分。
当一个信号被设置为阻塞后,当进程收到该信号时不会立即处理,而是挂起信号,直到解除信号阻塞状态后才能处理。
如何阻塞SIGINT信号?
sigaddset(&block_set, SIGINT);
sigprocmask(SIG_BLOCK, &block_set, NULL);
信号在内核中状态:
1. 递达:Delivery。收到信号,并执行信号处理函数。
2. 未决 / 挂起:Pending。进程正处理一个信号时,收到的其余信号被挂起。
3. 阻塞:Block。进程解除信号阻塞,立即执行信号处理函数。即延时接收。
运用场景:
挂起信号:优先处理某些紧急信号,推迟处理其他信号。
阻塞信号:临时忽略某信号。例如在某些关键性操作期间,可防止信号干扰进程。
进程常见能力包括:
CAP_CHOWN:
更改文件的所有者的的能力。 即可执行chown
CAP_DAC_READ_SEARCH:
读取任意文件和目录的能力。
CAP_NET_RAW:
使用原始网络套接字的能力。
!ns_capable(net->user_ns, CAP_NET_RAW)
CAP_SYS_ADMIN: 管理系统的能力
CAP_SYS_RESOURCE:
允许进程配置系统资源。如nice setrlimit mlock
CAP_SYS_PTRACE:
跟踪其他进程的能力。
CAP_IPC_LOCK:
锁定内存的能力。
内核如何判断进程的能力:
与current->cred->cap_effective掩码计算。
相关命令:
sudo setcap cap_net_raw + ep /usr/bin/ping
sudo getcap
2. 系统信息
iomem:即IO内存。
IO内存的使用方法:
1. request_mem_region(start, size, "name"); 请求一块物理地址内存区域。
2. ioremap; 将物理地址映射到虚拟地址空间。
/proc/iomem
IO内存信息,包括系统物理地址布局。
/proc/ioports
IO端口信息。
/proc/buddyinfo
不同大小阶的页大小,都有多少可用。
/proc/slabinfo
slab分配器信息。
内容举例:
# name : tunables : slabdata
kmalloc-16 0 0 16 256 1 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-192 29 30 192 30 1 : tunables 0 0 0 : slabdata 1 1 0
ext4_inode_cache 35 35 1000 7 2 : tunables 0 0 0 : slabdata 5 5 0
active_objs: 该slab缓存当前活动对象数量。
num_objs: 可用总对象数。
objsize: 单个对象大小。
objperslab: 每个slab缓存中包含对象数。
pagesperslab:每个slab缓存中占用的页数。
/proc/meminfo
MemTotal: 16218688 kB 实际管理的内存 = 物理内存 - 预留内存。
MemFree: 2576640 kB 空闲内存。
MemAvailable: 8374184 kB
可用内存。已使用,但回收后仍可用,所以大于MemFree。
Buffers: 50828 kB 块设备占用页缓存大小,如超级块所用的缓存页。
Cached: 8665304 kB 普通文件页缓存大小。
SwapCached: 2096 kB 交换分区缓存的大小,即用于匿名页换入换出的缓存。
Active: 7965496 kB
active(file) + active(anon) 内存页总和(最近使用的内存页)。
Inactive: 4651356 kB
Inactive(file)和Inactive(anon)内存页总和(最近未使用的页)。
Active(anon): 3603464 kB 最近使用的匿名页。
Inactive(anon): 1225800 kB 最近未使用的匿名页。
Active(file): 4362032 kB 最近使用的文件页。
Inactive(file): 3425556 kB 最近未使用的文件页。
Unevictable: 25840 kB 不可回收页,如内核进程或驱动使用。
Mlocked: 25840 kB 页被进程锁定,不能被移动交换回收。
SwapTotal: 8388604 kB 交换分区总大小。
SwapFree: 8384060 kB 未使用的交换分区大小。
Dirty: 8 kB
Writeback: 0 kB 正回写页。
AnonPages: 4198028 kB 匿名页的大小。
Mapped: 1579700 kB 驱动映射和共享内存。
Shmem: 130352 kB 共享内存。
Slab: 360424 kB slab缓存大小。
SReclaimable: 312900 kB slab中可回收内存大小。
SUnreclaim: 47524 kB slab中不可回收内存。
KernelStack: 4136 kB 当前内核线程的栈大小。
PageTables: 6812 kB 页表占用内存大小。
NFS_Unstable: 0 kB NFS客户端使用。
VmallocTotal: 34359738367 kB vmalloc虚拟地址空间大小。
VmallocUsed: 329676 kB
VmallocChunk: 34359396996 kB vmalloc区域最大连续空闲块的大小。
HardwareCorrupted: 0 kB
ShmemPmdMapped: 0 kB
CmaTotal: 524288 kB 连续内存区域的总大小。
CmaFree: 357464 kB 连续内存区域中可用大小。
HugePages_Total: 0 大页。
Hugepagesize: 2048 kB
DirectMap4k: 144344 kB
DirectMap2M: 8146944 kB
DirectMap1G: 8388608 kB 管理的大内存,1G页对应一个页表,可减少页表。
kswapd线程周期性把Active list中符合条件页移到Inactive list中。
/proc/vmstat 内存页使用统计
nr_free_pages 30248
nr_inactive_anon 0
nr_active_anon 2684
nr_inactive_file 2534
nr_active_file 1462
nr_unevictable 0
nr_mlock 0
nr_anon_pages 2689
CMA(Contiguous Memory Allocator)
内核启动时预留CMA的内存大小和位置(由内核启动参数或设备树配置)。
使用方法:
驱动申请使用CMA内存时,内核从预留的CMA内存池中分配一块连续物理内存,并返回虚拟地址,供驱动设备DMA操作。
使用场景:
USB,网络包处理,图形子系统等。
内核参数:cma = 256M

/proc/kallsyms
内核符号表,及其虚拟地址(内核虚拟地址空间)。
原理:
编译时,将所有函数和全局变量的地址组成一个数据块,并链接到vmlinux。
cat /proc/kallsyms 时读取该数据块。
编译选项:
CONFIG_KALLSYMS
System.map文件:
80004000 A swapper_pg_dir 内核虚拟地址空间中的地址。
System.map如何生成?
linux-3.x/ scripts/ mksysmap,该脚本中执行 nm vmlinux > System.map 生成。
System.map不包含驱动模块中符号。
/proc/kallsyms包含模块等所有符号(即使没有EXPORT_SYMBOL)。
/proc/interrupts
中断统计信息,包括中断号,中断次数,所属中断控制器。
3. 网络信息
/proc/net/udp
/proc/net/tcp
包含socket fd、本地地址和端口号、远程地址和端口号、状态,发送队列等信息。
/proc/net/arp ARP表信息。
IP address HW type Flags HW address Mask Device
192.168.150.123 0x1 0x2 6c:b3:11:3f:47:fb * br0
Flags 0x2:表示该ARP已验证,可使用。
/proc/net/dev 所有网卡统计信息。
fifo:因队列满的丢包数。
frame:因帧错误的丢包数。
carrier:因载波问题的丢包数。
4. 系统控制参数
/proc/sys/ 可写,从而控制系统。
debug/ dev/ fs/ /kernel/ net/ vm/
cat /proc/sys/vm/swappiness
查看页交换积极程度。
相关文章:
第10章 无持久存储的文件系统 (1)
目录 前言 10.1 proc文件系统 10.1.1 /proc 内容 本专栏文章将有70篇左右,欢迎关注,查看后续文章。 前言 即存在于内存中的文件系统。如: proc: sysfs: 即/sys目录。 内容不一定是ASCII文本,可能是二进…...
如何把命令行创建python虚拟环境与pycharm项目管理更好地结合起来
1. 问题的提出 我在linux或windows下的某个目录如“X”下使用命令行的方式创建了一个python虚拟环境(参考文章),对应的目录为myvenv, 现在我想使用pycharm创建python项目myproject,并且利用虚拟环境myvenv,怎么办&…...
keepalived+lvs高可用负载均衡集群配置方案
配置方案 一、配置主备节点1. 在主备节点上安装软件2. 编写配置文件3. 启动keepalived服务 二、配置web服务器1. 安装并启动http服务2. 编写主页面3.配置虚拟地址4. 配置ARP 三、测试 服务器IP: 主负载均衡服务器 master 192.168.152.71备负载均衡服务器 backup 192…...
Azure OpenAI Swagger Validation Failure with APIM
题意:Azure OpenAI Swagger 验证失败与 APIM 问题背景: Im converting the Swagger for Azure OpenAI API Version 2023-07-01-preview from json to yaml 我正在将 Azure OpenAI API 版本 2023-07-01-preview 的 Swagger 从 JSON 转换为 YAML。 My S…...
haproxy高级功能配置
介绍HAProxy高级配置及实用案例 一.基于cookie会话保持 cookie value:为当前server指定cookie值,实现基于cookie的会话黏性,相对于基于 source 地址hash 调度算法对客户端的粒度更精准,但同时也加大了haproxy负载,目前此模式使用…...
XXL-JOB分布式定时任务框架快速入门
文章目录 前言定时任务分布式任务调度 1、XXL-JOB介绍1.1 XXL-JOB概述1.2 XXL-JOB特性1.3 整体架构 2、XXL-JOB任务中心环境搭建2.1 XXL-JOB源码下载2.2 IDEA导入xxljob工程2.3 初始化数据库2.4 Docker安装任务管理中心 3、XXL-JOB任务注册测试3.1 引入xxl-job核心依赖3.2 配置…...
直流电机及其驱动
直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转。 直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作 TB6612是一款双…...
Java-判断一个字符串是否为有效的JSON字符串
在 Java 中判断一个字符串是否为有效的 JSON 字符串,可以使用不同的库来进行验证。常见的库 包括 org.json、com.google.gson 和 com.alibaba.fastjson 等。这里我将展示如何使用 com.alibaba.fastjson 库来实现一个简单的工具类,用于判断给定的字符串…...
FPGA开发板的基本知识及应用
FPGA开发板是一种专门设计用于开发和测试现场可编程门阵列(Field-Programmable Gate Array, FPGA)的硬件平台。FPGA是一种高度可配置的集成电路,能够在制造后被编程以执行各种数字逻辑功能。FPGA开发板通常包含一个FPGA芯片以及一系列支持电路和接口,以便…...
JVM知识总结(性能调优)
文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 性能调优 何时进行JVM调优? 遇到以下情况,…...
基于Ascend C的Matmul算子性能优化最佳实践
矩阵乘法是深度学习计算中的基础操作,对于提升模型训练和推理速度至关重要。昇腾AI处理器是一款专门面向AI领域的AI加速器,其AI Core采用达芬奇架构,以高性能Cube计算引擎为基础,针对矩阵运算进行加速,可大幅提高单位面…...
SQL注入之EVAL长度限制突破技巧
要求: PHP Eval函数参数限制在16个字符的情况下 ,如何拿到Webshell? widows小皮环境搭建: 使用phpstudy搭建一个网站。 随后在该eval文件夹下创建一个webshell.php文件,并在其输入代码环境 解题思路: 通…...
稀疏注意力:时间序列预测的局部性和Transformer的存储瓶颈
时间序列预测是许多领域的重要问题,包括对太阳能发电厂发电量、电力消耗和交通拥堵情况的预测。在本文中,提出用Transformer来解决这类预测问题。虽然在我们的初步研究中对其性能印象深刻,但发现了它的两个主要缺点:(1)位置不可知性:规范Tran…...
详谈系统中的环境变量
目录 前言1. 指令背后的本质2. 环境变量背后的本质3. 环境变量到底是什么4. 命令行参数5. 本地变量 与 内置命令6. 环境变量的相关命令 前言 相信在 it 行业学习或者工作的小伙伴们,基本都配置过环境变量(windows环境下),如果你也…...
RAG与LLM原理及实践(11)--- Milvus hybrid search 源码分析及思想
目录 背景 hybrid search 源码分析 WeightedRanker 源码 hybrid search 核心 参数详解 基本入参 扩展入参 aysnc方式代码调用案例 说明 源码逻辑 prepare 调用过程 stub 调用结果 stub 调用过程 blocking 与 async 调用方式 深入内部core weightedRanker 的ch…...
JavaScript模拟空调效果
JavaScript模拟空调效果https://www.bootstrapmb.com/item/15074 在JavaScript中模拟空调效果主要依赖于前端界面的交互和状态变化,因为实际的温度调节、风扇速度调整等硬件操作无法直接通过JavaScript在浏览器中实现。不过,我们可以通过JavaScript来模…...
14.2 Pandas数据处理
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。 ⭐…...
python学习7---多进程
一、介绍 多进程是指在同一程序中创建多个独立的进程来执行任务。每个进程都有自己独立的内存空间,相互之间不干扰。 因为GIL锁的存在,对于CPU密集型任务(例如计算密集型操作),使用多进程可以提高程序的效率。 优点&am…...
基于Spring + Vue的旅游景区项目+源代码+文档说明
文章目录 源代码下载地址项目介绍项目功能界面预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 基于Spring Vue的旅游景区项目 项目功能 民宿管理员:订单数量统计,订单交易额统计,客房统计饼图,酒店…...
Java后端面试题
Redis缓存穿透、雪崩、击穿,布隆过滤器 一致性hash 一致性hash sharding-jdbc实现一致性hash #一致性hash, 应用在mysql数据库的分库分表上, 现在已经完成了分库分表, 现在的问题出现了, 需要继续新增数据库节点, 请…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
