国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

共享內(nèi)存在內(nèi)存數(shù)據(jù)庫系統(tǒng)中的應(yīng)用

2010-06-13 02:11
科技傳播 2010年19期
關(guān)鍵詞:信號(hào)量共享內(nèi)存硬盤

張 乾

同濟(jì)大學(xué)軟件學(xué)院,上海 201804

共享內(nèi)存在內(nèi)存數(shù)據(jù)庫系統(tǒng)中的應(yīng)用

張 乾

同濟(jì)大學(xué)軟件學(xué)院,上海 201804

共享內(nèi)存是進(jìn)程間通信的重要手段之一,并在實(shí)際中得到了廣泛應(yīng)用。本文將介紹不共享內(nèi)存的原理和內(nèi)存數(shù)據(jù)庫的相關(guān)概念,并用內(nèi)存數(shù)據(jù)庫給出共享內(nèi)存的應(yīng)用實(shí)例。

共享內(nèi)存;內(nèi)存數(shù)據(jù)庫;進(jìn)程通信

0 引言

計(jì)算機(jī)硬件的快速發(fā)展帶來了多核技術(shù),這使得并行編程真正得以實(shí)現(xiàn)[1]。為了使并行編程模型中的各進(jìn)程相互協(xié)作,目前有如下幾種技術(shù):信號(hào)量、消息隊(duì)列、共享內(nèi)存和socket。信號(hào)量是初始值非負(fù)的整數(shù)值,在信號(hào)量上的操作只有兩種:加和減,在操作中要保證信號(hào)量一直非負(fù)[2]。消息隊(duì)列是一個(gè)消息鏈表,具有添加消息權(quán)限的進(jìn)程可以向其添加消息,有獲取消息權(quán)限的進(jìn)程可以從其中取得消息。由于消息隊(duì)列比信號(hào)量的信息更為豐富,所以可以用于更復(fù)雜的情況[3]。共享內(nèi)存技術(shù)則是開辟一塊特殊內(nèi)存區(qū)域,使得不同進(jìn)程可以共享這塊內(nèi)存進(jìn)行讀寫操作,其優(yōu)勢在于通過共享內(nèi)存進(jìn)程間可以交換大批量數(shù)據(jù)。Socket編程是不同機(jī)器進(jìn)程間通信的基本方法,當(dāng)然也可用于同一機(jī)器的進(jìn)程間通信。

1 共享內(nèi)存的原理

在多任務(wù)操作系統(tǒng)中,進(jìn)程的地址空間是相對獨(dú)立的,相互并不影響,就是說相同的一個(gè)地址,在不同的進(jìn)程中,對應(yīng)有不同的數(shù)據(jù)。這樣每個(gè)進(jìn)程的地址空間就變大了,而且安全性也提高了。進(jìn)程的地址空間是虛擬的地址空間,在讀寫內(nèi)存時(shí),需要內(nèi)存管理單元(MMU)將虛擬內(nèi)存映射到實(shí)際的物理內(nèi)存。但是,當(dāng)進(jìn)程間需要交換大量數(shù)據(jù)時(shí),需要多個(gè)進(jìn)程使用同一塊物理內(nèi)存,而不是每個(gè)進(jìn)程都保留共享數(shù)據(jù)的一個(gè)拷貝。這個(gè)功能的實(shí)現(xiàn)是通過將不同進(jìn)程的虛擬內(nèi)存頁映射到同一個(gè)實(shí)際內(nèi)存頁上。不同的操作系統(tǒng)提供了不同的API函數(shù)實(shí)現(xiàn)共享內(nèi)存的操作。在linux下主要有有兩個(gè)函數(shù):

其中,mmap函數(shù)用于創(chuàng)建共享內(nèi)存,munmap則是取消共享內(nèi)存的映射。在windows下創(chuàng)建共享內(nèi)存、解除內(nèi)存映射則分別用CreateFileMapping和UnmapViewOfFile函數(shù)[4]。在.net framework下,沒有API用于內(nèi)存映射,所以,需要在.net代碼中調(diào)用以上所列c函數(shù),完成內(nèi)存映射。

2 內(nèi)存數(shù)據(jù)庫介紹

內(nèi)存數(shù)據(jù)庫就是將數(shù)據(jù)放入內(nèi)存中直接操作的數(shù)據(jù)庫,與傳統(tǒng)的數(shù)據(jù)庫有很大不同,主要在于傳統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)主要存在硬盤上,而內(nèi)存數(shù)據(jù)庫的數(shù)據(jù)主要存放于內(nèi)存中。因?yàn)橛脖P的io讀寫速度遠(yuǎn)慢于cpu和內(nèi)存讀寫,因此,傳統(tǒng)數(shù)據(jù)庫在讀寫方面的主要研究點(diǎn)在于盡量減少硬盤的讀寫次數(shù),而內(nèi)存數(shù)據(jù)庫的主要研究點(diǎn)在于快速算法、并行操作等保證實(shí)時(shí)性數(shù)據(jù)存取方面。

3 共享內(nèi)存在內(nèi)存數(shù)據(jù)庫系統(tǒng)中的應(yīng)用實(shí)例

內(nèi)存數(shù)據(jù)庫用多進(jìn)程保證并行操作,這便需要這多個(gè)進(jìn)程共享內(nèi)存中的數(shù)據(jù),而數(shù)據(jù)庫數(shù)據(jù)通常是龐大的,因此共享內(nèi)存在內(nèi)存數(shù)據(jù)庫中有很好的應(yīng)用價(jià)值。在內(nèi)存數(shù)據(jù)庫中應(yīng)用共享內(nèi)存進(jìn)行數(shù)據(jù)的加載與共享操作如圖1所示。

圖 1 內(nèi)存數(shù)據(jù)庫中共享內(nèi)存的使用

內(nèi)存數(shù)據(jù)庫的數(shù)據(jù)仍然要存儲(chǔ)于硬盤上,實(shí)例所用數(shù)據(jù)均存儲(chǔ)于一個(gè)文件內(nèi),文件格式則是程序中既定的。在啟動(dòng)數(shù)據(jù)庫時(shí),整個(gè)文件將被加載到內(nèi)存中。加載結(jié)束后,后臺(tái)讀寫進(jìn)程啟動(dòng)。每個(gè)進(jìn)程啟動(dòng)后,都將用共享內(nèi)存映射函數(shù)將進(jìn)程地址映射到內(nèi)存數(shù)據(jù)庫的數(shù)據(jù)地址。這樣,這些進(jìn)程將同時(shí)操作一塊內(nèi)存,而不是每個(gè)進(jìn)程都有一個(gè)數(shù)據(jù)拷貝。至于讀寫的同步問題,數(shù)據(jù)文件中設(shè)置有一個(gè)位圖,用來監(jiān)控內(nèi)存中數(shù)據(jù)的可用信息。當(dāng)進(jìn)程需要讀寫內(nèi)存數(shù)據(jù)時(shí),首先將查看位圖,以找出數(shù)據(jù)可用與否的信息,然后再進(jìn)行真實(shí)讀取。位圖信息的同步則通過信號(hào)量來控制。

4 結(jié)論

內(nèi)存數(shù)據(jù)庫因?yàn)槠鋵?shí)時(shí)性被用于嵌入式系統(tǒng)、電信計(jì)費(fèi)、股票交易等行業(yè)領(lǐng)域,并取得了良好的效果。內(nèi)存數(shù)據(jù)庫的概念出現(xiàn)在20世紀(jì)90年代,目前已經(jīng)有較為成熟的內(nèi)存數(shù)據(jù)庫產(chǎn)品產(chǎn)生,如oracle的TimesTen。但是商業(yè)內(nèi)存數(shù)據(jù)庫的價(jià)格昂貴,而且內(nèi)存數(shù)據(jù)庫技術(shù)仍在發(fā)展階段。因此,進(jìn)行內(nèi)存數(shù)據(jù)庫的研究和探索還是很有意義的。

[1]Dagum L,Menon R.IEEE COMPUTATIONAL SCIENCE & ENGINEERING.CA 94043 USA: IEEE COMPUTER SOC,1998.

[2]S.Rao Kosaraju.LIMITATIONS OF DIJKSTRA’S SEMAPHORE PRIMITIVES AND PETRI NETS[J].ACM SIGOPS Operating Systems Review,1973,7(4):122-126.

[3]William Gropp,Ewing Lusk,Anthony Skjellum.Using MPI:portable parallel programming with the message passing interface[M].The MIT Press,1999:3-11.

[4]Jeffery Richter. Windows 核心編程[M].北京:機(jī)械工 業(yè)出版社,2008:416-459.

TP392

A

1674-6708(2010)28-0213-01

猜你喜歡
信號(hào)量共享內(nèi)存硬盤
基于STM32的mbedOS信號(hào)量調(diào)度機(jī)制剖析
HiFi級4K硬盤播放機(jī) 億格瑞A15
Egreat(億格瑞)A10二代 4K硬盤播放機(jī)
通過QT實(shí)現(xiàn)進(jìn)程間的通信
Nucleus PLUS操作系統(tǒng)信號(hào)量機(jī)制的研究與測試
基于PCI總線的多處理器協(xié)同機(jī)制研究
我區(qū)電視臺(tái)對硬盤播出系統(tǒng)的應(yīng)用
一種高效RTAI 共享內(nèi)存管理層的研究與實(shí)現(xiàn)*
μC/OS- -III對信號(hào)量的改進(jìn)
Linux操作系統(tǒng)信號(hào)量機(jī)制的實(shí)時(shí)化改造
嘉兴市| 东乡| 石棉县| 宜君县| 綦江县| 延吉市| 平顺县| 鹤峰县| 搜索| 高青县| 平昌县| 新闻| 东乌| 葫芦岛市| 西峡县| 织金县| 博客| 天柱县| 六枝特区| 丹寨县| 永仁县| 广南县| 延川县| 云南省| 江口县| 新蔡县| 扶余县| 马尔康县| 普陀区| 申扎县| 金门县| 阿合奇县| 彭泽县| 定边县| 鸡泽县| 马鞍山市| 南澳县| 平乐县| 青神县| 来凤县| 邵阳市|