Linux系统:从文件系统到网络结构的全面解析
1. /proc文件系统
Linux系统里,/proc文件系统以完全无特权的程序形式实现,其作用是解析和格式化来自 /proc 的信息。该文件系统需要实现两个关键部分:目录结构和文件内容。
由于UNIX文件系统是由通过inode编号识别的文件和目录inode集合来定义的,所以 /proc 文件系统要为每个目录和相关文件定义唯一且持久的inode编号。一旦建立了这种映射,当用户尝试从特定文件inode读取数据或在特定目录inode中进行查找时,文件系统就能利用这个inode编号来确定所需的操作。当从这些文件中读取数据时,/proc文件系统会收集相应信息,将其格式化为文本形式,然后放入请求进程的读取缓冲区。
inode编号到信息类型的映射把inode编号分成两个字段。在Linux中,PID是16位宽,而inode编号是32位。inode编号的高16位被解释为PID,其余位则定义了关于该进程所请求的信息类型。
PID为零是无效的,因此inode编号中PID字段为零意味着这个inode包含的是全局信息,而非特定进程的信息。在 /proc 中存在单独的全局文件,用于报告诸如内核版本、空闲内存、性能统计数据以及当前运行的驱动程序等信息。
并非这个范围内的所有inode编号都被预留。内核可以动态分配新的 /proc inode映射,并维护一个已分配inode编号的位图。它还维护着一个已注册的全局 /proc 文件系统条目的树状数据结构。每个条目包含文件的inode编号、文件名、访问权限,以及用于生成文件内容的特殊函数。驱动程序可以随时在这个树中注册和注销条目,树的一个特殊部分(位于 /proc/sys 目录