• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    一種面向微內核操作系統(tǒng)的權能機制設計

    2023-11-10 15:11:10張藝川鄒仕洪
    小型微型計算機系統(tǒng) 2023年11期
    關鍵詞:共享內存權能內核

    姜 博,張藝川,易 力,王 雷,姜 哲,鄒仕洪,3

    1(北京航空航天大學 計算機學院 軟件開發(fā)環(huán)境國家重點實驗室,北京 100191)

    2(元心信息科技集團有限公司,北京 100013)

    3(北京郵電大學 網絡空間安全學院,北京 100876)

    1 引 言

    在微內核架構中,權能(Capability)是對進程所擁有的資源的一種描述,是一種無法偽造的權威令牌[1].權能的概念最早在1966年被提出,用來解決多用戶系統(tǒng)中的權限問題[2].在實際應用中,訪問控制列表(Access Control List)是一種廣泛使用的操作系統(tǒng)權限管理機制.Linux、Windows等經典操作系統(tǒng)與INTEGRITY[3]、PikeOS[4]等商用操作系統(tǒng)均使用該機制來實現(xiàn)權限控制,但該機制不能解決如混淆代理人(Confused deputy)[5]的權限泄露問題.相比于訪問控制列表,基于權能的系統(tǒng)在權限的劃分上粒度更細,每個進程在每個資源上擁有的權限都會通過權能詳細列出;此外,基于權能的系統(tǒng)在分配權能時遵循最小特權原則[6],從而使其得以解決上述問題.

    一個標準的權能結構一般由兩個部分組成:該權能描述的資源的相關信息(如地址、類型等)和持有該權能的進程所獲得的對該資源的權限集合[7].為了保證每一個權能結構唯一不變地確定一個資源對象,該結構中的指向資源的指針被設計為自創(chuàng)建之后便無法修改.因此,在使用權能機制的操作系統(tǒng)中,進程在對資源執(zhí)行操作前必須首先獲得與其綁定的權能,并通過該權能提供的調用完成對資源的操作.通過這種方式,進程可以訪問的資源被限制在其權能空間中,不會超出其完成任務所必需的資源范圍,從而實現(xiàn)了權限細粒度化與特權最小化,響應了用戶對系統(tǒng)安全性的需求[8,9].

    MOS是一個運行在ARMv8上的微內核操作系統(tǒng),它是北京航空航天大學操作系統(tǒng)教學科研團隊設計完成的,用于支撐北航操作系統(tǒng)實驗教學和實時領域的科研工作.MOS內核中提供了內存管理、進程調度、中斷處理、進程間通信以及一些基礎的系統(tǒng)調用,但是它仍然缺乏完善的權限管理機制.本工作針對此問題,首先對MOS系統(tǒng)中的內核對象進行分類處理,統(tǒng)計各個對象的類型,進而定義出各類型的對象所對應的權能類型;之后在內核中添加了權能的訪問權限體系與訪問控制功能,并實現(xiàn)了權能的創(chuàng)建、構造、復制、移動、刪除這五種基本操作;此外還在用戶態(tài)設計了一套進程間通信接口,并實現(xiàn)了一個進程服務器,以此為其他用戶態(tài)進程提供權能授予和撤銷的相關接口;最后基于實現(xiàn)好的權能機制,為用戶態(tài)應用程序提供了動態(tài)內存管理、內存共享、消息隊列等一系列標準C庫函數接口.

    2 相關工作

    本章將介紹操作系統(tǒng)中典型的權能系統(tǒng)設計,以及權能系統(tǒng)在物聯(lián)網、區(qū)塊鏈等方向上的相關工作..

    seL4[10]操作系統(tǒng)是L4微內核操作系統(tǒng)家族的一員,也是第一個經過了形式化驗證,從數學的角度驗證了其安全性的操作系統(tǒng),其在車載系統(tǒng)[11]、航空電子系統(tǒng)[12]、嵌入式[13]等方向有著良好的應用前景.微內核操作系統(tǒng)最初被提出,是為了解決宏內核操作系統(tǒng)的可靠性與穩(wěn)定性問題:宏內核操作系統(tǒng)將驅動等服務進程全部包括在內核中,使得系統(tǒng)內核容易崩潰;而在微內核系統(tǒng)中系統(tǒng)內核不會受到服務進程出錯的影響,從而在可靠性與穩(wěn)定性上優(yōu)于宏內核[14].但在早期的微內核(如Mach和MINIX)中,進程間通信機制遠遠慢于宏內核中的系統(tǒng)調用機制;當時,Unix系統(tǒng)中一次系統(tǒng)調用大約需要10μs,而微內核中的進程間通信則需要100μs[15].不過,隨著系統(tǒng)技術的進一步發(fā)展,通信開銷的問題在L4等微內核系統(tǒng)中得到了解決,而如何提升安全性成為了微內核的新的命題.作為第一個被形式化驗證的操作系統(tǒng),seL4使用了權能機制來實現(xiàn)其安全性.在seL4中,權能被分為通信節(jié)點、虛擬地址空間、物理頁幀等多種類型,每個用戶進程擁有其獨立的權能空間,規(guī)定了該進程能夠訪問的資源集合;seL4還為各應用程序提供了一套包括權能復制、移動、刪除等操作的權能操作接口[16].此外,seL4中所有的權能通過一個叫做權能派生樹(Capability Derivation Tree)的結構來進行追蹤:在啟動時,系統(tǒng)中僅存在一大塊無類型的權能;隨著權能的不斷派發(fā),最開始的無類型權能被不斷的切分、派生,并最終轉型為應用中的各類權能.

    Barrelfish是一個面向異構與多核體系的操作系統(tǒng),由微軟劍橋研究院與蘇黎世理工大學共同提出[17].Barrelfish同樣采用了權能結構來保障操作系統(tǒng)的安全性.在Barrelfish中,權能的類型包括虛擬內存、未被映射的物理內存、內核中的數據控制塊等;與seL4不同,Barrelfish規(guī)定了一套樹狀的轉型規(guī)則,滿足該規(guī)則的兩類權能之間可以相互轉換.在權能的組織上,Barrelfish與seL4類似,采用了其將權能集合作為樹節(jié)點的機制,并在每個進程中保存其權能對應的樹的根節(jié)點地址.在權能的查找上,Barrelfish使用了兩級查找機制:樹節(jié)點中存放權能表的表項地址,表項中存放所對應的權能地址.在查找進程是否擁有對應權能時,操作系統(tǒng)需要從根節(jié)點向下查找,直至找到對應權能或確定查找失敗為止.

    RedLeaf[18]是使用Rust語言編寫的、為了研究操作系統(tǒng)構成受語言特性的影響而搭建的操作系統(tǒng).該操作系統(tǒng)使用Rust本身的語言特性而非物理地址分配實現(xiàn)了進程之間的隔離;基于這種隔離方式,RedLeaf抽象出了域(domain)這一概念,并在域之間實現(xiàn)了信息隔離、錯誤隔離等安全措施.在Rust語言中,特征(trait)是對類型需要實現(xiàn)的一系列方法的描述.為了實現(xiàn)域之間的交互,RedLeaf將特征作為對域所提供接口的描述,并通過在不同域之間傳遞特征來實現(xiàn)域接口的暴露;而為了保證域之間交互的安全性,RedLeaf引入了權能系統(tǒng),并使用權能包裹在域之間傳遞的特征或其他對象,以權能的傳遞替代特征的傳遞.通過這種權能傳遞的方式,RedLeaf可以跳過內核的監(jiān)管并進一步提高跨域調用的效率,實現(xiàn)用戶進程直接調用驅動等高效操作.

    除了在通用的操作系統(tǒng)中管理權限,權能系統(tǒng)還可以解決物聯(lián)網場景中的安全問題.在物聯(lián)網場景中,權限管理系統(tǒng)需要將不同架構、不同操作系統(tǒng)、不同職能的眾多物理設備組織起來,并對多種多樣的調用進行鑒權,傳統(tǒng)方法難以勝任;而權能系統(tǒng)的細粒度使其在物聯(lián)網領域具有較大的優(yōu)勢.因此,近年來有一些新型物聯(lián)網權限管理系統(tǒng)被提出[19,20],這些系統(tǒng)以權能的方式對不同物聯(lián)網設備的各類操作進行詳細地管理,在權限劃分粒度、執(zhí)行效率上要優(yōu)于傳統(tǒng)的權限管理系統(tǒng).

    在分布式系統(tǒng)中,權能系統(tǒng)還可以與區(qū)塊鏈技術相結合,進一步提升其安全性.傳統(tǒng)的訪問控制系統(tǒng)一般為集中式,在分布式系統(tǒng)中遇到單點故障、數據泄露等問題;而區(qū)塊鏈由于天然具有分布的性質,可以解決集中式系統(tǒng)的問題,但其不能存儲大規(guī)模的數據.為了解決分布式系統(tǒng)中訪問控制的問題,一些工作致力于使用在系統(tǒng)中同時使用區(qū)塊鏈與權能[21,22],以充分利用權能系統(tǒng)的細粒度特性與區(qū)塊鏈的分布性、不可篡改性,從而在分布式系統(tǒng)中構建高效的訪問控制系統(tǒng).

    此外,通過與RISC指令集的融合,權能系統(tǒng)也可以通過與傳統(tǒng)的頁表結構相結合,在硬件層面做到字節(jié)級別的內存保護,并實現(xiàn)錯誤隔離[23].由于這種權能體系結構是通過擴展指令集、增加協(xié)處理器等硬件層面的措施來完成的,其在提供全面、可量化的訪存保護的同時對大部分已有程序表現(xiàn)出良好的兼容性,并已出現(xiàn)眾多衍生工作[24,25].

    由于系統(tǒng)結構的差異性,seL4與Barrelfish的權能設計方案較為重量級,RedLeaf對Rust語言特性高度依賴,使得已有的設計很難直接應用在MOS微內核操作系統(tǒng)上.本工作將借鑒上述操作系統(tǒng)權能設計的思想,針對MOS微內核操作系統(tǒng)設計輕量級的權能機制.

    3 MOS系統(tǒng)的權能機制設計

    支持權能機制的MOS架構如圖1所示.為了在MOS中建立權能機制,本工作首先設計出MOS中可能出現(xiàn)的各種權能類型,并構建了權能基本操作與權能訪問控制兩個模塊.之后,為了將權能機制投入到實際應用中,本工作還基于權能機制重構了動態(tài)內存管理、共享內存等Libc庫模塊,并在用戶態(tài)設立了進程服務器與對應的IPC接口來滿足用戶程序對權能相關服務的需求.

    圖1 包含權能機制的MOS架構圖Fig.1 MOS architecture with capability support

    3.1 權能類型和基本操作的設計

    在權能系統(tǒng)的建設過程中,本工作首先對MOS操作系統(tǒng)所提供的內核資源進行了分類,并為每一種內核資源給出了與之相對應的權能類型;之后,本工作設計并提供了創(chuàng)建、鑄造、拷貝、移動、刪除5種調用作為權能的基本操作,并將MOS提供的調用轉化為對權能的基礎操作的調用,從而完成在權能系統(tǒng)下內核資源的訪問;最后,本工作在MOS的內核中加入了權能的尋址算法,并且在執(zhí)行操作前隱式地對權能所攜帶的權限位進行檢驗,從而實現(xiàn)了MOS上的權能訪問控制功能,同時又使得權能系統(tǒng)在內核中的復雜邏輯對應用程序而言完全透明.

    3.1.1 權能的類型設計與結構組織

    為了在MOS中實現(xiàn)多種類型的權能,本工作將權能結構定義為如圖2所示的cte結構體:表示權能類型的type字段,表示該權能所對應權限的rights字段,以及根據權能類型不同而實現(xiàn)不同的權能關聯(lián)對象信息的capability_u字段.

    圖2 權能結構示意圖Fig.2 Structure of capability

    本工作中設計的所有權能類型如表1所示.對于每一種權能類型,其對應的權能實現(xiàn)中都記錄了其描述的對象的地址、與之關聯(lián)的其他權能等信息,為權能的相關操作做好準備.此外,在所有權能中,CNode類型的權能較為特殊;這類權能與其對應的內核CNode資源一同完成系統(tǒng)中權能存儲結構的組織.而根據其對應的內核資源在存儲結構中的位置,CNode類型的權能又可以被分為L1CNode、L2CNode兩種.與Barrelfish的實現(xiàn)類似,MOS中的每個進程使用一棵深度為2的CNode樹來描述其擁有的權能;L1CNode,L2CNode分別對應該樹的根節(jié)點與次級節(jié)點.具體實現(xiàn)上,每個進程的進程控制塊中都會存放其內核中對應的L1CNode的地址,代表該進程的權能空間(Capability Space);內核中,每個CNode對象通過提供多個可以存放權能的槽(slot)來完成對權能的組織,L1CNode的槽中存放L2CNode類型的權能,L2CNode的槽中才存放進程的具體權能.需要注意的是,每個L2CNode中只能存放同種類型的權能;L2CNode允許存放的權能類型由其對應的槽的類型所決定.

    表1 MOS中的權能類型Table 1 Capability types in MOS

    3.1.2 權能基本操作的設計

    作為一種無法偽造但可以交換的令牌,權能的任何操作必然需要內核的參與,否則無法保證其不可篡改性;除此之外,內核還必須為應用程序提供相對應的接口,使得應用程序之間可以進行權能的交換;最后,內核中還必須提供一組給予、收回權能的接口,來滿足安全系統(tǒng)的基本要求[26].據此,本工作共定義了以下幾種與權能相關的基本操作:

    1)權能的創(chuàng)建

    權能的創(chuàng)建算法接受要創(chuàng)建的權能類型T、權能的權限r,以及該權能存放的L2CNode的地址S.在創(chuàng)建之前,算法首先檢查地址S是否合法;在確認合法之后,算法會在S對應的L2CNode中分配一個空位存放新創(chuàng)建的權能,并初始化其權限、類型等信息,最后返回該權能的地址;若L2CNode中無法再分配空位,則直接返回.其具體步驟在算法1中給出.

    算法1.權能創(chuàng)建算法

    輸入:權能類型T,權能存放的L2CNode的地址 S,權能權限r

    輸出:創(chuàng)建好的權能地址;若創(chuàng)建失敗輸出為空

    1.if(S == NULL)∨(S.cap.u.type != L2CNode)then

    2.returnNULL

    3.endif

    4. slot=alloc_slot(S)

    5.ifslot == NULLthen

    6.returnNULL

    7.endif

    8. struct cte* cap =(struct cte *)slot

    9. 根據類型T初始化cap指向的對象信息

    10. 將權能cap的權限初始化為r

    11.returncap

    2)權能的鑄造

    權能的鑄造是指基于一個已有權能創(chuàng)建一個新的權能,且該新權能的權限范圍不超出原權能.本工作中的鑄造算法需要源權能空間地址S,原權能地址src_addr,目標權能空間D,目標權能地址dest_addr以及目標權能的權限r作為輸入.算法首先檢查輸入的參數,在S或D為空的情況下直接返回;之后,算法通過尋址找到源與目標權能地址所對應的源槽地址src_slot與目標槽地址dest_slot,并檢查其是否合法;此外,算法還檢查了目標權能的權限是否超出了原權能的權限.在檢查完畢之后,算法最后將源權能拷貝至dest_slot處,并設置其權限為r.其具體流程如算法2所示.

    算法2.權能鑄造算法

    輸入:源權能空間地址S,源權能地址 src_addr,目的權能空間地址D,目的權能地址 dest_addr,目的權能權限r

    輸出:無

    1.if(S == NULL)∨(D == NULL)then

    2.return

    3.endif

    4. src_slot=mos_cap_resolve_addr(S,src_addr)

    5. dest_slot=mos_cap_resolve_addr(D,dest_addr)

    6.if(src_slot == NULL)∨(dest_slot != NULL)∨(r不是src_slot 中權能權限的子集)then

    7.return

    8.endif

    9. 將src_slot中的權能拷貝至dest_slot

    10. 將dest_slot中的權能權限設置為r

    3)權能的復制

    權能復制操作與權能的鑄造操作過程類似.權能復制函數以源權能空間地址S、源權能地址src_addr,目標權能空間D、目標權能地址dest_addr為輸入;該算法首先檢查S與D的合法性,再通過尋址算法找到權能地址所對應的源槽地址src_slot與目標槽地址dest_slot,同時檢查其是否合法.滿足以上條件后,算法將權能從src_slot拷貝至dest_slot,并保證拷貝前后的權能權限一致.

    4)權能的移動

    權能的移動過程需要將權能從一個槽移動到另一個槽中,并且保證移動后源槽中的權能被刪除.該算法的具體流程如與復制算法基本一致,但在完成拷貝之后需要將原位置的權能徹底刪除.

    5)權能的刪除

    權能刪除算法的詳細過程如算法3所示.該算法需要接受權能空間地址base與其中待刪除權能的地址addr作為輸入.算法首先對base地址進行檢驗,確認其合法后在其中查找權能地址addr所對應的槽地址.若成功查找到,則算法刪除槽中存放的權能;否則傳入的參數不合法,直接返回.

    算法3.權能刪除算法

    輸入:權能空間地址base,權能地址 addr.

    輸出:無

    1.ifbase == NULL then

    2.return

    3.endif

    4. slot=mos_cap_resolve_addr(base,addr)

    5.ifslot != NULLthen

    6. 刪除slot中存放的權能

    7.endif

    3.1.3 權限的設計和訪問控制

    MOS中,權能所持有的權限共分為5類;這些權限又可根據是否與對象有關分為兩種.其具體分類如表2所示.需要注意的是,其中的可復制權限表示可以對某個權能進行復制,而可深拷貝權限則表示可在復制權能的同時復制一個對象的副本.

    表2 MOS中的權限類型Table 2 Authorities in MOS

    根據權能的類型不同,權能可持有的權限類型也不同.在MOS中,只有Endpoint,Rgn,MQ 這3種權能能夠持有上述的權限;其具體對應關系如表3所示.

    表3 權能與權限的對應關系Table 3 Relationship between capability and authorities

    為了實現(xiàn)訪問控制功能,應用程序只有在向內核申請資源時才可設置對應權能的權限;任何通過復制、鑄造等方式從其他進程處得到的權限都不會超出原始范圍.此外,應用程序若需要訪問內核中的資源,則必須將之前獲得的相關權能一并傳入內核,使得內核得以通過權限位校驗來確認是否允許該進程訪問相應資源.在這種情景下,由于進程不能未經允許獲取其他進程資源的權能,從而無法訪問其他進程的資源,保證了系統(tǒng)的安全性.

    3.2 基于權能的Libc庫設計

    在實現(xiàn)了基礎的權能操作之后,為了讓應用程序的所有操作經過權能系統(tǒng)的檢驗,MOS中提供給用戶進程的接口需要以權能調用的方式重新編寫.為了統(tǒng)一各類調用形式,本工作中所有的權能調用的形式為,其中CapType為權能類型,InvocLabel為該調用的調用標識,后面的部分為該調用所需的其他參數.

    本工作主要為用戶提供了3類經過重構的接口:動態(tài)內存管理、共享內存和消息隊列.

    3.2.1 動態(tài)內存管理的設計

    動態(tài)內存是隨進程在運行中向系統(tǒng)發(fā)出申請、釋放等請求而動態(tài)變化的內存區(qū)域.本工作中提供了4個有關動態(tài)內存管理的接口:malloc、realloc、calloc和free函數.

    1)malloc

    malloc函數是從系統(tǒng)中申請動態(tài)內存的關鍵函數;其從用戶進程處接受動態(tài)申請的內存大小為參數,并向操作系統(tǒng)申請對應大小的內存,并在成功時返回申請到的內存的起始地址.

    在POSIX標準下,malloc函數需要使用brk系統(tǒng)調用進行實現(xiàn)[27],但這么做會產生兩個問題:1)容易因內存不斷回收釋放而產生內存碎片;2)不斷的通過系統(tǒng)調用進入內核態(tài)有可能造成效率的下降.因此,本工作選擇以內存池的方式對malloc函數進行了實現(xiàn),即在用戶態(tài)維護一個容納多塊內存的內存池,在程序申請內存時首先在內存池中進行查找,若存在符合要求的空閑內存則直接分配給該程序;否則再向內核申請一塊對應大小的內存分配給程序.而在程序進行內存釋放時,相關函數只需要在內存池中更改對應的標記,從而減少內存碎片并提高內存申請調用的速度.

    基于內存池方案,并使用權能重構的malloc函數實現(xiàn)如圖3所示.malloc函數在被調用時首先會將請求的內存大小與頁面大小4KB進行對齊,計算出實際需要分配的內存大小;之后,該函數會遍歷內存池,尋找合適大小的未分配內存塊;若查找成功,則將該內存塊從內存池中移除并準備將其返回給應用程序.若內存池中不存在相匹配的內存塊,則malloc函數需要通過系統(tǒng)調用向內核申請對應大小的內存.

    圖3 基于權能機制的malloc流程Fig.3 Workflow of malloc in capability mechanism

    在系統(tǒng)調用過程中,內核首先需要為該段動態(tài)內存分配一塊Rgn類型的權能,并將該權能加入調用進程的權能空間中;之后,內核還需要根據內存大小申請一定數量的Page類型的權能,并同樣加入權能空間中;最后,內核將分配的物理頁加入頁表并映射到用戶空間,同時上移brk指針并返回.此外,系統(tǒng)調用后,用戶態(tài)程序也必須上移其brk指針.

    在將分配好的內存返回之前,malloc函數還會檢查堆頂對應的內存塊是否空閑.若該內存塊空閑,則malloc函數會通過系統(tǒng)調用進入內核態(tài),在內核態(tài)中完成Rgn、Page兩種權能的刪除、物理內存的釋放以及brk指針的下移,來完成該部分內存的釋放工作.

    2)free

    free函數在動態(tài)內存管理系統(tǒng)中負責對動態(tài)申請內存的釋放.該函數接受一個指針為參數,并嘗試釋放該指針所指向的內存區(qū)域.

    由于使用了內存池機制,free函數的實現(xiàn)相對簡單.該函數會首先對傳入的指針進行判斷,在確認該指針指向一塊動態(tài)分配內存之后,該函數會去查找對應的動態(tài)內存,將其狀態(tài)標記為空閑,并加入內存池的空閑鏈表中.

    3)calloc

    calloc函數接受兩個參數:元素個數nelem與元素大小elsize,并向系統(tǒng)申請一塊nelem×elsize大小的內存,并保證該塊內存已被初始化為0.

    在MOS中,calloc函數的實現(xiàn)使用了malloc函數;首先根據參數計算申請的空間大小,將其傳入malloc函數,并將malloc函數返回的空間清零,最后返還給用戶程序.

    4)realloc

    realloc函數接受動態(tài)內存指針ptr與新的內存大小size,嘗試將ptr指針所指的動態(tài)內存的大小更改至size,并返回指向更改后的動態(tài)內存的指針.

    由于邏輯相似性,realloc函數的實現(xiàn)同樣使用了malloc函數.realloc函數首先對傳入的新內存大小與原有內存大小進行比較,若后者小于等于前者,則不做任何修改,直接返回原指針;若后者大于前者,則需要調用malloc函數分配一塊新的內存,并將舊的內存中的內容拷貝過去,最后調用free函數釋放舊內存.

    3.2.2 共享內存的設計

    共享內存一般指多個進程在系統(tǒng)的支持下將不同虛地址空間中的地址映射到同一物理頁上,從而使得多個進程能夠訪問同一內容.由于其讀寫不需要系統(tǒng)內核的額外操作,共享內存的效率要高于管道、消息隊列等通信工具,是一種高效的進程間通信方式.

    在MOS中,共享內存的實現(xiàn)主要基于兩個結構體:內核態(tài)共享內存信息結構體kshm與用戶態(tài)基本信息結構體shm.kshm結構體中保存了該結構體對應的共享內存的大小、使用該共享內存的進程數,以及該共享內存的權能等信息;而shm結構體中保存了共享內存基址、共享內存大小等基礎信息.之所以在用戶態(tài)維護記錄了共享內存基本信息的shm結構體,是為了相關函數能夠在內存分配的過程中在用戶態(tài)同步更新brk指針,以防止動態(tài)分配內存機制與共享內存分配機制之間發(fā)生沖突.

    MOS共提供了3個共享內存操作函數:shmget,shmat和shmdt.

    1)shmget

    shmget調用用來根據約定好的索引值獲取相對應的共享內存的標識符.該函數接受3個參數:約定的共享內存結構體索引值key,共享內存大小size和標記位shmflg.

    shmget函數首先會在用戶態(tài)根據索引值key查詢共享內存記錄;若該key在用戶態(tài)有對應記錄,則返回該記錄;若不存在對應記錄,則將其傳入內核進行進一步查詢.如果在內核中也查詢不到對應的記錄,程序會在內核中新建一個kshm結構體,使用size與shmflg對其各個字段進行初始化,并將其權能指針rgn_cte字段置NULL;返回到用戶態(tài)后,函數會將信息同步到對應的shm結構體中,并最終返回其標識符.

    2)shmat

    shmat函數用來將指定的共享內存映射到傳入的虛擬地址上,從而使得共享內存可以被程序直接使用.

    shmat函數接受共享內存標識符shmid,目標虛擬地址shmaddr和標記位shmflg,并返回映射后的共享內存起始地址.接受參數后,函數首先檢查shmaddr對應的共享內存是否已經被綁定;若已被綁定則直接返回其對應的地址.否則,shmat會通過系統(tǒng)調用進入內核態(tài),并建立類型為Rgn的權能r供進程使用.在此之后,內核態(tài)程序會找出shmid對應的kshm結構體t并檢測是否有其他進程已經映射了該共享內存:若沒有進程映射過,內核需要申請對應的Page類型的權能,完成頁表映射,并將該權能寫入權能空間,最終將權能r保存到t中;否則只需要查找結構體t中的權能數組,映射t中的虛擬地址與該權能所對應的物理地址,再將r寫入t中即可.完成以上操作后,程序返回用戶態(tài),在shm結構體中進行相應的記錄,最后返回起始地址.

    3)shmdt

    shmdt函數負責無效化通過shmat函數與進程綁定的共享內存.區(qū)別于其他系統(tǒng),MOS的shmat函數中涉及到了權能的創(chuàng)建;因此在shmdt中這些權能需要被正確地銷毀.

    shmdt函數接受待無效化的共享內存地址addr作為參數.shmdt首先檢驗addr是否存在,之后將其通過系統(tǒng)調用傳入內核.在內核中,程序先通過addr查找權能空間中的對應權能;再在kshm結構體中查找包含該全能的記錄.若查找成功,則將kshm結構體中的權能銷毀,取消頁表映射并返回用戶態(tài);用戶態(tài)程序再完成用戶態(tài)的清理工作,最后返回應用程序.若上述查找過程失敗,則說明傳入的地址無效或者權能無效,程序直接返回.

    3.2.3 消息隊列的設計

    除去共享內存外,消息隊列也是一種常見的進程間通信手段.消息隊列是一種可在進程間共享的公共資源,不同的進程可以打開同一消息隊列并接收或發(fā)送消息,從而達到通信的目的.在MOS中,消息隊列被設計為一種獨立于所有進程的內核對象,并通過MQ類型的權能進行管理.除了全能之外,MOS中與消息隊列有關的結構還有3個:消息隊列結構體kmq_header(存放使用標識、消息隊列索引、權能指針等),消息隊列屬性結構體kmq_attr(存放最大消息數、消息大小等)和消息隊列節(jié)點結構體kmq_node(存放消息、消息的優(yōu)先級等).其具體組織結構如圖4所示.

    圖4 消息隊列結構示意圖Fig.4 Structure of message queue

    修改后的MOS提供了一套完整的基于權能的消息隊列接口,包括mq_open,mq_close,mq_unlink,mq_receive,mq_send等眾多函數.以下對消息隊列的主要功能所設計的函數進行介紹.

    1)消息隊列的獲取

    用戶程序如果想要新建或者打開消息隊列資源,則需要調用mq_open接口.在MOS中,mq_open函數被設計為只接受3個參數:消息隊列的鍵值key,標志位oflag,以及消息隊列的屬性attr(僅在新建隊列時有效).

    被調用時,mq_open函數首先根據傳入的key進行查找,若成功找到則增加該消息隊列的計數器并返回;若未能找到對應消息隊列,則需要根據oflag與attr新建一個MQ類型的權能與kmq_header結構體,將其與key互相關聯(lián)并返回.

    2)消息隊列的銷毀

    MOS中,與消息隊列銷毀相關的接口主要有兩個:mq_close和mq_unlink.其中前者負責關閉消息隊列,后者則負責銷毀無用的消息隊列.

    mq_close函數接受一個消息隊列描述符作為參數.該函數會根據描述符查詢到消息隊列的信息,并檢查當前消息隊列打開數是否為1;若為1,則調用mq_unlink函數將其刪除;否則將其打開計數器減一并返回.

    mq_unlink同樣接受一個消息隊列描述符作為參數.查找到消息隊列后,如果該消息隊列打開數不為1,則直接返回;否則,該函數會釋放該消息隊列資源以及該消息隊列中所含的所有消息節(jié)點資源,再從調用進程的權能空間中刪除對應的消息隊列權能,最終返回.

    3)消息的發(fā)送與接收

    消息隊列中消息的發(fā)送與接收分別依賴于兩個接口:mq_send與mq_receive.

    mq_send接口接受一個消息隊列描述符,一條消息以及消息的優(yōu)先級;該函數在調用時首先會通過傳入的消息隊列描述符獲取對應的權能,并檢查進程是否具有可寫權限;確認寫入操作合法之后,該函數還會對消息的合法性進行校驗;通過所有檢驗之后,函數在內核中新建一個消息節(jié)點,將其加入消息隊列并返回.

    mq_receive接口則主要接受一個消息隊列描述符,以及消息存放位置等其他信息;與mq_send類似,該函數也會首先獲取權能并檢查寫權限,并根據消息隊列信息檢查參數的合法性;在確認合法之后,該函數會遍歷消息隊列節(jié)點以找到優(yōu)先級最高的消息,將該消息以及相關信息一并返回.

    3.3 IPC機制與進程服務器

    MOS是一個微內核系統(tǒng);這使得MOS的內核中只包括最基礎的頁表映射、進程管理等功能,而其他大部分的功能的實現(xiàn)均依賴于用戶態(tài)程序.因此,MOS的用戶態(tài)中有一些進程需要為其他用戶進程提供服務,從而實現(xiàn)操作系統(tǒng)的全部功能;這些進程被稱為進程服務器.為了充分利用微內核結構的優(yōu)勢,同時為用戶態(tài)進程提供與權能相關的一眾接口,本工作為MOS中添加了一套原生的IPC機制,并基于該IPC機制設計了一個處理權能相關調用的進程服務器.

    為了存放通信的內容,本工作在進程控制塊中加入了包括msg與caps兩個字段的ipc_buffer結構,其中msg數組存放IPC傳遞的參數,而caps數組則負責傳遞權能指針;用戶態(tài)程序可通過系統(tǒng)調用來獲取本結構中的信息.

    在上述結構的基礎上,本工作設計了如表4所示的一套接口,包括了測試連接、監(jiān)聽、請求發(fā)送等接口,以此來實現(xiàn)進程服務器的全部功能.

    表4 MOS中的進程服務器接口Table 4 Server interfaces in MOS

    為了實現(xiàn)消息的發(fā)送與接收,MOS系統(tǒng)中的用戶進程通過Endpoint資源來記錄其發(fā)送或接收的請求;同時,內核中設計了全局的發(fā)送Endpoint鏈表與接收Endpoint鏈表,用來存放因IPC發(fā)送或接收而被阻塞的進程所提交的Endpoint.當用戶進程進行發(fā)送或接收時,若對方尚未準備好,則用戶進程的Endpoint會被保存到列表中,同時用戶進程被阻塞;但為了保證進程服務器能夠對多個進程進行正常服務,在進程服務器進行接收操作但沒有進程向其發(fā)送請求時,服務器會讓出時間片而非被阻塞.

    用戶程序向進程服務器發(fā)送請求的詳細過程如圖5所示.應用程序首先需要向內核申請Endpoint;在得到該Endpoint對應的權能之后,應用程序通過系統(tǒng)調用修改自身的ipc_buffer,并先后調用send與recv來向進程服務器發(fā)送請求并得到請求結果.在內核中,send與recv兩次調用所提供的Endpoint會被分別加入發(fā)送鏈表與接收鏈表,同時用戶程序被阻塞,直至進程服務器完成該請求的相應.當進程服務器發(fā)現(xiàn)該請求后,對應的Endpoint會被從鏈表中移除;服務器進程根據Endpoint信息通過系統(tǒng)調用獲得用戶程序在ipc_buffer中儲存的調用參數,根據調用信息進行處理之后將結果放入自身的ipc_buffer中,通過send調用返回給用戶程序.

    圖5 IPC請求流程示意圖Fig.5 Sequence diagram of IPC request

    4 實驗評估

    本工作針對實現(xiàn)了權能機制的MOS操作系統(tǒng),從權能系統(tǒng)的安全性與權能系統(tǒng)的效率兩方面對其進行了評估.

    4.1 實驗環(huán)境及準備

    該本工作的試驗環(huán)境為使用Qemu仿真器模擬的ARMv8架構環(huán)境;該Qemu仿真器運行在Ubuntu操作系統(tǒng)中.作為試驗對象的MOS系統(tǒng)使用aarch64-elf-gcc進行編譯.其具體參數如表5所示.

    表5 實驗環(huán)境Table 5 Experiment environment

    4.2 實驗結果與分析

    4.2.1 權能的共享與撤銷

    算法4.權能共享方測試樣例

    輸入:無

    輸出:無

    1. cap=vka_alloc_rgn(size)//初始化權能

    2. new_cap=cl_sendcap_rgn(0x1111,cap,0)//分配權能

    3. cl_revoke_rgn(new_cap)//釋放權能

    4. mos_yield()

    5. new_cap=cl_sendcap_rgn(0x2222,cap,CAP_RW)

    6. cl_revoke_rgn(new_cap)

    7. mos_yield()

    8. new_cap=cl_sendcap_rgn(0x3333,cap,CAP_COPY)

    9. cl_revoke_rgn(new_cap)

    10. mos_yield()

    11. new_cap=cl_sendcap_rgn(0x4444,cap,CAP_DEEPCOPY)

    12. cl_revoke_rgn(new_cap)

    算法5.權能接收方測試樣例

    輸入:無

    輸出:無

    1. cap=cl_recvcap_rgn(0x1111)//接收分享權能

    2. addr=mos_rgn_map(cap)//讀寫測試

    3. mos_yield()

    4. cap=cl_recvcap_rgn(0x2222)

    5. addr=mos_rgn_map(cap)

    6. mos_yield()

    7. addr=mos_rgn_map(cap)

    8. mos_yield()

    9. cap=cl_recvcap_rgn(0x3333)

    10. slot=mos_cnode_allocslot(disp,SLOT_RGN)

    11. //拷貝測試

    copy_cap=mos_cnode_copy(cap,SLOT_RGN,slot)

    12. mos_yield()

    13. slot=mos_cnode_allocslot(disp,SLOT_RGN)

    14. copy_cap=mos_cnode_copy(cap,SLOT_RGN,slot)

    15. mos_yield()

    16. cap=cl_recvcap_rgn(0x4444)

    17. slot=mos_cnode_allocslot(disp,SLOT_RGN)

    18. //深拷貝測試

    copy_cap=mos_cnode_deepcopy(cap,SLOT_RGN,slot)

    19. mos_yield()

    20. slot=mos_cnode_allocslot(disp,SLOT_RGN)

    21. copy_cap=mos_cnode_deepcopy(cap,SLOT_RGN,slot)

    算法4與算法5分別展示了本實驗為驗證權能系統(tǒng)有效性而編寫的兩段測試代碼.在實驗過程中,這兩段代碼分別運行在兩個用戶進程中;其中共享方代碼負責向內核申請創(chuàng)建Rgn類型的權能,其先后將無權限、可讀寫、可拷貝、可深拷貝四種權限不同的權能分享給另一個進程,并在完成對應測試后撤銷該權能;而接收方則負責不斷地接收分享的權能,并在權能撤銷前與撤銷后不斷的嘗試使用權能進行讀寫、拷貝、深拷貝操作,以測試權能系統(tǒng)的有效性.

    實驗得到的結果如表6所示.在讀寫測試中,接收方只有在擁有讀寫權能的前提下才能夠進行讀寫操作;而在拷貝操作測試中只有接收方進程的權能被撤銷之前才能進行對應操作,符合預期.

    表6 測試結果Table 6 Test result

    4.2.2 權能系統(tǒng)的性能測試

    本工作在MOS系統(tǒng)中共實現(xiàn)了Page、CNode、Endpoint、Pcb、Rgn、MQ 6大類提供具體調用的權能,不同的權能類型對應的調用種類也不盡相同;本節(jié)實驗借助ARMv8中全局系統(tǒng)計數器[28],在函數的入口與出口分別全局系統(tǒng)計數器中的值進行讀取,從而測量MOS中實現(xiàn)的各類權能調用的性能.

    Page,Endpoint,Rgn 3種權能的調用周期數如圖6所示;CNode,Pcb,MQ 3種權能的調用周期數如圖7所示.在6類權能調用中,對應進程控制塊的Pcb與對應權能組織結構的CNode兩類權能調用相比之下較為基礎,因而消耗周期較少;而涉及內存管理機制的Rgn類型權能調用需要維護內存結構,其內部邏輯較為復雜,因而所消耗周期最多.

    圖6 Page,Endpoint,Rgn類型權能調用開銷Fig.6 Overhead of calls on Page,Endpoint and Rgn Capabilities

    圖7 CNode,Pcb,MQ類型權能調用開銷Fig.7 Overhead of calls on CNode,Pcb and MQ capabilities

    從總體來看,大部分的權能調用的時鐘周期數都在7500以下,而頁表、進程控制塊等底層調用的時鐘周期數基本在5000以下,相對較快;Rgn類權能調用雖然經過一定的優(yōu)化,但在所有調用中開銷最高;此外,Endpoint類調用中的endpoint_send函數的消耗周期數均明顯高于同類其他調用,這是因為這該函數流程中進行了較多的系統(tǒng)調用,在基礎功能之外增加了一定的周期消耗.

    5 結 論

    本工作在ARMv8的多核環(huán)境下,在微內核操作系統(tǒng)MOS上設計并實現(xiàn)了基于權能的安全系統(tǒng).本工作首先對MOS的內核對象進行了分類,并根據各類權能的具體作用設計了其對應的權能調用與權能權限;之后,本工作通過實現(xiàn)權能的創(chuàng)建、鑄造、復制、移動、刪除5種基本操作與尋址算法,建立起了基礎的權能系統(tǒng);此外,本工作對一部分的Libc接口基于權能體系進行了重寫,將用戶程序的相關操作置于權能系統(tǒng)監(jiān)督之下;最后,本工作還在MOS中設計了進程服務器,使得應用程序可以通過一套IPC接口來獲得權能的相關服務.完成設計之后,本工作驗證了權能系統(tǒng)維護系統(tǒng)安全的有效性,并對與權能相關的一系列操作的性能進行了測試與分析.

    猜你喜歡
    共享內存權能內核
    五指成拳 靶向發(fā)力 拓展股權權能 助力富民增收
    萬物皆可IP的時代,我們當夯實的IP內核是什么?
    強化『高新』內核 打造農業(yè)『硅谷』
    宅基地資格權:原則遵循、性質定位和權能闡述
    上海房地(2021年12期)2021-05-23 12:36:22
    通過QT實現(xiàn)進程間的通信
    基于嵌入式Linux內核的自恢復設計
    Linux內核mmap保護機制研究
    基于PCI總線的多處理器協(xié)同機制研究
    科技風(2017年20期)2017-07-10 18:56:06
    “四荒”土地承包經營權能抵押嗎
    農地產權權能擴展及管理措施完善研究
    經濟與管理(2016年2期)2016-12-01 04:29:00
    久久久久久久久中文| 欧美黑人精品巨大| 国产午夜精品久久久久久| 母亲3免费完整高清在线观看| 久久久久久亚洲精品国产蜜桃av| 久久国产亚洲av麻豆专区| 手机成人av网站| 波多野结衣av一区二区av| 国产欧美日韩精品亚洲av| 中国美女看黄片| 色av中文字幕| 亚洲自偷自拍图片 自拍| 亚洲成人久久性| 香蕉av资源在线| 啪啪无遮挡十八禁网站| 亚洲国产精品久久男人天堂| 侵犯人妻中文字幕一二三四区| 久久国产精品男人的天堂亚洲| 听说在线观看完整版免费高清| 欧美日韩一级在线毛片| 人人澡人人妻人| 麻豆成人av在线观看| 欧美在线黄色| 日本a在线网址| 美女 人体艺术 gogo| 一级毛片女人18水好多| 少妇粗大呻吟视频| 国产精品日韩av在线免费观看| 国产色视频综合| 黄色视频,在线免费观看| 黄色女人牲交| 桃红色精品国产亚洲av| 亚洲成人久久爱视频| 国产精品久久电影中文字幕| 成年版毛片免费区| 亚洲美女黄片视频| 欧美成人性av电影在线观看| 欧洲精品卡2卡3卡4卡5卡区| 亚洲熟女毛片儿| 欧美午夜高清在线| 制服诱惑二区| 久久国产亚洲av麻豆专区| 一区二区三区高清视频在线| 亚洲av日韩精品久久久久久密| tocl精华| 真人做人爱边吃奶动态| 亚洲 国产 在线| 女性生殖器流出的白浆| 夜夜夜夜夜久久久久| netflix在线观看网站| www.自偷自拍.com| 听说在线观看完整版免费高清| 国内精品久久久久久久电影| 欧美绝顶高潮抽搐喷水| 亚洲国产看品久久| 亚洲精品久久国产高清桃花| 夜夜躁狠狠躁天天躁| 妹子高潮喷水视频| 国产一区二区激情短视频| 午夜精品久久久久久毛片777| 我的亚洲天堂| 国产精品影院久久| 一夜夜www| 成人国语在线视频| 在线观看66精品国产| 久久精品国产亚洲av香蕉五月| 日韩av在线大香蕉| 国产精品永久免费网站| 免费在线观看影片大全网站| 黄色视频,在线免费观看| 夜夜夜夜夜久久久久| 亚洲专区字幕在线| 国产av一区二区精品久久| 男女视频在线观看网站免费 | 久久久久精品国产欧美久久久| 国语自产精品视频在线第100页| 在线观看一区二区三区| 午夜免费激情av| 人人澡人人妻人| 黄色 视频免费看| 变态另类丝袜制服| 国产97色在线日韩免费| 91在线观看av| 啦啦啦韩国在线观看视频| 搞女人的毛片| 久久热在线av| 国产亚洲精品综合一区在线观看 | 我的亚洲天堂| 久久久久久久久免费视频了| 91在线观看av| 国内少妇人妻偷人精品xxx网站 | 两个人看的免费小视频| 亚洲国产欧美网| 一二三四在线观看免费中文在| 老熟妇仑乱视频hdxx| 精品国产一区二区三区四区第35| 亚洲国产毛片av蜜桃av| 久久99热这里只有精品18| a级毛片a级免费在线| 国产一区二区三区在线臀色熟女| 男女之事视频高清在线观看| 成人手机av| 在线av久久热| 久久人妻av系列| av电影中文网址| 在线观看www视频免费| 久久人人精品亚洲av| 黄片小视频在线播放| 叶爱在线成人免费视频播放| 桃红色精品国产亚洲av| 欧美中文日本在线观看视频| 在线播放国产精品三级| 免费一级毛片在线播放高清视频| 国产精品免费视频内射| 久久久久亚洲av毛片大全| 欧美黑人精品巨大| 亚洲性夜色夜夜综合| 在线观看免费日韩欧美大片| 国产精品亚洲av一区麻豆| 精品一区二区三区av网在线观看| 欧美精品啪啪一区二区三区| 一进一出抽搐gif免费好疼| av在线播放免费不卡| 午夜福利免费观看在线| 亚洲精品久久国产高清桃花| 欧美中文日本在线观看视频| 久久国产亚洲av麻豆专区| 一二三四在线观看免费中文在| 韩国精品一区二区三区| 免费电影在线观看免费观看| 国产伦人伦偷精品视频| 国产熟女午夜一区二区三区| 国产精品亚洲av一区麻豆| 亚洲欧美日韩高清在线视频| 国产亚洲精品一区二区www| 精品一区二区三区视频在线观看免费| 波多野结衣av一区二区av| 国产一卡二卡三卡精品| 欧美激情极品国产一区二区三区| 午夜福利免费观看在线| 天天添夜夜摸| 午夜精品久久久久久毛片777| 人人澡人人妻人| 精品少妇一区二区三区视频日本电影| 最新在线观看一区二区三区| 国产片内射在线| 午夜日韩欧美国产| 欧美不卡视频在线免费观看 | 最好的美女福利视频网| 少妇被粗大的猛进出69影院| a级毛片a级免费在线| 久久久久九九精品影院| 性欧美人与动物交配| 人妻丰满熟妇av一区二区三区| 国产精品野战在线观看| 搡老熟女国产l中国老女人| 国产亚洲精品一区二区www| www日本在线高清视频| 日韩中文字幕欧美一区二区| 欧美亚洲日本最大视频资源| 999精品在线视频| 亚洲国产精品999在线| 国产一卡二卡三卡精品| 女性生殖器流出的白浆| 欧美日韩亚洲综合一区二区三区_| 久久人妻福利社区极品人妻图片| 亚洲一码二码三码区别大吗| 啪啪无遮挡十八禁网站| 91国产中文字幕| 亚洲欧美激情综合另类| 老司机福利观看| 中文在线观看免费www的网站 | 亚洲第一欧美日韩一区二区三区| 99热这里只有精品一区 | 国产一级毛片七仙女欲春2 | 国产真实乱freesex| 99热6这里只有精品| 最近最新中文字幕大全电影3 | 欧美黑人精品巨大| 欧美在线一区亚洲| 久久香蕉激情| 50天的宝宝边吃奶边哭怎么回事| av电影中文网址| 在线十欧美十亚洲十日本专区| 一区二区三区高清视频在线| 亚洲第一青青草原| 日本免费a在线| 18禁黄网站禁片午夜丰满| 日本一本二区三区精品| 亚洲一区二区三区不卡视频| 成人国产综合亚洲| 老司机靠b影院| 男女做爰动态图高潮gif福利片| 嫩草影院精品99| 午夜精品久久久久久毛片777| 国产精品永久免费网站| 人人妻人人看人人澡| 夜夜看夜夜爽夜夜摸| 久久国产精品男人的天堂亚洲| 久久中文字幕一级| 久9热在线精品视频| 高清在线国产一区| 一级毛片高清免费大全| 999久久久精品免费观看国产| 1024香蕉在线观看| 99久久无色码亚洲精品果冻| 国产精品久久电影中文字幕| 手机成人av网站| 99re在线观看精品视频| 欧美日韩亚洲综合一区二区三区_| 国产视频内射| 国产伦一二天堂av在线观看| 国产三级在线视频| 91av网站免费观看| 国产亚洲欧美精品永久| 婷婷亚洲欧美| 精品国产美女av久久久久小说| 午夜免费激情av| 日本一本二区三区精品| 手机成人av网站| 国产av在哪里看| 宅男免费午夜| 大型av网站在线播放| 熟女少妇亚洲综合色aaa.| 老熟妇乱子伦视频在线观看| 男人舔女人下体高潮全视频| 亚洲五月天丁香| 丰满人妻熟妇乱又伦精品不卡| 国产乱人伦免费视频| 草草在线视频免费看| 在线观看午夜福利视频| 亚洲天堂国产精品一区在线| 欧美日韩黄片免| 国产精品九九99| 久久这里只有精品19| 成人永久免费在线观看视频| 搡老岳熟女国产| 亚洲国产精品成人综合色| 91大片在线观看| 久久精品人妻少妇| 制服诱惑二区| 日本成人三级电影网站| 久久精品国产亚洲av高清一级| 窝窝影院91人妻| 婷婷六月久久综合丁香| 欧美丝袜亚洲另类 | 国产精品一区二区免费欧美| 亚洲精品久久成人aⅴ小说| 一进一出抽搐动态| 精品国产超薄肉色丝袜足j| 成人午夜高清在线视频 | 国产成人精品久久二区二区91| 免费一级毛片在线播放高清视频| 日本精品一区二区三区蜜桃| 欧美大码av| 97人妻精品一区二区三区麻豆 | 亚洲三区欧美一区| 男女视频在线观看网站免费 | 亚洲自拍偷在线| 精品福利观看| av有码第一页| 免费观看精品视频网站| 宅男免费午夜| 99热这里只有精品一区 | 亚洲专区字幕在线| 免费高清在线观看日韩| 精品久久久久久久人妻蜜臀av| 国产私拍福利视频在线观看| 欧洲精品卡2卡3卡4卡5卡区| 久久国产精品男人的天堂亚洲| 久久这里只有精品19| 亚洲精品在线美女| 桃红色精品国产亚洲av| 侵犯人妻中文字幕一二三四区| 亚洲九九香蕉| 午夜日韩欧美国产| 成人免费观看视频高清| 免费观看精品视频网站| 亚洲成av片中文字幕在线观看| 国产激情久久老熟女| 午夜免费成人在线视频| 精品熟女少妇八av免费久了| 亚洲成人久久性| 99riav亚洲国产免费| 不卡av一区二区三区| 90打野战视频偷拍视频| 男男h啪啪无遮挡| 国产精品一区二区三区四区久久 | 日本五十路高清| 欧美乱妇无乱码| 国产精品1区2区在线观看.| 91av网站免费观看| 国产精品亚洲美女久久久| 波多野结衣高清作品| 午夜成年电影在线免费观看| 午夜a级毛片| 国产精品亚洲av一区麻豆| 亚洲全国av大片| 给我免费播放毛片高清在线观看| 成人特级黄色片久久久久久久| 大型av网站在线播放| 欧美乱码精品一区二区三区| 亚洲性夜色夜夜综合| 一级毛片精品| 国产成年人精品一区二区| 国产精品永久免费网站| 国产av一区二区精品久久| 久久久久国产一级毛片高清牌| 国产精品久久久久久亚洲av鲁大| 女警被强在线播放| 久久久久久人人人人人| 香蕉国产在线看| 亚洲精品一卡2卡三卡4卡5卡| 51午夜福利影视在线观看| 亚洲av中文字字幕乱码综合 | 中文字幕精品免费在线观看视频| 欧美激情高清一区二区三区| 熟妇人妻久久中文字幕3abv| 黑丝袜美女国产一区| 亚洲av中文字字幕乱码综合 | 99国产精品一区二区三区| 欧美性猛交黑人性爽| 欧美最黄视频在线播放免费| 亚洲男人天堂网一区| 亚洲国产精品久久男人天堂| 少妇被粗大的猛进出69影院| 级片在线观看| 免费电影在线观看免费观看| 黑人欧美特级aaaaaa片| 黄片小视频在线播放| 国产成人啪精品午夜网站| 国产一区在线观看成人免费| 亚洲精品国产一区二区精华液| 欧美av亚洲av综合av国产av| 免费在线观看亚洲国产| 午夜福利在线在线| 国产区一区二久久| 午夜福利在线在线| 亚洲免费av在线视频| 人人妻,人人澡人人爽秒播| 午夜精品久久久久久毛片777| 久久久久久免费高清国产稀缺| 一边摸一边抽搐一进一小说| 成年版毛片免费区| 国产亚洲精品久久久久5区| 国产精品电影一区二区三区| 亚洲第一av免费看| 亚洲国产欧美一区二区综合| 久久午夜综合久久蜜桃| 精品电影一区二区在线| 久久久久久久精品吃奶| 日本一本二区三区精品| 精品人妻1区二区| 丝袜人妻中文字幕| 亚洲av中文字字幕乱码综合 | 成人手机av| 国产亚洲精品综合一区在线观看 | 午夜福利欧美成人| 久久天躁狠狠躁夜夜2o2o| 国产在线精品亚洲第一网站| 18禁观看日本| 人成视频在线观看免费观看| 国产人伦9x9x在线观看| 悠悠久久av| 黑丝袜美女国产一区| 老司机午夜福利在线观看视频| 白带黄色成豆腐渣| 少妇被粗大的猛进出69影院| 国产熟女午夜一区二区三区| 欧美乱码精品一区二区三区| 久久狼人影院| 日本 欧美在线| 亚洲精品av麻豆狂野| 18禁黄网站禁片免费观看直播| 久久精品91无色码中文字幕| 亚洲av中文字字幕乱码综合 | 国产国语露脸激情在线看| 久久久久免费精品人妻一区二区 | 一级片免费观看大全| 日韩欧美在线二视频| 麻豆久久精品国产亚洲av| 久久中文字幕人妻熟女| 狂野欧美激情性xxxx| 婷婷亚洲欧美| 国产精品九九99| 亚洲国产中文字幕在线视频| 久久精品人妻少妇| 亚洲欧美一区二区三区黑人| 国产人伦9x9x在线观看| 国产精品久久久久久亚洲av鲁大| 制服丝袜大香蕉在线| 国产av一区在线观看免费| 12—13女人毛片做爰片一| 欧美激情高清一区二区三区| 亚洲国产中文字幕在线视频| 亚洲国产高清在线一区二区三 | 麻豆av在线久日| 欧美久久黑人一区二区| 久久久久久免费高清国产稀缺| 视频区欧美日本亚洲| 又大又爽又粗| 精品久久久久久久久久久久久 | 黑人巨大精品欧美一区二区mp4| 亚洲久久久国产精品| 亚洲人成伊人成综合网2020| 99久久99久久久精品蜜桃| 18禁黄网站禁片免费观看直播| 视频在线观看一区二区三区| 欧美最黄视频在线播放免费| 波多野结衣高清无吗| 亚洲精品中文字幕一二三四区| 国产高清videossex| 一进一出抽搐gif免费好疼| а√天堂www在线а√下载| 老司机午夜福利在线观看视频| 欧美 亚洲 国产 日韩一| 国产男靠女视频免费网站| 成人午夜高清在线视频 | 久久国产精品男人的天堂亚洲| 色精品久久人妻99蜜桃| 人人澡人人妻人| 97碰自拍视频| 大型av网站在线播放| 久久久久久久久免费视频了| 国产精品久久久久久亚洲av鲁大| 国产伦人伦偷精品视频| 91大片在线观看| 巨乳人妻的诱惑在线观看| 麻豆国产av国片精品| 日韩精品中文字幕看吧| 国产av不卡久久| 熟女少妇亚洲综合色aaa.| 婷婷精品国产亚洲av| 久久久久久久午夜电影| 法律面前人人平等表现在哪些方面| 国产午夜福利久久久久久| 色综合站精品国产| 最近最新中文字幕大全电影3 | 琪琪午夜伦伦电影理论片6080| 老司机福利观看| 日韩欧美 国产精品| 19禁男女啪啪无遮挡网站| 欧美在线一区亚洲| 成人特级黄色片久久久久久久| 色老头精品视频在线观看| 久久中文字幕人妻熟女| 99国产精品99久久久久| 哪里可以看免费的av片| 欧美国产日韩亚洲一区| 国产免费av片在线观看野外av| 欧美国产日韩亚洲一区| 一区福利在线观看| 亚洲国产中文字幕在线视频| 午夜福利欧美成人| 99久久综合精品五月天人人| 一进一出抽搐gif免费好疼| 国产成人影院久久av| 国产精品国产高清国产av| 69av精品久久久久久| 美女国产高潮福利片在线看| 免费人成视频x8x8入口观看| 天天一区二区日本电影三级| 天堂√8在线中文| 亚洲在线自拍视频| 免费电影在线观看免费观看| 国产精品永久免费网站| 啦啦啦免费观看视频1| 国产精品亚洲av一区麻豆| av中文乱码字幕在线| 国产精品美女特级片免费视频播放器 | 美女国产高潮福利片在线看| 国产一区二区三区在线臀色熟女| 黄片播放在线免费| 亚洲av美国av| svipshipincom国产片| 国产又色又爽无遮挡免费看| 欧美黄色淫秽网站| 韩国精品一区二区三区| 无人区码免费观看不卡| 欧美+亚洲+日韩+国产| 久久香蕉激情| 一级a爱视频在线免费观看| 又大又爽又粗| 亚洲精品国产区一区二| 亚洲av熟女| 国语自产精品视频在线第100页| 午夜福利在线观看吧| 亚洲精品一卡2卡三卡4卡5卡| 这个男人来自地球电影免费观看| 激情在线观看视频在线高清| 亚洲精品中文字幕一二三四区| 在线国产一区二区在线| 免费看美女性在线毛片视频| 日韩精品中文字幕看吧| 男女床上黄色一级片免费看| 精品久久久久久成人av| 成人三级黄色视频| 亚洲avbb在线观看| av在线播放免费不卡| 中出人妻视频一区二区| 久久久久久人人人人人| 日韩成人在线观看一区二区三区| 久9热在线精品视频| 亚洲精品在线美女| 午夜福利视频1000在线观看| 亚洲三区欧美一区| 久久婷婷人人爽人人干人人爱| 亚洲七黄色美女视频| 99国产精品一区二区三区| 听说在线观看完整版免费高清| 一本大道久久a久久精品| 少妇裸体淫交视频免费看高清 | 夜夜爽天天搞| 亚洲五月色婷婷综合| 亚洲一码二码三码区别大吗| 超碰成人久久| 久久精品国产亚洲av高清一级| 一本综合久久免费| 极品教师在线免费播放| 曰老女人黄片| 90打野战视频偷拍视频| 免费人成视频x8x8入口观看| 日本熟妇午夜| 性色av乱码一区二区三区2| 亚洲va日本ⅴa欧美va伊人久久| 听说在线观看完整版免费高清| 国产1区2区3区精品| 日韩有码中文字幕| 老司机午夜十八禁免费视频| 中文亚洲av片在线观看爽| 18美女黄网站色大片免费观看| 国产精品国产高清国产av| 夜夜爽天天搞| 精品少妇一区二区三区视频日本电影| 这个男人来自地球电影免费观看| 熟女电影av网| 99riav亚洲国产免费| 熟女电影av网| 真人一进一出gif抽搐免费| 12—13女人毛片做爰片一| 日本一区二区免费在线视频| av天堂在线播放| 亚洲一区高清亚洲精品| 久久国产精品男人的天堂亚洲| 欧洲精品卡2卡3卡4卡5卡区| 久久天堂一区二区三区四区| 精品第一国产精品| 99精品欧美一区二区三区四区| 亚洲欧洲精品一区二区精品久久久| 亚洲男人天堂网一区| 脱女人内裤的视频| 视频区欧美日本亚洲| 色综合婷婷激情| 日韩视频一区二区在线观看| 欧美日本视频| 国产亚洲欧美在线一区二区| 熟妇人妻久久中文字幕3abv| 俺也久久电影网| 亚洲精品国产区一区二| 国产亚洲av嫩草精品影院| 国产一级毛片七仙女欲春2 | 一级毛片精品| 天天添夜夜摸| 老司机深夜福利视频在线观看| 搡老妇女老女人老熟妇| 欧美激情久久久久久爽电影| 国产精品久久视频播放| 亚洲精品在线美女| 国产精品美女特级片免费视频播放器 | 国产精品 国内视频| 亚洲中文字幕日韩| 国产欧美日韩一区二区精品| 伊人久久大香线蕉亚洲五| 国产成人欧美在线观看| 国产主播在线观看一区二区| 久久国产精品人妻蜜桃| 亚洲精品粉嫩美女一区| 韩国av一区二区三区四区| 欧美zozozo另类| 熟女电影av网| 一进一出抽搐动态| 国产成人系列免费观看| 精品久久久久久久久久久久久 | 中文字幕最新亚洲高清| 香蕉丝袜av| 12—13女人毛片做爰片一| 日本三级黄在线观看| 国产精品av久久久久免费| 精品国产超薄肉色丝袜足j| 色av中文字幕| 久久久精品欧美日韩精品| 999久久久精品免费观看国产| 亚洲第一欧美日韩一区二区三区| 女生性感内裤真人,穿戴方法视频| 婷婷精品国产亚洲av| 人人妻人人澡人人看| 免费电影在线观看免费观看| 女性被躁到高潮视频| 精品无人区乱码1区二区| 88av欧美| 国产乱人伦免费视频| 国产区一区二久久| 变态另类丝袜制服| 精品不卡国产一区二区三区| 国产v大片淫在线免费观看| 亚洲无线在线观看| 亚洲熟女毛片儿| 校园春色视频在线观看| 成人亚洲精品一区在线观看| 亚洲精品在线美女| 日韩欧美在线二视频| 精品国产乱码久久久久久男人| 国产高清视频在线播放一区| 天堂影院成人在线观看| 最近最新中文字幕大全免费视频|