原子在linux中写道
发布时间:2020-12-13 23:23:57 所属栏目:Linux 来源:网络整理
导读:在 linux上,当写入管道时,如果数据等于或小于内存页面大小(4k至少在64bit rhel上),操作系统提供了保证整个写入将成功或失败,但不会有损坏数据,当多个进程同时写入时.这也适用于写入常规文件. 我的问题是,这个原子性是linux虚拟内存的一个特性吗?如果是,请考
在
linux上,当写入管道时,如果数据等于或小于内存页面大小(4k至少在64bit rhel上),操作系统提供了保证整个写入将成功或失败,但不会有损坏数据,当多个进程同时写入时.这也适用于写入常规文件.
>我的问题是,这个原子性是linux虚拟内存的一个特性吗?如果是,请考虑两个进程之间的共享内存情况,其中一个进程在调度程序的写入过程中被换出. Virtual memory subsytem是否确保进程正在写入的内存页面也被锁定,以便第二个进程无法写入同一页面? 解决方法
>否.如果两个进程正在使用共享内存,则进程之间没有隐式锁定.你必须自己安排这样一个锁(如果锁的所有者被换掉了,那么你的另一个进程必须等待,直到所有者被交换并在完成任何操作后释放锁,同时持有锁).
>我不相信页面与其他内存整体不同的隐式(或显式)规则.特定规则适用于写入管道和文件,如果所有数据都适合一个页面,它可以被操作系统写成一个块 – 我想你会发现操作系统对资源有一个锁定它是一次写一页.如果数据大于页面,则当锁定被释放时,另一个进程[或线程]可能已准备好运行,从而从第一个进程“窃取”锁定.不到一页,它在一次锁定运行中完成整个写入. 但需要明确的是,通常没有对内存页面的写入(或读取)进行隐式锁定.它严格适用于某些功能.通常,特定函数还将具有某种锁定,以防止其他进程在同一函数中运行[至少对于给定资源 – 例如一个文件描述符或类似文件 – 很可能一些其他进程可以同时从另一个文件读取到您的进程读取或写入您的文件,但是您的文件对于锁定所持有的某个块大小是原子的,但不是你的“立即编写整个莎士比亚作品”系统调用,因为这可能会阻止其他一些重要的过程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |