精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

說了這么多次 I/O,可你知道其中的原理么

系統 Linux
現在讓我們轉向對 I/O 軟件的研究,I/O 軟件設計一個很重要的目標就是設備獨立性(device independence)。啥意思呢?這意味著我們能夠編寫訪問任何設備的應用程序,而不用事先指定特定的設備。

本文轉載自微信公眾號「****」,轉載本文請聯系****公眾號。

[[328690]]

1.IO 軟件原理

I/O 軟件目標

設備獨立性

現在讓我們轉向對 I/O 軟件的研究,I/O 軟件設計一個很重要的目標就是設備獨立性(device independence)。啥意思呢?這意味著我們能夠編寫訪問任何設備的應用程序,而不用事先指定特定的設備。比如你編寫了一個能夠從設備讀入文件的應用程序,那么這個應用程序可以從硬盤、DVD 或者 USB 進行讀入,不必再為每個設備定制應用程序。這其實就體現了設備獨立性的概念。

 

再比如說你可以輸入一條下面的指令

  1. sort 輸入 輸出 

那么上面這個 輸入 就可以接收來自任意類型的磁盤或者鍵盤,并且 輸出 可以寫入到任意類型的磁盤或者屏幕。

 

計算機操作系統是這些硬件的媒介,因為不同硬件它們的指令序列不同,所以需要操作系統來做指令間的轉換。

與設備獨立性密切相關的一個指標就是統一命名(uniform naming)。設備的代號應該是一個整數或者是字符串,它們不應該依賴于具體的設備。在 UNIX 中,所有的磁盤都能夠被集成到文件系統中,所以用戶不用記住每個設備的具體名稱,直接記住對應的路徑即可,如果路徑記不住,也可以通過 ls 等指令找到具體的集成位置。舉個例子來說,比如一個 USB 磁盤被掛載到了 /usr/cxuan/backup 下,那么你把文件復制到 /usr/cxuan/backup/device 下,就相當于是把文件復制到了磁盤中,通過這種方式,實現了向任何磁盤寫入文件都相當于是向指定的路徑輸出文件。

錯誤處理

除了設備獨立性外,I/O 軟件實現的第二個重要的目標就是錯誤處理(error handling)。通常情況下來說,錯誤應該交給硬件層面去處理。如果設備控制器發現了讀錯誤的話,它會盡可能的去修復這個錯誤。如果設備控制器處理不了這個問題,那么設備驅動程序應該進行處理,設備驅動程序會再次嘗試讀取操作,很多錯誤都是偶然性的,如果設備驅動程序無法處理這個錯誤,才會把錯誤向上拋到硬件層面(上層)進行處理,很多時候,上層并不需要知道下層是如何解決錯誤的。這就很像項目經理不用把每個決定都告訴老板;程序員不用把每行代碼如何寫告訴項目經理。這種處理方式不夠透明。

同步和異步傳輸

I/O 軟件實現的第三個目標就是 同步(synchronous) 和 異步(asynchronous,即中斷驅動)傳輸。這里先說一下同步和異步是怎么回事吧。

同步傳輸中數據通常以塊或幀的形式發送。發送方和接收方在數據傳輸之前應該具有同步時鐘。而在異步傳輸中,數據通常以字節或者字符的形式發送,異步傳輸則不需要同步時鐘,但是會在傳輸之前向數據添加奇偶校驗位。下面是同步和異步的主要區別

 

回到正題。大部分物理IO(physical I/O) 是異步的。物理 I/O 中的 CPU 是很聰明的,CPU 傳輸完成后會轉而做其他事情,它和中斷心靈相通,等到中斷發生后,CPU 才會回到傳輸這件事情上來。

I/O 分為兩種:物理I/O 和 邏輯I/O(Logical I/O)。

物理 I/O 通常是從磁盤等存儲設備實際獲取數據。邏輯 I/O 是對存儲器(塊,緩沖區)獲取數據。

緩沖

I/O 軟件的最后一個問題是緩沖(buffering)。通常情況下,從一個設備發出的數據不會直接到達最后的設備。其間會經過一系列的校驗、檢查、緩沖等操作才能到達。舉個例子來說,從網絡上發送一個數據包,會經過一系列檢查之后首先到達緩沖區,從而消除緩沖區填滿速率和緩沖區過載。

共享和獨占

I/O 軟件引起的最后一個問題就是共享設備和獨占設備的問題。有些 I/O 設備能夠被許多用戶共同使用。一些設備比如磁盤,讓多個用戶使用一般不會產生什么問題,但是某些設備必須具有獨占性,即只允許單個用戶使用完成后才能讓其他用戶使用。

下面,我們來探討一下如何使用程序來控制 I/O 設備。一共有三種控制 I/O 設備的方法

  • 使用程序控制 I/O
  • 使用中斷驅動 I/O
  • 使用 DMA 驅動 I/O

使用程序控制 I/O

使用程序控制 I/O 又被稱為 可編程I/O,它是指由 CPU 在驅動程序軟件控制下啟動的數據傳輸,來訪問設備上的寄存器或者其他存儲器。CPU 會發出命令,然后等待 I/O 操作的完成。由于 CPU 的速度比 I/O 模塊的速度快很多,因此可編程 I/O 的問題在于,CPU 必須等待很長時間才能等到處理結果。CPU 在等待時會采用輪詢(polling)或者 忙等(busy waiting) 的方式,結果,整個系統的性能被嚴重拉低。可編程 I/O 十分簡單,如果需要等待的時間非常短的話,可編程 I/O 倒是一個很好的方式。一個可編程的 I/O 會經歷如下操作

  • CPU 請求 I/O 操作
  • I/O 模塊執行響應
  • I/O 模塊設置狀態位
  • CPU 會定期檢查狀態位
  • I/O 不會直接通知 CPU 操作完成
  • I/O 也不會中斷 CPU
  • CPU 可能會等待或在隨后的過程中返回

 

使用中斷驅動 I/O

鑒于上面可編程 I/O 的缺陷,我們提出一種改良方案,我們想要在 CPU 等待 I/O 設備的同時,能夠做其他事情,等到 I/O 設備完成后,它就會產生一個中斷,這個中斷會停止當前進程并保存當前的狀態。一個可能的示意圖如下

 

盡管中斷減輕了 CPU 和 I/O 設備的等待時間的負擔,但是由于還需要在 CPU 和 I/O 模塊之前進行大量的逐字傳輸,因此在大量數據傳輸中效率仍然很低。下面是中斷的基本操作

  • CPU 進行讀取操作
  • I/O 設備從外圍設備獲取數據,同時 CPU 執行其他操作
  • I/O 設備中斷通知 CPU
  • CPU 請求數據
  • I/O 模塊傳輸數據

所以我們現在著手需要解決的就是 CPU 和 I/O 模塊間數據傳輸的效率問題。

使用 DMA 的 I/O

DMA 的中文名稱是直接內存訪問,它意味著 CPU 授予 I/O 模塊權限在不涉及 CPU 的情況下讀取或寫入內存。也就是 DMA 可以不需要 CPU 的參與。這個過程由稱為 DMA 控制器(DMAC)的芯片管理。由于 DMA 設備可以直接在內存之間傳輸數據,而不是使用 CPU 作為中介,因此可以緩解總線上的擁塞。DMA 通過允許 CPU 執行任務,同時 DMA 系統通過系統和內存總線傳輸數據來提高系統并發性。

 

2.I/O 層次結構

I/O 軟件通常組織成四個層次,它們的大致結構如下圖所示

 

每一層和其上下層都有明確的功能和接口。下面我們采用和計算機網絡相反的套路,即自下而上的了解一下這些程序。

下面是另一幅圖,這幅圖顯示了輸入/輸出軟件系統所有層及其主要功能。

 

下面我們具體的來探討一下上面的層次結構

中斷處理程序

在計算機系統中,中斷就像女人的脾氣一樣無時無刻都在產生,中斷的出現往往是讓人很不爽的。中斷處理程序又被稱為中斷服務程序 或者是 ISR(Interrupt Service Routines),它是最靠近硬件的一層。中斷處理程序由硬件中斷、軟件中斷或者是軟件異常啟動產生的中斷,用于實現設備驅動程序或受保護的操作模式(例如系統調用)之間的轉換。

中斷處理程序負責處理中斷發生時的所有操作,操作完成后阻塞,然后啟動中斷驅動程序來解決阻塞。通常會有三種通知方式,依賴于不同的具體實現

  • 信號量實現中:在信號量上使用 up 進行通知;
  • 管程實現:對管程中的條件變量執行 signal 操作
  • 還有一些情況是發送一些消息

不管哪種方式都是為了讓阻塞的中斷處理程序恢復運行。

中斷處理方案有很多種,下面是 《ARM System Developer’s Guide

Designing and Optimizing System Software》列出來的一些方案

  • 非嵌套的中斷處理程序按照順序處理各個中斷,非嵌套的中斷處理程序也是最簡單的中斷處理
  • 嵌套的中斷處理程序會處理多個中斷而無需分配優先級
  • 可重入的中斷處理程序可使用優先級處理多個中斷
  • 簡單優先級中斷處理程序可處理簡單的中斷
  • 標準優先級中斷處理程序比低優先級的中斷處理程序在更短的時間能夠處理優先級更高的中斷
  • 高優先級 中斷處理程序在短時間能夠處理優先級更高的任務,并直接進入特定的服務例程。
  • 優先級分組中斷處理程序能夠處理不同優先級的中斷任務

下面是一些通用的中斷處理程序的步驟,不同的操作系統實現細節不一樣

  • 保存所有沒有被中斷硬件保存的寄存器
  • 為中斷服務程序設置上下文環境,可能包括設置 TLB、MMU 和頁表,如果不太了解這三個概念,請參考另外一篇文章
  • 為中斷服務程序設置棧
  • 對中斷控制器作出響應,如果不存在集中的中斷控制器,則繼續響應中斷
  • 把寄存器從保存它的地方拷貝到進程表中
  • 運行中斷服務程序,它會從發出中斷的設備控制器的寄存器中提取信息
  • 操作系統會選擇一個合適的進程來運行。如果中斷造成了一些優先級更高的進程變為就緒態,則選擇運行這些優先級高的進程
  • 為進程設置 MMU 上下文,可能也會需要 TLB,根據實際情況決定
  • 加載進程的寄存器,包括 PSW 寄存器
  • 開始運行新的進程

上面我們羅列了一些大致的中斷步驟,不同性質的操作系統和中斷處理程序能夠處理的中斷步驟和細節也不盡相同,下面是一個嵌套中斷的具體運行步驟

 

設備驅動程序

在上面的文章中我們知道了設備控制器所做的工作。我們知道每個控制器其內部都會有寄存器用來和設備進行溝通,發送指令,讀取設備的狀態等。

因此,每個連接到計算機的 I/O 設備都需要有某些特定設備的代碼對其進行控制,例如鼠標控制器需要從鼠標接受指令,告訴下一步應該移動到哪里,鍵盤控制器需要知道哪個按鍵被按下等。這些提供 I/O 設備到設備控制器轉換的過程的代碼稱為設備驅動程序(Device driver)。

為了能夠訪問設備的硬件,實際上也就意味著,設備驅動程序通常是操作系統內核的一部分,至少現在的體系結構是這樣的。但是也可以構造用戶空間的設備驅動程序,通過系統調用來完成讀寫操作。這樣就避免了一個問題,有問題的驅動程序會干擾內核,從而造成崩潰。所以,在用戶控件實現設備驅動程序是構造系統穩定性一個非常有用的措施。MINIX 3 就是這么做的。下面是 MINI 3 的調用過程

 

然而,大多數桌面操作系統要求驅動程序必須運行在內核中。

操作系統通常會將驅動程序歸為 字符設備 和 塊設備,我們上面也介紹過了

 

在 UNIX 系統中,操作系統是一個二進制程序,包含需要編譯到其內部的所有驅動程序,如果你要對 UNIX 添加一個新設備,需要重新編譯內核,將新的驅動程序裝到二進制程序中。

然而隨著大多數個人計算機的出現,由于 I/O 設備的廣泛應用,上面這種靜態編譯的方式不再有效,因此,從 MS-DOS 開始,操作系統轉向驅動程序在執行期間動態的裝載到系統中。

設備驅動程序具有很多功能,比如接受讀寫請求,對設備進行初始化、管理電源和日志、對輸入參數進行有效性檢查等。

設備驅動程序接受到讀寫請求后,會檢查當前設備是否在使用,如果設備在使用,請求被排入隊列中,等待后續的處理。如果此時設備是空閑的,驅動程序會檢查硬件以了解請求是否能夠被處理。在傳輸開始前,會啟動設備或者馬達。等待設備就緒完成,再進行實際的控制。控制設備就是對設備發出指令。

發出命令后,設備控制器便開始將它們寫入控制器的設備寄存器。在將每個命令寫入控制器后,會檢查控制器是否接受了這條命令并準備接受下一個命令。一般控制設備會發出一系列的指令,這稱為指令序列,設備控制器會依次檢查每個命令是否被接受,下一條指令是否能夠被接收,直到所有的序列發出為止。

 

 

發出指令后,一般會有兩種可能出現的情況。在大多數情況下,設備驅動程序會進行等待直到控制器完成它的事情。這里需要了解一下設備控制器的概念

設備控制器的主要主責是控制一個或多個 I/O 設備,以實現 I/O 設備和計算機之間的數據交換。

設備控制器接收從 CPU 發送過來的指令,繼而達到控制硬件的目的

設備控制器是一個可編址的設備,當它僅控制一個設備時,它只有一個唯一的設備地址;如果設備控制器控制多個可連接設備時,則應含有多個設備地址,并使每一個設備地址對應一個設備。

設備控制器主要分為兩種:字符設備和塊設備

設備控制器的主要功能有下面這些

  • 接收和識別命令:設備控制器可以接受來自 CPU 的指令,并進行識別。設備控制器內部也會有寄存器,用來存放指令和參數
  • 進行數據交換:CPU、控制器和設備之間會進行數據的交換,CPU 通過總線把指令發送給控制器,或從控制器中并行地讀出數據;控制器將數據寫入指定設備。
  • 地址識別:每個硬件設備都有自己的地址,設備控制器能夠識別這些不同的地址,來達到控制硬件的目的,此外,為使 CPU 能向寄存器中寫入或者讀取數據,這些寄存器都應具有唯一的地址。
  • 差錯檢測:設備控制器還具有對設備傳遞過來的數據進行檢測的功能。

在這種情況下,設備控制器會阻塞,直到中斷來解除阻塞狀態。還有一種情況是操作是可以無延遲的完成,所以驅動程序不需要阻塞。在第一種情況下,操作系統可能被中斷喚醒;第二種情況下操作系統不會被休眠。

設備驅動程序必須是可重入的,因為設備驅動程序會阻塞和喚醒然后再次阻塞。驅動程序不允許進行系統調用,但是它們通常需要與內核的其余部分進行交互。

與設備無關的 I/O 軟件

I/O 軟件有兩種,一種是我們上面介紹過的基于特定設備的,還有一種是設備無關性的,設備無關性也就是不需要特定的設備。設備驅動程序與設備無關的軟件之間的界限取決于具體的系統。下面顯示的功能由設備無關的軟件實現

 

與設備無關的軟件的基本功能是對所有設備執行公共的 I/O 功能,并且向用戶層軟件提供一個統一的接口。

緩沖

無論是對于塊設備還是字符設備來說,緩沖都是一個非常重要的考量標準。下面是從 ADSL(調制解調器) 讀取數據的過程,調制解調器是我們用來聯網的設備。

用戶程序調用 read 系統調用阻塞用戶進程,等待字符的到來,這是對到來的字符進行處理的一種方式。每一個到來的字符都會造成中斷。中斷服務程序會給用戶進程提供字符,并解除阻塞。將字符提供給用戶程序后,進程會去讀取其他字符并繼續阻塞,這種模型如下

 

 

這一種方案是沒有緩沖區的存在,因為用戶進程如果讀不到數據會阻塞,直到讀到數據為止,這種情況效率比較低,而且阻塞式的方式,會直接阻止用戶進程做其他事情,這對用戶來說是不能接受的。還有一種情況就是每次用戶進程都會重啟,對于每個字符的到來都會重啟用戶進程,這種效率會嚴重降低,所以無緩沖區的軟件不是一個很好的設計。

作為一個改良點,我們可以嘗試在用戶空間中使用一個能讀取 n 個字節緩沖區來讀取 n 個字符。這樣的話,中斷服務程序會把字符放到緩沖區中直到緩沖區變滿為止,然后再去喚醒用戶進程。這種方案要比上面的方案改良很多。

 

但是這種方案也存在問題,當字符到來時,如果緩沖區被調出內存會出現什么問題?解決方案是把緩沖區鎖定在內存中,但是這種方案也會出現問題,如果少量的緩沖區被鎖定還好,如果大量的緩沖區被鎖定在內存中,那么可以換進換出的頁面就會收縮,造成系統性能的下降。

一種解決方案是在內核中內部創建一塊緩沖區,讓中斷服務程序將字符放在內核內部的緩沖區中。

 

當內核中的緩沖區要滿的時候,會將用戶空間中的頁面調入內存,然后將內核空間的緩沖區復制到用戶空間的緩沖區中,這種方案也面臨一個問題就是假如用戶空間的頁面被換入內存,此時內核空間的緩沖區已滿,這時候仍有新的字符到來,這個時候會怎么辦?因為緩沖區滿了,沒有空間來存儲新的字符了。

一種非常簡單的方式就是再設置一個緩沖區就行了,在第一個緩沖區填滿后,在緩沖區清空前,使用第二個緩沖區,這種解決方式如下

 

當第二個緩沖區也滿了的時候,它也會把數據復制到用戶空間中,然后第一個緩沖區用于接受新的字符。這種具有兩個緩沖區的設計被稱為 雙緩沖(double buffering)。

還有一種緩沖形式是 循環緩沖(circular buffer)。它由一個內存區域和兩個指針組成。一個指針指向下一個空閑字,新的數據可以放在此處。另外一個指針指向緩沖區中尚未刪除數據的第一個字。在許多情況下,硬件會在添加新的數據時,移動第一個指針;而操作系統會在刪除和處理無用數據時會移動第二個指針。兩個指針到達頂部時就回到底部重新開始。

緩沖區對輸出來說也很重要。對輸出的描述和輸入相似

緩沖技術應用廣泛,但它也有缺點。如果數據被緩沖次數太多,會影響性能。考慮例如如下這種情況,

 

 

 

 

數據經過用戶進程 -> 內核空間 -> 網絡控制器,這里的網絡控制器應該就相當于是 socket 緩沖區,然后發送到網絡上,再到接收方的網絡控制器 -> 接收方的內核緩沖 -> 接收方的用戶緩沖,一條數據包被緩存了太多次,很容易降低性能。

錯誤處理

在 I/O 中,出錯是一種再正常不過的情況了。當出錯發生時,操作系統必須盡可能處理這些錯誤。有一些錯誤是只有特定的設備才能處理,有一些是由框架進行處理,這些錯誤和特定的設備無關。

I/O 錯誤的一類是程序員編程錯誤,比如還沒有打開文件前就讀流,或者不關閉流導致內存溢出等等。這類問題由程序員處理;另外一類是實際的 I/O 錯誤,例如向一個磁盤壞塊寫入數據,無論怎么寫都寫入不了。這類問題由驅動程序處理,驅動程序處理不了交給硬件處理,這個我們上面也說過。

設備驅動程序統一接口

我們在操作系統概述中說到,操作系統一個非常重要的功能就是屏蔽了硬件和軟件的差異性,為硬件和軟件提供了統一的標準,這個標準還體現在為設備驅動程序提供統一的接口,因為不同的硬件和廠商編寫的設備驅動程序不同,所以如果為每個驅動程序都單獨提供接口的話,這樣沒法搞,所以必須統一。

分配和釋放

一些設備例如打印機,它只能由一個進程來使用,這就需要操作系統根據實際情況判斷是否能夠對設備的請求進行檢查,判斷是否能夠接受其他請求,一種比較簡單直接的方式是在特殊文件上執行 open操作。如果設備不可用,那么直接 open 會導致失敗。還有一種方式是不直接導致失敗,而是讓其阻塞,等到另外一個進程釋放資源后,在進行 open 打開操作。這種方式就把選擇權交給了用戶,由用戶判斷是否應該等待。

注意:阻塞的實現有多種方式,有阻塞隊列等

設備無關的塊

不同的磁盤會具有不同的扇區大小,但是軟件不會關心扇區大小,只管存儲就是了。一些字符設備可以一次一個字節的交付數據,而其他的設備則以較大的單位交付數據,這些差異也可以隱藏起來。

用戶空間的 I/O 軟件

雖然大部分 I/O 軟件都在內核結構中,但是還有一些在用戶空間實現的 I/O 軟件,凡事沒有絕對。一些 I/O 軟件和庫過程在用戶空間存在,然后以提供系統調用的方式實現。

 

責任編輯:武曉燕 來源: 程序員cxuan
相關推薦

2019-02-28 10:37:19

開源數據庫Oracle

2018-10-07 06:30:40

代碼設計模式面向對象原則

2020-12-14 07:31:57

JDKJVM監控

2021-06-09 10:10:20

代碼內存編程語言

2021-03-24 08:44:11

代碼內存消耗語言

2021-09-08 22:38:56

區塊鏈公有鏈網絡

2020-04-10 08:44:15

5G基站天線

2022-12-09 09:46:55

插件Lombok

2022-08-11 17:14:37

Java

2022-12-26 07:43:44

SpringBootWeb 類框架的

2019-12-10 10:13:58

HTTPNginxRedirect

2018-11-05 11:20:54

緩沖IO

2024-02-20 08:09:51

Java 8DateUtilsDate工具類

2023-11-13 08:49:54

2014-08-26 11:03:54

2015-08-25 08:54:59

物聯網

2021-02-16 16:43:21

工具性能調優

2024-05-13 16:22:25

固態硬盤接口硬盤

2023-09-08 07:34:11

編輯器React

2021-08-09 11:32:30

左葉子節點二叉樹
點贊
收藏

51CTO技術棧公眾號

日韩视频免费观看高清| 国产成人久久婷婷精品流白浆| 在线观看亚洲国产| 91成人精品| 亚洲国产欧美一区二区三区久久| 大香煮伊手机一区| 超碰在线网址| 91在线视频免费91| 国产又爽又黄的激情精品视频| 国产盗摄x88av| 日韩精品亚洲aⅴ在线影院| 欧美午夜电影在线播放| 嫩草影院中文字幕| 国产最新视频在线观看| 风流少妇一区二区| 国产免费成人av| 黄色激情视频在线观看| 手机亚洲手机国产手机日韩| 欧美精品一区二区三区在线播放| 久久精品免费网站| 精品一性一色一乱农村| 久久精品视频一区二区三区| 91日本在线观看| 午夜精品免费观看| 精品91在线| 久久精品最新地址| 少妇视频在线播放| 亚洲国产精品嫩草影院久久av| 91精品国产免费| 日本a√在线观看| 成人三级高清视频在线看| 亚洲欧洲综合另类| 性欧美.com| 欧美自拍偷拍一区二区| 久久 天天综合| 国产精品电影网站| 免费黄色av片| 亚洲欧美成人综合| 高清欧美性猛交xxxx| 欧美日韩在线视频免费| 五月精品视频| 日韩中文av在线| 国产精品国产三级国产专业不 | 色综合天天综合给合国产| 大荫蒂性生交片| 中文字幕在线观看播放| 一区视频在线播放| 在线免费一区| 免费在线观看av片| 中文字幕视频一区二区三区久| 日韩在线电影一区| 69久久夜色| 国产精品视频看| 亚洲欧美日韩精品在线| 日本中文字幕在线视频| 国产精品国产三级国产普通话三级| 日本视频精品一区| 国产午夜视频在线观看| 欧美激情一区二区三区全黄| 欧美精品一区三区在线观看| 黄视频在线播放| 国产亚洲视频系列| 亚洲高清不卡一区| 蜜芽在线免费观看| 日韩美女视频一区二区| 亚洲小视频在线播放| 欧美大片黄色| 精品国产成人在线| 日韩精品无码一区二区三区免费 | 成人淫片在线看| 国产又粗又黄又爽的视频| 久久国产生活片100| 91免费在线视频| 人人妻人人澡人人爽久久av| 91免费版在线| 亚洲精品乱码视频| 欧美色图天堂| 日韩欧美精品中文字幕| 日本黄色三级大片| 日本免费成人| 亚洲福利视频久久| 精品人妻一区二区三区视频| 日本不卡二三区| 欧美乱大交xxxxx| 1级黄色大片儿| 日本怡春院一区二区| 91九色单男在线观看| 手机看片一区二区三区| 国产日韩精品一区二区三区| 女同性恋一区二区| 国产拍在线视频| 在线视频国内一区二区| 四川一级毛毛片| 一本色道久久综合亚洲精品酒店| 日日骚av一区| 91porny在线| 老色鬼精品视频在线观看播放| 99国精产品一二二线| 日本国产在线| 亚洲美女少妇撒尿| 国产福利一区视频| 一区二区三区四区视频免费观看| 亚洲视频免费一区| 激情四射综合网| 日本中文字幕不卡| 精品一区二区三区免费毛片| 日本中文在线观看| 欧美色道久久88综合亚洲精品| 在线观看免费不卡av| 久久夜色电影| 久久精品欧美视频| 在线免费一区二区| 不卡在线视频中文字幕| 中文字幕精品一区日韩| 欧美羞羞视频| 亚洲国产精品小视频| 人与动物性xxxx| 欧美专区一区二区三区| 国产精品日韩一区二区 | 亚洲欧洲日产国码二区| 中文字幕日本最新乱码视频| 一区二区三区在线免费看| 最近日韩中文字幕中文| 91黑人精品一区二区三区| 成人av免费在线播放| 黄色录像特级片| 国产极品一区| 亚洲香蕉伊综合在人在线视看| 国产成人在线播放视频| 国产91露脸合集magnet| 国产日本欧美在线| 日韩欧国产精品一区综合无码| 亚洲毛片在线观看| 日本三级一区二区| 成人h动漫精品一区二| a级片一区二区| www久久久| 久久精品久久久久久国产 免费| 中国一区二区视频| 久久精品夜色噜噜亚洲aⅴ| 男人天堂999| 欧美日韩一区二区三区在线电影| 久久久久久久久久久久av| 亚洲精品一级片| 一区二区久久久| 激情小说欧美色图| 精品1区2区3区4区| 久久久久久国产精品一区| 黄色漫画在线免费看| 亚洲精品久久久久| 久久久久久久久久免费视频| 97aⅴ精品视频一二三区| 欧美精品自拍视频| 久久电影在线| 欧美亚洲成人网| 精品亚洲综合| 欧美日韩一区二区三区四区| 少妇愉情理伦三级| 精品一区二区三区日韩| 国产女人18毛片| 中文字幕av一区二区三区四区| 欧美国产日产韩国视频| 成人免费视频国产免费麻豆| 午夜久久久久久久久久一区二区| 国产一级免费片| 国产精品毛片| 视频一区视频二区视频三区视频四区国产 | 99国精产品一二二线| 9999热视频在线观看| 亚洲欧美国产一本综合首页| 日韩不卡高清视频| 综合自拍亚洲综合图不卡区| 国产精品日日摸夜夜爽| 亚洲免费一区二区| 在线一区高清| 成人台湾亚洲精品一区二区 | 成人自拍在线| 69av视频在线播放| 在线免费看黄| 欧美videos中文字幕| 99精品在线播放| 国产精品女同一区二区三区| 少妇丰满尤物大尺度写真| 国产精品综合色区在线观看| 日韩三级电影| jizzjizzjizz欧美| 国产精品久久久久久久久久东京| a毛片在线观看| 亚洲精品一区二区三区不| 国产一区二区女内射| 亚洲va欧美va天堂v国产综合| 亚洲精品成人无码| 国产一区二区精品在线观看| 99精品人妻少妇一区二区| 日韩专区精品| 久久精品一区二区三区不卡免费视频| yiren22亚洲综合| 97视频免费在线观看| 日本在线免费网| 亚洲国产天堂久久国产91 | 免费久久久久久| 欧美黄色录像| 亚洲综合中文字幕在线| 性欧美videohd高精| 色综合久久天天综线观看| a中文在线播放| 亚洲福利视频久久| 精品久久久免费视频| 在线观看欧美黄色| 狠狠躁夜夜躁人人爽天天高潮| 亚洲少妇30p| 日韩影视一区二区三区| 97久久超碰国产精品| 免费不卡av网站| 奇米888四色在线精品| 1024av视频| 欧美婷婷在线| 人人妻人人澡人人爽精品欧美一区| 亚洲精品白浆高清| 国产精品区一区二区三含羞草| 91国产精品| 国产精品久久久久久av| 在线免费看h| 91av国产在线| xxxx另类黑人| 欧美激情视频免费观看| 国产成人在线视频免费观看| 中文字幕无线精品亚洲乱码一区| 三级视频在线| 亚洲精品99久久久久| 亚洲免费黄色片| 欧美白人最猛性xxxxx69交| 国产美女永久免费| 欧美日韩国产片| 一级特黄aaaaaa大片| 在线影视一区二区三区| 中文字幕视频网| 欧美日韩国产中字| 天天综合天天干| 欧美日韩美女视频| 天天操天天干视频| 欧美日韩国产在线| 精品国产一区二区三区四| 欧美日韩中文字幕| 日本在线播放视频| 色综合久久久久| 亚洲精品国产无码| 欧美主播一区二区三区美女| 波多野结衣午夜| 欧美三区在线观看| 92久久精品一区二区| 777xxx欧美| www.97av| 亚洲成人av在线播放| 午夜小视频在线播放| 亚洲精品一区二区网址 | 欧美人成在线视频| 男女视频在线| 91高清视频免费| 日韩欧美精品电影| 国产一区二区丝袜| 欧美日本三级| 国产精品久久久久久久久久久久冷 | 久热这里有精品| 亚洲狠狠爱一区二区三区| 国产福利拍拍拍| 在线观看国产一区二区| 国产精品毛片一区二区在线看舒淇 | 不卡一区2区| 一区二区三区欧美在线| 欧美精品偷拍| 男人靠女人免费视频网站 | 狠狠躁夜夜躁人人躁婷婷91 | sm久久捆绑调教精品一区| 欧美专区国产专区| 国产成人免费| 国产91精品一区二区绿帽| 香蕉久久夜色精品国产更新时间| 视频一区二区精品| 黑丝一区二区| 狠狠操精品视频| 国产乱人伦偷精品视频不卡| 日本一级片在线播放| 国产精品久久免费看| 免费在线一级片| 色诱视频网站一区| 国产成人精品亚洲精品色欲| 亚洲国产97在线精品一区| 成人jjav| 韩国美女主播一区| 成人午夜毛片| 精品国产免费久久久久久尖叫| jvid福利在线一区二区| 男人天堂a在线| 免费看欧美美女黄的网站| 毛茸茸free性熟hd| 中文字幕在线观看一区二区| 亚洲精品www久久久久久| 欧美群妇大交群的观看方式| 日韩欧美在线观看一区二区| 久久精品亚洲一区| 成人视屏在线观看| 精品国产二区在线| 亚洲人metart人体| 黄色三级视频片| av中文字幕不卡| 视频这里只有精品| 欧美亚洲丝袜传媒另类| 性猛交xxxx| 欧美激情va永久在线播放| 日韩国产一二三区| 麻豆视频成人| 亚洲经典三级| 亚洲 自拍 另类 欧美 丝袜| 国产精品美女久久久久av爽李琼 | 欧美喷潮久久久xxxxx| 亚洲欧美日韩免费| 久久久噜噜噜久噜久久| 免费观看在线一区二区三区| 日韩一区二区三区资源| 午夜在线精品| 精品国产一区在线| 亚洲一区二区三区免费视频| 国产精品无码久久久久成人app| 一个人www欧美| 欧洲一区二区三区精品| 国产综合色一区二区三区| 亚洲小说欧美另类婷婷| 一级片黄色免费| 国产精品护士白丝一区av| 在线免费观看av片| 一区二区欧美久久| 日韩av超清在线观看| 日本公妇乱淫免费视频一区三区| 99国产精品| 精品一区二区视频在线观看| 亚洲福利视频三区| 蜜桃视频污在线观看| 久久全球大尺度高清视频| 激情av综合| 久久国产亚洲精品无码| 91久色porny| 国产三级精品三级在线观看| 日韩精品视频中文在线观看| 中文字幕乱码在线播放| 免费99视频| 天堂av在线一区| 中文字幕欧美激情极品| 欧美日韩精品一区二区三区四区| √天堂资源地址在线官网| 国产精品流白浆视频| 91亚洲自偷观看高清| 手机在线观看日韩av| 亚洲一区二区欧美日韩| 天天色天天操天天射| 国产91精品久| 欧美一区二区三区激情视频| 午夜精品99久久免费| 免费视频成人| 激情图片qvod| 丁香啪啪综合成人亚洲小说 | 色老头久久综合| 高清国产福利在线观看| 成人黄色在线播放| 午夜久久黄色| 日本不卡视频一区| 色狠狠综合天天综合综合| 在线视频二区| 国产经品一区二区| 免费在线成人| 操她视频在线观看| 精品裸体舞一区二区三区| 手机在线理论片| 亚洲一卡二卡三卡四卡无卡网站在线看| 久久国产夜色精品鲁鲁99| 久久久久久久久久久久久久免费看| 精品国产精品一区二区夜夜嗨| 超碰aⅴ人人做人人爽欧美| 亚洲日本精品国产第一区| 国产乱淫av一区二区三区| 好看的av在线| 久久视频在线视频| 欧美日韩看看2015永久免费| 2025韩国理伦片在线观看| 亚洲综合久久久久| 成人高清免费在线播放| 97超碰人人看人人 | 精品久久久国产精品999| 国产高清一区在线观看| 2022国产精品| 日韩国产一区二| 久久午夜无码鲁丝片午夜精品| 亚洲日韩欧美视频一区| 777久久精品| 中文久久久久久| 午夜精品123| 麻豆传媒视频在线| 欧美日韩一区二区三区在线视频| 国产河南妇女毛片精品久久久 | av人人综合网|