日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(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)度算法 簡介面向大二學(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)頭文件、測試主程序、可直接運(yùn)行的exe以及pdb、obj、tlog等編譯調(diào)試產(chǎn)生的中間文件工程目錄清晰解壓后用Visual Studio 2019打開即可復(fù)現(xiàn)運(yùn)行效果。已有207名學(xué)生學(xué)習(xí)下載說明該選題在課程設(shè)計(jì)場景中具備一定代表性。通過該項(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ù)這背后對應(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)對你為什么要這樣設(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)先級調(diào)度。第二任務(wù)輸入方式。多數(shù)要求從文件或控制臺讀入任務(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ò)峰這些場景決定了算法能否正確處理排序穩(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í)間。表面上簡單但隱含了一個(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è)輸出的樣例把字段對齊了再動(dòng)鍵盤。2.2 數(shù)據(jù)結(jié)構(gòu)選型優(yōu)先隊(duì)列、普通隊(duì)列和數(shù)組各司其職任務(wù)調(diào)度器的核心數(shù)據(jù)結(jié)構(gòu)是就緒隊(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)先級調(diào)度一個(gè)循環(huán)隊(duì)列用于FCFS和RR。二者都以Task指針為元素通過相同的隊(duì)列接口操作。下面這個(gè)表是我放在課設(shè)報(bào)告里的選型對比數(shù)據(jù)結(jié)構(gòu)適用算法核心操作時(shí)間復(fù)雜度循環(huán)隊(duì)列FCFS / RR入隊(duì)、出隊(duì)、判空O(1)二叉堆最小堆SJF / 優(yōu)先級調(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è)場景下更簡單不需要頻繁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ù)是從文件還是控制臺來的。輸出層負(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)先級搶占只需在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)化成了簡單的枚舉判斷代碼里一眼能看清。這個(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的代碼量大幅減少從開始到讀入?yún)?shù)再到輸出結(jié)果不超過60行。三種算法的推進(jìn)邏輯分別是FCFS按到達(dá)順序入隊(duì)任務(wù)執(zhí)行完才讓出CPUSJF每步從最小堆堆頂取任務(wù)同樣不可搶占RR每個(gè)任務(wù)最多運(yùn)行一個(gè)時(shí)間片沒做完就重新入隊(duì)尾部。對比來看SJF和FCFS都是運(yùn)行到結(jié)束只是選擇順序不同RR才會(huì)在運(yùn)行中途打斷。答辯時(shí)我會(huì)主動(dòng)說出這個(gè)區(qū)別表明算法并不是簡單換排序。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è)黑匣子問題。輸出格式我建議用表格對齊方式比如每行打印任務(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先將堆頂與末尾元素交換并下沉正好對應(yīng)堆的兩個(gè)核心操作。MAX_TASKS采用宏定義如#define MAX_TASKS 100避免動(dòng)態(tài)擴(kuò)容引出的指針失效問題。compare函數(shù)是優(yōu)先級判定的核心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)度主體的最簡版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ì)稍慢但邏輯最簡單。如果追求效率可以直接跳到下一個(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)場用同一份任務(wù)文件分別跑三種算法對比輸出效果比只看代碼好得多。參數(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í)間反而像最長作業(yè)優(yōu)先。 原因最小堆的compare返回值語義與預(yù)期相反。我見過很多初學(xué)者寫compare時(shí)參考qsort的寫法結(jié)果在堆的siftDown里又套了一層balance 0的符號翻轉(zhuǎn)負(fù)負(fù)得正。 解決統(tǒng)一約定compare(a,b) 0 表示 a 優(yōu)先級高于 b堆頂永遠(yuǎn)存放compare值最小的元素。寫完compare后先把三個(gè)任務(wù)服務(wù)時(shí)間6、2、4按順序插入堆再全部彈出檢查是否得到2、4、6。這個(gè)測試只需10秒能避免后面所有算法結(jié)果錯(cuò)亂。我一般會(huì)在單元測試代碼里直接寫上這個(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á)的測試數(shù)據(jù)一切正常換成錯(cuò)峰到達(dá)后程序要么長時(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)象程序測小數(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ì)場景下直接在棧上定義固定大小數(shù)組Task tasks[MAX_TASKS];并先讀入任務(wù)數(shù)再檢查是否超過MAX_TASKS。如果一定要?jiǎng)討B(tài)分配就一次性malloc最大任務(wù)數(shù)不要做realloc。對于隊(duì)列中的指針只要任務(wù)數(shù)組地址不變指針始終有效。檢查泄漏時(shí)在gdb或valgrind下跑一遍完整測試會(huì)大大降低翻車概率。5.5 輸出結(jié)果與手算不一致平均周轉(zhuǎn)時(shí)間算錯(cuò)現(xiàn)象調(diào)度順序看起來對但平均周轉(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)比對。這里我踩過一個(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種算法的測試文件跑完整流程并對照手算結(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í)行序列并量化對比再用同一組數(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)出對數(shù)據(jù)結(jié)構(gòu)的理解。演示前準(zhǔn)備一頁打印紙左側(cè)輸入、右側(cè)三個(gè)算法的輸出老師提問時(shí)不會(huì)因?yàn)楝F(xiàn)場敲命令而冷場。如果時(shí)間充??梢渣c(diǎn)亮一個(gè)debug模式開關(guān)打印每個(gè)時(shí)間片的就緒隊(duì)列內(nèi)容這會(huì)讓演示顯得很扎實(shí)。這套完整的課程設(shè)計(jì)資源包含可編譯運(yùn)行的C源碼、任務(wù)生成與測試用例、設(shè)計(jì)文檔框架和答辯PPT提綱拿到后可以直接對照修改。建議在動(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)容比對。從那以后我每次做調(diào)度類的課程設(shè)計(jì)都會(huì)強(qiáng)制自己走一遍手算結(jié)果 → 程序輸出 → 差異分析的流程。希望這份方案能幫到你少踩幾個(gè)坑。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产精品又黄又猛又粗| 天天射网| 91美女在线视频| 97精品一区二区三区免费| 欧亚成人| 国产女同性恋视频| 青春草莓视频在线观看网址| 一区二区你上我| 动漫av中文| 亚欧免费| 超碰人妻久久人妻中文97| 秘书高跟黑色丝袜国产91在线| 日本熟女中文字幕一区| 99RE在线视频精品,这里只有精品| 加勒比中文av| 97中文天堂| 99久久久| 中文字幕大片三级狠狠干| 清纯唯美第一页| 国产h片在线观看视频| 成人久久精品| 手机在线A片| av久日| 免费国产电影一区二区| 国产天天骚| 97超碰超碰| 久操99| 亚洲日韩天堂| 无码欧美有限公司| 国产最火爆久久国产网站网站| 啊啊啊用力在线观看| 91欧美亚洲| 日本久操视频| 人人操人人干xxx| www.四虎在线| 美女熟妇色| 久草视频制服诱惑| 99国产精品视频尤物| 狠狠夜色午夜久久综合在线| 8050午夜少妇无码| 玖玖久久久| 久久黄黄| 伊人操你| 亚洲日韩乱码中文无码蜜桃臀网站| 国产精品原创巨作?v网站| 亚洲色图伊人网| 自拍大香蕉乱插| 97超碰欧美中文字幕| 久都青青视频| 色在线综合| 东京热熟女亚洲视频网站| 日本色色色色色视频| 欧美超碰人妻97| 九九伊人网| 乱欲视频| 亚洲素人综合| 日韩在线视频1234| 天天视频黄网站| 欧美日本不卡在线| 精品然女一区二区| 五月丁香综合啪啪| 人人看人人插| 久久久久99999| 9精品久久| 国产精品三级视频网站| 国产一区二区三区免费视频在性观看 | 目产99999久久999| 69超碰综合| AA级电影三区| 韩日欧亚a级| 清清一区二区三区四区不卡视频| 精品一区二区成人动漫| 国产精品女久久久久av爽| 国产青青综合伊人| 久久久久久久久久黄色网| 精品一二三区久久AAA片| 免费人成毛片乱码| 日本免费二区三区| 色拍偷亚洲| 久久色人体| 男女激情黄色网址| 中国少妇XXXX做受| 日韩精品色呦呦| 我想要 啊 啊 啊| 性交一区二区在线播放| 樱花草社区www中国| 成人性爱电影一区二区| 鸡巴插逼视频| 日韩熟女操逼| 亚洲另类春色| 在线视频资源| 91高清欧美| SUV一区二区在线看| 亚洲精品丝袜-不卡成人免费……| 国产精品分类在线观看| 亚洲成a人v欧美综合天堂下载| 97精品97久久| 蜜桃丰满熟妇av无码区不卡| 青青草玖玖爱| 亚洲精品天天影视综合网| 99精品久久| aaaa少妇高潮大片| 老司机射| 美国日韩黄色片| 八戒无码国产午夜福利| 无码不卡八戒| 成人乱人伦一区二区| 亚洲男人综合| 日本国产欧美一区三区二区| 日本成人在线不卡一区二区三区| 欧美乱欲| 成人免费性爱视视| 26UUU欧美日本| www国产无码| 精品视频一区二区| 嗯啊抽插大香蕉网页| 日韩黄片视频试看| 日韩欧美成人综合在线| 国产熟女免费观看久久| 免费强奸av| 欧亚免费视频| 人妻嗯啊啊在线播放| 97色婷| 91精品久久久久久77777| 欧美系列在线一区二区| 国产成人自拍视频在线| 加勒比大香蕉视频在线| 日韩BBN| 99热日| 日韩大香蕉精品在线视频| 内射黑丝袜| 久久噜噜噜精品国产亚洲综合| 亚洲drav色图| 久操免费观看| 神马久久久久久伦理片| 在线观看日韩av不卡| 翔田千里av一区二区三区| 26uuu欧美| 99re3这里只有精品| 亚洲涩涩| 日韩色| 91免费看一区二区三区| 午夜超爽| 免费视频a级毛片免费视频| 激情五月综合网| 少妇二级| 久偷拍欧美日韩三区| 91操熟女视频| av在线播放国产一区| 亚洲中文国际强奸字幕| 激情网五月天| 91欧美另类| 骚货操死你| 视频一区二区免费在线| 成人网站 免费观看| 精品亚洲国产成人AV制服丝袜| 人妻加勒比东京热| 精吧天堂| 国产强奸AV在线| 333kkkk·亚洲com久久| 射 色综合| 国产精品suv一区| 午夜啊啊| 思思热久久成人| 国产这里只有精品| 69久久久久久久久久久久久| 精品国产Av无码久久久伦古装| 精品人体无圣光凹凸| 熟女乱伦二区| 亚洲综合情色| 成年人黄色视频免费| 大色综合网| 2025亚洲男人天堂| 午夜传煤十二区精品| 无码高清操逼网址| 久操B网| 伊人嫩草| 亚洲好看强奸乱伦| 亚州乱码中文字幕综合久久久| rivers-china.com| 日韩Va亚洲va欧美Ⅴa久久| 性欧美另类高清| 91在线国产后入风骚翘臀美女素人| 色吧5亚洲| 欧美亚洲综合色| 97亚洲自在精品在线观看| 精品欧美А∨无码黑人大荫蒂| 青青草九九九九九| 九九九九九精品视频| 看一级特黄a大一片| 欧美有码亚洲中文字幕一区二区三区四区| 台湾佬大香蕉| 中文字幕在线播放2中文字幕在线观看2| 久久草视频污视频| 国产亚洲精品无码三区| 久久久久网站-538在线视频-欧美永久乱码| 欧美一级二级三级| 超碰人人妻| 四季av一区二区凹凸精品小说| 日韩欧美午夜一区二区| 久插不卡| 色呦呦呦在线观看视频| 999色欧美中文字幕| 国产操逼逼网| 亚洲成人在线资源| 人人妻人人爽| 欧美激情一| 五月天开心网| 欧美97网| 青青草公开在线免费不卡视频| 97精品久久久久久久| 91n美女视频| 亚洲高潮少妇| 丁香五月婷婷五月| 校园春色 男人天堂 | 深田咏美亚洲精品福利社| 不卡啪啪视频| 婷色五月天| 亚洲图片欧美日韩| 情侣开房子拍 日韩无码 女的很漂亮| 五月丁香色综合| 99热伊人| 亚洲综合97中文网| 国产精品探花在线| 亚洲国产一区二区三区四区国产| 超碰人人在线| 日韩999| 99久久九九| 日本肏逼视频在线观看| 99热只有这里有精品| 国产精品人妻免费精品| 免费福利视频中文字幕| 新久久AV| 欧美黄片视频在线观看免费 | 美女十八禁| 玖玖无码超碰| 亚州欧美色图| 国产精品一级毛片不卡视| 亚洲人妻在线一区| 丰满岳乱妇一区二区三区| 亚洲日本激情| 久久久免费的精品| 粉嫩av久久一区二区三区| 亚欧性爱ab| a天堂视频| 91精品伊人久久久大香线蕉91| 国产小黄片在线免费观看| 日本人人操人人操| 97人妻色| 欧美极品色| 亚洲国产97| 欧美性爽xyxOOOO| 天天色天天干天天爱| 天天色黄色影院天天操| 国产区91柔拿会所技师| 日本精品一区三区| yazhouzaixian| 青青草好吊色| 人妻一区视频| 国产AV超爽| 国产按摩一区二区三区| 综合欧美日韩在线| 天天夜夜rb| 超碰在线人人射| 欧美精品xxxwww| 99自拍视频在线| 久视频在线观看| 91精品国产乱码| 久久久91| 丁香六月激情| 日韩一级二级三级免费看完整版国语版 | 丁香五月婷婷啪啪| 免费网站观看www在线观| 久操影视| 免费观看国产不卡av| 久久性爱城| 天天综合网91入口| 美女黄页网站| 芊芊操逼视频无码| 久久国产视频专区一二三| 精品在线78| 亚洲 自拍偷拍 欧美| h在线看免费版在线看| 五月天综合网| 少妇高潮流水av免费| 亚洲欧洲综合视频在线| 中文字幕精品久久久久人妻红杏ⅰ| 日韩情色一区二区| 国产三区免费在线观看| m欧洲一级午老| 美女性91| 91视频观看网站| 欧美亚洲中文字幕| 国产激情av女片自拍| 天天干天天日天天射黄色大片| 99草精| 尤物黄色在线观看网站| 在线观看日韩av不卡| 精品999日本| 加勒比综合88| 伊人久久88国产女| 天堂网亚洲区手机版| 青草青草久热| 懂色av中文字幕一区二区三区天美| 国产在线激情视频| 久久免费看高潮毛片韩国| 国产一线二线三线av| 国产操偷| 免费精品AB| 另类亚洲一区二区三区| 欧中日成人免费影视| 爱爱啊啊啊| 久久精品国产精品亚洲艾通辽熟妇 | 国产久久一区二区| 国产成人无码啪| 国产精品 午夜福利| 加勒比综合88| 美欧老女人97| 久久夜黄色无码A级大片| 免费久久9999| 一区操逼日比视频| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 国产精品探花色| 麻豆九九九| 三男一女不戴套的A片| 少妇六月天| 国产乱色国产精品免费视| 日韩午夜国产| 成人aⅴ一区二区三区| 超碰98综合网| 91干熟女| 97精品免费视频网站| 爱干爱射网啊啊啊| 国产日韩区| 大色综合| 天天日天天屌天天操| 日韩 欧美 另类 人妻| 内射卯月麻衣| 天天操综合网| 日韩精品 欧美激情| 精品人妻一区二区三区-国产精品| 久久久少妇| 日夜干射色啊| 2024人人操人人摸| 玖草在线视频| 97超碰国产亚洲精品| 激情六月婷婷| 国产精品麻豆免费视频| 久久精品男人的天堂| 天天弄天天操| 26uuu国产亚洲综合| 亚春色色| 岛国人妻少妇av在线观看| 国内偷自视频区视频综合 | AV色五月天| 色啪网| 18啪啪手机免费性爱| 国产成人啪一区二区| 亚洲丝袜二区| 亚洲成?V人片在线观看福利| 国产97免费视频| 中文字幕丝袜美腿| 天天摸,夜夜摸| 国产精品久久久久久久AV大片| 超碰97资源网亚洲| 欧美性爱网97| 白丝1区2区3区| 一级黄色影片| 午夜福利免费精品视频| 欲香欲色| 国产美女高潮视频| 亚洲熟女乱综合一区二区三区| 1禁看欧美黄片免费看| 成人五月天丁香激情综合| 亚洲加勒比色图| 日韩伦理视频| 日本美女性生活久久久久久久| 日本三级一区二区 在线| 亚洲成人精品在线一区| 日日爱99| 午夜福利一区二区三区四区五区色婷婷| 久久久久骚| 九色婷婷| 欧美日韩亚洲一区二区在线观看| 91夜色| 中日韩久久久免费看| 亚州综合AⅤ| 日韩欧美成人大香蕉| 激情丁香婷婷| 五月婷婷五月天| 国内自拍 日韩激情 99| 人妻人人做人人澡人人爽欧美一区| 人人操欧美风骚| 高颜值美女口爆高潮浪叫| 久久手机好看网站| 内射黑人| 一区,二区,三区视频| 日韩情色视频| 久久嫩草国产成人一区| 亚洲色啪| 麻豆黄色五月天| 综合色图亚洲欧美| 亚州伊人色综台| 丁香五月天视频| 天天爽天天干| 9 7超碰在线免费观看| 北条麻妃99精品青青久久| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 97超碰色中文字幕| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 亚洲影视第一页| 久久久免费视频18| 春色综合网| 78精品| 日韩精品一区二区人人人| 伊人欧美大香蕉视频| 国内精品99999| 91人人| 尤物av网站免费在线播放| 青娱乐休闲视频在线观看| 97精品一区二区视频| 伊人久久综合影院精品久久久| 无遮挡一级毛片视频免费的| 性色av网站| 欧美丰满熟妇XXXX性ppX人交| 久久色情| 97操97色| 蜜臀99久久精品| 日日摸日日碰夜夜爽视频| 丝袜综合网| 国产精品网址| 欧美日韩国产黄色片| 免费的黄片有限公司| 色狠狠 - 百度| 大香蕉丝袜一级片| 国产综合久久久鬼色| 青青草一本道福利视频| 大香蕉乱级| 日韩黄色av中文字幕| 国产精品一级毛片不卡视| 亚洲成人福利电影免费| 欧亚乱色熟一区二区三四区| 天综合网欧美| 久久少妇| 无码高清专| 超碰97爽| 黄站在线免费观看| 思思视频免费看网站| 亚洲色图亚洲无码强奸乱伦| 麻豆AV一区二区| 懂色av中文字幕一区二区三区天美 | 97er欧美性| 亚洲精品国产拍免费91在线| 男人的午夜天堂| 亚洲成人免费在线| 91色色综合| 97碰| 99精品久久久久久久婷婷蜜桃| 五月丁香啪啪| 九九热精品视频六| 欧美日韩国产高清在线一二三区 | 久久伊人影院| 亚洲欧洲精品视频发布| 免费的av网| 春色91| 色色五月丁香| 久久色AV线| www久久国产精品| 国产伊人自拍| 精品九区| www.99热| 日本男人天堂| A V少妇特黄三级| 日本 情色 1区2区3区| 在线有码中文字幕| 欧美色天堂网在线视频| 亚洲天堂精品日韩电影| 爱爱动态120秒| 欧成人精品一区二区三区| 午夜无遮挡男女啪啪视频| 五月天伊人| 久久精品人妻一区| 欧亚不卡| 亚洲激情综合另类男同| 美骚妇av高清在线| 欧 美 自 拍 偷 拍| 青青草乱入乱欲视频在线观看| 91人妻人人澡人人爽人人精品| 婷婷五月天av| 欧美不在线| 亚洲欧美国产其他二区| 男人的天堂1024| 日本三级韩三级99久久| 精品欧美乱码久| 超碰免费在线| 内射老妇BBWX0C0CK| 日日干日日操五月天伦理视频| 老熟女网站| 久久久久无码| 91w欧美| 国产午夜视频| 亚洲精品毛片在线观看| 久久久久婷婷精品av电影| 国产熟女乱论| 国产日韩久久| 五月婷婷hd| 精品午夜福利国产一区二区在线观看| 熟女高潮合集-永久久久-成人AV| 黄色大香焦1级‘′‘| 天天操妹子| 婷婷三区| 中文字幕91页| 奶水 人妻 哺乳 在线| 亚洲国产综合久久久性感熟妇| 国产精品久久久久久久久久梁医生| 久久伊人青青草| 亚洲精品亚洲人成在线麻豆| 在线观看午夜婷婷久久久久清性观看| 久久伊人大香蕉| 亚洲日韩美女丝袜美腿人妻视频| 久热久一区二区三区| 天天操夜夜操狠很操| 久久日韩肥臀| 欧洲乱码视频| 激情久久久| 密臀在线一区尤物| 久久99草| 一区二区三区 丝袜 高跟 美腿| 日韩一级久久毛片| 青青久久久| 嗯啊啊啊轻点视频| 综合激情婷婷| 国产Aα| 九九九国产| 久久精9| 亚洲欲色9532548967一区| gogogo免费高清看中国国语| 在线洲亚线| 国产美女精品| www.超碰| 六月丁香啪啪| 中文字幕aⅴ在线视频| 91综合网站| 91少妇香蕉久久精品| 精品国产一区二区久久| 91麻豆va国产精品| 国产日逼视频| 国产在线播放成人免费| 中文字幕在线免费观看| 色偷偷综合91久久噜噜| 日韩懂色网| 九九九九久久久| 欧美一级色| www..com操老师| 欧美黄页| 日日操夜夜操天天操免费观看麻豆| 日本高清加勒比| 大香蕉十区| 人妻久久久久久久久久久久久久久| 人妻 丝袜美腿 中文字幕| 最新国产精品| 最新亚洲黄色免费电影| 欧美91变态| 人妻喷水| 99精品无码| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 熟女人妻一区二区三区| 国产成人自拍视频视频| 成人免费视瓶| 夜夜欧美 | a'v在线资源| 中文字幕一区二区三区50路| 怡红院成人视频| 亚洲日韩美女丝袜美腿人妻视频| 清纯唯美第一页| 无码人妻毛片丰满熟妇精品区 | 国产亚洲中文不卡二区| 久久综合国产精品国产| 午夜寂寞欧美| 国产97视频免费观看| 国产免费操逼| 在线可观看的黄色网址| 国产69精品久久久久99尤物| 亚洲成?V人片在线观看福利| 69精品久久久久中文字幕| 亚洲成人福利电影免费| AV九九| 精品一区二区三区蜜桃臀赵总 | www.操| 人妻精品综合中文字幕在线| 国产视频一区二区在线观看| 国产自产91区13区| 青青草国产盗摄一二三区| 吊色| 欧美色97| 久久久少妇| 操婢日韩| 操一区| 色噜噜狠狠色综无码久久合欧美| 青青国产精品在线| 厕所偷拍在线| 日日碰视频网| JuliaAnn丝袜熟女系列| 26uuu最新| se吧提供91精品国产91久久久久久| 都市久久精品激情亚洲| 黄片在线免费在线观看| 日韩人妻少妇 一区二区三区| 久久做97| 亚洲影视高清三级-草1024榴社区入口-品爱AV| 亚洲图片视频小说| 黄片视频观看| 国产成人网址| 超碰天天久久79| 夜夜夜夜爽| 97视频在线播放| 激情五月天社区| 欧美 中文字幕 一区| 精品一区二区三区四区外站 | 被体育老师抱着c到高潮| 97天天爽| 亚洲国产中文字幕| 欧美加勒比| 欧美一区二区一级岛国大片| 激情五月天网站| 亚洲色丰满少妇高潮| 亚洲综合97| 99热只有这里有精品| 天天干天天操天天拍| 日本精品免费一区二区三区四区| 久久9精品网站| 久久不卡一区二区| 日韩婷婷| 久久久久久中文版| 亚欧成人一级片在线播放| 日日碰狠狠添天天爽超| 欧美91在线+|+欧美| 久久99国产精品| 综合啪啪| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 后入式免费视频| 亚洲精品a人片在线观看视| 九九九午夜| 精品一区二区三区丰满熟女-亚洲欧美一区| 91免费看一区二区三区| 热九九精品| 999色欧美中文字幕| 国产91乱伦| 美女毛片999| 亚洲中文字幕在线视频一区二区| 国产av白丝| 哑洲在线| 国产小黄片在线免费观看| 欧美日韩亚洲五月天婷婷| 天堂v无码免费视频| 97亚洲一区| 91人人操| 日韩精品三区四区| 日本性感人妻91| 极品五月天噜噜| 中文一区二区三区影院| 亚洲欧洲小说图片视频| 亚洲天天综合| 国产av尤物| 大香蕉99999| 97精品国产97久久久久久免费| 超碰97国产欧美| 啊…啊…操我用力操我| 91久| 日韩一999精品| 国产JDAV无码视频在线观看| 欧美色图亚州激情| 国产高清无码一区三区二区| 60秒免费小视频| 91丨熟女丨丰满熟女| 91老司机精品| 91丝袜美女国产| 尤物av网站免费在线播放| 99精品丰满人妻无| 国产乱伦亚洲| 97视频900| 无码国产精品久久久久| 欧美92| 91精品电影18| 欧美aa一级片| 国产二区三区粉嫩在线| 亚欧国产无码精品在线| 欧成人精品H无码| 亚洲熟妇乱女区二区三区| 免费观看国产不卡av| 四虎影视永久在线观看精品免费网站| 免费观看的av| 人人贴人人摸| 97超碰国产亚洲精品| 盗摄 精品 另类 一区| 久久亚洲AV无码白度| 精品人妻一二三四区视频| 久久久com| av毛片aaaaa免费看| 日本天堂在线播放| 五月天婷婷影院| 色综合一区二区三巨| 亚洲欧洲综合av在线| 亚洲女人毛茸茸91| 欧美日韩222| 中文字幕一区电影在线观看| 另类图片天天影视| 青青草字幕AV| 日本一区二区三区欧美日韩中文字幕| 久久无码电影| 欧洲性爱无码区| 中文欧丝袜诱惑| 欧美久久九九| 色官网在线| 你懂的在线观看区国产| 日本ZZ高免费A级视频| 97五月天| 伊人久久大香大香线蕉中文| 影音先锋少妇| 一本色道久久综合亚洲二区三区| 99婷婷| 国产精品香蕉| 香港久久久| 日韩97视频| 嫩草 人人网精品| 国产欧美美女免费观看视频| 91操人| 在线观看高清AV| 九九九九九九九| 亚洲天堂另类小说男人| 日韩人妻资源网| 深田咏美亚洲精品福利社| 精品亚洲国产成人精品| 一起草在线视频| 亚洲日韩狠狠撸视频| 日本中文字幕一区| 狠狠搞 亚洲91| 亚洲情色一区三区| 久久久久久久久久久久久9999| 一块操欧美性爱| 操逼视频免费日韩无码| 最新日本中文字幕| 黑人娇小av在线播放| 懂色av一区二区三区天美传媒| 国内外毛片在线观看| 久久r精品| 一区超碰一区| 午夜精品人妻二区三区| 色偷偷人人玩人人舔人人操人人摸人人爽 | 欧美牲| 美女91网| 99999久久精| 超碰是碰在线观看| 中文字幕一品色图| 国产精品另类一区大香蕉| 躁躁日曰躁2020| 97日视频| 看黑人AV不卡| 免費人妻夜夜爽天天爽爽一区| 大鸡吧尹人在线| 99热综合在线| 内射中出日韩在线观看视频| 91女人的网站| 丝袜内射| 欧美72网页| 97视频在线视频| 一本色道久久综合熟妇| 日本天堂在线播放| 欧洲色综合| 久久久久久九九九九| 搡老熟女免费视频| 黑人美精品 A片| 日本五十路熟女一区二区| 九九久久综合| 亚洲国产第一页综合视频| 97视频观看| 国产免费一区二区三区最新不卡| 精品人妻夜夜草| 风月影院男女十八禁| 亚洲另类色综合网站| 97超碰色色| 日韩99精品视频综合区| 日va操| 亚州色图第三区| 国产高清不卡视频| 天天干1区2区在线| 丁香色狠狠色综合久久小说| 国产精品久久久久无码Av网曝门| 懂色AV蜜臀无码精品APP| 亚洲宅男天堂| 亚洲吊色| 天天日天天干少妇日| 亚洲激情在线观看一区| 欧美日韩操逼嗦吊| 97精品视频免费| 久久亚洲日韩熟女精品| 人妻精品一区二区三区| 欧美少妇色图| 91一区二匹| 日本高清_区二区三区| 嗯啊不要在线| 性生活无遮挡纯毛片在线看| 一区二区视频在看| 欧美强奸乱能| 久久精品人体AV| 青青草玖玖爱| 人人干人人操人人爱| 亚洲人妻中文高清| 亚洲色图加勒比| 久久老熟女| 国产精品网址| 欧美美女啪啪视频| 欧美成人色| TS人妖另类精品视频系列| 欧美强奸一区二区诱惑| 精品无码久久久| 91性生活久久久| 粉嫩av一区二区三区天美传媒 | 亚洲男人bt天堂| 97精品中文字幕| 日韩一级性爱无码| 久久精品99| 伊人网一本| 美中日韩无码| 麻豆区99999| 97超碰欧美中文字幕| 国产精品午夜高潮呻吟久久av| 亚洲熟妇乱女区二区三区| 日韩欧美女求操每天更新| 欧美性巨大╳╳╳╳╳高跟鞋| 性欧美另类高清| 91中文字幕制服丝袜免费视频| aaaa黄片| 国产一区二区久久| 免费啪啪av| 国产传媒美日韩av| 思思热国产高清| 97干日韩| 青娱乐手机日韩在线视频| 99热精品在线观看| 亚州AV无码国产精品| 日韩少妇丰满亚洲| 国产真乱mangent| 日本一区二区三区精品| 91精品91久久久久77777俄罗斯老妇姓x| 久久久com| 日日夜夜骑| 国产一区二区三区影片| 蜜桃臀一区二区三区久久| 亚洲精品aa久久伊人| 色综合久久夜色精品国产天堂| 激情抓乳插进去啪啪啪日韩 | 国产农村妇女精品一| 免费久久一级毛片大黄| av操操不卡| 日本十八禁免费看污网站| 91少妇香蕉久久精品| 久久精品日韩| 国产高清在线自在拍69| 色五月婷婷色| 亚洲a色| 91美女视屏| 日韩特级毛片免费观看全集| 欧美人妻二区三区| 日韩国产欧美伦理在线| 天天影视之亚洲综合网| 自拍偷拍2025在线观看| 成人三级片一区二区三区视频| 亚洲精品xxx| 蜜桃丰满熟妇av无码区不卡| www.久久久久| 色情亚洲日本成人| 日韩av一级黄片| 日逼97| 91neishe| 夜夜操美女| 伊人久大| 素人播放一区| 内射小黄片| 视频在线97| 久久9精品视频| 麻豆综合一区av| 日韩特一级久久| 亚洲精品久久久久久久久豆丁网| 国产又黄又粗又猛大片| 亚洲欧美综合网站| 国产丝袜美女诱惑| 国产美女自拍AV| 蜜桃臀av一区二区| 伊人久久大香蕉线AV五月天| 色哟哟511老熟女| 亚洲综合97| 欧美影音在线| 这里只有精品久久| αⅴ天堂| 国产强奸乱伦第1页| 久久久久9999妇女| 人妻久久久久久| 26uuu性| 色九九久九九| 欧美 熟女 日韩| 美国美女AV在线| 欧美性爱第一区| 亚洲图片欧美色图| 熟女熟妇伦久久影院毛片一区二区| 成人性爱美曰韩| 污色区网站| 久久97视频| 青青草吊丝| 婷婷色五月激情| 国内毛片婷婷六月色| 操b在线观看| 色婷婷A V一二三四区麻豆综合| 欧美精品丝袜久久久中文字幕| 亚洲夜夜欢无码一区二区 | 操逼www.| 亚洲有码视频二区| 黄页网站成人免费| 亚洲色图欧美色图制服诱惑| 韩国一区二区精品亚洲| 成人AV在线电影| 91强热人妻| 91欧美经典| 久久久久久久久久久久欧美日| 熟妇人妻精品一区二区视频色欲| 最新国产精品久久精品| 精品亚洲黄色片 国产精品导航一区二区| 97ai亚洲| 91美女視頻| 东京热精品97综合网| 人妻精品综合中文字幕在线 | 9丨亚洲一区二区在线| 亚洲综合伊人无码久久| 亚洲诱惑天堂 | 色亚洲欧美| 91久热| 熟女网站最新| 欧美第38页| 精品国产污一区二区三区| 五月天色图| 啪啪一区| 久操大香蕉手机视频在线看| 亚欧性爱ab| 青娱乐日韩无码| 一区在线观看中文字幕| 欧美性爱第一页久久| 亚洲色图综合| 日本色色色网站免费看不卡| 欧美激情激情xxxx欧美专区| 美女啊啊啊啊啊| 久久久久久久97| 欧美天天综合网| 中韩中文字幕在线观看| 色悠悠伊人网五月天| 无套后入双马尾| av天堂加勒比| 欧美自拍网| 日本一二区不卡| 91免费看一区二区三区| 91老熟女| 成人av福利在线观看| 狠狠操夜夜| 国产女人和拘做爰视频 | 黄色av网站在线播放| 亚洲一级性爱视频免费看| 亚洲美女自拍偷拍视频| 99热这里只有精| 六月丁香网| 黄色成品网站| 免费成人在线熟妇网| 亚洲色悠悠久久88| 九九九九精品在线| 午夜性刺激视频免费观看| www.亚洲黄色| 在线国产福利网址导航| 久久性爱免费送| 插入综合网| 亚洲综合影视| 台湾佬中文娱乐网久久久久久久久久com | 厕所偷拍在线| 欧美午夜视频| 日本一级不卡一二区| 久区视频| 国产精品人人爽人人做可爱福利| 人人艹亚洲| 99精品成人免费看| 有码人妻系列| 我爱操| 精品九九九九| 丝袜剧情| 亚洲国产欧美日韩人妻日中文| 中国熟女网站| 97K超碰在线| 免费自拍三级综合| 午夜免费视频1000| av情色影音| AV女资源| 中文精品一区二去| 男人的天堂2010| 日韩少妇丰满亚洲| 亚洲欧美骚| 老熟女乱子伦中文字幕一区二区| 天堂8在线新版官网| 欧美老妇女内射网址| 色爱亚洲| 人看人人摸人人操| 久久久久久久少妇| 欧美性高潮在线| 久久毛卡| juliaann精品熟女一区| 青操影院| 久久性生大片免费观看性| 熟妇操花| 日韩天堂av电影在线观看| 色网亚洲人| 国产精品一级毛片不卡视| 午夜久久一区二区无码中出| 日韩欧美天堂| 狠狠操夜夜| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| 亚洲激情天堂网| 久久久久久久九九九九| 五月色网| 天天综合站| 国产传媒午夜理伦精品| 97人肏| 亚洲 欧美 色图| 亚洲精品三| 久草男人天堂| 国产精品探花色| 中文字幕 av v| 色吧91| 久9视频| 91天天综合在线观看| 亚洲成a人片在线观看中文!!!| 嗯啊不要啊在线| 久久成人精品| 麻豆啪啪啪视频| 99热国产| 无码黑人精品一区二区三区三| 欧美狠狠鲁| 国产亚洲日韩欧| 天天综合香 ld视频| 高清孕妇孕交 交| 久久乐| 久久久无码视频| 午夜精品久久久久久久男人的天堂 | 四虎在线观看网站| 国产女s强制榨精视频| 91色黑人少妇| 99久久精品欧美国产| 久久久精品无码亚免费| 日韩人人精品| 欧美精品999| 72av视频| 韩国黄片aaaa| 人妻无码视频一区二区三区久久| 激情综合二| 欧美丰满少妇交换91欧美精品| 国模艳艳啪啪一区| 国产精品一区二区麻豆| 9色在线| 久久专区| 日本熟妇熟色97一本在线观看| 精品无码秘 人妻一区二区| 欧美色图亚洲特色| 国模不卡| 91视频综合在线| 99热精品在线播放| dy888午夜老子影视达达兔| 色呦呦、国产精品| AV麻豆免费一区| 久久久久久久六六| 综合色播| 9色国产精品一区粉嫩| 一道本东京热加勒比一区二区三区| 成人精品久久久午夜福利| 天美传媒av一区二区| 久操热线| 9丨久久九九九| 人妻日日夜夜精品| 欧美A片中文字幕| 老女人碰碰在线碰碰视频| 99爱爱| 欧美日韩在线视频网站| 亚洲日韩乱码中文无码蜜桃臀网站 | 91九色首页| 91在线免费精品视频| 美女大乳久久久久久久女人18| 国产树林里野战在线看| 操一操摸一摸| 97jingpin| 超碰成人最新最好看| 精品福利| wuyechaopeng| 精品久久久久9999| 欧美性爱一级操| 中文字幕乱码在线观看| 老司机免费视频在线91| 日韩三级一区| 久久久国产亚洲精品系列| 九九九不卡| 日韩无码AB| 天综合网| 午夜福利视频在线一区| 91亚洲情色| 男人成人黄色视频在线观看免费下载| 91麻豆天美国产欧美| 亚洲精品天堂久久A∨51成人漫| 在线视频资源| 高清肉丝中文无码| 久久9亚洲| 婷婷五月综合激情| 亚一综合久久久久久久久久| 欧美激情在线观看视频| 日韩精品电影| 欧洲中文字幕| 亚洲日本成人动漫| 久久久久亚洲AV无码专区少妇| 天天久久| 综合网少妇| 欧美极品少妇| 激情五月婷婷| 爽 好舒服 无码刺激久久| 国产av强奸美女| 老熟女乱伦片| 91亚洲情色| 玖玖超碰熟| 97爱b| 久久夜嗨| 丝袜狠狠草尤物人妻av91| 欧美亚洲第一页| 欧美性爱综合,免费| 九九九色| 美女诱惑久久| 日本Suv精品一区二区| 亚洲精品蜜桃久久久久久久| 久久偷拍人| 老师充足的奶水小说| 视频在线观看一二三区| 亚洲色 国产 欧美 日韩| 国产一级137片内射麻豆| 五月婷婷丁香六月丁香| 色哟哟AⅤ| 午夜男女爽爽爽影院视频| 鸥美中出| 资源新线在线天堂| 天天久久| 9Ⅰ老熟女| 欧美综合另类| 无码粉嫩白虎一线天b区| 日本大香蕉综合网| 夜夜欢天天干| 天啪| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 97欧美超碰| 日本欧美不卡| 欧美九九九| 超碰精品97| 亚洲精品 欧美97色色|