所謂搶占,是指在稍後的時間啟動的乙個程序,因為優先順序或者所需資源少等原因,可以打斷當前cpu執行的程序,搶占當前程序的cpu資源(以及其他資源)歸自己所用。現代作業系統基本都是搶占式的排程,非搶占式的排程主要用於嵌入式的系統,因為非搶占式不需要特別的硬體。
乙個程序從執行切換到等待
乙個程序從執行切換到就緒
乙個程序從等待切換到就緒
乙個程序從執行完畢,終結
如果乙個排程方案只處理程序終止、程序切換到等待兩種情況的話,則這個排程方案是「非搶占」的,否則是「搶占式」的。
cpu使用率:排程方案應當是cpu盡可能不空閒
吞吐量:單位時間內完成的程序數量
先到先服務排程(fcfs):非搶占式的排程方案。按時間排序,先提交的程序先執行,一直等到程序執行結束或者因為i/o操作等阻塞操作而等待再執行下乙個程序的方案。
最短作業優先排程(sjf):也稱「最短下乙個cpu區間」演算法。可以是搶占式也可以是非搶占式,衍生的搶占sjf也被成為「最短剩餘時間優先」演算法。在當前時刻,對所有已經提交的程序用時排序,按最短耗時到最長好使排序,優先執行最短耗時的程序(任務),相同耗時的按fcfs排程。
優缺點:可以證明sjf是最好的,平均時間是最短的。但是sjf演算法難在知道下乙個cpu區間的長度(也就是程序的耗時)。對於批處理系統,可以將使用者指定的程序時間極限作為耗時。進而,sjf通常用於批處理系統。
優先順序排程演算法:將程序按貼上優先順序的標籤,按優先順序的高低來判斷是否優先執行,相同優先順序按fcfs排程。上面提到的sjf,就是一種優先順序排程演算法,這裡的優先順序是按程序耗時的倒數計算。
優缺點:優先順序排程最大的問題是可能乙個優先順序第的程序長時間不能執行,導致程序餓死,解決的辦法是「程序老化」——每經過乙個時間段,將程序的優先順序提高一定級別,進而避免餓死。
輪轉法(rr):相當於搶占式的fcfs演算法。通過將程序放入乙個迴圈佇列當中,劃分時間片,每過乙個時間片,如果程序執行完,則執行下乙個(佇列首)程序,如果沒執行完,則放入迴圈佇列的隊尾再次等待執行,有新程序來臨也放入佇列的隊尾。
多級佇列排程:因為不同型別的程序(cpu密集型和i/o密集型,長期任務和短期任務)的特徵是不同的,使用者對不同型別程序的排程要求也不同,所以乾脆,將不同型別的程序分配在優先順序不同的佇列當中,佇列間按優先順序排程,佇列內部選用合適的排程演算法。
多級反饋佇列排程:類似與上述第5中「多級佇列排程」,但是增加了佇列之間,程序可以提公升優先順序或者將低優先順序切換所在佇列,優化計算機的效率。
單核排程比較方便,多核因為涉及到協調通訊問題,更加複雜。
一般將多核的排程方法分成兩大類:非對稱多處理方法和對稱多處理方法。
* 非對稱多處理方法:多個cpu的地位不對等,一般是有乙個主cpu處理所有排程決定和系統程序,訪問系統的資料結構,其他cpu服從主cpu的指揮和執行使用者**
* 對稱多處理方法:多個cpu地位對等,各自執行自己的排程方法,多個cpu之間協同通訊處理。
劇本第三部分
第三部分劇本 場景一 女生宿舍,a趴在桌子上睡覺,電腦螢幕亮著,是vs 但是就寫了一行 小碼趴在a的胳膊上睡著。突然,a醒了,發現自己上課要遲到了,a 哎呀,完了完了,大中午的怎麼趴在這睡著了 邊說話邊收拾書包 轉頭看向小碼 a 把你放哪呢 說話的時候四周環視 算了,跟我去吧,我先把你放書包裡 說話...
第三部分 效能
索引管理 效能優化 效能監控 db.c1.find explain 查詢的詳細資訊列出來 db.c1.getindexkyes 所有索引的字段 db.c1.getindexes 所有索引的相關資訊 2 唯一索引 只需要在ensureindex命令中提定 uniqure true 即可建立唯一索引,如...
sqlalchemy第三部分
1.復用。在我們用sqlalchemy運算元據庫時,有部分 可以重複使用,我們將這部分放到乙個模組中,後面使用就可以呼叫這個模組,匯入裡面的方法。python 1.連線資料庫 from sqlalchemy import create engine hostname 127.0.0.1 ip位址 p...