Linux 内核源码分析---proc 文件系统
proc文件系统
进程数据文件系统(process data filesystem, procfs)装载在 /proc,缩写为 procFS。
proc 文件系统是一种虚拟文件系统,其信息不能从块设备读取。只有在读取文件内容时才动态生成相应的信息。使用proc文件系统,可以获得有关内核各子系统的信息(如内存利用率、附接的外设,等等),也可以在不重新编译内核源代码的情况下修改内核的行为,或重启系统。
proc 文件系统提供一种接口,可用于该机制导出的所有选项,直接地修改参数无需开发专门程序,只需要一个shell和标准的 cat、 echo 程序即可。
/proc信息
尽管proc文件系统的容量依系统而不同,其中仍然包含了许多深层嵌套的目录、文件、链接。信息可以分为以下几大类:
(1)内存管理;
(2)系统进程的特征数据;
(3)文件系统;
(4)设备驱动程序;
(5)系统总线;
(6)电源管理;
(7)终端;
(8)系统控制参数。
Linux系统上的/proc目录是一种文件系统,即proc文件系统。
/proc是一种伪文件系统(也即虚拟文件系统),具体目录如下:


proc 常见文件
buddyinfo:用于诊断内存碎片问题。
cmdline:在启动时传递至内核的相关参数信息,这些信息通常由lilo或grub等启动管理工具进行传递;
cpuinfo:处理器的相关信息的文件;
crypto:系统上已安装的内核使用的密码算法及每个算法的详细信息列表;
devices:系统已经加载的所有块设备和字符设备的信息;
diskstats:每块磁盘设备的磁盘 I/O 统计信息列表;
filesystems:当前被内核支持的文件系统类型列表文件,被标示为nodev的文件系统表示不需要块设备的支持;
interrupts:X86 或 X86_64 体系架构系统上每个 IRQ 相关的中断号列表;
iomem:每个物理设备上的记忆体(RAM或者ROM)在系统内存中的映射信息;
ioports:当前正在使用且已经注册过的与物理设备进行通讯的输入-输出端口范围信息列表;
kallsyms:模块管理工具用来动态链接或绑定可装载模块的符号定义,由内核输出;
locks:保存当前由内核锁定的文件的相关信息,包含内核内部的调试数据;每个锁定占据一行,且具有一个惟一的编号;
meminfo:系统中关于当前内存的利用状况等的信息,常由free命令使用;
mounts:在内核2.4.29版本以前,此文件的内容为系统当前挂载的所有文件系统;
modules:当前装入内核的所有模块名称列表,可以由lsmod命令使用,也可以直接查看;
partitions:块设备每个分区的主设备号(major)和次设备号(minor)等信息;
stat:实时追踪自系统上次启动以来的多种统计信息;
swaps:当前系统上的交换分区及其空间利用信息;
uptime:系统上次启动以来的运行时间;
version:当前系统运行的内核版本号;
vmstat:当前系统虚拟内存的多种统计数据;
zoneinfo:内存区域(zone)的详细信息列表;
proc 数据结构
1、proc 核心数据结构
实现 proc 文件系统的代码紧围绕这些结构而建立的,proc 大量使用 VFS 的数据结构,因为作为一种文件系统,它必须集成到内核的 VFS 抽象层中。
还有一些特定于 proc 的数据结构,用于组织内核提供的数据信息。还必须提供一个到内核各个子系统的接口,使得内核能从其数据结构中提取信息,然后借助 /proc 提供给用户空
间。proc 文件系统中的每个数据项都由proc_dir_entry的一个实例描述,

2、装载proc文件系统
内核内部用于描述 proc 文件系统结构和内容的数据已初始化之后,下一步是将该文件系统装载到目录树中。在内核添加新文件系统时,会扫描一个链表,查找与该文件系统相关的file_system_type实例。

proc 文件系统的超级块由proc_get_sb提供。该函数基于另一个内核辅助例程( get_sb_single),借助proc_fill_super(主要负责用一些定义后从不改变的值来填充 super block 的每个成员)来填充一个super_block的新实例。

proc_sops 中对超级块的各个操作,其中收集内核管理proc文件系统所需的各个函数,

静态的proc_dir_entry实例:

管理 /proc 数据项
1、数据项的创建和注册
新数据项分两个步骤添加到proc文件系统。首先,创建proc_dir_entry的一个新实例,填充描述该数据项的所有需要的信息。
使用fs/proc/generic.c中的proc_register将其注册到proc文件系统当中:

创建数据项之后,注册到 /proc 文件系统步骤:
a.生成一个唯一 proc 内部编号,向数据项赋予身份。get_inode_number 返回一个未使用的编号,用于为动态生成的数据项;
b.必须适当地设备proc_dir_entry实例的 next 和 parent 成员,将新数据项集成到 proc 文件系统的层次结构中;
c.如果此proc_dir_entry成员的proc_iops或proc_fops为NULL指针,那么需要根据文件类型,适当地设备指向file_operations和inode_operations结构实例的指针。
用于管理proc数据项:
proc_mkdir创建一个新目录;
proc_mkdir_mode创建一个新目录,目录的访问权限可以显式指定;
proc_symlink生成一个符号链接;
remove_proc_entry从proc目录中删除一个动态生成的数据项;
相关文章:
Linux 内核源码分析---proc 文件系统
proc文件系统 进程数据文件系统(process data filesystem, procfs)装载在 /proc,缩写为 procFS。 proc 文件系统是一种虚拟文件系统,其信息不能从块设备读取。只有在读取文件内容时才动态生成相应的信息。使用proc文件系统&…...
视频号直播回放怎么下载?
一、如果是下载自己直播回放视频: 方法一:视频号助手 打开网址:视频号助手 登陆账号后。下面路径,先点击成回放, 后就可以在下面路径,下载全场回放 但是这种有个缺点,就是不能分段下载。这样…...
【第九节】python中xml解析和json编解码
目录 一、Python XML 解析 1.1 什么是XML 1.2 Python 对 XML 的解析方法 1.3 SAX解析xml 1.4 xml.dom解析xml 1.6 ElementTree解析XML 二、Python编解码json 2.1 什么是json 2.2 使用json 库 2.3 使用第三方库Demjson 一、Python XML 解析 1.1 什么是XML XML&#x…...
yolo v8部署到云服务器问题记录
环境安装 1、运行项目报错:no python application found, check your startup logs for errors 在云服务器pytorch版本安装错了,安装了GPU版本,需要安装CPU版本 # CPU only 使用下面这段代码避免出现第二个错误 pip install torch2.3.1 to…...
端口被占用,杀死进程的步骤
一、 查看所有进程占用的端口 在开始-运行-cmd,输入:netstat –ano可以查看所有进程 二、查看占用指定端口的程序 查看被那个端口占用,可以用该命令: 三、使用命令杀死进程 杀死进程,使用命令:...
接口入门(企业常见使用,一分钟搞定版)
目录 1、接口的定义 定义位置 接口内容 2、接口的使用 正常实现接口 接口当做函数参数 匿名实现接口 3、OPPO便签接口具体分析 总结一下: 1、接口的定义 定义位置 可以写在类中,但注意现在接口名字是 类名.接口名 可以单独写在一个文件 接口内…...
深入解析:Cookie 与 Session 的区别及应用场景
引言 在Web开发中,Cookie 和 Session 是两种常用的用户状态管理机制。虽然它们的目标都是在无状态的HTTP协议中维护用户的状态,但它们的工作原理和适用场景却有所不同。在本文中,我们将深入探讨 Cookie 和 Session 的区别,并通过…...
LLM金融文本分类文档说明
Python注意事项: 1,创建虚拟环境: conda create --prefixD:\software\Anaconda3\envs\finance_analysis python3.10.4 conda create -p D:/software/anaconda3/envs/finance_analysis python3.10.4 注释: D:\software\anaconda3\e…...
EI检索,2天录用,3天见刊!截稿在即,这本水刊你还不投吗?
点击关注:关注GZH【欧亚科睿学术】,GET完整版2023JCR分区列表! 🎉 🎉 🎉 🎉 恭喜!这本毕业水刊仅2天录用!3天见刊! 重要时间节点如下 2024-08-03 Sub…...
sql获取过去的小时数
TIMESTAMPDIFF(HOUR, create_time, NOW()) AS pastHours 是一条 SQL 语句的一部分,它使用 TIMESTAMPDIFF 函数来计算两个时间点之间的差异,并将结果标记为 pastHours。 让我们详细解析一下这条语句: TIMESTAMPDIFF 函数: 这个函数用于计算两…...
【Android Studio】彻底卸载
文章目录 卸载程序控制面板卸载安全软件卸载 重启计算机删除文件重启计算机 我们在Android开发时涉及重装时,如果卸载不干净,再次安装是不会正常运行项目的,接下来就让我教你如何删除干净吧。 卸载程序 控制面板卸载 control控制面板一>…...
美术版权可以当做商标使用吗
美术版权与商标的区别及不可混用性分析 在知识产权领域,美术版权和商标权是两个重要的概念,它们各自承载着不同的法律意义和保护范围。 美术版权概述 美术版权,又称著作权,是指著作权人对其创作的美术作品所享有的权利。这些作品…...
控制某些请求不记录日志
说明:由于统一拦截日志请求,导致所有匹配的请求都会打印日志,这里需要控制有些请求执行不打印日志,比如定时每隔几秒执行某些请求。 具体实现如下: 一、自定义注解,如下: /** * Description: …...
Java线程池原理剖析和应用指南
目录 Java线程池详解一、Java线程池简介池化思想池化思想的优点 二、线程池的实现原理分析实现线程池需要考虑哪些问题?线程池的简单使用示例线程池原理的简单图示 三、Executor详解Executor简介Executor框架的继承结构总结ExecutorExecutorService 四、ThreadPoolE…...
ST-LINK烧录MCU
打开ST-LINK软件: 主板断电状态下接入烧录器,烧录器USB连接电脑: 主板上电,点击连接按钮: 点击加载文件: 点击写入按钮,烧录成功后拔掉烧录器,主板重新上电...
Go - 10. * 值类型和指针类型的差异
目录 一.引言 二.接收者类型 三.代码示例 1.指针接收者 2.值接收者 3.运行结果对比 4.代码修改 5.刨根问底 四.总结 一.引言 go 语言中 func (c *Title) 和 func (c Title) 两个方法的传参差一个 * 号,二者的区别是一个是指针类型,一个是值类型…...
waf绕过:网络安全狗绕过
引言: 所有的绕过原理都大致一致,但是并不是所有的绕过都能起到作用,渗透测试主要还是一个猜加试的过程,本文仅供参考 网络攻击或扫描绕过 1.get绕过(未开启cc防护) 网络安全狗的默认防护为,拒…...
Django中的模型小总结:
from django.db import models from django.urls import reverse# 自定义Manager方法 class HighRatingManager(models.Manager):def get_queryset(self):return super().get_queryset().filter(rating1)# CHOICES选项 class Rating(models.IntegerChoices):VERYGOOD 1, Very …...
深入理解 RDMA 的软硬件交互机制
作者:羽京 一、前言 随着数据中心的飞速发展,高性能网络不断挑战着带宽与时延的极限,网卡带宽从过去的 10 Gb/s 、25 Gb/s 到如今的 100 Gb/s、200 Gb/s 再到下一代的 400Gb/s 网卡,其发展速度已经远大于 CPU 发展的速度。 为了…...
轻优图片编辑压缩官网 轻优图片编辑压缩
轻优图片编辑压缩是一个无需安装,可以直接在线压缩图片大小的网站。轻优图片编辑压缩网站可以快速把图片压缩到指定大小。 轻优图片编辑压缩官网网址:www.qingyoubianji.com 浏览器打开 www.qingyoubianji.com 网站,你会看到一个简洁的界面…...
驾驭Mac散热:smcFanControl全方位温控指南
驾驭Mac散热:smcFanControl全方位温控指南 【免费下载链接】smcFanControl Control the fans of every Intel Mac to make it run cooler 项目地址: https://gitcode.com/gh_mirrors/smc/smcFanControl 当您的MacBook在视频会议中突然画面卡顿,或…...
3种方法在Windows上直接安装Android应用:告别模拟器的完整指南
3种方法在Windows上直接安装Android应用:告别模拟器的完整指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否厌倦了笨重的Android模拟器࿱…...
GPT-6 Spud深度解析:Symphony架构、双系统推理与OpenAI的AGI豪赌
上一篇 GPT-6 Spud倒计时AI格局变局:2026年4月第一周全景扫描 下一篇 DeepSeek V4全面换装华为昇腾950PR:从CUDA到CANN的国产算力里程碑 摘要 GPT-6(内部代号"Spud/土豆")预计于2026年4月14日正式发布,这是…...
3分钟快速上手:免费城通网盘解析器终极指南
3分钟快速上手:免费城通网盘解析器终极指南 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘下载慢、广告多而烦恼吗?城通网盘解析器正是解决这些问题的利器&#…...
40 ns 10 MHz:一颗中国“芯”凭TMR技术交出高频电流传感新答案
当第三代半导体将电力电子系统的开关频率推至MHz时代,电流检测环节却成了整个系统的“速度瓶颈”,行业亟待一场感知革命。安徽希磁科技股份有限公司(以下简称“希磁科技”)最新发布的STK-636TMF芯片级电流传感器,以40纳…...
软考 系统架构设计师系列知识点之杂项集萃(117)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(116) 第214题 在磁盘上存储数据的排列方式会影响I/O服务的总时间。假设每磁道划分成10个物理块,每块存放1个逻辑记录。逻辑记录R1,R2,……,R10存放在同一个磁道上,记录的安排顺序如下表所示: 物理块 1 2 3 4 5…...
终极指南:Kanboard监控告警配置 - 打造异常情况及时响应机制
终极指南:Kanboard监控告警配置 - 打造异常情况及时响应机制 【免费下载链接】kanboard Kanban project management software 项目地址: https://gitcode.com/gh_mirrors/ka/kanboard Kanboard作为一款高效的看板项目管理软件,不仅能帮助团队可视…...
如何利用Browserify代码覆盖率分析提升JavaScript应用质量:完整工具链指南
如何利用Browserify代码覆盖率分析提升JavaScript应用质量:完整工具链指南 【免费下载链接】browserify-handbook how to build modular applications with browserify 项目地址: https://gitcode.com/gh_mirrors/br/browserify-handbook 在前端开发中&#…...
Vue实战:从零构建黑马后台管理系统全流程解析
1. 项目初始化与环境搭建 刚开始接触Vue后台管理系统开发时,我踩过不少环境配置的坑。这里分享一个经过实战验证的初始化流程,帮你避开那些常见的"雷区"。 首先确保你的开发环境已经安装了Node.js(建议LTS版本)和npm。我…...
本地跑 Gemma 4 替代 Claude Code?M4 Max 实测告诉你为什么行不通
文章目录引言:省钱的小算盘,打得震天响一、Gemma 4:Google 给本地玩家发的"甜蜜陷阱"二、Claude Code:云端的"灭霸级"存在三、M4 Max 实测:当理想照进现实,现实碎了3.1 第一坑…...
