我在运行2.6.3x内核的基于x86的Linux系统中有这个要求..
我的进程有一些动态数据(不多,在几兆字节范围内),如果进程崩溃,必须恢复。显而易见的解决方案是将数据存储在共享内存中,如果进程重新启动,则再次读取它。必须小心写入共享内存,以便更新过程中的进程崩溃不会使数据在共享内存中损坏。
在编码之前我自己只是想检查是否有任何提供此功能的开源程序/库..谢谢。
-Santhosh。
答案 0 :(得分:0)
我不认为您提出的设计是合理的。操作系统崩溃(例如电源故障等)可能导致mmap'd区域与光盘部分同步(可能页面的编写顺序与编写它们的顺序不同),这意味着您的数据结构将获得以任意方式腐败。
如果你需要你的数据库更改是持久的和原子的(也许一致性和完整性也不会受到伤害,对吧?)那么我强烈建议使用支持ACID或相应子集的现有数据库系统。也许sqlite或Berkeley DB可以解决问题。
原则上你可以自己做,但不是你所描述的方式 - 你需要创建某种日志文件,这种日志文件以一种可以原子方式读回来的方式更新,并且能够从一些已知的快照等“重播”事件,这在技术上具有挑战性。
请记住:
我意识到使用库(例如bdb或sqlite)对数据结构进行每次读取或写入操作都是一种侵入性的改变,但如果你想要这种稳健性,我认为这是必要的。