欧美成人午夜精品久久久,国产?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
返回資訊列表
五月天色婷婷综合| 欧美操人| 欧美在线视频99| 五月激情小说| 五月天丁香| 色色色色色色色色五月先| 色综合婷婷| 五月丁香久久呀| 婷婷五月丁香人妻无码高清| 五月天综合网| www.超碰在线| 婷婷天天色| 一起草Av| 婷婷激情小说| 婷婷五月六月| 五月丁香婷中文字幕| 色婷婷在线视频观看| 五月婷婷色情| 超碰人人超碰| 亚洲综合色色色| 91久久久久久久久18| 人妻丰满精品一区二区A片| 天天摸天天做天天爱天天爽| 五月天婷a| 久久五月天视频| 免费无码毛片一区二区A片| 五月丁香天堂网| 久久久这里都是精品| 国产91在线视频| 色播播五月天| 亚洲精品操一操、噜一噜、摸一摸、爽 | 九九re精品视频在线观看| 日本色噜| 99婷婷五月天| 五月亭亭六月色| 丁香五月天激情四射网络不好| www.激情五月| www色五月| 开心五月网 | 五月丁香无码| 色综合久久88色综合天天99| 六月久久婷婷| PORNY九色9l自拍视频成人| 九九热视频免费观看| 亚洲综合五月天| 色色色综合| 丁香婷婷色五月天| 深爱婷婷色| 99小视频在线| 丁香六月天婷婷在线| 视频一二区| 精品欧美一区二区三区久久久| AV大香蕉| 日日夜夜干| www色婷婷| 色欲午夜无码久久久久久张津瑜| 日本在线视频播放91| 五月婷婷六月婷| 成人短视频在线| 亚洲 视频 导航 一区| 五月天大香蕉婷| 婷婷日日夜夜| 天天干天天操天天爽| 激情五月,深深爱五月| 狠狠操天天操综合| 五月激情久久综合网| 国产日日夜夜操| 色国产五月| 激情五月深爱五月| www.五月天。com| anquye伊人| 婷婷色五月亚洲| 99精品这里只有免费视频| 大香蕉手机视频| 亚洲精品成人| 色久免费| 狠狠爱五月婷婷| 五月婷中文字幕| 99思思在线视频| eeuss人妻| 亚洲一个色| 99热九九这里只有精品10| 色99亚洲| 人妻久久人妻久久第一区| 综合99视频| 欧美日朝成人| 操逼综合激情网| 色婷婷五月影院| 久久男人网婷婷| 超碰在线观看caop| 久热久色| 天天插天天插天天插天天插 | 无码橾| 日韩在线观看亚洲| 一根材五月婷成人| 亚洲综合另类| 五月天婷婷在线观看精品男人| www,欧美干干干干干干| 99.N在线视频| 欧美顶级少妇做爰HD| 国产一级黄色影片,| 亚洲av网址| 色伊人婷婷| 婷婷 久综合| 欧美综合五月丁香五月天| 精品免费99| 影音先锋一区| 99热在线爱| 淫视馆aV二区一区| 婷婷激情六月视频| 久久婷婷九月国产精品| 伊人五月天综合网| 色一情一乱一乱一区91Av| 另类综合激情| 久久婷五月天| 五月天婷综合| 国产五月天欧美色| 亚洲性爱AV在线| 免费播放片大片| 五月激情丁香五月宗合| 激情五月婷婷综合| 婷婷涩涩五月天| 婷婷激情六月综合| 大香网伊人久久综合| 在线超碰精品| 日日爱699| av网址在线| 亚洲精品国产A久久久久久| 久久婷婷东京热| 五月亭亭激情综合| 久久久99精品| 色综合色色| 色亭亭九月| 综合玖玖偷拍| 99性色| 日本欧美成人片AAAA| 狠狠色丁香久久| 五月婷婷之六月丁香| 色婷婷导航| 久热爱大香蕉在线蜜臀悦色| 亚洲人人操BD| 亚洲亚洲人成综合网络| 操国产人妻| 久久WW| 九色在线五月婷婷网址| 亚洲瑟瑟精品在线| 久久久天堂国产精品女人| 99久久精彩视频。| 成人性爱精品视频| 骚逼视频一区2区| 五月丁香亚洲校园欧美| 日日操天天操| 任我肏| 久久久久久丁香五月| 91色久| 婷婷五月色| 97色啪| 色婷婷香蕉丁丁网| 色婷婷天堂| 婷婷va| 婷婷五月激情六月| 97碰碰在线看视频免费| 玖玖热视频| 天天操中文字幕| 久久99网| 国产在线中文字幕| 亚洲AV成人无码久久精品老人法拉利| 日韩99无码| 午夜婷婷丁香| 国产古装妇女野外A片| 思思99热在线| 热99色| 亚洲久久婷婷丁香五月天| 五月丁香婷婷色| 丁香六月婷婷综合激情欧美| 日本一级黄色片。| 日本操逼九九九九58日本操逼| 91色综合久久| 色色色在线观看| 久久99看免费| 色婷婷久久综合中文久久一本| 99热这里是精品| 色婷婷综合网站| 秋霞三级影视资源| 九九这里都是精品| 99ri国产| 欧美激情综合五月色丁香| 日日噜狠狠色综合久久| 欧美婷婷九月| 俺去也婷婷| 99久热这里有精品| 99啊精典免费视频| 久/久精品99看9| 亚洲精品乱码久久久久久按摩观| 中文字幕综合色| 日婷婷| 五月综合丁香婷婷| 日逼AV影音先锋男人资源站| www.99日本| 天天做天天爱天天爽夜夜揉| 国产69久久久欧美黑人A片| 婷婷五月天电影区小说区| 婷婷五月网图片区| 另类综合婷婷五月天欧美视频| 九九热99久久99| 婷婷丁香在线播放| 久久久思思热| 成人在线视频一区| 欧美日韩成卜| 香蕉综合网| 六月米奇色综合| 超碰在线资源| 激情小说婷婷| 天堂网啪啪| 狠狠五月激情在线| 碰97久久| 色级婷婷| 五月天婷久久| 99热精品观看| 五月丁香亚洲综合| 婷婷五月激情丁香激情| 色五月天堂| 五月激情婷婷六月| 丁香六月高清视频| 99热久| 婷婷情色五月| 午夜精品久久久久久久爽| 天天插天天插天天插天天插| 五月天色婷婷图片| 亭亭五月丁香综合欧美| 婷婷五月丁香花综合| 三级片AAA久久久AAA久久久AAA| 97九色视频| 六月色国内综合| 婷婷六月色| 国产原创视频91九色| 爱婷婷都市激情| 天天操天天操| 人人干天天舔| 天天拍夜夜撸| 性爱AV天堂| 五月婷婷狠狠久久| 丁香五月激情五月色综合| 久操婷婷| 亚洲综合九九| 婷婷伊人网| 综合久久五月天| 这里只精品| 婷婷伊人网| 五月激情综合性爱| 91嫩草久久| 久久人人添人人爽添人人片αV | 国内精品99| 久青草影院| 欧美色99| 久久久WWW| 一丁香五月天月AV| 久久伦乱| 99热老网站| 五月色丁香| 婷婷五月天亚洲激情戏精品| 婷婷在线操| 思思热闹这里只有精品| 激情深爱婷婷网| 九九九九国产| 丁香综合伊人| 婷婷色九月| 最新av在线观看| 五月婷婷 婷婷五月 一区二区 久久久| 亚洲V国产V欧美V久久久久久| 5月婷婷激情6月| 深爱五月月天| 五月天成人在线视频丁香| 在线视频色五月| 欧洲激情网站| 婷婷成人小说综合| 九九成人| 操骚货在线| 激情AV在线| 99色在线视频| 久久只有18视频| 俺去也五月天婷婷| 激情内射人妻1区2区3区| 久久久久人妻| 色色色色色日韩午夜激情| 成人va在线| 在线看av| 五月天天天综合| www.激情在线| 精品久久久人妻| 五月丁香婷婷成人综合网| 天天操天天操天天操天天操天天操天天操| 成人视频在线免费播放| 激情丁香五月天| 婷婷亚洲天堂| 九九Y精品热播| 91chinese在线| 五月丁香色婷婷| 98国产精品综合一区二区三区| 色婷婷丁香花五月天| 丁香五月激情五月色综合| 99ri国产精品| 色五月av伊人| 97人人操| 国外亚洲成AV人片在线观看| 成 人片 黄 色 大 片| 99色综合久久| 激情综合5| 都市激情小说婷婷| 精品人妻一区二区三区四区不卡在| 五月综合激情网| 国产麻豆视频| 欧亚洲在线高清视频| 五月色 亚洲| 亚洲色五月天| 国产亚洲精品久久久久久久久动漫| 九热视频在线伦| 五月丁香好婷婷A片网| 色日本丁香婷婷| 婷婷免费无视频| 五月天激情小说网| 九一娱乐在线观看视频| 五五月丁香花激情综合网| 99热99热不卡| 久久er99热精品一区二区| 啪啪啪丁香五月| 五月天激情四射| 亚洲五月天天| 中文字幕在线免费观看视频| 91日婷婷在线| 人人色AV| 国产91视频| 97成人丁香| 婷婷激情五月综合| 人人摸人人干| 五月婷婷性爱视频| 婷婷丁香五月天亚洲| 超碰99在线观看| 青青草网武则天| 成人婷婷桔色| 婷婷爱五月| 久9精品| 激情综合五月激情XXXX| 天天摸天天肏| 91超级碰在线| www色五月| 97色婷婷| 色婷綜合网| 久久这里只有精品热在99| 伊人九九综合| 战争与艾拉电影免费观看| 激情六月天| 2017狠狠干| 国产婷婷色综合AV蜜臀AV| 狠狠综合网| 91超级碰人人操| www.操逼comm| 国产肥白大熟妇BBBB视频| 91偷拍视频| 99无码视频| 五月深情久久| 日本欧美成人片AAAA| 久久91久久精品久久| 精品99久久久久成人网站免费| 色吧五月婷婷| 天天做天天爱高潮片| 九色七七| 亚洲网视屏| 五月色色激情网| 国产99久| 五月天婷婷爱| 色婷婷啪啪啪啪啪啪| 国产26uuu| 婷婷五月六| 4399无码视频二区| 五月在线| 久草丁香婷婷五月天婷| 激情久久五月天| 极品色丁香| 99日本精品视频热| 丁香婷婷五月天亚洲| 五月丁香啪啪| 色碰干| 五月丁香婷婷久久| 色色综合日韩| 久草x色在线观看99| 人人操人av| 丁香五月天激情四射网络不好| 六月丁香久久| 粉嫩av懂色av蜜臀av熟妇| 激情九月婷婷| 色五月婷婷少妇人妻| 欧美色综合天天久久综合精品| 丁香五月天婷婷久久综合| 99riAv1国产在线观看| 99亚洲视频| 天天爽人人综合免费7799| 色九网| 97色婷| 日韩久久这里只有精品| 婷婷五月天黄色网址| www久久久久久久97| 99热成人永久免费| 沈娜娜av| 久久久久人妻网址| 99这里只有免费的精品| 国外亚洲成AV人片在线观看| 色婷婷亚洲六月婷婷中文字幕| 欧美日韩成人在线观看| 国产精品第一国产精品| 五月丁香六月婷婷国产视频| 99成人网一区| 97自拍视频网| 婷婷五月天小说| 丁香五月婷婷俺也要去| 四色永久成人网站| 婷婷五月成人社区| 99久久99久久综合| 99啪99| 婷婷久久夜| A片试看120分钟做受图片| 丁香六月欧美| 中文不卡一二三区| 97综合在线| www免费在线视频| 91人操人人人操人| 日日日影院| 丁香五月中文字幕| 五月婷婷国产| 久久5 9视频免费观看| 色天堂A| 日韩按摩二区| 深爱五月激情综合| 久热99狠| 欧美三级A做爰在线观看| 色婷婷五月天久久| 99er6热在线观看精品6| 色五月婷婷成人视频| 9久久网| 国色天香成人网| 色婷婷激情四射视频| 人妻videos人妻高清| 激情综合区| 三区激情四射av| 久久一级AV| 97操碰| 五月丁香综合激情| 婷婷五月天综合中文| 91婷婷色五月| 97色在线观看视频| enecarbon-materials.com污K127封锁请涟系@wip1688 | 综合性爱网| 高清免费在线视频| 丁香五月影| 狠狠色噜噜狠狠狠888| 人人操av| 亚洲婷婷欧美婷婷| 天天综合网在线| 99热这里有精品24| 狠狠色狠狠色综合日日91| 日本熟女视频一区二区| 噜噜噜噜噜久| 国产VA播放| 亚洲综合视频网| www.一起草av| 日逼影音先锋AV男人资源站| 婷婷综合久久综合| www.亚洲激情.com| 久热re在线视频| 97成人丁香| 91人人人人人人人| 婷婷色五月天色色| 中文毛片无遮挡高潮免费| 26UUU精品一区二区| 国产免费AV网站| 99人人操人人操人人精| 玖玖婷婷色五月| 婷婷五月在线| 日本久久人| 影音先锋毛片网站| 久久久久9999| 六月婷婷之青青草| 亚洲五月婷天天操| 情婷婷五月天在线| 开心五月婷婷99| 99热这里只有精品热| 久色姿源| 激情五月天色婷婷| 亚洲激情五月天| 夜夜撸日日操| 综合网亚洲| av在线资源| 丰满女老板BD高清A片| 狠狠精品干练久久久无码中文字幕 | 99爱在线| 激情久久久久久久久久久| 91视频五月丁香| 97操操操| 色婷久久| 久草 tingting| 久久9999| 久久er+| 丁香五月av在线| 激情综合色婷婷六月天| 超碰大香蕉网| 精品亚洲国产成AV人片传媒| 激情图片婷婷丁香五月| 色天使色婷婷| 久久久er热| 这里只有免费的精品| 激情5月婷婷| 欧美 日韩 成人 在线| 99无码精品| 免看黄大片AA | 丁香天堂夜| 伊人网欧美在线男人天堂五月丁香 | 深爱激情中文五月天av| 久久视频九九视频| 久99视频| 色约约视频一区二区三区四区五区| 国内久久亭亭| 激情婷婷五月天伊人在线观看| 五月色网| 99热精品在线观看| 玖玖综合色| 欧美人与性动交CCOO| 色色色色色日韩午夜激情| 99久久www| 九九精品在线视频观看| 99免费在线| 激情爱爱网站超大免费| 不卡在线视频| 五月五婷婷网| 亚洲人人操| 成人片黄网站色大片免费毛片| 色色色色色综合| ss五月天激情| 日韩婷婷| 国产免费性爱| WWW·天天操·视频?| 激情五月深爱婷婷| 在线看的免费网站| 色色婷婷五月| 色欧美影院| 91 影音先锋| 精品婷婷| 成人版视频在线观看| 久久久国产精品黄毛片| 99在线观看视频免费| 丁香六月婷婷综合缴| 亚洲经典三级| 五月丁香 六月婷婷a| www.9797国产| 综合精品啪啪| 99日韩网站| 伊人9999| 午夜成人AV在线| 天综合日日夜综合7799| 五月婷婷丁香色吧网| 超碰狠狠操| 欧美色九| 五月天综合在线| 久久天堂女人| 五月丁香六月婷婷在线| 超碰2021| 九九免费精品| 潮汕成人AV片在线| 激情综合色婷婷啪啪六月天| 色五月在线观看| 91色噜噜狠狠狠狠色综合| 色五月婷婷激情| 久久99最新地址| 五月婷婷久久激情 | 99久久久精品| 草逼大片| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 激情婷婷丁香| www.狠狠操.com| 99色在线| 久久中文人妻系列| 操91| 九九热在线视频,| 99精品偷自拍| 日亚二欧美| 日日操夜夜爽| 狼人狠狠操| 九色91视频| 色婷婷免费观看| 直接看的AV| 婷婷丁香成人五月天| 99爱在线视频| 久99久视频| 第五色婷婷| www.激情在线| 色婷婷五月综合激情中文字幕| 少妇人妻凹凸视频| 激情综合网色五月| 91丨九色丨东北熟女| 亚洲VA欧美VA| www.金莲av| 777色色色| 人妻aV在线| 99精品久久| 欧美精品久久久久久视频观看| 久久只有18视频| 激情五月丁香综合蜜桃| 97午夜一区二区| 久久性爱视频网站| 欧美欧盟性爱网| 九九热AV| 婷激情五月| 九九99热精品| 日本综合色色| 求可以看的AV网址| 婷婷五月,偷窥偷拍网| 在线播放中文字幕| 丁香婷婷伊人| 久9久9久9久9久9久9| 97色色网| 久久精品66| 日韩精品成人在线| 国产精品久久久久久久久久| 丁香婷婷视频| 天天综合色丁香| 99久久欧美| 色综合久久99色| 激情综合网婷婷久久| 婷婷综合在线视频| 色婷婷狠狠| 99热激情| 五月丁香综合久久| 精品夜夜澡人妻无码AV| 97影院一级片| 亚州性爱99| 另类视频一区| 2025神马午夜福利| 欧美性爱五月天| av性爱在线| 婷婷成人综合| www.99热在线| 日本三级第一页| 中文字幕不卡+婷婷五月| 亚州日本欧州韩美高青高潮一| 人人性久久| j五月香在线| 婷婷丁香水多多视频| 久久成人亚洲欧美电影| www.狠狠| 草综合14| 五月婷婷欲色| 亚洲综合新99视频| 9久视频| 超喷97免费在线视频| 婷婷丁香熟妇综合网| 五月永久激情| 五月丁香久久网| 婷婷激情在线| 国产一区18| 成人国产网| 伊人色综合网| 激情五月天网| 九九热99热| 婷婷夜夜操| 久久婷婷婷婷伊人| 婷婷丁香水多多视频| 五月丁香综合啪啪| 538任你爽| 人人干女人| 日韩欧美性爱| avh片在线观看| 亚洲精品又粗又大又爽A片| 99这里只有精品视频| 啪啪激情网| 天天射影院| 色婷婷久久综合中文久久一本| 六月亚洲| 五月欧美色色五月| 婷婷五月天直播| 天天插天天插天天日| 婷婷亚洲日本| 欧美婷婷六月丁香综合色| 操操国产| 丁香五月色情| 久久婷婷激情五月天一区二区| 99久久99九九99九九九| 激情五月婷婷综合| 欧美婷婷六月丁香综合色| 婷婷成人综合| 久久杏爱视频| 99热这里只有精品69| 99色这里| 密乳视频| www.五月天激情| 俺去也五月| EEUSS鲁片一区二区三区| 99∨VTV| 天天人人人人人人人人人人人| 超碰在线超碰| 久久这里都是精品| 国产又黄又爽又色的免费| 日本乱子人伦在线视频| 色色图五月天| 97操碰碰无码视频| Av狠狠色丁香婷| 婷婷激情六月中文| 久久五月激情网| 久久开心五月婷婷| 五月丁香综合激情| 热99在线| 9视频在线成人网站| 在线不卡的视频| 99久久97久久欧美综合网| 99久久精品国产色欲| 日本三级黄色大片| 337p午夜影院| 思思热视频| 涩婷婷五月天| 色五月丁香一区在线| 丁香婷婷十月| 婷婷五月综激情| www.色9| 久99| av操一操| 久久aaa| 激情六月综合| 九九无码| 夫妻超碰在线| 99爱99操| 互月天综合| 婷婷久久五月天丁香| 狠狠色丁香| 大香蕉娱乐| 丁香五月综合高清在线| 婷婷五月丁香网| 久久婷婷精品| 丁香五月色色婷| 日本老女人黄页在线播放| 青青草日本亚洲| 日韩性视频| 婷婷综合五月| 91热视频色网站| 99热在线中文字幕| 亚洲精品国产成人AV在线| 久久婷婷五月天大香蕉| 日本三级中国三级99人妇网站| 最新日本A片| 婷婷色五月在线视频| 综合久久婷婷| 婷婷情色五月天| 五月亭亭综合五码| 91丨九色丨大屁股| 91要啪| 深爱激情网五月天| 欧美日韩中文国产一区发布| 中文AV在线播放| 丁香五月天的网址。| 五月综合色| 庭庭久久内射| 久狠狠狠| 久久久久久9热不雅视频| 老司机午夜福利视频金瓶梅| 99热青青草| 冬月かえでAV无码播放| 99热这是里只有精品| 婷婷射图| 久re热视频| 2025天天操| 极品少妇XXXX精品少妇偷拍| www.99视频| 久久hd| 欧美激情久| 色五月丁香伊人| 国产亚洲精品久久久久久久久动漫 | 婷婷丁香红五月91C| 五月婷婷中字在线| 亚洲婷婷久久综合| av第一二区| 丁香五月婷老师| 91久女| 丁香五月婷婷激情视频播放| 欧美成人精品三区综合A片| www.久久久久久久久久久| 狠狠干五月丁香综合网| 日本eVa一区=区视频| 丁香婷婷激情五月色| 天天草天天爽| 五月婷精品| 丁香九九九九| 成人 在线 日韩| 9色视频在线| 久久人操| 五月婷婷在线视频| 久99在线视频| 色色色色综合网| 嫩模aV在线| 午夜一区| 丁香丁香激情网| 婷婷色在线| 五月婷婷色综图片| 日韩国产在线精品| 狠狠色综合五月| 丁香社92视频| 激情五月婷黄版| 国产99久9在线| 午夜爱爱网站| AA丁香综合激情| 丁香六月激情综合| 久草五月天电影网| 久草九一| 六月份天丁香婷婷| aa久久| 色99视频| 狠狠五月天婷婷激情网。| 日本不卡一区二区三区| 激情久久四色| 91大操| 婷婷五月色激情欧美激情| 九月影院義母在线播放| 婷香五月激情视频| 九九视频免费| 激情综合色婷婷啪啪五月天| 夜夜骑夜夜撸| 日韩成人AV在线| 久久xxxx| 五月五丁香婷婷| 成人一区在线观看| 九九亚洲视频| 亚洲操逼片| 性色做爰片在线观看WW| 五月天精品视频| 亚洲综合视频网| 97久久草草超级碰碰碰| 激情五月综合视频| 97ai婷婷| 99在线观看精品视频| 婷婷五月中文字幕国产| 色婷视频| 天天狠狠夜夜狠狠2023| 五月丁香啪啪| 丁香六月综合| 99久在线精品99re8热| 日本va欧美va欧美va精品| 精品久久久久成人码免费动漫 | 久久婷婷久久| 六月婷伊人| 婷婷99狠狠躁天天躁中文| 五月婷中文字幕| 婷婷五月天色网久| 影音先锋四区| 激情综合视频| 五月婷婷之综合激情| 国内裸舞二区| 五月99久久| 国产在线aaa片一区二区99| 天天色99| 天天插天天狠| 色玖玖玖| 五月丁香久久综合91| 99精品在线| 丁香五月AV综合激情| 91人操| 国产91在线视频| 丁香六月综合激情| 国产精品视频免费看| 六月狠狠综合| 777久久精品| 丁香五月手机在线| 玖玖九九9999在线观看视频精品| 九九成人视频| 99热国产精品| 色99视频| 婷婷日日夜夜| 五月丁香在线偷拍视频| 久久99免费视屏| 婷婷久久免费| 1024在线视频| 欧美婷婷丁香社区在线播放| 亚洲超碰在线| AV在线资源| 亚洲一区二区无遮挡A片| 狠狠色噜噜狠狠| 很操日本7| 五月天另类小说亚洲| 国产婷婷婷| 五月丁香影视| 日本九九九九| 丁香五月激情综合| 狠狠草狠狠草| 丁香五月天堂网| 九九热10| 九九99精品视频| 国内外色色色色色成人视频| 激情五月综合色婷婷| 激情综合五月激情17| 九九热在线99| 黄色91在线观看| 日韩aaaaa| 久久狠狠干| 婷婷久久综合久| AV在线观看网站| EEUSS鲁片一区二区三区| 国产在这里只有精品| 丁香六月婷婷激情| 99在线精品免费视频| 99在线亚洲| 天天插AV丝袜中| 激情婷婷五月社区| 四月丁香五月婷婷久久| www.思思99热| 激情综合色| 久久小片| 99精品无码| 欧美啪啪9| 色婷婷狠狠18禁| 婷婷五月色| 久久婷婷五月天激情四射| 色色色地址| 二色av| 伊人久久大香网| 在线综合网| 能看的AV| www.狠狠操| 久久黄色片| 久久免费干| 丁香激情五月| 天天看A片| 秋霞三级影视资源| 婷婷开心激情综合五月天| 五月开行婷婷色五月| 欧美性丁香色色五月天| 激情五月婷婷老师| 丁香五月婷婷欧美成人色图| 国产午夜一区二区三区| 五月丁香六月色| 99re8在这里只有精品| 色色99| 免费观看高清无码| 欧美综合五月丁香六月婷| 九九热这里只有精品23| 天天橾日日橾夜夜橾17| 天天爽天天摸天天爱| 丁香五月亚综合图片| 香蕉国产2013| 丁香激情五月| 91大神在线免费看视频全集男男一起操| 亚洲黄3级片网站欧美| 色五月婷婷婷婷婷婷婷婷婷婷| WwW天天干| 这里只有精品视频在线| 五月天婷婷丁香| 碰碰碰97国产| 九九热啪啪| 激情视频婷婷五月花| 岛国av电影网站| 涩综合网| 日韩ww| 综合视频久久| 狠狠操天天日| 99re视频在线播放| 秋霞少妇AV网站| 9久久久久久久久久久| 丁香综合婷婷开心激情网| 色色色色色色97| 五月天久久91| 国产这里只有精品| 超碰99热精品| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | AV在线收看| 久久婷婷色| 天天日天天干天天天| 99热免费| 狠狠色大香蕉| 99热乎| 色爱99| 久久精品五月天| 99视频只有精品| 91精品无码久久久久久五月天| 婷婷丁香五月综合| 亚洲天天| 极品人妻VIDEOSSS人妻| 97亚洲婷婷| 五月天激情社区| 激情小说五月天| 中文字幕人成乱码在线观看| 婷婷综合视频| 婷婷五月天黄色小说| 韩国真做片在线观看| 7超碰自拍| 欧美丁香婷婷五月天| 国产在线中文字幕| 欧美久人人| 97好吊操| 国产在线aaa片一区二区99| 色综合久久久久| 丁香激情五月| 变天就操逼婷婷五月| 婷婷的激情五月| 丁香五月区| 久久婷婷六月综合综合| 色999;丁香五月| 国产精自产拍久久久久久蜜| 9|人妻人人操| 丁香五月日本| 亚洲激情网| 丁香六月婷婷久久高清| 五月天激情久久| 色域五月丁香| 99精品视频偷拍| 天天人人人人人人人人人人人| 99精品丰满| 99色看| 久久婷婷综合五月天| 99视频极品在线香蕉| 97婷婷丁香五月| 国产FREESEXVIDEOS性中国| 5月婷婷综合| 婷婷的久久网站| 五月激情综合婷婷| 五月婷婷激情四月| 五月婷婷亚洲天堂97色婷婷| 激情五月五月五月婷婷| 五月色亚洲| 99视频久久免费视频| 91性高潮久久久久久久久| 天堂婷婷五月在线| 五月丁香婷婷综合| 五月天激情网图片 - 百度| 色综合色色| 激情五月综合免费| 国产精品色情AAAAA片软件| 婷婷五月天伦理| 色婷婷六月| 五月天色裸体视频| 九九热视频99| 91色色色| 色播五月天激情| 啪啪丁香五月| 丁香五月综合| 六月丁香婷婷色狠狠久久| 99色色色色| 99亚洲精美视频在线观看| 久久婷狠狠色| 国产片天天爽夜夜爽| 五月激情在线| 色色色色色色综合| 日本操B视频| 婷婷五月天啪啪| 4399伦理午夜| se99视频| 色丁香综合影院| 婷婷香蕉香| http://www.sd-xiangsu.com/| 五月天久草| 黄色五月婷婷| 久99在线视频| 婷婷五月天av| 日韩人妻操逼视频| www.com久久久久久久久久久久久久久久久| 开心五月色婷婷综合开心网| 久久人妻精品| 五月香六月婷| 超级碰碰91| 91狠狠综合久久久| 99热只有这里才是精品| 狠狠干五月| 五月丁香六月婷婷成人电影| 色婷另类| 五月色综合| 日夜夜天天| 五月婷婷导航| 五月婷婷激情网| 五月丁香中文字幕| 激情五月婷婷色综合| 99久在线视频| 激情久久五月网| 亚洲色夜| 99精彩视频| 精品人妻久久久久| 99熟女| 国产在线网址1| 99九九视频| 成人中文字幕在线| 久久久久人妻精品| 伊人五月天在线| 中文字幕丰满乱孑伦无码专区 | 超碰国产在线| 色婷婷色和| 亚洲五月婷| 激情综合五| 五月婷婷视频啪啪美女| 五月丁香婷婷婷激情爱爱| 最近中文字幕在线中文视频| 日本色婷婷| 深爱激情五月天婷婷网| 九九操操| 9色免费网| 九九综合久久| 久久婷婷成人视频| 夜色综合网| 91seAV| 粉嫩AV久久一区二区三区| 九九99免费理论| 激情婷婷五月天日本系列| 亚州激情在线视频| 91色噜噜狠狠狠狠色综合| 在线日本www| 国产精品18久久久| 噜噜五月天综合| 久久99热这里只频精品6学生| 五月丁香| 婷婷无码视频| 婷婷爱五月| 日韩性爱无码| 1024操逼| 成熟妇人A片免费看网站| 久久98| 黄色三级日本| 五月丁香啪| 色五月婷婷亚洲| 亚洲一区二区无码蜜乳av| 99热久久这里只有精品| 狠狠色综合网| 婷婷激情综合| 欧美性爱一区| 婷婷五月精品中文字幕| 婷婷五月在线| 日日操无码| a性生活久久无| 婷婷伊人五月天| 日韩精品AV一区二区三区| 婷婷性爱网| 九九九九综合| 久久总和99| 五月天丁香网站| 久久视频婷婷| 亚洲六月色婷婷| 婷婷五月天av| 五月丁香人妻| 先锋影音男人的天堂AV| 久久综合99综合| 婷婷五月综合激情| 99啪啪| 伊人在线视频| 综合激情五月天| www色色com| 婷婷午夜天| 婷婷丁香五月亚洲17cao| 五月天激情久久| 婷婷五月大香蕉| 亚洲va欧美va天堂v国产综合| 激情六月天婷婷| 狠狠做婷婷| 天天操婷婷| 婷婷六月色| 99激情在线| 超碰在线看| 99这里有精品| 青草视频在线播放| 婷婷色综合中心站| 青草青草久9视频在线视频| 九月丁香八月婷婷久久综合久97| 欧美WW在线网| 丁香婷婷黄网站| 五月激情丁香五月| w婷婷五月婷婷w| www.亭亭五月天| 99九九视频| 色情综合网| 丰满人妻妇伦又伦精品国产 | 成人电影一区| 一本大道熟女人妻中文字幕在线| 免费视频在线观看的网站| 先锋影音男人的天堂AV| 美欧成人视频| 秋霞免费三级片| 婷婷激情五月天色| 国产26uuu| av久热| 老师的粉嫩小又紧水又多A片视频| 狠狠婷婷色| 免费播放片大片| 五月开心婷婷极品激情| 噜噜噜色噜噜| 精品丁香五月天在线播放| 26uuu精品一区二区| 538在线精品| 成人资源在线| 婷婷五月天激情四射五月天激情| 婷婷五月天激情AV影院| 99热亚洲| 伊人无码高清| 涩 五月 婷婷 狠狠| 国产亚洲精品人人| 五月天社区狠狠| 五月婷婷六月丁香| 色五月丁香A欧美com| 狼友视频在线观看18| 婷婷五月天成人网| 久久久五月四色| 五月天色婷婷综合| 香港九九六区八区99| 异能之下短剧免费观看全集| 99色热视频| 99热最新| 91综合视频丁香| 婷婷五月色播网| 26uuu欧美宗合| 五月天开心网| www.99免费视频| 69午夜成人影片| 色色色婷| 亚洲成人AV一区在线观看| 婷婷四月 成人 狠狠干| 亚洲五月花| 亚洲日韩一页精品发布| 五月丁香自拍| 国产成人+亚洲+欧洲| 狠狠色噜噜狠狠狠狠综合| 人人叉久| 六月婷婷狠狠色在线观看| 亚洲AV人人操| 激情婷婷在线| 五月色丁香婷婷中文字幕| 亚洲午夜AV| 久久九九一區| 99re熱| 丁香六月婷婷综合啪啪| 五月天色不卡| 蜜乳久AV| 最新日本A片| 婷婷的99视频网站| 超级碰 久久9| 五月天婷婷深深爱| 99爱爱| 亚洲精品中文字幕成人片| 色五月成人在线| 超碰免费在线| 亚洲成人网无码| 久久 婷婷 五月天| 欧美婷婷丁香五月| 五月婷婷综合热| 日韩成人综合网| 99九九99九九九视频精彩| 色五月女| 天天操天天国产三级片处女学生妹| 中文人妻主播久久| 久9热| www一起操| 激情五月天小说网| 婷婷五月激情五月丁香五月| 人妻精品久久久久久久| 大香蕉在九| 色综合xx| 精品夜夜澡人妻无码AV| 婷婷爱爱蜜臀天天操| 亚洲中文乱字字幕在线永久| 婷婷国产五月天17c| 丁香激激情网| 激情网 久久| 99aese| 99青青草99| 婷婷开心久久| 99综合99| 天天爽天天操| 婷婷五月色色| 婷婷五月电影院|