亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        內(nèi)存檢測(cè)技術(shù)研究與應(yīng)用

        2009-12-31 00:00:00李國(guó)杰鄧迎君
        電氣世界 2009年9期

        【摘要】針對(duì)變電站系統(tǒng)的軟件穩(wěn)定性和安全性,引入了內(nèi)存檢測(cè)技術(shù)的概念,介紹了內(nèi)存泄漏的發(fā)生原因和發(fā)生方式。然后詳細(xì)提出了幾種內(nèi)存檢測(cè)測(cè)試方法和測(cè)試要求。最后介紹了一種測(cè)試技術(shù)設(shè)計(jì)方案,并在實(shí)際工程中得到了應(yīng)用,保證了變電站系統(tǒng)軟件運(yùn)行的穩(wěn)定性和安全性。

        【關(guān)鍵詞】變電站自動(dòng)化 內(nèi)存泄漏 內(nèi)存檢測(cè) 性能監(jiān)視器

        0 引言

        變電站自動(dòng)化系統(tǒng)是將變電站的二次設(shè)備(包括測(cè)量?jī)x表、信號(hào)系統(tǒng)、繼電保護(hù)、自動(dòng)裝置及遠(yuǎn)動(dòng)裝置等)經(jīng)過功能的組合和優(yōu)化設(shè)計(jì),利用先進(jìn)的計(jì)算機(jī)技術(shù)、現(xiàn)代電子技術(shù)、通訊技術(shù)和信號(hào)處理技術(shù),實(shí)現(xiàn)對(duì)全變電站的主要設(shè)備和輸、配電線路的自動(dòng)監(jiān)視、測(cè)量、自動(dòng)控制和微機(jī)保護(hù)以及與調(diào)度通信等綜合性的自動(dòng)化功能,在電力系統(tǒng)控制中占有非常重要的地位。因此,對(duì)變電站智能設(shè)備(微機(jī)保護(hù)、測(cè)控等)系統(tǒng)的可靠性要求越來(lái)越高。

        隨著自動(dòng)化系統(tǒng)的推廣,尤其是數(shù)字化變電站的開展,各個(gè)廠家(如許繼電氣、國(guó)電南瑞、南瑞繼保、上海ABB等)裝置系統(tǒng)互連機(jī)會(huì),變得越來(lái)越多,傳統(tǒng)意義上系統(tǒng)主站和子站之間存在的通信不兼容、操作復(fù)雜、現(xiàn)場(chǎng)互聯(lián)爭(zhēng)議多的矛盾越來(lái)越少。系統(tǒng)本身軟件的安全性越來(lái)越受到重視。軟件運(yùn)行的可靠性、穩(wěn)定性,經(jīng)實(shí)踐證明很大程度上決定于軟件的內(nèi)存等系統(tǒng)資源使用情況,以及軟件運(yùn)行過程中CPU負(fù)荷率占有情況。軟件內(nèi)存泄漏、占用內(nèi)存過高或CPU負(fù)荷率較高等都會(huì)引起系統(tǒng)運(yùn)行不響應(yīng)用戶操作、軟件自動(dòng)退出,或系統(tǒng)死機(jī)等嚴(yán)重問題。在測(cè)試變電站自動(dòng)化系統(tǒng)操作站、工程師站、遠(yuǎn)動(dòng)站、VQC軟件,以及調(diào)度自動(dòng)化系統(tǒng),配網(wǎng)自動(dòng)化系統(tǒng)中都需要對(duì)被測(cè)軟件運(yùn)行過程中的內(nèi)存及CPU負(fù)荷率進(jìn)行監(jiān)視,以測(cè)試是否存在內(nèi)存泄漏、CPU負(fù)荷率高等影響系統(tǒng)運(yùn)行可靠性的問題。

        軟件的應(yīng)用越來(lái)越廣泛,規(guī)模和復(fù)雜度不斷提高,軟件中的安全缺陷與漏洞也在不斷增多,軟件安全性問題日益突出。內(nèi)存檢測(cè)技術(shù)是軟件安全性測(cè)試的重要方法,是保證軟件安全性、降低軟件安全風(fēng)險(xiǎn)的重要手段。

        本文首先介紹了內(nèi)存檢測(cè)技術(shù)的相關(guān)概念,然后對(duì)內(nèi)存泄漏問題產(chǎn)生原因和發(fā)生方式進(jìn)行了詳細(xì)剖析,最后以某變電站自動(dòng)化監(jiān)控軟件為例,給出了內(nèi)存檢測(cè)技術(shù)在電力系統(tǒng)軟件中的具體應(yīng)用。

        1 內(nèi)存檢測(cè)技術(shù)介紹

        1.1 內(nèi)存的分配方式

        對(duì)于不同的編程語(yǔ)言,內(nèi)存的分配方式也不盡相同。以C語(yǔ)言和C++語(yǔ)言為例。

        在C語(yǔ)言中,內(nèi)存分配有四個(gè)存儲(chǔ)區(qū):

        (1)棧。用于存儲(chǔ)函數(shù)體中定義的局部變量,其內(nèi)存資源是有編譯器自動(dòng)分配和釋放。

        (2)堆。采用maUoc、calloc、reaUoc等分配的內(nèi)存資源就是在堆上,這部分內(nèi)存資源使用更加靈活,一般是由程序員根據(jù)需要分配,使用完畢后編寫相應(yīng)代碼釋放,若程序員不釋放,則在程序結(jié)束時(shí)有可能由操作系統(tǒng)回收。

        (3)全局存儲(chǔ)區(qū)(靜態(tài)存儲(chǔ)區(qū))。用于存放全局變量和靜態(tài)變量,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域,這些內(nèi)存資源需要等到程序結(jié)束時(shí)釋放。

        (4)常量存儲(chǔ)區(qū)。函數(shù)中使用到的一些常量都存放在常量區(qū),程序結(jié)束后自動(dòng)釋放。

        在C++語(yǔ)言中,內(nèi)存分配則有5個(gè)存儲(chǔ)區(qū):

        (1)棧。用于存儲(chǔ)那些由編譯器在需要的時(shí)候分配,在使用完畢后自動(dòng)清除的變量。通常是指局部變量、函數(shù)參數(shù)等。

        (2)堆。用于存放那些由new分配的內(nèi)存塊,這部分內(nèi)存資源編譯器不會(huì)去管理,由應(yīng)用程序去控制。一般一個(gè)new就要對(duì)應(yīng)一個(gè)delete,也就是說一個(gè)分配對(duì)應(yīng)一個(gè)釋放,都是由程序員編寫代碼控制。如果程序員只分配沒有釋放,那么在程序結(jié)束后,操作系統(tǒng)才會(huì)自動(dòng)回收。

        (3)自由存儲(chǔ)區(qū)。用于存放由malloc等分配的內(nèi)存塊,它和堆十分相似,不同點(diǎn)在于它是用free來(lái)釋放內(nèi)存資源。

        (4)全局存儲(chǔ)區(qū)(靜態(tài)存儲(chǔ)區(qū))。用于存放全局變量和靜態(tài)變量,和C語(yǔ)言的區(qū)別在于,全局變量和靜態(tài)變量不分初始化和未初始化,它們共同占用同一塊內(nèi)存區(qū)。

        (5)常量存儲(chǔ)區(qū)。用于存放常量,和C語(yǔ)言中一致。

        通過比較不同程序設(shè)計(jì)語(yǔ)言的內(nèi)存分配方式,我們發(fā)現(xiàn)程序中內(nèi)存的使用是一個(gè)相當(dāng)復(fù)雜的過程,不同的變量有不同的存儲(chǔ)區(qū)域,不同的變量有不同的分配方式和釋放方式。那么,內(nèi)存泄漏是如何發(fā)生的呢?

        1.2 內(nèi)存泄漏的定義

        (1)一般來(lái)說的內(nèi)存泄漏是指堆內(nèi)存的泄漏。如1.1中介紹的,在C中,就是指堆存儲(chǔ)區(qū)的泄漏。在C++中,就是指堆和自由存儲(chǔ)區(qū)的泄漏。正是由于這些存儲(chǔ)區(qū)內(nèi)存資源的使用相對(duì)靈活,由程序員自主控制,在程序的運(yùn)行過程中不受操作系統(tǒng)管理,才有了內(nèi)存泄漏發(fā)生的可能。應(yīng)用程序一般使用malloc、realloc、new等函數(shù)從堆中分配一塊內(nèi)存,使用完后,程序必須調(diào)用相應(yīng)的free或delete釋放該內(nèi)存塊,否則,這塊內(nèi)存就不能被回收重用,這塊內(nèi)存就是內(nèi)存泄漏了。

        (2)廣義來(lái)說,內(nèi)存泄漏不僅僅包含堆內(nèi)存的泄漏,還包括系統(tǒng)資源的泄漏(resource Leak)。從根本上來(lái)說,由操作系統(tǒng)分配的對(duì)象也消耗內(nèi)存,這些對(duì)象占用的內(nèi)存發(fā)生泄漏也屬于內(nèi)存泄漏的范疇。特別是對(duì)于消耗核心態(tài)內(nèi)存的對(duì)象,更會(huì)導(dǎo)致整個(gè)操作系統(tǒng)的不穩(wěn)定,這相比其他類型的內(nèi)存泄漏問題更為嚴(yán)重。

        1.3 內(nèi)存泄漏的發(fā)生方式

        內(nèi)存泄漏有多種發(fā)生方式,不同方式的內(nèi)存泄漏的危害各有不同。

        (1)一次性內(nèi)存泄漏。存在內(nèi)存泄漏的代碼在程序運(yùn)行的整個(gè)過程只會(huì)被執(zhí)行一次,或者由于算法上的缺陷,導(dǎo)致總會(huì)存在一塊且僅有一塊內(nèi)存發(fā)生泄漏。這種一次性內(nèi)存泄漏不會(huì)造成內(nèi)存泄漏的堆積,如果不是核心態(tài)內(nèi)存,基本上對(duì)程序的穩(wěn)定性和安全性不會(huì)產(chǎn)生影響。

        (2)偶發(fā)性內(nèi)存泄漏。存在內(nèi)存泄漏的代碼只有在某些特定環(huán)境或操作過程下才會(huì)發(fā)生。偶發(fā)性內(nèi)存泄漏一般情況下造成的內(nèi)存泄漏的堆積相對(duì)較少,但在某些特定情況下也有可能造成大量的內(nèi)存泄漏堆積,對(duì)程序的穩(wěn)定性和安全性有較大的潛在危害。

        (3)常發(fā)性內(nèi)存泄漏。存在內(nèi)存泄漏的代碼會(huì)被多次執(zhí)行到,每次執(zhí)行的時(shí)候都會(huì)導(dǎo)致一塊內(nèi)存泄漏。常發(fā)性內(nèi)存泄漏會(huì)造成大量的內(nèi)存泄漏堆積,這會(huì)大量浪費(fèi)內(nèi)存資源甚至造成內(nèi)存枯竭,對(duì)程序的穩(wěn)定性和安全性有著極大的危害。

        (4)隱式內(nèi)存泄漏。程序在運(yùn)行過程中不停地分配內(nèi)存,直到結(jié)束的時(shí)候才釋放。理論上這里沒有發(fā)生內(nèi)存泄漏,因?yàn)槌绦蜃罱K釋放了所有申請(qǐng)的內(nèi)存。但對(duì)于一個(gè)長(zhǎng)期運(yùn)行的程序,不及時(shí)釋放內(nèi)存可能導(dǎo)致最終耗盡系統(tǒng)的所有內(nèi)存,危害是可想而知的。

        1.4 內(nèi)存泄漏測(cè)試技術(shù)

        由以上內(nèi)容可知,內(nèi)存泄漏確實(shí)是一個(gè)頑固而致命的問題。特別是對(duì)于可靠性、穩(wěn)定性和安全性要求非常高的電力系統(tǒng)軟件,更是不能忽視任何一個(gè)內(nèi)存問題的存在,一旦疏忽,勢(shì)必造成非常嚴(yán)重的后果“’。所以,在電力系統(tǒng)軟件開發(fā)過程中,必須引進(jìn)成熟可靠的內(nèi)存泄漏測(cè)試技術(shù)。

        內(nèi)存泄漏測(cè)試技術(shù),就是在電力系統(tǒng)軟件開發(fā)過程中,能有效地發(fā)現(xiàn)和定位內(nèi)存泄漏的測(cè)試技術(shù)。

        目前,內(nèi)存泄漏的測(cè)試方法主要有以下三種:

        (1)利用VC內(nèi)建檢測(cè)功能檢測(cè)內(nèi)存泄漏

        具有動(dòng)態(tài)分配和釋放內(nèi)存的能力是C/C++程序設(shè)計(jì)語(yǔ)言的重要特色之一,Visual C++debugger和CRT庫(kù)提供了一系列有效的檢測(cè)和鑒定內(nèi)存泄漏的工具。

        (2)通過專門的測(cè)試工具檢測(cè)內(nèi)存泄漏

        對(duì)于開發(fā)一個(gè)大型的程序,利用VC內(nèi)建檢測(cè)功能是不夠的,還需要借助專業(yè)的內(nèi)存泄漏檢測(cè)工具進(jìn)行更全面的內(nèi)存泄漏檢測(cè)。采用專業(yè)的內(nèi)存測(cè)試工具,一般需要在測(cè)試工具環(huán)境下進(jìn)行程序的編譯、調(diào)試和運(yùn)行進(jìn)行動(dòng)態(tài)測(cè)試,這些溯試工具會(huì)自動(dòng)給出內(nèi)存泄漏的測(cè)試結(jié)果,甚至可以定位產(chǎn)生內(nèi)存泄漏的代碼位置。比如采用目標(biāo)代碼插入(Code Injection)技術(shù)的Compuware公司的BoundsChecker和Rational公司的Purify都是非常優(yōu)秀的內(nèi)存測(cè)試工具。

        (3)利用性能監(jiān)視器(Performance Monitor)監(jiān)視內(nèi)存使用數(shù)據(jù)

        以上兩種測(cè)試方法對(duì)于顯式內(nèi)存泄漏來(lái)說是很有效的,但是對(duì)于隱式內(nèi)存泄漏來(lái)說就顯得有些無(wú)能為力了。使用操作系統(tǒng)的性能監(jiān)視器(Performance Monitor)可以實(shí)時(shí)監(jiān)視內(nèi)存的使用情況,通過查看內(nèi)存的使用數(shù)據(jù)來(lái)判斷是否存在內(nèi)存泄漏,這種方法只能證明內(nèi)存泄漏的存在,卻不能定位內(nèi)存泄漏的位置,一旦發(fā)現(xiàn)有內(nèi)存泄漏,需要借助其他方法進(jìn)一步進(jìn)行分析定位。

        綜合以上三種內(nèi)存檢測(cè)方法,我們發(fā)現(xiàn)每種方法都有其優(yōu)缺點(diǎn),對(duì)于內(nèi)存泄漏這個(gè)大而復(fù)雜的問題,往往需要多種方法相結(jié)合,才能達(dá)到更好的效果和效率。

        2 一種基于電力系統(tǒng)監(jiān)控軟件的內(nèi)存檢測(cè)模型

        下面給出一種基于電力系統(tǒng)監(jiān)控軟件的內(nèi)存檢測(cè)模型,其主要思想是利用性能監(jiān)視器(Performance Monitor)在一段時(shí)間內(nèi)實(shí)時(shí)監(jiān)視該軟件各進(jìn)程的運(yùn)行數(shù)據(jù),實(shí)時(shí)記錄各進(jìn)程的CPU負(fù)荷率信息和內(nèi)存使用數(shù)據(jù)。

        首先,我們需要配置準(zhǔn)備監(jiān)視的進(jìn)程個(gè)數(shù)以及每個(gè)進(jìn)程的窗口標(biāo)題或進(jìn)程ID,還需要配置各進(jìn)程的告警門檻和記錄時(shí)間間隔。

        配置完必要信息,就可以打開日志文件和定時(shí)器開始拷機(jī)測(cè)試了。

        在拷機(jī)過程中,實(shí)時(shí)監(jiān)視并按照配置的時(shí)間間隔記錄每個(gè)進(jìn)程的CPU負(fù)荷和內(nèi)存數(shù)據(jù)到日志文件。如果CPU使用率超過告警門檻則輸出告警信息并記錄到日志文件。如果內(nèi)存增長(zhǎng)定值超過告警門檻則輸出告警信息并記錄到日志文件。

        在設(shè)定時(shí)間內(nèi)依次記錄每個(gè)進(jìn)程的數(shù)據(jù),最后關(guān)閉定時(shí)器,關(guān)閉日志文件,拷機(jī)檢測(cè)結(jié)束。

        3 該內(nèi)存檢測(cè)方法的實(shí)際應(yīng)用

        下面是一組上述內(nèi)存檢測(cè)模型在某變電站監(jiān)控軟件中的應(yīng)用。

        隨著系統(tǒng)運(yùn)行時(shí)間逐漸增加,系統(tǒng)所占用的內(nèi)存也逐漸增大。表明軟件系統(tǒng)存在內(nèi)存泄露,長(zhǎng)時(shí)間運(yùn)行可能會(huì)耗盡內(nèi)存,導(dǎo)致系統(tǒng)出現(xiàn)死機(jī)。經(jīng)過對(duì)軟件進(jìn)行優(yōu)化,解決了內(nèi)存泄露的問題,目前系統(tǒng)運(yùn)行穩(wěn)定。

        4 結(jié)束語(yǔ)

        隨著變電站系統(tǒng)的自動(dòng)化程度越來(lái)越高,特別是大容量、大系統(tǒng)的變電站系統(tǒng)的投入運(yùn)行,對(duì)監(jiān)控系統(tǒng)的穩(wěn)定性和安全性的要求也會(huì)愈來(lái)愈高。變電站系統(tǒng)是需要長(zhǎng)期運(yùn)行的系統(tǒng),如果存在內(nèi)存泄露,那后果是不言而喻的。內(nèi)存檢測(cè)作為軟件穩(wěn)定性和安全性要求的重要方面,今后也會(huì)越來(lái)越引起重視,得到廣泛的應(yīng)用。

        国产情侣真实露脸在线| 久久精品国产亚洲av热明星| 女同性恋看女女av吗| 亚洲大尺度无码无码专区| 久久99精品国产麻豆宅宅| 国产精品中文久久久久久久| 中文字幕本久久精品一区| 99久热在线精品视频观看| 日本免费人成视频播放| 91精品国产91久久久无码色戒 | 99久久精品人妻一区| 国产熟妇疯狂4p交在线播放| 久久综合精品国产一区二区三区无码| 日韩av在线毛片| 亚洲小少妇一区二区三区| 十八禁视频在线观看免费无码无遮挡骂过| av一区二区三区人妻少妇| 久久99国产亚洲高清| 国产影片免费一级内射| 东京热人妻系列无码专区| 免费做爰猛烈吃奶摸视频在线观看 | 日本a级片一区二区三区| 国产精品无码久久综合| 亚洲精品无码国模| 亚欧免费无码AⅤ在线观看| 日韩av天堂一区二区三区在线| 337p人体粉嫩胞高清视频| 99re6热在线精品视频播放6| 成人午夜视频在线观看高清| 日韩在线精品视频一区| 熟女少妇在线视频播放| 欧美视频第一页| 国产av黄色一区二区| av无码国产精品色午夜| a级黑人大硬长爽猛出猛进| 中文字幕在线观看乱码一区| 丝袜美腿视频一区二区| 男人激烈吮乳吃奶视频免费| 亚洲欧美日韩国产综合久| 精品国产亚洲av高清日韩专区| 日韩精品成人无码专区免费|