色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

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

任務(wù)調(diào)度器課程設(shè)計(jì):基于C語言實(shí)現(xiàn)FCFS、SJF與RR調(diào)度算法

任務(wù)調(diào)度器課程設(shè)計(jì):基于C語言實(shí)現(xiàn)FCFS、SJF與RR調(diào)度算法 簡(jiǎn)介面向大二學(xué)生數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)基于C/C實(shí)現(xiàn)的任務(wù)調(diào)度器系統(tǒng)覆蓋任務(wù)隊(duì)列、調(diào)度模塊與交互主程序適合需要完成同類選題、理解隊(duì)列結(jié)構(gòu)與任務(wù)管理流程的學(xué)生參考。壓縮包共38個(gè)文件大小約40.97MB包含VS2019解決方案、C源碼、任務(wù)隊(duì)列與調(diào)度管理相關(guān)頭文件、測(cè)試主程序、可直接運(yùn)行的exe以及pdb、obj、tlog等編譯調(diào)試產(chǎn)生的中間文件工程目錄清晰解壓后用Visual Studio 2019打開即可復(fù)現(xiàn)運(yùn)行效果。已有207名學(xué)生學(xué)習(xí)下載說明該選題在課程設(shè)計(jì)場(chǎng)景中具備一定代表性。通過該項(xiàng)目可以完整走一遍任務(wù)調(diào)度器的設(shè)計(jì)實(shí)現(xiàn)過程掌握任務(wù)隊(duì)列構(gòu)建、任務(wù)狀態(tài)維護(hù)、調(diào)度策略設(shè)計(jì)等核心思路也能借鑒其模塊劃分、工程組織方式和類圖設(shè)計(jì)便于快速改寫成自己的課程設(shè)計(jì)代碼、報(bào)告與答辯材料。1. 任務(wù)調(diào)度器這件課設(shè)為什么值得認(rèn)真做很多人拿到任務(wù)調(diào)度器這個(gè)題目的第一反應(yīng)是去翻操作系統(tǒng)里的進(jìn)程調(diào)度算法結(jié)果發(fā)現(xiàn)課設(shè)要求的是用數(shù)據(jù)結(jié)構(gòu)去模擬調(diào)度過程而不是真的實(shí)現(xiàn)一個(gè)操作系統(tǒng)調(diào)度內(nèi)核。先來先服務(wù)要排隊(duì)短作業(yè)優(yōu)先要快速找出最小服務(wù)時(shí)間時(shí)間片輪轉(zhuǎn)要環(huán)形取任務(wù)這背后對(duì)應(yīng)的是隊(duì)列、優(yōu)先隊(duì)列和循環(huán)隊(duì)列的設(shè)計(jì)與編碼能力。正因?yàn)槿绱怂懦蔀閿?shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)里最常被選中的題目之一——題目不大但能同時(shí)考到結(jié)構(gòu)體、指針、堆、隊(duì)列和排序穩(wěn)定性。這份方案面向正在準(zhǔn)備數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的學(xué)生也面向想快速理清任務(wù)調(diào)度器完整實(shí)現(xiàn)思路的開發(fā)者給出的是從需求分析、數(shù)據(jù)結(jié)構(gòu)選型、模塊劃分到C語言核心實(shí)現(xiàn)的一整套可落地參考。適合拿來做C/C課設(shè)的藍(lán)本也適合在答辯時(shí)應(yīng)對(duì)你為什么要這樣設(shè)計(jì)的追問。2. 需求分析與技術(shù)選型先確定調(diào)度規(guī)則再?zèng)Q定用堆還是隊(duì)列2.1 課設(shè)任務(wù)書里最容易被忽略的四個(gè)需求點(diǎn)先別急著寫代碼我會(huì)把任務(wù)書拆成四個(gè)必答項(xiàng)。第一必須支持的調(diào)度算法。常見組合是FCFS先來先服務(wù)、SJF短作業(yè)優(yōu)先、RR時(shí)間片輪轉(zhuǎn)三種部分題目還會(huì)要求動(dòng)態(tài)優(yōu)先級(jí)調(diào)度。第二任務(wù)輸入方式。多數(shù)要求從文件或控制臺(tái)讀入任務(wù)列表每條任務(wù)包含任務(wù)ID、到達(dá)時(shí)間和服務(wù)時(shí)間。第三結(jié)果輸出。通常要求打印調(diào)度順序、每個(gè)任務(wù)的開始時(shí)間、完成時(shí)間、等待時(shí)間、周轉(zhuǎn)時(shí)間以及平均周轉(zhuǎn)時(shí)間。第四邊界行為。比如兩個(gè)任務(wù)同時(shí)到達(dá)、服務(wù)時(shí)間相同、任務(wù)到達(dá)時(shí)間錯(cuò)峰這些場(chǎng)景決定了算法能否正確處理排序穩(wěn)定性。以最常見的輸入文件為例5 T1 0 8 T2 1 4 T3 2 9 T4 3 5 T5 4 2第一行是任務(wù)總數(shù)之后每行依次是任務(wù)ID、到達(dá)時(shí)間、服務(wù)時(shí)間。表面上簡(jiǎn)單但隱含了一個(gè)容易漏掉的需求任務(wù)不是一開始全部到達(dá)調(diào)度器必須在current_time小于下一個(gè)任務(wù)到達(dá)時(shí)間時(shí)等待。我一般會(huì)在需求分析里專門寫一條支持任務(wù)錯(cuò)峰到達(dá)這樣設(shè)計(jì)就完整了。需求分析還會(huì)直接影響編碼邊界。比如如果任務(wù)書要求輸出每個(gè)任務(wù)的開始時(shí)間那Task里還需要記錄start_time如果要求支持任務(wù)隨機(jī)生成那么輸入層就要加一個(gè)生成器函數(shù)。很多同學(xué)拿到題就開寫寫著發(fā)現(xiàn)字段不夠用又回頭改結(jié)構(gòu)體來回浪費(fèi)一個(gè)下午。我通常的做法是先在紙上畫一個(gè)輸入的樣例、一個(gè)輸出的樣例把字段對(duì)齊了再動(dòng)鍵盤。2.2 數(shù)據(jù)結(jié)構(gòu)選型優(yōu)先隊(duì)列、普通隊(duì)列和數(shù)組各司其職任務(wù)調(diào)度器的核心數(shù)據(jù)結(jié)構(gòu)是就緒隊(duì)列但不同算法對(duì)隊(duì)列的要求彼此沖突。FCFS只需要先進(jìn)先出用循環(huán)隊(duì)列即可SJF每次要選出服務(wù)時(shí)間最短的任務(wù)用最小堆最合適RR要按順序循環(huán)取任務(wù)本質(zhì)上又是循環(huán)隊(duì)列。如果只用數(shù)組加排序硬扛每來一個(gè)新任務(wù)就重新全排序代碼難寫且復(fù)雜度高更重要的是答辯時(shí)說不清楚為什么用這個(gè)結(jié)構(gòu)。因此在完整方案里我會(huì)同時(shí)實(shí)現(xiàn)兩個(gè)就緒容器一個(gè)二叉堆用于SJF和優(yōu)先級(jí)調(diào)度一個(gè)循環(huán)隊(duì)列用于FCFS和RR。二者都以Task指針為元素通過相同的隊(duì)列接口操作。下面這個(gè)表是我放在課設(shè)報(bào)告里的選型對(duì)比數(shù)據(jù)結(jié)構(gòu)適用算法核心操作時(shí)間復(fù)雜度循環(huán)隊(duì)列FCFS / RR入隊(duì)、出隊(duì)、判空O(1)二叉堆最小堆SJF / 優(yōu)先級(jí)調(diào)度插入、取最小、堆化O(log n)數(shù)組全部算法存儲(chǔ)原始任務(wù)、按id索引O(n)有一點(diǎn)需要特別說明SJF里的最短是指服務(wù)時(shí)間最小當(dāng)服務(wù)時(shí)間相等時(shí)按到達(dá)時(shí)間排序。這就要求堆的比較函數(shù)不是只看service_time而是先比service_time再比arrive_time否則兩個(gè)服務(wù)時(shí)間相同的任務(wù)順序可能與手算結(jié)果不一致。這是后面的避坑章節(jié)里最容易翻車的一個(gè)點(diǎn)。在這個(gè)選型階段還有一個(gè)容易被當(dāng)成玄學(xué)的點(diǎn)為什么時(shí)間片輪轉(zhuǎn)也要用隊(duì)列而不是鏈表。鏈表插入刪除雖然方便但循環(huán)隊(duì)列在固定大小任務(wù)數(shù)組的課設(shè)場(chǎng)景下更簡(jiǎn)單不需要頻繁malloc/new。如果任務(wù)數(shù)上限已知預(yù)分配一個(gè)MAX_TASKS容量的數(shù)組用head和tail兩個(gè)下標(biāo)維護(hù)隊(duì)列幾乎沒有內(nèi)存管理負(fù)擔(dān)。鏈表方案可以作為加分項(xiàng)寫在擴(kuò)展思考里但核心代碼用循環(huán)隊(duì)列更容易講。2.3 用C還是C封裝與調(diào)試成本的權(quán)衡如果允許自由選擇語言我會(huì)優(yōu)先用C而不是C。原因有三第一C的結(jié)構(gòu)體和指針能直觀展示任務(wù)節(jié)點(diǎn)、堆、隊(duì)列之間的關(guān)系答辯老師很容易看出你掌握的程度第二C的STL會(huì)把priority_queue、queue這些容器都包裝好代碼量少了但老師一句你講講最小堆的堆化過程就可能答不上來第三C程序用gdb調(diào)試堆數(shù)組和隊(duì)列更透明每次push/pop后都能直接查看data數(shù)組的順序。如果你更習(xí)慣C也可以用class封裝Scheduler和Task但必須自己管理析構(gòu)和拷貝避免淺拷貝導(dǎo)致指針重復(fù)釋放。這個(gè)方案里給出的代碼以C語言為基準(zhǔn)同時(shí)在注釋里標(biāo)注了C改進(jìn)點(diǎn)。我這里建議課設(shè)代碼控制在三個(gè)源文件main.c負(fù)責(zé)流程控制scheduler.c負(fù)責(zé)算法實(shí)現(xiàn)task_queue.c負(fù)責(zé)堆與隊(duì)列的操作。模塊清晰答辯時(shí)分頭講解很從容。選型確定后下一步需要把數(shù)據(jù)結(jié)構(gòu)封裝成統(tǒng)一接口讓調(diào)度算法不感知底層是堆還是隊(duì)列。比如我定義一組入隊(duì)、出隊(duì)、判空函數(shù)堆和循環(huán)隊(duì)列都實(shí)現(xiàn)同一套函數(shù)名內(nèi)部各自維護(hù)自己的存儲(chǔ)方式。這樣的抽象能讓后續(xù)切換算法時(shí)只改動(dòng)一行設(shè)置代碼也為第3章的總體架構(gòu)設(shè)計(jì)做了鋪墊。3. 總體架構(gòu)設(shè)計(jì)三層結(jié)構(gòu)與五類模塊的職責(zé)劃分3.1 頂層分層輸入層、調(diào)度核心層、輸出層任務(wù)調(diào)度器整體采用三層結(jié)構(gòu)。輸入層負(fù)責(zé)解析任務(wù)文件、校驗(yàn)數(shù)據(jù)比如任務(wù)數(shù)不能為0、服務(wù)時(shí)間不能為負(fù)數(shù)、時(shí)間片必須大于0等。調(diào)度核心層維護(hù)任務(wù)狀態(tài)機(jī)和三個(gè)調(diào)度算法這一層不關(guān)心數(shù)據(jù)是從文件還是控制臺(tái)來的。輸出層負(fù)責(zé)打印調(diào)度順序和統(tǒng)計(jì)指標(biāo)。這樣的好處是算法切換不會(huì)影響輸入輸出新增算法時(shí)只需要在核心層添加一個(gè)函數(shù)。在課設(shè)報(bào)告里我會(huì)用一個(gè)模塊劃分表來說明模塊文件職責(zé)關(guān)鍵結(jié)構(gòu)/函數(shù)main.c解析命令行參數(shù)、組織流程Scheduler結(jié)構(gòu)體task_queue.c循環(huán)隊(duì)列與最小堆的操作enqueue、dequeue、heap_push、heap_popscheduler.c三種調(diào)度算法的狀態(tài)推進(jìn)scheduler_fcfs / sjf / rroutput.c打印調(diào)度順序、計(jì)算統(tǒng)計(jì)量print_schedule、calc_avgmain函數(shù)中先用load_tasks()讀取任務(wù)數(shù)組再根據(jù)命令行參數(shù)創(chuàng)建Scheduler調(diào)用scheduler_run()最后調(diào)用print_result()。我會(huì)特別在main函數(shù)里保留一個(gè)打印中間狀態(tài)的開關(guān)調(diào)試時(shí)開啟答辯演示時(shí)關(guān)閉。在三層結(jié)構(gòu)的邊界上我還會(huì)留一個(gè)hook點(diǎn)調(diào)度核心層只暴露一個(gè)scheduler_run()接口和一個(gè)scheduler_set_algorithm()設(shè)置函數(shù)。這樣main.c無需關(guān)心算法內(nèi)部是用了堆還是隊(duì)列如果日后想支持動(dòng)態(tài)優(yōu)先級(jí)搶占只需在Scheduler里增加一個(gè)priority字段并在比較函數(shù)中增加一條判斷即可。這種設(shè)計(jì)看似多寫幾行代碼但在答辯中被問到可擴(kuò)展性時(shí)就能拿出實(shí)際的函數(shù)接口來證明而不是只說思路。3.2 任務(wù)狀態(tài)機(jī)新建、就緒、運(yùn)行、完成任務(wù)不能共享同一塊隊(duì)列就完事每個(gè)任務(wù)都有自己的生命周期。我給Task設(shè)計(jì)一個(gè)state字段枚舉值分別代表NEW新建、READY就緒、RUNNING運(yùn)行、FINISHED完成。調(diào)度流程是這樣的所有任務(wù)初始都是NEW當(dāng)current_time推進(jìn)到某個(gè)任務(wù)的到達(dá)時(shí)間時(shí)把它插入就緒隊(duì)列并置為READY調(diào)度器從就緒隊(duì)列取一個(gè)任務(wù)置為RUNNING并運(yùn)行任務(wù)運(yùn)行完成后置為FINISHED。以RR舉例任務(wù)T1第一次被調(diào)度時(shí)state由1變?yōu)?運(yùn)行一個(gè)時(shí)間片未完成state回到1并插入隊(duì)尾等第二次出隊(duì)再次變?yōu)?運(yùn)行完畢才變?yōu)?。如果沒有這中間一次READY回縮任務(wù)就可能在第二次被取出時(shí)還被當(dāng)作RUNNING導(dǎo)致調(diào)度器認(rèn)定它還在運(yùn)行而不重新分配。狀態(tài)機(jī)把這個(gè)問題轉(zhuǎn)化成了簡(jiǎn)單的枚舉判斷代碼里一眼能看清。這個(gè)狀態(tài)機(jī)最大的價(jià)值是避免重復(fù)入隊(duì)。RR算法里一個(gè)任務(wù)執(zhí)行完一個(gè)時(shí)間片但沒結(jié)束會(huì)被放回隊(duì)尾此時(shí)它的狀態(tài)應(yīng)該是READY而不是RUNNING而一個(gè)已經(jīng)FINISHED的任務(wù)如果因?yàn)橄聵?biāo)判斷失誤再次被掃描到就會(huì)重復(fù)入隊(duì)。有了state每次入隊(duì)前檢查一下不是READY和RUNNING就能提前攔住錯(cuò)誤。3.3 調(diào)度核心模塊統(tǒng)一接口與三個(gè)算法的策略選擇調(diào)度核心層我不會(huì)寫成三個(gè)相互獨(dú)立的大函數(shù)而是定義一個(gè)Scheduler結(jié)構(gòu)體來統(tǒng)一管理typedef struct { int algorithm; /* 0-FCFS 1-SJF 2-RR */ int time_slice; /* RR使用 */ int current_time; Task *tasks; int task_count; int finished_count; } Scheduler;然后提供一個(gè)scheduler_run()入口內(nèi)部通過switch調(diào)用不同的調(diào)度函數(shù)。每個(gè)調(diào)度函數(shù)只負(fù)責(zé)把task的finish_time寫好不直接打印結(jié)果。這樣統(tǒng)計(jì)模塊永遠(yuǎn)從finish_time字段取數(shù)不會(huì)因?yàn)槿肿兞勘桓亩沐e(cuò)。使用統(tǒng)一接口還有一個(gè)微觀好處統(tǒng)計(jì)模塊在調(diào)度完成后遍歷任務(wù)數(shù)組不需要知道剛才跑的是哪個(gè)算法。算法的選擇只影響每個(gè)任務(wù)的finish_time不影響后續(xù)計(jì)算。這也讓main.c的代碼量大幅減少?gòu)拈_始到讀入?yún)?shù)再到輸出結(jié)果不超過60行。三種算法的推進(jìn)邏輯分別是FCFS按到達(dá)順序入隊(duì)任務(wù)執(zhí)行完才讓出CPUSJF每步從最小堆堆頂取任務(wù)同樣不可搶占RR每個(gè)任務(wù)最多運(yùn)行一個(gè)時(shí)間片沒做完就重新入隊(duì)尾部。對(duì)比來看SJF和FCFS都是運(yùn)行到結(jié)束只是選擇順序不同RR才會(huì)在運(yùn)行中途打斷。答辯時(shí)我會(huì)主動(dòng)說出這個(gè)區(qū)別表明算法并不是簡(jiǎn)單換排序。3.4 統(tǒng)計(jì)指標(biāo)模塊周轉(zhuǎn)時(shí)間、等待時(shí)間與平均數(shù)的計(jì)算課程設(shè)計(jì)通常要求輸出平均周轉(zhuǎn)時(shí)間所以統(tǒng)計(jì)模塊要獨(dú)立于調(diào)度模塊。每個(gè)任務(wù)調(diào)度完成后只記錄finish_time統(tǒng)計(jì)時(shí)再統(tǒng)一計(jì)算周轉(zhuǎn)時(shí)間 finish_time - arrive_time等待時(shí)間 周轉(zhuǎn)時(shí)間 - service_time帶權(quán)周轉(zhuǎn)時(shí)間 周轉(zhuǎn)時(shí)間 / service_time。平均周轉(zhuǎn)時(shí)間則是所有任務(wù)周轉(zhuǎn)時(shí)間之和除以任務(wù)數(shù)。這里有一個(gè)容易踩坑的細(xì)節(jié)打印帶權(quán)周轉(zhuǎn)時(shí)間時(shí)如果用整數(shù)除法9/8會(huì)變成1而不是1.12。我會(huì)用浮點(diǎn)數(shù)保存結(jié)果printf保留兩位小數(shù)。另外當(dāng)任務(wù)服務(wù)時(shí)間為0時(shí)帶權(quán)周轉(zhuǎn)時(shí)間會(huì)做除零運(yùn)算我在輸入校驗(yàn)里直接禁止服務(wù)時(shí)間小于等于0從根上規(guī)避掉這個(gè)黑匣子問題。輸出格式我建議用表格對(duì)齊方式比如每行打印任務(wù)ID、到達(dá)時(shí)間、服務(wù)時(shí)間、完成時(shí)間、周轉(zhuǎn)時(shí)間、帶權(quán)周轉(zhuǎn)時(shí)間。最后單獨(dú)一行打印平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間。這樣的打印結(jié)果可以直接貼進(jìn)課程設(shè)計(jì)報(bào)告不需要再手工整理。4. 關(guān)鍵實(shí)現(xiàn)堆、隊(duì)列與三種調(diào)度算法的落地代碼4.1 任務(wù)結(jié)構(gòu)體與最小堆的實(shí)現(xiàn)代碼從Task定義開始typedef struct Task { int id; /* 任務(wù)ID從1開始 */ int arrive_time; /* 到達(dá)時(shí)間 */ int service_time; /* 服務(wù)時(shí)間 */ int done_time; /* 已經(jīng)運(yùn)行的時(shí)間RR用 */ int finish_time; /* 完成時(shí)間 */ int state; /* 0新建 1就緒 2運(yùn)行 3完成 */ } Task;就緒容器我采用兩個(gè)獨(dú)立結(jié)構(gòu)體的方案先看最小堆typedef struct PQueue { Task *data[MAX_TASKS]; /* 存儲(chǔ)任務(wù)指針 */ int size; /* 堆中元素個(gè)數(shù) */ } PQueue; void heap_push(PQueue *h, Task *t) { int i h-size; h-data[i] t; while (i 0) { int p (i - 1) / 2; if (compare(h-data[i], h-data[p]) 0) { Task *tmp h-data[i]; h-data[i] h-data[p]; h-data[p] tmp; i p; } else { break; } } } Task *heap_pop(PQueue *h) { Task *top h-data[0]; h-data[0] h-data[--h-size]; int i 0; while (1) { int l 2 * i 1, r 2 * i 2, smallest i; if (l h-size compare(h-data[l], h-data[smallest]) 0) smallest l; if (r h-size compare(h-data[r], h-data[smallest]) 0) smallest r; if (smallest i) break; Task *tmp h-data[i]; h-data[i] h-data[smallest]; h-data[smallest] tmp; i smallest; } return top; }這段代碼的邏輯是heap_push從數(shù)組末尾上浮heap_pop先將堆頂與末尾元素交換并下沉正好對(duì)應(yīng)堆的兩個(gè)核心操作。MAX_TASKS采用宏定義如#define MAX_TASKS 100避免動(dòng)態(tài)擴(kuò)容引出的指針失效問題。compare函數(shù)是優(yōu)先級(jí)判定的核心int compare(Task *a, Task *b) { if (a-service_time ! b-service_time) { return a-service_time - b-service_time; } return a-arrive_time - b-arrive_time; }返回值小于0表示a應(yīng)排在b前面。這與普通排序的cmp函數(shù)保持一致。很多同學(xué)在這里會(huì)犯方向性錯(cuò)誤寫成b-service_time - a-service_time導(dǎo)致最小堆變成最大堆這是最典型的翻車點(diǎn)。4.2 FCFS與SJF調(diào)度實(shí)現(xiàn)FCFS采用循環(huán)隊(duì)列這里給出調(diào)度主體的最簡(jiǎn)版void scheduler_fcfs(Scheduler *sched) { CQueue q; init_queue(q); int next 0; while (sched-finished_count sched-task_count) { while (next sched-task_count sched-tasks[next].arrive_time sched-current_time) { sched-tasks[next].state 1; enqueue(q, sched-tasks[next]); next; } if (is_empty(q)) { sched-current_time; continue; } Task *t dequeue(q); t-state 2; t-finish_time sched-current_time t-service_time; sched-current_time t-finish_time; t-state 3; sched-finished_count; } }注意兩個(gè)細(xì)節(jié)第一個(gè)while負(fù)責(zé)把到點(diǎn)的新任務(wù)放入隊(duì)列第二個(gè)if用于處理隊(duì)列為空且任務(wù)尚未全部到達(dá)的情況這時(shí)current_time逐秒推進(jìn)會(huì)稍慢但邏輯最簡(jiǎn)單。如果追求效率可以直接跳到下一個(gè)任務(wù)的到達(dá)時(shí)間但仍要處理下一個(gè)任務(wù)也沒到齊的邊界。SJF與FCFS的結(jié)構(gòu)非常像只是把循環(huán)隊(duì)列換成最小堆取任務(wù)時(shí)從堆頂取void scheduler_sjf(Scheduler *sched) { PQueue h; h.size 0; int next 0; while (sched-finished_count sched-task_count) { while (next sched-task_count sched-tasks[next].arrive_time sched-current_time) { sched-tasks[next].state 1; heap_push(h, sched-tasks[next]); next; } if (h.size 0) { sched-current_time sched-tasks[next].arrive_time; continue; } Task *t heap_pop(h); t-state 2; t-finish_time sched-current_time t-service_time; sched-current_time t-finish_time; t-state 3; sched-finished_count; } }這段代碼與FCFS最大的區(qū)別在于兩處一是就緒容器由隊(duì)列變成堆二是隊(duì)列為空時(shí)不再用current_time而是直接跳躍到下一個(gè)任務(wù)的到達(dá)時(shí)間。跳躍寫法在SJF里更合理因?yàn)槎褳榭沾泶丝虥]有可執(zhí)行任務(wù)繼續(xù)逐秒加一不會(huì)改變堆中的內(nèi)容。4.3 時(shí)間片輪轉(zhuǎn)RR的實(shí)現(xiàn)與隊(duì)尾回插RR需要維護(hù)每個(gè)任務(wù)已經(jīng)運(yùn)行的時(shí)間done_time時(shí)間片time_slice由命令行傳入。核心代碼void scheduler_rr(Scheduler *sched, int time_slice) { CQueue q; init_queue(q); int next 0; while (sched-finished_count sched-task_count) { while (next sched-task_count sched-tasks[next].arrive_time sched-current_time) { sched-tasks[next].state 1; enqueue(q, sched-tasks[next]); next; } if (is_empty(q)) { sched-current_time; continue; } Task *t dequeue(q); if (t-state 3) continue; /* 防御已完成任務(wù)不入隊(duì) */ t-state 2; int need t-service_time - t-done_time; int run_time need time_slice ? time_slice : need; t-done_time run_time; sched-current_time run_time; if (t-done_time t-service_time) { t-state 1; enqueue(q, t); /* 沒做完放回隊(duì)尾 */ } else { t-finish_time sched-current_time; t-state 3; sched-finished_count; } } }這段代碼里最關(guān)鍵的是回插動(dòng)作任務(wù)每輪只能運(yùn)行一個(gè)時(shí)間片如果還沒完成done_time加滿當(dāng)前時(shí)間片后重新入隊(duì)。需要特別注意的是回插的任務(wù)不能被重復(fù)計(jì)算到達(dá)時(shí)間所以next指針只負(fù)責(zé)新到達(dá)任務(wù)回插直接走enqueue隊(duì)列尾部。防御性的state3判斷是血淚經(jīng)驗(yàn)曾經(jīng)有同學(xué)在任務(wù)完成瞬間又被調(diào)度器取出就是因?yàn)闋顟B(tài)沒有置為完成。4.4 命令行參數(shù)與運(yùn)行配置為了讓課設(shè)更完整我會(huì)讓程序支持命令行參數(shù)./scheduler -a sjf -t input.txt -o result.txt -q 2各參數(shù)含義如下表參數(shù)說明默認(rèn)值-a調(diào)度算法fcfs/sjf/rrfcfs-t任務(wù)文件路徑input.txt-o結(jié)果輸出文件stdout-q時(shí)間片大小RR2main函數(shù)中用getopt解析參數(shù)并用switch判斷算法。文件不存在或參數(shù)非法時(shí)打印輸入文件不存在不直接崩潰。這樣設(shè)計(jì)的好處是演示時(shí)可以在答辯現(xiàn)場(chǎng)用同一份任務(wù)文件分別跑三種算法對(duì)比輸出效果比只看代碼好得多。參數(shù)表可以放在設(shè)計(jì)文檔中代碼里只需要一個(gè)結(jié)構(gòu)體SchedConfig來保存。5. 常見問題與避坑指南五個(gè)最容易翻車的地方任務(wù)調(diào)度器這個(gè)課設(shè)代碼量不大但翻車點(diǎn)很集中。我見過的模擬項(xiàng)目里十個(gè)同學(xué)有七八個(gè)都卡在下面這幾類問題上。這里按現(xiàn)象→原因→解決的順序整理方便你在答辯前快速自查。5.1 比較函數(shù)方向?qū)懛醋疃倘蝿?wù)反而最后執(zhí)行現(xiàn)象SJF調(diào)度輸出里服務(wù)時(shí)間最短的任務(wù)出現(xiàn)在序列最后運(yùn)行時(shí)間反而像最長(zhǎng)作業(yè)優(yōu)先。 原因最小堆的compare返回值語義與預(yù)期相反。我見過很多初學(xué)者寫compare時(shí)參考qsort的寫法結(jié)果在堆的siftDown里又套了一層balance 0的符號(hào)翻轉(zhuǎn)負(fù)負(fù)得正。 解決統(tǒng)一約定compare(a,b) 0 表示 a 優(yōu)先級(jí)高于 b堆頂永遠(yuǎn)存放compare值最小的元素。寫完compare后先把三個(gè)任務(wù)服務(wù)時(shí)間6、2、4按順序插入堆再全部彈出檢查是否得到2、4、6。這個(gè)測(cè)試只需10秒能避免后面所有算法結(jié)果錯(cuò)亂。我一般會(huì)在單元測(cè)試代碼里直接寫上這個(gè)用例作為回歸檢查。5.2 時(shí)間片輪轉(zhuǎn)里任務(wù)重復(fù)入隊(duì)程序死循環(huán)現(xiàn)象RR運(yùn)行到某個(gè)任務(wù)后發(fā)現(xiàn)它被調(diào)度了兩次或者printf刷屏不斷執(zhí)行同一個(gè)任務(wù)。 原因任務(wù)已經(jīng)完成但狀態(tài)沒有置為FINISHED或者調(diào)度器在新到達(dá)任務(wù)掃描時(shí)重復(fù)處理了已經(jīng)入隊(duì)的任務(wù)。 解決強(qiáng)制使用任務(wù)狀態(tài)機(jī)入隊(duì)前檢查state是否為NEW或FINISHED。更直接的防御是在調(diào)度器入口加一個(gè)斷言if (t-state 3) continue;同時(shí)維護(hù)一個(gè)next下標(biāo)只掃描尚未入隊(duì)的新任務(wù)禁止每輪都從頭遍歷整個(gè)任務(wù)數(shù)組。這兩種手段疊加后重復(fù)入隊(duì)基本被根除。5.3 任務(wù)錯(cuò)峰到達(dá)時(shí)程序卡在空隊(duì)列等待現(xiàn)象用全是0時(shí)刻到達(dá)的測(cè)試數(shù)據(jù)一切正常換成錯(cuò)峰到達(dá)后程序要么長(zhǎng)時(shí)間無輸出要么直接跳過任務(wù)。 原因調(diào)度器在隊(duì)列為空時(shí)沒有處理下一個(gè)任務(wù)還沒到達(dá)的情況。FCFS里用current_time能僥幸跑通但SJF里如果也這么做遇到下一個(gè)任務(wù)到達(dá)時(shí)間跨度很大程序會(huì)做大量無效循環(huán)觀感上像死機(jī)。 解決隊(duì)列為空時(shí)直接把current_time跳到下一個(gè)待入隊(duì)任務(wù)的到達(dá)時(shí)間。SJF代碼里的sched-current_time sched-tasks[next].arrive_time;就是這個(gè)用途。需要注意的是跳躍前要確保next下標(biāo)有效也就是next task_count。否則說明所有任務(wù)都已經(jīng)處理完這本來也是退出循環(huán)的條件。5.4 動(dòng)態(tài)分配產(chǎn)生的野指針和內(nèi)存泄漏現(xiàn)象程序測(cè)小數(shù)據(jù)正常加到50個(gè)任務(wù)后偶發(fā)崩潰或者使用valgrind檢查時(shí)發(fā)現(xiàn)一堆invalid read。 原因Task數(shù)組用malloc動(dòng)態(tài)分配而隊(duì)列data數(shù)組里保存的是Task指針當(dāng)任務(wù)數(shù)組被realloc擴(kuò)容時(shí)舊指針全部失效。這是最典型的野指針來源。 解決課程設(shè)計(jì)場(chǎng)景下直接在棧上定義固定大小數(shù)組Task tasks[MAX_TASKS];并先讀入任務(wù)數(shù)再檢查是否超過MAX_TASKS。如果一定要?jiǎng)討B(tài)分配就一次性malloc最大任務(wù)數(shù)不要做realloc。對(duì)于隊(duì)列中的指針只要任務(wù)數(shù)組地址不變指針始終有效。檢查泄漏時(shí)在gdb或valgrind下跑一遍完整測(cè)試會(huì)大大降低翻車概率。5.5 輸出結(jié)果與手算不一致平均周轉(zhuǎn)時(shí)間算錯(cuò)現(xiàn)象調(diào)度順序看起來對(duì)但平均周轉(zhuǎn)時(shí)間比手算大很多或者帶權(quán)周轉(zhuǎn)時(shí)間出現(xiàn)1.00這種明顯不合理的數(shù)值。 原因統(tǒng)計(jì)時(shí)用全局current_time而不是任務(wù)自身的finish_time。由于RR會(huì)反復(fù)切換任務(wù)某個(gè)任務(wù)完成時(shí)current_time可能已經(jīng)被后續(xù)任務(wù)推進(jìn)過直接用當(dāng)前時(shí)間減到達(dá)時(shí)間必然出錯(cuò)。 解決在任務(wù)完成時(shí)就把t-finish_time記錄好統(tǒng)計(jì)模塊只從finish_time字段取值。打印前先逐個(gè)輸出每個(gè)任務(wù)的arrive_time、finish_time、周轉(zhuǎn)時(shí)間與手算表逐項(xiàng)比對(duì)。這里我踩過一個(gè)坑帶權(quán)周轉(zhuǎn)時(shí)間用整數(shù)除法9/8算成1后來全部改成double輸出加上%.2f結(jié)果才正常。6. 驗(yàn)收與答辯把課設(shè)做到能演示、能講透6.1 功能驗(yàn)收清單在提交前我會(huì)用一個(gè)包含5個(gè)任務(wù)、3種算法的測(cè)試文件跑完整流程并對(duì)照手算結(jié)果。下表是最低驗(yàn)收標(biāo)準(zhǔn)檢查項(xiàng)通過標(biāo)準(zhǔn)輸入解析能正確讀取文件非法參數(shù)給出提示不崩潰FCFS調(diào)度順序與手算完全一致SJF最短任務(wù)最先執(zhí)行服務(wù)時(shí)間相同時(shí)按到達(dá)順序RR每個(gè)任務(wù)每個(gè)時(shí)間片只運(yùn)行一次回插正確統(tǒng)計(jì)平均周轉(zhuǎn)時(shí)間、平均帶權(quán)周轉(zhuǎn)時(shí)間保留兩位小數(shù)魯棒性任務(wù)數(shù)0、時(shí)間片0、文件不存在均能友好退出6.2 答辯演示流程答辯時(shí)只講三條主線需求、選型、驗(yàn)證。先花半分鐘說這個(gè)課設(shè)解決的問題是讓一組任務(wù)在三種調(diào)度策略下得到不同的執(zhí)行序列并量化對(duì)比再用同一組數(shù)據(jù)分別跑FCFS、SJF、RR指著輸出說SJF的平均周轉(zhuǎn)時(shí)間比FCFS低因?yàn)槎倘蝿?wù)優(yōu)先完成。最后結(jié)合代碼解釋為什么要用堆——SJF每次取任務(wù)需要O(log n)如果改用順序查找整體復(fù)雜度就到O(n2)。老師如果要你展示代碼優(yōu)先展示compare函數(shù)和RR的回插邏輯這兩個(gè)點(diǎn)最能體現(xiàn)出對(duì)數(shù)據(jù)結(jié)構(gòu)的理解。演示前準(zhǔn)備一頁打印紙左側(cè)輸入、右側(cè)三個(gè)算法的輸出老師提問時(shí)不會(huì)因?yàn)楝F(xiàn)場(chǎng)敲命令而冷場(chǎng)。如果時(shí)間充??梢渣c(diǎn)亮一個(gè)debug模式開關(guān)打印每個(gè)時(shí)間片的就緒隊(duì)列內(nèi)容這會(huì)讓演示顯得很扎實(shí)。這套完整的課程設(shè)計(jì)資源包含可編譯運(yùn)行的C源碼、任務(wù)生成與測(cè)試用例、設(shè)計(jì)文檔框架和答辯PPT提綱拿到后可以直接對(duì)照修改。建議在動(dòng)筆寫報(bào)告前先跑通功能再回頭整理文檔效率會(huì)高很多。我最初做模擬項(xiàng)目X時(shí)也曾在RR里把任務(wù)重復(fù)入隊(duì)調(diào)試到半夜翻車后來養(yǎng)成的習(xí)慣是每改一次算法先拿三個(gè)任務(wù)做手算再到程序里打印current_time和隊(duì)列內(nèi)容比對(duì)。從那以后我每次做調(diào)度類的課程設(shè)計(jì)都會(huì)強(qiáng)制自己走一遍手算結(jié)果 → 程序輸出 → 差異分析的流程。希望這份方案能幫到你少踩幾個(gè)坑。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
色综合20p| 成人av福利在线观看| 无码高清国产AV| 亚洲国产精品久久久久久久久久| 天天性射网| 国产Aα| 天天摸天天插天天日| 97超碰欧美手机在线| AⅤ片水多多| 午夜福利久久久噜久噜久久综合| 黄色成人网久久久久久| 99超碰色| 亚洲最新Av| 激情小说五月天| 二级毛片| 成人国产精品三级A片| 伊人久久亚洲色欲综合网站 | 欧洲一区二区| 午夜福利免费精品视频| 91成人亚洲色图| 眼镜人妻101.com| 91精品电影18| 国产精品一区二区久久精品| 色色99| 国产高清视频无码在线| 一区二区三区男女操逼黄色小电影| 五月情色天| 天天综合色| 91 偷| 色噜噜狠狠色综合日日| 日韩成人人妻网站| 天天躁日日躁AAAXX| 96国产精品| 五月色网| 国产 日韩 欧美一区| 亚洲熟妇无码一区二区三区| 香港澳门日本三级网站| 国产精品天干天干综合网麻豆| 日日噜噜夜夜狠狠视频无| 啊啊啊啊啊好大好舒服想要| 一线黄色免费性爱片| 天天综合网AV91| 天天操人人操狠狠插| 91丝袜熟女| 国产极品美女高潮无套在线观看| 日韩人妻丝袜中文字幕| 99国产精品免费| 先锋色眉乱伦资源| 亚洲中文字幕在线视频一区二区| 伊人久久大香线综合无码| 青草草免费网站av| 999九九九九国产动| 大香蕉久操| 我要色综合网| 丰满搜索结果 -第18页- 久久高清无码 | 97精品中文字幕| 黄色欧美性爱视频| 亚州综合色| 超碰天天久久79| 国产一区二区三区导航| 91精品网站| 国产久久视频| 一级免费啪啪片| 欧美精品成人一区二区在线观看 | 狠狠入| 九九天堂| 中文字幕成人理论在线| 中文久久久| 精品人妻一区二区乱码一区二区| 操逼网站视频漫画国产| 国产乱子伦久久精品综合一区二区三| 爆乳免费黄网站| 综合操逼| 人妻啪| 国产精品电| 精品久久久中文字幕不| www网站黄| av黄图片在线观看| 蜜区区视频79 | 欧美同性恋 的搜索结果 - 91n| 黄污污污污| 人人操人人摸人人看人人插| 亚欧美综合网| 好一吊区二区| 日本999精品| 国产激情av女片自拍| 永久电影三级在线观看| 极品出轨视频网站| 亚洲精品 欧美精品| 婷婷五月色| 精品国产一区二区三区香蕉欧美 | 日韩内| 欧美日韩一干二干| 91 手机在线播放 绯色| 日本午夜久久电影| 久久久久亚洲Aⅴ无码| 草草电影院| 欧美se综合| 亚洲欧美精品久| 亚洲AV无码天美传媒一区| 成年女人黄网站| 久久专区| 久久久久白虎| 加勒比性爱成人在线| 丝袜狠狠草尤物人妻av91| 欧美在线干| 无码在线亚洲| 午夜福利av电影在线| 无遮挡男女激烈动态图| 国产捆绑一区| 九九热av| 97超碰精品图片| 婷婷五月天无码 | 国产精品3| 亚洲精品一二三四区| 丁香五月综合| 五月天激情小说网| 玖玖婷婷五月天| 国产色呦呦| 国产亚洲精品无码三区| 国产久久成人| 人人看人人插| 狠狠操夜夜| 性久久久| 亚洲天堂在线怕怕视频| 精品人妻一区二区三区四区石在线 | 国产又猛又粗又爽又黄| 欧美日产国产在线成人第一区| 欧美色图第一页| 撸无码不卡免费视频| 99re在线视频国产| KK色在线影院| 国产乱子伦久久精品综合一区二区三| 深喉吞精| 国产精品久久| 色色毛片| 天天激情综合站| 熟妇综合一区二区三区| 可能人人看人人摸| 嫩草一区二区在线观看| 欧美日韩国产中文精品字幕自在自线 | 日韩精品碰碰| 国产操逼逼网| 91五月天| 后入人妻一区| 欧美97在线观看| 亚洲国产精品久久久男人的天堂| 日韩人妻精品| 大香蕉99re| 农村少妇久久久久久久| 欧美手机在线综合| juliaann丝袜| 麻豆国产精品午夜视频| 日本性爱欧美性爱| 一区二区三区机械有限公司| 最新亚洲风情电影| 亚洲素人综合| 亚洲日韩电影| 欧美日韩香蕉| 五月婷婷六月天| 久久久噜噜噜久久久| 不卡九肏| 麻豆a'v电影| 精品无码少妇| 婷婷色色五月天福利| 收看日本人日bb| 色综合av男人天堂| 91九色精品熟女内射| 深爱五月天| 亚洲人在线成线成人| 日本啊啊啊啊啊视频| 天天摸天天舔天天操| 国产人妻精品一区二区三区秋霞 | 99re在线精品78| 亚洲激情欧美色图 | 天天色播| 好看的91视频| 久热99999| 人人搞人人插人人操| 强歼乱伦资源网| 人妻AV在线| 久久综合超碰| 東南亚性呦成人伦理资源在线视频| 亚洲国产一级黄色视频| 精品少妇一区二区三区在线视频| 九九久久99| 国产超碰97| 51国产午夜精品视频| 国产又爽又黄| 第四色色综合91| 大香蕉92| 亚洲精品成人动漫在线| 亚洲91少妇| 97精选久久| 91亚洲人| 色婷婷激情| 亚洲污污网站| 国产白丝av| 九九综合九九综合| 色色综合网站| 免费国产| 亚洲日韩美国人妻| 97精品97| 亚洲成人激情小说视频| 九色PORNY9l原创自拍| 97er欧美性| 天久久久噜噜噜久久国产精品爽爽| 国产精品成人无码a v毛片| 婷婷成人五月天| 中文字幕第95页| 強姦亂倫a| 啪啪啪大香蕉| 97在线欧| 久久久无码av精| 久久e6只有精品| 欧美大战久久久伊人| 青娱乐淫乱1314| 六月丁香五月婷婷| 97香蕉网| 五月天婷婷综合网| 999热日韩精品| 日韩强奸av| 亚洲欧洲另类| 欧美精品庄| 五月天综合在线| 青青草好吊| 大香蕉专区| 日韩三级在线观看mp4| 大学生美女口爆| 五月天激情小说| 伊人久日| 中字乱伦AV| 精品少妇一区二区| 凹凸视频特色日本特黄| 97视频在线免费| 久久一区二区三区入口| 91精品久久久久久77777| 岛国在线免费视频| 国产第二页| 色欲蜜臀AV| 成人欧美日超碰| 亚洲?V无码专区在线电影| 超碰国产情侣自拍网| 精品国模无码| 青青草在线视频欧美| 日韩免费中文字幕视频| 中出789在线视频| 亚洲男人综合| 无码视频一区二区| 无遮挡又黄又刺激的视频| 超碰碰97资源站| 久久久麻豆精品| 狠狠爱夜夜干| 91视频国品一二三区| 97 色综合| 精品大久久| 人妻偷拍一区二区三区| 粉嫩久久久久| 99ri视频| 97国产人人| 97天天操天天干| 韩日性爱av| 欧美熟女丝袜| 91粉芽高清在线一区二区| 九九九九久久久久| 自拍视频大全亚洲专媒视频/一区二区三区 | 在线观看无码三级少妇| 久久久久久久久国产| 亚洲超碰AV| 久热伊人| 激情终合网| 天天操天天干一区二区 | 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 97色婷婷| 激情文学 亚洲图片| 亚洲情色五月天| 91在线/欧洲| 国内外内射高清视频| 乱色视频中文字幕| 97草草| 久久免费少妇| 中文字幕成人| 这里都是精品| 老女人爆菊| 91肉片| 五月天婷婷小说| 自拍啪啪视频| 午夜精品五区| 婷婷九月国产| www.色99| 蜜臀久久99精品久久久电影| 欧美精品自慰系列寂寞少妇| 精品少妇高潮久久| 亚洲天堂,男人| 国产强奸乱伦第1页| 伊人久久亚洲中文字幕| 久久精品夜色国产亚洲AV| 青青草在线视频人人想人人上| 91人妻丝袜无码| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 中文字幕 国产 精品| 国产AB视频| 熟妇操花| 精品国产一区探花在线观看| 四虎884a| 性爱av在线免费观看| 花花AV导航| 淫色网综合| 爱我干综合| 国产精品久久久久久久久久久久久久| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 亚洲色人| 夜夜骑夜夜操| 97超碰免费生活| 综合色99| av强奸乱轮| 色哟哟AV| 夜夜嗷嗷一区二区| 韩国久久97| 色爱三区| 中文字幕三四区| 男人网站婷婷| 91网亚洲| 少妇毛片久久| 国产亚洲精品自在线亚洲情侣| 影音先锋每日最新资源在线观看| 无马一区二区| 亚洲欧美洲综合| 欧美亚洲韩国视频十五区| 日本东京热大香蕉a片| 宅男91视频在线播放| 激情自拍 校园春色| 亚洲老熟妇xxx| 中文字幕av乱伦| 亚洲乱熟女一区二区三区大香蕉| 亚洲欧美经典一区二区| 天天天天干| www.久久爱| 中文字幕高清20页视频| 日日夜夜骚| 熟女欧美日韩综合婷婷| 亚洲性少妇| 淫纸中9区| 九九九九热| 热思思免费视频| 人人摸.人人色| 在线强奷到舒服的无码视频 | 亚洲Av诱惑| 欧美性性性| 超碰久超碰久| 日韩性爱视频在线免费观看| 亚洲精品亚洲人成在线麻豆| 综合色播| 色欲色香天天天综合网www-亚洲综合国| 秋霞福利网| 无码人妻一区二区三区四区老鸭窝| 97超碰日韩| 淫荡少妇免费| 伦理片秋霞免费影院| 69人妻人人揉人人躁人人精品| 国产日本一区二区三区蜜臀在线观看| 国产精品视屏| 亚洲精品白丝| 日本一级一级一级一级| 久久艹逼视频| 久久精精区一区二区一蜜桃一区二区| 亚欧国产无码精品在线| 久久丁香五月天| 久久侵犯人妻爽爽爽| 翔田千里av一区二区三区| 囯产操逼片| 五月丁香成人网| 色播五月丁香| 九九九久千久久激情蜜桃在线看 | 国产亚洲欧美每日在线| 久久婷婷电影网| 日本精品一级二级三级| 亚洲伊人a线观看视频| 亚洲三区视频| 欧美日韩国产色图在线| 95人妻爽爽人人做人人澡| 91国产精品在线看| 欧美色图97| AV色五月| 欧美亚洲综合高清在线| 成人三一级一片aaa| 日本狠狠干| 素人美腿视频网站| 国产精品久久久啊| 亚洲欧美色图| 97在线精品观看视频| 天天躁日日躁XXXXYY| 精品夜夜澡人妻无码| 91麻豆天美传媒HD| 无卡一区=区| 91四海无码日韩欧美| 大香蕉视频一二三区| 99热这里只有精品地址| 无码99| x97av| 欧美精品成人一区二区在线观看 | 国产精品一区av在线| 91日韩在线| 爱干爱射网啊啊啊| 国产h小视频在线观看免费| 久久‘黄片视频| 吻戏激情性巴克| 亚洲激情网一二三四区| 亚洲图片视频小说| 熟女人妻一区二区三区| 日韩啪啪啪视频| 狠狠爱综合网| 色嗨嗨在线| 97精品国产97久久久久久户外免费| 精品无码一区二区三区| 日本123区操B视频| 日天天九九天堂666| 欧美一区二区亚洲天堂| 欧美亚州综合网图片| 能在线播放的国产三级| 青娱乐 成人娱乐在线| 精品二区久久| 99精品在线| 暴力av在线| 亚洲一级特黄大片在线播放91| 久久av网| 熟女乱伦A| 国产精品久久久久久久免牛肉蒲团| 亚洲中文字幕熟女少妇一区二区| www久久久| 日本一级性爱| 少妇极品熟妇人妻无码| 亚洲国产精品有声| 久久久91福利姬| 激情五月天婷婷| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 国产2.3.4区| 日本肉体xxxx裸交| 国产精品视频内谢女人| 激激五月| 影音先锋中文字幕日本好一区二区| 免费农村成人少妇人妻Aa一区二区视频 | 久久久久久久久久久999| 国产成人超碰在线| 狠狠操狠狠燥| 91在线页| 久久久久久一日韩字幕无码| 国产高清不卡视频| 欧美性爽xyxOOOO| 青青草狠狠撸| 国产亚州精品美女久久久免费| 青青草女人天天干| 亚洲中文制服诱惑| 日本精品高清一二区一本到| 欧美加勒比| 一级黄碟在线观看| 26uuu性| 91色综合| 老熟乱一区二区三区四区| 欧美黄色图片| 日韩啪啪啪啪啪| 日韩综合成人免费视频| 99久草| 97精品中文字幕| 校园春色综合色| 国产精品久久久久无码AV会牛| 精品人妻一区二区三区不卡断 | 无码人妻丰满熟妇奶水区毛片| 嫩草一区二区在线观看| 亚洲一区在线观看欧洲| 超碰99re| 色偷偷男人的天堂麻豆| 天堂蜜桃无码视频一区二区| 日韩性爱网址| 欧美日韩国产人人| 上床不卡网站| 国产a级精品| 久久极品一区二区| 日日日日日| 欧美精品23| 男人天堂网站| 国产久9| 色亚洲欧美| 丰满人妻一区| 日日摸日日弄日日拍| 国产91丝袜 在线播放| 男人的天堂Va| 99re99在线视频| 亚洲男人天堂视频| 欧美人妻少妇| 亚洲本色精品一区二区久久| av网站免费线看| 波多野结衣AV无码一区| 国产综合网站在线播放| 日本熟妇人妻中出视频| 岛国AB视频| 亚洲九九夜夜| 99热免费| 91国产大片| 熟女AV一区| 国产精选视频| 蜜臀无码视频在线观看| 中国一级操逼视频| 97超碰国产精品| 熟妇一区二区三区| 九九超碰综合网| 亚洲精品97| 国产 热久久久久国产精品| 久久久国产成人一区二区三区在线| 天天干美少妇一区| 久久精品成人| 蜜臀99久久精品久久久懂爱| 东京男人天堂| 日本操大逼| 亚洲熟女乱色| 外国免费性情大片| 成人av在线播放| 99re在线观看| 久久久久久久久久久久欧美日| 91观看 国产白丝| 97免费在线观看| 无码少妇精品一区二区60岁老人| 欧美白嫩女HD| 蜜臀无码视频在线观看| 亚洲图片 91| 可以免费看黄片的视频| 99日韩| 啊啊啊轻点在线观看| 乱伦一区二区三区‘| 亚洲乱码国产乱码精网站| 欧美色五月| 欧美97超碰| 色九月婷婷| 大香蕉中文aV在线| 女人天堂av在线播放| 婷婷久草| 欧美性性性| 香蕉久久国产AV一区二区| 日韩资源网| 国产精品ⅴ无码大片在线看.| 中文字幕久久精视频久久大全| 亚洲av无码国产精品字幕| 久久综合18p| gogogo免费高清看中国国语| 欧美熟妇操操视频| 国产精品久久天天干| 国产精品欧美激在线| 日韩强奸av| 久插不卡| 亚洲一区二区中文字幕| 久久中久文96| 婷婷丁香成人| julia国产在线| 91+欧美| 成人一道本免费视频| 77国产精品| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 久久九七| 做爱A级亚欧| 96精品一区| 91在线免费观看处女| 99在线观看视频在线高清| 精品一区二区啪啪啪| 国产精品久久妻无码网站| 超碰97在线色男人??| 乱色视频中文字幕| 天天射天天| 天操天操夜操夜月月年年操操| 欧美白嫩女HD| 国产精品一区二区后入| 九九黄色网| 日韩免费三级黄片电影| 操一对老熟妇爽上天视频| 99天天超碰| 国产精品久久久久久久久AV大片| 中文字幕第9页萱萱影音先锋| 精品人妻一区二区蜜桃视频| 99精品伊人| 91亚·色| 屌逼传媒| 一区三区啪啪| 国产精品视频麻豆入口| J?P?NESEHD熟女熟妇伦| 欧美亚洲特P| 国产日韩中文字幕欧美| 狼人综合婷婷激情四射| 日欧操屄视频| 色情乱伦AV| 一级毛片久久久久久久女人18| 哈哈操 大香蕉| 色亚州人久干视频在线观看免费版| 亚州成人a∨| 歐美一級亂黃99在綫精品| 五月天丁香网| 色综合久| 天天日日夜夜| 91操操| 日韩黄色成人性爱| 日本午夜福利影院| 人人人人插| 亚洲最大成人a毛毛片| 欧美伊人久久综合网| 少妇一区二区三区高速| 在线视频 亚洲精品| 内射夫妻三片| 国产特级毛片AAAAAA高潮流水 | 国产探花精品在线| 中文字幕亚洲永久精品| 自拍大香蕉乱插| 在线视频日韩欧美国产| 激情色色| 九九热精品| 日韩美女久久一区二区三区| 日韩中文字幕熟妇人妻 | 大香蕉综合网| 91午夜无码| 国产人妻天天干精品| 五月大香蕉| 午夜福利在线视频1000| 丰满人妻一区| 伊人四虎综合| 人人人摸人人| 99久久久无码国产精品性男| www.狠狠干.coom | 国产精品久久久久久夜夜夜| 久久婷婷欧美| 九月伊人中文字幕| 国产乱伦性爱区| 午夜男人一级A片7777| 9/A片| 97爱b| 久久东京热久久| 丰满人妻一区二区三区四区| 99av| 国产欧美一级在线观看| 影音综合网| 99re6在线视频精品免费完整版安卓版| 日本一线产区和二线产区伦理片| 天天操夜夜操狠很操| 久久精品国产精品亚洲艾通辽熟妇 | 97天天爽| 天天综合网~91| 午夜超爽| 97在线欧洲| 色综合加勒比| 色综合久| 国产亚热在线久久| 十八禁视频一区二区| 9 9精品一区二区三区| 粉嫩久久久极品| 国产无码精品高清| 99re在线观看| 男人天堂2017| 久久精品中文字幕无码l| 日韩三级网址| 一级片视频啪啪| 台湾佬中文娱乐自偷自拍| 欧美夜夜| 亚洲色图美腿丝袜| 操逼免费视频无码国产| 免费网站观看www在线观| 黄色电影观看久久9| 欧美亚洲美少妇一区二区| 亚洲AV无码乱码| 熟女突然公开看18禁影片| 久久精品高清无码一区| 欧美国产伊人久久久久| 精品成人女人久久| 东亚亚洲无码高清| 偷拍99| 亚洲色色色| 色九色久| 日韩素人无码一区二区三区三州| 屁股久久久久久久久| 欧美大香蕉专区网| 天天干夜夜鈤| 欧美成不卡网| 亚州综合色| 伊人久久久日韩一区| av天堂5| 蜜臀久久99'精品久久久| 簧片免费看视频| 正宗无毛一线天嫩逼| 中文字幕在线24| 婷婷色综合欧美日韩| 狠插 制服 自拍| 青娱乐国产盛宴视频| 97超碰伊人| 99色色网| 操逼片国产| 96一区二区三区| 97国产亚洲中文在线| 天天插天天射| 欧美黄片免费在线观看视频| 后入人妻无码| 欧美日韩人人精品| 免费综合亚洲中文| 精品久久久久久中文字幕三区| 超碰97人人乐| 久久综合久色欧美综合狠狠 | 免费的很黄很污的全部视频| 九九亚洲| 东北毛片| 精品视频一区二区| 精品人妻久久久久一区二区三区| 熟妇艹鸡八| 婷婷成人五月天| 日韩成人网址| 天天干天天干天天| 色婷婷基地| 东京热男人的天堂精品| 1级午夜影院费免区| 激情天天视频| 免费人成毛片乱码| 综合久久少妇中文字幕| 韩国一级做a久久久久| www.国产高潮精品| 亚洲性爱乱操x| 日语五十路和六十路亚洲国产精品| 久久超碰com| 美女诱惑久久| 日韩欧美传媒一区国产| 天天综合网~91| 丰满人妻一区| 人人妻人人色一区二区三区| 男人天堂毛片| 久久久人妻| 亚洲国产一级黄色视频| 91一区二区三区蜜桃| 国产强奸91| 在线精品福利免费播放| 日韩成人电影AV| 亚洲精品一二三四区| 熟女精品一区二区在线观看| 夜夜爽夜夜摸夜夜操免费视频| com 首页 18岁 禁区 女优 免费 精选 同城 | 精品女人999| 亚洲精品色| 色偷偷男人的天堂麻豆| 午夜男人的天堂| 人妻精品视频一区二区三区| 亚洲国产精品无码AV在线| 丁香五月大香蕉| 色狠人在线99| 蜜屁av| 伊人网青青| 精品色色| 亚州图片第一页| 青娱乐国产剧情av一区| 精品性爱一二三区| 久久久久性熟视频| 久久有码视频| 一级二级三级黑人无码| 色五月亚洲| 亚洲天堂日本| V A在线| 伊人久久婷婷| 亚州欧美综合| 99视频这有这里有精品| 超碰国产在线| 综合大香蕉美。| 操B视频日韩无码| 91爽啪| 激情小说激情视频| 韩国午夜理伦三级好看| 国产天天看| 激情小说图片亚洲首页| 婷婷久草一区二区三区| 大香蕉狠狠爱| 日韩一级片| 久久精品国产97欧美精品亚洲| 国产丝袜美女在线一区| 亚洲情色婷婷五月天| 男人天堂2030| 国语人妻精彩刺激| 91制服丝袜中文字幕| 欧美日韩国内不卡| 国产中文字幕在线观看| 亚洲欧美在线观看免费| 97超色| www激情| 精品国产乱码久久久| 99色视频| 69精品| 国内黄色精品| 日小BB小视频| 欧美永久激情一区二区| 日语五十路和六十路亚洲国产精品| 五月丁香婷婷色| 精品国产乱码久久久久久久久久毛片| 艹精品| 欧洲大香蕉| 国产精品大香蕉| 99热精品在线观看| 亚洲黑丝在线| 国产乱伦搜索结果91P| 91女网站| 无码逼| 亚洲丝袜少妇在线| 嗯嗯,好大,好爽,好骚| 国产Aα| 超碰95| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 色原狠狠天天天| 亚洲,欧美,春色,另类| 天天日天天干少妇日| 99re6国产精品99re在线| 激情五月天插| 伊人国产AV| 亚洲激情 欧美色图| 熟女精品va中文字幕| 麻豆成人影音在线| 伊人991| 九九在线视频| 美女一区二区国产精品| 亚洲麻豆av一区二区| 天美av在线| 久久夜精品一区二区三区| 亚洲人妻一区二区三区| 秋霞成人一级在线观看| 蜜臀久久99精品久久久久久| 秋霞鲁丝午夜无码一区二区三| 黑丝少妇| 色噜噜狠狠色综合日日| 国产性爱乱伦AV| 八戒无码国产午夜福利| 国产一级高清免费观看| 国产97色在线 | 亚洲| 日韩激情视频| 青青草视频爽一爽| 久久麻豆一区二区| 丝袜加勒比| 中日韩久久久免费看| 日韩 欧美 国产 麻豆| 国产精品视频在线播放 | 欧美久久婷婷| 男人的天堂啪啪啪啪啪蜜桃不卡| 无码 有码 国产18p| 亚洲成人一区二区精品| av网页一区二区三区| 午夜电影在线观看无码专区| 国产欧美精选激情视频| 偷拍亚洲熟女视频播放| www久久国产精品| 亚洲AV无码秘 蜜桃臀国精产品| 天天网综合| 亚洲av青草久久一区二区| 91狠狠综合网| 日韩成人高清一区二区| 日韩人妻有码免费视频| 无码天天操| 女人爽到高潮潮喷18禁网站| 亚洲色综合| 婷婷五月天影院| 26uuu欧美| 91n美女视频| 欧美激情一区二区| 97欧美色综合| 久久久青青草| 超碰午夜| 久草网站免费在线观看| 五月婷婷激情| 四虎视频在线观看| 91亚洲最新在线| 天天影视色香欲综合网小说| 性爱Av免费| 五月婷婷综合网| 宗合情欲网| 亚洲在线综合| 视频一区二区免费在线| 亚洲欧美日韩精品久久久一区二区| 久久九九网| 日日橹狠狠爱欧美超碰| 四季av一区二区凹凸精品小说| 久久精品无码专区| se吧提供91精品国产91久久久久久 | 国产辣妈在线视频福利| 亚洲av乱伦色图网站| 久久婷婷在线观看视频| 婷婷激情五月综合| 高潮毛片无遮挡高清免费| www99热| 综合大香蕉美。| 国产强奸无码乱伦| 久久久com| 国产精品久久久久999| 国产高清午夜成人在线观看| 久久五月婷| 国产AV天美传媒一区二区三区 | 国模精品娜娜一二三区| 欧美激情久久久久| 亚洲精品乱码线路中文字幕| 中文字幕大片三级狠狠干| 麻豆天美在线| 无码抄逼网| 99热日| 国产精品久久99日日| 久久一区,青青青青草视频在线播放| 欧美综合1性辶| 牛黄色久午久| 五月天婷婷社区| 日本九九九九| 老熟乱一区二区三区四区| 中文字幕狠狠玩| 插入粉嫩少妇视频| 凸凹视频在线观看| 欧美后入式| 午夜一区| 男人的天堂va在线| 午夜天天碰综合视频| 蜜臀一区二区三区在线 | 91人人看| www.亚洲黄色| 久久久久9999妇女| 91久久精品中文字幕| 亚洲限制级| 日本欧美亚洲高清在线看| 久久久96精品| 长长久久免费视频| 久久人妻| 蜜桃视频一区二区三区| 日韩卡一卡二卡三在线| 97操97干| 天天日日舔舔| 国产AV精久久| 欧美日韩久久精品爱爱| 一区二区精品更新提醒| 人人操人人插人人摸人人干| 久操视频在线| 电影69乱码96| 视频国产精品未满十八禁止在线观看| 99热在线只有精品| 99国产精品久久久久久久成人热| 五月婷婷丁香中文字幕| 极品肉射| 91美女色视频亚洲| 色婷婷五月天| 青青久久手机线视频| 久久久不卡| 亚洲宗合网| JULIA人妻风俗店中出电影| 探花一区在线| 蜜乳AV免费观看| 亚洲高清综合网| 婷婷美人网| 四虎影库国产精品免费| 亚洲日韩成人性爱视频| 精品久久久久久无码| 91网站18| 人妻第一页| 97热视频在线观看| 国产偷仑| 国产一区二区三区不卡手机在线| 99操视频| 中文字幕性感少妇av| 操逼日批| A级在线视频| 草草草视频| 日本欧美不卡| 大香蕉视频啪啪啪啪| 亚洲色图欧美色图在线播放| 激情四射五月天| 北野未奈加勒比av| 狠色婷婷久久一区二区三区_| 国产91精品久久久久久久网曝门| 久久国产视频专区一二三| 混色激情av| 一区黄二区黄| 99国产精品免费| av亚洲天堂资源网站| 麻豆天美制片厂网站视频| 性色乱AV一区二区| 天天插天天插| 亚洲色 国产 欧美 日韩| 韩国免费播放一级毛片| 国产辣妈在线视频福利| 欧美黄色手机在线观看| 九九综合九九综合| 91看黄片| 亚洲精品人妻吞精av| 婷色五月天| 亚洲欧美综合色| 国产精品网站免费| 欧美骚少妇| 欧美热图99| 亚洲无992tv| 国产AV色黄看到爽| 在线人人人人人人精品超| 日韩国产成人自拍视频| 日本精品高清一二区一本到| 97任你吞精| 亚洲色诱惑| 九九成人精品| 日韩专区久久久| 极品销魂美女一区二区| 十八禁av无码免费网站APP| 96久久精品一二三区色欲| 色婷五月天| 综合97亚洲| 麻豆久久一区二区三区| 99国产在线 精品 视频| 色情综合网| 青青伊人久久| 囯产精品久久久久久久久久梁医生 | 婷婷色网| 日韩 成人 有码| 香蕉视频欧美一卡二卡| 国产麻豆福利av在线播放| 成年女人一区| 亚洲在线A| 无码操逼视频一下| 亚洲激情综合| 97伪v| 另类TS人妖一区二区三区| 黄色高清无码无码破解免费暗网 | 日韩AV熟女乱伦| 香港日本韩国人妇99www.wccm20| 欧成人在线| 97超碰超碰| 成人性爱电影一区二区| 天天狠| 玖日综合网| 人摸人人操人| 欧美三级不卡| 国语精品av| 92午夜免费福利视频| 超碰98综合网| 日本高清_区二区三区| 欧美日韩精品国产91| 久久精品国产99精品亚洲蜜...| 久久精品人体| 国产精品扒开腿做爽爽爽视频| 99久久婷婷国产综合| 亚洲精品黄码久久久久| 久久久激情| 免费观看一区| 91狠婷| 国产Av超碰| 欧美一二三区四五区| 日韩人妻一二三区视频| 亚洲性猛交| 手机午夜电影神马久久| 撸撸成人在线视频| 天天操天天日天天干| 91在线秘 男同| 综合激情一一91| 91黑丝美女| 中文字幕免费看| 亚洲色婷婷综合久久一区二区三区| 中文字幕免费在线观看| 日日干日日摸| 91天天| 美女尤物人人操| 大香蕉五月天| 97精品视频免费| 欧美少妇高潮视频| 人人操人人肉久久精品| 影视综合无码少妇| **一级毛片国产| 亚洲天堂东京热| 亚洲性图91| 久久产精品一区二区三区电影| 免费看黄视频亚洲网站| 日本三级中国三级99人妇网站| 偷拍亚洲高清图片| 亚洲AV色图| 人人操人人干xxx| 天天操夜夜操| 超碰免费欧美7| 免费观看一区| 乱欲一区二区| 久婷婷一区| 91老熟女视频| 久久午夜伦| 亚州熟妇精品| 国产黄色在线播放观看| 无码又爽又硬又激情免费视频| 操老熟女AV| 88xx成人精品视频| 亚洲丝袜色| 天堂综合网| 2011国产精品| 麻豆色99999| 99热啪啪| 中文字幕黄色一起草| 国产精品宅男免费| 人人噜夜夜操| wwwxxx日本爽| 77国产精品| 久久久精品无码亚免费| 色香在线| a天堂视频| 亚洲国产精品久久久久婷婷老年| 欧美极度丰满熟妇hd| 啊啊啊 在线| 日本肏逼视频在线观看| 久久久久久久久女黄| 亚洲成A∨人影院在线欢看| 欧美日韩天堂| 亚洲天堂 视频你懂的| 欧美亚洲激情| 91强奸乱轮| 九九九九9999| 欧美大片天天看| 色婷婷丁香| 精品欧美老熟女一二区| 97玖玖超碰| 激情网色| 亚洲啪啪综合?v一区综合精品区| 青青草日本中文字幕| 中文字幕成人理论在线| 久久少妇| 久久国产视频专区一二三| 日韩少妇一区二区三区| 和协影院中文字幕三区| 粉嫩av在线一区二区| 97久久久| 啊啊啊啊啊在线| 天天碰久久入| 亚洲男人的天堂AV| 亚洲人妻一区二区三区| 国产精品呦一区二区三区| 97色97干| 色婷婷综合久久久久中文一区二区| 91人人臊| 无码在线亚洲| 亚洲精品国语在线播放| 日日摸日日弄日日拍| 欧美一区二区成人一卡| 蜜臀精品1区2区| 婷婷丁香五月激情啪啪| 黑人无码一区二区| 亚洲精品国产日韩无码AV永久免| 亚洲97精品| 性一级黄色录像片网站导航| 久久熟女久| 少妇高潮喷水无套久久久久久| 亚洲限制级在线| 亚洲日韩精品在线播放| 国产一区二区三区精品观看啪| 中文字幕一区二区三区字幕| 久久婷婷电影网| 亚洲欧美一区二区网址| 欧美18老人禁| 中文乱码字字幕在线第5页| 国产午夜精品理论片a大结局| 中文操逼字幕| 97欧美视频| 国产精品久久久久久久无码AV| 啊啊啊啊操死我| 国产肏逼网站| 亚洲97精品| 国产成人拍国产亚洲精品| 韩国一级AAA| 日韩探花精品在线视频| 超碰成人免费| 国产精品色| 国产成年精品高清在线观看91| 天天插夜夜操| 人人摸人人添人人操|