Ufo*_*mut 4 filesystems microsoft-word
今天,当我在 Microsoft Word 中打开我的 Microsoft Word 文档文件时,我试图将它从一个地方移动到另一个地方。但是后来它说它无法移动,因为它是在 Microsoft Word 中打开的。同样,当我们在媒体播放器中播放 MP3 文件时尝试移动它时,也会发生同样的事情。我认为还有很多其他类似的情况。
但是为什么在任何程序中打开文件时它都无法移动?它背后的基本思想是什么?
Fra*_*mas 18
您要问的概念称为并发和同步控制,它指的是一组技术,用于防止对多个进程可访问的数据段进行同时(并且可能发生冲突)更改。
这个概念的教科书例子是一对已婚夫妇,他们有一张联合借记卡,账户中有 1000 美元。如果他们在城镇对面的 ATM 机上,并且在完全相同的瞬间提取 1000 美元,并且没有并发控制,那么银行总共会发出 2000 美元,这显然是不对的。甚至有可能两台自动取款机都将金额减少到 0,而不是每台减去 1000,因此银行甚至可能不会注意到他们被敲诈了。
更具体地说,并发是指同时发生多件事的情况(以及可能发生的问题),而同步是一组避免并发问题的技术,通常通过控制谁可以在任何给定时间更改数据,使用锁.
要解决并发问题,您需要几个组件:
在这种情况下,文件是数据,两个进程是复制和访问文件的编辑器/播放器。
文件系统将文件并发作为任何现代操作系统的基本特征来处理。MS 文件系统 API (.dll) 通过在文件上创建同步锁来处理这种情况当一个进程打开它们时。当一个或另一个进程正在更改数据时,锁会阻止对文件的其他操作。对于普通内容文件,当第一个进程打开文件进行读/写时,它会建立一个写锁,以防止所有其他进程更改文件。此外,当该文件被主动写入时,会建立一个读锁,这样如果另一个进程尝试读取数据,它不会从更改之前获取部分数据,也不会从更改之后获取部分数据。这些读锁在文件写入后几乎立即释放,但写锁会持续到文件关闭。进程读取数据时也会建立读取锁,以防止在读取过程中文件更改。一般的想法是当存在读锁时你不能写,
通常内容文件是使用 MS 所谓的“单写多读语义”访问的,这通常允许复制有问题的文件,因为复制过程不需要写锁。我不确定为什么您的 MP3 播放器会锁定 mp3,但我的直觉是这与播放器内置的元数据编辑器有关。无论哪种方式,重要的是要注意进程本身对建立什么锁有一定的控制权,并且没有很好的方法来告诉程序员在想什么。
一些 MS Office 文档使问题更加复杂,因为它们创建了用于编辑的临时文件(主要是 word 和 powerpoint),这可能允许多个编辑器同时更改自己的副本,并使用特殊技术试图阻止 User2 保存文档,并覆盖用户 2 打开文件后用户 1 保存的更改。但是 Excel 和 Access 可能会阻止对 User2 的写访问, 并弹出一个窗口,询问您是否希望在 User1 退出文件时收到通知,或者允许 User2 以只读模式打开文件。MS Office 版本以不同的方式处理这些问题。例如,对于 office '07,我必须先关闭文档,然后再将其附加到电子邮件中。在 2010/2013 年,我不必这样做。文档是在本地访问还是通过网络共享访问也有所不同。
这是一组极其复杂的主题,以无数方式对多进程/多用户系统产生巨大影响,因此用于每种情况的策略是无数的。我什至没有在这篇文章中触及表面。在处理多线程 IO 算法和数据库并发控制时,它变得非常有趣。此处的链接应该为您提供一个良好的起点来探索适合您的需求和好奇心的任何深度级别的概念。
祝你好运