基于32/64位混合操作系統(tǒng)的顯存分配方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)處理技術(shù),尤其涉及一種基于32/64位混合操作系統(tǒng)的顯存分配方法及裝置。
【背景技術(shù)】
[0002]當(dāng)前,對(duì)于常規(guī)的32位系統(tǒng)或64位系統(tǒng),共享內(nèi)存的顯卡在需要分配內(nèi)存時(shí),直接從系統(tǒng)的剩余空間中分配一部分內(nèi)存作為顯卡的內(nèi)存。
[0003]現(xiàn)有技術(shù)中,針對(duì)32/64位混合操作系統(tǒng),特別是對(duì)于沒有獨(dú)立顯存的集成顯示芯片,繼續(xù)沿用常規(guī)32位系統(tǒng)或64位系統(tǒng)的分配方式。但是,32/64位混合操作系統(tǒng)中,低于32位的地址段大部分被內(nèi)核占用,大部分內(nèi)存的物理地址被分配到了高于32位的地址段,而很多顯卡是32位的,不具備64位的訪存能力,即無法訪問高于32位的地址段,因此這樣的分配方式會(huì)導(dǎo)致很多分配的地址無法被顯卡使用。
【發(fā)明內(nèi)容】
[0004]本發(fā)明提供一種基于32/64位混合操作系統(tǒng)的顯存分配方法及裝置,用于解決現(xiàn)有技術(shù)中為顯卡分配的內(nèi)存顯卡無法訪問的問題。
[0005]本發(fā)明第一方面提供一種基于32/64位混合操作系統(tǒng)的顯存分配方法,包括:
[0006]在所述混合操作系統(tǒng)啟動(dòng)時(shí),通過基本輸入輸出系統(tǒng)B1S設(shè)定內(nèi)存預(yù)留值,并向內(nèi)核傳遞所述內(nèi)存預(yù)留值,以在所述混合操作系統(tǒng)的低32位內(nèi)存中為顯卡預(yù)留專用內(nèi)存,所述內(nèi)存預(yù)留值小于所述混合操作系統(tǒng)中低32位內(nèi)存的總?cè)萘浚?br>[0007]通過所述內(nèi)核對(duì)所述混合操作系統(tǒng)的低32位內(nèi)存中除了所述內(nèi)存預(yù)留值以外的內(nèi)存進(jìn)行初始化;
[0008]向所述內(nèi)核申明所述內(nèi)存預(yù)留值對(duì)應(yīng)的內(nèi)存為所述顯卡的專用內(nèi)存;
[0009]在接收到所述顯卡的驅(qū)動(dòng)發(fā)送的使用請(qǐng)求命令時(shí),從所述顯卡的專用內(nèi)存中為所述顯卡分配內(nèi)存。
[0010]本發(fā)明第二方面提供一種基于32/64位混合操作系統(tǒng)的顯存分配裝置,包括:
[0011]處理模塊,用于在所述混合操作系統(tǒng)啟動(dòng)時(shí),通過基本輸入輸出系統(tǒng)B1S設(shè)定內(nèi)存預(yù)留值,并向內(nèi)核傳遞所述內(nèi)存預(yù)留值,以在所述混合操作系統(tǒng)的低32位內(nèi)存中為顯卡預(yù)留專用內(nèi)存,所述內(nèi)存預(yù)留值小于所述混合操作系統(tǒng)中低32位內(nèi)存的總?cè)萘浚?br>[0012]初始化模塊,用于通過所述內(nèi)核對(duì)所述混合操作系統(tǒng)的低32位內(nèi)存中除了所述內(nèi)存預(yù)留值以外的內(nèi)存進(jìn)行初始化;
[0013]申明模塊,用于向所述內(nèi)核申明所述內(nèi)存預(yù)留值對(duì)應(yīng)的內(nèi)存為所述顯卡的專用內(nèi)存;
[0014]分配模塊,用于在接收到所述顯卡的驅(qū)動(dòng)發(fā)送的使用請(qǐng)求命令時(shí),從所述顯卡的專用內(nèi)存中為所述顯卡分配內(nèi)存。
[0015]本發(fā)明提供的基于32/64位混合操作系統(tǒng)的顯存分配方法及裝置,在上述混合操作系統(tǒng)啟動(dòng),通過B1S設(shè)定內(nèi)存預(yù)留值,以在上述混合操作系統(tǒng)的低32位內(nèi)存中為顯卡預(yù)留專用內(nèi)存,通過上述內(nèi)核對(duì)上述混合操作系統(tǒng)的低32位內(nèi)存中除了上述內(nèi)存預(yù)留值以外的內(nèi)存進(jìn)行初始化,向上述內(nèi)核申明上述內(nèi)存預(yù)留值對(duì)應(yīng)的內(nèi)存為上述顯卡的專用內(nèi)存,在接收到上述顯卡的驅(qū)動(dòng)發(fā)送的使用請(qǐng)求命令時(shí),從上述顯卡的專用內(nèi)存中為所述顯卡分配內(nèi)存。這樣可以保證給顯卡分配的內(nèi)存都是操作系統(tǒng)內(nèi)存中低于32位的內(nèi)存,以實(shí)現(xiàn)分配給顯卡的內(nèi)存顯卡都可以訪問,避免了分配的內(nèi)存顯卡不能訪問的問題,并避免了資源的浪費(fèi)。
【附圖說明】
[0016]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0017]圖1為本發(fā)明提供的基于32/64位混合操作系統(tǒng)的顯存分配方法實(shí)施例一的流程不意圖;
[0018]圖2為本發(fā)明提供的基于32/64位混合操作系統(tǒng)的顯存分配方法實(shí)施例二的流程不意圖;
[0019]圖3為本發(fā)明提供的基于32/64位混合操作系統(tǒng)的顯存分配裝置實(shí)施例一的結(jié)構(gòu)不意圖;
[0020]圖4為本發(fā)明提供的基于32/64位混合操作系統(tǒng)的顯存分配裝置實(shí)施例二的結(jié)構(gòu)不意圖;
[0021]圖5為本發(fā)明提供的基于32/64位混合操作系統(tǒng)的顯存分配裝置實(shí)施例三的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0022]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0023]圖1為本發(fā)明提供的基于32/64位混合操作系統(tǒng)的顯存分配方法實(shí)施例一的流程示意圖,該方法的執(zhí)行主體可以是中央處理器(Central Processing Unit,簡稱CPU),如圖1所示,該方法包括:
[0024]S101、在上述混合操作系統(tǒng)啟動(dòng),通過基本輸入輸出系統(tǒng)(Basic Input OutputSystem,簡稱B1S)設(shè)定內(nèi)存預(yù)留值,以在上述混合操作系統(tǒng)的低32位內(nèi)存中為顯卡預(yù)留專用內(nèi)存。其中,上述內(nèi)存預(yù)留值小于上述混合操作系統(tǒng)中低32位內(nèi)存的總?cè)萘俊?br>[0025]為顯卡預(yù)留專用內(nèi)存之前,還可以接收顯卡向該混合操作系統(tǒng)注冊的該顯卡的專用標(biāo)識(shí),以便在后續(xù)分配內(nèi)存時(shí)知道專用內(nèi)存具體是哪個(gè)顯卡的專用內(nèi)存。
[0026]S102、通過上述內(nèi)核對(duì)上述混合操作系統(tǒng)的低32位內(nèi)存中除了上述內(nèi)存預(yù)留值以外的內(nèi)存進(jìn)行初始化。
[0027]具體地,可以B1S向內(nèi)存通知預(yù)留內(nèi)存的大小。例如:上述混合操作系統(tǒng)的實(shí)際內(nèi)存是256兆(M),B1S通知內(nèi)核預(yù)留內(nèi)存為56M,然后內(nèi)核初始化時(shí)只初始化除預(yù)留的56M之外的200M內(nèi)存。
[0028]S103、向上述內(nèi)核申明上述內(nèi)存預(yù)留值對(duì)應(yīng)的內(nèi)存為上述顯卡的專用內(nèi)存。
[0029]S104、在接收到上述顯卡的驅(qū)動(dòng)發(fā)送的使用請(qǐng)求命令時(shí),從上述顯卡的專用內(nèi)存中為所述顯卡分配內(nèi)存。
[0030]具體實(shí)現(xiàn)過程中,可以使用分配函數(shù),例如dma_alloc_coherent (DEV,)函數(shù),來分配這段內(nèi)存。
[0031]本實(shí)施例中,在上述混合操作系統(tǒng)啟動(dòng),通過B1S設(shè)定內(nèi)存預(yù)留值,以在上述混合操作系統(tǒng)的低32位內(nèi)存中為顯卡預(yù)留專用內(nèi)存,通過上述內(nèi)核對(duì)上述混合操作系統(tǒng)的低32位內(nèi)存中除了上述內(nèi)存預(yù)留值以外的內(nèi)存進(jìn)行初始化,向上述內(nèi)核申明上述內(nèi)存預(yù)留值對(duì)應(yīng)的內(nèi)存為上述顯卡的專用內(nèi)存,在接收到上述顯卡的驅(qū)動(dòng)發(fā)送的使用請(qǐng)求命令時(shí),從上述顯卡的專用內(nèi)存中為所述顯卡分配內(nèi)存。這樣可以保證給顯卡分配的內(nèi)存都是操作系統(tǒng)內(nèi)存中低于32位的內(nèi)存,以實(shí)現(xiàn)分配給顯卡的內(nèi)存顯卡都可以訪問,避免了分配的內(nèi)存顯卡不能訪問的問題,并避免了資源的浪費(fèi)。
[0032]具體地,上述向上述內(nèi)核申明上述內(nèi)存預(yù)留值對(duì)應(yīng)的內(nèi)存為上述顯卡的專用內(nèi)存,可以是在上述內(nèi)核的驅(qū)動(dòng)中的探針probe接口函數(shù)中調(diào)用聲明函數(shù),以向上述內(nèi)核聲明上述內(nèi)存預(yù)留值對(duì)應(yīng)的內(nèi)存為上述顯卡的專用內(nèi)存。
[0033]例如,可以在內(nèi)核驅(qū)動(dòng)中的probe接口函數(shù)中調(diào)用dma_declear_coherent (DEV,)函數(shù)來向內(nèi)核申明這段內(nèi)存為專用內(nèi)存。
[0034]具體實(shí)現(xiàn)過程中,上述從上述顯卡的專用內(nèi)存中為所述顯卡分配內(nèi)存,可以是在上述內(nèi)核中使用分配函數(shù)從上述顯卡的專用內(nèi)存中為上述顯卡分配內(nèi)存。
[0035]更進(jìn)一步地,在顯卡使用完之后所分配的內(nèi)存后,會(huì)釋放這些內(nèi)存。具體地,在另一實(shí)施例中,上述向上述內(nèi)核申明上述內(nèi)存預(yù)留值對(duì)應(yīng)的內(nèi)存為上述顯卡的專用內(nèi)存之后,還包括使用釋放函數(shù)釋放上述專用內(nèi)存。
[0036]具體地,可以使用釋放函數(shù),例如dma_free_coherent(DEV,)函數(shù),來釋放上述專用內(nèi)存。
[0037]圖2為本發(fā)明提供的基于32/64位混合操作系統(tǒng)的顯存分配方法實(shí)施例二的流程示意圖,所述方法包括:
[0038]S201、在上述混合操作系統(tǒng)啟動(dòng),通過B1S設(shè)定內(nèi)存預(yù)留值,以在上述混合操作系統(tǒng)的低32位內(nèi)存中為顯卡預(yù)留專用內(nèi)存。
[0039]S202、通過上述內(nèi)核對(duì)上述混合操作系統(tǒng)的低32位內(nèi)存中除了上述內(nèi)存預(yù)留值以外的內(nèi)存進(jìn)行初始化。
[0040]S203、向上述內(nèi)核申明上述內(nèi)存預(yù)留值對(duì)應(yīng)的內(nèi)存為上述顯卡的專用內(nèi)存。
[0041]S201?S203與前述SlOl?S103相同,在此不再贅述。
[0042]S204、在接收到用戶程序發(fā)送