欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Pintos實(shí)驗(yàn)2:用戶程序加載與系統(tǒng)調(diào)用實(shí)現(xiàn)全解析

Pintos實(shí)驗(yàn)2:用戶程序加載與系統(tǒng)調(diào)用實(shí)現(xiàn)全解析 1. 項(xiàng)目概述從理論到實(shí)踐的Pintos操作系統(tǒng)實(shí)驗(yàn)如果你正在學(xué)習(xí)操作系統(tǒng)課程或者對(duì)操作系統(tǒng)的內(nèi)部運(yùn)行機(jī)制充滿好奇那么“Pintos”這個(gè)名字你一定不陌生。它是一個(gè)由斯坦福大學(xué)開發(fā)專門用于教學(xué)的小型操作系統(tǒng)內(nèi)核。而“實(shí)驗(yàn)2useprog”這個(gè)標(biāo)題乍一看可能有些模糊但它精準(zhǔn)地指向了Pintos實(shí)驗(yàn)系列中一個(gè)承上啟下的關(guān)鍵環(huán)節(jié)——用戶程序User Programs的實(shí)現(xiàn)。簡(jiǎn)單來說這個(gè)實(shí)驗(yàn)的目標(biāo)是讓Pintos內(nèi)核從一個(gè)只能運(yùn)行內(nèi)核線程的“裸奔”狀態(tài)進(jìn)化到能夠加載、執(zhí)行并管理來自磁盤的普通用戶程序這是現(xiàn)代操作系統(tǒng)最基礎(chǔ)、最核心的功能之一。我當(dāng)年做這個(gè)實(shí)驗(yàn)時(shí)感覺就像是在給一個(gè)剛學(xué)會(huì)走路的機(jī)器人安裝大腦和感官讓它能理解并執(zhí)行更復(fù)雜的指令。內(nèi)核之前只能處理自己內(nèi)部的“家務(wù)事”系統(tǒng)調(diào)用、線程調(diào)度等現(xiàn)在則需要建立起一套完整的機(jī)制來安全、高效地運(yùn)行為它設(shè)計(jì)的“外來”程序。這涉及到內(nèi)存管理、系統(tǒng)調(diào)用接口、文件系統(tǒng)交互、進(jìn)程保護(hù)等一系列核心概念。通過親手實(shí)現(xiàn)“useprog”你不僅能深刻理解exec(),wait()這些系統(tǒng)調(diào)用背后發(fā)生了什么更能建立起從高級(jí)語(yǔ)言代碼到CPU指令執(zhí)行的完整認(rèn)知鏈條。無論你是計(jì)算機(jī)專業(yè)的學(xué)生還是希望夯實(shí)底層知識(shí)的開發(fā)者這個(gè)實(shí)驗(yàn)都是一次絕佳的“手術(shù)刀式”的深度學(xué)習(xí)。2. 實(shí)驗(yàn)核心思路與架構(gòu)設(shè)計(jì)拆解在動(dòng)手寫代碼之前我們必須先搞清楚Pintos實(shí)驗(yàn)2要我們具體做什么以及為什么這么設(shè)計(jì)。實(shí)驗(yàn)文檔通常不會(huì)把所有細(xì)節(jié)都喂到你嘴邊它給出的是目標(biāo)和測(cè)試用例而如何搭建橋梁到達(dá)彼岸正是鍛煉你系統(tǒng)設(shè)計(jì)能力的關(guān)鍵。2.1 核心需求解析用戶程序的完整生命周期實(shí)驗(yàn)的核心是讓Pintos支持用戶程序的加載與執(zhí)行。一個(gè)用戶程序在Pintos中的完整生命周期可以分解為以下幾個(gè)關(guān)鍵階段這也是我們實(shí)現(xiàn)時(shí)需要逐個(gè)攻克的堡壘程序加載Loading內(nèi)核需要從磁盤的文件系統(tǒng)中找到名為“程序”的文件例如一個(gè)可執(zhí)行的ELF文件將其代碼和數(shù)據(jù)正確地讀取到內(nèi)存的特定位置。地址空間構(gòu)建Setup Address Space為這個(gè)程序創(chuàng)建一個(gè)獨(dú)立的虛擬地址空間。這包括設(shè)置頁(yè)目錄、頁(yè)表將加載的代碼和數(shù)據(jù)映射到正確的虛擬地址在Pintos中用戶程序的虛擬地址通常從0x08048000開始并分配用戶??臻g。執(zhí)行上下文初始化Initialization準(zhǔn)備好程序執(zhí)行所需的初始狀態(tài)。這包括設(shè)置用戶態(tài)CPU寄存器如%eip指向程序入口點(diǎn)%esp指向用戶棧頂以及處理可能通過命令行傳遞的參數(shù)。系統(tǒng)調(diào)用支持System Call Support程序運(yùn)行起來后不可避免地需要向內(nèi)核請(qǐng)求服務(wù)例如讀寫文件、創(chuàng)建新進(jìn)程、申請(qǐng)更多內(nèi)存等。內(nèi)核必須提供一套安全的機(jī)制來響應(yīng)用戶程序的這些請(qǐng)求這就是系統(tǒng)調(diào)用。我們需要實(shí)現(xiàn)一個(gè)從用戶態(tài)到內(nèi)核態(tài)的“受控入口”。進(jìn)程控制Process Control實(shí)現(xiàn)諸如exec()執(zhí)行新程序、wait()等待子進(jìn)程結(jié)束等進(jìn)程管理相關(guān)的系統(tǒng)調(diào)用從而支持簡(jiǎn)單的進(jìn)程樹和進(jìn)程間同步。內(nèi)存保護(hù)與錯(cuò)誤處理Memory Protection Fault Handling確保用戶程序不能訪問內(nèi)核內(nèi)存或其他程序的內(nèi)存。當(dāng)用戶程序試圖進(jìn)行非法操作如訪問非法地址、執(zhí)行特權(quán)指令時(shí)內(nèi)核需要能夠捕獲這些錯(cuò)誤通過頁(yè)面錯(cuò)誤#PF或通用保護(hù)錯(cuò)誤#GP等異常并得體地終止該程序而不是導(dǎo)致整個(gè)系統(tǒng)崩潰。實(shí)驗(yàn)的測(cè)試用例make check會(huì)系統(tǒng)地驗(yàn)證上述每一個(gè)環(huán)節(jié)。例如rox-simple測(cè)試檢查只讀數(shù)據(jù)段是否真的不可寫exec-multiple測(cè)試連續(xù)執(zhí)行多個(gè)程序的能力wait-simple則測(cè)試父進(jìn)程等待子進(jìn)程的功能。2.2 方案選型與設(shè)計(jì)考量面對(duì)這些需求我們需要在Pintos已有的框架下做出一些關(guān)鍵的設(shè)計(jì)決策。1. 程序加載與ELF解析Pintos的用戶程序是標(biāo)準(zhǔn)的32位ELF格式。我們不需要實(shí)現(xiàn)一個(gè)完整的ELF加載器但必須理解ELF文件頭Elf32_Ehdr和程序頭Elf32_Phdr的結(jié)構(gòu)。核心任務(wù)是遍歷程序頭表找到所有類型為PT_LOAD的段Segment這些段指明了需要被加載到內(nèi)存的代碼和數(shù)據(jù)。我們需要計(jì)算每個(gè)段在虛擬地址空間中的位置p_vaddr然后在當(dāng)前進(jìn)程的頁(yè)表中建立從該虛擬地址到物理內(nèi)存的映射最后將段的內(nèi)容從文件中讀取到對(duì)應(yīng)的物理頁(yè)中。注意這里一個(gè)常見的“坑”是文件偏移p_offset和內(nèi)存虛擬地址p_vaddr的對(duì)齊問題。p_vaddr可能不是頁(yè)面對(duì)齊的但我們?cè)诮?nèi)存映射時(shí)必須以頁(yè)面為單位。這意味著你可能需要先分配一個(gè)完整的物理頁(yè)然后只將段數(shù)據(jù)寫入該頁(yè)中從p_vaddr對(duì)應(yīng)偏移開始的部分。段末尾未使用的部分應(yīng)清零對(duì)應(yīng).bss段。2. 系統(tǒng)調(diào)用實(shí)現(xiàn)機(jī)制如何讓用戶程序安全地調(diào)用內(nèi)核功能x86架構(gòu)提供了int指令軟件中斷作為從用戶態(tài)ring 3陷入內(nèi)核態(tài)ring 0的標(biāo)準(zhǔn)方式。Pintos實(shí)驗(yàn)2約定使用int 0x30作為系統(tǒng)調(diào)用中斷號(hào)。用戶側(cè)我們需要在lib/user/syscall.c中提供一系列封裝函數(shù)如write,exec,wait等。這些函數(shù)的工作是將系統(tǒng)調(diào)用號(hào)例如SYS_WRITE和參數(shù)按照特定的約定比如壓棧準(zhǔn)備好然后執(zhí)行int $0x30指令。內(nèi)核側(cè)我們需要在src/userprog/syscall.c中實(shí)現(xiàn)syscall_handler()函數(shù)它作為0x30號(hào)中斷的處理例程。這個(gè)處理函數(shù)需要 a. 從用戶?;蚣拇嫫骶唧w約定需查看實(shí)驗(yàn)文檔或lib/syscall-nr.h中取出系統(tǒng)調(diào)用號(hào)和參數(shù)。 b. 進(jìn)行參數(shù)驗(yàn)證例如指針參數(shù)指向的用戶內(nèi)存地址是否有效。 c. 根據(jù)調(diào)用號(hào)分派到具體的處理函數(shù)如sys_write,sys_exec等。 d. 將返回值設(shè)置到某個(gè)寄存器如%eax中供用戶程序讀取。3. 進(jìn)程數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)Pintos內(nèi)核的thread結(jié)構(gòu)體最初是為內(nèi)核線程設(shè)計(jì)的。為了支持進(jìn)程我們需要擴(kuò)展它。通常我們會(huì)創(chuàng)建一個(gè)struct process或直接在struct thread中添加以下字段tid_t parent_tid父進(jìn)程的線程ID。struct list children子進(jìn)程列表。int exit_status進(jìn)程的退出狀態(tài)碼。struct semaphore wait_sema一個(gè)信號(hào)量用于實(shí)現(xiàn)wait()系統(tǒng)調(diào)用時(shí)的同步。父進(jìn)程在該信號(hào)量上等待子進(jìn)程退出時(shí)up此信號(hào)量。bool loaded標(biāo)識(shí)程序是否成功加載。這在exec()中至關(guān)重要因?yàn)榧虞d可能失敗文件不存在、非ELF格式等我們需要將失敗信息返回給調(diào)用者。struct file *executable指向進(jìn)程可執(zhí)行文件對(duì)象的指針。保持文件打開直到進(jìn)程結(jié)束以防止文件在運(yùn)行時(shí)被刪除。3. 核心模塊實(shí)現(xiàn)與實(shí)操要點(diǎn)理解了整體設(shè)計(jì)我們就可以深入到各個(gè)核心模塊的代碼實(shí)現(xiàn)中了。這里我會(huì)結(jié)合我當(dāng)年調(diào)試時(shí)遇到的典型問題和技巧逐一拆解。3.1 用戶程序加載器Loader的實(shí)現(xiàn)細(xì)節(jié)加載器的入口函數(shù)通常是process_execute()或load()。它的偽代碼邏輯如下bool load(const char *file_name, void (**eip) (void), void **esp) { // 1. 打開文件 struct file *file filesys_open(file_name); if (file NULL) return false; // 2. 讀取并驗(yàn)證ELF文件頭 Elf32_Ehdr ehdr; file_read(file, ehdr, sizeof(ehdr)); if (memcmp(ehdr.e_ident, ELFMAG, SELFMAG) ! 0) return false; // 魔數(shù)校驗(yàn) // 3. 遍歷程序頭表 for (int i 0; i ehdr.e_phnum; i) { Elf32_Phdr phdr; file_seek(file, ehdr.e_phoff i * ehdr.e_phentsize); file_read(file, phdr, sizeof(phdr)); if (phdr.p_type PT_LOAD) { // 4. 為這個(gè)LOAD段分配頁(yè)面并建立映射 uint32_t read_bytes phdr.p_filesz; // 段在文件中的大小 uint32_t zero_bytes phdr.p_memsz - phdr.p_filesz; // .bss部分需要清零的大小 uint32_t page_offset phdr.p_vaddr (PGSIZE - 1); // 段起始地址在頁(yè)面內(nèi)的偏移 // 計(jì)算需要多少頁(yè) uint32_t start_page pg_round_down(phdr.p_vaddr); uint32_t end_page pg_round_down(phdr.p_vaddr phdr.p_memsz - 1); for (uint32_t page start_page; page end_page; page PGSIZE) { // 分配一個(gè)物理頁(yè)幀并在頁(yè)表中建立 page - frame 的映射權(quán)限根據(jù)phdr.p_flags設(shè)置可讀、可寫、可執(zhí)行 // ... } // 5. 將段數(shù)據(jù)從文件讀入內(nèi)存 file_seek(file, phdr.p_offset); while (read_bytes 0 || zero_bytes 0) { // 計(jì)算當(dāng)前頁(yè)面能寫入多少數(shù)據(jù)... // 調(diào)用file_read讀取文件內(nèi)容到臨時(shí)緩沖區(qū)再?gòu)?fù)制到用戶虛擬地址 // 調(diào)用memset清零.bss部分 } } } // 6. 設(shè)置入口點(diǎn)和初始棧指針 *eip (void (*)(void)) ehdr.e_entry; *esp (void*) PHYS_BASE; // Pintos用戶棧初始位置通常在物理內(nèi)存頂部 // 7. 將文件名參數(shù)壓入用戶棧如果需要 // ... return true; }實(shí)操要點(diǎn)與避坑指南文件操作與保持打開加載器需要打開可執(zhí)行文件并讀取內(nèi)容。一個(gè)關(guān)鍵細(xì)節(jié)是這個(gè)文件描述符struct file*必須在進(jìn)程整個(gè)生命周期內(nèi)保持打開直到進(jìn)程退出。這是因?yàn)檫M(jìn)程的代碼段在內(nèi)存中是以文件的內(nèi)存映射mmap-like方式存在的如果文件被提前關(guān)閉當(dāng)發(fā)生頁(yè)面換出再換入時(shí)就無法從磁盤重新讀取數(shù)據(jù)。通常我們將這個(gè)file指針保存在進(jìn)程控制塊PCB中。棧的初始化Pintos要求將命令行參數(shù)按照C語(yǔ)言main(int argc, char *argv[])的約定壓入用戶棧。這包括argv指針數(shù)組、各個(gè)參數(shù)字符串本身、以及一個(gè)哨兵NULL指針。壓棧順序必須嚴(yán)格遵守System V ABI或?qū)嶒?yàn)具體要求從右向左壓入?yún)?shù)最后壓入argc和argv。棧指針%esp必須指向argc的地址。這一步非常繁瑣且容易出錯(cuò)建議單獨(dú)寫一個(gè)函數(shù)setup_stack()來處理并用GDB仔細(xì)檢查棧內(nèi)存布局。內(nèi)存映射權(quán)限根據(jù)ELF程序頭中的p_flags設(shè)置頁(yè)表項(xiàng)的權(quán)限位。PF_R對(duì)應(yīng)可讀PF_W對(duì)應(yīng)可寫PF_X對(duì)應(yīng)可執(zhí)行。只讀數(shù)據(jù)段如.rodata應(yīng)設(shè)置為只讀任何寫入嘗試都應(yīng)觸發(fā)頁(yè)面錯(cuò)誤這正是rox-*測(cè)試用例要檢驗(yàn)的。3.2 系統(tǒng)調(diào)用分派與參數(shù)驗(yàn)證框架系統(tǒng)調(diào)用處理程序syscall_handler()是內(nèi)核安全的第一道大門。它的首要任務(wù)不是執(zhí)行功能而是驗(yàn)證。static void syscall_handler(struct intr_frame *f) { // 1. 從中斷幀f中獲取系統(tǒng)調(diào)用號(hào)。約定可能保存在%eax寄存器中。 int syscall_no f-eax; // 2. 參數(shù)驗(yàn)證輔助函數(shù)檢查指針ptr指向的用戶內(nèi)存是否有效可讀/可寫 if (!is_user_vaddr(ptr) || ptr NULL || !pagedir_get_page(thread_current()-pagedir, ptr)) { // 無效地址終止進(jìn)程exit(-1) thread_exit_with_status(-1); } // 3. 根據(jù)調(diào)用號(hào)分派 switch (syscall_no) { case SYS_HALT: ... case SYS_EXIT: { // 首先驗(yàn)證狀態(tài)參數(shù)如果是整數(shù)通常無需額外驗(yàn)證 int status f-ecx; // 假設(shè)第一個(gè)參數(shù)在ecx sys_exit(status); break; } case SYS_EXEC: { // 首先驗(yàn)證字符串指針 const char *cmd_line (const char*)f-ecx; validate_user_string(cmd_line); // 需要檢查字符串是否以\0結(jié)尾且在有效內(nèi)存范圍內(nèi) f-eax sys_exec(cmd_line); break; } case SYS_WRITE: { int fd f-ecx; const void *buffer (const void*)f-edx; unsigned size f-ebx; // 參數(shù)順序依約定而定 validate_user_buffer(buffer, size, true); // 檢查buffer開始的size字節(jié)是否可讀 f-eax sys_write(fd, buffer, size); break; } // ... 其他系統(tǒng)調(diào)用 default: // 未知系統(tǒng)調(diào)用終止進(jìn)程 thread_exit_with_status(-1); } }參數(shù)驗(yàn)證的深層邏輯為什么必須驗(yàn)證用戶程序可能是惡意的或有bug的。它可能傳遞一個(gè)指向內(nèi)核地址的指針如果內(nèi)核直接解引用就會(huì)讀取或破壞內(nèi)核數(shù)據(jù)造成安全漏洞或系統(tǒng)崩潰。驗(yàn)證什么地址有效性指針是否在用戶地址空間0x08048000到PHYS_BASE是否為空內(nèi)存存在性該地址是否已經(jīng)映射了物理頁(yè)通過pagedir_get_page()查詢當(dāng)前進(jìn)程的頁(yè)表。訪問權(quán)限對(duì)于寫入SYS_WRITE的buffer內(nèi)存是否可寫對(duì)于讀取SYS_READ的buffer內(nèi)存是否可讀這需要查詢頁(yè)表項(xiàng)的權(quán)限位。字符串完整性對(duì)于字符串參數(shù)需要確保整個(gè)字符串直到遇到\0都在可讀的用戶內(nèi)存內(nèi)。需要寫一個(gè)循環(huán)來逐頁(yè)檢查。驗(yàn)證失敗的處理通常的做法是立即終止exit(-1)發(fā)出非法請(qǐng)求的進(jìn)程。這模擬了現(xiàn)代操作系統(tǒng)對(duì)非法內(nèi)存訪問拋出SIGSEGV信號(hào)的行為。3.3 關(guān)鍵系統(tǒng)調(diào)用exec與wait的實(shí)現(xiàn)exec和wait是進(jìn)程管理的基石它們的實(shí)現(xiàn)需要精心設(shè)計(jì)進(jìn)程間的同步與狀態(tài)傳遞。sys_exec的實(shí)現(xiàn)思路驗(yàn)證命令行字符串。調(diào)用process_execute()。注意這個(gè)函數(shù)會(huì)創(chuàng)建一個(gè)新線程來加載和運(yùn)行目標(biāo)程序。關(guān)鍵難點(diǎn)加載成功與否的同步。process_execute()創(chuàng)建新線程后立即返回但新線程可能加載失敗文件不存在。父進(jìn)程調(diào)用者需要知道這個(gè)結(jié)果。常見的解決方案是在子進(jìn)程的線程結(jié)構(gòu)體中設(shè)置一個(gè)struct semaphore load_sema初始值為0。子線程在加載完成后無論成功失敗將加載結(jié)果成功則記錄進(jìn)程ID失敗則記錄錯(cuò)誤存入線程結(jié)構(gòu)體然后執(zhí)行sema_up(load_sema)。父線程在調(diào)用process_execute()后立即執(zhí)行sem_down(load_sema)進(jìn)行等待。父線程被喚醒后檢查子線程結(jié)構(gòu)體中的加載結(jié)果。若成功返回子進(jìn)程的PID在Pintos中即線程IDtid_t若失敗返回-1或錯(cuò)誤碼。如果加載成功父進(jìn)程需要將子進(jìn)程加入自己的children鏈表以便后續(xù)wait。sys_wait的實(shí)現(xiàn)思路驗(yàn)證提供的PID是否是自己的子進(jìn)程。在子進(jìn)程的線程結(jié)構(gòu)體中找到對(duì)應(yīng)的wait_sema信號(hào)量并執(zhí)行sem_down。父進(jìn)程將在此阻塞。子進(jìn)程在退出時(shí)sys_exit中需要設(shè)置自己的exit_status。從父進(jìn)程的children鏈表中移除自己注意同步。執(zhí)行sem_up(wait_sema)來喚醒可能正在等待的父進(jìn)程。如果父進(jìn)程已經(jīng)終止則需要由祖先進(jìn)程init來回收資源這涉及到更復(fù)雜的孤兒進(jìn)程處理。在基礎(chǔ)實(shí)驗(yàn)中有時(shí)可以簡(jiǎn)化處理。父進(jìn)程被喚醒后獲取子進(jìn)程的exit_status銷毀子進(jìn)程的資源如關(guān)閉打開的文件、釋放頁(yè)表等然后返回該狀態(tài)碼。重要心得exec和wait的實(shí)現(xiàn)強(qiáng)烈依賴于線程/進(jìn)程數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)和信號(hào)量的正確使用。務(wù)必在添加任何字段時(shí)想清楚這個(gè)字段由誰(shuí)寫入由誰(shuí)讀取在什么時(shí)機(jī)是否需要鎖或信號(hào)量保護(hù)畫一個(gè)簡(jiǎn)單的狀態(tài)轉(zhuǎn)換圖會(huì)非常有幫助。4. 完整實(shí)現(xiàn)流程與關(guān)鍵代碼剖析讓我們沿著一個(gè)用戶程序從被加載到結(jié)束的完整路徑串聯(lián)起各個(gè)模塊并看看關(guān)鍵代碼如何組織。4.1 從process_execute到用戶main函數(shù)這是用戶程序生命的起點(diǎn)。我們跟蹤一次exec(“myprog arg1 arg2”)的調(diào)用。用戶庫(kù)發(fā)起調(diào)用在用戶程序中exec()是lib/user/syscall.c中的一個(gè)封裝函數(shù)。它把系統(tǒng)調(diào)用號(hào)SYS_EXEC和參數(shù)字符串地址放入寄存器然后執(zhí)行int 0x30。陷入內(nèi)核CPU切換到內(nèi)核態(tài)跳轉(zhuǎn)到syscall_handler。參數(shù)驗(yàn)證與分派syscall_handler驗(yàn)證字符串地址然后調(diào)用sys_exec(“myprog arg1 arg2”)。內(nèi)核創(chuàng)建新進(jìn)程sys_exec調(diào)用process_execute(“myprog arg1 arg2”)。tid_t process_execute(const char *file_name) { char *fn_copy; tid_t tid; struct thread *cur thread_current(); // 復(fù)制文件名因?yàn)樵羔樦赶虻挠脩魞?nèi)存在新線程上下文可能無效 fn_copy palloc_get_page(0); if (fn_copy NULL) return TID_ERROR; strlcpy(fn_copy, file_name, PGSIZE); // 創(chuàng)建新線程入口函數(shù)是start_process tid thread_create(file_name, PRI_DEFAULT, start_process, fn_copy); if (tid TID_ERROR) { palloc_free_page(fn_copy); } // 在這里父進(jìn)程會(huì)通過信號(hào)量等待子進(jìn)程加載完成見上文 sema_down(cur-child_load_sema); // 假設(shè)信號(hào)量在thread結(jié)構(gòu)體中 return cur-load_status; // 返回加載結(jié)果PID或-1 }新線程的初始化新線程開始執(zhí)行start_process(fn_copy)。static void start_process(void *file_name_) { char *file_name file_name_; struct intr_frame if_; bool success; // 初始化中斷幀模擬一個(gè)從用戶態(tài)進(jìn)入的中斷 memset(if_, 0, sizeof if_); if_.gs if_.fs if_.es if_.ds if_.ss SEL_UDSEG; // 用戶數(shù)據(jù)段選擇子 if_.cs SEL_UCSEG; // 用戶代碼段選擇子 if_.eflags FLAG_IF | FLAG_MBS; // 開中斷 // 加載程序這是最核心的一步。 success load(file_name, if_.eip, if_.esp); // 加載完成通知父進(jìn)程 struct thread *cur thread_current(); cur-parent-load_status success ? cur-tid : -1; sema_up(cur-parent-child_load_sema); if (!success) { // 加載失敗線程直接退出 thread_exit(); } // 設(shè)置棧上的參數(shù)argc, argv setup_stack(if_.esp, file_name); // 釋放臨時(shí)復(fù)制的文件名頁(yè)面 palloc_free_page(file_name); // 通過匯編指令iret“返回”到用戶態(tài)此時(shí)CPU會(huì)從中斷幀if_中恢復(fù)所有寄存器。 // eip指向程序入口esp指向設(shè)置好的棧頂程序開始執(zhí)行。 asm volatile (movl %0, %%esp; jmp intr_exit : : g(if_) : memory); }用戶程序開始執(zhí)行iret指令后CPU跳轉(zhuǎn)到用戶程序的入口點(diǎn)通常是_start最終調(diào)用main(argc, argv)。4.2 文件描述符與系統(tǒng)調(diào)用擴(kuò)展為了讓用戶程序能進(jìn)行文件操作open,read,write,close我們需要實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文件描述符fd表。Pintos內(nèi)核本身有struct file抽象我們的任務(wù)是為每個(gè)進(jìn)程維護(hù)一個(gè)從整數(shù)fd到struct file*的映射。設(shè)計(jì)建議在進(jìn)程結(jié)構(gòu)體中添加一個(gè)struct file* fd_table[FD_MAX]數(shù)組。通常FD_MAX定義為128或256。約定fd 0, 1, 2分別為標(biāo)準(zhǔn)輸入、輸出、錯(cuò)誤。在進(jìn)程創(chuàng)建時(shí)可以將它們初始化為對(duì)應(yīng)的文件對(duì)象例如輸出可以關(guān)聯(lián)到控制臺(tái)。sys_open調(diào)用filesys_open()在fd表中找到一個(gè)空閑槽位存儲(chǔ)返回的file*返回fd索引。sys_read/sys_write通過fd索引找到file*調(diào)用file_read/file_write。必須驗(yàn)證buffer和size參數(shù)指向的用戶內(nèi)存有效sys_close調(diào)用file_close()并將fd表中對(duì)應(yīng)項(xiàng)置為NULL。文件共享與復(fù)制當(dāng)實(shí)現(xiàn)sys_exec時(shí)子進(jìn)程默認(rèn)不會(huì)繼承父進(jìn)程的文件描述符。但sys_fork如果實(shí)驗(yàn)要求則需要復(fù)制fd表。更精細(xì)的實(shí)現(xiàn)需要引用計(jì)數(shù)。內(nèi)存映射文件mmap的簡(jiǎn)化實(shí)現(xiàn)一些高級(jí)測(cè)試可能需要mmap。一個(gè)簡(jiǎn)化的實(shí)現(xiàn)思路是在sys_mmap中將文件的全部或一部分直接映射到用戶進(jìn)程的一段空閑虛擬地址區(qū)域。這需要你修改頁(yè)錯(cuò)誤處理程序page_fault()當(dāng)缺頁(yè)發(fā)生在mmap區(qū)域時(shí)不是從交換區(qū)讀而是從對(duì)應(yīng)的文件位置讀取數(shù)據(jù)到新分配的物理頁(yè)。munmap時(shí)則解除映射并釋放資源。5. 調(diào)試技巧、常見問題與測(cè)試通關(guān)實(shí)錄Pintos實(shí)驗(yàn)2的調(diào)試是一場(chǎng)硬仗。以下是我和同學(xué)們當(dāng)年總結(jié)出的“血淚經(jīng)驗(yàn)”。5.1 調(diào)試工具與核心技巧printf大法好但需謹(jǐn)慎在關(guān)鍵路徑如load,syscall_handler入口setup_stack后添加printf打印狀態(tài)信息。注意在內(nèi)核中大量使用printf可能會(huì)改變時(shí)序掩蓋一些并發(fā)bug。最好配合ASSERT使用。GDB是你的最佳伙伴必須學(xué)會(huì)用GDB調(diào)試內(nèi)核。make debug啟動(dòng)Pintos并等待GDB連接。在另一個(gè)終端pintos-gdb或配置好的GDB中使用target remote localhost:1234連接。關(guān)鍵命令b function_name在函數(shù)處設(shè)斷點(diǎn)。b file.c:123在特定行設(shè)斷點(diǎn)。c繼續(xù)執(zhí)行。n單步執(zhí)行不進(jìn)入函數(shù)。s單步執(zhí)行進(jìn)入函數(shù)。p variable打印變量。x/Nx addr以十六進(jìn)制檢查內(nèi)存。info registers查看所有寄存器狀態(tài)在syscall_handler里查看中斷幀f的內(nèi)容至關(guān)重要。thread apply all bt打印所有線程的調(diào)用棧用于診斷死鎖。檢查用戶內(nèi)存在GDB中檢查用戶虛擬地址0x0804xxxx的內(nèi)容需要先切換到目標(biāo)進(jìn)程的頁(yè)表上下文。Pintos的pagedir函數(shù)可以幫助你?;蛘咴趕yscall_handler中驗(yàn)證失敗時(shí)打印出有問題的地址和當(dāng)前進(jìn)程名能快速定位是哪個(gè)測(cè)試用例的哪個(gè)調(diào)用出了問題。理解測(cè)試用例不要盲目跑make check。仔細(xì)閱讀tests/userprog目錄下的測(cè)試源文件。它們清楚地展示了期望的系統(tǒng)調(diào)用序列和返回值。例如exec-once測(cè)試了什么multi-oom測(cè)試如何耗盡內(nèi)存這能幫你理解失敗的原因。5.2 常見問題排查清單問題現(xiàn)象可能原因排查方向make check大量失敗特別是exec-*,wait-*進(jìn)程控制邏輯錯(cuò)誤exec/wait同步問題。1. 檢查exec中父子進(jìn)程的信號(hào)量同步邏輯確保父進(jìn)程能正確獲取子進(jìn)程加載結(jié)果。2. 檢查wait實(shí)現(xiàn)確保父進(jìn)程能在子進(jìn)程的wait_sema上正確阻塞和喚醒。3. 檢查進(jìn)程退出時(shí)exit_status的設(shè)置和資源釋放。rox-*測(cè)試失敗寫入只讀內(nèi)存未觸發(fā)錯(cuò)誤頁(yè)表權(quán)限設(shè)置錯(cuò)誤。1. 在load函數(shù)中確保為PF_W未設(shè)置的段如.rodata建立頁(yè)表映射時(shí)清除可寫位。2. 檢查頁(yè)錯(cuò)誤處理程序page_fault()當(dāng)錯(cuò)誤是由于用戶程序?qū)懭胫蛔x頁(yè)引起時(shí)應(yīng)終止該進(jìn)程而不是內(nèi)核panic。sc-*測(cè)試失敗系統(tǒng)調(diào)用參數(shù)驗(yàn)證系統(tǒng)調(diào)用參數(shù)驗(yàn)證不完整或錯(cuò)誤。1. 確保syscall_handler中對(duì)每一個(gè)指針參數(shù)都進(jìn)行了有效性驗(yàn)證地址范圍、映射存在、訪問權(quán)限。2. 特別檢查字符串參數(shù)驗(yàn)證函數(shù)必須驗(yàn)證到字符串結(jié)束符\0。3. 驗(yàn)證失敗后必須終止進(jìn)程設(shè)置狀態(tài)為-1退出而不是直接返回錯(cuò)誤值。測(cè)試卡住超時(shí)死鎖或無限循環(huán)。1. 使用GDB的thread apply all bt查看所有線程堆??词欠裼芯€程在鎖或信號(hào)量上永久等待。2. 檢查lock_acquire和sema_down周圍是否有遞歸調(diào)用或未釋放鎖的情況。3. 在sys_wait中檢查是否錯(cuò)誤地在自己的wait_sema上等待導(dǎo)致父子互相等待的死鎖。頁(yè)面錯(cuò)誤Page Fault或通用保護(hù)錯(cuò)誤GPF訪問了非法地址或內(nèi)核數(shù)據(jù)結(jié)構(gòu)被破壞。1. 首先看錯(cuò)誤地址。如果是用戶地址0x0804xxxx或0xc0000000以下是用戶程序問題應(yīng)終止該進(jìn)程。2. 如果是內(nèi)核地址很可能是內(nèi)核代碼有bug。檢查a. 系統(tǒng)調(diào)用驗(yàn)證不嚴(yán)用戶指針指向了內(nèi)核數(shù)據(jù)并被解引用。b. 棧溢出破壞了線程結(jié)構(gòu)。c. 并發(fā)訪問共享數(shù)據(jù)未加鎖導(dǎo)致數(shù)據(jù)競(jìng)爭(zhēng)。內(nèi)存耗盡測(cè)試oom-*失敗內(nèi)存分配失敗處理不當(dāng)。1.palloc_get_page()或malloc失敗時(shí)應(yīng)返回NULL或false你的代碼需要處理這種錯(cuò)誤優(yōu)雅地失敗例如exec返回-1而不是崩潰。2. 確保所有分配的資源物理頁(yè)、文件描述符、進(jìn)程槽位在進(jìn)程退出時(shí)都被正確釋放。5.3 進(jìn)階挑戰(zhàn)與優(yōu)化思考當(dāng)基礎(chǔ)功能全部通過測(cè)試后你可以思考一些更深層次的問題這能極大提升你對(duì)操作系統(tǒng)的理解共享內(nèi)存與fork()如果實(shí)驗(yàn)包含fork()你需要實(shí)現(xiàn)寫時(shí)復(fù)制Copy-On-Write, COW。這需要修改頁(yè)錯(cuò)誤處理程序當(dāng)發(fā)現(xiàn)對(duì)只讀的私有頁(yè)面進(jìn)行寫入時(shí)不是終止進(jìn)程而是復(fù)制該物理頁(yè)為新頁(yè)建立可寫映射。執(zhí)行效率當(dāng)前的load是“急切加載”eager loading即一次性將整個(gè)程序讀入內(nèi)存。能否實(shí)現(xiàn)“惰性加載”lazy loading即只建立頁(yè)表映射標(biāo)記頁(yè)面不存在當(dāng)程序首次訪問該頁(yè)時(shí)觸發(fā)缺頁(yè)中斷再將對(duì)應(yīng)的代碼/數(shù)據(jù)從磁盤讀入。這能加快exec的速度。更真實(shí)的文件描述符管理實(shí)現(xiàn)文件描述符的復(fù)制dup/dup2和繼承通過fork/exec時(shí)傳遞CLONE_FILES標(biāo)志。這需要為struct file引入引用計(jì)數(shù)。信號(hào)Signals的簡(jiǎn)化版嘗試實(shí)現(xiàn)一個(gè)簡(jiǎn)單的信號(hào)機(jī)制例如SIGCHLD當(dāng)子進(jìn)程終止時(shí)通知父進(jìn)程這可以替代或增強(qiáng)基于信號(hào)量的wait同步。完成Pintos實(shí)驗(yàn)2你收獲的遠(yuǎn)不止是幾十個(gè)通過的測(cè)試用例。你親手搭建了一個(gè)微型但五臟俱全的進(jìn)程管理框架對(duì)虛擬內(nèi)存、系統(tǒng)調(diào)用、進(jìn)程間同步有了刻骨銘心的理解。這些知識(shí)是理解Linux、Windows等現(xiàn)代操作系統(tǒng)的基石。當(dāng)你再在高級(jí)語(yǔ)言中調(diào)用fork()或CreateProcess時(shí)你腦海中浮現(xiàn)的將是頁(yè)表、中斷描述符和信號(hào)量這種透過抽象看到本質(zhì)的能力正是這個(gè)實(shí)驗(yàn)帶給你的最大財(cái)富。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月色激情综合网| 五月激情综| 大香蕉丁香| 97久久人人操| 婷婷五月天色| 五月婷婷综合潮喷| 欧美丁香六月在线观看视频| 久久99婷婷| 免费无码毛片一区二区A片 | 五月天开心网| 26uuu精品一区二区| 丁香婷婷偷拍| 久久五月天精品视频| 色播五月丁香综合| 大香蕉久久伊人网| 亚洲精品白浆高清久久久久久| 五月天激情小说网| 99亚洲精品视频| 情欲综合网| 91九色国产| 色婷婷影视99| wwww.9免费视频| www五月| 99这里只有精| 99热这里只有精品免费观看| 婷婷五月丁香伊人| 都市激情五月婷婷亚洲| 99热这里有精品24| 婷婷播播五月天| www.色婷婷| 99在线综合视频| 香蕉97碰碰碰欧美| 日韩在线观看网址| 99欧美精品99日本精品| 国产女18毛片多18精品| 九九精品丁香花| 99欧美| www色色色com| 开心深爱激情网| 久色大| 丁香六月激情综合啪啪| 夜夜操,天天撸| 精品婷婷五月视| 丁香五月性| www.久久99热地址发布| 色色五月丁香婷婷| 五月婷六月综合在线观看| 91超级碰| 精品一区二区三区四区五区六区介绍| 国产婷婷五月中文字幕高清| 五月的婷婷六月丁香| 99色这里| 婷婷五月天伊人网在线观看视频| 天天五月情| 偷拍视频五月天| 99热精品一区| 午夜色丁香| 99er6热在线观看精品6| 草综合14| 激情五月天丁香| www.91操| 白人荫道BBWBBB大荫道| 日本性视频| 天天色凹凸| 99热综合在线观看| 欧美精品A片一区在线观看| 久久99看免费| 五月丁香怕怕综合| 婷婷五月丁香四射| av第一二区| 人人综合久| 91互操| 色五月婷婷91| sisi热国产| 亚洲12p| 亚洲欧美综合7777色亭亭| 五月停停大香蕉| 雪千夏麻豆| 国产欧美大香蕉一区| 久久91久久精品久久| 任我肏视频精品| www.玖玖婷婷在线| 99丁香五月婷| 久久久性爱视频| 色色激情网| 婷婷激情五月综合| 淫荡综合网| 亚洲精品午夜国产va久久成人| 天天做天天爱天天爽综合网| 欧美色色色| 五月丁香影院| 看逼中文字幕| 岛国资源网| 丁香五月天激情网| 六月激情网| 狠狠CAO日日穞夜夜穞AV| 激情婷婷护士激情| 无码九九| 丁香五月天亚洲视频| 婷婷伊人综合中文字幕| 不卡在线超碰| 超碰免费在线| 五月久视频| 五月天色不卡| 六月婷婷色色色| 五月丁香六月婷婷精品| 91婷婷五月天嫩女| 狠狠精品干练久久久无码中文字幕| 国成人网| 丁香激情五月综合网| 婷婷香五月综合激情| 久久天天| 黄桃AV无码免费一区二区三区| 婷婷性爱视频在线| 天天日夜夜夜操操操操| 五月天婷婷色色| 国产偷人爽久久久久久老妇APP| 日本天堂网站99| 九九热中文| 天天爱天天做天天爽| 激情五月婷婷| 伊人九九九久| 538久久| 九九大香蕉黄色影院| 久久综合五月天| 色天五月天在线观看视频| 99爱视频在线| 五月丁香久久呀| 成人网站免费sxj| 五月婷婷,狠狠操| 99ER热精品视频| 欧美性爱中文字幕| 婷婷九月丁香| 色色六月| 天堂婷婷丁香六月网| 日韩九区| 69久久99精品久久久久| 另类小说色婷婷| 99ER热精品视频| 黄色五月婷婷| 99热久草| 亚洲小电影在线观看黄999| 日夜夜天天| 五月丁香啪啪综合| -91九色大屁股| 久热这里只有精品视频免费观看| 亚洲成人影视在线| 深爱激情久久| 江苏少妇性BBB搡BBB爽爽爽| 亚洲五月丁| 婷婷综合网| 欧洲亚洲午夜| 另类A片| 久久青青日本视频| 成人五月天综合网| 激情AV在线| 婷婷丁香色五月天| 丁香五月之久操视频| 99久久综合狠狠综合久久| 97自拍视频网| 99啪啪| 成人深爱丁香五月| 五月丁香六月婷婷在线观看| 99这里只有精品|v| 操日本99| 色综合久久久久| 国产片XXXXA片国语对白| 丁香六月综合| 天天操天天爱天天日| 三级成人网站| 91九色在线视频| 99热97| 免费无码毛片一区二区A片| 色婷婷狠狠18yy| 97热精品| 婷婷射图五月天| a久久| 99精在线| 五月深情久久| 色日本丁香婷婷| 看久久性爱视频| 99热主页日本| 雪千夏麻豆| 久综合九| 99综合激情久久精品久久| 激情AV在线| 伊人综合网站| 丁香六月啪啪啪| 伍月激情天| 色香欲综合| 九九色综合九九色| 操日本色| Jh7Uf088VHafNm| 亚洲综合视频网| 一本道在线电影| 99伊人婷婷在线| 这里只有精品视频在线观看免费| 丁香婷婷色五月激情综合| 人人操五月天| 丁香五月天.com| 色综合久久伊伊婷婷五月| 亚洲国产婷婷色五月| 日日操,夜夜撸| 亚洲不卡| 婷婷五月天毛片| 狠狠色五月激情| 66色在线日韩| BlACKEDRAW视频一区二区| 日本色色网| 99爱在线精品视频免费观看| 思思久久99热只有频精品66| 婷婷成人综合| www999日韩精品| 三日本无码| 蜜桃婷婷五月| 久久婷五月| 人妻激情网| 色婷婷丁香五月在线| 综合激情在线视频| 色五月婷婷激情基地| 五月丁激情| 91人人操人人| 久久婷婷丁香| 99这里| 中文字幕视频色婷婷| 成人精品在线观看| 亚洲无码另类| 操逼视频一区| 色综合丁香婷婷| 丁香影院五月综合| 久热只有这里精品| 亚州在线中文字幕| 婷婷综合在线观看视频| 最近中文字幕2019视频1| 日本色婷婷| 天天噜| 五月天激情网图片| 91天堂网综合| 色色亚洲视频| 色五月婷婷激情基地| 丁香婷婷色五月天| 在线不卡AC| 五月丁香六月婷婷在线小说视频| 91丨九色丨43老版熟女| 色婷婷婷av| 99色婷婷| 成人精品在线| 99热97| 97超碰人人操| 色五月丁香婷婷| 九月激情网| 色丁香五月| 五月亭亭色| 成人五月天视频播放| 91se视频| 99亚洲色色| 99超碰欧美| 色亚洲婷婷| 九九色综合| 激情五月深爱五月观看| 天天综合精品| 九九热思思热| 熟妇国产| 人人草人人看| 午夜成人AV在线| 天天色图| 99在线观看亚洲| 丁香六月五月天| 九九99在线免费在线观看视频| 日本不卡中文字幕| 99在线观看视频免费| 99精色| 亚洲色色色色色| 久久婷婷综合五月天| 五月激情啪啪啪| 婷婷天堂站| 九色视频91| 婷婷丁香人妻天天爽| 色一情一乱一乱一区91Av| 亚洲综合婷婷| www.精品99| 精品夜夜澡人妻无码AV| va亚洲中文在线| 丁香9月婷婷| 色五月五月婷婷| 五月婷婷偷拍| 色婷婷av在线观看| 伊人五月成人| 五月天婷婷綜合院| 婷婷五月天色| 这里只有精品在线看| yiqicaoav| 九九久久99精品免费观看www| 一本久道综合色婷婷五月| 99视频| 男人综合网| 婷婷日日夜夜| 97干欧美| 日韩性爱AV| 五月天 另类图片| 啪啪操操| 91久久久久久久| 国产又黄又爽又激情不遮挡视频在线观看| 免费观看高清无码| 久久综合干| 精品国产va久久久久| 香蕉AV777XXX色综合一区| 66精品成人免费网站在线观看 | 很操日本7| 大香蕉太香蕉视频97| 综合激情五月婷婷| 无码G高清天| 四色五月婷婷| 久碰视频| 色激情五月| 婷婷午夜激情| 久久丁香综合香蕉| 九九这里都是精品| 五月婷视屏在线观看| 99在线资源| 青青青在线视频国产| 天天爱夜夜爽| 狠狠干天天内射| 97人人操人人拍| 国产成人综合网| 色五月婷婷、老熟女| CAoub青青超碰| 五月婷婷中文| 久久综合人妻| AV 3P| 嫩草视频观看| 九色综合网| 五月婷婷激情| 激情婷婷五月天日本系列| 五月丁香六月成人| 天天肏天天舔AV| 国产激情综合五月久久| 舔色婷婷| 久久99免费视屏| 丁香五月香蕉| 丁香五月欧美午夜视频| 亚洲精品五月| 五月婷婷丁香啪啪| 久久久宗合| 色婷婷六月| 新97人人上人人| 激情婷婷网| 五月婷婷在线丁香| 久操干| 九九婷婷五月天| 成人午夜无码视频| 五月丁香婷婷导航视频| www.俺去也com| 丁香婷婷久久 | 91超级碰在线视频| 丁香社92视频| 国产69久久久欧美黑人A片| 五月婷婷激情久久| 美女五月狠狠| 色日本网| 色性日本| 欧美韩日AAA网站| 国产激情综合| 97人人搞| 五月天停停日日| 国内熟女黄色系列| 天天色天天操天天射| 五月丁香人妻| 色婷婷五月色| 天天色99| 亚洲丁香五月天视频| 五月丁香亚洲综合网| 这里只有精品日韩| 91精品久久久久久| 影音先锋四区| 大香av| 大香人妻| 月色色综合婷婷网| 日韩情色在线观看| 亚洲不卡123| 日韩国产在线精品| 人妻丰满精品一区二区A片| 色色a| 五月婷久久| 婷婷九月亚洲| 亚洲在线操| 久久99热免费最新版| 五月丁香狠狠| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪| 五月天婷婷影院影院| 婷婷丁香五月天综合激情| www.婷婷六月天| 思思精品视频| 97色婷婷| 欧美顶级少妇做爰HD| 亚洲五月婷婷| 婷婷五月色| 丁香五月色| 色色五月丁香婷婷| 色色五月天婷婷| 久婷五月| 丁香六月综合激情| 精品亚洲国产成AV人片传媒| 婷婷中合| Caoporn公开| 午夜激情久久| 91色吧网| 狠狠香蕉| 99这里只有精品国产| 久久国产性爱A V| 色丁香五月天射婷婷爱婷婷| 插插干干干色| www.色擼擼.com| 日本五月天一页| 99爱在线精品视频免费观看| 国产婷婷综合在线免费视频| 99碰碰| 99热网站| 欧美成人AAA片一区国产精品| 99精品视频在线观看| 香蕉久久国产AV一区二区| 综合六月久久| 婷婷五月18永久免费网站| 日本黄色在线观看| 操操操操操操婷婷五月天| 狠狠色噜噜狠狠色噜噜噜999| 蜜臀A∨在线水帘洞| 婷婷瑟五月天久久综合| 五月停停激情网| 99热这里只有精品青草| 色五月综合网| 亚洲乱码日产精品BD| 91狼友视频网页更新| 成人短视频免费| 五月天激情四射网站| 国产精品久久..4399| 另类色视频| 天天爱天天做天天爽| 天天爱夜夜爽| 丁香九月婷| 九九在线精品| 中文在线视频久9| 91热视频色网站| 天天操天天日天天爱| 人人色性网| 日本激情五月天‘| 99re这里只有精品9| 六月五月久久丁香| 五月婷婷综合在线| 国产精品涩涩涩视频网站| 丁香五月婷婷社区| 97操在线视频| 五月婷婷手机在线| 啪啪激情网| 免费观看18视频网站| AV变态另类一区二区| 亚洲成人在线免费| 五月丁香婷婷激激激综合网色播| 99精品在线观看视频| 日韩中文欧美| 激情五月综合第一页| 亚洲激情综合色站| 这里只有精品1| 深爱五月激情| 日韩精品无码AV| 中文字幕成人| 成人色五婷婷| 思思久久99热只有频精品66| 99色精品| 色六月天| 久久婷婷五月| 人人操人| 五月婷成人网| 亚洲中文字幕AV| 亚洲激情四射色| 91丨九色丨熟女|新版| 26uuu91| 中美日韩成人在线| 一本久婷婷综合| 久久综合九九| 色综合九九| 天色综合网站| 五月婷久久| 91视频五月丁香| 无码免费人妻A片AAA毛片西瓜| 六月大香蕉| 这里只有九九精品| 九九这里只有精品| 任你操精品免费| 久久性爱网站| 夜夜操狠狠操| 99热新网址| 五月丁香激情婷婷综合| 成人精品在线观看| 91精品婷婷国产综合久久| 婷婷五月成人系列| 久久精品一区二区三区四区| 欧美日韩成人在线| 亚洲综合另类| 婷婷丁香五月基地| 久久丁香五月婷婷| 久久在线视频免费观看| 看婷婷五月天网| www.婷婷| 五月天丁香欧美激情| 天天操天天操| 日韩操人| 日本精品在线噜噜噜| 五月婷婷综合在线| 免费操超碰| 深爱五月天天| 婷婷成人基地| 色色网站在线免费观看视频| 色爱五月天| 激情图片99| 丁香五月综合在线观看| 九九婷婷热| 亚洲爱爱无码婷婷色五月| 99热精品在这里| 国产操B视频| 激情六月天婷婷| 亚洲mm免费| 精品人妻久久久| AV中文在线| 婷婷五月天在线看| 日本色婷婷| 色天堂A| 亚洲va国产va天堂va综合va| 在线成人av播放| 激情五月www| 琪琪布丁香社区激情五月天| 婷婷天天综合| 超碰在线网站9| 激情五月综合六月丁香婷婷狠狠干| 99热精品中文字幕| 欧美成性色| 五月综合无码| 美女天天久久| 国色天香成人网| 99这里有精品免费| 看国产探花操逼三级片| 亚洲AV无码成人电影| 婷婷亚洲在线| 日本波多野结衣视频| 快色t v在线入口| 天天色综网| 婷婷成人综合五月| 久久日婷婷| 五月天五月天成人网亭亭成人色网站| 色色综合五月| 色色色婷婷| 大香蕉中文| 日本操碰碰| 另类专区在线观看| 久久久久9| 这里只有精9| 大地9中文在线观看免费高清| 天天在线久久综合| 99色嘟嘟精品网站| 五日激情综合| 97视频久久| 99久在线精品99re8热| 五月婷婷深深的爱| 久久精品A片777777| www开心激情网| 日本偷拍九九九| 婷婷丁香五月色| 99伊人性爱在线影院| 色婷婷久久综合| 99亚色色色| 夜精品无码A片一区二区蜜桃| 深爱五月天天| 亚洲av网址| www,久久久| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 区区久久妻| 亚洲精品又粗又大又爽A片| 六月婷婷国产| 色欲婷婷五月天丁香| 久热9| 天天 日综合| 中文字幕高清av| 色婷婷基地在线| 国产午夜成人AV在线播放| 婷婷五月天亚洲综合| 欧美操逼天堂| 99热免费| 狠狠干夜夜干| 婷婷久久欧美| 婷婷激情97| 91精品婷婷国产综合久久| 亚洲天天免费| 色444综合网| 99操| 国产资源91在线| 99精品一二三四视频| 婷婷导航| 丁香婷婷情色五月天| 五月婷婷干干干| 精品热青草| 情色五月天网站| 天天插夜夜爽| 在线观看亚洲视频影院| 国产69久久久欧美黑人A片| 美女天天爽| 五月色婷婷亚洲| 成人无码中文| 五月天婷婷色色| 国产五月天欧美色| 99热思思在线观看| 玖玖婷婷精品| 亚洲欧洲另类图片| 五月婷婷久久综合| 香蕉AV777XXX色综合一区| 操操啪| 色情成人五月天| 六月丁香激情网| 夜丁香五月婷婷| 激情网站五月| 碰超在线九色| 女人被躁到高潮嗷嗷叫小| 九九大香视频| 这里只有精品网站| 在线区区区| 91大屁股精品| 人人操9| 久久九九色| 岛国av网站| 午夜九九电影| 五月天大香蕉| 超碰人人操| 婷婷六月天国产综合| 大香蕉久久| 无人精品在线视频| 久久九精品| 婷婷成人网五月天| 性生活视频98791| 91九色 熟| 狠狠操狠狠| 激情床戏| 色婷婷久久综合久色综| www,五月天激情| 深爱五月综合网| 精品久久久999| 激情久久久久久久久久久| 丁香色情五月综合网站| 久久视频婷婷视频| 激情综合五月婷| www.婷婷,com| 91碰九色| 高清a片基地| 亚洲亚洲人成综合网络| 丁香五月伊人| 亚洲人妻av| 五月婷婷激情综合av| 九九综合久久| 婷婷五月色丁香在线看| 婷婷五月天影视网址| 六月色婷婷色| 五月丁香啪啪网| 五月天婷婷操逼视频| WWW、日本色丁香、co m| 狠狠插.com| 成人做爰A片免费看视频| 久久激情五月婷婷| 99热最新| 亚洲日日操| 中文字幕在线资源| 大香蕉婷婷五月天| 五月丁香啪啪综合| www.henhenl| 九九人人精品| 国产激情av| 夜夜久久综合网| 六月丁丁香| 99精品免费视频| 99热一区| 99无码精品| 色五月五月天色婷婷色五月| 婷婷色综合| 99视频精品在线| 激情五月天综合网| 夜夜躁婷婷AV| 五月丁香性爱| 色色色色色综合| 九九热99热| 99视频只有精品| 久久人妻视频| 农村熟妇高潮精品A片| 日欧一片内射VA在线影院| 无码少妇高潮喷水A片免费 | 婷婷伊人綜合中文字幕| 久久 这里只有精品1| 天天干-天天日| 五月成人网天天| 色五月天本日| 婷婷色片| 超碰在线91| 五月丁香激情综合| 欧美三级巜人妻互换| 色狠狠婷婷| 亚洲乱啪| 五月婷婷熟女| 六月亚洲婷婷6月中文字幕| 婷婷伊人激情婷婷| 久久这里只有欧美| 色婷另类| 99久久这里只有精品| 少妇高潮呻吟A片免费看软件| 伊久大香蕉| 欧美日韩中国| 色综合婷婷| 99成人精品六| 亚洲天码视频www蛋播视频| 久热亚洲| 伊人婷婷五月天| 潘金莲AAAAAAAAAA| 国产精品色婷婷99久久精品| 色视频2025| 五月婷六月天| 综合99久久天天综合| 成年人丁香五月| av中文网| 性爱五月丁香| 十月丁香婷婷| 丁香午夜天| www99热| 国产看真人毛片爱做A片| 77777亚洲午夜久久| 九九自拍网| 天天在线天天综合网色| 26uuu亚洲欧美日本| 色碰碰| 最近中文字幕2019视频1| 丁香六月欧美| 人人色人人摸人人看| 99热这里只有精品50| 久久久久激情网| 爱射综合| 色综合色婷色基地| 99热久只有| 激情五月婷婷丁香| 婷婷久久五月天| 久热精彩视频98| 亚洲黄色影视| 深爱婷婷丁香五月激情| 婷婷五月天堂| 日本欧美啪啪| peg 2区三区四区的| 激情99| 深爱激情网婷婷| 另类 在线| 成人无码髙潮喷水A片| 久碰婷婷视频| 色综合网综合| 五月激情影视| 五月丁香人妻| 涩涩涩婷婷| 黄网免费看| 五月丁香婷婷伊人日韩| 夜夜夜天天操| 五月婷亚洲精品| 婷婷亚洲综合| 超碰资源在线| 天天综合天天玩夜夜玩天天玩夜夜玩| 久9久9热久热| 99热最新国内| 色色色色色色色综合| 久热只有精品| 天天日天天久久青青| 九九色欲网| 丁香婷婷婷五月| 激情综合一| 丁香五月天.com| 色五月婷婷视频| 99国产在线| 欧美婷婷综合| 操逼123网| 精品激情| 久草丁香婷婷五月天婷| 玖玖精品视频99| 五月天社区| 超碰A V在线| 婷婷综合成人五月天| 综合久久97| 色综合久网| 狠狠五月激情在线| 9久视频| 波多野结衣不卡AV| 亚洲狠狠婷婷综合久久久| 久久 天天| 欧美黄色一级录像| www超碰| 五月天六月婷婷| 婷婷五月天天| 九九热这里有精品视频| 色婷婷操逼| 五月丁香亭亭AV女优| 五月四色婷婷| www久久久| jiujiu热在线视频| 亚洲不卡欧洲| www.9797国产| 深爱激情五月婷婷| 三日本无码| 天天干天天日日| 97干在线| 九月婷婷综合| 五月丁香色色网| 婷婷色中文| 免费精品99| 天天综合色99| 久久九九热视频| 玖玖婷婷免费| 秋霞三及片| 久久99最新地址| 狠狠色狠狠色综合日日91| 欧美三9久九观看| 五月丁香婷婷伊人| 婷婷五月婷婷五月| 熟女人妻视频| 色婷五月天网站| 国产亚洲成AV人片在线观黄桃 | 91中文狠狠综合| 五月丁香婷婷六月天| 超碰碰碰碰| 久久久久久久久久久久久久人妻视频 | 超碰成人黄色网| 婷婷五月天天| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 婷婷天天色| 伊人久久大香天蕉亚洲特级| 女高怪谈在线观看| 9久操| 九九久久网| 婷婷玖玖丁香| 丁五月激情视频免费| 日本一级大片| 五月丁香婷婷导航视频| 久99热在线观看| 久久综合丁香| 99亚洲精品视频在线观看| 九九这里是免费的视频5| 91人人操| 91超级碰| 色五月丁香六月资源站| 欧美在线| 综合性视频99| 人妻免费网站| 色丁香五月| 五月天伊人综合| 97碰久久| 久婷婷五月丁香在线观看| 婷婷五月成人| 狠狠草综合网| 婷婷婷婷婷婷婷婷婷婷丁香| 亚洲精品激情| 色婷婷88| 国产午夜一区二区三区| 婷婷爱综合| 9精品久久999| 五月天激情久久| 久久婷五月综合| 噜噜在线| 9久热这里只有精品视频| 99精品丰满| 婷婷六月久久综合导航| 人人摸人人| 久久五月丁香综合17C| 99热在线极品极品| 99在线资源| 丁香五月婷婷深爱综合激情| 免费黄网不卡AV| 五月婷婷六月丁香激情| 精品久热| 国产真实乱了老女人视频| 婷婷五月天精品| 超碰91在线| 亚洲精品久久久无码| www.henhengan| 人妻AV在线观看| 国产69精品久久久久999小说| 久久人妻视步| 怡红院 久久| 久久激情中文| 日本高清久| 人人干天天操五月丁香| 久久五月天丁香| 99这里只有| 婷婷综合五月色播| 午夜成人天堂久久无码日韩久久| 日本片日本片祼观看网站在线看中文版网页在线看 | 欧美噜噜久久久XXX| 久久久9久| 精品婷婷| 丁香五月天天高清在线| 色热久| 桃色五月婷婷| 超碰操网| 欧美日本一区二区三区| 中文字幕人妻在线| 艳妇野外情欲放荡HD| 日本色色网站| 久久精品在线| 国产成人AV在线播放| 香蕉久久av一区二区三区| 丁香婷婷视频在线| 色色色在线播放| 日韩三及成人AV片| 无码少妇高潮喷水A片免费| 色五月五月婷婷| 欧美天天干五月丁香| 色婷婷五月综合在线| 99精品偷自拍| 六月丁香久久| 婷婷五月天欧美图片在线播放电驴| 就是色婷婷五月亚洲色| 色婷狠狠| 国产精产国品一二三在观看 | 久久婷婷五月综合激情国产| 91精产品自偷自偷综合| 激情涩播| 日本色色色| 99精彩视频| 亚洲成人乱码av网站| www.五月婷婷久久.com| 国产三级在线播放| 风流少妇A片一区二区蜜桃 | 中文av网站| 欧美性丁香色色五月天干干| 五月四色色| 九九操操| 激情九月婷婷| 五月天六月婷| 69午夜成人影片| 丁香九月久久| 激情综合色婷婷啪啪六月天| 亚洲天堂色| 操一区| 激情综合啪啪| 五月亚洲| 伊人狠狠操| 婷婷丁香五月天综合网| 亚洲AV成人片无码网站| 日熟女| 超碰69天堂| 久久AAAA片一区二区| 久久久婷婷婷| 综合网啪啪| 可以看的av| 99热这里只有精品 搜| 97激情五月天| 日本va欧美va欧美va精品| 9999三级片| 97人人爱人人操| 一片AV片免费播放| 百度一下国产精品A| 五月婷婷激情| 亚洲成人网站在线观看| 色五月天电影| 99啪啪视频| 伊人久久婷| 26uuu日韩| 色色色色色色网站| 丁香五月婷老师| 久草xx性爱视频| 日本在线噜噜| 99色视频在线观看| 九九视频精品在线免费| 激情伊人五月婷婷久久| 激情深爱综合| 少妇日麻屄| 五月丁香日本一抹本| 伊人91| 婷婷99狠狠| 色五月成人| 操91| 亚洲人妻av| 99 r热| site:xiongshengzz.com| 色综合com| 天搞天天天天天| 91碰碰| 丁香六月婷月91婷月| 5月婷婷综合| 久久婷婷六月天| 777久久精品| 大香网伊人久久综合| 亚洲va欧美| 六月丁香五月激情亚洲AV| 99re6热在线精品视频播放速度| 另类激情五月天。| 午夜丁香| 婷婷月五天在线在线看| 婷婷五月蜜桃成人桃色丁香| 五月婷婷偷| 天天操夜夜夜拍拍拍| 亚洲精品久久久久久久久久吃药| 色五月色综合| 精品五月天| 日本人人xxx| 成人网在线视频| 久久激情视频| 久久九九热视频| 久久丁香| 这里只有精品视频在线| 国产真实乱对白精彩| 天堂久久久久天堂网| 无码字幕中文| 秋霞丝袜啪啪啪| 99自拍视频网站| 五月天色色激情综合| 丁香婷五月天| www.色五月天.com| 日本色爽| 99综合| 99热这里都是精品| 狠狠狠狠狠狠草| 超碰猛烈的性猛交| 日本69日人视频| 亚洲五月婷婷在线| 5月丁香六月情| 99热免| 丁香五月欧美成人| 激情五月综合亚洲另类| 9九九久久精品无码专区| 五月丁香九九| 丁香色婷婷| 五月天自拍视频| 人妻久久人妻久久第一区| 欧美大香蕉视频| 99亚洲精品| 色情网综合| 五月久熟女| 午夜九九电影| 九九色综合九九色| 五月婷婷激情综合网| 超碰97在线操| 日韩成人综合| 色噜噜婷婷| 天天综合天天玩夜夜玩天天玩夜夜玩 | 五月丁香啪啪伦理电影| 六月撸婷婷| 国产真实乱了老女人视频| 2021日韩无码| www.99视频| 天天爽夜夜爽夜爽精品| 婷婷丁香97| 国产毛片精品一区二区色欲黄A片 极品人妻VIDEOSSS人妻 | 色五月激情网| 九九热内射| 久碰视频| 亚洲综合色五月| 在线成人网站| 99超碰欧美| 日本婷久久| 26UUU亚洲欧美| 99亚洲视频| 国产精品99久久久久久久女警| 热久69| 色婷婷欧美| 99re热免费观看视频精品| 精品久久艹| 亚洲综合视频八| 婷婷激情小说网| 99热99热在线| 可以免费观看的av| 麻豆精品| 丁香五月综合在线| 激情九色| 99热午夜精品| 亚洲无码成人网| 精品无吗va视频免费观看| 国产精品国产成人国产三级| 婷婷丁香五月天影院| 婷婷五月激情片| 九九99免费视频| 丁香五月婷婷综合激情啪啪啪啪啪啪啪| 久热婷婷| 婷婷五月天开心网| 久久狠狠干| 99视频在线观看网址| 思思精品久久艹| 九九99精品| 色色影院黄大片| 99.色| 欧美大香蕉视频| 97操碰在线97| 五月天婷婷青青| 久久综合五月天| 婷婷激情四射五月天| 久久久五月激| 五月婷婷之综合激情| 97操碰在线视频| 婷婷射婷婷舔| 九九激情网| 久99久视频| 丁香激情五月| 国产精品成人网址| 激情五月亚洲综合网| www.久热| 九九色播五月丁香| 深爱激情丁香五月| 久久性爱网| 九九日本视频| 91人人操.COM| 伊人九九热| 婷婷激情区| 天天日日夜夜| 色婷婷综合久色AV五色最新| 五月丁香av中文| 91日综合欧美| 婷婷爱五月天人人爱| 99ree6| 激情五月天噢美| 无码激情| 香蕉狠狠爱视频| 丁香五月激情婷婷婷婷在线观看| 黄色av网站在线免费播放| 六月色五月天天婷婷| 亚洲中文字幕网| 伊人网欧美在线男人天堂五月丁香| 超碰com| 超碰国产在线观看| 激情五月天com| 丁香社92视频| 综合五月激情网| 激情综合视频| 亚洲婷婷丁香五月视频| 色色国产| www.精品99| 激情99| 天天射夜夜爽| 五月丁香六月婷| 丁香婷婷五月激情综合| 97操碰在线视频| 日本WWW九九九| 思思热在线| www.婷婷.com| 天天做天天爱天天爽| 五月婷婷综合影院| 日本天天操| 大香蕉欧美在线| 日日干日日| 欧美色色色色色色色色色色| 99视频这里有精品| 99热99操| 婷婷97碰碰| 六月久久婷婷| 色射影院| 天搞天天天天天| 激情九月综合| 九九精品自拍| 亚洲色在线观看| 激情五月天婷婷久久久久久久久久久| 99热6精品| 国产永久一二一起草| 96精品成人无码A片观看金桔| 天天插天天草人人玩| 婷婷中合| 五月婷婷五月天激情网| 丁香五月激情综合婷综| 五月天淫乱视频| 久久资源网五月婷| 开心五月天激情网| 天天色综合色色色色色。| 日本欧美成人片AAAA| 欧美激情综合色综合色| 九色视频九色九色91jiuseshipin| 色操b| 狠狠色丁香久久婷婷综合五月| 久操大| 玖热精品综合视频| 色婷婷成人做爰A片免费看网站| 深爱五月天天| 最近中文字幕2019视频1| 亚洲综合丁香五月天| 色噜噜五月天| 99热这里只有精品1| 热这里只有精| 懂色av粉嫩AV蜜臀AV| 这里只有精品无码| 日韩成人电影在线播放| 96丁香六月婷婷蜜桃综合久久| 丁香花五月天| 欧美日韩日韩成人| 日本一级一片免费视频| 欧美激情五月天婷婷| 九月丁香八月婷婷加勒比| 26uuu另类亚洲欧美日本一| 五月天久久成人| 综合狠久久| 综合五月丁香六月婷婷| 国产44页| 午夜丁香婷婷| 九九热手机在线视频| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 天天拍夜夜爽| 五月天停停日日| 五月丁香影视| 人人人人人人人草| 亚洲婷婷五月| 九九激情网| 深爱婷婷丁香五月激情| 91人操| 久久怡红院| www.狠狠艹| 五月婷婷综合激情| 欧洲MV日韩MV国产| 亚洲人成色A777777在线观看| 伍月婷丁香婷| 在线观看免费视频| 婷婷色五天| 99综合婷婷五月| 97碰成超视频免费视频| 俺去也五月天婷婷| 99热这里只有的精品视| 玖玖综合网| 激情五月天婷婷播播久久综合91| 成人va在线播放| 99精品色色| 欧美WW在线网| 婷婷五月天影院| 少妇激情五月天| 精品无码av丁香五月激情| 秋霞av不能| 超碰大香蕉网| 五月天黄色激情小说| AV电影在线播放| 人妻有码乱操| 九九香蕉网| 日日夜夜婷婷| 99热思思在线观看| 色色九九五月天 | 9久久久久久久久久久| 天天色爽| 欧美人人女女精品综合五月天| 双性美人被调教到喷水A片| 亚洲色图五月丁香| 丁香五月婷婷色| 亚洲 成人 电影av在线观看| 久热婷婷| 五月丁香久人妻中文| 五月婷婷黄色视频| 99色激| 久久亚洲无码| 婷婷欠久少妇| 久久9视频| 橾逼网| 六月天无码网址| 欧美一级色| 色丁香五月婷婷综合久久| 国产毛片欧美毛片久久久| 99在线视频播放| 丁香 婷婷 亚洲 熟女| 色色精品色| 五月激情射| 北条麻妃伊人 | 丁香五月天婷婷久久| 日韩成人综合网| 激情网色五月| 97超碰免费超级在线观看| 日本色五月| 色五月婷婷操逼| 天天操夜夜爽歪歪| 手机AVAV天堂看网|