Day29 procfs, sysfs, debugfs

前言

讲完了复杂了中断处理,铁人赛的倒数第二天,要来看看一些虚拟的文件系统了,首先是 procfssysfs 为什麽这两个目录会存在呢?为了是让调整测试kernel的时候能够比较方便,所以才创造出了这两个虚拟系统。

procfs

profs 并不是真正意义上的文件系统,虽然会放在记忆体中,却不会占用磁碟空间,proc文件系统包含了结构化的目录和虚拟文件,既可以向用户呈现kernel中的一些讯息,也可以当作一种从user space 向kernel发送讯息。 这些虚拟文件在试用查看命令查看时会返回大量的讯息,但是文件本身显示为 0byte ,此外这些特殊文件中,大多数见的时间及日期属性是当前系统时间和日期。事实上 ps, top这些SHELL命令就是从proc文件系统中读取信息的。

/proc/PID/cmdline: 启动该行程的命令列.
/proc/PID/cwd: 当前工作目录的符号连结.
/proc/PID/environ: 影响行程的环境变数的名字和值.
/proc/PID/exe: 最初的可执行档的符号连结, 如果它还存在的话。
/proc/PID/fd: 一个目录,包含每个打开的档案描述子的符号连结.
/proc/PID/fdinfo: 一个目录,包含每个打开的档案描述子的位置和标记
/proc/PID/maps: 一个文字档案包含记忆体对映档案与块的资讯。
/proc/PID/mem: 一个二进位图像(image)表示行程的虚拟记忆体, 只能通过ptrace化行程存取.
/proc/PID/root: 该行程所能看到的根路径的符号连结。如果没有chroot监狱,那麽行程的根路径是/.
/proc/PID/status: 包含了行程的基本资讯,包括执行状态、记忆体使用。
/proc/PID/task: 一个目录包含了硬连结到该行程启动的任何任务

sysfs

有了proc目录,为什麽还要sys目录呢?
在Linux kernel的开发阶段,很多kernel module会向proc目录中添加节点和目录,导致PROC目录中的内容杂乱无章,因此在procfs 之後诞生了sysfs这个新的虚拟文件系统。这个新的设备模型是为了统一所有电脑的操作与表示,包含设备与设备之间的连接。

sys文件系统的几个主要目录跟功能简述
block : 描述系统里的 block device
class : 根据设备功能分类的设备模型
devices: 描述系统中所有的设备
fs: 描述系统所有的文件系统
module: 描述系统的模块
bus: 将系统中所有的设备连接到某个总线
dev: 按照 character device 和 block device的主次号码连接到真实设备的符号连接文件
firmware: 与系统加载硬体相关的接口
kernel: kernel 可调整的参数
power: 电源管理相关的参数。

debugfs

这是一种用来调整内核的内存文件系统,可以透过debugfs和用户空间机换数据。有时我们需要在运行中修改某些kernel 的数据,因此利用这个临时的文件系统把在意的数据映射到用户空间。 sysfs与 procfs也可以做到这些事情,前者是用来反映系统以及行程的状态讯息,後者是用於Linux设备驱动模型,因此把私人的测试讯息加入这两个虚拟文件系统不大合适,因此特别创立了这个虚拟系统。


<<:  D30 / 终於完赛啦!- 写写第一次参赛的感想

>>:  Day 29 - XState in React 2 (着重: global state and performance concerned)

自动化 End-End 测试 Nightwatch.js 之踩雷笔记:等待时间

在测试一个网页时,时常会有需要等待的时候,可能是等待网页载入、等待 UI 显示或等待搜寻结果等 pa...

程序精炼唯熟练尔:高阶函式 预设参数 high-order function, default parameter

「在写什麽呀?」唯心用手指戳了戳诗忆的额头。「眉头都皱起来了。」 「喔,学姐,我在练习高阶函式,把函...

Day 17 网页分析 - Web Application Analysis (WhatWeb)

WhatWeb是一个用来分析网站的工具,拥有超过1800种的插件来分析网站,包括服务器类型、版本、I...

学习历程救援事件(灾难复原实例) - 有的没的瓜

事件简述 前篇学习历程救援事件(灾难复原实例)後续追踪之外也看到了其它瓜... 北市教育局指出,学习...

不用Recoil的话,如何自己制作一个 Custom hook 来共享全域变数?(2)

实作自己的全域 count, setCount codesandbox demo const { c...