多進程中的內存的管理方法與流程
1.本發明涉及計算機技術領域,特別是多進程中共享內存的管理方法。
背景技術:
2.隨著計算機技術的發展,芯片設計水平的提高以及應用需求的提升,多核系統越來越廣泛的被應用到產品中。目前的多核異構系統一般包括大核和小核等多個處理器核心;而共享內存技術,是一種在多核處理器之間進行數據交互的通信方式之一,使多核處理器之間能夠協同完成某一特定的功能而設計,存取數據快,實時性強。
3.中國發明專利cn103559079a在不同分區之間,需要通過讀寫指針依次遍歷空閑內存塊才能達到不同處理器共享數據的目的,進程分配內存塊時所花費的時間過長;若采用多個進程(比如同一操作系統當中,需要數據交互的應用軟件運行環境對應的進程和底層驅動算法對應的進程)同時訪問同一內存,則仍會出現數據存取沖突或出現地址訪問越界風險。
技術實現要素:
4.本技術公開多進程中共享內存的管理方法,具體的技術方案如下:多進程中的內存的管理方法,管理方法包括:步驟s1、若第一處理器接收到第一內存申請請求,以調度至少兩個第一目標進程開始申請內存,則在目標存儲器內,按照地址空間連續分配的原則分配第一訪問內存段,再將第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起;然后確定第一目標進程完成內存申請操作。
5.進一步地,所述管理方法還包括:步驟s2、在所述第一處理器接收到第一內存釋放請求后,通過第一目標進程的標識信息來在所述目標存儲器中搜索對應綁定的第一訪問內存段,再解除第一目標進程的標識信息與對應綁定的第一訪問內存段的綁定關系,然后確定第一目標進程完成內存釋放操作;其中,該第一訪問內存段沒有被解除與對應綁定的第一目標進程的標識信息的綁定關系時,不被除了已綁定的第一目標進程之外的其它第一目標進程訪問;第二訪問內存段的地址值與第一訪問內存段的地址值不同;其中,執行步驟s1后,最新獲得的第一訪問內存段的首地址以及該第一訪問內存段的內存容量都被轉換到第一內存釋放請求當中。
6.進一步地,第一目標進程在目標存儲器內綁定到第一訪問內存段后,第一目標進程對第一訪問內存段訪問時,所述第一處理器對第一目標進程所綁定到的第一訪問內存段進行讀寫操作;第一內存申請請求包括第一目標進程的調度請求信息。
7.進一步地,在步驟s1中,所述將第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起的方法包括:在第一內存申請請求的控制下,將第一處理器所調度的第一目標進程的標識信息設置為該第一目標進程當前訪問的第一訪問內存段的索引值,以通過第一目標進程的標識信息定位到所需訪問的第一訪問內存段,并配置其中一個標識信息對應分配的第一訪問內存段不允許其它標識信息的第一目標進程訪問,形成該第一目標進
程的標識信息與當前訪問的第一訪問內存段的首地址之間的映射關系,則確定將第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起;其中,第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起,表示第一目標進程只訪問該對應分配的第一訪問內存段。
8.進一步地,步驟s1還包括,在將第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起之后,將對應綁定的第一訪問內存段的首地址反饋給中間層,為應用軟件程序提供第一目標進程的操作地址信息;其中,第一目標進程的標識信息是在第一處理器的調度作用下從中間層封裝的動態庫的接口中獲取,中間層是設置在第一處理器所運行的操作系統中。
9.進一步地,所述地址空間連續分配的原則包括:從目標存儲器的首地址開始,搜索位于一塊連續空閑內存空間的開始位置的地址,再將第一次搜索到的位于一塊連續空閑內存空間的開始位置的地址設置為入口地址;檢測入口地址所在的連續空閑內存空間是否存在滿足內存申請請求的分配空間;其中,內存申請請求包括預先設置的入口地址、以及該預先設置的入口地址所在的連續空閑內存空間中所需的分配空間的內存容量;當檢測到入口地址所在的連續空閑內存空間中存在滿足內存申請請求的分配空間時,將該分配空間設置為供一個進程訪問的空閑內存段,確定當前檢測到的入口地址是滿足內存申請請求的分配空間的入口地址,并修改下一連續空閑內存空間的開始位置的地址以便于在下一連續空閑內存空間中分配出供另一個進程訪問的空閑內存段;當入口地址所在的連續空閑內存空間中不存在滿足內存申請請求的分配空間時,將所述入口地址調整到下一連續空閑內存空間中的開始位置的地址,再判斷調整后的入口地址所在的連續空閑內存空間是否存在滿足內存申請請求的分配空間,直至搜索到滿足內存申請請求的分配空間;其中,下一連續空閑內存空間中的開始位置是預先記錄在調整前的入口地址所在的連續空閑內存空間中。
10.進一步地,每當按照所述地址空間連續分配的原則分配第一訪問內存段時,確定該第一訪問內存段是滿足第一內存申請請求的分配空間,第一訪問內存段的首地址是當前調整出來的入口地址,其中,第一訪問內存段在分配出來時是屬于連續空閑內存空間。
11.進一步地,在按照地址空間連續分配的原則分配第一訪問內存段之前,當滿足第一內存申請請求的入口地址處于第一預設首地址范圍內,且該處于第一預設首地址范圍內的入口地址所在的連續空閑內存空間中所需的分配空間的內存容量是處于第一預設目標容量范圍內時,確定第一目標進程訪問目標存儲器所需的參數合法。
12.進一步地,在步驟s2中,在通過第一目標進程的標識信息來在所述目標存儲器中搜索對應綁定的第一訪問內存段之前,當第一內存釋放請求當中包括的入口地址處于第一預設首地址范圍內,且該處于第一預設首地址范圍內的入口地址所在的連續空閑內存空間中所需的分配空間的內存容量是處于第一預設目標容量范圍內時,確定第一目標進程在目標存儲器中釋放內存所需的參數合法。
13.進一步地,第一處理器被配置為運行多進程的操作系統;其中,第一處理器用于運行至少一個第一目標進程;目標存儲器是sram存儲器。
14.本技術的技術效果在于:本技術支持多個進程共享同一個目標存儲器;并在訪問過程中,在同一處理器中使用封裝接口申請對應進程所需的空閑內存段和作出地址映射,以便于加快讀寫操作對應的內存段,避免逐個遍歷分配的所有內存段;提高系統對于多進
程場景的適應性。
15.本技術使各個第一目標進程訪問到對應綁定的第一訪問內存段,而且可以通過中間層封裝的接口調度多個第一目標進程綁定到對應分配到的第一訪問內存段;對于第一處理器所能調度的第一目標進程當中,將每個第一目標進程的標識信息設置為該第一目標進程當前訪問的第一訪問內存段的索引值,讓每個第一目標進程的標識信息與對應訪問的第一訪問內存段的首地址之間建立一一對應關系,以使中間層通過第一目標進程的標識信息定位到所需訪問的第一訪問內存段,實現在目標存儲器內按照第一目標進程所需的內存申請請求劃分為多個第一訪問內存段,并配置每個標識信息下定位出的第一訪問內存段之間不允許相互訪問,以防止一個進程所訪問的內存段中的數據被別的進程改變,也避開兩個進程在同一內存段內同時讀寫數據,解決了不同進程在同一處理器內的沖突問題,解決在多個進程無法同時使用共享內存的問題,減少多個第一目標進程在同一存儲器內讀寫數據出現錯誤或出現地址越界的問題。
附圖說明
16.圖1是本發明的一種實施例公開多進程中共享內存的管理方法當中的內存申請操作的流程示意圖。
17.圖2是本發明的一種實施例公開多進程中共享內存的管理方法當中的內存釋放操作的流程示意圖。
具體實施方式
18.下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
19.另外,本技術中“第一目標進程訪問第一訪問內存段”、“第一目標進程讀寫第一訪問內存段”、“第一處理器操作第一訪問內存段”、“第一處理器訪問第一訪問內存段”等讀寫訪問內存的術語描述在本文中常被可互換使用。同理地,“第二目標進程訪問第二訪問內存段”、“第二目標進程讀寫第二訪問內存段”、“第二處理器操作第二訪問內存段”、“第二處理器訪問第二訪問內存段”等讀寫訪問內存的術語描述在本文中常被可互換使用。本技術中術語“和/或”,僅僅是一種描述關聯對象的關聯關系,表示可以存在三種關系,例如,a和/或b,可以表示:單獨存在a,同時存在a和b,單獨存在b這三種情況。另外,本文中字符“/”,一般表示前后關聯對象是一種“或”的關系。
20.針對同一存儲器在多進程任務的軟件運行環境中的兼容性和在多核處理器結構中的適用性,本實施例公開一種多進程中的內存的管理方法,該管理方法的執行主體是屬于內存管理裝置;或者,該管理方法可以是第一處理器執行,以使得第一處理器在訪問目標存儲器的過程中,先后進行申請內存和釋放內存。在本實施例中,所述內存管理方法包括:步驟s1、若第一處理器接收到第一內存申請請求,以調度至少兩個第一目標進程開始申請內存,則在目標存儲器內,按照地址空間連續分配的原則分配第一訪問內存段,能夠為每個第一目標進程分配對應一個第一訪問內存段,再將第一目標進程的標識信息與對應分配的
第一訪問內存段綁定在一起;第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起,表示該第一目標進程只訪問該對應分配的第一訪問內存段。優選地,第一目標進程的標識信息與所需綁定的第一訪問內存段的首地址存在固定的數值轉換關系,當一個標識信息表示一個第一目標進程的身份標識符時,該第一目標進程所需綁定的第一訪問內存段的首地址是唯一的,則該第一目標進程所需訪問的第一訪問內存段是唯一的,避免不同的第一目標進程訪問同一第一訪問內存段,導致重復讀寫同一第一訪問內存段的數據。
21.其中,每個第一目標進程對應一個第一內存申請請求,即一個第一目標進程需要一條指令才能進行一次內存申請,通過這一形式的申請來分配到一個相對應的第一訪問內存段,則本實施例將每個第一目標進程的標識信息配置為該第一目標進程的身份標識符,以區別開其它的第一目標進程;因此,在同一操作系統當中,需要數據交互的應用軟件運行環境對應的進程和底層驅動算法對應的進程同時讀寫同一內存時互不干擾。因此,步驟s1能夠支持多進程操作目標存儲器,提高存儲器的利用率。
22.在目標存儲器內申請滿足第一內存申請請求的內存空間后,才能夠在目標存儲器內分配到對應的第一訪問內存段;雖然第一目標進程所需的內存申請請求包括所需申請的第一訪問內存段的首地址、以及所需申請的第一訪問內存段的內存容量,但不一定與目標存儲器中的實際存儲空間大小或數據存儲狀態相符合,所以需要進一步通過按照地址空間連續分配的原則去分配第一訪問內存段,才能獲得進行實際讀寫操作的第一訪問內存段;其中,第一處理器在訪問第一訪問內存段之前先在目標存儲器中申請內存,具體會根據第一內存申請請求或信息共享內存預先存儲的第一訪問參數當中符合應用軟件程序要求的指示信息(包括地址信息和申請的內存容量信息),在目標存儲器中按照地址空間連續分配的原則分配第一訪問內存段,既可以適應操作系統中加載的各個應用軟件程序的需求,也適應目標存儲器中的硬件存儲空間的實際大小。
23.在第一處理器的控制下,在目標存儲器內分配到對應的第一訪問內存段后,將第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起,形成每個第一目標進程在目標存儲器中的地址映射關系,記錄為一個標識信息對應一個第一目標進程,且一個標識信息映射到唯一一段內存段,以使每個第一目標進程在第一處理器的調度下,依據標識信息完成對應綁定的第一訪問內存段的訪問;此時通過內存映射的方式從所有分配出的第一訪問內存段當中篩選出滿足第一目標進程的第一訪問內存段,為每個第一目標進程各分配唯一一個第一訪問內存段,也確定第一目標進程完成內存申請操作。綜上,本技術支持多個進程共享同一個目標存儲器;并在訪問過程中,在同一處理器中使用封裝接口申請對應進程所需的空閑內存段和作出地址映射,以便于加快讀寫操作對應的內存段,避免逐個遍歷分配的所有內存段;提高系統對于多進程場景的適應性。
24.優選地,本實施例控制第一處理器將已綁定的第一訪問內存段所存在的首地址和內存容量都更新掉第一訪問參數當中同類型的參數和第一內存申請請求當中同類型的參數,再通過所述信息共享內存將更新后的第一訪問參數和更新后的第一內存申請請求傳輸給其余處理器,其余處理器包括同一類型的第一處理器或不同類型的處理器;為了第一處理器和第二處理器之間的內存分配信息的正常交互,還將第一目標進程完成內存申請操作的信息轉換為指令參數,刷新到信息共享內存,再由信息共享內存傳輸給第二處理器。
25.需要說明的是,進程是在計算機中運行的應用程序實體,其被分配給計算機設備
的處理器,并由處理器執行,并使用標識信息來進行身份識別,比如通過應用軟件程序給一個進程配置唯一一個標識符id。
26.在本實施例中,目標存儲器優選為靜態隨機存取存儲器(static random-access memory,sram),所謂的“靜態”,是指這種存儲器只要保持通電,里面儲存的數據就可以恒常保持;當存儲器的控制系統斷電或重啟時,保存在sram中的數據將丟失。sram可以配置為共享內存,供至少兩個處理器使用;在第一處理器和第二處理器之間,目標存儲器是各個處理器調度的進程間的通信媒介;比如,在本技術中,兩個不同進程a1、a2通過共享內存進行通信的意思是同一塊物理內存中緩存的指令參數分別被映射到進程a1、a2各自的進程虛擬地址空間,則進程a1可以即時看到進程a2對其占用的內存中數據的更新,反之亦然;其中,進程a1、a2可以分別來源于不同的處理器,也可以是來源于同一處理器;分別向進程a1和a2映射的同一塊物理內存是所述目標存儲器的信息共享內存。
27.第一處理器與第二處理器之間進行參數交互的共享內存,可以是一段固定的地址和固定的大小的內存塊。當一個處理器將指令參數寫入信息共享內存當中時,另一個處理器從該信息共享內存中讀取出寫入的指令參數,則確定一個處理器通過所述信息共享內存將進程對內存操作的指令信息傳輸給另一個處理器,其中,指令參數包括處理器的進程對信息共享內存所處的存儲器的操作信息,具體包括讀寫的首地址(起始地址)、申請的內存段的容量大小、申請或劃分出的內存段的索引(通過引導地址指針來指定到對應的內存段以訪問其中的數據)、內存段的索引與內存段的首地址之間的映射關系、各個地址位置的空閑指示信息。
28.第一處理器在目標存儲器的信息共享內存中輸入第二處理器需要讀取的數據指令,第二處理器在目標存儲器的信息共享內存中輸入第一處理器需要讀取的數據指令。在本實施例中,第一處理器是大核結構的處理器,第二處理器是小核結構的處理器,其中,大核結構的處理器擁有自己獨立的資源,包括外掛的ddr內存、sram存儲器等,大核結構可以是單核或者多核結構;小核結構的處理器也有自己的獨立資源,包含ram存儲器等,一般為單核結構;小核一般是通用mcu級別的處理核心,內存資源一般是有限的。或者,第一處理器被配置為運行多進程的操作系統,第二處理器被配置為運行單進程的操作系統或不運行操作系統,比如,第一處理器所執行的內存申請操作就是在linux系統下進行,第二處理器執行的內存申請操作適用于非linux系統或者無操作系統的軟件環境中。其中,第一處理器用于運行至少一個第一目標進程,第二處理器用于運行一個第二目標進程;第一處理器和第二處理器都配置為支持對所述信息共享內存進行讀寫操作。因此第一處理器和第二處理器都配置為通過所述目標存儲器進行數據交互或指令交互,提高操作系統的兼容性。
29.需要說明的是,第一目標進程在目標存儲器內綁定到第一訪問內存段后,第一目標進程對第一訪問內存段訪問時,所述第一處理器對第一目標進程所綁定到的第一訪問內存段進行讀寫操作;第一內存申請請求可以包括第一目標進程的調度請求信息、第一訪問內存段的首地址以及第一訪問內存段的內存容量,第一訪問內存段是第一目標進程需要訪問(來源于第一內存申請請求需要申請或需要分配)的進程。
30.本實施例對內存申請請求包括的具體內容不做限定,可選的,內存申請請求可以包括申請的內存的大小和所申請的內存的首地址。申請的內存可以為大小對齊的內存,也可以為大小不對齊的內存。處理器或進程在內存中讀寫數據時,都是按照基本單位進行操
作的。例如,在32位處理器或32位的操作系統中,每次可以讀取4字節(一個字節的大小)。優選地將內存段的起始地址設置為等于基本單位的倍數,申請的內存段可以是等于基本單位的倍數,且所述倍數為2的冪次方。例如,申請的內存的大小可以為4k字節、8k字節、16k字節、32k字節、64k字節、128k字節等,此時,申請的內存大小對齊。又例如,申請的內存的大小可以為6k字節、12k字節、48k字節等,此時,申請的內存大小不對齊。
31.優選地,第一處理器所申請的第一訪問內存段可以是:通過系統調用接口或中間層中封裝的動態庫對外的接口分配出來的內存塊,可以是共享內存塊,比如在linux系統下面,第一處理器通過mmap系統調用接口映射一塊4096字節的內存大塊;其中,每塊內存大塊與接口調用的標識信息相對應,以形成內存大塊的索引,以適應執行多進程任務的第一處理器的內存讀寫操作。
32.作為內存申請操作的一種實施例,所述步驟s1包括步驟s11至步驟s13,參閱圖1可知,具體如下:步驟s11、若第一處理器接收到第一內存申請請求,以調度至少兩個第一目標進程開始申請內存,則在目標存儲器內,按照地址空間連續分配的原則分配第一訪問內存段,供各個第一目標進程的運行使用。然后執行步驟s12。需要說明的是,第一處理器接收到第一內存申請請求的前提可以是至少兩個第一目標進程開始打開目標存儲器的驅動設備節點,調度這些第一目標進程先后訪問目標存儲器或同時訪問目標存儲器,包括訪問目標存儲器設置的共享內存。第一內存申請請求包括第一目標進程所需訪問的內存空間的地址信息及其容量信息、第一目標進程不需訪問的內存空間的地址信息。
33.步驟s12、將第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起;然后執行步驟s13。在步驟s12中,基于第一內存申請請求,按照各個第一目標進程所需訪問的內存段的需求(包括首地址和內存容量大小的需求),將每個第一目標進程的標識信息與對應的第一訪問內存段綁定在一起,以使每個第一目標進程在第一處理器調度下完成對應綁定的第一訪問內存段的讀寫操作;在第一處理器內部運行的操作系統中需要將所調度的第一目標進程映射到對應分配的第一訪問內存段,則在本實施例中使用第一目標進程的標識信息作為對應映射的第一訪問內存段的首地址的索引,相應形成的映射關系是指示第一目標進程的標識信息與第一訪問內存段的首地址(起始地址)之間的對應關系,加快映射關系的建立。
34.在步驟s12中,所述將第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起的方法包括:在第一內存申請請求的控制下,將第一處理器所調度的第一目標進程的標識信息設置為該第一目標進程當前訪問的第一訪問內存段的索引值,以使中間層通過第一目標進程的標識信息定位到所需訪問的第一訪問內存段,此時,中間層配置所述目標存儲器進行內存地址映射操作;并配置其中一個標識信息對應分配(對應綁定)的第一訪問內存段不允許其它標識信息的第一目標進程訪問,形成該第一目標進程的標識信息與當前訪問的第一訪問內存段的首地址之間的映射關系,則確定將第一處理器所調度的每個第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起,進而可以確定為真正為每個第一目標進程分配到對應的第一訪問內存段,因此,第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起,表示第一目標進程只訪問該對應分配的第一訪問內存段;并將當前設置的索引值對應的第一訪問內存段的首地址反饋給中間層,為應用軟件程
序提供第一目標進程的操作地址信息;因此,第一目標進程在訪問所述目標存儲器時,第一處理器通過該第一目標進程的標識信息對存在映射關系的第一訪問內存段進行讀寫操作,即通過標識信息指定的地址去訪問其存儲的數據;其中,第一目標進程的標識信息是在第一處理器的調度作用下從中間層封裝的動態庫的接口中獲取;中間層是設置在第一處理器所運行的操作系統中。第一處理器可以通過中間層申請內存,第一內存申請請求可以是來源于中間層及其關聯的應用軟件程序;各個第一目標進程的地址空間是相互獨立的,各個第一目標進程可以同時使用目標存儲器讀寫數據且互不干擾。
35.需要說明的是,在所述步驟s12中,將每個第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起后,從第一訪問內存段的首地址開始,每當檢測到一個內存段被第一處理器調度的對應綁定的一個第一目標進程占用,則將該內存段設置為被占用的內存段以指示各個第一訪問內存段是否空閑,并確定當前設置出的被占用的內存段不允許除了所述對應綁定的一個第一目標進程之外的第一目標進程訪問。索引與第一訪問內存段的首地址之間存在映射關系;第一目標進程的標識信息作為目標存儲器的索引,優選地,可以按照索引在數據結構中的鏈接順序,依次查綁定到第一目標進程的首地址,以便于向目標存儲器中連續空閑的內存塊讀寫數據。所述第一訪問內存段的地址連續;所述索引可以唯一區分不同的第一訪問內存段。
36.優選地,步驟s12還包括:當中間層不配置所述目標存儲器進行內存地址映射操作時,通過調用中間層中預先配置的讀寫函數,對第一目標進程所需訪問的第一訪問內存段進行讀寫操作,以實現采用內存拷貝的方式對第一訪問內存段進行讀寫操作,則不需按照前述實施例的方式將每個第一目標進程的標識信息與對應分配的第一訪問內存段的首地址綁定在一起以形成映射關系,而是依據預先配置的讀寫函數內設的參數規則直接定位到所需操作的內存地址,其中,預先配置的讀寫函數是操作系統配置好的庫函數;再將在第一訪問內存段進行讀寫操作的首地址反饋給應用軟件程序;優選地,第一目標進程所需的內存申請請求當中包括所需訪問的第一訪問內存段的首地址、以及所需訪問的第一訪問內存段的內存容量,以實現為每個第一目標進程分配到第一訪問內存段,將作為參數輸入給所述預先配置的讀寫函數,以便于對第一目標進程所需訪問的第一訪問內存段進行讀寫操作。
37.步驟s13、確定第一目標進程完成內存申請操作,然后可以控制第一處理器至少將已綁定的第一訪問內存段所存在的首地址和內存容量都通過信息共享內存傳輸給其余處理器。優選地,第一處理器可以將已分配到的第一訪問內存段所存在的首地址和內存容量都更新為信息共享內存的第一訪問參數,包括將已綁定的第一訪問內存段的首地址及其內存容量都更新為信息共享內存的第一訪問參數當中同類型的參數、或第一內存申請請求中同類型的參數;再通過信息共享內存將第一目標進程完成內存申請操作的信息、更新后的第一訪問參數、以及更新后的第一內存申請請求傳輸給其余處理器。由于第一處理器和第二處理器是不同類型的處理器,所以第一處理器申請完成內存申請操作之后通知第二處理器,保證第一處理器和第二處理器之間的數據正常交互。
38.步驟s11至步驟s13對應組成第一處理器的內存申請操作,第一訪問內存段對應第一處理器讀寫操作,第一訪問內存段的數量可以多于或等于2個;對于第一處理器所能調度的第一目標進程當中,將每個第一目標進程的標識信息設置為該第一目標進程當前訪問的
第一訪問內存段的索引值,讓每個第一目標進程的標識信息與對應訪問的第一訪問內存段的首地址之間建立一一對應關系,以使中間層通過第一目標進程的標識信息定位到所需訪問的第一訪問內存段。實現在目標存儲器內按照第一目標進程所需的內存申請請求劃分為多個第一訪問內存段,并配置每個標識信息下定位出的第一訪問內存段之間不允許相互訪問,以防止一個進程所訪問的內存段中的數據被別的進程改變,也避開兩個進程在同一內存段內同時讀寫數據,解決了不同進程在同一處理器內的沖突問題,解決在多個進程無法同時使用共享內存的問題,減少多個第一目標進程在同一存儲器內讀寫數據出現錯誤或出現地址越界的問題。
39.在前述步驟s11對應的實施例中,所述地址空間連續分配的原則包括:從目標存儲器的首地址開始,搜索位于一塊連續空閑內存空間的開始位置的地址,再將第一次搜索到的位于一塊連續空閑內存空間的開始位置的地址設置為入口地址;檢測入口地址所在的連續空閑內存空間是否存在滿足內存申請請求的分配空間;其中,內存申請請求包括預先設置的入口地址、以及該預先設置的入口地址所在的連續空閑內存空間中所需的分配空間的內存容量。
40.對于檢測入口地址所在的連續空閑內存空間是否存在滿足內存申請請求的分配空間,具體是判斷查到屬于連續空閑空間的分配空間大小是否等于內存申請請求所需的空間大小,至于入口地址和占用狀態(被進程占用狀態和被數據占據狀態)可以在分配后進行適應性的調整,以使得內存申請請求中規定的入口地址所在的連續空閑內存空間被調整為所述第一訪問內存段或第二訪問內存段。
41.當檢測到入口地址所在的連續空閑內存空間中存在滿足內存申請請求的分配空間時,將該分配空間設置為供一個進程訪問的空閑內存段,確定當前檢測到的入口地址是滿足內存申請請求的分配空間的入口地址,并修改下一連續空閑內存空間的開始位置的地址以便于在下一連續空閑內存空間中分配出供另一個進程訪問的空閑內存段,其中,當前檢測到的入口地址與下一連續空閑內存空間的開始位置的地址之間的地址范圍大于或等于所述供一個進程訪問的空閑內存段所覆蓋的地址范圍。
42.當入口地址所在的連續空閑內存空間中不存在滿足內存申請請求的分配空間時,將所述入口地址調整到下一連續空閑內存空間中的開始位置的地址,再判斷調整后的入口地址所在的連續空閑內存空間是否存在滿足內存申請請求的分配空間,直至搜索到滿足內存申請請求的分配空間,否則確定申請內存失敗。需要說明的是,下一連續空閑內存空間中的開始位置是預先記錄在調整前的入口地址所在的連續空閑內存空間中;優選地,供一個進程訪問的空閑內存段的首地址、以及供該進程訪問的空閑內存段的內存容量都被緩存在所述信息共享內存中并更新為訪問參數當中的一部分和釋放參數當中的一部分。
43.在上述實施例的基礎上,每當按照所述地址空間連續分配的原則為第一目標進程分配對應的第一訪問內存段時,確定該第一訪問內存段是滿足第一內存申請請求的分配空間,第一訪問內存段的首地址是當前調整出來的入口地址,其中,能夠分配的內存空間則為可分配的內存段,即未被占用的空間,前述的內存申請請求可以是第一內存申請請求,因此,第一訪問內存段在分配出來時是屬于連續空閑內存空間。滿足第一內存申請請求的入口地址所在的連續空閑內存空間中所需的分配空間是滿足第一內存申請請求的分配空間。
44.優選地,在第一處理器開始操作所述目標存儲器之前,所述目標存儲器內的整個
內存空間為一連續空閑空間,整個內存空間通過多次內存申請和內存釋放會產生不同的連續空閑空間。第一處理器接收外部設備發送的第一內存申請請求,根據所述第一內存申請請求可以獲得外部設備發送的內存申請數據,獲得所述內存申請數據的字節數,對應為所需分配或被綁定(映射到)的第一訪問內存段的內存容量。同時,分配的內存空間剛好滿足內存申請請求,不會存在單次申請空間過大的情況,從而提高內存的利用率。也適用于嵌入式linux系統以及高性能處理器。
45.在一些實施例中,前述步驟s11當中還包括:在按照地址空間連續分配的原則為第一目標進程分配對應的第一訪問內存段之前,需要判斷第一目標進程訪問目標存儲器所需的參數合法,包括所述入口地址和分配空間的內存容量;具體判斷方式包括:當滿足第一內存申請請求的入口地址處于第一預設首地址范圍內,且該處于第一預設首地址范圍內的入口地址所在的連續空閑內存空間中所需的分配空間的內存容量是處于第一預設目標容量范圍內時,確定第一目標進程訪問目標存儲器所需的參數合法,則可以在第一處理器接收到第一內存申請請求之后,開始按照所述地址空間連續分配的原則為第一目標進程分配對應的第一訪問內存段。
46.具體地,當第一內存申請請求當中包括的入口地址處于第一預設首地址范圍內,且第一內存申請請求當中包括的入口地址所在的連續空閑內存空間中所需的分配空間的內存容量是處于第一預設目標容量范圍內時,確定第一內存申請請求中的參數合法。再通過第一目標進程的標識信息來在所述目標存儲器中搜索對應綁定到的第一訪問內存段。
47.第一預設首地址范圍會隨著第一內存申請請求所包括的入口地址的變化而變化,而且每個入口地址的向前偏移地址區間及其向后偏移地址區間組成第一預設首地址范圍,向前偏移地址區間及其向后偏移地址區間是依據第一處理器的具體架構以及運行的操作系統的復雜度所決定,比如,第一處理器對目標存儲器的讀寫延遲時間較長、或分配內存不穩定時,將向前偏移地址區間及其向后偏移地址區間設置得比較寬,否則設置得較窄;同理地,第一預設目標容量范圍在第一處理器對目標存儲器的讀寫延遲時間較長、或分配內存不穩定時設置得比較大,否則設置得比較小。具體地,當第一內存申請請求當中包括的入口地址處于第一預設首地址范圍內,且第一內存申請請求當中包括的入口地址所在的連續空閑內存空間中所需的分配空間的內存容量是處于第一預設目標容量范圍內時,確定第一內存申請請求中的參數合法,其中,入口地址所在的連續空閑內存空間中所需的分配空間是入口地址所在的連續空閑內存空間中,滿足所述第一內存申請請求的分配空間。
48.優選地,在應用軟件程序的控制下,中間層通過設置所述目標存儲器來保存所述入口地址以及對應的分配空間的內存容量,以使得中間層保存每個第一訪問內存段的首地址;在步驟s11中,中間層為第一目標進程提供所需的入口地址和對應的分配空間的內存容量,并判斷第一目標進程所需的入口地址是否處于第一預設首地址范圍內,且判斷同一入口地址所在的連續空閑內存空間中所需的分配空間的內存容量是否處于第一預設目標容量范圍內。
49.需要說明的是,所述中間層在嵌入式操作系統中也稱為硬件抽象層(hardwareabstractlayer,hal)或板級支持包(board support package,bsp),它將系統上層軟件(應用程序)與底層硬件分離開來,使系統的底層驅動程序與上層無關,上層軟件開發人員無需關心底層硬件的具體情況,根據bsp層提供的接口即可進行開發,在多進程運行
的操作系統或處理器中降低程序開發復雜度。
50.作為一種實施例,在執行所述步驟s1之后,為了對已分配或已綁定的第一訪問內存段進行釋放以維持第一處理器的正常運行,在執行所述步驟s1后,最新獲得的第一訪問內存段的首地址以及該第一訪問內存段的內存容量都被轉換到第一內存釋放請求當中。
51.步驟s2、在所述第一處理器接收到第一內存釋放請求后,通過第一目標進程的標識信息來在所述目標存儲器中搜索對應的第一訪問內存段,包括查第一訪問內存段的首地址;再解除第一目標進程的標識信息與對應綁定的第一訪問內存段的綁定關系,以使得該第一訪問內存段不被原來綁定的第一目標進程繼續訪問,解除被原來綁定的第一目標進程的占用關系,讓該第一訪問內存段恢復為支持被任意第一目標進程訪問,可以是在重新申請或分配內存的前提下被第一目標進程訪問;然后確定第一目標進程完成內存釋放操作,在一些實施例中可以恢復為連續空閑空間;第一處理器還通過所述信息共享內存將第一目標進程完成內存釋放操作的信息傳輸給第二處理器;其中,該第一訪問內存段沒有被解除與對應第一目標進程的標識信息的綁定關系時,不被其它第一目標進程訪問;第二訪問內存段的地址值與第一訪問內存段的地址值不同。
52.需要說明的是,第一內存釋放請求可以都包括第一訪問內存段的釋放請求信息、第一訪問內存段的首地址以及第一訪問內存段的內存容量。可選的,內存釋放請求可以包括釋放的內存的大小和所釋放的內存的首地址。釋放的內存可以為大小對齊的內存,也可以為大小不對齊的內存。處理器或進程在內存中釋放內存空間時,都是按照基本單位進行解除內存空間及占用的數據的關系。
53.作為內存釋放的一種實施例,所述步驟s2包括步驟s21至步驟s23;參閱圖2可知,具體如下:步驟s21、在所述第一處理器接收到第一內存釋放請求時,通過第一目標進程的標識信息來在所述目標存儲器中搜索對應綁定到的第一訪問內存段,然后執行步驟s22。其中,對應綁定到的第一訪問內存段是來源于前述實施例的步驟s12中與第一目標進程的標識信息(來源于第一處理器調度出來的第一目標進程)綁定的第一訪問內存段,可以是步驟s11分配出來的所有第一訪問內存段,也可以是滿足第一目標進程的第一訪問內存段,可以是步驟s11分配出來的部分第一訪問內存段。
54.在在前述步驟s11提及的地址空間連續分配的原則的基礎上,在步驟s2中,在通過第一目標進程的標識信息來在所述目標存儲器中搜索對應分配到的第一訪問內存段之前,當第一內存釋放請求當中包括的入口地址處于第一預設首地址范圍內,且該處于第一預設首地址范圍內的入口地址所在的連續空閑內存空間中所需的分配空間的內存容量是處于第一預設目標容量范圍內時,確定第一目標進程在目標存儲器中釋放內存所需的參數合法,再通過第一目標進程的標識信息來在所述目標存儲器中搜索對應綁定到的第一訪問內存段。其中,入口地址所在的連續空閑內存空間中所需的分配空間是第一內存釋放請求所需釋放的內存空間,來源于第一目標進程的標識信息對應綁定的第一訪問內存段。
55.具體地,當第一內存釋放請求當中包括的入口地址處于所述第一預設首地址范圍內,且第一內存釋放請求當中包括的入口地址所在的連續空閑內存空間中所需的分配空間的內存容量是處于所述第一預設目標容量范圍內時,確定第一內存釋放請求中的參數合法。再通過第一目標進程的標識信息來在所述目標存儲器中搜索對應綁定到的第一訪問內
存段。所述第一預設首地址范圍的定義和所述第一預設目標容量范圍的定義都與前述內存申請操作的實施例中的相同。
56.步驟s22、解除第一目標進程的標識信息與對應的第一訪問內存段的綁定關系,以使得該第一訪問內存段恢復為支持被任意第一目標進程訪問或該第一訪問內存段不被原來占用的第一目標進程繼續訪問,則該第一訪問內存段可以被重新使用;然后執行步驟s23。
57.在一些實施例中,每當步驟s21通過第一目標進程的標識信息搜索到對應綁定的一個第一訪問內存段,則步驟s22解除第一目標進程的標識信息與對應的第一訪問內存段的綁定關系,使得第一目標進程的標識信息與所需訪問的第一訪問內存段的首地址不存在映射關系。
58.步驟s23、確定第一目標進程完成內存釋放操作,并通過所述信息共享內存將第一目標進程完成內存釋放操作的信息傳輸給第二處理器。
59.因此,為了保證第一處理器的正常運轉,對于第一目標進程所需的內存釋放操作,第一處理器通過第一目標進程的標識信息定位到所需釋放的第一訪問內存段的首地址,再進行解綁,讓該第一訪問內存段可以繼續使用。
60.通過以上的實施方式的描述,所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據需要而將上述功能分配由不同的功能模塊完成,即將裝置的內部結構劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。上述描述的系統,裝置和單元的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
61.在本技術所提供的幾個實施例中,應該理解到,所揭露的多進程系統中的共享內存管理裝置,可以通過其它的方式實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述模塊或單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
62.對于前述實施方式,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發明實施方式并不受所描述的動作順序的限制,困為依據本發明實施方式,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施方式均屬于優選實施方式,所涉及的動作并不一定是本發明實施方式所必須的。
63.所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。
64.另外,在本發明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現,也可以采用軟件功能單元的形式實現。
65.所述集成的單元如果以軟件功能單元的形式實現并作為獨立的產品銷售或使用
時,可以存儲在一個計算機可讀取存儲介質中。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)或處理器(processor)執行本發明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:u盤、移動硬盤、只讀存儲器(rom,read-only memory)、隨機存取存儲器(ram,random access memory)、磁碟或者光盤等各種可以存儲程序代碼的介質。
66.以上所述,僅為本發明的具體實施方式,但本發明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發明揭露的技術范圍內,可輕易想到變化或替換,都應涵蓋在本發明的保護范圍之內。因此,本發明的保護范圍應以所述權利要求的保護范圍為準。
技術特征:
1.多進程中的內存的管理方法,其特征在于,管理方法包括:步驟s1、若第一處理器接收到第一內存申請請求,以調度至少兩個第一目標進程開始申請內存,則在目標存儲器內,按照地址空間連續分配的原則分配第一訪問內存段,再將第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起;然后確定第一目標進程完成內存申請操作。2.根據權利要求1所述管理方法,其特征在于,所述管理方法還包括:步驟s2、在所述第一處理器接收到第一內存釋放請求后,通過第一目標進程的標識信息來在所述目標存儲器中搜索對應綁定的第一訪問內存段,再解除第一目標進程的標識信息與對應綁定的第一訪問內存段的綁定關系,然后確定第一目標進程完成內存釋放操作;其中,該第一訪問內存段沒有被解除與對應綁定的第一目標進程的標識信息的綁定關系時,不被除了已綁定的第一目標進程之外的其它第一目標進程訪問;第二訪問內存段的地址值與第一訪問內存段的地址值不同;其中,執行步驟s1后,最新獲得的第一訪問內存段的首地址以及該第一訪問內存段的內存容量都被轉換到第一內存釋放請求當中。3.根據權利要求2所述管理方法,其特征在于,第一目標進程在目標存儲器內綁定到第一訪問內存段后,第一目標進程對第一訪問內存段訪問時,所述第一處理器對第一目標進程所綁定到的第一訪問內存段進行讀寫操作;第一內存申請請求包括第一目標進程的調度請求信息。4.根據權利要求3所述管理方法,其特征在于,在步驟s1中,所述將第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起的方法包括:在第一內存申請請求的控制下,將第一處理器所調度的第一目標進程的標識信息設置為該第一目標進程當前訪問的第一訪問內存段的索引值,以通過第一目標進程的標識信息定位到所需訪問的第一訪問內存段,并配置其中一個標識信息對應分配的第一訪問內存段不允許其它標識信息的第一目標進程訪問,形成該第一目標進程的標識信息與當前訪問的第一訪問內存段的首地址之間的映射關系,則確定將第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起;其中,第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起,表示第一目標進程只訪問該對應分配的第一訪問內存段。5.根據權利要求4所述管理方法,其特征在于,步驟s1還包括,在將第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起之后,將對應綁定的第一訪問內存段的首地址反饋給中間層,為應用軟件程序提供第一目標進程的操作地址信息;其中,第一目標進程的標識信息是在第一處理器的調度作用下從中間層封裝的動態庫的接口中獲取,中間層是設置在第一處理器所運行的操作系統中。6.根據權利要求3所述管理方法,其特征在于,所述地址空間連續分配的原則包括:從目標存儲器的首地址開始,搜索位于一塊連續空閑內存空間的開始位置的地址,再將第一次搜索到的位于一塊連續空閑內存空間的開始位置的地址設置為入口地址;檢測入口地址所在的連續空閑內存空間是否存在滿足內存申請請求的分配空間;其中,內存申請請求包括預先設置的入口地址、以及該預先設置的入口地址所在的連續空閑內存空間中所需的分配空間的內存容量;
當檢測到入口地址所在的連續空閑內存空間中存在滿足內存申請請求的分配空間時,將該分配空間設置為供一個進程訪問的空閑內存段,確定當前檢測到的入口地址是滿足內存申請請求的分配空間的入口地址,并修改下一連續空閑內存空間的開始位置的地址以便于在下一連續空閑內存空間中分配出供另一個進程訪問的空閑內存段;當入口地址所在的連續空閑內存空間中不存在滿足內存申請請求的分配空間時,將所述入口地址調整到下一連續空閑內存空間中的開始位置的地址,再判斷調整后的入口地址所在的連續空閑內存空間是否存在滿足內存申請請求的分配空間,直至搜索到滿足內存申請請求的分配空間;其中,下一連續空閑內存空間中的開始位置是預先記錄在調整前的入口地址所在的連續空閑內存空間中。7.根據權利要求6所述管理方法,其特征在于,每當按照所述地址空間連續分配的原則分配第一訪問內存段時,確定該第一訪問內存段是滿足第一內存申請請求的分配空間,第一訪問內存段的首地址是當前調整出來的入口地址,其中,第一訪問內存段在分配出來時是屬于連續空閑內存空間。8.根據權利要求7所述管理方法,其特征在于,在按照地址空間連續分配的原則分配第一訪問內存段之前,當滿足第一內存申請請求的入口地址處于第一預設首地址范圍內,且該處于第一預設首地址范圍內的入口地址所在的連續空閑內存空間中所需的分配空間的內存容量是處于第一預設目標容量范圍內時,確定第一目標進程訪問目標存儲器所需的參數合法。9.根據權利要求8所述管理方法,其特征在于,在步驟s2中,在通過第一目標進程的標識信息來在所述目標存儲器中搜索對應綁定的第一訪問內存段之前,當第一內存釋放請求當中包括的入口地址處于第一預設首地址范圍內,且該處于第一預設首地址范圍內的入口地址所在的連續空閑內存空間中所需的分配空間的內存容量是處于第一預設目標容量范圍內時,確定第一目標進程在目標存儲器中釋放內存所需的參數合法。10.根據權利要求1所述管理方法,其特征在于,第一處理器被配置為運行多進程的操作系統;其中,第一處理器用于運行至少一個第一目標進程;目標存儲器是sram存儲器。
技術總結
本發明公開多進程中的內存的管理方法,包括若第一處理器接收到第一內存申請請求,則在目標存儲器內,按照地址空間連續分配的原則分配第一訪問內存段,再將第一目標進程的標識信息與對應分配的第一訪問內存段綁定在一起;然后確定第一目標進程完成內存申請操作;在第一處理器接收到第一內存釋放請求后,通過第一目標進程的標識信息來在所述目標存儲器中搜索對應綁定的第一訪問內存段,再解除第一目標進程的標識信息與對應綁定的第一訪問內存段的綁定關系,然后確定第一目標進程完成內存釋放操作;其中,該第一訪問內存段沒有被解除與對應綁定的第一目標進程的標識信息的綁定關系時,不被除了已綁定的第一目標進程之外的其它第一目標進程訪問。第一目標進程訪問。第一目標進程訪問。
