- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux系统环境下关于多进程并发写同一个文件的讨论.pdf
讨论关于并发环境下,多个进程对同一文件写入的问题,我们会涉及到文件共享的知识。在开始之
前,我们先讨论一些有关文件共享的知识。
1. 文件共享
Unix系统支持在不同进程间共享打开的文件。为此,我们先介绍一下内核用于所有I/O的数据结构。
注意,下面的说明是概念性的,与特定的实现可能匹配,也可能不匹配。
内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个
进程可能产生的影响。
(1) 每个进程在进程表中都有一个记录项,记录项中包含有一张打开文件描述符表,可将其视为一
个矢量,每个描述符占用一项。与每个文件描述符相关联的是:
(a) 文件描述符标识(close_on_exec)。
(b)指向一个文件表项的指针。
(2)内核为所有的打开文件维持一张文件表。每个文件表项包含:
(a)文件状态标志(读、写、添加、同步和非阻塞等)。
(b)当前文件偏移量。
(c)指向该文件v节点的指针。
(3)每个打开文件(或设备)都有一个v节点(v-node)结构。v节点包含了文件类型和对此文件
进行各种操作的函数的指针。对于大多数文件,v节点还包含了该文件的i节点(i-node,索引节点)。
这些信息是在打开文件时从磁盘上读入内存的,所以所有关于文件的信息都是快速可供使用的。例
如,i节点包含了文件的所有者,文件长度,文件所在的设备,指向文件实际数据块在磁盘上所在位置
的指针等等。
注意:Linux没有使用v节点,而是使用了通用i节点结构。虽然两种实现有所不同,但在概念上,
v节点与i节点是一样的。两者都指向文件系统特有的i节点结构。
我们忽略了默写实现细节,但这并不影响我们的讨论。例如,打开文件描述符表可存放在用户控
件,而非进程表中。这些表也可以用于多种方式的实现,不必一定是数组;例如,可将它们实现为结
构的连接表。这些细节并不影响我们在文件共享方面的讨论。
图1显示了一个进程的三张表之间的关系。该进程有两个不同的打开文件:一个文件打开为标注输
入(文件描述符为0),另一个打开为标准输出(文件描述符为1)。从Unix系统的早期版本中
[Thompson 1978]以来,这三张表之间的基本关系一直保持至今。这种安排对于在不同进程之间共享文
件的方式非常重要。
图1 打开文件的内核数据结构
1. 注意:创建v节点结构的目的是对在一个计算机系统上的多文件系统类型提供支持。这一工作是有Peter Weihberger(贝尔实验室)
和Bill Joy(Sun公司)分别独立完成的。Sun称此种文件系统为虚拟文件系统(Virtual File System),称与文件系统类型无关的
i节点部分为v节点[Kleiman 1986].当哥哥制造商的实现增加了对Sun的网络文件系统(NFS)的支持时,它们都广泛采用了v节点结
构。在BSD系统中首先提供v节点的是4.3BSD Reno版本,其中加入了NFS。
2.
3. 在SVR4中,v节点代换了SVR3中与文件系统类型无关的i节点结构。Solaris是从SVR4发展而来的,他也是用了v节点。
4.
5. Linux没有将相关的数据结构分为i节点和v节点,而是采用了一个独立于文件系统的i节点和一个依赖于文件系统的i节点。
如果两个独立进程各自打开了同一个文件,则有图2中所示的安排。我们假设第一个进程在文件
描述符3上打开该文件,而另一个进程则在文件描述4上打开该文件。打开该文件的每一个进程都得到
一个文件表项,但对一个给定的文件只有一个v节点表项。每个进程都有自己的文件表项的一个理由
是:这种安排使每一个进程都有它自己的对该文件的当前偏移量。
图2 两个独立进程各自打开同一个文件
给出了这种数据结构后,现在对前面所描述的操作做进一步说明。
在完成每个write后,在文件表项中的当前文件偏移量即增加所写的字节数。如果当前文件偏移量超过
了当前文件长度,则在i节点表项中的当前文件长度被设置为当前文件的偏移量。
如果用O_APPEND标志打开了一个文件,则相应标志也被设置到文件表项的文件状态标志中。每次对这
种具有添写标志的文件执行写操作时,在文件表项中的当前文件偏移量首先被设置为i节点表项中的文
件长度。这就使得每次写的数据都添加到文件的当前尾端处。
您可能关注的文档
- Linux下的程序编译.pdf
- linux下编译库文件.pdf
- linux下编辑rc.local设置开机启动.pdf
- Linux下达梦7数据库安装官方文档.pdf
- Linux中tty、pty和pts概念及区别.pdf
- Linux中如何让命令在后台运行.pdf
- Linux产生与发展历史.doc
- Linux入门与介绍.pdf
- Linux内核研究推荐书目.pdf
- Linux和Unix的区别-unix命令集.doc
- 新疆奎屯市第一高级中学2024_2025学年高二地理下学期第二次月考试题含解析.doc
- 山西省吕梁育星中学2024_2025学年高一地理上学期第三次月考试题.doc
- 河北省正定县第七中学2024_2025学年高二生物上学期第一次月考试题.doc
- 辽宁省凌源市2025届高三地理下学期3月抽测试题含解析.doc
- 吉林省四平市2024_2025学年高二语文上学期期末联考试题含解析.doc
- 安徽省全椒县2024_2025学年七年级地理上学期期末考试试题扫描版.doc
- 河北省深州市长江中学2024_2025学年高一语文9月月考试题扫描版无答案.doc
- 2025版高考英语总复习Unit5NelsonMandela_amodernhero课时作业含解析新人教版必修1.docx
- 四川省外语学院重庆第二外国语学校2024_2025学年高一地理上学期第一次月考试题含解析.doc
- 2024高考化学总复习第四单元第4讲氮及其重要化合物教案新人教版.docx
文档评论(0)