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

鴻蒙輕內核M核源碼分析系列六 任務及任務調度(1)任務棧

開發
本文帶領大家一起學習了鴻蒙輕內核的任務棧、任務上下文的基礎概念,剖析了任務棧初始化的代碼。

[[399126]]

 想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

繼續分析鴻蒙輕內核源碼,我們本文開始要分析下任務及任務調度模塊。首先,我們介紹下任務棧的基礎概念。任務棧是高地址向低地址生長的遞減棧,棧指針指向即將入棧的元素位置。初始化后未使用過的??臻g初始化的內容為宏OS_TASK_STACK_INIT代表的數值0xCACACACA,棧頂初始化為宏OS_TASK_MAGIC_WORD代表的數值0xCCCCCCCC。一個任務棧的示意圖如下,其中,棧底指針是棧的最大的內存地址,棧頂指針,是棧的最小的內存地址,棧指針從棧底向棧頂方向生長。

任務上下文(Task Context)是任務及任務調度模塊的另外一個重要的概念,它指的是任務運行的環境,例如包括程序計數器、堆棧指針、通用寄存器等內容。在多任務調度中,任務上下文切換(Task Context Switching)屬于核心內容,是多個任務運行在同一CPU核上的基礎。在任務調度時,保存退出運行狀態的任務使用的寄存器信息到任務棧,還會從進入運行狀態的任務的棧中讀取上下文信息,恢復寄存器信息。

下面,我們剖析下任務棧、任務棧初始化的源代碼,若涉及開發板部分,以開發板工程targets\cortex-m7_nucleo_f767zi_gcc\為例進行源碼分析。首先,看下任務上下文結構體。

1、TaskContext上下文結構體定義

在文件kernel\arch\arm\cortex-m7\gcc\los_arch_context.h中,定義的上下文的結構體如下,主要是浮點寄存器,通用寄存器。

  1. typedef struct TagTskContext { 
  2. #if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ 
  3.      (defined(__FPU_USED) && (__FPU_USED == 1U))) 
  4.     UINT32 S16; 
  5.     UINT32 S17; 
  6.     UINT32 S18; 
  7.     UINT32 S19; 
  8.     UINT32 S20; 
  9.     UINT32 S21; 
  10.     UINT32 S22; 
  11.     UINT32 S23; 
  12.     UINT32 S24; 
  13.     UINT32 S25; 
  14.     UINT32 S26; 
  15.     UINT32 S27; 
  16.     UINT32 S28; 
  17.     UINT32 S29; 
  18.     UINT32 S30; 
  19.     UINT32 S31; 
  20. #endif 
  21.     UINT32 uwR4; 
  22.     UINT32 uwR5; 
  23.     UINT32 uwR6; 
  24.     UINT32 uwR7; 
  25.     UINT32 uwR8; 
  26.     UINT32 uwR9; 
  27.     UINT32 uwR10; 
  28.     UINT32 uwR11; 
  29.     UINT32 uwPriMask; 
  30.     UINT32 uwR0; 
  31.     UINT32 uwR1; 
  32.     UINT32 uwR2; 
  33.     UINT32 uwR3; 
  34.     UINT32 uwR12; 
  35.     UINT32 uwLR; 
  36.     UINT32 uwPC; 
  37.     UINT32 uwxPSR; 
  38. #if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ 
  39.      (defined(__FPU_USED) && (__FPU_USED == 1U))) 
  40.     UINT32 S0; 
  41.     UINT32 S1; 
  42.     UINT32 S2; 
  43.     UINT32 S3; 
  44.     UINT32 S4; 
  45.     UINT32 S5; 
  46.     UINT32 S6; 
  47.     UINT32 S7; 
  48.     UINT32 S8; 
  49.     UINT32 S9; 
  50.     UINT32 S10; 
  51.     UINT32 S11; 
  52.     UINT32 S12; 
  53.     UINT32 S13; 
  54.     UINT32 S14; 
  55.     UINT32 S15; 
  56.     UINT32 FPSCR; 
  57.     UINT32 NO_NAME; 
  58. #endif 
  59. } TaskContext; 

 2、任務棧相關函數

2.1 任務棧初始化函數

在文件kernel\arch\arm\cortex-m7\gcc\los_context.c中定義了任務棧初始化函數VOID *HalTskStackInit(t()。該函數被文件kernel\src\los_task.c中的函數UINT32 OsNewTaskInit()調用完成任務初始化,并進一步在創建任務函數UINT32 LOS_TaskCreateOnly()中調用,完成新創建任務的任務棧初始化。

該函數使用3個參數,一個是任務編號UINT32 taskID,一個是初始化的棧的大小UINT32 stackSize,第3個參數是棧頂指針VOID *topStack。⑴處代碼把棧內容初始化為OS_TASK_STACK_INIT,⑵處把棧頂初始化為OS_TASK_MAGIC_WORD。

⑶處代碼獲取任務上下文的指針地址TaskContext *context。對于新創建任務,從棧的底部開始,大小為sizeof(TaskContext)的??臻g存放上下文的數據。⑷處如果支持浮點數計算,需要初始化浮點數相關的寄存器。⑸初始化通用寄存器,其中.uwLR初始化為(UINT32)(UINTPTR)HalSysExit。.uwPC初始化為(UINT32)(UINTPTR)OsTaskEntry,這是CPU首次執行該任務時運行的第一條指令的位置。這2個函數下文會分析。

⑹處返回值是指針(VOID *)taskContext,這個就是任務初始化后的棧指針,注意不是從棧底開始了,棧底保存的是上下文,棧指針要減去上下文占用的棧大小。在棧中,從TaskContext *context指針增加的方向,依次保存上下文結構體的第一個成員,第二個成員…另外,初始化棧的時候,除了特殊的幾個寄存器,不同寄存器的初始值雖然沒有什么意義,也有些初始化的規律。比如R2寄存器初始化為0x02020202L,R12寄存器初始化為0x12121212L初始化的內容和寄存器編號有關聯,其余類似。

  1. LITE_OS_SEC_TEXT_INIT VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOID *topStack) 
  2.     TaskContext *context = NULL
  3.     errno_t result; 
  4.  
  5.     /* initialize the task stack, write magic num to stack top */ 
  6. ⑴  result = memset_s(topStack, stackSize, (INT32)(OS_TASK_STACK_INIT & 0xFF), stackSize); 
  7.     if (result != EOK) { 
  8.         printf("memset_s is failed:%s[%d]\r\n", __FUNCTION__, __LINE__); 
  9.     } 
  10. ⑵  *((UINT32 *)(topStack)) = OS_TASK_MAGIC_WORD; 
  11.  
  12. ⑶  context = (TaskContext *)(((UINTPTR)topStack + stackSize) - sizeof(TaskContext)); 
  13.  
  14. #if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ 
  15.      (defined(__FPU_USED) && (__FPU_USED == 1U))) 
  16. ⑷  context->S16 = 0xAA000010; 
  17.     context->S17 = 0xAA000011; 
  18.     context->S18 = 0xAA000012; 
  19.     context->S19 = 0xAA000013; 
  20.     context->S20 = 0xAA000014; 
  21.     context->S21 = 0xAA000015; 
  22.     context->S22 = 0xAA000016; 
  23.     context->S23 = 0xAA000017; 
  24.     context->S24 = 0xAA000018; 
  25.     context->S25 = 0xAA000019; 
  26.     context->S26 = 0xAA00001A; 
  27.     context->S27 = 0xAA00001B; 
  28.     context->S28 = 0xAA00001C; 
  29.     context->S29 = 0xAA00001D; 
  30.     context->S30 = 0xAA00001E; 
  31.     context->S31 = 0xAA00001F; 
  32.     context->S0 = 0xAA000000; 
  33.     context->S1 = 0xAA000001; 
  34.     context->S2 = 0xAA000002; 
  35.     context->S3 = 0xAA000003; 
  36.     context->S4 = 0xAA000004; 
  37.     context->S5 = 0xAA000005; 
  38.     context->S6 = 0xAA000006; 
  39.     context->S7 = 0xAA000007; 
  40.     context->S8 = 0xAA000008; 
  41.     context->S9 = 0xAA000009; 
  42.     context->S10 = 0xAA00000A; 
  43.     context->S11 = 0xAA00000B; 
  44.     context->S12 = 0xAA00000C; 
  45.     context->S13 = 0xAA00000D; 
  46.     context->S14 = 0xAA00000E; 
  47.     context->S15 = 0xAA00000F; 
  48.     context->FPSCR = 0x00000000; 
  49.     context->NO_NAME = 0xAA000011; 
  50. #endif 
  51.  
  52. ⑸  context->uwR4 = 0x04040404L; 
  53.     context->uwR5 = 0x05050505L; 
  54.     context->uwR6 = 0x06060606L; 
  55.     context->uwR7 = 0x07070707L; 
  56.     context->uwR8 = 0x08080808L; 
  57.     context->uwR9 = 0x09090909L; 
  58.     context->uwR10 = 0x10101010L; 
  59.     context->uwR11 = 0x11111111L; 
  60.     context->uwPriMask = 0; 
  61.     context->uwR0 = taskID; 
  62.     context->uwR1 = 0x01010101L; 
  63.     context->uwR2 = 0x02020202L; 
  64.     context->uwR3 = 0x03030303L; 
  65.     context->uwR12 = 0x12121212L; 
  66.     context->uwLR = (UINT32)(UINTPTR)HalSysExit; 
  67.     context->uwPC = (UINT32)(UINTPTR)OsTaskEntry; 
  68.     context->uwxPSR = 0x01000000L; 
  69.  
  70. ⑹  return (VOID *)context; 

 2.2 獲取任務棧水線函數

隨著任務棧入棧、出棧,當前棧使用的大小不一定是最大值,UINT32 OsGetTaskWaterLine(UINT32 taskID)可以獲取的棧使用的最大值即水線WaterLine。該函數定義在文件kernel\src\los_task.c,它需要1個參數,即UINT32 taskID任務編號,返回值UINT32 peakUsed表示獲取的水線值,即任務棧使用的最大值。

我們詳細看下代碼,⑴處代碼表示如果棧頂等于設置的魔術字,說明棧沒有被溢出破壞,從棧頂開始棧內容被寫滿宏OS_TASK_STACK_INIT的部分是沒有使用過的棧空間。使用臨時棧指針stackPtr指針變量依次向棧底方向增加,判斷棧是否被使用過,while循環結束,棧指針stackPtr指向最大的未使用過的棧地址。⑵處代碼獲取最大的使用過的??臻g大小,即需要的水線。⑶處如果棧頂溢出,則返回無效值OS_NULL_INT。

該函數被kernel\base\los_task.c中的函數LOS_TaskInfoGet(UINT32 taskId, TSK_INFO_S *taskInfo)調用,獲取任務的信息。在shell模塊也會使用來或者棧信息。

  1. UINT32 OsStackWaterLineGet(const UINTPTR *stackBottom, const UINTPTR *stackTop, UINT32 *peakUsed) 
  2.     UINT32 size
  3.     const UINTPTR *tmp = NULL
  4. ⑴  if (*stackTop == OS_STACK_MAGIC_WORD) { 
  5.         tmp = stackTop + 1; 
  6.         while ((tmp < stackBottom) && (*tmp == OS_STACK_INIT)) { 
  7.             tmp++; 
  8.         } 
  9. ⑵      size = (UINT32)((UINTPTR)stackBottom - (UINTPTR)tmp); 
  10.         *peakUsed = (size == 0) ? size : (size + sizeof(CHAR *)); 
  11.         return LOS_OK; 
  12.     } else { 
  13.         *peakUsed = OS_INVALID_WATERLINE; 
  14.         return LOS_NOK; 
  15.     } 

  1. UINT32 OsGetTaskWaterLine(UINT32 taskID) 
  2.     UINT32 *stackPtr = NULL
  3.     UINT32 peakUsed; 
  4.  
  5. ⑴  if (*(UINT32 *)(UINTPTR)OS_TCB_FROM_TID(taskID)->topOfStack == OS_TASK_MAGIC_WORD) { 
  6.         stackPtr = (UINT32 *)(UINTPTR)(OS_TCB_FROM_TID(taskID)->topOfStack + OS_TASK_STACK_TOP_OFFSET); 
  7.         while ((stackPtr < (UINT32 *)(OS_TCB_FROM_TID(taskID)->stackPointer)) && (*stackPtr == OS_TASK_STACK_INIT)) { 
  8.             stackPtr += 1; 
  9.         } 
  10. ⑵      peakUsed = OS_TCB_FROM_TID(taskID)->stackSize - 
  11.             ((UINT32)(UINTPTR)stackPtr - OS_TCB_FROM_TID(taskID)->topOfStack); 
  12.     } else { 
  13. ⑶      PRINT_ERR("CURRENT task %s stack overflow!\n", OS_TCB_FROM_TID(taskID)->taskName); 
  14.         peakUsed = OS_NULL_INT; 
  15.     } 
  16.     return peakUsed; 

 3、任務進入退出函數

3.1、任務退出函數

在初始化上下文的時候,鏈接寄存器設置的是函數(UINT32)(UINTPTR)HalSysExit,該函數定義在文件kernel\src\los_task.c。函數代碼里調用LOS_IntLock()關中斷,然后進入死循環。在任務正常調度期間,該函數理論上不會被執行。在系統異常時,主動調用LOS_Panic()c觸發異常時,也會調用該函數。

  1. LITE_OS_SEC_TEXT_MINOR VOID HalSysExit(VOID) 
  2.     LOS_IntLock(); 
  3.     while (1) { 
  4.     } 

 3.2、任務進入函數

在初始化上下文的時候,PC寄存器設置的是函數VOID OsTaskEntry(UINT32 taskId),該函數定義在文件kernel\base\los_task.c,我們來分析下源代碼,⑴處代碼獲取taskCB,然后執行⑵調用任務的入口函數。等任務執行完畢后,執行⑶刪除任務。通常任務入口執行函數都是while循環,任務不執行時,會調度到其他任務或者空閑任務,不會執行到刪除任務階段。

  1. LITE_OS_SEC_TEXT_INIT VOID OsTaskEntry(UINT32 taskID) 
  2.     UINT32 retVal; 
  3. ⑴  LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID); 
  4.  
  5. ⑵  (VOID)taskCB->taskEntry(taskCB->arg); 
  6.  
  7. ⑶  retVal = LOS_TaskDelete(taskCB->taskID); 
  8.     if (retVal != LOS_OK) { 
  9.         PRINT_ERR("Delete Task[TID: %d] Failed!\n", taskCB->taskID); 
  10.     } 

 小結

本文帶領大家一起學習了鴻蒙輕內核的任務棧、任務上下文的基礎概念,剖析了任務棧初始化的代碼。后續也會陸續推出更多的分享文章,敬請期待。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-05-20 09:50:20

鴻蒙HarmonyOS應用

2021-05-14 10:34:29

鴻蒙HarmonyOS應用

2021-05-12 09:45:20

鴻蒙HarmonyOS應用

2021-05-10 15:05:56

鴻蒙HarmonyOS應用

2022-01-10 15:31:44

鴻蒙HarmonyOS應用

2022-01-12 10:50:23

鴻蒙HarmonyOS應用

2021-06-04 09:57:49

鴻蒙HarmonyOS應用

2021-05-17 09:28:59

鴻蒙HarmonyOS應用

2021-06-04 14:15:10

鴻蒙HarmonyOS應用

2021-05-08 15:14:50

鴻蒙HarmonyOS應用

2021-10-20 16:08:57

鴻蒙HarmonyOS應用

2021-05-25 09:28:34

鴻蒙HarmonyOS應用

2021-05-31 20:30:55

鴻蒙HarmonyOS應用

2022-03-11 20:23:14

鴻蒙源碼分析進程管理

2022-03-03 18:28:28

Harmony進程任務管理模塊

2022-04-13 11:02:12

鴻蒙事件模塊事件Event

2021-07-06 09:45:03

鴻蒙HarmonyOS應用

2021-09-22 14:36:32

鴻蒙HarmonyOS應用

2021-05-11 09:54:55

鴻蒙HarmonyOS應用

2021-05-21 09:25:11

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

欧美日韩夫妻久久| 久久久久久久久伊人| 在线观看国产欧美| 国产精品久久久久久久99| 欧美日韩经典丝袜| 久久新电视剧免费观看| 国产精品一区二区三| 欧美成欧美va| 怕怕欧美视频免费大全| 欧美制服丝袜第一页| 中国一级黄色录像| 深夜福利视频一区| 九九九久久久精品| 欧美激情久久久久久| 国产全是老熟女太爽了| 色诱色偷偷久久综合| 亚洲一区二区中文在线| 日韩欧美一区二区视频在线播放| 亚洲一级视频在线观看| 国一区二区在线观看| 精品国产欧美一区二区| 少妇激情一区二区三区| 国精一区二区三区| 亚洲国产精品成人久久综合一区| 91观看网站| 国产情侣小视频| 国内揄拍国内精品久久| 在线亚洲国产精品网| 涩视频在线观看| 日韩综合久久| 黑人巨大精品欧美一区二区一视频| 亚洲最大免费| 精品乱码一区二区三四区视频| 国内精品自线一区二区三区视频| 国产91色在线免费| 豆国产97在线 | 亚洲| 成人三级视频| 国产视频精品va久久久久久| 国产裸体视频网站| 欧美日韩破处视频| 日本丰满少妇一区二区三区| 国产精品专区在线| 性xxxfreexxxx性欧美| 欧美激情在线免费观看| 欧美性xxxx69| 亚洲av成人精品毛片| 国产精品一卡二卡在线观看| 国产精品亚发布| 中文字幕xxxx| 另类亚洲自拍| 91wwwcom在线观看| 精品无码m3u8在线观看| 欧美激情自拍| 美日韩精品视频免费看| 欧美aaa级片| 激情综合网站| 亚洲石原莉奈一区二区在线观看| 亚洲最大免费视频| 久久丝袜视频| 亚洲国产精品va在线观看黑人| 精品人妻一区二区乱码| 久久综合给合| 日韩午夜av一区| 999热精品视频| 国产精品99久久免费| 911精品产国品一二三产区| 无限资源日本好片| 九九热这里有精品| 欧美丰满嫩嫩电影| 亚洲天堂av一区二区| 日韩精品第一| 欧美日韩一区二区三区四区五区| 高潮一区二区三区| 日韩三区四区| 欧美大黄免费观看| 小毛片在线观看| 天堂在线精品| 国产一区二区三区高清在线观看| 国产在线综合视频| 久久精品国产www456c0m| 丝袜一区二区三区| 欧美特级一级片| 欧美特黄a级高清免费大片a级| 欧美黄色片在线观看| 久久亚洲av午夜福利精品一区| 一区免费视频| 热久久这里只有| 中文av免费观看| 国内久久精品视频| 国产伦精品一区二区三区四区免费| 五月激情婷婷综合| 国产亚洲成aⅴ人片在线观看 | 丁香桃色午夜亚洲一区二区三区| 国产精品大全| 嫩草精品影院| 亚洲欧洲国产日韩| 99久久国产综合精品五月天喷水| 中文在线免费视频| 欧美巨大另类极品videosbest| 人妻精油按摩bd高清中文字幕| 欧美中文一区| 最近2019中文字幕在线高清| 久久久久久久久久久久久女过产乱| 激情国产一区| 国产精品成人av性教育| 超碰福利在线观看| 久久网站最新地址| 国产欧美自拍视频| 乱人伦视频在线| 欧美日韩国产首页| 三级视频网站在线观看| 水蜜桃精品av一区二区| 2024亚洲男人天堂| 国产精品热久久| 26uuu久久天堂性欧美| 亚洲第一精品区| 亚洲女同志freevdieo| 欧美精品1区2区3区| 黄色a一级视频| 小处雏高清一区二区三区| 91爱视频在线| 国产激情视频在线播放| 国产午夜精品久久久久久久| 国产精品入口芒果| 欧美黄页免费| 国产一区二区三区中文| 国产精品成人久久| 久国产精品韩国三级视频| 久久综合色一本| 久久大胆人体| 欧美高清精品3d| 女人黄色一级片| 亚洲欧美不卡| 国产亚洲欧美一区二区| 亚洲大胆人体大胆做受1| 欧美色中文字幕| 国产ts丝袜人妖系列视频| 综合一区av| 成人精品久久久| 98在线视频| 欧美在线观看一区二区| 中文字幕一二三四区| 亚洲精品精选| 国产伦视频一区二区三区| 超碰在线最新| 91麻豆精品久久久久蜜臀| 精品欧美一区二区久久久| 亚洲综合丁香| 欧美极品色图| h片在线观看视频免费免费| 日韩一区二区三区四区| 日韩在线不卡av| 免费观看成人av| 日韩久久久久久久久久久久久| 欧美三级网站| 日韩成人xxxx| 久久久久久久久久免费视频 | 精品电影在线| 欧美性色视频在线| 五月婷婷综合在线观看| 国产精品一二| 欧美不卡三区| 欧美香蕉视频| 国产一区av在线| 伊人久久亚洲综合| 中文字幕一区二区三区不卡在线 | 性欧美18~19sex高清播放| 精品99久久久久久| 91美女免费看| 久久综合成人精品亚洲另类欧美 | 欧美成人女星排行榜| 日韩一级片av| 国产精品一区二区黑丝| 日韩av新片网| 国产精品一区二区av交换| 国产精品久久久久久久久影视| av大片在线播放| 91精品国产aⅴ一区二区| 少妇久久久久久被弄高潮| 国产成人在线观看| 国产精品无码人妻一区二区在线| 亚洲盗摄视频| 国产精品免费电影| 成人黄视频在线观看| 精品国产一区二区三区不卡 | 久蕉在线视频| 欧美日本在线视频| 欧美国产在线看| 91香蕉视频污在线| 久久这里只精品| 欧美福利在线| 久久久久高清| 欧美黑粗硬大| 午夜精品福利在线观看| 男女网站在线观看| 欧美精品第一页| 91久久国产视频| 中文字幕乱码日本亚洲一区二区| 欧美xxxxxbbbbb| 性欧美videos另类喷潮| 只有这里有精品| 天堂成人娱乐在线视频免费播放网站| 国产精品一区专区欧美日韩| 国产经典三级在线| 中文字幕亚洲一区二区三区五十路| 精品人妻一区二区三区四区不卡 | 99精品视频免费在线观看| 久久久久国产一区| 激情五月***国产精品| 色之综合天天综合色天天棕色| 午夜视频在线观看精品中文| 日本老师69xxx| 在线观看电影av| 在线播放日韩精品| 人人妻人人澡人人爽精品日本| 欧美亚州韩日在线看免费版国语版| 欧美精品久久久久性色| 国产欧美一区二区三区鸳鸯浴 | 成人高清视频在线| 色乱码一区二区三区在线| 亚洲婷婷在线| 中文字幕一区二区三区在线乱码 | 精品国产第一区二区三区观看体验 | 欧美资源在线观看| 一区二区三区伦理| 中文字幕日本精品| 日本精品专区| 亚洲国产福利在线| 99久久婷婷国产一区二区三区| 日本丰满少妇一区二区三区| 日产电影一区二区三区| 亚洲欧洲综合另类| 免费黄色在线网址| 久久精品亚洲精品国产欧美kt∨| 丰满岳乱妇一区二区| 黄色资源网久久资源365| 91极品尤物在线播放国产| 亚洲一区黄色| 国产婷婷一区二区三区| 亚洲欧美综合国产精品一区| 亚洲免费av网| 日韩在线欧美| 亚洲一区三区视频在线观看| 国产99亚洲| 久久一区二区三区av| gogo人体一区| 超碰在线97av| 日韩中文字幕在线一区| 91热精品视频| 四虎精品永久免费| 国产精品露脸自拍| 朝桐光一区二区| 国产精品99久久久久久久久久久久| 亚洲最大成人| 日本不卡免费高清视频| 成人午夜视屏| 国产成人在线亚洲欧美| 色婷婷综合久久久中字幕精品久久| 日本精品视频在线| 另类专区亚洲| 国产精品久久久久9999| 欧美黄色三级| 国产一区视频在线播放| av在线精品| wwwxx欧美| 韩国女主播一区二区三区| 国产亚洲精品久久飘花| 伊人春色精品| 日韩精品一区二区三区外面 | 亚洲性xxxx| 成av人电影在线观看| 中文字幕亚洲欧美| 老司机免费在线视频| 欧美日韩成人网| 国产99在线观看| 日本久久久久久久久久久| 久久福利在线| 亚洲free嫩bbb| 1204国产成人精品视频| 精品国产乱码久久久久久88av| 久草成人资源| 一级日韩一区在线观看| 午夜精品偷拍| 91黄色小网站| 久久99热这里只有精品| 91人人澡人人爽| 91日韩一区二区三区| 亚洲天堂岛国片| 亚洲日本va在线观看| 亚洲精品1区2区3区| 欧美在线你懂得| 亚洲成人一级片| 亚洲久久久久久久久久| 一广人看www在线观看免费视频| 欧美国产日本在线| 欧美xo影院| 91亚洲永久免费精品| 精品五月天堂| 亚洲精品在线免费看| 国产精品分类| 日本888xxxx| 成人午夜短视频| 久久久久久久毛片| 一区二区三区美女视频| 日韩电影在线观看一区二区| 宅男噜噜噜66一区二区66| 天堂91在线| 欧美另类极品videosbest最新版本 | www.久久精品| 三上悠亚在线观看视频| 欧美日韩国产限制| 国产乱色精品成人免费视频| 日韩的一区二区| 最新国产在线拍揄自揄视频| 日韩女优人人人人射在线视频| 亚洲精品国产九九九| 欧美亚州在线观看| 在线欧美亚洲| 青青草原播放器| 国产婷婷一区二区| 日韩欧美三级视频| 精品伦理精品一区| 麻豆影视在线观看_| 国产精品91一区| 美女网站色精品尤物极品姐弟| 午夜探花在线观看| 免费黄网站欧美| 亚洲午夜福利在线观看| 亚洲国产精品久久人人爱蜜臀 | 小h片在线观看| aaa级精品久久久国产片| 99热国内精品| 男女啪啪网站视频| www一区二区| 日韩精品在线免费看| 日韩午夜在线播放| 成人免费网站在线观看视频| 国产欧美日韩中文字幕| 国产精品欧美三级在线观看| 日韩视频第二页| 99久久精品国产导航| www.youjizz.com亚洲| 日韩一级在线观看| 黄色网址视频在线观看| 91精品久久久久久| 久久在线播放| 蜜臀一区二区三区精品免费视频| 国产三级精品视频| 日韩欧美国产另类| 国产亚洲一区二区在线| 成人交换视频| 先锋影音一区二区三区| 日本欧美在线看| 婷婷综合在线视频| 欧美三级三级三级| 成人免费黄色网页| 国产精品久久久久久av下载红粉| 欧美日韩xxxx| 久久这里只精品| 亚洲色图欧洲色图| www.日本在线观看| 久久久亚洲国产| 美日韩黄色大片| 999香蕉视频| 亚洲国产精品精华液ab| 亚洲天堂男人网| 久久亚洲国产精品| 中文字幕久久精品一区二区| 国产一线二线三线女| 99re热这里只有精品视频| 无码人妻丰满熟妇区五十路| 中文字幕欧美日韩在线| 日韩综合一区二区三区| 国内自拍在线观看| 国产日产欧产精品推荐色 | 91超碰在线| 欧美三日本三级少妇三99| 日本中文字幕一区| 免费成年人视频在线观看| 精品久久人人做人人爰| 亚洲啊v在线| 亚洲一区二区三区加勒比| 国产黄色精品视频| 亚洲天堂男人av| 久久久精品一区二区| 丁香5月婷婷久久| 久久九九国产视频| 亚洲精品视频在线观看网站| 亚洲欧美色视频| 国产在线视频不卡| 一本不卡影院| 成人无码精品1区2区3区免费看 | 亚洲一区二区在线免费看| 精品视频二区| 99re视频在线播放| 久久久久综合| www青青草原| 亚洲开心激情网| 91精品一区| 欧美另类高清视频在线|