PROC 文件系统简介

更新时间:
2024-03-14
下载文档

PROC 文件系统简介

PROC 文件系统是一个虚拟文件系统,只存在于内存当中,而不占用外存空间。PROC 以文件系统的方式为访问系统内核数据的操作提供接口。应用程序可以通过访问 PROC 文件系统获得系统相关信息。由于系统的某些信息是动态改变的,所以应用程序读取 PROC 文件时,PROC 文件系统是动态从系统内核读出所需信息并提交的。

SylixOS 为了方便用户访问内核信息,支持 PROC 虚拟文件系统,该文件系统存在于/proc/目录,包含了各种用于展示内核信息的文件,并且允许进程通过常规文件 I/O 系统调用来方便地读取,有时还可以修改这些信息。

SylixOS 提供的 PROC 文件系统示例目录内容:

# cd /proc/
# ls
1                xinput            sysvipc           ksymbol        posix
net              diskcache         power             fs             hook
smp              cmdline           version           kernel         dma
cpuinfo          bspmem            self              yaffs

/proc/目录下的文件及目录说明如下表所示。

文件/目录描述(进程属性)
1进程 ID 为 1 的进程信息目录
xinput显示多输入设备状态
sysvipcXSI IPC 进程间通信
ksymbol内核符号表文件
posixPOSIX 子系统信息目录
net网络子系统信息目录
diskcache磁盘高速缓存信息
power电源管理子系统信息目录
fs文件系统子系统信息目录
hook显示系统 hook 信息
smp显示多核下任务
cmdline显示内核命令行参数
version当前系统运行的内核版本信息文件
kernel内核子系统信息目录
dma显示当前使用的 DMA 通道信息
cpuinfo处理器相关信息文件
bspmem显示 RAM/ROM 信息
self辅助性信息目录
yaffsYAFFS 文件系统信息文件

通常使用脚本来访问/proc/目录下的文件,也可以从程序中使用常规 I/O 系统调用来访问/proc/目录下的文件。但是在访问这些文件时,有以下限制:

  • /proc/目录下的一些文件是只读的,即这些文件仅用于显示内核信息,但无法对其进行修改。/proc/pid/目录下的大多数文件就属于此类型。
  • /proc/目录下一些文件仅能由文件拥有者(或超级用户所属进程)读取。
  • 除了/proc/pid/子目录中的文件,/proc/目录的其他文件大多属于 root 用户,并且仅有 root 用户能够修改那些可修改的文件。

/proc/pid/进程相关信息

在终端中输入 ps 命令可以查看当前进程信息,其中 pid 为 0 的进程为系统内核进程。对于系统中每个进程,内核都提供了相应的目录,命名为/proc/pid/,其中 pid 为进程 ID。在此目录中的各个文件或子目录包含了进程的相关信息。

进程信息目录示例内容:

# ps
      NAME            FATHER      STAT  PID   GRP    MEMORY     UID    GID   USER
---------------- ------------ ---- ----- ----- ---------- ----- ----- ------
kernel           <orphan>         R        0     0       48KB     0      0      root
app_proc         <orphan>         R        1     1      232KB     0      0      root
total vprocess: 2
# cd /proc/
# ls
1                xinput            sysvipc         ksymbol         posix
net              diskcache         power           fs              hook
smp              cmdline           version         kernel          dma
cpuinfo          bspmem            self            yaffs
# cd 1
# ls
ioenv           filedesc           modules         mem             cmdline
exe

其中/proc/pid/目录下文件说明如下表所示。

文件描述(进程属性)
ioenv进程 I/O 环境文件
filedesc文件描述符信息文件
modules动态链接库信息文件
mem内存信息文件
cmdline命令行文件,以 \0 分隔命令行文件
exe可执行文件的符号链接

/proc/ pid/目录下文件示例内容:

# cd /proc/1/
# cat ioenv
umask:0
wd:/apps/app_proc
# cat filedesc
FD NAME
0 /dev/ttyS0
1 /dev/ttyS0
2 /dev/ttyS0
# cat modules
NAME HANDLE TYPE GLB BASE SIZE SYMCNT
app_proc 013b4878 USER YES a0038000 82c2 2
libvpmpdm.so 013b4f50 USER YES a0048000 274b8 286
<VP Ver:2.0.1 dl-malloc>
# cat mem
static memory : 167936 Bytes
heap memory   : 4096 Bytes
mmap memory   : 65536 Bytes
total memory  : 237568 Bytes
# cat cmdline
/apps/app_proc/app_proc
# ll
-r--r----- root     root     Sat Jan 01 08:04:53 2000      0 B, ioenv
-r--r----- root     root     Sat Jan 01 08:04:53 2000      0 B, filedesc
-r--r----- root     root     Sat Jan 01 08:04:53 2000      0 B, modules
-r--r----- root     root     Sat Jan 01 08:04:53 2000      0 B, mem
-r--r----- root     root     Sat Jan 01 08:04:53 2000      0 B, cmdline
lr--r----- root     root     Sat Jan 01 08:04:53 2000           exe -> /apps/app_proc/app_proc
      total items: 6

/proc/xinput 输入设备信息

/proc/xinput 存储当前系统下输入设备状态信息:

# cd /proc/
# cat xinput
devices                 type status
/dev/input/kbd0         kbd  close
/dev/input/touch0       mse  open
/dev/input/mse0         mse  close

/proc/sysvipc IPC 信息

/proc/sysvipc 存储当前系统下 IPC 的使用信息:

# cd /proc/sysvipc/
# ls
shm             msg             sem             ver
# ps
      NAME            FATHER          STAT  PID   GRP    MEMORY    UID   GID   USER
---------------- ---------------- ---- ----- ----- ---------- ----- ----- ------
kernel             <orphan>           R       0     0       40KB     0     0     root
app_proc           <orphan>           R       1     1      212KB     0     0     root
total vprocess: 2
# cat shm
key shmid perms       size nattch   cpid   lpid    uid    gid   cuid   cgid       atime        dtime        ctime
0     0     666         4096       1       1       1      0       0      0      0   1497865518      0      1497865518

/proc/ksymbol 内核符号表

/proc/ksymbol 存放当前系统下内核符号表信息:

# cat /proc/ksymbol 
 SYMBOL NAME                     ADDR    TYPE
------------------------------ -------- --------
viShellInit                     002097f8   RX
aodv_netif                      00d1b34c   RW
dns_mquery_v4group              0058293c   RW
_cppRtUninit                    0050c7c0   RX
_IosFileSet                     004f0fc4   RX
_epollFindEvent                 004eca9c   RX
__blockIoDevDelete              004a63e8   RX
API_AhciDriveRegWait            004a0af0   RX
API_AhciDriveInfoShow           004a0058   RX
__pxnameGet                     0046fc58   RX
mq_timedreceive                 0046ec54   RX
gjb_format                      0046b3c8   RX
API_INetNpfDetach               0044436c   RX
igmp_joingroup                  003f6d58   RX
if_param_getingw                003ab764   RX
vprocIoFileDescGet              0039b714   RX
lib_nlreent_init                00391bd0   RX

/proc/posix POSIX 子系统信息

POSIX 子系统中包含命名信息文件 pnamed,POSIX 命名信息可以通过 cat 命令来查看 pnamed 的内容,其中 TYPE 表示类型(其中 SEM 表示信号类型,MQ 表示消息队列),OPEN 表示使用计数,NAME 表示对象名。

/proc/posix 目录示例内容:

# cd /proc/posix/
# ls
pnamed
# cat pnamed
TYPE  OPEN               NAME
---- ------ --------------------------------
SEM    1               sem_named 

/proc/net 网络子系统

/proc/net 存放当前系统下网络子系统信息:

# cd /proc/net/
# ls
netfilter          nat                 wireless            ppp             unix
packet             arp                 if_inet6            dev             tcpip_stat
route              igmp6               igmp                raw6            raw
udplite6           udplite             udp6                udp             tcp6
tcp                mesh-adhoc 

网络子系统各目录文件说明如下表所示。

目录/文件描述(进程属性)
netfilter网络过滤规则文件
nat网络地址转换
wireless无线网络配置文件
pppPPP 拨号文件
packetAF_PACKET 信息文件
arpARP 信息文件
if_inet6IPV6 网络接口文件
dev网络接口设备信息文件
unixAF_UNIX 信息文件
tcpip_statTCP/IP 状态信息文件
route路由表信息文件
igmp6IPV6 IGMP 信息文件
igmpIGMP 信息文件
raw6IPV6 原始数据信息文件
raw原始数据信息文件
udplite6IPV6 UDP 简要信息文件
udpliteUDP 简要信息文件
udp6IPV6 UDP 信息文件
udpUDP 信息文件
tcp6IPV6 TCP 信息文件
tcpTCP 信息文件
mesh-adhocMesh 自组网信息目录

/proc/diskcache 磁盘缓存

/proc/diskcache 存放当前系统下磁盘高速缓存信息:

# cd /proc/
# cat diskcache
DO NOT INCLUDE 'NAND' READ CACHE INFO.
NAME       OPT SECTOR-SIZE TOTAL-SECs VALID-SECs DIRTY-SECs BURST-R BURST-W  HASH
--------  --- ----------- ---------- ---------- ---------- ------- ------- ------
ATA-Hard   0      512       1024       1024        0         16      32      1024 Disk

/proc/power 电源管理子系统

/proc/power 存放当前系统下电源管理子系统信息:

# ls    
pminfo          devices         adapter

其中/proc/power 目录下文件说明如所示。

文件描述(进程属性)
pminfo当前系统信息文件
devices使能电源管理的设备文件
adapter适配器信息文件

pminfo 文件示例信息:

# cat pminfo
CPU Cores  : 1
CPU Active : 1
PWR Level  : Top
SYS Status : Running
  • CPU Cores: 当前系统 CPU 核心数。
  • CPU Active: 当前系统使能的 CPU 核心数。
  • PWR Level: 电源能量等级,由高到低分别为 Top、Fast、Normal、Slow。
  • SYS Status: 当前系统运行状态,运行状态包括低功耗状态 Power-Saving。

和正常运行状态 Running。

devices 文件信息:

# cat devices
PM-DEV         ADAPTER        CHANNEL   POWER
uart2          inner_pm       12         on
uart1          inner_pm       11         on
uart0          inner_pm       10         on 
  • PM-DEV: 电源管理设备名称。
  • ADAPTER: 所属电源管理适配器名称。
  • CHANNLE: 所属电源管理适配器通道号。
  • POWER: 当前电源状态,包括打开状态 on 和关闭状态 off。

adapter 文件信息:

# cat adapter
ADAPTER        MAX-CHANNEL
inner_pm       21
  • ADAPTER: 电源管理适配器名称。
  • MAX-CHANNLE: 电源管理适配器通道号最大数目。

/proc/fs 文件系统子系统

/proc/fs 存放当前系统轩文件系统信息:

# cd /proc/fs/
# ls
fssup           procfs          rootfs 

其中/proc/fs 目录下文件说明如下表所示。

目录/文件描述(进程属性)
fssup文件系统支持信息文件
procfsPROC 文件系统信息目录
rootfsROOT 文件系统信息目录

fssup 文件信息:

# cat fssup
rootfs procfs ramfs romfs vfat nfs yaffs tpsfs

procfs 目录信息:

# cd procfs/
# ls
stat
# cat stat
memory used: 0 Bytes
total files: 82
  • memory used: 文件大小。
  • total files: 文件数量。

rootfs 目录信息:

# cd rootfs/
# ls
stat
# cat stat
memory used: 3193 Bytes
total files: 45
  • memory used: 文件大小。
  • total files: 文件数量。

/proc/hook 信息

/proc/hook 存放系统当前的 hook 信息:

# cd /proc/hook/
# ls
pdelete             pcreate             fatal               stkoverflow     intexit
intenter            idleexit            idleenter           fddelete        fdcreate
objdelete           objcreate           wdtimer             reboot          init
idle                tinit               tick                tswap           tdelete
tcreate

/proc/smp 显示多核任务信息

/proc/smp/存放系统当前 CPU 运行任务信息:

# cd /proc/
# cat smp
LOGIC CPU  PHYSICAL CPU NON IDLE STATUS CURRENT THREAD MAX NESTING IPI VECTOR
--------- ------------ --------  ------  -------------- ----------- ----------
  0            0          1      ACTIVE      app_proc       1         30
  1            1          1      ACTIVE      t_tshell       1         31

/proc/cmdline 内核命令行参数

/proc/cmdline 存放当前系统内核命令行参数信息:

# cd /proc/
# cat cmdline
hz=1000 hhz=1000 console=/dev/ttyS0 kdlog=no kderror=yes kfpu=no heapchk=yes utc=no video=uvesafb:ywrap,mtrr:3,640x480-32@60

/proc/version 内核版本信息

/proc/version 存放当前系统的内核版本信息:

# cd /proc/
# cat version
SylixOS kernel version: 1.4.3 Code name: LongYuan BSP version 1.0.0 for LongYuan
(compile time: May 12 2017 15:13:56)
GCC:4.9.3

内核版本信息包含了 SylixOS 内核版本信息,BSP 版本信息,SylixOS 内核编译时间,编译器版本信息。

/proc/kernel 内核信息

/proc/kernel 存放当前系统的内核信息:

# cd /proc/kernel/
# ls
affinity        objects         tick

其中/proc/kernel 目录下文件说明如下表所示。

文件描述(进程属性)
affinity多核亲和度信息文件
objects内核对象信息文件
tick系统时钟嘀嗒信息文件

affinity 文件示例内容:

# cat affinity
      NAME         TID    PID  CPU
---------------- ------- ----- ---
t_idle0          4010000   0   0
t_itimer         4010001   0   *
t_isrdefer       4010002   0   *
t_except         4010003   0   *
t_log            4010004   0   *
t_power          4010005   0   *
t_hotplug        4010006   0   *
t_reclaim        4010008   0   *
t_sdhcisdio      4010009   0   *
t_diskcache      401000a   0   *
t_dcwpipe        401000b   0   *
t_tpsfs          401000c   0   *
t_netjob         401000d   0   *
t_netproto       401000e   0   *
t_snmp           401000f   0   *
t_tftpd          4010010   0   *
t_ftpd           4010011   0   *
t_telnetd        4010012   0   *
t_xinput         4010013   0   *
t_tshell         4010015   0   *
  • NAME: 线程名称。
  • TID: 线程 ID。
  • PID: 进程 ID。
  • CPU: 当前线程亲和到指定 CPU。

objects 文件示例内容:

# cd  /proc/kernel/
# cat objects
object      total        used     max-used
event           2400     121       123
eventset        400        0         0
heap            42         1         1
msgqueue        800       11        11
partition       40         8         8
rms             30         1         1
thread          400       20        21
timer           100        1         1
dpma            2          0         0
threadpool      2          0         0
  • object: 内核对象类型。
  • total: 指定类型对象总数。
  • used: 指定类型对象已经被使用的数目。
  • max-used: 指定类型对象被使用过的最大数目。

tick 文件示例内容:

# cd  /proc/kernel/
# cat tick
tick rate       : 100 hz
tick            : 964939
monotonic       : 2:40:49.398735170
reatime UTC     : Sat Jan 01 02:40:49 2000
reatime LCL     : Sat Jan 01 10:40:49 2000
  • tick rate: 系统时钟频率。
  • tick: 系统总时钟计数。

/proc/dma DMA 信息

/proc/dma 存放当前系统当前使用的 DMA 通道信息:

# cd /proc/
# cat dma
DMA   MAX DATA   MAX NODE CUR NODE
--- ------------ -------- --------
  0            0        0        0
  1            0        0        0
  2            0        0        0
  3            0        0        0
  4            0        0        0
  5            0        0        0
  6            0        0        0
  7            0        0        0
  8            0        0        0
  9            0        0        0
 10            0        0        0
 11            0        0        0
 12            0        0        0
 13            0        0        0
 14            0        0        0
 15            0        0        0
 16            0        0        0
 17            0        0        0
 18            0        0        0
 19            0        0        0
 20            0        0        0
 21            0        0        0

/proc/cpuinfo 处理器信息

/proc/cpuinfo 存放当前系统 CPU 信息:

# cd /proc/
# cat cpuinfo
CPU         : Xilinx zynq7000 (Cortex-A9 NEON)
CPU Family  : ARM(R) 32-Bits
CPU Endian  : Little-endian
CPU Cores   : 1
CPU Active  : 1
PWR Level   : Top level
CACHE       : 64KBytes L1-Cache (D-32K/I-32K)
PACKET      : QEMU zynq7000 Packet
BogoMIPS  0 : 682.600
  • CPU: 处理器类型及关键性参数。
  • CPU Family: 处理器架构类型及字长。
  • CPU Endian:大端小端类型。
  • CPU Cores: 处理器核心数。
  • CPU Active: 当前激活的处理器数。
  • PWR Level: 当前电源能级。
  • CACHE: 高速缓存信息。
  • PACKET: 板级支持包类型。
  • BogoMIPS 0: SylixOS 中衡量计算器运行速度的一种尺度(每秒百万次)。

/proc/bspmem 内存映射信息

/proc/bspmem 存放当前系统内存映射信息:

# cd /proc/
# cat bspmem
ROM SIZE: 0x00040000 Bytes (0x00000000 - 0x0003ffff)
RAM SIZE: 0x0fe00000 Bytes (0x00200000 - 0x0fffffff)
use "mems" "zones" "virtuals"... can print memory usage factor.

/proc/yaffs YAFFS 分区信息

/proc/yaffs 存放当前系统 YAFFS 分区信息:

# cd /proc/
# cat yaffs
Device : "/n1"
startBlock......... 129
endBlock........... 1023
totalBytesPerChunk. 2048
chunkGroupBits..... 0
chunkGroupSize..... 1 
nErasedBlocks...... 871
nReservedBlocks.... 16
nCheckptResBlocks.. nil
blocksInCheckpoint. 0
nObjects........... 23
nTnodes............ 96
nFreeChunks........ 55975
nPageWrites........ 0
nPageReads......... 13
nBlockErasures..... 0
nErasureFailures... 0
nGCCopies.......... 0
allGCs............. 0
passiveGCs......... 0
nRetriedWrites..... 0
nShortOpCaches..... 20
nRetiredBlocks..... 0
eccFixed........... 0
eccUnfixed......... 0
tagsEccFixed....... 0
tagsEccUnfixed..... 0
cacheHits.......... 0
nDeletedFiles...... 0
nUnlinkedFiles..... 0
nBackgroudDeletions 0
useNANDECC......... 1
isYaffs2........... 1
Device : "/n0"
startBlock......... 1
endBlock........... 128
totalBytesPerChunk. 2048
chunkGroupBits..... 0
chunkGroupSize..... 1
nErasedBlocks...... 126
nReservedBlocks.... 10
nCheckptResBlocks.. nil
blocksInCheckpoint. 0
nObjects........... 9
nTnodes............ 3
nFreeChunks........ 8183
nPageWrites........ 0
nPageReads......... 6
nBlockErasures..... 0
nErasureFailures... 0
nGCCopies.......... 0
allGCs............. 0
passiveGCs......... 0
nRetriedWrites..... 0
nShortOpCaches..... 10
nRetiredBlocks..... 0
eccFixed........... 0
eccUnfixed......... 0
tagsEccFixed....... 0
tagsEccUnfixed..... 0
cacheHits.......... 0
nDeletedFiles...... 0
nUnlinkedFiles..... 0
nBackgroudDeletions 0
useNANDECC......... 1
isYaffs2........... 1
文档内容是否对您有所帮助?
有帮助
没帮助