色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深入了解虛擬內(nèi)存和內(nèi)存分頁的概念

Linux內(nèi)核補給站 ? 來源:Linux內(nèi)核補給站 ? 作者:Linux內(nèi)核補給站 ? 2022-05-28 14:02 ? 次閱讀

內(nèi)存是計算機的主存儲器。內(nèi)存為進程開辟出進程空間,讓進程在其中保存數(shù)據(jù)。我將從內(nèi)存的物理特性出發(fā),深入到內(nèi)存管理的細(xì)節(jié),特別是了解虛擬內(nèi)存和內(nèi)存分頁的概念。

內(nèi)存

簡單地說,內(nèi)存就是一個數(shù)據(jù)貨架。內(nèi)存有一個最小的存儲單位,大多數(shù)都是一個字節(jié)。內(nèi)存用內(nèi)存地址(memory address)來為每個字節(jié)的數(shù)據(jù)順序編號。因此,內(nèi)存地址說明了數(shù)據(jù)在內(nèi)存中的位置。內(nèi)存地址從0開始,每次增加1。這種線性增加的存儲器地址稱為線性地址(linear address)。為了方便,我們用十六進制數(shù)來表示內(nèi)存地址,比如0x00000003、0x1A010CB0。這里的“0x”用來表示十六進制。“0x”后面跟著的,就是作為內(nèi)存地址的十六進制數(shù)。

內(nèi)存地址的編號有上限。地址空間的范圍和地址總線(address bus)的位數(shù)直接相關(guān)。CPU通過地址總線來向內(nèi)存說明想要存取數(shù)據(jù)的地址。以英特爾32位的80386型CPU為例,這款CPU有32個針腳可以傳輸?shù)刂?a target="_blank">信息。每個針腳對應(yīng)了一位。如果針腳上是高電壓,那么這一位是1。如果是低電壓,那么這一位是0。32位的電壓高低信息通過地址總線傳到內(nèi)存的32個針腳,內(nèi)存就能把電壓高低信息轉(zhuǎn)換成32位的二進制數(shù),從而知道CPU想要的是哪個位置的數(shù)據(jù)。用十六進制表示,32位地址空間就是從0x00000000 到0xFFFFFFFF。

內(nèi)存的存儲單元采用了隨機讀取存儲器(RAM, Random Access Memory)。所謂的“隨機讀取”,是指存儲器的讀取時間和數(shù)據(jù)所在位置無關(guān)。與之相對,很多存儲器的讀取時間和數(shù)據(jù)所在位置有關(guān)。就拿磁帶來說,我們想聽其中的一首歌,必須轉(zhuǎn)動帶子。如果那首歌是第一首,那么立即就可以播放。如果那首歌恰巧是最后一首,我們快進到可以播放的位置就需要花很長時間。我們已經(jīng)知道,進程需要調(diào)用內(nèi)存中不同位置的數(shù)據(jù)。如果數(shù)據(jù)讀取時間和位置相關(guān)的話,計算機就很難把控進程的運行時間。因此,隨機讀取的特性是內(nèi)存成為主存儲器的關(guān)鍵因素。

內(nèi)存提供的存儲空間,除了能滿足內(nèi)核的運行需求,還通常能支持運行中的進程。即使進程所需空間超過內(nèi)存空間,內(nèi)存空間也可以通過少量拓展來彌補。換句話說,內(nèi)存的存儲能力,和計算機運行狀態(tài)的數(shù)據(jù)總量相當(dāng)。內(nèi)存的缺點是不能持久地保存數(shù)據(jù)。一旦斷電,內(nèi)存中的數(shù)據(jù)就會消失。因此,計算機即使有了內(nèi)存這樣一個主存儲器,還是需要硬盤這樣的外部存儲器來提供持久的儲存空間。

虛擬內(nèi)存

內(nèi)存的一項主要任務(wù),就是存儲進程的相關(guān)數(shù)據(jù)。我們之前已經(jīng)看到過進程空間的程序段、全局?jǐn)?shù)據(jù)、棧和堆,以及這些這些存儲結(jié)構(gòu)在進程運行中所起到的關(guān)鍵作用。有趣的是,盡管進程和內(nèi)存的關(guān)系如此緊密,但進程并不能直接訪問內(nèi)存。在Linux下,進程不能直接讀寫內(nèi)存中地址為0x1位置的數(shù)據(jù)。進程中能訪問的地址,只能是虛擬內(nèi)存地址(virtual memory address)。操作系統(tǒng)會把虛擬內(nèi)存地址翻譯成真實的內(nèi)存地址。這種內(nèi)存管理方式,稱為虛擬內(nèi)存(virtual memory)。

每個進程都有自己的一套虛擬內(nèi)存地址,用來給自己的進程空間編號。進程空間的數(shù)據(jù)同樣以字節(jié)為單位,依次增加。從功能上說,虛擬內(nèi)存地址和物理內(nèi)存地址類似,都是為數(shù)據(jù)提供位置索引。進程的虛擬內(nèi)存地址相互獨立。因此,兩個進程空間可以有相同的虛擬內(nèi)存地址,如0x10001000。虛擬內(nèi)存地址和物理內(nèi)存地址又有一定的對應(yīng)關(guān)系,如圖1所示。對進程某個虛擬內(nèi)存地址的操作,會被CPU翻譯成對某個具體內(nèi)存地址的操作。


pYYBAGKRuuiAezQcAABT0sjrDVY257.jpg?source=d16d100b

圖1 虛擬內(nèi)存地址和物理內(nèi)存地址的對應(yīng)?

應(yīng)用程序來說對物理內(nèi)存地址一無所知。它只可能通過虛擬內(nèi)存地址來進行數(shù)據(jù)讀寫。程序中表達的內(nèi)存地址,也都是虛擬內(nèi)存地址。進程對虛擬內(nèi)存地址的操作,會被操作系統(tǒng)翻譯成對某個物理內(nèi)存地址的操作。由于翻譯的過程由操作系統(tǒng)全權(quán)負(fù)責(zé),所以應(yīng)用程序可以在全過程中對物理內(nèi)存地址一無所知。因此,C程序中表達的內(nèi)存地址,都是虛擬內(nèi)存地址。比如在C語言中,可以用下面指令來打印變量地址:

int v = 0; printf("%p", (void*)&v);

本質(zhì)上說,虛擬內(nèi)存地址剝奪了應(yīng)用程序自由訪問物理內(nèi)存地址的權(quán)利。進程對物理內(nèi)存的訪問,必須經(jīng)過操作系統(tǒng)的審查。因此,掌握著內(nèi)存對應(yīng)關(guān)系的操作系統(tǒng),也掌握了應(yīng)用程序訪問內(nèi)存的閘門。借助虛擬內(nèi)存地址,操作系統(tǒng)可以保障進程空間的獨立性。只要操作系統(tǒng)把兩個進程的進程空間對應(yīng)到不同的內(nèi)存區(qū)域,就讓兩個進程空間成為“老死不相往來”的兩個小王國。兩個進程就不可能相互篡改對方的數(shù)據(jù),進程出錯的可能性就大為減少。

另一方面,有了虛擬內(nèi)存地址,內(nèi)存共享也變得簡單。操作系統(tǒng)可以把同一物理內(nèi)存區(qū)域?qū)?yīng)到多個進程空間。這樣,不需要任何的數(shù)據(jù)復(fù)制,多個進程就可以看到相同的數(shù)據(jù)。內(nèi)核和共享庫的映射,就是通過這種方式進行的。每個進程空間中,最初一部分的虛擬內(nèi)存地址,都對應(yīng)到物理內(nèi)存中預(yù)留給內(nèi)核的空間。這樣,所有的進程就可以共享同一套內(nèi)核數(shù)據(jù)。共享庫的情況也是類似。對于任何一個共享庫,計算機只需要往物理內(nèi)存中加載一次,就可以通過操縱對應(yīng)關(guān)系,來讓多個進程共同使用。IPO中的共享內(nèi)存,也有賴于虛擬內(nèi)存地址。

內(nèi)存分頁

虛擬內(nèi)存地址和物理內(nèi)存地址的分離,給進程帶來便利性和安全性。但虛擬內(nèi)存地址和物理內(nèi)存地址的翻譯,又會額外耗費計算機資源。在多任務(wù)的現(xiàn)代計算機中,虛擬內(nèi)存地址已經(jīng)成為必備的設(shè)計。那么,操作系統(tǒng)必須要考慮清楚,如何能高效地翻譯虛擬內(nèi)存地址。

記錄對應(yīng)關(guān)系最簡單的辦法,就是把對應(yīng)關(guān)系記錄在一張表中。為了讓翻譯速度足夠地快,這個表必須加載在內(nèi)存中。不過,這種記錄方式驚人地浪費。如果樹莓派1GB物理內(nèi)存的每個字節(jié)都有一個對應(yīng)記錄的話,那么光是對應(yīng)關(guān)系就要遠遠超過內(nèi)存的空間。由于對應(yīng)關(guān)系的條目眾多,搜索到一個對應(yīng)關(guān)系所需的時間也很長。這樣的話,會讓樹莓派陷入癱瘓。

因此,Linux采用了分頁(paging)的方式來記錄對應(yīng)關(guān)系。所謂的分頁,就是以更大尺寸的單位頁(page)來管理內(nèi)存。在Linux中,通常每頁大小為4KB。如果想要獲取當(dāng)前樹莓派的內(nèi)存頁大小,可以使用命令:

$getconf PAGE_SIZE

得到結(jié)果,即內(nèi)存分頁的字節(jié)數(shù):

4096

返回的4096代表每個內(nèi)存頁可以存放4096個字節(jié),即4KB。Linux把物理內(nèi)存和進程空間都分割成頁。

內(nèi)存分頁,可以極大地減少所要記錄的內(nèi)存對應(yīng)關(guān)系。我們已經(jīng)看到,以字節(jié)為單位的對應(yīng)記錄實在太多。如果把物理內(nèi)存和進程空間的地址都分成頁,內(nèi)核只需要記錄頁的對應(yīng)關(guān)系,相關(guān)的工作量就會大為減少。由于每頁的大小是每個字節(jié)的4000倍。因此,內(nèi)存中的總頁數(shù)只是總字節(jié)數(shù)的四千分之一。對應(yīng)關(guān)系也縮減為原始策略的四千分之一。分頁讓虛擬內(nèi)存地址的設(shè)計有了實現(xiàn)的可能。

無論是虛擬頁,還是物理頁,一頁之內(nèi)的地址都是連續(xù)的。這樣的話,一個虛擬頁和一個物理頁對應(yīng)起來,頁內(nèi)的數(shù)據(jù)就可以按順序一一對應(yīng)。這意味著,虛擬內(nèi)存地址和物理內(nèi)存地址的末尾部分應(yīng)該完全相同。大多數(shù)情況下,每一頁有4096個字節(jié)。由于4096是2的12次方,所以地址最后12位的對應(yīng)關(guān)系天然成立。我們把地址的這一部分稱為偏移量(offset)。偏移量實際上表達了該字節(jié)在頁內(nèi)的位置。地址的前一部分則是頁編號。操作系統(tǒng)只需要記錄頁編號的對應(yīng)關(guān)系。


poYBAGKRuuiAMjo6AACjdYVQk9A402.jpg?source=d16d100b

?圖2 地址翻譯過程

多級分頁表

內(nèi)存分頁制度的關(guān)鍵,在于管理進程空間頁和物理頁的對應(yīng)關(guān)系。操作系統(tǒng)把對應(yīng)關(guān)系記錄在分頁表(page table)中。這種對應(yīng)關(guān)系讓上層的抽象內(nèi)存和下層的物理內(nèi)存分離,從而讓Linux能靈活地進行內(nèi)存管理。由于每個進程會有一套虛擬內(nèi)存地址,那么每個進程都會有一個分頁表。為了保證查詢速度,分頁表也會保存在內(nèi)存中。分頁表有很多種實現(xiàn)方式,最簡單的一種分頁表就是把所有的對應(yīng)關(guān)系記錄到同一個線性列表中,即如圖2中的“對應(yīng)關(guān)系”部分所示。

這種單一的連續(xù)分頁表,需要給每一個虛擬頁預(yù)留一條記錄的位置。但對于任何一個應(yīng)用進程,其進程空間真正用到的地址都相當(dāng)有限。我們還記得,進程空間會有棧和堆。進程空間為棧和堆的增長預(yù)留了地址,但棧和堆很少會占滿進程空間。這意味著,如果使用連續(xù)分頁表,很多條目都沒有真正用到。因此,Linux中的分頁表,采用了多層的數(shù)據(jù)結(jié)構(gòu)。多層的分頁表能夠減少所需的空間。

我們來看一個簡化的分頁設(shè)計,用以說明Linux的多層分頁表。我們把地址分為了頁編號和偏移量兩部分,用單層的分頁表記錄頁編號部分的對應(yīng)關(guān)系。對于多層分頁表來說,會進一步分割頁編號為兩個或更多的部分,然后用兩層或更多層的分頁表來記錄其對應(yīng)關(guān)系,如圖3所示。


pYYBAGKRuumAaPXDAACcXghmHrM952.jpg?source=d16d100b

?圖3 多層分頁表

在圖3的例子中,頁編號分成了兩級。第一級對應(yīng)了前8位頁編號,用2個十六進制數(shù)字表示。第二級對應(yīng)了后12位頁編號,用3個十六進制編號。二級表記錄有對應(yīng)的物理頁,即保存了真正的分頁記錄。二級表有很多張,每個二級表分頁記錄對應(yīng)的虛擬地址前8位都相同。比如二級表0x00,里面記錄的前8位都是0x00。翻譯地址的過程要跨越兩級。我們先取地址的前8位,在一級表中找到對應(yīng)記錄。該記錄會告訴我們,目標(biāo)二級表在內(nèi)存中的位置。我們再在二級表中,通過虛擬地址的后12位,找到分頁記錄,從而最終找到物理地址。

多層分頁表就好像把完整的電話號碼分成區(qū)號。我們把同一地區(qū)的電話號碼以及對應(yīng)的人名記錄同通一個小本子上。再用一個上級本子記錄區(qū)號和各個小本子的對應(yīng)關(guān)系。如果某個區(qū)號沒有使用,那么我們只需要在上級本子上把該區(qū)號標(biāo)記為空。同樣,一級分頁表中0x01記錄為空,說明了以0x01開頭的虛擬地址段沒有使用,相應(yīng)的二級表就不需要存在。正是通過這一手段,多層分頁表占據(jù)的空間要比單層分頁表少了很多。 多層分頁表還有另一個優(yōu)勢。單層分頁表必須存在于連續(xù)的內(nèi)存空間。而多層分頁表的二級表,可以散步于內(nèi)存的不同位置。這樣的話,操作系統(tǒng)就可以利用零碎空間來存儲分頁表。還需要注意的是,這里簡化了多層分頁表的很多細(xì)節(jié)。最新Linux系統(tǒng)中的分頁表多達3層,管理的內(nèi)存地址也比本章介紹的長很多。不過,多層分頁表的基本原理都是相同。

綜上,我們了解了內(nèi)存以頁為單位的管理方式。在分頁的基礎(chǔ)上,虛擬內(nèi)存和物理內(nèi)存實現(xiàn)了分離,從而讓內(nèi)核深度參與和監(jiān)督內(nèi)存分配。應(yīng)用進程的安全性和穩(wěn)定性因此大為提高。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7484

    瀏覽量

    163762
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209326
  • 虛擬內(nèi)存
    +關(guān)注

    關(guān)注

    0

    文章

    77

    瀏覽量

    8058
收藏 人收藏

    評論

    相關(guān)推薦

    為什么需要虛擬內(nèi)存虛擬內(nèi)存概念與實現(xiàn)

    面試的時候經(jīng)常會被問到 malloc 的實現(xiàn)。從操作系統(tǒng)層面來說,malloc 確實是考察面試者對操作系統(tǒng)底層的存儲管理理解的一個很好的方式,涉及到虛擬內(nèi)存分頁/分段等。下面逐個細(xì)說。
    發(fā)表于 08-09 09:38 ?3099次閱讀
    為什么需要<b class='flag-5'>虛擬內(nèi)存</b>?<b class='flag-5'>虛擬內(nèi)存</b>的<b class='flag-5'>概念</b>與實現(xiàn)

    為什么需要虛擬內(nèi)存

    《現(xiàn)代操作系統(tǒng)》03章 存儲管理(二)0 前文3 虛擬內(nèi)存3.1 簡介3.2 分頁3.2.1 page & page frame3.2.2 MMU的工作機制3.3 頁表3.4 加速分頁過程
    發(fā)表于 02-23 06:10

    如何定義虛擬內(nèi)存

    條目由匹配的標(biāo)記和包含數(shù)據(jù)的緩存塊組成。如果沒有找到匹配的標(biāo)記,則稱為緩存未匹配。圖2. 緩存術(shù)語虛擬內(nèi)存的工作方式類似,但使用了虛擬地址的概念虛擬地址由
    發(fā)表于 04-11 10:20

    虛擬內(nèi)存是什么_虛擬內(nèi)存有什么用

    虛擬內(nèi)存是計算機系統(tǒng)內(nèi)存管理的一種技術(shù)。它使得應(yīng)用程序認(rèn)為它擁有連續(xù)的可用的內(nèi)存(一個連續(xù)完整的地址空間),而實際上,它通常是被分隔成多個物理內(nèi)存碎片,還有部分暫時存儲在外部磁盤存儲器
    發(fā)表于 11-01 10:03 ?9741次閱讀
    <b class='flag-5'>虛擬內(nèi)存</b>是什么_<b class='flag-5'>虛擬內(nèi)存</b>有什么用

    如何管理Linux 的內(nèi)存分頁

    內(nèi)存是計算機的主存儲器。內(nèi)存為進程開辟出進程空間,讓進程在其中保存數(shù)據(jù)。我將從內(nèi)存的物理特性出發(fā),深入內(nèi)存管理的細(xì)節(jié),特別是
    的頭像 發(fā)表于 07-28 08:24 ?3798次閱讀
    如何管理Linux 的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>分頁</b>?

    虛擬內(nèi)存設(shè)置多少合適

    虛擬內(nèi)存是一種電腦內(nèi)存管理的一種技術(shù),虛擬內(nèi)存通常用到的地方是玩大型游戲和使用較大的處理軟件時候虛擬內(nèi)存才能起到作用,下面小編就給大家介紹悉尼內(nèi)存
    的頭像 發(fā)表于 03-14 14:48 ?4.3w次閱讀

    虛擬內(nèi)存怎么設(shè)置_虛擬內(nèi)存注意事項

    虛擬內(nèi)存是什么呢?虛擬內(nèi)存,它只是相對于我們平時用的內(nèi)存而說的,就比如如果系統(tǒng)的物理內(nèi)存的空間是處于入不敷出的狀態(tài)的時候,電腦的操作系統(tǒng)此時就會在硬盤上開辟出來一塊磁盤空間,并且將其當(dāng)
    發(fā)表于 06-11 10:45 ?2089次閱讀

    虛擬內(nèi)存概念與設(shè)置方法

    相信許多小伙伴們在使用電腦的時候都會遇到虛擬內(nèi)存不足的提示,那小伙伴們是否知道什么叫做虛擬內(nèi)存。今天小編就來為小伙伴們介紹一下虛擬內(nèi)存的作用以及教大家如何去設(shè)置虛擬內(nèi)存的容量,希望對小
    發(fā)表于 06-12 10:38 ?1621次閱讀

    進程虛擬內(nèi)存布局以及進程的虛擬內(nèi)存分配釋放流程,涉及的代碼

    我們計劃通過一系列文章來介紹虛擬內(nèi)存分配/釋放,缺頁處理,內(nèi)存壓縮/回收,內(nèi)存分配器等知識,梳理虛擬內(nèi)存的管理。本章節(jié)結(jié)合代碼介紹進程虛擬內(nèi)存
    的頭像 發(fā)表于 06-28 09:38 ?4110次閱讀

    虛擬內(nèi)存的基本概念

    對主存的抽象概念,即是虛擬內(nèi)存(Virtual Memory)。 虛擬內(nèi)存為每個進程提供了一個一致的、私有的地址空間,它讓每個進程產(chǎn)生了一種自己在獨享主存的錯覺(每個進程擁有一片連續(xù)完整的內(nèi)存
    的頭像 發(fā)表于 06-22 14:51 ?1432次閱讀
    <b class='flag-5'>虛擬內(nèi)存</b>的基本<b class='flag-5'>概念</b>

    虛擬內(nèi)存的作用和原理 如何調(diào)整虛擬內(nèi)存設(shè)置

    虛擬內(nèi)存,也稱為虛擬內(nèi)存管理或頁面文件,是計算機操作系統(tǒng)中的一種內(nèi)存管理技術(shù)。它允許系統(tǒng)使用硬盤空間作為額外的RAM(隨機存取存儲器),以彌補物理內(nèi)存(RAM)的不足。
    的頭像 發(fā)表于 12-04 09:13 ?358次閱讀

    虛擬內(nèi)存不足如何解決 虛擬內(nèi)存和物理內(nèi)存的區(qū)別

    虛擬內(nèi)存不足的解決方案 虛擬內(nèi)存不足是計算機用戶經(jīng)常遇到的問題,尤其是在運行大型軟件或多任務(wù)處理時。以下是一些解決虛擬內(nèi)存不足問題的方法: 增加物理內(nèi)存(RAM) : 這是最直接的解決
    的頭像 發(fā)表于 12-04 09:14 ?353次閱讀

    什么是虛擬內(nèi)存分頁 Windows系統(tǒng)虛擬內(nèi)存優(yōu)化方法

    虛擬內(nèi)存分頁概述 在Windows操作系統(tǒng)中,虛擬內(nèi)存是通過分頁機制實現(xiàn)的。分頁允許系統(tǒng)將內(nèi)存
    的頭像 發(fā)表于 12-04 09:16 ?296次閱讀

    Linux下如何管理虛擬內(nèi)存 使用虛擬內(nèi)存時的常見問題

    在Linux系統(tǒng)中,虛擬內(nèi)存管理是操作系統(tǒng)內(nèi)核的一個重要功能,負(fù)責(zé)管理物理內(nèi)存和磁盤上的交換空間。以下是對Linux下如何管理虛擬內(nèi)存以及使用虛擬內(nèi)存時常見問題的介紹: Linux下如
    的頭像 發(fā)表于 12-04 09:19 ?353次閱讀

    虛擬內(nèi)存和云計算的關(guān)系

    在現(xiàn)代計算機科學(xué)中,虛擬內(nèi)存和云計算是兩個關(guān)鍵的技術(shù)概念虛擬內(nèi)存是一種內(nèi)存管理技術(shù),它允許計算機使用比物理內(nèi)存更多的
    的頭像 發(fā)表于 12-04 09:50 ?108次閱讀
    主站蜘蛛池模板: 国产高清视频免费在线观看| 秋葵app秋葵官网18在线观看| 欧美另类videosbest| 亚洲精品色播一区二区| 成人AV精品视频| 伦理 电影在线观看百度影音| 香蕉99久久久久成人麻豆| 菠萝菠萝蜜免费播放高清| 看 视频一一级毛片| 亚洲精品无码不卡在线播HE| 儿子操妈妈| 殴美黄色网| 97蜜桃网123| 久久久久久天天夜夜天天| 亚洲AV 无码AV 中文字幕| 边摸边吃奶边做激情叫床视| 麻婆豆腐传媒视频免费| 一级毛片视频免费| 国产永久免费观看视频软件| 色女仆影院| 凹凸精品视频分类视频| 牛牛精品专区在线| 45分钟做受片免费观看| 久久高清内射无套| 亚洲精品另类有吗中文字幕| 国产精品久久人妻互换毛片| 如懿传免费观看在线全集| TUBE19UP老师学生| 老师洗澡让我吃她胸的视频| 亚洲精品国产拍在线观看| 国产成人小视频在线观看| 日本最新免费区中文| AV亚洲精品少妇毛片无码| 免费xxx成年大片| 中文字幕无码亚洲字幕成A人蜜桃 中文字幕无码亚洲视频 | 办公室沙发口爆12P| 摸老师丝袜小内内摸出水| 91久久精一区二区三区大全| 老阿姨儿子一二三区| 在线中文字幕亚洲日韩| 久久内在线视频精品mp4|