數(shù)據(jù)訪問(wèn)方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明實(shí)施例涉及計(jì)算機(jī)技術(shù),尤其涉及一種數(shù)據(jù)訪問(wèn)方法及裝置。
【背景技術(shù)】
[0002] 現(xiàn)有的計(jì)算機(jī)系統(tǒng)中,利用旁路轉(zhuǎn)換緩沖(Translation Lookaside Buffer,TLB) 將虛擬地址(Virtual Address,VA)翻譯為物理地址(Physical Address, PA),使用PA對(duì)緩 存(cache)和內(nèi)存進(jìn)行訪問(wèn)。TLB中保存至少一個(gè)VA的虛擬頁(yè)號(hào)(Virtual Page Number, VPN)和PA的物理頁(yè)號(hào)(Physical Page Number,PPN)的對(duì)應(yīng)關(guān)系,該對(duì)應(yīng)關(guān)系稱之為頁(yè)表 項(xiàng),TLB根據(jù)VPN查找PPN,若查找到PPN,則輸出對(duì)應(yīng)的PPN從而確定出PA ;否則,發(fā)生TLB 缺失。一般米用全虛 cache (Virtually Indexed,Virtually Tagged Cache,V/V cache)來(lái) 減少TLB缺失造成的影響。V/V cache無(wú)需進(jìn)行虛實(shí)地址翻譯,而是直接使用VA進(jìn)行cache set與cache tag的比較。然而,V/V cache中存在同義詞(Synonym)問(wèn)題,即不同的VA可 能指向同一個(gè)PA的問(wèn)題,使得同一份數(shù)據(jù)可能存在于cache中的多個(gè)位置。如何確保進(jìn)程 訪問(wèn)到cache中最新的數(shù)據(jù)副本極為重要。
[0003] 現(xiàn)有技術(shù)中,通過(guò)粗粒度共享方式確保進(jìn)程訪問(wèn)到最新數(shù)據(jù)。具體的,將進(jìn)程的 邏輯地址空間分為若干個(gè)段(Segment),每個(gè)段通過(guò)SegNo標(biāo)識(shí)。操作系統(tǒng)將進(jìn)程的邏輯 地址空間翻譯為全局的虛地址空間,即將〈PID,SegNo>翻譯為全局的Segment ID,建立映 射關(guān)系。對(duì)于共享的數(shù)據(jù),使其處于不同的Segment中相同偏移的位置,經(jīng)過(guò)翻譯后,映射 到同一個(gè)Segment ID,這樣不同進(jìn)程間的共享數(shù)據(jù)就有了同樣的VA(同樣的Segment ID, Segment Offset, Page Offset),從源頭上解決了同義問(wèn)題的出現(xiàn)。
[0004] 然而,上述粗粒度共享方式中,仍然需要一次地址翻譯才能進(jìn)行數(shù)據(jù)訪問(wèn),訪問(wèn)效 率低。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明實(shí)施例提供一種數(shù)據(jù)訪問(wèn)方法及裝置,實(shí)現(xiàn)不同進(jìn)程之間共享數(shù)據(jù)時(shí),高 效的訪問(wèn)到正確的數(shù)據(jù)。
[0006] 第一個(gè)方面,本發(fā)明實(shí)施例提供一種數(shù)據(jù)訪問(wèn)方法,包括:
[0007] 判斷請(qǐng)求是否為潛在命中請(qǐng)求,所述請(qǐng)求為潛在命中請(qǐng)求時(shí),所述請(qǐng)求訪問(wèn)的數(shù) 據(jù)為所述請(qǐng)求對(duì)應(yīng)的進(jìn)程的虛擬地址空間中的共享數(shù)據(jù)區(qū)數(shù)據(jù),且被訪問(wèn)的高速緩沖存儲(chǔ) 器Cache中存在與所述請(qǐng)求的進(jìn)程號(hào)不同、標(biāo)簽相同的緩存項(xiàng);
[0008] 若所述請(qǐng)求為潛在命中請(qǐng)求,則判斷所述請(qǐng)求所屬的進(jìn)程是否具有對(duì)所述共享數(shù) 據(jù)區(qū)數(shù)據(jù)的訪問(wèn)權(quán)限;
[0009] 若所述請(qǐng)求所屬的進(jìn)程具有所述訪問(wèn)權(quán)限,則返回所述請(qǐng)求訪問(wèn)的數(shù)據(jù)。
[0010] 在第一個(gè)方面的第一種可能的實(shí)現(xiàn)方式中,若所述請(qǐng)求為潛在命中請(qǐng)求,則判斷 所述請(qǐng)求所屬的進(jìn)程是否具有對(duì)所述共享數(shù)據(jù)區(qū)數(shù)據(jù)的訪問(wèn)權(quán)限之前,還包括:
[0011] 若所述請(qǐng)求為潛在命中請(qǐng)求,則查找所述共享數(shù)據(jù)區(qū)數(shù)據(jù)的保護(hù)位信息;
[0012] 所述若所述請(qǐng)求為潛在命中請(qǐng)求,則判斷所述請(qǐng)求是否具有對(duì)所述共享數(shù)據(jù)區(qū)數(shù) 據(jù)的訪問(wèn)權(quán)限,包括:
[0013] 若所述請(qǐng)求為潛在命中請(qǐng)求,則根據(jù)所述保護(hù)位信息判斷所述請(qǐng)求所屬進(jìn)程是否 具有對(duì)所述共享數(shù)據(jù)區(qū)數(shù)據(jù)的訪問(wèn)權(quán)限。
[0014] 結(jié)合第一個(gè)方面的第一種可能的實(shí)現(xiàn)方式,在第一個(gè)方面的第二種可能的實(shí)現(xiàn)方 式中,所述若所述請(qǐng)求為潛在命中請(qǐng)求,則查找所述共享數(shù)據(jù)區(qū)數(shù)據(jù)的保護(hù)位信息之前,包 括:
[0015] 若所述請(qǐng)求為潛在命中請(qǐng)求,則判斷共享區(qū)保護(hù)位查找緩存SPLB中是否存在所 述保護(hù)位信息;
[0016] 若所述SPLB中不存在所述保護(hù)位信息,則獲取所述保護(hù)位信息并填充在所述 SPLB 中;
[0017] 所述若所述請(qǐng)求為潛在命中請(qǐng)求,則查找所述共享數(shù)據(jù)區(qū)數(shù)據(jù)的保護(hù)位信息,包 括:
[0018] 若所述請(qǐng)求為潛在命中請(qǐng)求,則從所述SPLB中查找所述保護(hù)位信息。
[0019] 結(jié)合第一個(gè)方面、第一個(gè)方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第一個(gè)方面 的第三種可能的實(shí)現(xiàn)方式中,所述判斷請(qǐng)求是否為潛在命中請(qǐng)求之前,還包括:
[0020] 判斷所述請(qǐng)求是否為命中請(qǐng)求,所述請(qǐng)求為命中請(qǐng)求時(shí),所述Cache中存在與所 述請(qǐng)求的進(jìn)程號(hào)相同、標(biāo)簽相同的緩存項(xiàng);
[0021] 所述判斷請(qǐng)求是否為潛在命中請(qǐng)求,包括:
[0022] 若判斷出所述請(qǐng)求不為命中請(qǐng)求,則判斷請(qǐng)求是否為潛在命中請(qǐng)求。
[0023] 結(jié)合第一個(gè)方面的第三種可能的實(shí)現(xiàn)方式,在第一個(gè)方面的第四種可能的實(shí)現(xiàn)方 式中,該方法還包括:
[0024] 若判斷出所述請(qǐng)求不是潛在命中請(qǐng)求、且所述請(qǐng)求訪問(wèn)的數(shù)據(jù)為所述請(qǐng)求對(duì)應(yīng)的 進(jìn)程的虛擬地址空間中的共享數(shù)據(jù)區(qū)數(shù)據(jù)時(shí),則將所述請(qǐng)求發(fā)送至當(dāng)前所查找Cache之外 的其他cache,由當(dāng)前所查找Cache之外的其他cache判斷所述請(qǐng)求是否為命中請(qǐng)求;
[0025] 若所述請(qǐng)求為命中請(qǐng)求,則返回所述請(qǐng)求訪問(wèn)的數(shù)據(jù);否則,若所述請(qǐng)求不為命中 請(qǐng)求,則由當(dāng)前所查找Cache之外的其他cache判斷所述請(qǐng)求是否潛在命中請(qǐng)求。
[0026] 結(jié)合第一個(gè)方面的第三種可能的實(shí)現(xiàn)方式,在第一個(gè)方面的第五種可能的實(shí)現(xiàn)方 式中,該方法還包括:
[0027] 若所述請(qǐng)求不是潛在命中請(qǐng)求、且所述請(qǐng)求訪問(wèn)的數(shù)據(jù)為所述請(qǐng)求對(duì)應(yīng)的進(jìn)程的 虛擬地址空間中的共享數(shù)據(jù)區(qū)數(shù)據(jù)時(shí),則查找所述共享數(shù)據(jù)區(qū)數(shù)據(jù)的保護(hù)位信息;
[0028] 根據(jù)所述保護(hù)位信息判斷所述請(qǐng)求是否具有對(duì)所述共享數(shù)據(jù)區(qū)數(shù)據(jù)的訪問(wèn)權(quán) 限;
[0029] 若所述請(qǐng)求具有所述訪問(wèn)權(quán)限,則將所述請(qǐng)求發(fā)送至當(dāng)前所查找Cache之外的其 他cache,由當(dāng)前所查找Cache之外的其他cache判斷所述請(qǐng)求是否為命中請(qǐng)求;
[0030] 若所述請(qǐng)求為命中請(qǐng)求,則返回所述請(qǐng)求訪問(wèn)的數(shù)據(jù);否則,若所述請(qǐng)求不為命中 請(qǐng)求,則由當(dāng)前所查找Cache之外的其他cache判斷所述請(qǐng)求是否潛在命中請(qǐng)求。
[0031] 結(jié)合第一個(gè)方面、第一個(gè)方面的第一種至第五種中任一種可能的實(shí)現(xiàn)方式,在第 一個(gè)方面的第六種可能的實(shí)現(xiàn)方式中,若所述請(qǐng)求為潛在命中請(qǐng)求,則判斷所述請(qǐng)求是否 具有對(duì)所述共享數(shù)據(jù)區(qū)數(shù)據(jù)的訪問(wèn)權(quán)限之前,還包括:
[0032] 判斷所述請(qǐng)求是否來(lái)自于本地核;
[0033] 所述若所述請(qǐng)求為潛在命中請(qǐng)求,則判斷所述請(qǐng)求是否具有對(duì)所述共享數(shù)據(jù)區(qū)數(shù) 據(jù)的訪問(wèn)權(quán)限,包括:
[0034] 若所述請(qǐng)求來(lái)自于本地核,則由所述本地核判斷所述請(qǐng)求是否具有對(duì)所述共享數(shù) 據(jù)區(qū)數(shù)據(jù)的訪問(wèn)權(quán)限;否則,若所述請(qǐng)求來(lái)自于本地核之外的核,則將由所述請(qǐng)求所在的核 判斷所述請(qǐng)求是否具有對(duì)所述共享數(shù)據(jù)區(qū)數(shù)據(jù)的訪問(wèn)權(quán)限。
[0035] 結(jié)合第一個(gè)方面、第一個(gè)方面的第一種至第六種中任一種可能的實(shí)現(xiàn)方式,在第 一個(gè)方面的第七種可能的實(shí)現(xiàn)方式中,所述判斷請(qǐng)求是否為潛在命中請(qǐng)求之前,還包括:
[0036] 從所述請(qǐng)求的對(duì)應(yīng)的虛擬地址空間中劃分出共享數(shù)據(jù)區(qū),所述共享數(shù)據(jù)區(qū)中存儲(chǔ) 所述共享數(shù)據(jù)區(qū)數(shù)據(jù);
[0037] 若所述請(qǐng)求所在的進(jìn)程需要共享數(shù)據(jù),則向所述共享數(shù)據(jù)區(qū)申請(qǐng)?zhí)摂M地址空間。
[0038] 結(jié)合第一個(gè)方面、第一個(gè)方面的第一種至第七種中任一種可能的實(shí)現(xiàn)方式,在第 一個(gè)方面的第八種可能的實(shí)現(xiàn)方式中,若所述請(qǐng)求具有所述訪問(wèn)權(quán)限,則返回所述請(qǐng)求訪 問(wèn)的數(shù)據(jù)之前,還包括:
[0039] 將所述Cache中與所述請(qǐng)求所屬的進(jìn)程的進(jìn)程號(hào)不同、標(biāo)簽相同的緩存項(xiàng)的進(jìn)程 號(hào)修改為所述請(qǐng)求的進(jìn)程號(hào)。
[0040] 第二個(gè)方面,本發(fā)明實(shí)施例提供一種數(shù)據(jù)訪問(wèn)裝置,包括:
[0041] 潛在命中請(qǐng)求判斷模塊,用于判斷請(qǐng)求是否為潛在命中請(qǐng)求,所述請(qǐng)求為潛在命 中請(qǐng)求時(shí),所述請(qǐng)求訪問(wèn)的數(shù)據(jù)為所述請(qǐng)求對(duì)應(yīng)的進(jìn)程的虛擬地址空間中的共享數(shù)據(jù)區(qū)數(shù) 據(jù),且被訪問(wèn)的高速緩沖存儲(chǔ)器Cache中存在與所述請(qǐng)求的進(jìn)程號(hào)不同、標(biāo)簽相同的緩存 項(xiàng);
[0042] 訪問(wèn)權(quán)限判斷模塊,用于若所述潛在命中請(qǐng)求判斷模塊判斷出所述請(qǐng)求為潛在命 中請(qǐng)求,則判斷所述請(qǐng)求所屬的進(jìn)程是否具有對(duì)所述共享數(shù)據(jù)區(qū)數(shù)據(jù)的訪問(wèn)權(quán)限;
[0043] 返回模塊,用于若所述訪問(wèn)權(quán)限判斷模塊判斷出所述請(qǐng)求所屬的進(jìn)程具有所述訪 問(wèn)權(quán)限,則返回所述請(qǐng)求訪問(wèn)的數(shù)據(jù)。
[0044] 在第二個(gè)方面的第一種可能的實(shí)現(xiàn)方式中,該裝置還包括:
[0045] 查找模塊,用于若所述請(qǐng)求為潛在命中請(qǐng)求,在所述訪問(wèn)權(quán)限判斷模塊判斷所述 請(qǐng)求所屬的進(jìn)程是否具有對(duì)所述共享數(shù)據(jù)區(qū)數(shù)據(jù)的訪問(wèn)權(quán)限之前,查找所述共享數(shù)據(jù)區(qū)數(shù) 據(jù)的保護(hù)位信息;
[0046] 所述訪問(wèn)權(quán)限判斷模塊,用于若所述請(qǐng)求為潛在命中請(qǐng)求,則根據(jù)所述查找模塊 查找到的所述保護(hù)位信息判斷所述請(qǐng)求所屬進(jìn)程是否具有對(duì)所述共享數(shù)據(jù)區(qū)數(shù)據(jù)的訪問(wèn) 權(quán)限。
[0047] 結(jié)合第二個(gè)方面的第一種可能的實(shí)現(xiàn)方式,在第二個(gè)方面的第二種可能的實(shí)現(xiàn)方 式中,保護(hù)位信息判斷模塊,用于若所述請(qǐng)求為潛在命中請(qǐng)求,則在所述查找模塊查找所述 共享數(shù)據(jù)區(qū)數(shù)據(jù)的保護(hù)位信息之前,判斷共享區(qū)保護(hù)位查找緩存SPLB中是否存在所述保 護(hù)位信息;
[0048] 獲取模塊,用于若所述保護(hù)位信息判斷模塊判斷出所述SPLB中不存在所述保護(hù) 位信息,則獲取所述保護(hù)位信息并填充在所述SPLB中;
[0049] 所述查找模塊,具體用于若所述請(qǐng)求為潛在命中請(qǐng)求,則從所述SPLB中查找所述 保護(hù)位信息。
[0050] 結(jié)合第二個(gè)方面、第二個(gè)方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第二個(gè)方面 的第三種可能的實(shí)現(xiàn)方式中,該裝置還包括:
[0051] 命中請(qǐng)求判斷模塊,用于在所述潛在命中請(qǐng)求判斷模塊判斷所述請(qǐng)求是否為潛在 命中請(qǐng)求之前,判斷所述請(qǐng)求是否為命中請(qǐng)求,所述請(qǐng)求為命中請(qǐng)求時(shí),所述Cache中存在 與所述請(qǐng)求的進(jìn)程號(hào)相同、標(biāo)簽相同的緩存項(xiàng);
[0052] 所述潛在命中請(qǐng)求判斷模塊,具體用于若所述命中請(qǐng)求判斷模塊判斷出所述請(qǐng)求 不為命中請(qǐng)求,貝Il判斷請(qǐng)求是否為潛在命中請(qǐng)求。
[0053] 結(jié)合第二個(gè)方面的第三種可能的實(shí)現(xiàn)方式,在