国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一個在schedsim中模擬linux調度器的方法

      文檔序號:6460427閱讀:183來源:國知局
      專利名稱:一個在schedsim中模擬linux調度器的方法
      技術領域
      本發(fā)明涉及操作系統(tǒng)內核模擬領域,尤其涉及一個在schedsim中模擬linux 調度器的方法。
      技術背景調度器即在多任務系統(tǒng)中,在合適的時間通過一定機制選擇任務執(zhí)行的一種 方法,它是多任務操作系統(tǒng)的基礎。在linux操作系統(tǒng)中調度器對系統(tǒng)性能具有 重大的影響。在操作系統(tǒng)中,CPU是一種資源,調度器可以臨時分配一個任務在上面執(zhí) 行(單位是時間片)。調度器使得我們同時執(zhí)行多個程序成為可能,因此可以與 具有各種需求的用戶共享CPU。調度器的一個重要目標是有效地分配CPU時間片,同時提供很好的用戶體 驗。調度器還需要面對一些互相沖突的目標,例如既要為關鍵實時任務最小化 響應時間,又要最大限度地提高CPU的總體利用率。在操作系統(tǒng)的發(fā)展過程中,人們根據不同的應用需求提出了多種多樣的調度 算法,如先到先服務調度、最短作業(yè)優(yōu)先調度、輪轉法調度、多級隊列調度。 這些調度算法在不同的領域都有著廣泛的應用。但沒有一種調度算法適用于所 有的情況,對于不同的軟硬件需求,需要選擇合適的調度機制。Linux作為一個 通用操作系統(tǒng),它的調度算法也經歷了長久的演變過程。從最早期的循環(huán)檢測 至U2.6.24的Complete Fair Schedule調度,其核心調度代碼幾經更改。 在Linux2.6內核中,調度器將進程分為三類1) 交互式進程)此類進程有大量的人機交互,因此進程不斷地處于睡眠狀 態(tài),等待用戶輸入。典型的應用比如編輯器vi。此類進程對系統(tǒng)響應時間要求 比較高,否則用戶會感覺系統(tǒng)反應遲緩。2) 批處理進程)此類進程不需要人機交互,在后臺運行,需要占用大量的 系統(tǒng)資源。但是能夠忍受響應延遲。比如編譯器。3) 實時進程)實時對調度延遲的要求最高,這些進程往往執(zhí)行非常重要的 操作,要求立即響應并執(zhí)行。比如視頻播放軟件或飛機飛行控制系統(tǒng),很明顯 這類程序不能容忍長時間的調度延遲,輕則影響電影放映效果,重則機毀人亡。根據進程的不同分類Lirmx采用不同的調度策略。對于實時進程,采用FIFO 或者Round Robin的調度策略。對于普通進程,則需要區(qū)分交互式和批處理式的不同。傳統(tǒng)Linux調度器提高交互式應用的優(yōu)先級,使得它們能更快地被調 度。而CFS和RSDL等新的調度器的核心思想是"完全公平"。這個設計理念 不僅大大簡化了調度器的代碼復雜度,還對各種調度需求提供了更完美的支持。 當新的調度算法提出后,為了檢測算法在linux上的性能,需要修改liimx內 核調度器以及時鐘中斷等相關的內容,這需要對linux內核非常熟悉,而且還要 有扎實的linux內核編程經驗及調試經驗,對于多數人來說是不現實的。因此需 要一個對Linux內核調度機制的模擬平臺,目前有很多虛擬機軟件及模擬平臺來 運行整個操作系統(tǒng),如VMvare,sosim,sesc,schedsim等。其中多數是對完整OS的 模擬,不利于快速獲得調度效果。Schedsim是一個專門針對linux調度算法的模 擬器,提供了良好的接口及幾種常見的調度算法,可以容易的實現新的調度算 法并可立刻獲得直觀的結果。但它對多處理器的情況支持太單一,系統(tǒng)中只有 一個就緒隊列,而且不支持linux的新調度算法。 發(fā)明內容本發(fā)明的目的是克服schedsim的不足,提供一個在schedsim中模擬linux調度器的方法。包括如下步驟1) 修改schedsim的調度接口,為其添加變量timeinterval,來記錄模擬過程 的時鐘中斷大小;2) 修改schedsim的調度接口,為其添加數組processCap和processLists, 用來記錄每個處理器的處理能力及就緒隊列;3) 修改調度接口中的方法RunNextTimeUnit,當時鐘周期為0時把任務分 配到各處理器,當時鐘中斷來臨時對每個處理器的就緒隊列調度;4) 添加linux調度算法Complete Fair Scheduler,添加相應的算法類 CFSScheduler、 CFSProcessList禾口 CompleteFairProcess;5) 修改SchedulerGenerator,加入complete fair scheduler調度算法。步驟1)所述的修改schedsim的調度接口,為其添加變量timeinterval,來 記錄模擬過程的時鐘中斷大小在CmdListPanel類中加入一個JTextFidd對象, 由用戶輸入時鐘中斷大小,并在Schedulerlnterface中加入timeinterval,用來保 存時鐘中斷的數值。步驟2)所述的修改schedsim的調度接口,為其添加數組processCap和 processLists,用來記錄每個處理器的處理能力及就緒隊列在類 Schedulerlnterface中加入數組processCap,代表每個處理器的處理能力,由用戶初始化其值;在schedulerlnterface中加入數組processLists,代表每個處理器的 就緒隊列。步驟3)所述的修改調度接口中的方法RunNextTimeUnit,當時鐘周期為0 時把任務分配到各處理器,當時鐘中斷來臨時對每個處理器的就緒隊列調度 修改Schedulerlnterface的RunNextTimeUnit方法,當時鐘周期為0時調用 dispatchProcess方法把任務分配到各處理器就緒隊列中,當時間計數為步驟1)所 設的時鐘中斷倍數時,根據是否設置搶占模式對每個處理器重新調度,依據用 戶選擇的調度算法從每個處理器的就緒隊列中選擇一個進程執(zhí)行。步驟4)所述的添力卩l(xiāng)inux調度算法Complete Fair Scheduler,添加相應的算 法類CFSScheduler、 CFSProcessList和CompleteFairProcess:加入CFSScheduler 類,使它繼承自GeneralScheduler類,實現其Schedule調度方法,它從就緒隊列 中選擇執(zhí)行時間最早的一個進程返回;加入CFSProcessList類,使它繼承自 ProcessList類,增加保存隊列負載及最早運行時間的變量,它們用于計算進程的 執(zhí)行時間;加入CompleteFairProcess類,使它繼承自GeneralProcess類,該類添 加vruntime變量用于記錄進程何時應當被執(zhí)行,在調度時通過比較vruntime來 選擇最先需要運行進程。步驟5)所述的修改SchedulerGenerator,加入CFS調度算法修改 SchedulerGenerator,在GetSchedulerList方法中加入對象CFSScheduler,在 GetSchedulerByName方法中添加創(chuàng)建CFSScheduler的語句。 本發(fā)明與現有技術相比具有的有益效果1) 增加了模擬平臺對linux新調度算法的支持;2) 增加時鐘中斷時間細化每個進程的運行時間,使模擬更加精確;3) 增加了對異質多處理器的支持,可以檢測多處理器下調度算法的性能。


      圖1是在schedsim中模擬linux調度器的類關系圖;圖2是在schedsim中模擬linux調度器的方法軟件流程圖。
      具體實施方式
      在schedsim中模擬linux調度器的方法包括如下步驟1)修改schedsim的調度接口,為其添加變量timeinterval,來記錄模擬過程 的時鐘中斷大??;修改schedsim的調度接口,添加時鐘中斷,在CmdListPanel類中加入一個 JTextField對象,由用戶輸入時鐘中斷大小,并在Schedulerlnterface中加入整型變量timeinterval,用來保存時鐘中斷的數值。2) 修改schedsim的調度接口,為其添加數組processCap和processLists, 用來記錄每個處理器的處理能力及就緒隊列;修改schedsim的調度接口,在類Schedulerlnterface中加入整型數組 pmcessCap,代表每個處理器的處理能力,由用戶初始化其值;在 Schedulerlnterface中加入數組processLists,代表每個處理器的就緒隊列。3) 修改調度接口中的方法RunNextTimeUnit,當時鐘周期為0時把任務分 配到各處理器,當時鐘中斷來臨時對每個處理器的就緒隊列調度;修改調度接口中類Schedulerinterface類的方法RunNextTimeUnit,當時鐘周 期為0時把任務分配到各處理器,當時間計數為步驟1)所設的時鐘中斷倍數時, 根據是否設置搶占模式對每個處理器重新調度,依據用戶選擇的調度算法從每 個處理器的就緒隊列中選擇一個進程執(zhí)行。Public void RunNextTimeUnit() throws SchedBaseException。。。。。。(和原來相同省略) If(this.Timecounter == 0)dispatchProcess(); 。。。。。。(和原來相同省略) else if ((this.timecounter % this.timeinterval) == 0)result = Scheduler.Schedule(processLists[n]); ActualTimeslice[n] = 1;state = Defines.PREEMPTIVE—TIMESLICE_END; }。。。。。。(和原來相同省略)為類Schedlerlnterface添力卩dispatchProcess方法 void dispatchProcess()int i,posjObject[] ps = Processes.RtGetAllProcesses().toArray();if(this.GetSchedulerName() == CFS Scheduler. SchedulerName()) for(i = 1 ; i <= this.Processors ; i++)this.processLists[i] = new CFSProcessList(this);for(i = 0 ; i < ps.length ; i++) pos = i % this.Processors + 1;processLists[pos].AddProcess((GeneralProcess)ps[i],false); ((GeneralProcess)ps[i]).setProcessorID(pos);4)添力口 linux調度算法Complete Fair Scheduler,添加相應的算法類 CFSScheduler、 CFSProcessList禾口 CompleteFairProcess;添加linux調度算法Complete Fair Scheduler,加入CFSScheduler類,使它 繼承自GeneralScheduler類,實現其Schedule調度方法,它從就緒隊列中選擇執(zhí) 行時間最早的一個進程返回;加入CFSProcessList類,使它繼承自ProcessList類, 增加保存隊列負載及最早運行時間的變量,它們用于計算進程的執(zhí)行時間;加 入CompleteFairProcess類,使它繼承自GeneralProcess類,該類添力口 vruntime 變量用于記錄進程何時應當被執(zhí)行,在調度時通過比較vruntime來選擇最先需 要運行進程。public class CFSScheduler extends GeneralScheduler{ public static String SchedulerName()return ("CFS Scheduler");public CFSScheduler()super(SchedulerName());public GeneralProcess Convert(GeneralProcess Process)return (GeneralProcess) new CompleFairProcess(Process);public GeneralProcess Schedule(ProcessList processList) throws SchedBaseExceptionCFSProcessList cfspl = (CFSProcessList)processList; Vector Processes = processList.RtGetAUProcesses(); GeneralProcess Result = new GeneralProcess(); Object[] List = Processes.toArray(); boolean find = false;cfspl.updateCurr(); if(List.length > 1)if(cfspl.getCurr() != null)long ideal = cfspl.getSchedPeriod(List.length); ideal = ideal / Listlength;if(ideal < cfspl.getSchedulerInterface().getTimeCounter() cfspl.getCurr().getStartTime(》find = true;elsefind = true;if(! find)return cfspl.getCurr();CompleFairProcess tmp = null; for (int a = 0; a < List.length; a++)if ( ((GenemlProcess)List[a]).GetState() == READY)if(tmp == null)tmp = ((CompleFairProcess)List[a]); else if(cfspl.getCurr() != null &&((CompleFairProcess)List[a]).getVRuntime() <tmp.getVRuntime()) tmp = (((CompleFairProcess)List[a]));if(tmp != cfspl.getCurr()) cfspl.setCurr(tmp);tmp.setStartTime(cfspl.getSchedulerInterface().getTimeCounter()); return (GeneralProcess)cfspl.getCurr();public class CFSProcessList extends ProcessList{ private long load—weight = 0; private long min一vruntime = 0; static public long sysctl一sched一latency = 20; static public long sched_nr_latency = 5; private CompleFairProcess curr = null;public CFSProcessList(SchedulerInterface Interface)public CompleFairProcess getCurr() public void setCurr(CompleFairProcess process) public boolean AddProcess(GeneralProcess Process) public void updateCurr()public long calculateVR(CompleFairProcess c粉public long getSchedPeriod(int nr)public long getVRuntime()public void setVRuntime(long vruntime)public CompleFairProcess getFirstRimnable()public CompleFairProcess getLastRunnable()public boolean RtUpdateStatistics()public class CompleFairProcess extends GeneralProcess{ private long load = 0; private long vruntime = -1; public boolean firstadd = true; private long start_exec = -1;public CompleFairProcess(GeneralProcess gp)public void setLoad(long 1)public long getLoad()public long getVRuntime()public void setVRuntime(long vr)public void setStartTime(long start)public long getStartTime()5)修改SchedulerGenerator,加入Complete Fair Scheduler調度算法。 修改SchedulerGenerator,加入CFS調度算法修改SchedulerGenerator,在GetSchedulerList方法中加入對象CFSScheduler,在GetSchedulerByName方法中添加創(chuàng)建CFSScheduler的語句。public class SchedulerGenerator {public static Vector GetSchedulerList()。。。。。。(和原來相同省略)result.add((Object) CFSSchduer.SchedulerName());return (result);public static GeneralScheduler GetSchedulerByName(String SName) throws SchedBaseException。。。。。。(和原來相同省略)else if(SName == CFSSchduer.SchedulerName())Sched = (GeneralScheduler) new CFSSchduer();elsethrow new SchedBaseException("No such Scheduler!"); return(Sched);
      權利要求
      1.一個在schedsim中模擬linux調度器的方法,其特征在于包括如下步驟1)修改schedsim的調度接口,為其添加變量timeinterval,來記錄模擬過程的時鐘中斷大??;2)修改schedsim的調度接口,為其添加數組processCap和processLists,用來記錄每個處理器的處理能力及就緒隊列;3)修改調度接口中的方法RunNextTimeUnit,當時鐘周期為0時把任務分配到各處理器,當時鐘中斷來臨時對每個處理器的就緒隊列調度;4)添加linux調度算法Complete Fair Scheduler,添加相應的算法類CFSScheduler、CFSProcessList和CompleteFairProcess;5)修改SchedulerGenerator,加入Complete Fair Scheduler調度算法。
      2. 根據權利要求1所述的一個在schedsim中模擬linux調度器的方法,其特 征在于步驟1)所述的修改schedsim的調度接口,為其添加變量timeinterval, 來記錄模擬過程的時鐘中斷大小在CmdListPand類中加入一個JTextField對 象,由用戶輸入時鐘中斷大小,并在Schedulerlnterface中加入timeinterval,用 來保存時鐘中斷的數值。
      3. 根據權利要求1所述的一個在schedsim中模擬linux調度器的方法,其特 征在于步驟2)所述的修改schedsim的調度接口,為其添加數組processCap和 processLists ,用來記錄每個處理器的處理能力及就緒隊列在類 Schedulerlnterface中加入數組processCap,代表每個處理器的處理能力,由用戶 初始化其值;在schedulerlnterface中加入數組processLists,代表每個處理器的 就緒隊列。
      4. 根據權利要求1所述的一個在schedsim中模擬linux調度器的方法,其特 征在于步驟3)所述的修改調度接口中的方法RunNextTimeUnit,當時鐘周期為 0時把任務分配到各處理器,當時鐘中斷來臨時對每個處理器的就緒隊列調度 修改Schedulerlnterface的RunNextTimeUnit方法,當時鐘周期為0時調用 dispatchProcess方法把任務分配到各處理器就緒隊列中,當時間計數為步驟1)所 設的時鐘中斷倍數時,根據是否設置搶占模式對每個處理器重新調度,依據用 戶選擇的調度算法從每個處理器的就緒隊列中選擇一個進程執(zhí)行。
      5.根據權利要求1所述的一個在schedsim中模擬linux調度器的方法,其 特征在于步驟4)所述的添加linux調度算法Complete Fair Scheduler,添加相應的算法類CFSScheduler 、 CFSProcessList和CompleteFairProcess :力口入 CFSScheduler類,使它繼承自GeneralScheduler類,實現其Schedule調度方法, 它從就緒隊列中選擇執(zhí)行時間最早的一個進程返回;加入CFSProcessList類,使 它繼承自ProcessList類,增加保存隊列負載及最早運行時間的變量,它們用于計 算進程的執(zhí)行時間;加入CompleteFairProcess類,使它繼承自GeneralProcess 類,該類添加vruntime變量用于記錄進程何時應當被執(zhí)行,在調度時通過比較 vruntime來選擇最先需要運行的進程。
      6.根據權利要求1所述的一個在schedsim中模擬linux調度器的方法,其特 征在于步驟5)所述的修改SchedulerGenerator,加入Complete Fair Scheduler調 度算法修改SchedulerGenerator,在GetSchedulerList方法中加入對象 CFSScheduler,在GetSchedulerByName方法中添加創(chuàng)建CFSScheduler的語句。
      全文摘要
      本發(fā)明公開了一個在schedsim中模擬linux調度器的方法。包括如下步驟1)修改schedsim的調度接口,為其添加變量timeinterval,來記錄模擬過程的時鐘中斷大??;2)修改schedsim的調度接口,為其添加數組processCap和processLists,用來記錄每個處理器的處理能力及就緒隊列;3)修改調度接口中的方法RunNextTimeUnit,當時鐘周期為0時把任務分配到各處理器,當時鐘中斷來臨時對每個處理器的就緒隊列調度;4)添加linux調度算法Complete FairScheduler,添加相應的算法類CFSScheduler、CFSProcessList和CompleteFairProcess;5)修改SchedulerGenerator,加入Complete Fair Scheduler調度算法。本發(fā)明通過增加時鐘中斷細化每個進程的運行時間,使模擬更加精確;增加了模擬平臺對linux新調度算法的支持;增加了對異質多處理器的支持,可以檢測多處理器下調度算法的性能。
      文檔編號G06F9/455GK101266551SQ200810060458
      公開日2008年9月17日 申請日期2008年4月11日 優(yōu)先權日2008年4月11日
      發(fā)明者陳文智, 從 高, 博 高, 揚 高 申請人:浙江大學
      網友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1