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

攻克Linux系統編程,細說系統調用規范,入行要先熟悉套路

系統 Linux
本文主要帶大家深入研究 Linux 系統編程。系統編程的任務,可以定義為使用系統提供的功能解決我們面對的實際問題,而系統調用,則是系統開放給應用執行特定功能的接口。

本文主要帶大家深入研究 Linux 系統編程。系統編程的任務,可以定義為使用系統提供的功能解決我們面對的實際問題,而系統調用,則是系統開放給應用執行特定功能的接口。本文首先從 Linux 系統調用講起,主要包括以下內容:

  • 系統調用概述
  • 系統調用的兩種調用方式
  • 系統調用的兩種執行過程
  • 系統調用的標準使用方法

另外,還會擴展兩個知識點:

  • 與早期 Linux 相比,2.6 以后版本的內核,是如何實現更高效的系統調用的?
  • 全局 errno 是如何解決多線程沖突問題的?
  • [[259559]]

1.1 系統調用概述

系統調用是操作系統內核提供給應用程序的基礎接口,需要運行在操作系統的核心模式下,以確保有權限執行某些 CPU 特權指令。

Linux 系統提供了功能非常豐富的系統調用,涵蓋了文件操作、進程控制、內存管理、網絡管理、套接字操作、用戶管理、進程間通信等各個方面。

執行如下命令,可列出系統中所有的系統調用名稱。

  1. man syscalls 

Linux 自帶的 man 手冊對每個系統調用都進行了非常詳細的說明,包括函數功能、傳入的參數、返回值,以及可能產生的錯誤、使用注意事項,等等,其完善程度絲毫不亞于微軟的 MSDN。雖然是英文版,但讀起來比較通俗易懂,每位 Linux 系統開發者都應該習慣于查看這些文檔。

另外,IBM 文檔庫里有一份質量非常高的《中文版系統調用列表》,閱讀它會更輕松。

1.2 系統調用的兩種調用方式

我們先看一種方式。

系統調用由指派的編號來標識,通過 syscall 函數以編號為參數可直接被調用。

syscall 函數原型為:

  1. int syscall(int number, ...); 

完整的系統調用編號都定義在 sys/syscall.h 的文件中。感興趣的讀者可以自行查看。

顯然,記憶如此多的編號,對開發者很不友好。

于是,開發者多會選擇第二種方式,即利用 glibc 提供的包裝函數將這些系統調用包裝成名字自解釋的函數。

這個過程,包裝函數并沒有做太多額外工作,主要是檢查參數,將它們拷貝到合適的寄存器中,接著調用指定標號的系統調用,之后再根據結果設置 errno,供應用程序檢查執行結果,以及其他相關工作。

兩種調用方式,在功能上可以認為是完全等價的,但在易讀、易用性上,glibc 包裝函數則更有優勢。在之后的課程中,我提到某系統調用,若無特殊說明,指的便是 glibc 包裝函數。

當然,如果包裝函數無法滿足某些特殊應用場景需求,還可以使用 syscall 函數直接執行系統調用。不過這種情況非常少見,到目前為止,我還沒有遇到過。

1.3 系統調用的兩種執行過程

1.3.1 基于中斷方式

系統調用的實現代碼是內核代碼的一部分。執行系統調用代碼,首先需要將系統從用戶模式切換到核心模式。

早期的系統調用通過軟中斷實現模式的切換,而中斷號屬于系統稀缺資源,不可能為每個系統調用都分配一個中斷號。

在 Linux 的實現中,所有的系統調用共用 128 號中斷(也就是大名鼎鼎的 int 0x80 ),其對應的中斷處理程序是 system_call,所有的系統調用都會轉到這個中斷處理程序中。

接著,system_call 會根據 EAX 傳入的系統調用標號跳轉并執行相應的系統調用程序。如果需要更多的參數,會依次用 EBX、ECX、EDX、EDI 進行傳遞。函數執行完成之后,會把結果放到 EAX 中返回給應用程序。

由此可知,一次系統調用便會觸發一次完整的中斷處理過程。在每次中斷處理過程中,CPU 都會從系統啟動時初始化好的中斷描述表中,取出該中斷對應的門描述符,并判斷門描述符的種類。

在確認門描述符的級別(DPL)不比中斷指令調用者的級別(CPL)低之后,再根據描述符的內容,將中斷處理程序中可能用到的寄存器進行壓棧保存。然后,執行權限提升,設置 CS 和 EIP 寄存器,以使 CPU 跳轉到指定的系統調用的代碼地址,并執行目標系統調用。

1.3.2 基于 SYSENTER 指令

再仔細審視基于中斷方式的系統調用的執行過程,不難發現,前面很多處理過程都是固定的,其實很沒必要,如門描述符級別檢查、查找中斷處理程序入口,等等。

為了省去這些多余的檢查,Intel 在 Pentium II CPU 中加入了新的 SYSENTER 指令,專門用來執行系統調用。

該指令會跳過前面檢查步驟,直接將 CPU 切換到特權模式,繼而執行系統調用,同時還增加了幾個專用寄存器輔助完成參數傳遞和上下文保存工作。另外,還相應地增加了 SYSEXIT 指令,用來返回執行結果,并切回用戶模式。

在 Linux 實現了 SYSENTER 方式的系統調用之后,就有人用 Pentium III 的機器對比測試了兩種系統調用的效率。測試結果顯示,與中斷方式相比,SYSENTER 在用戶模式下因省掉了級別檢查類的操作,花費的時間大幅減少了 45% 左右;在核心模式下,因少了一個寄存器壓棧保存動作,所花費的時間也減少了 2% 左右。

目前,基于中斷方式的系統調用仍然保留著,Linux 啟動時會自動檢測 CPU 是否支持 SYSENTER 指令,從而根據情況選擇相應的系統調用方式。

1.3.3 SYSENTER 指令誕生故事

介紹完了 SYSENTER 指令的優越之處,我們回過頭再來聊聊它的由來。

從 Linux 2.5 內核開始,在經歷了多方測試、多次 Patch 之后,SYSENTER 指令才正式被 Linux 2.6 版本支持,且由 Linus Torvalds 大神親自操刀實現。

上面提到過,其實早在 1998 年,SYSENTER 指令就已經引入到 Intel Pentium II CPU 中,直到 2002 年才在 Linux 2.5 版本的內核中出現。該指令一出現,Linux 社區就開始了激烈討論。

后來 Intel Pentium 4 CPU 發布了,這款 CPU 在“設計上存在的問題,造成 Pentium 4 使用中斷方式執行系統調用比 Pentium 3 以及 AMD Athlon 所耗費的 CPU 時鐘周期多 5~10 倍”,Linus 對這個結果接受不了,于是在 Linux 2.6 內核中加入了 SYSENTER 指令,從而實現了更加高效的系統調用。

這里總結下系統調用的執行過程。進程從用戶模式轉入核心模式,開始執行內核中實現特定功能的代碼段,執行完成后再切回用戶模式,并把執行結果返回給調用進程。在 Linux 2.4 版本之前,主要利用中斷方式實現核心模式的切換;Linux 2.6 及以后版本的內核中,可以利用更高效的 SYSENTER 指令實現。

1.4 系統調用的標準使用方法

前面提到,本課程所說的系統調用,默認是指 glibc 中的包裝函數。這些函數會在執行系統調用前設置寄存器的狀態,并仔細檢查輸入參數的有效性。系統調用執行完成后,會從 EAX 寄存器中獲取內核代碼執行結果。

內核執行系統調用時,一旦發生錯誤,便將 EAX 設置為一個負整數,包裝函數隨之將這個負數去掉符號后,放置到一個全局的 errno 中,并返回 −1。若沒有發生錯誤,EAX 將被設置為 0,包裝函數獲取該值后,并返回 0,表示執行成功,此時無需再設置 errno。

綜上,系統調用的標準使用方法可總結為:根據包裝函數返回值的正負,確定系統調用是否成功。如果不成功,進一步通過 errno 確定出錯原因,根據不同的出錯原因,執行不同的操作;如果成功,則繼續執行后續的邏輯。代碼示例如下:

  1. int ret = syscallx(...); 
  2. if(ret < 0) 
  3.  //有錯誤了,通過 errno 確定出錯的原因,執行不同的操作 
  4. else 
  5.  //調用成功,繼續干活 

大多數系統調用都遵循這一過程,errno 是一個整數,可以用 perror 或 strerror 獲得對應的文字描述信息。

不過,也有幾個特殊的系統調用,和上述使用方法存在些許差異。比如,其中有個函數會在調用之前將 errno 重置為 0,調用后,通過檢查 errno 判斷執行是否成功。此類函數只有非常少數的幾個,使用之前,看看幫助頁,就知道如何使用了。

系統調用的使用規范就介紹到這里。此時,你可能有個疑問,每個系統調用失敗后都會設置 errno,如果在多線程程序中,不同線程中的系統調用設置的 errno 會不會互相干擾呢?

如果 errno 是一個全局變量,答案是肯定的。如果真是這樣的話,那系統調用的局限性也就太大了,總不能在每個系統調用之前都加鎖保護吧。優秀的 Linux 肯定不會這么弱,那么,這個 errno 的問題又是怎么解決的呢?

1.5 errno 的多線程問題

根據 man 手冊,要使用 errno,首先需要包含 errno.h 這個頭文件。我們先看看 errno.h 里面有什么東西。

  1. vim /usr/include/errno.h 

執行以上代碼,會發現該文件中有這樣幾行關鍵內容:

  1. #include <bits/errno.h> 
  2. ....... 
  3. #ifndef errno 
  4. extern int errno; 
  5. #endif 

根據官方提供的代碼注釋,bits/errno.h 中應該有一個 errno 的宏定義。如果沒有,則會在外部變量中尋找一個名為 errno 的整數,它自然也就成了全局整數。否則,這個 errno 只是一個 per-thread 變量,每個線程都會拷貝一份。

關于 per-thread 變量更詳細的信息,我們會在后面的課程中介紹。現在,你只需知道,這個 errno,每個線程都會獨立拷貝一份,所以在多線程程序中使用它是不會相互影響的。

1.5.1 實現原理

具體是怎么做到的呢?我們可以再打開 bits/errno.h 看一眼。

  1. <bits/errno.h> 
  2. # ifndef __ASSEMBLER__ 
  3. extern int *__errno_location (void) __THROW __attribute__ ((__const__)); 
  4. # if !defined _LIBC || defined _LIBC_REENTRANT 
  5. # define errno (*__errno_location ()) 
  6. # endif 
  7. # endif  

原來,當 libc 被定義為可重入時,errno 就會被定義成一個宏,該宏調用外部 __errno_location 函數返回的內存地址中所存儲的值。在 GCC 源碼中,我們還發現一個測試用例中定義了 __errno_location 函數的 Stub,是這樣寫的:

  1. extern __thread int __libc_errno __attribute__ ((tls_model ("initial-exec"))); 
  2. int * __errno_location (void) 
  3.  return &__libc_errno; 

這一簡單的測試用例充分展現了 errno 的實現原理。errno 被定義為 per-thread(用 __thread 標識的線程局部存儲類型)變量 __libc_errno,之后 __errno_location 函數返回了這個線程局部變量的地址。所以,在每個線程中獲取和設置 errno 的時候,操作的是本線程內的一個變量,不會與其他線程相互干擾。

至于 __thread 這個關鍵字,需要在很“嚴苛”的條件下才能生效——需要 Linux 2.6 以上內核、pthreads 庫、GCC 3.3 或更高版本的支持。不過,放到今天,這些條件已成為標配,也就不算什么了。

1.5.2 注意事項

上面只是解釋了在多線程中使用系統調用時,errno 不會發生沖突問題,但并不是說所有的系統調用都可以放心大膽地在多線程程序中使用。

有一些系統調用,標準中并沒有規定它們的實現必須是多線程安全的(或者說可重入的,后面的課程中再詳細解釋)。由于歷史原因和實現原理上的限制,有些函數的實現并不是線程安全的,比如 system()。某些 glibc 函數也是一樣,比如 strerror 函數,其內部使用一塊靜態存儲區存放 errno 描述性信息,最近的一次調用會覆蓋上一次調用的內容。

glibc 還額外為一些函數提供了多線程安全實現版本,大多數是在原函數名后加上 _r 后綴,比如一些時間操作類的函數。實現原理是讓應用單獨提供緩沖區,而不再使用同一塊靜態緩沖區。更多細節信息,后面講到線程時,再詳細展開。

1.6 總結

我們先從總體上認識了 Linux 系統調用,概要地介紹了系統調用的執行過程。還順帶介紹了 Linux 系統調用方式的發展小歷史。

隨后,我們介紹了使用系統調用的標準套路,順帶深入探究了 errno 的多線程解決方法。

希望這些內容對你當前的工作有所啟發。最后再說一句,Linux 系統開發者,一定要多查看 Linux 幫助文檔。

 

責任編輯:武曉燕 來源: gitbook
相關推薦

2020-10-18 07:13:44

Linux系統編程信號捕捉

2020-10-10 07:18:14

Linux系統編程管道

2020-10-05 22:01:02

Linux系統編程線程屬性

2020-09-26 21:43:59

Linux系統編程條件變量

2020-09-22 07:35:06

Linux線程進程

2020-09-26 23:09:00

Linux系統編程讀寫鎖

2020-09-28 06:49:50

Linux系統編程互斥量mutex

2020-09-25 07:34:40

Linux系統編程信號量

2020-10-05 22:05:10

Linux系統編程時序競態

2020-10-08 10:10:51

Linux系統編程信號集

2020-10-09 07:13:11

Linux系統編程mmap

2025-04-16 04:22:00

2017-02-28 18:26:09

Linuxinput子系統編程

2009-08-27 16:30:08

C#編程命名規范

2010-03-05 13:34:54

2009-04-29 23:21:07

2010-02-02 13:26:53

Linux內核

2009-10-23 16:35:44

linux Debia

2009-07-03 11:57:18

系統編程安全linux

2023-11-01 10:58:31

系統調用高性能網絡編程Linux
點贊
收藏

51CTO技術棧公眾號

久久高清免费视频| 国产盗摄xxxx视频xxx69| 成人在线视频一区二区三区| www.久久伊人| 亚洲精品1234| 亚洲欧美日韩区| 不卡的在线视频| 麻豆蜜桃在线| 久久久99精品免费观看| 国产在线观看精品| 国产亚洲精品av| 欧美日韩水蜜桃| 日韩午夜在线影院| 一区二区视频在线观看| av中文字幕免费| 性色av一区二区怡红| 精品激情国产视频| 蜜桃精品一区二区| 懂色av色香蕉一区二区蜜桃| 性欧美大战久久久久久久久| 亚洲午夜高清视频| 国产在线观看第一页| 欧美在线二区| 一本色道久久88亚洲综合88| 亚洲国产精品第一页| 69堂免费精品视频在线播放| 亚洲一区二区成人在线观看| 亚洲日本无吗高清不卡| 亚洲欧美自偷自拍| 亚洲精品系列| 精品国产网站地址| 手机看片一级片| 成人影院在线视频| 自拍偷拍亚洲激情| 欧美一区二区综合| 人妻一区二区三区免费| 黑人精品欧美一区二区蜜桃 | 国产草草浮力影院| 国产精品一区二区三区av| 色噜噜久久综合| 欧美精品久久久久久久自慰| 超碰在线观看免费| 久久久久99精品国产片| 国产一区二区三区免费不卡| 国产片在线播放| 91亚洲国产高清| 亚洲另类欧美自拍| 国产精品嫩草av| youjizz亚洲| 欧美一级夜夜爽| 中文字幕 欧美日韩| 欧美成人精品三级网站| 色综合久久久久综合体桃花网| av在线观看地址| 天堂av最新在线| 亚洲精品乱码久久久久久| 亚洲午夜精品久久久久久浪潮| 狠狠v欧美ⅴ日韩v亚洲v大胸| 奇米四色…亚洲| 久久久精品一区二区| 免费一级特黄3大片视频| 在线观看欧美理论a影院| 亚洲精品影视在线观看| 99视频在线视频| 亚洲四虎影院| 欧美精品乱码久久久久久按摩 | aaaa欧美| 欧美日本乱大交xxxxx| 日韩爱爱小视频| 亚洲精品大全| 日韩美女天天操| 人妻激情偷乱频一区二区三区| 久久男人av资源站| 亚洲 欧美综合在线网络| 精品无码国产一区二区三区av| 国产精品一区hongkong| 久久久综合视频| 久久riav| av在线首页| 国产精品传媒入口麻豆| 91九色国产ts另类人妖| 欧美78videosex性欧美| 精品久久久久人成| 亚洲最大色综合成人av| 麻豆传媒在线观看| 一级中文字幕一区二区| 少妇高潮喷水在线观看| 日韩伦理三区| 欧美人体做爰大胆视频| 日韩精品――色哟哟| 欧美人妖在线观看| 亚洲天堂男人天堂女人天堂| 国产精品18在线| 欧美在线1区| 欧美中文在线免费| 一本到在线视频| 丁香婷婷综合五月| 美日韩精品免费| 久操视频在线| 精品久久久久久久久久久| xx欧美撒尿嘘撒尿xx| 试看120秒一区二区三区| 亚洲激情成人网| 亚洲成人av免费观看| 国产厕拍一区| 中文字幕日韩欧美精品在线观看| 黄色性生活一级片| 日韩av片子| 欧美极品欧美精品欧美视频| 自拍偷拍色综合| 成人午夜电影久久影院| 水蜜桃亚洲一二三四在线| 在线午夜影院| 欧美三日本三级三级在线播放| 亚洲熟女一区二区三区| 欧美精品一区二区久久| 欧美夫妻性生活xx| 日韩av免费播放| 成人免费视频一区二区| 亚洲国产一区二区精品视频 | 户外极限露出调教在线视频| 亚洲自拍偷拍网站| 天天视频天天爽| 色先锋久久影院av| 久久97精品久久久久久久不卡| 久久久久在线视频| 国产欧美日韩一区二区三区在线| 国产一区在线播放| 日韩电影网址| 亚洲一卡二卡三卡四卡 | 欧美一二三区视频| 韩国成人在线视频| 日韩欧美精品一区二区| 国产精品vvv| 欧美zozozo| 国产女人18水真多毛片18精品 | 亚洲成人激情小说| 日韩在线欧美| 国产精品一区二区久久久久| 理论视频在线| 日韩欧中文字幕| 黄色片视频免费观看| 好看的日韩av电影| 亚洲一区二区久久久久久| 在线免费av电影| 日本乱人伦一区| 亚洲国产av一区| 久久久久免费| 欧美中日韩免费视频| 狠狠操一区二区三区| 精品成人一区二区| 麻豆一区二区三区精品视频| 高清成人免费视频| 久久精品中文字幕一区二区三区| 免费电影网站在线视频观看福利| 91精品国产品国语在线不卡| www.97视频| 亚洲激情社区| 国产伦精品一区二区三区照片| 欧美黑人猛交的在线视频| 91精品国产黑色紧身裤美女| 天天鲁一鲁摸一摸爽一爽| 国内精品自线一区二区三区视频| 最新精品视频| 亚洲超碰在线观看| 高清亚洲成在人网站天堂| 视频一区二区免费| 欧美色视频日本高清在线观看| 伊人网在线视频观看| 日韩成人一级片| 97人人干人人| 污视频网站免费在线观看| 欧美成人艳星乳罩| 免费在线观看黄网站| 久久综合九色综合欧美98| 日韩一级免费在线观看| 久久人人88| 97人人模人人爽人人喊38tv| 91九色在线播放| 亚洲精品天天看| 在线免费观看视频网站| 亚洲乱码国产乱码精品精98午夜 | 亚洲国产中文在线| 97人人做人人爱| 国产区av在线| 亚洲va中文字幕| 爱爱的免费视频| 日本成人中文字幕在线视频| 国产三级中文字幕| 国产主播性色av福利精品一区| 人人做人人澡人人爽欧美| 在线日本中文字幕| 精品久久久久久无| 久久亚洲精品石原莉奈| 亚洲欧美一区二区三区孕妇| 麻豆国产精品一区| 精品一区二区三区在线播放视频 | 欧美电影影音先锋| 国产一级免费av| 中文字幕第一区综合| 中文字幕1区2区| 日韩精品一二区| 精品人妻人人做人人爽| 国产探花一区二区| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 欧美主播一区二区三区| 国产va在线播放| 久久久久久久久久电影| 手机av在线网站| 久久中文在线| a天堂资源在线观看| 奇米影视亚洲| 久中文字幕一区| 日韩精品中文字幕一区二区 | 少妇人妻无码专区视频| 久久香蕉国产| 欧美精品一区三区在线观看| 精品国产一区二区三区性色av| 日韩av成人在线观看| 秋霞在线视频| zzijzzij亚洲日本成熟少妇| 青青草视频免费在线观看| 欧美成人综合网站| 一级aaaa毛片| 一本大道av一区二区在线播放| 久久久久久久黄色| 中文字幕一区二区三区在线播放| 人妻无码一区二区三区| 国产精品性做久久久久久| 91制片厂毛片| 久久久久久久欧美精品| 97国产精东麻豆人妻电影| 欧美日韩亚洲一区三区| 在线免费一区| 成人激情免费视频| 久久一区二区三区欧美亚洲| 草草视频在线一区二区| 91成人免费视频| 一区二区三区日本视频| 国产精品日韩av| 激情在线视频| 精品性高朝久久久久久久| 亚洲精品字幕在线| 日韩午夜三级在线| 国产欧美一区二区三区视频在线观看| 欧美视频中文字幕| 精品无码一区二区三区蜜臀| 中文字幕精品在线不卡| 亚洲国产日韩一区无码精品久久久| 91在线精品一区二区| 成人区人妻精品一区二| 国产成人在线视频网址| 亚洲成人激情小说| 国产·精品毛片| 苍井空张开腿实干12次| 国产成人在线网站| 午夜福利三级理论电影| 成人av网站免费观看| 女性生殖扒开酷刑vk| 成人久久视频在线观看| 亚洲精品无码一区二区| 国产高清一区日本| 欧美日韩一区二区区别是什么| 国产精品一区在线观看乱码 | 九九九久久国产免费| 最新超碰在线| 久久久免费电影| 少妇视频一区| 国产91在线视频| 亚洲老司机网| αv一区二区三区| 久久夜色电影| 日本亚洲导航| 国产精品传媒精东影业在线| 日韩久久久久久久久久久久| 一区二区动漫| 又色又爽又高潮免费视频国产| 免费成人你懂的| 免费人成视频在线播放| 国产**成人网毛片九色 | 久久免费大视频| 成人在线免费高清视频| 国产剧情一区| 伊人久久av导航| 好吊一区二区三区| 日韩av播放器| 国产精品自拍一区| 中文字幕一区二区人妻在线不卡 | 精品香蕉一区二区三区| 午夜激情视频在线| 久久久久国产一区二区三区| 国产超碰精品| 动漫一区二区在线| 精品国产一区二区三区小蝌蚪| 亚洲激情免费视频| 久久国产小视频| 真实国产乱子伦对白视频| 久久久蜜桃一区二区人| www.欧美激情.com| 久久影院电视剧免费观看| 三级全黄做爰视频| 日韩欧美亚洲范冰冰与中字| 999免费视频| 亚洲天堂男人天堂| 久久免费电影| 成人av色在线观看| 国产成人1区| 国产精品入口芒果| 免费观看日韩电影| 亚洲国产综合视频| 一区二区三区四区激情| 中文字幕日本视频| 日韩精品免费一线在线观看| 天天摸天天碰天天爽天天弄| 日韩中文字幕久久| 成人免费网站视频| 国产精品theporn88| 国产高清一区二区| 99视频在线免费| www.色综合.com| 欧美日韩人妻精品一区二区三区| 在线精品视频免费播放| 成人午夜视频一区二区播放| 中文国产亚洲喷潮| ririsao久久精品一区| 91在线高清免费观看| 婷婷综合电影| 人妻少妇精品久久| 精品影视av免费| 国产三级在线观看完整版| 亚洲va韩国va欧美va精品| 国产精品久久综合青草亚洲AV| 伊人久久综合97精品| 欧美激情网站| 狠狠色综合色区| 久久男人av| 女女百合国产免费网站| 麻豆高清免费国产一区| 成年人网站免费看| 椎名由奈av一区二区三区| 天堂网中文字幕| 亚洲国产成人一区| 波多野结衣在线高清| 亚洲va码欧洲m码| 亚洲一区二区三区| 九热视频在线观看| 久久久久久久久一| 成人毛片一区二区三区| 国产视频精品久久久| 中文av在线全新| 国产一级二级三级精品| 欧美va久久久噜噜噜久久| 日本黄大片一区二区三区| 99久久婷婷国产精品综合| 日韩欧美激情视频| 亚洲激情视频网站| 成年美女黄网站色大片不卡| 精品国产福利| 久久一区二区三区四区五区| 91视频啊啊啊| 亚洲一区二区av电影| 午夜在线视频观看| 国内伊人久久久久久网站视频| 国产乱人伦精品一区| 欧日韩免费视频| 久久免费精品国产久精品久久久久| 国产成人无码精品亚洲| 亚洲国产美女精品久久久久∴| 91色在线看| 久久久影院一区二区三区| 中国女人久久久| 无码h肉动漫在线观看| 色婷婷综合在线| 九色porny在线| 91久久精品国产| 亚洲啪啪91| a级在线观看视频| 欧美日韩中文精品| 欧美三级电影一区二区三区| 国产精品久久久久久久久免费看| 香蕉综合视频| 熟女人妻一区二区三区免费看| 亚洲mv大片欧洲mv大片精品| 天天躁日日躁狠狠躁伊人| 国产精品99久久久久久www| 秋霞欧美视频| 欧美一级小视频| 午夜精品一区二区三区免费视频 | 日韩av无码中文字幕| 日韩av在线直播| 欧美va视频| 欧美国产视频一区| 99久久亚洲一区二区三区青草| 在线观看毛片av| 欧美日韩第一页| 美腿丝袜亚洲图片| 一级做a免费视频| 亚洲国产成人av好男人在线观看| 成人高潮成人免费观看| 91亚洲永久免费精品|