本文记录我对《深入理解linux内核》第三版的杂谈读书笔记,所记录的大部分为杂谈记录,系统的知识我会单独总结。
第一章 绪论
操作系统基本概念
进程
程序运行时的一个实例。
地址空间
允许进程引用的内存地址集合。
系统调用
即对内核提出的请求,硬件就会把cpu从用户态切换到内核态。然后开始一个内核的执行过程。执行完毕之后,内核过程将迫使硬件返回到用户态。继续执行下一条指令。
文件描述符(这一部分来自于apue)
对于内核而言,所有的打开文件都通过文件描述符引用。
从形式上来说,文件描述符是一个非负整数。
当打开一个现有文件或者创建一个新的文件时,内核向进程返回一个文件描述符。内核使用三种数据结构表示打开的文件:他们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。
1. 每个进程具有一个文件描述符打开表。[fd, pfile]
2. 内核为所有打开文件维持一张文件表。每一个表项包括:
- 文件状态
- 当前文件偏移量
- 指向该文件v节点表项的指针
3. 每个打开文件都有一个v节点结构,该结构包括:
- v节点信息(文件类型,对此函数进行各种操作的函数的指针)
- i节点信息(索引节点,文件所有者,文件长度,文件所在的设备,文件在磁盘上的位置指针)
进程打开不同的文件,具有不同的文件表,不同的v-node.
注意,这种情况是不同的进程各自独立的打开了同一个文件。从语义上来说,他们并不共享同一个文件。所有,二者具有不同的文件表。第一个进程在fd=3打开了该文件,而第二个进程在fd=4打开了该文件。内核这么做的原因是:既然语义上二者是独立的,那么各自拥有对改文件不同的文件偏移量。但是,v-node是一样的。
这种是共享的情形,执行同一个文件表。
硬链接和软连接
通过上图来学习硬链接和软连接:
硬链接:相当于给文件起别名,新的文件名和原来的文件名共享一个inode.显然,inode具有引用计数!
现在目录下有两个文件,一个名为AAA,一个名为BBB。
引用
$ ls -il
963922 -rw-r–r– 1 ocean ocean 92 2007-05-18 15:46 AAA
963923 -rw-r–r– 1 ocean ocean 95 2007-05-18 15:46 BBB首先先做一个AAA的硬链接。
引用
ln AAA AAAhard
ls -il
963922 -rw-r–r– 2 ocean ocean 92 2007-05-18 15:46 AAA
963922 -rw-r–r– 2 ocean ocean 92 2007-05-18 15:46 AAAhard
963923 -rw-r–r– 1 ocean ocean 95 2007-05-18 15:46 BBB这里我们注意在创建链接前,AAA显示的链接数目为1,创建链接后 <