- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
共享内存在内存数据库系统中的应用
摘要共享内存是进程间通信的重要手段之一,并在实际中得到了广泛应用。
本文将介绍不共享内存的原理和内存数据库的相关概念,并用内存数据库给出共
享内存的应用实例。
关键词共享内存;内存数据库;进程通信
引言
计算机硬件的快速发展带来了多核技术,这使得并行编程真正得以实现。为
了使并行编程模型中的各进程相互协作,目前有如下几种技术:信号量、消息队列、
共享内存和socket。信号量是初始值非负的整数值,在信号量上的操作只有两种:
加和减。在操作中要保证信号量一直非负。消息队列是一个消息链表,具有添加
消息权限的进程可以向其添加消息,有获取消息权限的进程可以从其中取得消
息。由于消息队列比信号量的信息更为丰富,所以可以用于更复杂的情况。共享
内存技术则是开辟一块特殊内存区域,使得不同进程可以共享这块内存进行读写
操作。其优势在于通过共享内存进程间可以交换大批量数据。Socket编程是不同
机器进程间通信的基本方法,当然也可用于同一机器的进程间通信。
1共事内存的原理
在多任务操作系统中,进程的地址空间是相对独立的,相互并不影响,就是说
相同的一个地址,在不同的进程中,对应有不同的数据。这样每个进程的地址空间
就变大了,而且安全性也提高了。进程的地址空间是虚拟的地址空间,在读写内存
时,需要内存管理单元(MMU)将虚拟内存映射到实际的物理内存。但是,当进程间
需要交换大量数据时,需要多个进程使用同一块物理内存,而不是每个进程都保留
共享数据的一个拷贝。这个功能的实现是通过将不同进程的虚拟内存页映射到同
一个实际内存页上。不同的操作系统提供了不同的API函数实现共享内存的操
作。在linux下主要有有两个函数:
Void’mmap(void*start,size_tlength,impmt,intflags,intfd,off_toffset);
Intmunmap(vold*start,size_tlensth)
其中,mmap函数用于创建共享内存,munmap则是取消共享内存的映射。在
windows下创建共享内存、解除内存映射则分别用CreateFileMapping和
UnrrmpViewOfFile函数[4]。在,netframework下,没有API用于内存映射,所以,需
要在,net代码中调用以上所列c函数,完成内存映射。
2内存数据库介绍
内存数据库就是将数据放入内存中直接操作的数据库,与传统的数据库有很
大不同,主要在于传统数据库的数据主要存在硬盘上,而内存数据库的数据主要存
放于内存中。因为硬盘的i0读写速度远慢于cpu和内存读写,因此,传统数据库在
读写方面的主要研究点在于尽量减少硬盘的读写次数,而内存数据库的主要研究
点在于快速算法、并行操作等保证实时陛数据存取方面。
3共事内存在内存数据库系统中的应用实例
内存数据库用多进程保证并行操作,这便需要这多个进程共享内存中的数
据。而数据库数据通常是庞大的,因此共享内存在内存数据库中有很好的应用价
值。在内存数据库中应用共享内存进行数据的加载与共享操作如图1所示。
内存数据库的数据仍然要存储于硬盘上,实例所用数据均存储于一个文件内,
文件格式则是程序中既定的。在启动数据库时,整个文件将被加藏到内存中。加
载结束后,后台读写进程启动。每个进程启动后,都将用共享内存映射函数将进程
地址映射到内存数据库的数据地址。这样,这些进程将同时操作一块内存,而不是
每个进程都有一个数据拷贝。至于读写的同步问题。数据文件中设置有一个位图,
用来监控内存中数据的可用信息。当进程需要读写内存数据时,首先将查看位图,
以我出数据可用与否的信息,然后再进行真实读取。位图信息的同步则通过信号
量来控制。
4结论
内存数据库因为其实时性被用于嵌入式系统、电信计费、股票交易等行业领
域,并取得了良好的效果。内存数据库的概念出现在20世纪90年代,目前已经有
较为成熟的内存数据库产品产生,如oracle的TimesTen。但是商业内存数据库的
价格昂贵,而且内存数据库技术仍在发展阶段。因此,进行内存数据库的研究和探
索还是很有意义的。
文档评论(0)