国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種高效的內(nèi)存訪問方法

      文檔序號:6576528閱讀:185來源:國知局
      專利名稱:一種高效的內(nèi)存訪問方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,具體地說,涉及一種高效的內(nèi)存訪問方法。
      背景技術(shù)
      對應(yīng)用程序來說,進程就像一個大容器。在應(yīng)用程序被運行后,就相當于
      將應(yīng)用程序裝進容器里了,你可以往容器里加其他東西(如:應(yīng)用程序在運行時 所需的變量數(shù)據(jù)、需要引用的DLL文件等),當應(yīng)用程序被運行兩次時,容器 里的東西并不會被倒掉,系統(tǒng)會找一個新的進程容器來容納它。
      進程是由進程控制塊、程序段、數(shù)據(jù)段三部分組成。 一個進程可以包含若 干線程(ThreSld),線程可以幫助應(yīng)用程序同時做幾件事(比如一個線程向磁盤 寫入文件,另一個則接收用戶的按鍵操作并及時做出反應(yīng),互相不干擾),在 程序被運行后中,系統(tǒng)首先要做的就是為該程序進程建立一個默認線程,然后 程序可以根據(jù)需要自行添加或刪除相關(guān)的線程。是可并發(fā)執(zhí)行的程序。在一個 數(shù)據(jù)集合上的運行過程,是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位,也是稱 活動、路徑或任務(wù),它有兩方面性質(zhì)活動性、并發(fā)性。進程可以劃分為運行、 阻塞、就緒三種狀態(tài),并隨一定條件而相互轉(zhuǎn)化就緒-運行,運行-阻塞, 阻塞--就緒。
      進程是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ);是一個正在執(zhí)行的程序;計算機中正在運行 的程序?qū)嵗?;可以分配給處理器并由處理器執(zhí)行的一個實體;由單一順序的執(zhí) 行顯示, 一個當前狀態(tài)和一組相關(guān)的系統(tǒng)資源所描述的活動單元。
      進程為應(yīng)用程序的運行實例,是應(yīng)用程序的一次動態(tài)執(zhí)行。我們可以簡單 地理解為它是操作系統(tǒng)當前運行的執(zhí)行程序。在系統(tǒng)當前運行的執(zhí)行程序里 包括系統(tǒng)管理計算機個體和完成各種操作所必需的程序;用戶開啟、執(zhí)行的 額外程序,當然也包括用戶不知道,而自動運行的非法程序(它們就有可能是 病毒程序)。
      進程是程序在計算機上的一次執(zhí)行活動。當你運行一個程序,你就啟動 了一個進程。顯然,程序是死的(靜態(tài)的),進程是活的(動態(tài)的)。進程可以分為系統(tǒng)進程和用戶進程。凡是用于完成操作系統(tǒng)的各種功能的進程就是系統(tǒng)進
      程,它們就是處于運行狀態(tài)下的操作系統(tǒng)本身;用戶進程就是所有由你啟動的 進程。進程是操作系統(tǒng)進行資源分配的單位。
      線程是進程中的一個實體,是被系統(tǒng)獨立調(diào)度和分派的基本單位,線程自 己不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個 進程的其它線程共享進程所擁有的全部資源。一個線程可以創(chuàng)建和撤消另一個 線程,同一進程中的多個線程之間可以并發(fā)執(zhí)行。由于線程之間的相互制約, 致使線程在運行中呈現(xiàn)出間斷性。線程也有就緒、阻塞和運行三種基本狀態(tài)。
      線程是程序中一個單一的順序控制流程。在單個程序中同時運行多個線程 完成不同的工作,稱為多線程。
      線程和進程的區(qū)別在于,子進程和父進程有不同的代碼和數(shù)據(jù)空間,而多個 線程則共享數(shù)據(jù)空間,每個線程有自己的執(zhí)行堆棧和程序計數(shù)器為其執(zhí)行上下 文。多線程主要是為了節(jié)約CPU時間,發(fā)揮利用,根據(jù)具體情況而定。線程 的運行中需要使用計算機的內(nèi)存資源和CPU。
      目前嵌入式操作系統(tǒng)的一個特點內(nèi)核支持多線程搶占。在兩個線程訪問 同一個內(nèi)存池時通俗的方法是加入互斥鎖來防止數(shù)據(jù)訪問出錯,如果兩個線程 對內(nèi)存池的訪問頻率極高,那么因為互斥帶來的系統(tǒng)消耗是很高的。測試表明 會將低5倍性能,經(jīng)過一段時間的考究和鉆研,目前可以把互斥鎖去掉,節(jié)約 了額外的系統(tǒng)消耗。這將在提高了手機流媒體系統(tǒng)的性能。
      另外,內(nèi)存拷貝通常既頻繁又量大,如果源內(nèi)存塊和目標內(nèi)存塊的選擇很 隨意,將會造成拷貝性能大大降低。
      鑒于此,實有必要提出一種改進的方法以克服現(xiàn)有技術(shù)的缺陷。

      發(fā)明內(nèi)容
      本發(fā)明提供一種高效的內(nèi)存池訪問方法,該方法具體步驟如下
      51. 建立內(nèi)存池,所述內(nèi)存池由若干內(nèi)存塊組成,啟動一個具多線程的應(yīng) 用程序,首先保證占用內(nèi)存的兩線程讀寫方向相同;
      52. 當?shù)谝痪€程去訪問第二線程的當前塊內(nèi)寫指針時, 一定要確保第一線 程對當前塊內(nèi)寫指針的改變在匯編層上是最后一條指令,也就是此指令執(zhí)行 后,后面的指令將不會在有任何與內(nèi)存塊相關(guān)的寫操作了,即要保證第一線程 寫完數(shù)據(jù)后,再讓第二線程來讀取該數(shù)據(jù);
      5S3.當?shù)谝痪€程訪問第二線程的讀指針時,第二線程一定要確保第二線程 對當前塊內(nèi)讀指針的改變在匯編層上是最后一條指令,也就是此指令執(zhí)行后, 后面的指令將不會在有任何與內(nèi)存塊相關(guān)的讀操作了。
      本發(fā)明的有益效果在于,測試表明會將低5倍性能,經(jīng)過一段時間的考究 和鉆研,目前可以把互斥鎖去掉,節(jié)約了額外的系統(tǒng)消耗。這將在提高了手機 流媒體系統(tǒng)的性能。嵌入式系統(tǒng)最重要的就是資源和性能的提高,同時也是判 斷一個高質(zhì)量產(chǎn)品的關(guān)鍵因素,以上兩點體現(xiàn)了針對性能的提高和CPU資源 的節(jié)省。


      圖1為本發(fā)明方法流程示意圖2為本發(fā)明方法實施例中第一線程讀指針訪問第二線程寫指針的示意
      圖3為本發(fā)明方法實施例中第一線程寫指針訪問第二線程讀指針的示意圖。
      具體實施例方式
      下面結(jié)合附圖來說明本發(fā)明具體實施。
      如圖1所示為本發(fā)明方法流程框圖,具體步驟如下
      Sl:建立內(nèi)存池,所述內(nèi)存池由若干內(nèi)存塊組成,啟動一個具多線程的應(yīng) 用程序,首先保證占用內(nèi)存的兩線程讀寫方向相同;
      S2:當?shù)谝痪€程讀指針去訪問第二線程的當前塊內(nèi)寫指針時, 一定要確保 第一線程對當前塊內(nèi)寫指針的改變在匯編層上是最后一條指令,也就是此指令 執(zhí)行后,后面的指令將不會在有任何與內(nèi)存塊相關(guān)的寫操作了,即要保證第一 線程寫完數(shù)據(jù)后,再讓第二線程來讀取該數(shù)據(jù);
      S3:當?shù)谝痪€程訪問第二線程的讀指針時,第二線程一定要確保第二線程 對當前塊內(nèi)讀指針的改變在匯編層上是最后一條指令,也就是此指令執(zhí)行后, 后面的指令將不會在有任何與內(nèi)存塊相關(guān)的讀操作了。
      請參照圖2,具體地說明步驟S2中第一線程的讀指針訪問第二線程的寫 指針,也即當?shù)诙€程完成寫操作后,第一線程在于相同的共享內(nèi)存進行讀操 作的過程,首先建立由內(nèi)存塊IO、 11、 12、 13、 14以及15以鏈表的形式組成的內(nèi)存池,每一內(nèi)存塊大小為64kb,在這里以鏈表的形式組成內(nèi)存池是公知 的,但并不對本發(fā)明造成限制,圖中w表示第二線程的寫指針,r表示第一線 程的讀指針,在這里相當于第二線程先寫入數(shù)據(jù)后,第一線程再進行讀數(shù)據(jù), 第二線程每次寫數(shù)據(jù)以及第一線程每次讀數(shù)據(jù)都是以一個數(shù)據(jù)包的大小為周
      期,例如,首先第二線程寫入一個大小為10kb字節(jié)的數(shù)據(jù)包,則第二線程不 寫入數(shù)據(jù),等待第一線程將這個大小為10kb字節(jié)的數(shù)據(jù)包讀完再進行寫入數(shù) 據(jù),另外圖中20表示在鏈表中w指針以及r指針的移動方向,為了區(qū)別于現(xiàn) 有技術(shù)中通過加入互斥鎖來給定某一線程具有對內(nèi)存的訪問權(quán)限,本方法在第 二線程先寫入一個完整的數(shù)據(jù)包后,寫指針的改變在匯編層上是最后一條指 令,例如,開始時寫指針w與讀指重合,首先第二線程在內(nèi)存塊10寫入一個 數(shù)據(jù)包后,內(nèi)存塊使用的空間實際移到了 w'所指示的位置,但還需通過一條 匯編層上的指令將指針w移動至w,,也即將w,的指針值賦于w,由于指針w 改變至w,是一個匯編層上的指令即為原子操作,步驟S2可以保證寫操作不會 被中斷,此后第一線程開始讀數(shù)據(jù),第一線程的讀指針r從開始位置移至w' 位置,同理,當?shù)谝痪€程的讀完一個數(shù)據(jù)包,即r從開始位置移至w,位置, 第一線程的讀取動停止,第二線程開始寫入另一個數(shù)據(jù)包,寫完后寫指針的改 變通過一條匯編指令從w,移至w",即將w"指針值賦給第二線程的讀指針w, 接著第一線程開始讀第二個數(shù)據(jù)包,以此類推。在這里寫和讀都是相同大小的 數(shù)據(jù)包。
      請參照圖3,具體地說明步驟S3中第一線程的寫指針訪問第二線程的讀 指針,此過程恰好與步驟S2相反,也即當?shù)诙€程完成讀操作后,第一線程 在于相同的共享內(nèi)存進行寫操作的過程,與步驟S2不同的是,第二線程讀完 一個數(shù)據(jù)包后即釋放該數(shù)據(jù)包占有的內(nèi)存空間,例如圖3中第二線程的讀指針 w從開始位置w(r)即第一線程的w指針與第二線程的r指針重合位置移動至r' 位置,代表第二線程讀完一個數(shù)據(jù)包,而r改變?yōu)閞,也是通過一條匯編指令, 因此讀操作不會被中斷,當釋放一個數(shù)據(jù)包的空間后,第一線程在被釋放的內(nèi) 存空間進行寫操作,由于第一線程寫操作寫入的數(shù)據(jù)大小為未知的,寫入的數(shù) 據(jù)有可能比第二線程釋放的空間大,也可能比釋放的空間小,這不同于步驟 S2中先寫后讀的過程,因此有必要作出改進,如果第一線程要寫入的數(shù)據(jù)比 第二線程釋放的空間大則造成無法寫入,因此本方案中可以設(shè)計在第一線程寫 入數(shù)據(jù)包時先判斷當前寫入的內(nèi)存塊是否是第二線程讀指針所在的內(nèi)存塊,如圖3中所示,第一線程將寫入數(shù)據(jù)包所在的塊以及第二線程讀指針所在的內(nèi)存 塊均為內(nèi)存塊IO,則此時首先在內(nèi)存塊10中已經(jīng)釋放的空間寫入數(shù)據(jù),再申 請一個新的內(nèi)存塊16插入于內(nèi)存塊10與11之間,在內(nèi)存塊10寫不下的數(shù)據(jù) 則繼續(xù)在新內(nèi)存塊16中寫入,對于第二線程讀操作則不受影響,其仍然按照 鏈表順序在讀完內(nèi)存塊10的數(shù)據(jù)后依次讀取內(nèi)存塊11、 12、 13、 14、 15中的 數(shù)據(jù),因此可以將確保第一線程的寫指針不同于第二線程的讀指針所在的內(nèi)存 塊。
      另外,也可以設(shè)計成第二線程至少讀完第一個內(nèi)存塊后,所述第二線程才 開始進行寫操作,例如在第二線程讀完內(nèi)存塊10的數(shù)據(jù)后,第一線程才開始 從內(nèi)存塊IO釋放的空間開始寫入數(shù)據(jù),這樣可以不通過申請新的內(nèi)存塊,也 可以保證第一線程寫入數(shù)據(jù)保證完成而不出錯。
      本發(fā)明把互斥鎖去掉,節(jié)約了額外的系統(tǒng)消耗。嵌入式系統(tǒng)最重要的就是 資源和性能的提高,同時也是判斷一個高質(zhì)量產(chǎn)品的關(guān)鍵因素,以上兩點體現(xiàn) 了針對性能的提高和CPU資源的節(jié)省。將本發(fā)明方法應(yīng)用這手機流媒體系統(tǒng), 將在提高了手機流媒體系統(tǒng)的性能。
      通常進行拷貝操作對CPU來說就是一個循環(huán)訪問內(nèi)存或緩存,保證好地 址邊界對齊可以發(fā)揮CPU數(shù)據(jù)訪問的最大潛力,從而提高塊拷貝性能,基于 32位(數(shù)據(jù)總線帶款32位)的CPU系統(tǒng)上, 一次RS1M訪問可以達到32位 (字大小),又因為訪問32位的數(shù)據(jù)要保證32位地址邊界對齊,才不會使訪 問到的數(shù)據(jù)因位置問題而要進行額外的寄存器邏輯操作。這樣可以進一步提高 拷貝操作的速度。
      以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā) 明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明 的保護范圍之內(nèi)。
      權(quán)利要求
      1、一種高效的內(nèi)存池訪問方法,其特征在于,該方法具體步驟如下S1建立內(nèi)存池,所述內(nèi)存池由若干內(nèi)存塊組成,啟動一個具多線程的應(yīng)用程序,首先保證占用內(nèi)存的兩線程讀寫方向相同;S2當?shù)谝痪€程去訪問第二線程的當前塊內(nèi)寫指針時,一定要確保第一線程對當前塊內(nèi)寫指針的改變在匯編層上是最后一條指令,也就是此指令執(zhí)行后,后面的指令將不會在有任何與內(nèi)存塊相關(guān)的寫操作了,即要保證第一線程寫完數(shù)據(jù)后,再讓第二線程來讀取該數(shù)據(jù);S3當?shù)谝痪€程訪問第二線程的讀指針時,第二線程一定要確保第二線程對當前塊內(nèi)讀指針的改變在匯編層上是最后一條指令,也就是此指令執(zhí)行后,后面的指令將不會在有任何與內(nèi)存塊相關(guān)的讀操作了。
      2、 如權(quán)利要求l所述的高效的內(nèi)存池訪問方法,其特征在于,所述保證兩 線程讀寫方向相同通過循環(huán)鏈表的建立可以定向。
      3、 如權(quán)利要求l所述的高效的內(nèi)存池訪問方法,其特征在于,所述步驟S2 與S3中匯編層上是最后一條指令即為原子操作,即在步驟S2可以保證寫操作 不會被中斷,以及可以保證在步驟S3中的讀操作不會被中斷。
      4、 如權(quán)利要求2所述的高效的內(nèi)存池訪問方法,其特征在于,所述步驟S3 中確保第一線程的寫指針不同于第二線程的讀指針所在的內(nèi)存塊。
      5、 如權(quán)利要求2所述的高效的內(nèi)存池訪問方法,其特征在于,所述步驟S3 中第線程至少讀完第一個內(nèi)存塊后,所述第二線程才開始進行寫操作。
      6、 如權(quán)利要求5所述的高效的內(nèi)存池訪問方法,其特征在于,步驟S3中 若判斷出第一線程的寫指針將寫入第二線程的讀指針所在的內(nèi)存塊時,則申請 一個新空閑內(nèi)存塊插入于第一線程的寫指針所在的內(nèi)存塊以及與該內(nèi)存塊相鄰 的下一內(nèi)存塊之間。
      7、 如權(quán)利要求l所述的高效的內(nèi)存池訪問方法,其特征在于,每一內(nèi)存塊 大小為64kb大小。
      8、 如權(quán)利要求l所述的高效的內(nèi)存池訪問方法,其特征在于,進行拷貝操 作對CPU來說就是一個循環(huán)訪問內(nèi)存或緩存,保證好地址邊界對齊可以發(fā)揮 CPU數(shù)據(jù)訪問的最大潛力,從而提高塊拷貝性能。
      9、 如權(quán)利要求8所述的高效的內(nèi)存池訪問方法,其特征在于,基于32位 的CPU系統(tǒng)上, 一次RS1M訪問可以達到32位字大小,又因為訪問32位的數(shù) 據(jù)要保證32位地址邊界對齊,才不會使訪問到的數(shù)據(jù)因位置問題而要進行額外 的寄存器邏輯操作。
      全文摘要
      本發(fā)明涉及一種高效的內(nèi)存池訪問方法,該方法具體步驟如下S1建立內(nèi)存池,所述內(nèi)存池由若干內(nèi)存塊組成,啟動一個具多線程的應(yīng)用程序,首先保證占用內(nèi)存的兩線程讀寫方向相同;S2當?shù)谝痪€程去訪問第二線程的當前塊內(nèi)寫指針時,一定要確保第一線程對當前塊內(nèi)寫指針的改變在匯編層上是最后一條指令,也就是此指令執(zhí)行后,后面的指令將不會在有任何與內(nèi)存塊相關(guān)的寫操作了,既要保證第一線程寫完數(shù)據(jù)后,再讓第二線程來讀取該數(shù)據(jù);S3當?shù)谝痪€程訪問第二線程的讀指針時,第二線程一定要確保第二線程對當前塊內(nèi)讀指針的改變在匯編層上是最后一條指令,也就是此指令執(zhí)行后,后面的指令將不會在有任何與內(nèi)存塊相關(guān)的讀操作了。
      文檔編號G06F9/50GK101630276SQ20091010944
      公開日2010年1月20日 申請日期2009年8月18日 優(yōu)先權(quán)日2009年8月18日
      發(fā)明者驍 劉 申請人:深圳市融創(chuàng)天下科技發(fā)展有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1