久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

操作系统实验报告1:ucore Lab 1

發布時間:2024/6/3 windows 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统实验报告1:ucore Lab 1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

操作系統實驗報告1

實驗內容

  • 閱讀 uCore 實驗項目開始文檔 (uCore Lab 0),準備實驗平臺,熟悉實驗工具。

  • uCore Lab 1:系統軟件啟動過程
    (1) 編譯運行 uCore Lab 1 的工程代碼;
    (2) 完成 uCore Lab 1 練習 1-4 的實驗報告;
    (3) 嘗試實現 uCore Lab 1 練習 5-6 的編程作業;
    (4) 思考如何實現 uCore Lab 1 擴展練習 1-2。

實驗環境

  • 架構:Intel x86_64 (虛擬機)
  • 操作系統:Ubuntu 20.04
  • 匯編器:gas (GNU Assembler) in AT&T mode
  • 編譯器:gcc

(1)編譯運行 uCore Lab 1 的工程代碼

在lab1的makefile文件目錄下, 輸入命令:

make

即可編譯運行 uCore Lab 1 的工程代碼

執行截圖:

如果輸入make,程序報錯,提示make: Nothing to be done for 'TARGETS'.,那么說明文件沒有更新而且已經編譯過了,想要再次強制編譯,只要輸入make clean,然后再輸入make就可以編譯了:

(2) uCore Lab 1 練習 1-4 實驗報告

lab1 練習 1:理解通過 make 生成執行文件的過程

列出本實驗各練習中對應的 OS 原理的知識點,并說明本實驗中的實現部分如何對應和體現了原理中的基本概念和關鍵知識點。

在此練習中,大家需要通過靜態分析代碼來了解:

操作系統鏡像文件 ucore.img 是如何一步一步生成的?(需要比較詳細地解釋 Makefile 中每一條相關命令和命令參數的含義,以及說明命令導致的結果)

首先找到makefile文件中注釋為create ucore.img這一部分的內容:

# create ucore.img UCOREIMG := $(call totarget,ucore.img)$(UCOREIMG): $(kernel) $(bootblock)$(V)dd if=/dev/zero of=$@ count=10000$(V)dd if=$(bootblock) of=$@ conv=notrunc$(V)dd if=$(kernel) of=$@ seek=1 conv=notrunc$(call create_target,ucore.img)

UCOREIMG := $(call totarget,ucore.img)表示調用call函數生成UCOREIMG,其中call為調用call函數,totarget,ucore.img中的totarget可以在tools/function.mk中找到,定義為totarget = $(addprefix $(BINDIR)$(SLASH),$(1)),addprefix代表在前面加上,$(BINDIR)代表bin,$(SLASH)代表/,所以totarget,ucore.img的意思就是在ucore.img前面加上bin/,調用call函數生成的UCOREIMG即為bin/ucore.img。

$(UCOREIMG): $(kernel) $(bootblock)表示生成UCOREIMG首先要依賴kernel和bootblock這兩個文件的生成,這兩個文件具體的生成過程會在后面提到。

$(V)dd if=/dev/zero of=$@ count=10000表示創建一個每個塊默認為512字節,一共10000個塊,用0填充的文件,分配給UCOREIMG。if=/dev/zero代表讀取/dev/zero文件,/dev/zero文件是一個特殊的文件,讀取它會提供無限的空字符,of=$@的$@代表之前讀取的數據將會復制到的目標文件,這里是UCOREIMG,count=10000表示一共10000個塊。

$(V)dd if=$(bootblock) of=$@ conv=notrunc表示將bootblock中的內容寫到UCOREIMG的第一個塊里。conv=notrun代表寫入文件時防止截斷,保持數據完整性。

$(V)dd if=$(kernel) of=$@ seek=1 conv=notrunc表示從UCOREIMG的第二個塊開始寫kernel里的內容,seek=1代表跳過seek個塊之后再開始填寫,這里為跳過1個塊。

$(call create_target,ucore.img)直接返回。

生成UCOREIMG首先要依賴kernel和bootblock這兩個文件的生成,首先來看kernel文件的生成

找到makefile文件中注釋為kernel這一部分的內容:

KINCLUDE += kern/debug/ \kern/driver/ \kern/trap/ \kern/mm/KSRCDIR += kern/init \kern/libs \kern/debug \kern/driver \kern/trap \kern/mmKCFLAGS += $(addprefix -I,$(KINCLUDE))$(call add_files_cc,$(call listf_cc,$(KSRCDIR)),kernel,$(KCFLAGS))KOBJS = $(call read_packet,kernel libs)# create kernel target kernel = $(call totarget,kernel)$(kernel): tools/kernel.ld$(kernel): $(KOBJS)@echo + ld $@$(V)$(LD) $(LDFLAGS) -T tools/kernel.ld -o $@ $(KOBJS)@$(OBJDUMP) -S $@ > $(call asmfile,kernel)@$(OBJDUMP) -t $@ | $(SED) '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > $(call symfile,kernel)$(call create_target,kernel)

一開始的KINCLUDE和KSRCDIR處的代碼將kern目錄的前綴定義為kinclude和ksrcdir

KCFLAGS += $(addprefix -I,$(KINCLUDE))表示將kinclude的目錄前綴加上-I選項,提供交互模式

$(call add_files_cc,$(call listf_cc,$(KSRCDIR)),kernel,$(KCFLAGS))生成kern目錄下的.o文件,這些.o文件生成時使用的具體命令的參數和方式都差不多,具體含義后面會提到。

KOBJS = $(call read_packet,kernel libs)表示使用call函數鏈接read_packet和kernel libs給KOBJS

kernel = $(call totarget,kernel)代表表示調用call函數生成kernel,實際為文件bin/kernel

$(kernel): tools/kernel.ld表示生成kernel文件需要依賴tools以及kernel.ld鏈接配置文件

$(kernel): $(KOBJS)表示生成kernel時還需要依賴KOBJS

@echo + ld $@中的echo表示顯示內容,ld代表鏈接,$@代表目標文件,語句代表將下面的文件和目標文件鏈接起來,同時打印kernel目標文件名

$(V)$(LD) $(LDFLAGS) -T tools/kernel.ld -o $@ $(KOBJS)代表使用kernel.ld作為連接器腳本,鏈接的文件有obj/libs/和obj/kernel/下的所有的obj文件生成kernel文件,關鍵參數為-T <scriptfile>,代表讓連接器使用指定的腳本,這里是kernel.ld

@$(OBJDUMP) -S $@ > $(call asmfile,kernel)代表使用objdump工具對kernel文件進行反匯編,便于調試,-S選項為交替顯示C源碼和匯編代碼。

@$(OBJDUMP) -t $@ | $(SED) '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > $(call symfile,kernel)代表使用objdump工具通過解析kernel文件從而能得到符號表。

$(call create_target,kernel)生成kernel直接返回

輸入make "V=",查看生成kernel文件的具體過程:

可以看到,生成kernel,首先要依賴

kernel.ld init.o stdio.o readline.o panic.o kdebug.o kmonitor.o clock.o console.o picirq.o intr.o trap.o vectors.o trapentry.o pmm.o string.o printfmt.o

其中kernel.ld已經存在,而生成kernel時,makefile中帶@的前綴的指令都不是必需的,編譯選項中:

ld表示鏈接,-m表示模擬指定的連接器,-nostdlib表示不使用標準庫,-T表示讓連接器使用指定的腳本,tools/kernel.ld是指定連接器腳本,-o表示指定輸出文件的名稱。

依賴的.o文件生成時使用的具體命令的參數和方式都差不多,比如pmm.o,輸入make "V="查看編譯實際命令:

其中的關鍵參數選項:

-I<dir>如-Ikern/mm/、-Ikern/debug/等表示給搜索頭文件添加路徑

-march=i686表示指定CPU架構為i686

-fno-builtin表示除非使用__builtin_前綴,否則不優化builtin函數

-fno-PIC表示生成位置無關代碼

-Wall表示開啟所有警告

-ggdb表示生成gdb可以使用的調試信息,便于使用qemu和gdb來進行調試

-m32表示生成在32位環境下適用的代碼,因為ucore是32位的軟件

-gstabs表示生成stabs格式的調試信息,便于monitor顯示函數調用棧信息

-nostdinc表示不使用標準庫,因為OS內核是提供服務的,不依賴其它服務

-fno-stack-protector表示不生成檢測緩沖區溢出部分的代碼

然后來看bootblock文件的生成

找到makefile文件中注釋為create bootblock這一部分的內容:

# create bootblock bootfiles = $(call listf_cc,boot) $(foreach f,$(bootfiles),$(call cc_compile,$(f),$(CC),$(CFLAGS) -Os -nostdinc))bootblock = $(call totarget,bootblock)$(bootblock): $(call toobj,$(bootfiles)) | $(call totarget,sign)@echo + ld $@$(V)$(LD) $(LDFLAGS) -N -e start -Ttext 0x7C00 $^ -o $(call toobj,bootblock)@$(OBJDUMP) -S $(call objfile,bootblock) > $(call asmfile,bootblock)@$(OBJCOPY) -S -O binary $(call objfile,bootblock) $(call outfile,bootblock)@$(call totarget,sign) $(call outfile,bootblock) $(bootblock)$(call create_target,bootblock)

bootfiles = $(call listf_cc,boot)中使用call調用listf_cc函數過濾對應目錄下的.c和.S文件,用boot替換listf_cc里面的變量,將listf_cc的返回值賦給bootfiles

$(foreach f,$(bootfiles),$(call cc_compile,$(f),$(CC),$(CFLAGS) -Os -nostdinc))編譯bootfiles生成.o文件,其中-Os參數表示為減小代碼大小而進行優化

上面兩行代碼用來生成bootasm.o,bootmain.o,實際的代碼是由宏批量生成。

bootblock = $(call totarget,bootblock)表示bootblock實際為文件bin/bootblock

$(bootblock): $(call toobj,$(bootfiles)) | $(call totarget,sign)其中的toobj表示給輸出參數加上前綴obj/,文件后綴名改為.o,語句表示bootblock依賴于obj/boot/*.o與bin/sign文件

@echo + ld $@代表將下面的文件和目標文件鏈接起來,同時打印kernel目標文件名

$(V)$(LD) $(LDFLAGS) -N -e start -Ttext 0x7C00 $^ -o $(call toobj,bootblock)表示鏈接所有.o文件生成obj/bootblock.o文件,其中-N代表設置代碼段和數據段均可讀寫,-e start代表指定入口為start,-Ttext 0x7C00代表代碼段開始位置為0x7C00

@$(OBJDUMP) -S $(call objfile,bootblock) > $(call asmfile,bootblock)表示使用objdump工具對obj/bootblock.o文件進行反匯編得到obj/bootblock.asm文件,便于調試,-S選項為交替顯示C源碼和匯編代碼。

@$(OBJCOPY) -S -O binary $(call objfile,bootblock) $(call outfile,bootblock)表示使用objcopy工具將obj/bootblock.o拷貝到obj/bootblock.out文件,其中-S選項代表移除所有符號和重定位信息,-O binary選項代表指定輸出格式為二進制

@$(call totarget,sign) $(call outfile,bootblock) $(bootblock)表示使用bin/sign工具將之前的obj/bootblock.out用來生成bin/bootblock目標文件

$(call create_target,bootblock)直接返回

輸入make "V=",查看生成bootblock文件的具體過程:

其中之前沒有提到過的關鍵參數有:

-N代表設置代碼段和數據段均可讀寫,-e <entry>代表指定入口,這里是start,-Ttext代表代碼段開始位置,這里是0x7C00

可以看到,生成bootblock,首先要依賴

bootasm.o bootmain.o sign

生成bootasm.o依賴bootasm.S,輸入make "V=",查看生成bootasm.o文件的具體過程:

編譯命令中關鍵的參數選項有:

-I<dir>如-Iboot/、-Ilibs/等表示給搜索頭文件添加路徑

-fno-builtin表示除非使用__builtin_前綴,否則不優化builtin函數

-Wall表示開啟所有警告

-ggdb表示生成gdb可以使用的調試信息,便于使用qemu和gdb來進行調試

-m32表示生成在32位環境下適用的代碼,因為ucore是32位的軟件

-gstabs表示生成stabs格式的調試信息,便于monitor顯示函數調用棧信息

-nostdinc表示不使用標準庫,因為OS內核是提供服務的,不依賴其它服務

-fno-stack-protector表示不生成檢測緩沖區溢出部分的代碼

-Os參數表示為減小代碼大小而進行優化,因為主引導扇區只有512字節,其中最后兩位已被占用,最后寫出的bootloader不能大于510字節。

生成bootmain.o依賴bootmain.c,輸入make "V=",查看生成bootmain.o文件的具體過程:

編譯命令的過程和參數選項和上面生成bootasm.o差不多。

找到makefile文件中注釋為create 'sign' tools這一部分的內容,查看sign的生成過程:

# create 'sign' tools $(call add_files_host,tools/sign.c,sign,sign) $(call create_target_host,sign,sign)

輸入make "V=",查看生成sign的具體過程:

其中和上面相比,之前沒有出現過的關鍵選項參數有:

-g代表在編譯的時候加入調試信息

-O2代表開啟O2編譯優化

一個被系統認為是符合規范的硬盤主引導扇區的特征是什么?

在sign.c文件中,可以找到以下核心代碼:

char buf[512]; memset(buf, 0, sizeof(buf)); FILE *ifp = fopen(argv[1], "rb"); int size = fread(buf, 1, st.st_size, ifp); if (size != st.st_size) {fprintf(stderr, "read '%s' error, size is %d.\n", argv[1], size);return -1; } fclose(ifp); buf[510] = 0x55; buf[511] = 0xAA;

可以看到,代碼中char buf[512],buf[510] = 0x55,buf[511] = 0xAA,說明一個被系統認為是符合規范的硬盤主引導扇區的特征是:

  • 一共512個字節
  • 倒數第二個字節是0x55,倒數第一個字節是0xAA

lab1 練習 2:使用qemu執行并調試lab1中的軟件。(要求在報告中簡要寫出練習過程)

為了熟悉使用qemu和gdb進行的調試工作,我們進行如下的小練習:

  • 從CPU加電后執行的第一條指令開始,單步跟蹤BIOS的執行。
  • 在初始化位置0x7c00設置實地址斷點,測試斷點正常。
  • 從0x7c00開始跟蹤代碼運行,將單步跟蹤反匯編得到的代碼與bootasm.S和 bootblock.asm進行比較。
  • 自己找一個bootloader或內核中的代碼位置,設置斷點并進行測試。
  • 1. 從CPU加電后執行的第一條指令開始,單步跟蹤BIOS的執行。

    根據附錄的內容,進行單步調試和查看BIOS的代碼:

    修改 lab1/tools/gdbinit,

    set architecture i8086 //將執行模式設置為i8086 target remote :1234 //使用本地端口1234進行qmenu和gdb之間的通信

    然后在lab1的目錄下輸入make debug,出現gdb調試界面之后,輸入si單步跟蹤BIOS的執行,通過語句x /2i $pc可以顯示當前eip處的匯編指令,查看BIOS的代碼。

    執行截圖:

    可以看到,一開始gdb在BIOS的第一條指令處0xfff0停止。

    輸入si后,可以看到gdb跳轉到下一地址處,即可單步跟蹤BIOS了,輸入x /2i $pc會顯示當前eip處的匯編指令,輸入x /2i 0xffff0即可查看0xffff0處及往下的一行代碼。

    2. 在初始化位置0x7c00設置實地址斷點,測試斷點正常。

    在lab1/tools/gdbinit文件中加入b *0x7c00或在gdb輸入框輸入b *0x7c00,就可以在0x7c00設置斷點。

    可以看到,輸入c使程序繼續運行后,程序在0x7c00處停下,斷點正常。

    3. 從0x7c00開始跟蹤代碼運行,將單步跟蹤反匯編得到的代碼與bootasm.S和 bootblock.asm進行比較。

    通過改寫Makefile文件,將這部分代碼:

    debug: $(UCOREIMG)$(V)$(QEMU) -S -s -parallel stdio -hda $< -serial null &$(V)sleep 2$(V)$(TERMINAL) -e "gdb -q -tui -x tools/gdbinit"

    改為:

    debug: $(UCOREIMG)$(V)$(TERMINAL) -e "$(QEMU) -S -s -d in_asm -D $(BINDIR)/qemu.log -parallel stdio -hda $< -serial null"$(V)sleep 2$(V)$(TERMINAL) -e "gdb -q -tui -x tools/gdbinit"

    執行截圖:

    在調用qemu的時候加上了-d in_asm -D qemu.log等參數,就可以在qemu.log里看到匯編指令(從0x00007c00處開始10行代碼):

    ---------------- IN: 0x00007c00: fa cli ---------------- IN: 0x00007c01: fc cld 0x00007c02: 31 c0 xorw %ax, %ax 0x00007c04: 8e d8 movw %ax, %ds 0x00007c06: 8e c0 movw %ax, %es 0x00007c08: 8e d0 movw %ax, %ss---------------- IN: 0x00007c0a: e4 64 inb $0x64, %al---------------- IN: 0x00007c0c: a8 02 testb $2, %al 0x00007c0e: 75 fa jne 0x7c0a---------------- IN: 0x00007c10: b0 d1 movb $0xd1, %al

    在bootasm.S中:

    .globl start start: .code16 # Assemble for 16-bit modecli # Disable interruptscld # String operations increment# Set up the important data segment registers (DS, ES, SS).xorw %ax, %ax # Segment number zeromovw %ax, %ds # -> Data Segmentmovw %ax, %es # -> Extra Segmentmovw %ax, %ss # -> Stack Segment# Enable A20:# For backwards compatibility with the earliest PCs, physical# address line 20 is tied low, so that addresses higher than# 1MB wrap around to zero by default. This code undoes this. seta20.1:inb $0x64, %al # Wait for not busy(8042 input buffer empty).testb $0x2, %aljnz seta20.1movb $0xd1, %al # 0xd1 -> port 0x64

    在bootblock.asm中:

    .globl start start: .code16 # Assemble for 16-bit modecli # Disable interrupts7c00: fa cli cld # String operations increment7c01: fc cld # Set up the important data segment registers (DS, ES, SS).xorw %ax, %ax # Segment number zero7c02: 31 c0 xor %eax,%eaxmovw %ax, %ds # -> Data Segment7c04: 8e d8 mov %eax,%dsmovw %ax, %es # -> Extra Segment7c06: 8e c0 mov %eax,%esmovw %ax, %ss # -> Stack Segment7c08: 8e d0 mov %eax,%ss00007c0a <seta20.1>:# Enable A20:# For backwards compatibility with the earliest PCs, physical# address line 20 is tied low, so that addresses higher than# 1MB wrap around to zero by default. This code undoes this. seta20.1:inb $0x64, %al # Wait for not busy(8042 input buffer empty).7c0a: e4 64 in $0x64,%altestb $0x2, %al7c0c: a8 02 test $0x2,%aljnz seta20.17c0e: 75 fa jne 7c0a <seta20.1>movb $0xd1, %al # 0xd1 -> port 0x647c10: b0 d1 mov $0xd1,%al

    可以看到,反匯編得到的代碼與bootasm.S和bootblock.asm基本相同。

    4. 自己找一個bootloader或內核中的代碼位置,設置斷點并進行測試。

    在0x7c08處設置斷點,進行測試。

    執行截圖:

    可以看到,輸入b *0x7c08在0x7c08設置斷點后,再輸入c使程序繼續運行后,程序在0x7c08處停下,斷點正常。

    lab1 練習 3:分析bootloader 進入保護模式的過程。

    BIOS將通過讀取硬盤主引導扇區到內存,并轉跳到對應內存中的位置執行bootloader。請分析bootloader是如何完成從實模式進入保護模式的。

    提示:需要閱讀小節“保護模式和分段機制”和lab1/boot/bootasm.S源碼,了解如何從實模式切換到保護模式,需要了解:

    • 為何開啟A20,以及如何開啟A20
    • 如何初始化GDT表
    • 如何使能和進入保護模式

    在lab1/boot/bootasm.S文件中,可以看到文件開頭有一段注釋:

    # The BIOS loads this code from the first sector of the hard disk into # memory at physical address 0x7c00 and starts executing in real mode # with %cs=0 %ip=7c00.

    大概意思是,BIOS將此代碼從硬盤的第一個扇區加載到物理地址為0x7c00的內存中,并開始以實模式在cs=0 ip=7c00執行。

    程序一開始先設置內核代碼段選擇子、內核數據段選擇子、保護模式使能標志置為1

    .set PROT_MODE_CSEG, 0x8 # 內核代碼段選擇子 .set PROT_MODE_DSEG, 0x10 # 內核數據段選擇子 .set CR0_PE_ON, 0x1 # 保護模式使能標志

    然后清理環境,關閉中斷將flag置0并設置字符串操作是遞增方向,將寄存器ax、ds、es、ss置0:

    .globl start start: .code16 # Assemble for 16-bit modecli # Disable interruptscld # String operations increment# Set up the important data segment registers (DS, ES, SS).xorw %ax, %ax # Segment number zeromovw %ax, %ds # -> Data Segmentmovw %ax, %es # -> Extra Segmentmovw %ax, %ss # -> Stack Segment

    然后啟用A20,將A20地址線置1,根據附錄“關于A20 Gate”,因為一開始時A20地址線控制是被屏蔽的(總為0),直到系統軟件通過一定的IO操作去打開它。很顯然,在實模式下要訪問高端內存區,這個開關必須打開,在保護模式下,由于使用32位地址線,如果A20恒等于0,那么系統只能訪問奇數兆的內存,即只能訪問0–1M、2-3M、4-5M…,這樣無法有效訪問所有可用內存。所以在保護模式下,為了使能所有地址位的尋址能力,這個開關也必須打開。

    為了與最早的PC機向后兼容,物理地址行20被限制在低位,因此高于1MB的地址默認為零。此代碼將撤消此操作,通過打開A20,將鍵盤控制器上的A20線置于高電位,就能使全部32條地址線可用,可以訪問4G的內存空間。

    因為A20的地址位是由芯片8042管理,這個芯片與鍵盤控制器有關,通過給8042芯片發命令來激活A20的地址位,8042的兩個I/O端口是0x64和0x60,通過發送0xdi命令到0x64端口、發送0xdf到0x60端口就可以激活

    打開A20的具體步驟大致如下:

  • 等待8042 Input buffer為空;
  • 發送Write 8042 Output Port (P2)命令到8042 Input buffer;
  • 等待8042 Input buffer為空;
  • 將8042 Output Port(P2)得到字節的第2位置1,然后寫入8042 Input buffer;
  • 下面的代碼分為兩部分,兩部分代碼都要通過讀0x64端口的第2位確保8042的輸入緩沖區為空后再進行操作。

    在seta20.1中,首先把數據0xd1寫入端口0x64,發送消息給CPU準備往8042芯片的P2端口寫數據;

    在seta20.2中,首先把數據0xdf寫入端口0x60,從而將8042芯片的P2端口的A20地址線設置為1。

    seta20.1:inb $0x64, %al # Wait for not busy(8042 input buffer empty).testb $0x2, %aljnz seta20.1movb $0xd1, %al # 0xd1 -> port 0x64outb %al, $0x64 # 0xd1 means: write data to 8042's P2 portseta20.2:inb $0x64, %al # Wait for not busy(8042 input buffer empty).testb $0x2, %aljnz seta20.2movb $0xdf, %al # 0xdf -> port 0x60outb %al, $0x60 # 0xdf = 11011111, means set P2's A20 bit(the 1 bit) to 1

    在kern/mm/pmm.c文件中可以找到gdt的初始化函數,通過這段代碼完成gdt的初始化:

    static void gdt_init(void) {ts.ts_esp0 = (uint32_t)&stack0 + sizeof(stack0);ts.ts_ss0 = KERNEL_DS;gdt[SEG_TSS] = SEG16(STS_T32A, (uint32_t)&ts, sizeof(ts), DPL_KERNEL);gdt[SEG_TSS].sd_s = 0;lgdt(&gdt_pd);ltr(GD_TSS); }

    而在bootasm.S文件中,可以看到:

    # Bootstrap GDT .p2align 2 # force 4 byte alignment gdt:SEG_NULLASM # null segSEG_ASM(STA_X|STA_R, 0x0, 0xffffffff) # code seg for bootloader and kernelSEG_ASM(STA_W, 0x0, 0xffffffff) # data seg for bootloader and kernelgdtdesc:.word 0x17 # sizeof(gdt) - 1.long gdt # address gdt

    其中SEG_ASM可以在asm.h文件中找到:

    #define SEG_ASM(type,base,lim) \.word (((lim) >> 12) & 0xffff), ((base) & 0xffff); \.byte (((base) >> 16) & 0xff), (0x90 | (type)), \(0xC0 | (((lim) >> 28) & 0xf)), (((base) >> 24) & 0xff)

    可以看到,SEG_ASM(STA_X|STA_R, 0x0, 0xffffffff)和SEG_ASM(STA_W, 0x0, 0xffffffff)把數據段和代碼段的base設為0,lim即limit設置為4G,數據段可讀可執行,代碼段可寫,這樣就可以是邏輯地址對應于線性地址。

    因為一個簡單的GDT表和其描述符已經靜態儲存在引導區中,所以直接使用lgdt命令初始化后,將gdt的desc段表示內容加載到gdt就行。

    lgdt gdtdesc

    將cr0寄存器的PE位置即最低位設置為1,就可以開啟保護模式:

    movl %cr0, %eax orl $CR0_PE_ON, %eax movl %eax, %cr0

    接著,通過長跳轉使cs的基地址得到更新,將cs修改為32位段寄存器,此時CPU進入32位模式

    ljmp $PROT_MODE_CSEG, $protcseg .code32 protcseg:

    設置段寄存器ds、es、fs、gs、ss,并建立堆棧的幀指針和棧指針

    movw $PROT_MODE_DSEG, %ax movw %ax, %ds movw %ax, %es movw %ax, %fs movw %ax, %gs movw %ax, %ss movl $0x0, %ebp movl $start, %esp

    調用bootmain函數,bootloader從實模式進入保護模式

    call bootmain

    lab1 練習 4:分析bootloader加載ELF格式的OS的過程。

    通過閱讀bootmain.c,了解bootloader如何加載ELF文件。通過分析源代碼和通過qemu來運行并調試bootloader&OS,

    • bootloader如何讀取硬盤扇區的?
    • bootloader是如何加載ELF格式的OS?

    提示:可閱讀“硬盤訪問概述”,“ELF執行文件格式概述”這兩小節。

    在閱讀材料“硬盤訪問概述中”,表明了磁盤IO地址和對應功能:

    IO地址功能
    0x1f0讀數據,當0x1f7不為忙狀態時,可以讀。
    0x1f2要讀寫的扇區數,每次讀寫前,你需要表明你要讀寫幾個扇區。最小是1個扇區
    0x1f3如果是LBA模式,就是LBA參數的0-7位
    0x1f4如果是LBA模式,就是LBA參數的8-15位
    0x1f5如果是LBA模式,就是LBA參數的16-23位
    0x1f6第0~3位:如果是LBA模式就是24-27位 第4位:為0主盤;為1從盤
    0x1f7狀態和命令寄存器。操作時先給命令,再讀取,如果不是忙狀態就從0x1f0端口讀數據

    讀取一個硬盤扇區的流程大致如下:

  • 等待磁盤準備好
  • 發出讀取扇區的命令
  • 等待磁盤準備好
  • 把磁盤扇區數據讀到指定內存
  • 在閱讀材料“ELF執行文件格式概述”中,表明了bootloader是如何加載ELF格式的OS:

    ELF header在文件開始處描述了整個文件的組織。ELF的文件頭包含整個執行文件的控制結構,其定義在elf.h中:

    struct elfhdr {uint magic; // must equal ELF_MAGICuchar elf[12];ushort type;ushort machine;uint version;uint entry; // 程序入口的虛擬地址uint phoff; // program header 表的位置偏移uint shoff;uint flags;ushort ehsize;ushort phentsize;ushort phnum; //program header表中的入口數目ushort shentsize;ushort shnum;ushort shstrndx; };

    program header描述與程序執行直接相關的目標文件結構信息,用來在文件中定位各個段的映像,同時包含其他一些用來為程序創建進程映像所必需的信息。可執行文件的程序頭部是一個program header結構的數組, 每個結構描述了一個段或者系統準備程序執行所必需的其它信息。目標文件的 “段” 包含一個或者多個 “節區”(section) ,也就是“段內容(Segment Contents)” 。程序頭部僅對于可執行文件和共享目標文件有意義。可執行目標文件在ELF頭部的e_phentsize和e_phnum成員中給出其自身程序頭部的大小。程序頭部的數據結構如下表所示:

    struct proghdr {uint type; // 段類型uint offset; // 段相對文件頭的偏移值uint va; // 段的第一個字節將被放到內存中的虛擬地址uint pa;uint filesz;uint memsz; // 段在內存映像中占用的字節數uint flags;uint align; };

    根據elfhdr和proghdr的結構描述,bootloader就可以完成對ELF格式的ucore操作系統的加載過程(參見boot/bootmain.c中的bootmain函數)。

    在bootmain.c文件中,首先:

    宏定義:

    #define SECTSIZE 512 //表示一個扇區的大小 #define ELFHDR ((struct elfhdr *)0x10000) // 表示虛擬地址的起始地址

    接著是:

    static void waitdisk(void) {while ((inb(0x1F7) & 0xC0) != 0x40)/* do nothing */; }

    waitdisk()函數用來等待硬盤準備好,不斷查詢0x1F7寄存器的最高兩位,當最高兩位為01,即磁盤空閑時,才返回。

    然后在文件中找到readsect函數:

    static void readsect(void *dst, uint32_t secno) {// wait for disk to be readywaitdisk();outb(0x1F2, 1); //讀取一個扇區outb(0x1F3, secno & 0xFF); //制定扇區號的0-7位outb(0x1F4, (secno >> 8) & 0xFF); //制定扇區號的8-15位outb(0x1F5, (secno >> 16) & 0xFF); //制定扇區號的16-23位outb(0x1F6, ((secno >> 24) & 0xF) | 0xE0); //制定扇區號的24-31位// 31-29位都是1,28位為0,表示訪問"Disk 0",27-0位是偏移量outb(0x1F7, 0x20); // 使用0x20命令,讀取扇區// wait for disk to be readywaitdisk();insl(0x1F0, dst, SECTSIZE / 4);// 將扇區的數據讀取到dst位置 }

    可以看到,readsect函數的作用是從設備的第secno個扇區的文章讀取數據到dst內存中。

    然后找到readseg函數:

    // 參數va表示虛擬地址的起始地址,參數count表示讀取數據的總大小,參數offset表示偏移量 static void readseg(uintptr_t va, uint32_t count, uint32_t offset) {uintptr_t end_va = va + count; //計算讀取數據的結束地址va -= offset % SECTSIZE; //用起始地址減去偏移地址,得到塊的首地址uint32_t secno = (offset / SECTSIZE) + 1; //0扇區已經被占用,所以ELF文件從1扇區開始//將end_va和va地址之間的數據讀取到內存中for (; va < end_va; va += SECTSIZE, secno ++) {readsect((void *)va, secno);} }

    可以看到,readseg函數使用了readsect函數,用來從設備中讀入任意長度的內容。

    接著,找到bootmain函數:

    void bootmain(void) {// 首先從磁盤的第一個扇區中將ELF文件bin/kernel的內容讀取出來readseg((uintptr_t)ELFHDR, SECTSIZE * 8, 0);// 檢驗ELF頭部的e_magic變量判斷是不是ELF文件if (ELFHDR->e_magic != ELF_MAGIC) {goto bad;}struct proghdr *ph, *eph;// 讀取ELF頭部的e_phoff變量得到描述表的頭地址。表示ELF文件應該加載到內存的什么位置ph = (struct proghdr *)((uintptr_t)ELFHDR + ELFHDR->e_phoff);// 讀取ELF頭部的e_phnum變量,得到描述表的元素數目。eph = ph + ELFHDR->e_phnum;// 按照描述表將ELF文件中數據按照偏移、虛擬地址、長度等信息載入內存for (; ph < eph; ph ++) {readseg(ph->p_va & 0xFFFFFF, ph->p_memsz, ph->p_offset);}// 通過ELF頭部的e_entry變量儲存的入口信息,找到內核的入口地址,并開始執行內核代碼((void (*)(void))(ELFHDR->e_entry & 0xFFFFFF))();bad:outw(0x8A00, 0x8A00);outw(0x8A00, 0x8E00);while (1); }

    bootloader加載ELF格式的OS的大致過程是先等待磁盤準備就緒,然后先讀取ELF的頭部判斷是否合法,接著讀取ELF內存位置的描述表,然后按照描述表的內容,將ELF文件中的數據載入內存,根據ELF頭部的入口信息找到內核入口執行內核代碼。

    (3) 嘗試實現 uCore Lab 1 練習 5-6 的編程作業;

    lab1 練習 5:實現函數調用堆棧跟蹤函數

    首先需要根據閱讀材料“函數堆棧”,了解函數堆棧的概念:

    棧是一個很重要的編程概念(編譯課和程序設計課都講過相關內容),與編譯器和編程語言有緊密的聯系。理解調用棧最重要的兩點是:棧的結構,EBP寄存器的作用。一個函數調用動作可分解為:零到多個PUSH指令(用于參數入棧),一個CALL指令。CALL指令內部其實還暗含了一個將返回地址(即CALL指令下一條指令的地址)壓棧的動作(由硬件完成)。幾乎所有本地編譯器都會在每個函數體之前插入類似如下的匯編指令:

    pushl %ebp movl %esp , %ebp

    這樣在程序執行到一個函數的實際指令前,已經有以下數據順序入棧:參數、返回地址、ebp寄存器。由此得到類似如下的棧結構(參數入棧順序跟調用方式有關,這里以C語言默認的CDECL為例):

    +| 棧底方向 | 高位地址 | ... | | ... | | 參數3 | | 參數2 | | 參數1 | | 返回地址 | | 上一層[ebp] | <-------- [ebp] | 局部變量 | 低位地址

    這兩條匯編指令的含義是:首先將ebp寄存器入棧,然后將棧頂指針esp賦值給ebp。“mov ebp esp”這條指令表面上看是用esp覆蓋ebp原來的值,其實不然。因為給ebp賦值之前,原ebp值已經被壓棧(位于棧頂),而新的ebp又恰恰指向棧頂。此時ebp寄存器就已經處于一個非常重要的地位,該寄存器中存儲著棧中的一個地址(原ebp入棧后的棧頂),從該地址為基準,向上(棧底方向)能獲取返回地址、參數值,向下(棧頂方向)能獲取函數局部變量值,而該地址處又存儲著上一層函數調用時的ebp值。

    一般而言,ss:[ebp+4]處為返回地址,ss:[ebp+8]處為第一個參數值(最后一個入棧的參數值,此處假設其占用4字節內存),ss:[ebp-4]處為第一個局部變量,ss:[ebp]處為上一層ebp值。由于ebp中的地址處總是“上一層函數調用時的ebp值”,而在每一層函數調用中,都能通過當時的ebp值“向上(棧底方向)”能獲取返回地址、參數值,“向下(棧頂方向)”能獲取函數局部變量值。如此形成遞歸,直至到達棧底。這就是函數調用棧。

    我們需要在lab1中完成kdebug.c中函數print_stackframe的實現,可以通過函數print_stackframe來跟蹤函數調用堆棧中記錄的返回地址。在如果能夠正確實現此函數,可在lab1中執行 “make qemu”后,在qemu模擬器中得到類似如下的輸出:

    ebp:0x00007b28 eip:0x00100992 args:0x00010094 0x00010094 0x00007b58 0x00100096kern/debug/kdebug.c:305: print_stackframe+22 ebp:0x00007b38 eip:0x00100c79 args:0x00000000 0x00000000 0x00000000 0x00007ba8kern/debug/kmonitor.c:125: mon_backtrace+10 ebp:0x00007b58 eip:0x00100096 args:0x00000000 0x00007b80 0xffff0000 0x00007b84kern/init/init.c:48: grade_backtrace2+33 ebp:0x00007b78 eip:0x001000bf args:0x00000000 0xffff0000 0x00007ba4 0x00000029kern/init/init.c:53: grade_backtrace1+38 ebp:0x00007b98 eip:0x001000dd args:0x00000000 0x00100000 0xffff0000 0x0000001dkern/init/init.c:58: grade_backtrace0+23 ebp:0x00007bb8 eip:0x00100102 args:0x0010353c 0x00103520 0x00001308 0x00000000kern/init/init.c:63: grade_backtrace+34 ebp:0x00007be8 eip:0x00100059 args:0x00000000 0x00000000 0x00000000 0x00007c53kern/init/init.c:28: kern_init+88 ebp:0x00007bf8 eip:0x00007d73 args:0xc031fcfa 0xc08ed88e 0x64e4d08e 0xfa7502a8 <unknow>: -- 0x00007d72 –

    按照函數print_stackframe中所給的詳細的注釋,一步一步進行編寫函數print_stackframe,首先使用read_ebp()和read_eip()獲取32位的寄存器ebp和eip中的值并分別賦給32位變量ebp_val和eip_val。

    然后進入一個for循環,從0到STACKFRAME_DEPTH,即遍歷棧,打印每個棧幀的信息,每次循環,使用變量call_args指向存放參數的ss:[ebp+8]的位置,然后依次打印調用函數的四個參數,輸出換行符后,打印eip和ebp相關的信息,最后eip指向返回地址,ebp指向原ebp的地址。

    void print_stackframe(void) {/* LAB1 YOUR CODE : STEP 1 *//* (1) call read_ebp() to get the value of ebp. the type is (uint32_t);*/uint32_t ebp_val = read_ebp();/* (2) call read_eip() to get the value of eip. the type is (uint32_t);*/uint32_t eip_val = read_eip();/* (3) from 0 .. STACKFRAME_DEPTH*/for (int i = 0; ebp_val != 0 && i < STACKFRAME_DEPTH; ++i) {/* (3.1) printf value of ebp, eip*/cprintf("ebp:0x%08x eip:0x%08x args:", ebp_val, eip_val);/* (3.2) (uint32_t)calling arguments [0..4] = the contents in address (uint32_t)ebp +2 [0..4]*/uint32_t *call_args = (uint32_t *)ebp_val + 2;cprintf("0x%08x 0x%08x 0x%08x 0x%08x", call_args[0], call_args[1], call_args[2], call_args[3]);/* (3.3) cprintf("\n");*/cprintf("\n");/* (3.4) call print_debuginfo(eip-1) to print the C calling function name and line number, etc.*/print_debuginfo(eip_val - 1);/* (3.5) popup a calling stackframe*//* NOTICE: the calling funciton's return addr eip = ss:[ebp+4]*/eip_val = *((uint32_t *)(ebp_val + 4));/* the calling funciton's ebp = ss:[ebp]*/ebp_val = *((uint32_t *)ebp_val);} }

    執行截圖:

    可以看到,輸出與上述顯示大致一致,最后一行是:

    ebp:0x00007bf8 eip:0x00007d74 args:0xc031fcfa 0xc08ed88e 0x64e4d08e 0xfa7502a8 <unknow>: -- 0x00007d72 –

    其中ebp:0x00007bf8中ebp的值0x00007bf8代表kern_init函數的棧頂地址;

    eip:0x00007d74中eip的值eip:0x00007d74代表kern_init函數的返回地址,即bootmain函數調用kern_init函數之后對應的下一條指令的地址;

    args:0xc031fcfa 0xc08ed88e 0x64e4d08e 0xfa7502a8代表的是bootloader指令的前16個字節。

    <unknow>: -- 0x00007d72 –代表的是bootmain函數內調用OS kernel入口函數的該指令的地址

    最后一行代表的是堆棧最深的一層,對應的是第一個使用堆棧的函數,堆棧從0x7c00開始,然后使用了bootmain函數,指令壓棧,所以bootmaind中寄存器ebp的值為0x7bf8

    lab1 練習 6:完善中斷初始化和處理

    請完成編碼工作和回答如下問題:

  • 中斷描述符表(也可簡稱為保護模式下的中斷向量表)中一個表項占多少字節?其中哪幾位代表中斷處理代碼的入口?

  • 請編程完善kern/trap/trap.c中對中斷向量表進行初始化的函數idt_init。在idt_init函數中,依次對所有中斷入口進行初始化。使用mmu.h中的SETGATE宏,填充idt數組內容。每個中斷的入口由tools/vectors.c生成,使用trap.c中聲明的vectors數組即可。

  • 請編程完善trap.c中的中斷處理函數trap,在對時鐘中斷進行處理的部分填寫trap函數中處理時鐘中斷的部分,使操作系統每遇到100次時鐘中斷后,調用print_ticks子程序,向屏幕上打印一行文字”100 ticks”。

  • 【注意】除了系統調用中斷(T_SYSCALL)使用陷阱門描述符且權限為用戶態權限以外,其它中斷均使用 特權級(DPL)為0的中斷門描述符,權限為內核態權限;而ucore的應用程序處于特權級3,需要采用` int 0x80`指令操作(這種方式稱為軟中斷,軟件中斷,Tra中斷,在lab5會碰到)來發出系統調用請求, 并要能實現從特權級3到特權級0的轉換,所以系統調用中斷(T_SYSCALL)所對應的中斷門描述符中的 特權級(DPL)需要設置為3。

    要求完成問題2和問題3提出的相關函數實現,提交改進后的源代碼包(可以編譯執行),并在實驗報告中簡要說明實現過程,并寫出對問題1的回答。完成這問題2和3要求的部分代碼后,運行整個系統,可以看到大約每1秒會輸出一次“100 ticks”,而按下的鍵也會在屏幕上顯示。

    提示:可閱讀小節“中斷與異常”。

    1. 中斷向量表中一個表項占多少字節?其中哪幾位代表中斷處理代碼的入口?

    答:在中斷向量表中,一個表項會占8個字節,其中第0-1和第6-7字節組合在一起表示偏移量,第2~3字節表示段選擇的編號,在選擇的段中,計算偏移量后得到的位置,就是中斷處理代碼的入口。

    2. 請編程完善kern/trap/trap.c中對中斷向量表進行初始化的函數idt_init。

    根據注釋完成代碼,首先根據(1)注釋中的You can use "extern uintptr_t __vectors[];" to define this extern variable which will be used later.定義一個extern uintptr_t類型變量__vectors[],用來存放256個在vectors.S定義的中斷處理例程的入口地址

    然后根據(2)注釋,使用SETGATE宏,通過循環語句對中斷描述符表中的每一個表項進行設置,其中SETGATE宏可以在mmu.h中找到:

    #define SETGATE(gate, istrap, sel, off, dpl)

    宏的參數gate代表選擇的idt數組的項,是處理函數的入口地址

    參數istrap為1時代表系統段,為0時代表中斷門

    參數sel是中斷處理函數的段選擇子,GD_KTEXT代表是.text段

    參數off是__vectors數組內容,在vector.S中,有256個中斷處理例程

    參數dpl是優先級,宏定義DPL_KERNEL是0代表內核級,宏定義DPL_USER是3代表用戶級。

    宏定義T_SWITCH_TOK是用于用戶態切換到內核態的中斷號。

    接著根據(3)注釋,使用lidt函數加載中斷描述符表。

    代碼如下:

    void idt_init(void) {/* LAB1 YOUR CODE : STEP 2 *//* (1) Where are the entry addrs of each Interrupt Service Routine (ISR)?All ISR's entry addrs are stored in __vectors. where is uintptr_t __vectors[] ?__vectors[] is in kern/trap/vector.S which is produced by tools/vector.c(try "make" command in lab1, then you will find vector.S in kern/trap DIR)You can use "extern uintptr_t __vectors[];" to define this extern variable which will be used later. */extern uintptr_t __vectors[];/* (2) Now you should setup the entries of ISR in Interrupt Description Table (IDT).Can you see idt[256] in this file? Yes, it's IDT! you can use SETGATE macro to setup each item of IDT */int idt_size = sizeof(idt) / sizeof(struct gatedesc);for (int i = 0; i < idt_size; ++i) {SETGATE(idt[i], 0, GD_KTEXT, __vectors[i], DPL_KERNEL);}SETGATE(idt[T_SWITCH_TOK], 0, GD_KTEXT, __vectors[T_SWITCH_TOK], DPL_USER);/* (3) After setup the contents of IDT, you will let CPU know where is the IDT by using 'lidt' instruction.You don't know the meaning of this instruction? just google it! and check the libs/x86.h to know more.Notice: the argument of lidt is idt_pd. try to find it! */lidt(&idt_pd); }

    3. 請編程完善trap.c中的中斷處理函數trap,在對時鐘中斷進行處理的部分填寫trap函數

    根據注釋完成代碼,首先(1)注釋要求讓用于記錄時鐘中斷次數的位于kern/driver/clock.c的全局變量ticks加一,代碼語句ticks++

    然后(2)注釋讓每個TICK_NUM的循環完成后,都調用一次print_ticks()函數打印“100 ticks”,然后將ticks置為0,以便下一次時重新進行TICK_NUM循環。

    程序實現功能是操作系統在每遇到100次時鐘中斷后,就使用一次print_ticks()打印一次“100 ticks”。

    代碼如下:

    case IRQ_OFFSET + IRQ_TIMER:/* LAB1 YOUR CODE : STEP 3 *//* handle the timer interrupt *//* (1) After a timer interrupt, you should record this event using a global variable (increase it), such as ticks in kern/driver/clock.c */ticks++;/* (2) Every TICK_NUM cycle, you can print some info using a funciton, such as print_ticks(). */if (ticks % TICK_NUM == 0) {print_ticks();ticks = 0;}/* (3) Too Simple? Yes, I think so! */break;

    問題(2)和問題(3)都完成后,執行程序截圖:

    可以看到,大概每1秒輸出一次“100 ticks”文字,而且按下的鍵也會在屏幕上顯示。

    (4) 思考如何實現 uCore Lab 1 擴展練習 1-2。

    擴展練習 Challenge 1

    擴展proj4,增加syscall功能,即增加一用戶態函數(可執行一特定系統調用:獲得時鐘計數值),當內核初始完畢后,可從內核態返回到用戶態的函數,而用戶態的函數又通過系統調用得到內核態的服務。

    提示: 規范一下 challenge 的流程。

    kern_init 調用 switch_test,該函數如下:

    static void switch_test(void) {print_cur_status(); // print 當前 cs/ss/ds 等寄存器狀態cprintf("+++ switch to user mode +++\n");switch_to_user(); // switch to user modeprint_cur_status();cprintf("+++ switch to kernel mode +++\n");switch_to_kernel(); // switch to kernel modeprint_cur_status(); }

    switchto* 函數建議通過 中斷處理的方式實現。主要要完成的代碼是在 trap 里面處理 T_SWITCH_TO* 中斷,并設置好返回的狀態。

    在 lab1 里面完成代碼以后,執行 make grade 應該能夠評測結果是否正確。

    首先,要在init.c文件的kern_init()函數里面,將原先被注釋掉的代碼lab1_switch_test()去掉注釋,變成可以執行的語句。

    然后看到下面的static void lab1_switch_to_user(void)和static void lab1_switch_to_kernel(void)需要實現,對于static void lab1_switch_to_user(void),這個函數的功能是從內核態返回到用戶態,需要調用T_SWITCH_TOU中斷,在函數中使用內聯匯編實現:

    asm volatile ("pushl %%ss \n""pushl %%esp \n""int %0 \n""movl %%ebp, %%esp": : "i"(T_SWITCH_TOU) );

    在調用中斷之前首先需要使用語句"pushl %%ss \n""和pushl %%esp \n"提前將ss、esp壓入棧,因為當切換優先級時,中斷返回時iret指令會額外彈出ss和esp兩位,但使用"int %0 \n"語句調用T_SWITCH_TOU中斷時并不會產生特權級的切換,因此不用壓入ss和esp,所以要先將棧壓兩位,預先留出空間,在中斷返回后使用"movl %%ebp, %%esp" : : "i"(T_SWITCH_TOU)語句恢復棧指針,修復esp。

    而在函數static void lab1_switch_to_user(void)中,實現的功能是從內核態切換回用戶態,需要調用T_SWITCH_TOU中斷,在函數中使用內聯匯編實現:

    asm volatile ("int %0 \n""movl %%ebp, %%esp \n": : "i"(T_SWITCH_TOK) );

    從用戶態切換到內核態時,由于用戶態使用"int %0 \n"語句調用T_SWITCH_TOU中斷時會自動切換到內核態,不會另外彈出ss、esp兩位,中斷返回時,esp仍在堆棧中,在中斷返回后要使用 "movl %%ebp, %%esp \n" : : "i"(T_SWITCH_TOK)語句恢復棧指針,修復esp。

    然后在trap.c文件中,找到trap_dispatch()函數中等待完成的case T_SWITCH_TOU和case T_SWITCH_TOK,先定義一個struct trapframe類型的變量switchktou和一個struct trapframe *類型的指針變量switchutok。

    對于case T_SWITCH_TOU情況,要實現的是內核態轉換到用戶態時寄存器的修改,代碼如下:

    case T_SWITCH_TOU:// 如果原先保存在trapframe中的cs不是代表用戶態的USER_CSif (tf->tf_cs != USER_CS) {// 將保存在trapframe中的cs改成代表用戶態的USER_CStf->tf_cs = USER_CS;// 將其它的段選擇子都修改為代表用戶態的USER_DS,保證中斷返回之后可以正常訪問數據tf->tf_ds = USER_DS;tf->tf_es = USER_DS;tf->tf_ss = USER_DS;// 為了程序在CPL較低的情況下也能使用IO,需要將對應的IOPL位置改成用戶態tf->tf_eflags |= FL_IOPL_MASK;}break;

    指令iret認定發生中斷的時候是否發生了PL的切換,是通過判斷CPL和跳轉回的地址的cs對應的段描述符的CPL是否相等來確定的,所以將保存在trapframe中的cs改成代表用戶態的USER_CS,將其它的段選擇子都修改為代表用戶態的USER_DS,保證中斷返回之后可以正常訪問數據,中斷返回才能正常。

    對于case T_SWITCH_TOK情況,要實現的是內核態轉換到用戶態時寄存器的修改,代碼如下:

    case T_SWITCH_TOK:// 如果原先保存在trapframe中的cs不是代表內核態的KERNEL_CSif (tf->tf_cs != KERNEL_CS) {// 將保存在trapframe中的cs改成代表內核態的KERNEL_CStf->tf_cs = KERNEL_CS;// 將其它的段選擇子都修改為代表內核態的KERNEL_DS,保證中斷返回之后可以正常訪問數據tf->tf_ds = KERNEL_DS;tf->tf_es = KERNEL_DS;// 將調用IO所需權限降低,才能輸出文本tf->tf_eflags |= 0x3000;}break;

    為了能夠執行T_SWITCH_TOK的軟中斷,將trapframe中保存的cs修改為代表內核態的段選擇子KERNEL_CS,并且將其它的段選擇子都修改為代表內核態KERNEL_DS,然后進行正常的中斷返回,為了輸出文本,還需要將調用IO所需權限降低。

    執行截圖:

    擴展練習 Challenge 2

    用鍵盤實現用戶模式內核模式切換。具體目標是:“鍵盤輸入3時切換到用戶模式,鍵盤輸入0時切換到內核模式”。 基本思路是借鑒軟中斷(syscall功能)的代碼,并且把trap.c中軟中斷處理的設置語句拿過來。

    注意:

  • 關于調試工具,不建議用lab1_print_cur_status()來顯示,要注意到寄存器的值要在中斷完成后tranentry.S里面iret結束的時候才寫回,所以在trap.c里面不好觀察,建議用print_trapframe(tf)

  • 關于內聯匯編,最開始調試的時候,參數容易出現錯誤,可能的錯誤代碼如下

    asm volatile ( “sub $0x8, %%esp \n”
    “int %0 \n”
    “movl %%ebp, %%esp”
    : )

  • 要去掉參數int %0 \n這一行

  • 軟中斷是利用了臨時棧來處理的,所以有壓棧和出棧的匯編語句。硬件中斷本身就在內核態了,直接處理就可以了。
  • 首先在trap.c文件中找到與鍵盤中斷返回有關的代碼,即case IRQ_OFFSET + IRQ_KBD,在其中加入一個感知鍵盤輸入數組的條件判斷語句,如果輸入是3則進入用戶模式,如果輸入是0則進入內核模式。因為在內核態進入到用戶態的過程中,iret指令中斷返回時會額外彈出兩位,所以為了保護堆棧上的信息,可以將trapframe的地址保存到一個變量中,當鍵盤輸入3準備從內核模式切換到用戶模式時,可以可以從這個變量中獲取正確的trapframe的地址,恢復棧指針,修復esp。

    而因為用戶態進入到內核態的過程中,因為iret指令調用中斷時是系統默認的從權限較低的模式轉換到權限較高的模式,所以中斷時會自動切換到內核態,堆棧不會再彈出另外的兩位,所以當鍵盤輸入0準備從用戶模式切換到內核模式,實現中斷返回時,原來的esp還在堆棧中,所以需要把ebp的值傳送給esp,恢復棧指針,修復esp。

    總結

    以上是生活随笔為你收集整理的操作系统实验报告1:ucore Lab 1的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    亚洲精品无码国产 | 久久久国产一区二区三区 | 又大又紧又粉嫩18p少妇 | 国产精品亚洲一区二区三区喷水 | 无遮挡国产高潮视频免费观看 | 亚洲区小说区激情区图片区 | 无套内谢的新婚少妇国语播放 | 国产精品久久久久9999小说 | 六月丁香婷婷色狠狠久久 | 国产乱人偷精品人妻a片 | 国产精品久久国产精品99 | 精品成在人线av无码免费看 | 日韩 欧美 动漫 国产 制服 | 国产人妻精品一区二区三区不卡 | 久久久久人妻一区精品色欧美 | 亚洲 激情 小说 另类 欧美 | 国产综合久久久久鬼色 | 97久久超碰中文字幕 | 成人性做爰aaa片免费看 | 色一情一乱一伦一区二区三欧美 | 一本久道久久综合狠狠爱 | 精品乱子伦一区二区三区 | 国产精品办公室沙发 | 99久久久无码国产aaa精品 | 国产精品毛多多水多 | 最近中文2019字幕第二页 | 色偷偷人人澡人人爽人人模 | 任你躁国产自任一区二区三区 | 国产麻豆精品精东影业av网站 | 日本精品人妻无码免费大全 | 国产午夜亚洲精品不卡 | 国产在线一区二区三区四区五区 | 又大又黄又粗又爽的免费视频 | 波多野结衣乳巨码无在线观看 | 九九综合va免费看 | 色综合久久中文娱乐网 | 少妇高潮喷潮久久久影院 | 女人被男人躁得好爽免费视频 | 亚洲精品成人av在线 | 亚洲精品中文字幕 | 99久久精品国产一区二区蜜芽 | 特大黑人娇小亚洲女 | 草草网站影院白丝内射 | 国内少妇偷人精品视频免费 | 娇妻被黑人粗大高潮白浆 | 国产97色在线 | 免 | 一本大道久久东京热无码av | 精品国产精品久久一区免费式 | 色一情一乱一伦一区二区三欧美 | 色欲综合久久中文字幕网 | 东京热无码av男人的天堂 | 亚洲精品无码国产 | 人人澡人人妻人人爽人人蜜桃 | 一本色道久久综合狠狠躁 | 老熟女乱子伦 | www国产亚洲精品久久久日本 | 国产亚洲精品久久久久久久久动漫 | 欧美日韩在线亚洲综合国产人 | 亚洲日韩精品欧美一区二区 | 国产精品va在线播放 | 搡女人真爽免费视频大全 | 十八禁视频网站在线观看 | 国产97色在线 | 免 | 日韩av无码一区二区三区 | 午夜精品一区二区三区的区别 | 精品成人av一区二区三区 | 免费网站看v片在线18禁无码 | 日本一区二区三区免费高清 | 久久精品人妻少妇一区二区三区 | 日本一区二区三区免费高清 | 色欲综合久久中文字幕网 | 欧洲熟妇精品视频 | 国产av一区二区精品久久凹凸 | 国产亚洲欧美日韩亚洲中文色 | 亚洲另类伦春色综合小说 | 欧美成人高清在线播放 | 亚洲国产一区二区三区在线观看 | 无码人妻出轨黑人中文字幕 | 日本精品高清一区二区 | 无人区乱码一区二区三区 | 国产午夜无码精品免费看 | 国产内射老熟女aaaa | 国产在线无码精品电影网 | 亚洲精品一区二区三区婷婷月 | 国内揄拍国内精品少妇国语 | 天天av天天av天天透 | 色综合天天综合狠狠爱 | 性做久久久久久久久 | 欧美freesex黑人又粗又大 | 夜夜夜高潮夜夜爽夜夜爰爰 | 色五月五月丁香亚洲综合网 | 国内少妇偷人精品视频 | 巨爆乳无码视频在线观看 | 久久国产精品_国产精品 | 男人的天堂2018无码 | 国产精品久久久久久亚洲影视内衣 | 国产av无码专区亚洲awww | 精品亚洲成av人在线观看 | 亚洲日韩一区二区三区 | 国产亚洲人成a在线v网站 | 欧美老妇与禽交 | 日韩人妻少妇一区二区三区 | 国产人妻精品一区二区三区 | 久久久久久国产精品无码下载 | 野狼第一精品社区 | 国产精品.xx视频.xxtv | 捆绑白丝粉色jk震动捧喷白浆 | 内射后入在线观看一区 | 欧美真人作爱免费视频 | 国产区女主播在线观看 | 精品乱子伦一区二区三区 | 两性色午夜视频免费播放 | 国产精品亚洲lv粉色 | 成人性做爰aaa片免费看不忠 | 日韩av无码一区二区三区 | 色欲av亚洲一区无码少妇 | 黑人粗大猛烈进出高潮视频 | 国产两女互慰高潮视频在线观看 | 老熟女乱子伦 | 欧美真人作爱免费视频 | 欧美肥老太牲交大战 | 国内精品一区二区三区不卡 | 日日噜噜噜噜夜夜爽亚洲精品 | 伊人久久大香线焦av综合影院 | 18精品久久久无码午夜福利 | 乌克兰少妇性做爰 | 成人欧美一区二区三区黑人免费 | 免费中文字幕日韩欧美 | 国产在线精品一区二区高清不卡 | 亚洲 高清 成人 动漫 | 久久97精品久久久久久久不卡 | 午夜精品久久久久久久 | 精品夜夜澡人妻无码av蜜桃 | 久久亚洲精品成人无码 | 欧美老熟妇乱xxxxx | 久久熟妇人妻午夜寂寞影院 | 久久亚洲国产成人精品性色 | 一本久久a久久精品vr综合 | 成 人 免费观看网站 | 四虎影视成人永久免费观看视频 | 波多野结衣av在线观看 | 玩弄人妻少妇500系列视频 | 国产激情一区二区三区 | 日日摸天天摸爽爽狠狠97 | 久久综合给合久久狠狠狠97色 | 女人被男人躁得好爽免费视频 | 风流少妇按摩来高潮 | 日日鲁鲁鲁夜夜爽爽狠狠 | 中文字幕无码日韩专区 | 熟女少妇人妻中文字幕 | 国产亚洲精品久久久久久大师 | 成熟妇人a片免费看网站 | 日韩成人一区二区三区在线观看 | 久久亚洲中文字幕无码 | 久久久久av无码免费网 | 男女爱爱好爽视频免费看 | 国产亚洲人成a在线v网站 | 日韩人妻无码中文字幕视频 | 日日橹狠狠爱欧美视频 | a在线亚洲男人的天堂 | 欧美丰满老熟妇xxxxx性 | 少妇激情av一区二区 | 国产办公室秘书无码精品99 | 国产亚洲人成在线播放 | 精品偷拍一区二区三区在线看 | 亚洲中文字幕乱码av波多ji | 国产综合色产在线精品 | 一区二区传媒有限公司 | 精品国产福利一区二区 | 中文字幕乱码亚洲无线三区 | 99re在线播放 | 久久久久久av无码免费看大片 | 精品国产成人一区二区三区 | 无码人妻少妇伦在线电影 | 亚洲爆乳大丰满无码专区 | 国产成人精品一区二区在线小狼 | 性色欲情网站iwww九文堂 | 高清国产亚洲精品自在久久 | 日本高清一区免费中文视频 | 国产在热线精品视频 | 久热国产vs视频在线观看 | 日韩在线不卡免费视频一区 | 中文字幕人妻丝袜二区 | 国产片av国语在线观看 | 天天做天天爱天天爽综合网 | 老司机亚洲精品影院无码 | 夫妻免费无码v看片 | 激情综合激情五月俺也去 | 日本熟妇乱子伦xxxx | 老熟妇仑乱视频一区二区 | 国产激情艳情在线看视频 | 亚洲人亚洲人成电影网站色 | 婷婷色婷婷开心五月四房播播 | 亚洲国产日韩a在线播放 | 日本高清一区免费中文视频 | 国产av一区二区三区最新精品 | 亚洲中文无码av永久不收费 | 亚洲男人av香蕉爽爽爽爽 | 亚洲国产精品毛片av不卡在线 | 少妇被黑人到高潮喷出白浆 | 激情国产av做激情国产爱 | 国产精品美女久久久网av | 欧美国产日韩久久mv | 久久婷婷五月综合色国产香蕉 | 内射巨臀欧美在线视频 | 久久天天躁狠狠躁夜夜免费观看 | 欧美老人巨大xxxx做受 | 人人爽人人爽人人片av亚洲 | 无套内谢的新婚少妇国语播放 | 亚洲色大成网站www国产 | 国产人妻久久精品二区三区老狼 | 久久久久国色av免费观看性色 | 日欧一片内射va在线影院 | 国内精品久久久久久中文字幕 | 狠狠色丁香久久婷婷综合五月 | 亚洲男人av天堂午夜在 | 内射爽无广熟女亚洲 | 天堂久久天堂av色综合 | 亚洲人成无码网www | 亚洲另类伦春色综合小说 | 日本va欧美va欧美va精品 | 人人澡人摸人人添 | 日日噜噜噜噜夜夜爽亚洲精品 | 乱码午夜-极国产极内射 | 国产香蕉尹人综合在线观看 | 99久久无码一区人妻 | 伊人久久大香线蕉av一区二区 | 国产激情艳情在线看视频 | 99久久精品无码一区二区毛片 | 国产精品二区一区二区aⅴ污介绍 | 国产精品毛片一区二区 | 亚洲精品午夜国产va久久成人 | 久久久中文字幕日本无吗 | 国产麻豆精品一区二区三区v视界 | 永久免费观看美女裸体的网站 | 成人无码精品1区2区3区免费看 | 未满小14洗澡无码视频网站 | 国产精品久久久午夜夜伦鲁鲁 | 领导边摸边吃奶边做爽在线观看 | 色五月五月丁香亚洲综合网 | 久久人人爽人人爽人人片ⅴ | 欧美 亚洲 国产 另类 | 男女下面进入的视频免费午夜 | 日本一区二区三区免费高清 | 国产av一区二区精品久久凹凸 | 亚洲中文字幕成人无码 | 欧美日本免费一区二区三区 | 无码人妻少妇伦在线电影 | 精品久久8x国产免费观看 | 久久久亚洲欧洲日产国码αv | 中国大陆精品视频xxxx | 久久久精品人妻久久影视 | 久久亚洲中文字幕精品一区 | 无码人妻出轨黑人中文字幕 | аⅴ资源天堂资源库在线 | 亚洲码国产精品高潮在线 | 欧美激情一区二区三区成人 | 中文字幕无线码免费人妻 | 国产午夜亚洲精品不卡 | 窝窝午夜理论片影院 | 日韩在线不卡免费视频一区 | 又湿又紧又大又爽a视频国产 | 男女猛烈xx00免费视频试看 | av小次郎收藏 | 成人无码影片精品久久久 | 欧美人与牲动交xxxx | 高清国产亚洲精品自在久久 | 丝袜人妻一区二区三区 | 人人澡人人透人人爽 | 欧美 日韩 人妻 高清 中文 | 又粗又大又硬毛片免费看 | 国产极品视觉盛宴 | 成人一在线视频日韩国产 | 日日碰狠狠躁久久躁蜜桃 | 久久久无码中文字幕久... | 久精品国产欧美亚洲色aⅴ大片 | 亚洲理论电影在线观看 | 中文字幕乱码亚洲无线三区 | 国产一区二区三区四区五区加勒比 | 中文字幕人妻丝袜二区 | 熟妇人妻无乱码中文字幕 | 曰韩少妇内射免费播放 | 曰本女人与公拘交酡免费视频 | 精品熟女少妇av免费观看 | 国产精品高潮呻吟av久久4虎 | 亚洲日韩中文字幕在线播放 | 又色又爽又黄的美女裸体网站 | 欧美三级不卡在线观看 | 亚洲日韩精品欧美一区二区 | 无码人妻黑人中文字幕 | 在线精品国产一区二区三区 | 爆乳一区二区三区无码 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 人人澡人人妻人人爽人人蜜桃 | 欧美老人巨大xxxx做受 | 激情国产av做激情国产爱 | 亚洲午夜福利在线观看 | 日本一区二区三区免费播放 | 中文字幕乱码中文乱码51精品 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产成人无码a区在线观看视频app | 久久久久国色av免费观看性色 | 亚洲国产av精品一区二区蜜芽 | 亚洲欧美国产精品专区久久 | 免费人成在线观看网站 | 激情国产av做激情国产爱 | 亚洲熟妇色xxxxx欧美老妇y | 狠狠色欧美亚洲狠狠色www | 大乳丰满人妻中文字幕日本 | 真人与拘做受免费视频一 | 亚洲国产精品毛片av不卡在线 | 俄罗斯老熟妇色xxxx | 国产舌乚八伦偷品w中 | 久久精品一区二区三区四区 | 日本精品高清一区二区 | 丁香花在线影院观看在线播放 | 全黄性性激高免费视频 | 97se亚洲精品一区 | 国产乱人偷精品人妻a片 | 久久97精品久久久久久久不卡 | 久久国产精品萌白酱免费 | 国产精品无码成人午夜电影 | 国产无av码在线观看 | 国产免费久久精品国产传媒 | 无码精品国产va在线观看dvd | 免费观看黄网站 | 自拍偷自拍亚洲精品10p | 精品一区二区三区无码免费视频 | 漂亮人妻洗澡被公强 日日躁 | 亚洲色欲色欲天天天www | 亚洲中文字幕无码中字 | 成人精品视频一区二区 | 人妻人人添人妻人人爱 | 亚洲中文字幕在线观看 | 亚洲欧美日韩成人高清在线一区 | 午夜福利试看120秒体验区 | 亚洲国产成人a精品不卡在线 | 国产精品怡红院永久免费 | 国产精品二区一区二区aⅴ污介绍 | 又紧又大又爽精品一区二区 | av小次郎收藏 | 蜜桃视频插满18在线观看 | 国产内射老熟女aaaa | 亚洲国产精品美女久久久久 | 天天摸天天透天天添 | 十八禁视频网站在线观看 | 人妻中文无码久热丝袜 | 成人片黄网站色大片免费观看 | 国产亚洲精品久久久闺蜜 | 久久久亚洲欧洲日产国码αv | 久久精品国产99久久6动漫 | 中文字幕人妻无码一夲道 | 98国产精品综合一区二区三区 | 波多野结衣一区二区三区av免费 | 婷婷综合久久中文字幕蜜桃三电影 | 99久久婷婷国产综合精品青草免费 | 日日碰狠狠躁久久躁蜜桃 | 免费观看黄网站 | 精品国产精品久久一区免费式 | 色五月丁香五月综合五月 | 麻豆精品国产精华精华液好用吗 | 精品久久久中文字幕人妻 | 日韩精品无码一区二区中文字幕 | 亚洲中文字幕乱码av波多ji | 任你躁在线精品免费 | 婷婷丁香六月激情综合啪 | 无码人妻出轨黑人中文字幕 | 亚洲国产精品久久久天堂 | 高清无码午夜福利视频 | 蜜桃视频插满18在线观看 | 亚洲中文字幕无码中文字在线 | 久久久www成人免费毛片 | 丰满妇女强制高潮18xxxx | 亚洲 另类 在线 欧美 制服 | 精品国产麻豆免费人成网站 | 国产免费观看黄av片 | 久久久久国色av免费观看性色 | 99久久99久久免费精品蜜桃 | 亚洲中文字幕在线无码一区二区 | 日本饥渴人妻欲求不满 | 丁香花在线影院观看在线播放 | 性色av无码免费一区二区三区 | 亚洲熟熟妇xxxx | 激情亚洲一区国产精品 | 亚洲色欲色欲天天天www | 成人性做爰aaa片免费看 | 久久久中文久久久无码 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 精品一区二区不卡无码av | 国产精品国产自线拍免费软件 | 99国产欧美久久久精品 | 中文字幕无码视频专区 | 亚洲中文字幕乱码av波多ji | 狠狠色噜噜狠狠狠狠7777米奇 | 精品久久久无码中文字幕 | 无码成人精品区在线观看 | 欧美色就是色 | 国内老熟妇对白xxxxhd | 亚洲啪av永久无码精品放毛片 | 2020久久超碰国产精品最新 | 又紧又大又爽精品一区二区 | 狠狠亚洲超碰狼人久久 | 国产美女精品一区二区三区 | 久久精品国产99精品亚洲 | 最新国产麻豆aⅴ精品无码 | 国产超碰人人爽人人做人人添 | 奇米影视7777久久精品 | 亚洲色在线无码国产精品不卡 | 免费人成网站视频在线观看 | 成人欧美一区二区三区黑人免费 | 精品无人区无码乱码毛片国产 | 国模大胆一区二区三区 | 亚洲人亚洲人成电影网站色 | 国产一区二区三区日韩精品 | 精品国产福利一区二区 | 无码播放一区二区三区 | 国产成人无码a区在线观看视频app | 俺去俺来也www色官网 | 免费无码一区二区三区蜜桃大 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 久久综合给合久久狠狠狠97色 | 国产精品亚洲lv粉色 | 无码国产色欲xxxxx视频 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 人妻天天爽夜夜爽一区二区 | 国产精品无码一区二区三区不卡 | 国精品人妻无码一区二区三区蜜柚 | 中文字幕无码热在线视频 | 女人被男人躁得好爽免费视频 | √8天堂资源地址中文在线 | 中文字幕av伊人av无码av | 亚洲综合伊人久久大杳蕉 | 鲁大师影院在线观看 | 国产真实夫妇视频 | 精品欧洲av无码一区二区三区 | 最新国产麻豆aⅴ精品无码 | 亚洲gv猛男gv无码男同 | 天天躁日日躁狠狠躁免费麻豆 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 未满小14洗澡无码视频网站 | 久久综合狠狠综合久久综合88 | 久久综合网欧美色妞网 | 粉嫩少妇内射浓精videos | 精品久久久无码人妻字幂 | 久久久久免费看成人影片 | 色一情一乱一伦 | 无码帝国www无码专区色综合 | 欧美三级不卡在线观看 | 无码人妻丰满熟妇区五十路百度 | 帮老师解开蕾丝奶罩吸乳网站 | 欧美怡红院免费全部视频 | 高潮喷水的毛片 | 无套内射视频囯产 | 亚洲精品中文字幕 | 一本无码人妻在中文字幕免费 | 色欲人妻aaaaaaa无码 | 成熟妇人a片免费看网站 | 欧洲熟妇精品视频 | 老子影院午夜伦不卡 | 妺妺窝人体色www婷婷 | 亚洲精品久久久久久一区二区 | 久久久中文字幕日本无吗 | 亚洲天堂2017无码 | 亚洲色大成网站www国产 | 好男人社区资源 | 久久精品国产一区二区三区 | 亚洲中文字幕无码中文字在线 | 亚洲一区av无码专区在线观看 | 丰满少妇熟乱xxxxx视频 | 日日碰狠狠丁香久燥 | 国产舌乚八伦偷品w中 | 乱人伦中文视频在线观看 | 国产精品美女久久久 | 欧美性猛交xxxx富婆 | 亚洲综合无码一区二区三区 | 亚洲成av人片天堂网无码】 | 色综合久久88色综合天天 | 国内精品久久久久久中文字幕 | 麻豆国产丝袜白领秘书在线观看 | 永久免费观看美女裸体的网站 | 成熟人妻av无码专区 | 亚洲国产av美女网站 | 久久亚洲精品成人无码 | 国产美女极度色诱视频www | 玩弄人妻少妇500系列视频 | 无码人妻黑人中文字幕 | 国产乱人伦偷精品视频 | 色一情一乱一伦一视频免费看 | 激情国产av做激情国产爱 | 亚洲日韩中文字幕在线播放 | 熟女少妇在线视频播放 | 中文字幕人妻无码一夲道 | 欧美激情内射喷水高潮 | 国产69精品久久久久app下载 | 精品无码av一区二区三区 | 丰满人妻一区二区三区免费视频 | 中文字幕久久久久人妻 | 免费看男女做好爽好硬视频 | 伊人色综合久久天天小片 | 久久国产自偷自偷免费一区调 | 精品成在人线av无码免费看 | 女人高潮内射99精品 | 人妻少妇精品视频专区 | 色欲人妻aaaaaaa无码 | 国产精品久久久久久亚洲毛片 | 樱花草在线播放免费中文 | 亚洲精品鲁一鲁一区二区三区 | 综合人妻久久一区二区精品 | 免费看男女做好爽好硬视频 | 亚洲欧美日韩国产精品一区二区 | 日本精品高清一区二区 | 欧美熟妇另类久久久久久多毛 | 高潮毛片无遮挡高清免费视频 | 中文字幕乱码中文乱码51精品 | 色狠狠av一区二区三区 | 中文字幕av日韩精品一区二区 | 精品久久久中文字幕人妻 | 亚洲国产欧美国产综合一区 | 亚洲色欲久久久综合网东京热 | 久久精品人人做人人综合 | 国产一区二区不卡老阿姨 | 伊人久久大香线蕉午夜 | 亚洲乱码日产精品bd | 在线播放无码字幕亚洲 | 亚洲熟妇自偷自拍另类 | 无码一区二区三区在线 | 久久精品国产精品国产精品污 | 日日碰狠狠丁香久燥 | 女人和拘做爰正片视频 | 精品无码av一区二区三区 | 欧美激情内射喷水高潮 | v一区无码内射国产 | 久热国产vs视频在线观看 | 波多野结衣高清一区二区三区 | 亚洲人成网站在线播放942 | 女人被男人爽到呻吟的视频 | 日本熟妇人妻xxxxx人hd | 男人扒开女人内裤强吻桶进去 | 999久久久国产精品消防器材 | 日韩少妇白浆无码系列 | 亚洲另类伦春色综合小说 | 成熟人妻av无码专区 | 无人区乱码一区二区三区 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 国产电影无码午夜在线播放 | 免费乱码人妻系列无码专区 | 无码吃奶揉捏奶头高潮视频 | 国产欧美精品一区二区三区 | 日日摸日日碰夜夜爽av | 对白脏话肉麻粗话av | 国内丰满熟女出轨videos | 青春草在线视频免费观看 | 亚洲精品成a人在线观看 | 久久99热只有频精品8 | 免费看男女做好爽好硬视频 | 亚洲欧美日韩国产精品一区二区 | 99视频精品全部免费免费观看 | 日本乱偷人妻中文字幕 | 中国女人内谢69xxxxxa片 | 丰满少妇高潮惨叫视频 | 色老头在线一区二区三区 | 精品久久久久久人妻无码中文字幕 | 亚洲经典千人经典日产 | 国产精品怡红院永久免费 | 日本一卡二卡不卡视频查询 | 国产乱码精品一品二品 | 色欲久久久天天天综合网精品 | 国产特级毛片aaaaaaa高清 | 动漫av一区二区在线观看 | 澳门永久av免费网站 | 97无码免费人妻超级碰碰夜夜 | 久久这里只有精品视频9 | 人妻与老人中文字幕 | 日本高清一区免费中文视频 | 亚洲欧洲日本综合aⅴ在线 | 欧美 亚洲 国产 另类 | 亚洲va中文字幕无码久久不卡 | 7777奇米四色成人眼影 | 一区二区三区乱码在线 | 欧洲 | 日韩欧美群交p片內射中文 | 精品人妻人人做人人爽 | 精品成人av一区二区三区 | 久久久久se色偷偷亚洲精品av | 亚洲精品国偷拍自产在线麻豆 | 欧美精品免费观看二区 | 呦交小u女精品视频 | 人人澡人人透人人爽 | 中文字幕无码乱人伦 | 在线观看免费人成视频 | 国产成人av免费观看 | 99er热精品视频 | 久久精品99久久香蕉国产色戒 | 欧美丰满熟妇xxxx | 亚洲国产精华液网站w | 亚洲啪av永久无码精品放毛片 | 国产成人无码av在线影院 | 啦啦啦www在线观看免费视频 | 台湾无码一区二区 | 欧美精品在线观看 | 亚洲国产精品久久久久久 | 国产乡下妇女做爰 | 亚洲精品国产精品乱码视色 | 色欲综合久久中文字幕网 | 色婷婷综合中文久久一本 | 欧美激情综合亚洲一二区 | 一本色道久久综合狠狠躁 | 麻豆国产人妻欲求不满 | 国产艳妇av在线观看果冻传媒 | 初尝人妻少妇中文字幕 | 亚洲综合久久一区二区 | 中文字幕av伊人av无码av | 亚拍精品一区二区三区探花 | 搡女人真爽免费视频大全 | 亚洲色成人中文字幕网站 | 欧美阿v高清资源不卡在线播放 | 久久精品视频在线看15 | 精品成人av一区二区三区 | 国产人妻久久精品二区三区老狼 | 精品无码国产一区二区三区av | 国产人妻大战黑人第1集 | 99riav国产精品视频 | 少妇无码吹潮 | 国产肉丝袜在线观看 | 亚洲日本va中文字幕 | 真人与拘做受免费视频 | 伊人色综合久久天天小片 | 老熟女重囗味hdxx69 | 亚洲一区二区三区无码久久 | 午夜精品一区二区三区在线观看 | 国产精品久免费的黄网站 | 日本在线高清不卡免费播放 | 久在线观看福利视频 | 黑森林福利视频导航 | 国产亚洲日韩欧美另类第八页 | 四十如虎的丰满熟妇啪啪 | 国产乱人偷精品人妻a片 | 人妻无码αv中文字幕久久琪琪布 | 无码精品国产va在线观看dvd | 狠狠色欧美亚洲狠狠色www | a片免费视频在线观看 | 国产激情一区二区三区 | 午夜福利电影 | 无遮无挡爽爽免费视频 | 98国产精品综合一区二区三区 | 无遮挡啪啪摇乳动态图 | 蜜桃av抽搐高潮一区二区 | 熟女体下毛毛黑森林 | 亚洲第一无码av无码专区 | 亚洲最大成人网站 | 国产婷婷色一区二区三区在线 | 一本久道久久综合婷婷五月 | 久久人人爽人人爽人人片av高清 | 久久zyz资源站无码中文动漫 | 国产精品久久久久7777 | 国产亚洲精品精品国产亚洲综合 | 鲁大师影院在线观看 | 国产精品视频免费播放 | 精品无码国产自产拍在线观看蜜 | 人人妻人人澡人人爽人人精品 | 日本高清一区免费中文视频 | 中文字幕乱码人妻无码久久 | 亚洲色大成网站www | 日日噜噜噜噜夜夜爽亚洲精品 | 无套内谢的新婚少妇国语播放 | 天堂а√在线中文在线 | 一本一道久久综合久久 | 国产一区二区不卡老阿姨 | 精品国产麻豆免费人成网站 | 一本一道久久综合久久 | 亚洲精品欧美二区三区中文字幕 | 免费人成在线观看网站 | 亚洲熟妇色xxxxx欧美老妇 | 久久精品一区二区三区四区 | 捆绑白丝粉色jk震动捧喷白浆 | 国产精品无码永久免费888 | 中文字幕无码免费久久99 | 中文亚洲成a人片在线观看 | 国产97在线 | 亚洲 | 成人无码精品1区2区3区免费看 | 国产内射老熟女aaaa | a片免费视频在线观看 | 欧美黑人乱大交 | 乱人伦中文视频在线观看 | 国产成人久久精品流白浆 | 国产精品亚洲一区二区三区喷水 | 51国偷自产一区二区三区 | 国产无遮挡又黄又爽免费视频 | 国产成人综合美国十次 | 精品一二三区久久aaa片 | 色诱久久久久综合网ywww | 国产成人无码av片在线观看不卡 | 亚洲综合无码一区二区三区 | 日本在线高清不卡免费播放 | 亚洲色欲色欲天天天www | 欧美亚洲国产一区二区三区 | 亚洲精品一区二区三区婷婷月 | 内射老妇bbwx0c0ck | 欧美熟妇另类久久久久久多毛 | 欧美大屁股xxxxhd黑色 | 国产精品久久福利网站 | 欧美日韩人成综合在线播放 | 妺妺窝人体色www在线小说 | 亚洲精品一区二区三区婷婷月 | 亚洲国产精品成人久久蜜臀 | 国产午夜无码视频在线观看 | 国产偷国产偷精品高清尤物 | 人妻少妇精品无码专区动漫 | 97久久国产亚洲精品超碰热 | 欧美熟妇另类久久久久久多毛 | 大乳丰满人妻中文字幕日本 | 亚洲日韩av一区二区三区四区 | 成人亚洲精品久久久久软件 | www成人国产高清内射 | 日韩少妇内射免费播放 | 亚洲一区二区三区无码久久 | 亚洲精品午夜国产va久久成人 | 国产激情一区二区三区 | 国产片av国语在线观看 | www国产亚洲精品久久网站 | 国产麻豆精品一区二区三区v视界 | 任你躁在线精品免费 | 国产激情艳情在线看视频 | 98国产精品综合一区二区三区 | 亚洲国产精品久久人人爱 | 欧美 日韩 人妻 高清 中文 | 欧美 亚洲 国产 另类 | 国产69精品久久久久app下载 | 成人精品天堂一区二区三区 | 日韩亚洲欧美精品综合 | 国色天香社区在线视频 | 国产无遮挡又黄又爽免费视频 | 日本xxxx色视频在线观看免费 | 亚洲国产精华液网站w | 九月婷婷人人澡人人添人人爽 | 日韩人妻系列无码专区 | 亚洲国产一区二区三区在线观看 | 少妇太爽了在线观看 | 国产成人午夜福利在线播放 | 成人无码视频免费播放 | 999久久久国产精品消防器材 | 亚洲国产高清在线观看视频 | 日韩在线不卡免费视频一区 | 草草网站影院白丝内射 | aⅴ在线视频男人的天堂 | 99精品视频在线观看免费 | 亚洲经典千人经典日产 | 综合网日日天干夜夜久久 | 奇米影视7777久久精品人人爽 | 日本一卡2卡3卡四卡精品网站 | 精品无人国产偷自产在线 | 亚洲国产av美女网站 | а天堂中文在线官网 | 欧美性猛交xxxx富婆 | 欧美 丝袜 自拍 制服 另类 | 天下第一社区视频www日本 | 国产综合在线观看 | 丰满肥臀大屁股熟妇激情视频 | 国产麻豆精品一区二区三区v视界 | 免费国产成人高清在线观看网站 | 一本久久a久久精品vr综合 | 性欧美大战久久久久久久 | 18精品久久久无码午夜福利 | 伦伦影院午夜理论片 | 熟妇人妻无乱码中文字幕 | 欧美亚洲国产一区二区三区 | 日本乱偷人妻中文字幕 | 亚洲中文字幕在线无码一区二区 | 国产女主播喷水视频在线观看 | 日本护士xxxxhd少妇 | 99久久久无码国产aaa精品 | 国产激情一区二区三区 | 熟妇激情内射com | 中文无码成人免费视频在线观看 | 最新国产乱人伦偷精品免费网站 | 国色天香社区在线视频 | 99麻豆久久久国产精品免费 | 亚洲最大成人网站 | 亚洲国产一区二区三区在线观看 | 国产精品怡红院永久免费 | 亚洲国产综合无码一区 | 无码精品人妻一区二区三区av | 国产精品丝袜黑色高跟鞋 | 性色欲情网站iwww九文堂 | 亚洲成av人综合在线观看 | 国产av人人夜夜澡人人爽麻豆 | 一个人看的视频www在线 | 精品久久久中文字幕人妻 | 欧美乱妇无乱码大黄a片 | 亚洲熟妇色xxxxx欧美老妇y | 无套内谢的新婚少妇国语播放 | 国产精品久久精品三级 | 99re在线播放 | 国产午夜亚洲精品不卡 | 欧美人与物videos另类 | 精品国精品国产自在久国产87 | 人妻少妇精品久久 | 亚洲男女内射在线播放 | 亚洲呦女专区 | 综合人妻久久一区二区精品 | 亚洲综合无码一区二区三区 | 国产成人一区二区三区别 | 亚洲欧美日韩综合久久久 | 兔费看少妇性l交大片免费 | 妺妺窝人体色www在线小说 | 99国产精品白浆在线观看免费 | 亚洲码国产精品高潮在线 | 无码人妻久久一区二区三区不卡 | 欧美老人巨大xxxx做受 | 亚洲a无码综合a国产av中文 | 亚洲爆乳无码专区 | 久9re热视频这里只有精品 | 无码播放一区二区三区 | 国产肉丝袜在线观看 | 十八禁视频网站在线观看 | 无套内射视频囯产 | 久久久久久久久888 | 亚洲精品一区二区三区在线 | 最新国产麻豆aⅴ精品无码 | 日本乱人伦片中文三区 | 麻豆果冻传媒2021精品传媒一区下载 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲综合精品香蕉久久网 | 色婷婷久久一区二区三区麻豆 | 日日摸日日碰夜夜爽av | 日韩人妻无码中文字幕视频 | 久久久久人妻一区精品色欧美 | 特黄特色大片免费播放器图片 | 国产精品无码成人午夜电影 | 色综合久久网 | 青草视频在线播放 | 99久久精品日本一区二区免费 | 久久精品中文字幕大胸 | 青青青爽视频在线观看 | 一本大道伊人av久久综合 | 国产国产精品人在线视 | 国产suv精品一区二区五 | 久久精品人人做人人综合 | 亚洲色欲久久久综合网东京热 | 成人av无码一区二区三区 | 欧美精品国产综合久久 | 日韩无套无码精品 | 亚洲小说图区综合在线 | 粉嫩少妇内射浓精videos | 一本久久伊人热热精品中文字幕 | 精品人人妻人人澡人人爽人人 | 久久久久久国产精品无码下载 | 激情五月综合色婷婷一区二区 | 国产 浪潮av性色四虎 | 欧美黑人性暴力猛交喷水 | 给我免费的视频在线观看 | 兔费看少妇性l交大片免费 | 麻豆蜜桃av蜜臀av色欲av | 欧美日韩一区二区免费视频 | 东京热男人av天堂 | 精品一区二区三区无码免费视频 | 亚洲日韩中文字幕在线播放 | 一本无码人妻在中文字幕免费 | 中国女人内谢69xxxxxa片 | 九九在线中文字幕无码 | 国产熟女一区二区三区四区五区 | 无码一区二区三区在线 | 欧美刺激性大交 | 国产成人无码区免费内射一片色欲 | 国产真实伦对白全集 | 亚洲人成网站在线播放942 | 午夜时刻免费入口 | 久久99精品国产麻豆 | 国产小呦泬泬99精品 | 亚洲一区二区三区国产精华液 | 欧美激情综合亚洲一二区 | 成人无码精品一区二区三区 | 亚洲 激情 小说 另类 欧美 | 久久久久久久人妻无码中文字幕爆 | 麻豆蜜桃av蜜臀av色欲av | 久久久国产精品无码免费专区 | 99久久久国产精品无码免费 | 亚洲成色www久久网站 | 日本www一道久久久免费榴莲 | 亚洲日本一区二区三区在线 | 中文字幕无码人妻少妇免费 | 精品欧洲av无码一区二区三区 | 日韩亚洲欧美精品综合 | 无遮挡啪啪摇乳动态图 | 成人免费视频视频在线观看 免费 | 亚洲色欲色欲天天天www | 亚洲国产成人av在线观看 | 亚洲欧美国产精品专区久久 | 久9re热视频这里只有精品 | 色窝窝无码一区二区三区色欲 | 中文字幕乱码人妻无码久久 | 欧美野外疯狂做受xxxx高潮 | 亚洲精品久久久久avwww潮水 | 乱码av麻豆丝袜熟女系列 | 亚洲一区二区三区 | 玩弄少妇高潮ⅹxxxyw | 沈阳熟女露脸对白视频 | 亚洲熟女一区二区三区 | 国产精品99爱免费视频 | 未满小14洗澡无码视频网站 | 欧美老妇交乱视频在线观看 | 精品久久久久久人妻无码中文字幕 | 无码人妻出轨黑人中文字幕 | 人妻少妇精品视频专区 | 欧美丰满熟妇xxxx性ppx人交 | 国产免费观看黄av片 | 无码任你躁久久久久久久 | 国产在线一区二区三区四区五区 | 一本久久a久久精品亚洲 | 四虎国产精品一区二区 | 狠狠色噜噜狠狠狠狠7777米奇 | 又粗又大又硬毛片免费看 | 天堂无码人妻精品一区二区三区 | 亚洲精品www久久久 | 99久久婷婷国产综合精品青草免费 | 又粗又大又硬毛片免费看 | 性开放的女人aaa片 | 亚洲人成网站色7799 | 人妻无码久久精品人妻 | 免费国产黄网站在线观看 | 日本护士xxxxhd少妇 | 一个人看的www免费视频在线观看 | 久久精品国产大片免费观看 | 国产精品鲁鲁鲁 | 日韩精品a片一区二区三区妖精 | 国产小呦泬泬99精品 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 最新国产乱人伦偷精品免费网站 | 18无码粉嫩小泬无套在线观看 | 婷婷丁香六月激情综合啪 | 中文字幕乱码中文乱码51精品 | 精品国产精品久久一区免费式 | 亚洲精品一区二区三区四区五区 | 51国偷自产一区二区三区 | 大地资源网第二页免费观看 | 国产做国产爱免费视频 | 日日橹狠狠爱欧美视频 | 粗大的内捧猛烈进出视频 | 水蜜桃av无码 | 国产超级va在线观看视频 | 亚洲色成人中文字幕网站 | 天天综合网天天综合色 | 午夜无码人妻av大片色欲 | 曰韩少妇内射免费播放 | 丰满妇女强制高潮18xxxx | 精品偷自拍另类在线观看 | 麻豆果冻传媒2021精品传媒一区下载 | 欧美喷潮久久久xxxxx | 国产精品欧美成人 | 午夜精品一区二区三区的区别 | 乱人伦人妻中文字幕无码久久网 | 88国产精品欧美一区二区三区 | 国产亚洲精品久久久久久国模美 | 欧美zoozzooz性欧美 | 内射后入在线观看一区 | 亚洲午夜福利在线观看 | 一个人看的www免费视频在线观看 | 99久久人妻精品免费一区 | 久久久中文久久久无码 | 久久久久久国产精品无码下载 | 妺妺窝人体色www婷婷 | 黑人粗大猛烈进出高潮视频 | 国产精品理论片在线观看 | v一区无码内射国产 | 日本护士xxxxhd少妇 | 欧美性黑人极品hd | 免费观看的无遮挡av | 久久午夜无码鲁丝片秋霞 | 国产精品国产自线拍免费软件 | 亚洲中文字幕无码中字 | 狠狠色色综合网站 | 免费观看黄网站 | 中文字幕无码视频专区 | 久久国产劲爆∧v内射 | 亚洲a无码综合a国产av中文 | 日日麻批免费40分钟无码 | 亚洲中文字幕乱码av波多ji | 国产精品久久久一区二区三区 | 波多野结衣 黑人 | 亚洲成色在线综合网站 | 狠狠躁日日躁夜夜躁2020 | 亚洲一区二区三区国产精华液 | 成人无码精品1区2区3区免费看 | 一区二区传媒有限公司 | 日韩人妻系列无码专区 | 美女毛片一区二区三区四区 | 日韩欧美中文字幕公布 | 人人爽人人澡人人人妻 | 欧美激情综合亚洲一二区 | 亚洲精品一区国产 | 荫蒂被男人添的好舒服爽免费视频 | 亚洲精品国产精品乱码视色 | 亚洲自偷自偷在线制服 | 亚洲区欧美区综合区自拍区 | 日本精品人妻无码77777 天堂一区人妻无码 | 四虎4hu永久免费 | 精品久久久无码人妻字幂 | 草草网站影院白丝内射 | 久久久精品成人免费观看 | 国产精品自产拍在线观看 | 国产亚洲日韩欧美另类第八页 | 国产人妻精品一区二区三区不卡 | 国产乱人伦偷精品视频 | 亚洲人成人无码网www国产 | 国产成人精品久久亚洲高清不卡 | 亚洲精品中文字幕 | 国产精品久久国产精品99 | 人人澡人人妻人人爽人人蜜桃 | 国产乱人伦av在线无码 | 中文字幕无码免费久久9一区9 | 欧美黑人性暴力猛交喷水 | 一二三四在线观看免费视频 | 久久人人爽人人爽人人片av高清 | 免费网站看v片在线18禁无码 | 亚洲人亚洲人成电影网站色 | 欧美国产亚洲日韩在线二区 | 一本一道久久综合久久 | 日日碰狠狠丁香久燥 | 亚洲人成网站色7799 | 免费无码一区二区三区蜜桃大 | 一本久久a久久精品vr综合 | 少女韩国电视剧在线观看完整 | 婷婷五月综合缴情在线视频 | 亚洲国产精品一区二区美利坚 | 国产成人一区二区三区别 | 国产亚洲人成a在线v网站 | 少妇性l交大片欧洲热妇乱xxx | 99麻豆久久久国产精品免费 | 色婷婷综合激情综在线播放 | 小sao货水好多真紧h无码视频 | 任你躁国产自任一区二区三区 | 一本久道高清无码视频 | 夜夜影院未满十八勿进 | 国产内射爽爽大片视频社区在线 | 人人妻人人澡人人爽精品欧美 | 男人的天堂2018无码 | 欧洲精品码一区二区三区免费看 | 无码人妻黑人中文字幕 | 蜜桃av抽搐高潮一区二区 | 爆乳一区二区三区无码 | 国产精品福利视频导航 | 内射后入在线观看一区 | 少妇性荡欲午夜性开放视频剧场 | 综合激情五月综合激情五月激情1 | 国产无遮挡又黄又爽又色 | 在线a亚洲视频播放在线观看 | 精品欧美一区二区三区久久久 | 久久精品国产大片免费观看 | 成 人 免费观看网站 | 久久亚洲国产成人精品性色 | 大肉大捧一进一出视频出来呀 | 亚洲中文字幕无码一久久区 | 亚洲成a人一区二区三区 | www一区二区www免费 | 亚洲日本va午夜在线电影 | av无码不卡在线观看免费 | 内射后入在线观看一区 | 搡女人真爽免费视频大全 | 一本大道伊人av久久综合 | 九九热爱视频精品 | 狠狠色色综合网站 | 亚洲成a人一区二区三区 | 国産精品久久久久久久 | 色一情一乱一伦一区二区三欧美 | 久久国产精品偷任你爽任你 | 久久精品国产一区二区三区 | 国产超级va在线观看视频 | 欧美丰满熟妇xxxx | 丝袜美腿亚洲一区二区 | 精品久久久久久人妻无码中文字幕 | 东京热一精品无码av | 亚洲国产高清在线观看视频 | 国产成人精品优优av | 日日鲁鲁鲁夜夜爽爽狠狠 | 久久精品人人做人人综合试看 | 欧美成人高清在线播放 | 一本久道久久综合婷婷五月 | 亚洲中文字幕在线观看 | 免费观看的无遮挡av | 少妇人妻大乳在线视频 | 精品日本一区二区三区在线观看 | 久9re热视频这里只有精品 | 女人被男人躁得好爽免费视频 | 中文字幕 亚洲精品 第1页 | 亚洲国产成人a精品不卡在线 | 国产一区二区三区日韩精品 | 免费观看又污又黄的网站 | 国产精品无套呻吟在线 | 亚洲人成无码网www | 中文字幕乱妇无码av在线 | 国产亚洲精品久久久久久久久动漫 | 国产精品二区一区二区aⅴ污介绍 | 丰满妇女强制高潮18xxxx | 久久久www成人免费毛片 | 日韩av无码中文无码电影 | 久久久精品456亚洲影院 | 牲交欧美兽交欧美 | 日本一区二区更新不卡 | 骚片av蜜桃精品一区 | 欧美 亚洲 国产 另类 | 无码中文字幕色专区 | 好屌草这里只有精品 | 国产精品理论片在线观看 | 日本熟妇大屁股人妻 | 男女猛烈xx00免费视频试看 | 亚洲gv猛男gv无码男同 | 欧美freesex黑人又粗又大 | 久久精品99久久香蕉国产色戒 | 国产亚洲日韩欧美另类第八页 | 中文字幕无码av激情不卡 | 亚洲国产高清在线观看视频 | 成人aaa片一区国产精品 | 国产成人无码av一区二区 | 日韩无码专区 | 无码av最新清无码专区吞精 | 国产色精品久久人妻 | 日韩精品无码一区二区中文字幕 | 亚洲成色www久久网站 | 国产乡下妇女做爰 | 国产人妻精品一区二区三区 | 狠狠色欧美亚洲狠狠色www | 亚洲精品一区二区三区大桥未久 | 久久亚洲a片com人成 | 人人妻人人澡人人爽欧美一区 | a在线观看免费网站大全 | 少女韩国电视剧在线观看完整 | 久久精品中文字幕大胸 | 久久午夜无码鲁丝片秋霞 | 亚洲精品欧美二区三区中文字幕 | 3d动漫精品啪啪一区二区中 | 人妻天天爽夜夜爽一区二区 | 性生交大片免费看女人按摩摩 | 九月婷婷人人澡人人添人人爽 | 亚洲人成人无码网www国产 | 久久这里只有精品视频9 | 波多野结衣av一区二区全免费观看 | 国产精品福利视频导航 | 欧美人与禽zoz0性伦交 | 麻花豆传媒剧国产免费mv在线 | 久久久久久国产精品无码下载 | 欧美放荡的少妇 | 狂野欧美性猛xxxx乱大交 | 少妇被黑人到高潮喷出白浆 | 国产麻豆精品精东影业av网站 | 天天做天天爱天天爽综合网 | 亚洲男人av香蕉爽爽爽爽 | 婷婷色婷婷开心五月四房播播 | 中文字幕av伊人av无码av | 荫蒂添的好舒服视频囗交 | 亚洲男女内射在线播放 | 久久综合给合久久狠狠狠97色 | 三上悠亚人妻中文字幕在线 | 无码免费一区二区三区 | 国产9 9在线 | 中文 | 亚洲码国产精品高潮在线 | 未满小14洗澡无码视频网站 | 3d动漫精品啪啪一区二区中 | 无码人中文字幕 | 亚洲男人av天堂午夜在 | 国产成人无码a区在线观看视频app | 精品夜夜澡人妻无码av蜜桃 | 国产午夜无码视频在线观看 | 亚洲s码欧洲m码国产av | 麻花豆传媒剧国产免费mv在线 | 伊人色综合久久天天小片 | 久久久久人妻一区精品色欧美 | 狠狠躁日日躁夜夜躁2020 | 亚洲熟妇色xxxxx欧美老妇y | 欧美成人午夜精品久久久 | 国产猛烈高潮尖叫视频免费 | 亚洲综合另类小说色区 | 亚洲熟妇色xxxxx欧美老妇 | 在线а√天堂中文官网 | 欧美精品在线观看 | 红桃av一区二区三区在线无码av | 极品尤物被啪到呻吟喷水 | 嫩b人妻精品一区二区三区 | 四十如虎的丰满熟妇啪啪 | 日本肉体xxxx裸交 | 日本丰满护士爆乳xxxx | 国产肉丝袜在线观看 | 国产一精品一av一免费 | 日本www一道久久久免费榴莲 | 亚洲综合久久一区二区 | 99精品国产综合久久久久五月天 | 成人一在线视频日韩国产 | 亚洲综合色区中文字幕 | 欧洲极品少妇 | 亚洲一区二区三区在线观看网站 | 精品人人妻人人澡人人爽人人 | 午夜精品久久久久久久 | 老熟妇仑乱视频一区二区 | 久久久www成人免费毛片 | 日韩精品无码一本二本三本色 | 日本乱人伦片中文三区 | 少妇性荡欲午夜性开放视频剧场 | 国产又爽又黄又刺激的视频 | 精品欧洲av无码一区二区三区 | 丰满肥臀大屁股熟妇激情视频 | 欧美 亚洲 国产 另类 | 成人欧美一区二区三区黑人 | 无码av免费一区二区三区试看 | 日本熟妇大屁股人妻 | 日日麻批免费40分钟无码 | 无码吃奶揉捏奶头高潮视频 | 久久99精品久久久久婷婷 | 最近的中文字幕在线看视频 | 国产精品.xx视频.xxtv | 中文字幕av无码一区二区三区电影 | 最新国产麻豆aⅴ精品无码 | 秋霞特色aa大片 | a国产一区二区免费入口 | 无码av岛国片在线播放 | 377p欧洲日本亚洲大胆 | 成人性做爰aaa片免费看不忠 | 日产精品高潮呻吟av久久 | 欧美人与禽zoz0性伦交 | 欧美成人家庭影院 | 国产无套粉嫩白浆在线 | 无码帝国www无码专区色综合 | 亚洲中文字幕在线无码一区二区 | 初尝人妻少妇中文字幕 | 色综合久久久无码网中文 | 麻豆精品国产精华精华液好用吗 | 无码午夜成人1000部免费视频 | 久久伊人色av天堂九九小黄鸭 | 老司机亚洲精品影院无码 | 无码av岛国片在线播放 | 国产舌乚八伦偷品w中 | 天天躁日日躁狠狠躁免费麻豆 | 久久精品中文字幕大胸 | a在线亚洲男人的天堂 | 伊人久久大香线蕉av一区二区 | 三级4级全黄60分钟 | 久久国产精品萌白酱免费 | 日本爽爽爽爽爽爽在线观看免 | 国产小呦泬泬99精品 | 午夜嘿嘿嘿影院 | 人妻中文无码久热丝袜 | 国产精品久久久久久久影院 | 日产精品99久久久久久 | 色爱情人网站 | 国产精品va在线播放 | 久久视频在线观看精品 | 日韩精品a片一区二区三区妖精 | 色妞www精品免费视频 | 欧美黑人乱大交 | 国内少妇偷人精品视频 | 图片小说视频一区二区 | 四虎4hu永久免费 | 久久久久av无码免费网 | 亚洲熟妇色xxxxx亚洲 | 国产精品内射视频免费 | 国产卡一卡二卡三 | 无码国产激情在线观看 | 久久久国产一区二区三区 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 日本爽爽爽爽爽爽在线观看免 | 成人无码精品1区2区3区免费看 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 麻豆av传媒蜜桃天美传媒 | 久久亚洲中文字幕精品一区 | 国产亚洲日韩欧美另类第八页 | 日日摸夜夜摸狠狠摸婷婷 | 2020最新国产自产精品 | 国产小呦泬泬99精品 | 国产一区二区不卡老阿姨 | 国产精品无码一区二区三区不卡 | 无码人妻av免费一区二区三区 | 久久亚洲日韩精品一区二区三区 | 特黄特色大片免费播放器图片 | 樱花草在线社区www | 亚洲国精产品一二二线 | 国产内射老熟女aaaa | 亚洲日本在线电影 | 久久国产36精品色熟妇 | 国产在热线精品视频 | 国产午夜福利100集发布 | 国产97人人超碰caoprom | 日韩av无码一区二区三区不卡 | 日日碰狠狠丁香久燥 | 亚洲国产欧美在线成人 | 丰满少妇高潮惨叫视频 | 97夜夜澡人人爽人人喊中国片 | 97夜夜澡人人双人人人喊 | 久久亚洲日韩精品一区二区三区 | 大色综合色综合网站 | 久久成人a毛片免费观看网站 | 思思久久99热只有频精品66 | 人妻插b视频一区二区三区 | 国产亚洲视频中文字幕97精品 | 亚洲aⅴ无码成人网站国产app | 日产精品99久久久久久 | 亚洲大尺度无码无码专区 | 久久亚洲国产成人精品性色 | 国产av一区二区精品久久凹凸 | 国产猛烈高潮尖叫视频免费 | 最新国产麻豆aⅴ精品无码 | 少妇性荡欲午夜性开放视频剧场 | 国产特级毛片aaaaaa高潮流水 | 亚洲无人区午夜福利码高清完整版 | 999久久久国产精品消防器材 | 扒开双腿疯狂进出爽爽爽视频 | 日日摸天天摸爽爽狠狠97 | 久久久精品人妻久久影视 | 丰满人妻精品国产99aⅴ | 国产特级毛片aaaaaa高潮流水 | 国内丰满熟女出轨videos | 国产97人人超碰caoprom | 亚洲人成人无码网www国产 | 免费无码一区二区三区蜜桃大 | 欧美人与善在线com | 双乳奶水饱满少妇呻吟 | 奇米影视7777久久精品 | 色综合视频一区二区三区 | 中文字幕乱码亚洲无线三区 | 国产乱人偷精品人妻a片 | 人人妻人人澡人人爽精品欧美 | 国产精品毛多多水多 | 国产熟女一区二区三区四区五区 | 国产熟女一区二区三区四区五区 | 久久精品人妻少妇一区二区三区 | 18禁黄网站男男禁片免费观看 | 亚洲午夜福利在线观看 | 在线播放无码字幕亚洲 | 人人爽人人爽人人片av亚洲 | 无码帝国www无码专区色综合 | 无码人妻av免费一区二区三区 | 玩弄少妇高潮ⅹxxxyw | 中文字幕无码日韩专区 | 国产猛烈高潮尖叫视频免费 | 久久 国产 尿 小便 嘘嘘 | 国产农村妇女高潮大叫 | 久久精品一区二区三区四区 | 国产欧美熟妇另类久久久 | 人人妻人人藻人人爽欧美一区 | 国产成人久久精品流白浆 | 欧美大屁股xxxxhd黑色 | 亚洲无人区午夜福利码高清完整版 | 人人妻人人澡人人爽欧美一区 | 18无码粉嫩小泬无套在线观看 | 国产精品99久久精品爆乳 | 精品国产精品久久一区免费式 | 国产精品va在线播放 | 高中生自慰www网站 | 四虎影视成人永久免费观看视频 | 国产人妻大战黑人第1集 | 蜜臀aⅴ国产精品久久久国产老师 | а√天堂www在线天堂小说 | 色综合久久网 | 久青草影院在线观看国产 | 国产无遮挡又黄又爽免费视频 | 国产激情无码一区二区app | a在线观看免费网站大全 | 国产精品无码一区二区桃花视频 | 4hu四虎永久在线观看 | 国产九九九九九九九a片 | 青青久在线视频免费观看 | 中文精品无码中文字幕无码专区 | 男女猛烈xx00免费视频试看 | 99久久久国产精品无码免费 | 香港三级日本三级妇三级 | 国产日产欧产精品精品app | 久久人妻内射无码一区三区 | 国精产品一品二品国精品69xx | 国内精品人妻无码久久久影院蜜桃 | 国产特级毛片aaaaaa高潮流水 | 亚洲精品中文字幕乱码 | 好男人www社区 | 好屌草这里只有精品 | 妺妺窝人体色www在线小说 | 国产一区二区不卡老阿姨 | 国产精品成人av在线观看 | 免费人成网站视频在线观看 | 亚洲 欧美 激情 小说 另类 | 国产特级毛片aaaaaa高潮流水 | 性生交片免费无码看人 | 精品乱子伦一区二区三区 | 天天燥日日燥 | 成熟人妻av无码专区 | 久久久久国色av免费观看性色 | 午夜免费福利小电影 | 丰满人妻精品国产99aⅴ | 婷婷丁香六月激情综合啪 | 国产特级毛片aaaaaa高潮流水 | 亚洲成a人片在线观看无码3d | 亚洲精品鲁一鲁一区二区三区 | 一本无码人妻在中文字幕免费 | 国产精品鲁鲁鲁 | 无码av免费一区二区三区试看 | 亚洲码国产精品高潮在线 | 狂野欧美性猛xxxx乱大交 | 日韩少妇内射免费播放 | 欧美日韩精品 | 国产精品二区一区二区aⅴ污介绍 | 色综合久久久无码中文字幕 | 国产精品怡红院永久免费 | 人妻体内射精一区二区三四 | 国产亚洲视频中文字幕97精品 | 无码av免费一区二区三区试看 | 亚洲午夜福利在线观看 | 国产偷抇久久精品a片69 | 黑人玩弄人妻中文在线 | 在线精品亚洲一区二区 | 男人和女人高潮免费网站 | 人妻天天爽夜夜爽一区二区 | www国产亚洲精品久久网站 | 国内精品人妻无码久久久影院蜜桃 | 在线а√天堂中文官网 | 丰满肥臀大屁股熟妇激情视频 | 亚洲人成人无码网www国产 | 国产午夜亚洲精品不卡下载 | 日本精品高清一区二区 | 久久精品国产一区二区三区 | 午夜福利电影 | 2020久久香蕉国产线看观看 | 狂野欧美性猛交免费视频 | 国内综合精品午夜久久资源 | 日本一区二区更新不卡 | 中文字幕无码日韩欧毛 | 福利一区二区三区视频在线观看 | 亚洲精品综合五月久久小说 | 国产成人人人97超碰超爽8 | 狂野欧美激情性xxxx | 4hu四虎永久在线观看 | 九月婷婷人人澡人人添人人爽 | 久久久久久久久888 | 色综合天天综合狠狠爱 | 久久精品国产日本波多野结衣 | 久久精品中文字幕一区 | 无码帝国www无码专区色综合 | 精品国产精品久久一区免费式 | 日日碰狠狠丁香久燥 | 亚洲日韩精品欧美一区二区 | 少妇邻居内射在线 | 娇妻被黑人粗大高潮白浆 | 日本一卡2卡3卡四卡精品网站 | 伊人久久大香线蕉亚洲 | 国产乱人偷精品人妻a片 | 少妇性l交大片 | 亚洲成a人片在线观看日本 | 久久无码专区国产精品s | 撕开奶罩揉吮奶头视频 | 又大又紧又粉嫩18p少妇 | 国产精品久久久午夜夜伦鲁鲁 | 国产莉萝无码av在线播放 | 亚洲精品鲁一鲁一区二区三区 | 国产成人综合在线女婷五月99播放 | 强辱丰满人妻hd中文字幕 | 亚洲国产精品成人久久蜜臀 | 亚洲 高清 成人 动漫 | 亚洲色欲色欲欲www在线 | 亚洲自偷自偷在线制服 | 色婷婷香蕉在线一区二区 | 麻花豆传媒剧国产免费mv在线 | 四虎4hu永久免费 | 人妻夜夜爽天天爽三区 | 黑森林福利视频导航 | 久久精品国产99久久6动漫 | 欧美高清在线精品一区 | 精品国产国产综合精品 | 国产舌乚八伦偷品w中 | 中文字幕乱码人妻二区三区 | 精品久久久中文字幕人妻 | 亚洲色欲久久久综合网东京热 | 精品国产一区二区三区av 性色 | www国产亚洲精品久久久日本 | 国产亚洲日韩欧美另类第八页 | 久久99国产综合精品 | 久久国内精品自在自线 | 4hu四虎永久在线观看 | 国产无遮挡又黄又爽免费视频 | 狠狠色丁香久久婷婷综合五月 | 国产一区二区三区精品视频 | 国产精品第一国产精品 | 国产精品美女久久久 | 国产精品鲁鲁鲁 | 国产国产精品人在线视 | 欧美 丝袜 自拍 制服 另类 | 亚拍精品一区二区三区探花 | 夜夜影院未满十八勿进 | 日本熟妇浓毛 | 国产国语老龄妇女a片 | 午夜理论片yy44880影院 | 国精品人妻无码一区二区三区蜜柚 | 高中生自慰www网站 | 俺去俺来也在线www色官网 | 成 人 免费观看网站 | 无码人妻丰满熟妇区五十路百度 | 激情内射亚州一区二区三区爱妻 | 亚洲精品午夜国产va久久成人 | 久久国产精品精品国产色婷婷 | 最近免费中文字幕中文高清百度 | 国产内射老熟女aaaa | 激情爆乳一区二区三区 | 欧美阿v高清资源不卡在线播放 | 免费男性肉肉影院 | 亚洲中文字幕va福利 | 美女毛片一区二区三区四区 | 国产av久久久久精东av | 中文字幕av伊人av无码av | 亚洲七七久久桃花影院 | 六月丁香婷婷色狠狠久久 | 中文字幕无线码 | 亚洲热妇无码av在线播放 | 国产无套粉嫩白浆在线 | 无码精品人妻一区二区三区av | 国产精品毛多多水多 | 国产亚洲欧美日韩亚洲中文色 | 亚洲中文字幕无码中文字在线 | 日本熟妇乱子伦xxxx | 大肉大捧一进一出视频出来呀 | 国产精品美女久久久久av爽李琼 | 国产成人av免费观看 | 亚洲小说图区综合在线 | √8天堂资源地址中文在线 | 一本久道久久综合狠狠爱 | 漂亮人妻洗澡被公强 日日躁 | 亚洲日韩一区二区 | 狠狠色噜噜狠狠狠7777奇米 | 色情久久久av熟女人妻网站 | 国产综合久久久久鬼色 | 波多野结衣aⅴ在线 | 少妇无套内谢久久久久 | 精品一区二区三区无码免费视频 | 欧美 日韩 人妻 高清 中文 | 黑人粗大猛烈进出高潮视频 | 国精品人妻无码一区二区三区蜜柚 | 国产内射爽爽大片视频社区在线 | 国产激情无码一区二区app | 无码精品人妻一区二区三区av | 色五月丁香五月综合五月 | 好屌草这里只有精品 | 日韩人妻系列无码专区 | 久久天天躁狠狠躁夜夜免费观看 | 日本大乳高潮视频在线观看 | 中文无码成人免费视频在线观看 | 久久久久久av无码免费看大片 | 成人精品一区二区三区中文字幕 | 日本大乳高潮视频在线观看 | 亚洲性无码av中文字幕 | 无码一区二区三区在线 | 97精品人妻一区二区三区香蕉 | 一本色道久久综合狠狠躁 | 人人妻人人澡人人爽精品欧美 | 国产亚洲精品久久久久久久 | 国产精品亚洲lv粉色 | 日本精品人妻无码77777 天堂一区人妻无码 | 久久久久亚洲精品男人的天堂 | 亚洲区欧美区综合区自拍区 | 国产午夜无码精品免费看 | 成 人 免费观看网站 | 久久午夜无码鲁丝片 | 日欧一片内射va在线影院 | 野外少妇愉情中文字幕 | 天天综合网天天综合色 | 少妇人妻av毛片在线看 | 女人高潮内射99精品 | 国产成人精品一区二区在线小狼 | 国产成人综合在线女婷五月99播放 | 在线播放免费人成毛片乱码 | 国产成人一区二区三区在线观看 | 精品国精品国产自在久国产87 | 久久综合色之久久综合 | 99精品国产综合久久久久五月天 | 亚洲欧洲日本无在线码 | 久久久久亚洲精品中文字幕 | 色窝窝无码一区二区三区色欲 | 又湿又紧又大又爽a视频国产 | 日韩av无码中文无码电影 | 国产无av码在线观看 | 日欧一片内射va在线影院 | 成人精品一区二区三区中文字幕 | 久久 国产 尿 小便 嘘嘘 | 午夜性刺激在线视频免费 | 国产精品久久久一区二区三区 | 伊人久久大香线蕉亚洲 | 日韩精品无码一区二区中文字幕 | 国产猛烈高潮尖叫视频免费 | 正在播放东北夫妻内射 | 久久精品人妻少妇一区二区三区 | 两性色午夜免费视频 | 欧美国产日韩亚洲中文 | 精品人妻av区 | 免费男性肉肉影院 | 狂野欧美激情性xxxx | 久久久中文久久久无码 | 成在人线av无码免观看麻豆 | 动漫av一区二区在线观看 | 真人与拘做受免费视频一 | 午夜免费福利小电影 | 狠狠躁日日躁夜夜躁2020 | 久久人人爽人人爽人人片ⅴ | 久久精品国产99久久6动漫 | 99麻豆久久久国产精品免费 | 精品无码一区二区三区的天堂 | 国产绳艺sm调教室论坛 | 久久亚洲精品成人无码 | 亚洲熟悉妇女xxx妇女av | 国内精品人妻无码久久久影院 | 久久国产自偷自偷免费一区调 | 人人妻人人澡人人爽欧美精品 | 国产亲子乱弄免费视频 | 国产性生交xxxxx无码 | 欧美真人作爱免费视频 | 久久综合网欧美色妞网 | 377p欧洲日本亚洲大胆 | 久久亚洲中文字幕无码 | 最新国产麻豆aⅴ精品无码 | 正在播放老肥熟妇露脸 | 水蜜桃亚洲一二三四在线 | 在线精品亚洲一区二区 | 色五月五月丁香亚洲综合网 | 久久午夜无码鲁丝片 | 亚洲乱码日产精品bd | 成人免费视频视频在线观看 免费 | 99精品国产综合久久久久五月天 | 色窝窝无码一区二区三区色欲 | 天天躁夜夜躁狠狠是什么心态 | 亚洲欧美中文字幕5发布 | 久久精品国产一区二区三区肥胖 | 九九久久精品国产免费看小说 | 成在人线av无码免观看麻豆 | 在线观看国产午夜福利片 | 亚洲欧美日韩综合久久久 | 97精品国产97久久久久久免费 | 日日摸天天摸爽爽狠狠97 | 中文字幕久久久久人妻 | 免费无码的av片在线观看 | 欧美激情内射喷水高潮 | 亚洲日本一区二区三区在线 | 亚洲精品综合五月久久小说 | 中文精品久久久久人妻不卡 | 国产精品香蕉在线观看 | 亚洲第一无码av无码专区 | 久久99热只有频精品8 | 伊人久久大香线蕉亚洲 | 曰本女人与公拘交酡免费视频 | 在线a亚洲视频播放在线观看 | 国产在线无码精品电影网 | 成在人线av无码免费 | 麻豆人妻少妇精品无码专区 | 午夜无码区在线观看 | 亚洲色在线无码国产精品不卡 | 少妇的肉体aa片免费 | 日日摸天天摸爽爽狠狠97 | 中文字幕无码av激情不卡 | 久久国产精品二国产精品 | 亚洲成a人片在线观看无码3d | 性色av无码免费一区二区三区 | 午夜精品久久久久久久久 | 免费乱码人妻系列无码专区 | 国产成人综合色在线观看网站 | 少妇性荡欲午夜性开放视频剧场 | 天海翼激烈高潮到腰振不止 | 天下第一社区视频www日本 | 午夜理论片yy44880影院 | 97人妻精品一区二区三区 | 最新国产乱人伦偷精品免费网站 | 国产亚洲人成在线播放 | 欧美高清在线精品一区 | 国产三级久久久精品麻豆三级 | 东京热一精品无码av | 国产精品久久久久影院嫩草 | 精品无人区无码乱码毛片国产 | 成年女人永久免费看片 | 88国产精品欧美一区二区三区 | 九月婷婷人人澡人人添人人爽 | 色欲综合久久中文字幕网 | 成人性做爰aaa片免费看不忠 | 成人免费视频一区二区 | 国产精品免费大片 | 日产国产精品亚洲系列 | 久激情内射婷内射蜜桃人妖 | 又大又黄又粗又爽的免费视频 | 国产精品99久久精品爆乳 | 少妇的肉体aa片免费 |