我们编写程序经常会打开操作文件,那么我们是否了解系统以及我们运行的程序(进程)是怎么管理哪些打开的文件的呢?
最近复习Unix编程,两幅图(From: APUE)供参考:
其实在以前上大学的时候操作系统课程老师讲过,只是平时没有特别注意。从上图中不难看出,其实通过三个数据结构来管理进程打开的文件:Process table、file table、v/i-node table(部分系统实现可能没有v-node而直接是i-table,其原理基本一样)。从左到右来看:
1)在进程中,进程表中维护其打开的文件描述符FD(File Descriptor),以及一个指针指向Kernel维护的File Table;
2)File Table其实主要维护的是当前系统中被打开的各个文件,主要包括文件的当前位置offset。
3)v/i-node entry 则存储文件的基本信息(如文件的位置、大小等)。
这样,通过这3个数据结构,则描述勾画出了整个系统当前程序运行及所有打开操作文件的状态关系~设计如此简单,却非常有效~
有兴趣的可以看看下图,表达的是什么呢?想一下再看最后一段,图的下面几句即为解释。
上图中的描述稍有意思,想想我们的系统,不同的程序会打开操作相同的文件,那么他们维护了不同的file table entry,描述了各自进程对文件的操作状态。而这些file table entry则对应着相同的文件信息(v/i-node entry)。设计体现了不同部分,合并了相同部分, 赞赞赞~
阅读(1904) | 评论(0) | 转发(0) |