低層調度:也稱為進程調度。它的主要功能是按照壹定的算法將CPU分配給就緒隊列中的壹個進程。執行底層調度功能的程序稱為進程調度器,實現CPU在進程間的切換。進程調度的運行頻率很高,在分時系統中往往幾十毫秒運行壹次。進程調度是操作系統中最基本的調度。壹般操作系統都要有進程調度,其策略的好壞直接影響整個系統的能量計算。
中間調度:也稱為交換調度。為了避免同時存儲在內存中的進程數量過大,有時需要將壹些進程從內存中移到外存中,以減少多道程序的數量,於是建立了中間調度。特別是在采用虛擬存儲技術或分時系統的系統中,經常要增加中間調度級。所以中間調度的作用就是把壹些暫時不能運行的課程從內存切換到外存,在內存使用緊張的時候等待。當將來內存中有足夠的空閑空間時,適當的進程將被另壹個內存替換,並等待進程被調度。引入中間調度的主要目的是提高內存利用率和系統吞吐量。它實際上是內存管理中的交換功能。
先說進程調度的策略(參考參考資料):
首先,如何保證操作系統的內核調度進程能在某個時間得到CPU來調度進程?
通常我們會在軟件層面找到答案。其實是通過CPU的硬件處理機制來實現的。在執行每個指令周期後,CPU掃描CPU內部的中斷寄存器,以確定是否有中斷,如果沒有,則繼續執行指令。如果是,保存當前CPU工作環境,跳轉到中斷服務列表,CPU執行中斷服務程序,中斷發起後跳轉到內核調度程序(這是壹個內核程序,但是是所有進程共享的,包括用戶進程);此時,內核調度程序占用CPU並調度進程,以確定下壹個將占用CPU的進程。
接下來,什麽時候需要進程調度?
教材中提到的幾種情況:1時間片到達,即每個進程分配的時間片用完後,需要跳轉到調度器;2.當當前運行的占用CPU的進程提出I/O操作並向內核發起系統調用時,在系統調用結束後跳轉到調度程序;我自己的想法:當前運行的進程應該在所有內核系統調用結束時跳轉到調度器,根據當前的調度信息決定下壹個可以占用CPU的進程。我所指的系統調用也包括中斷調度。但是很多書都不清楚具體的調度時機。我真不知道他們是不是不懂。我還是懶得寫出來告訴我們。其實除了大部分硬件中斷觸發後跳轉到調度器,我覺得每次發生時鐘中斷都要跳轉到調度器。(進入時鐘中斷序列時,要更新進程表中所有進程的調度信息,處理進程隊列),處理更新後的進程信息,決定調度哪個進程。壹般教科書中,硬件的物理處理機制和軟件的調度處理機制是分開的,不利於我們理解。最好將兩者結合起來,了解進程調度的工作機制。目前需要解決的問題是:什麽時候需要內核調度程序占用CPU進行調度?至於調度算法,那是要在邏輯層面上考慮的事情。
其實看了這麽多,對小論文也有壹些想法,因為做的方向是嵌入式系統控制應用於電子電源電路。這種應用對嵌入式操作系統的性能有壹些特殊的要求:壹是要小,要快;內核要小,進程調度要實現搶占式任務調度,調度切換要快。它的進程調度不同於壹般的操作系統,因為它們的需求不同。嵌入式系統通常要求實時性,嚴格來說電路上的控制系統應該是硬實時的,不像壹般的操作系統是不實時的。或者軟實時。這與他們對實時性的要求不同。於是我試探性地設置了壹個課題“嵌入式系統與通用系統進程調度的比較分析,提出了壹種針對特定電路控制嵌入式實時系統的調度策略”。我想我會把這些資料準備好,從明天開始分析對比,弄個小論文,不然我會為此而死。
操作系統-進程調度
[color =銀色] [/color] [color =灰色] [/color] [color =紫紅色] [/color] [color =藍色] [/color] [color =淺綠色] [/color] [color =石灰] [/color] [size = 4] [
內容:
1:設計快速流程控制、流程隊列結構等必要的數據結構(包括:就緒隊列、等待隊列、運行隊列)。
2.模擬操作系統進程調度的功能,編寫進程調度器、模擬處理器調度器、進程等待功能和進程喚醒功能。
3.編寫用戶程序,創建6個用戶進程。
進程調度的設計方法
1。數據結構
(1)優先級和時間片設計
◆進程等待放棄CPU時,優先級設置為1(高優先級)。
◆當進程因時間片放棄CPU時,優先級設置為0(低優先級)。
◆優先級1對應時間片4;優先級0對應於時間片10。
(2)過程控制塊(PCB)的內容
流程ID 3-9
進程優先級0,1
進程優先級0,1
流程等待時間20
鏈接指針
2.程序算法
(1)PCB結構、變量和主程序
結構印刷電路板
{
int pname
int pri
int運行時;
等待中;
struct PCB * next
}
多氯聯苯[7];
struct PCB *正在運行,就緒,等待;
int sin = 0;
主()
{創建PCB [3]-PCB [9]並將其插入就緒隊列;/* pname分別為3-9,
優先級=0,運行時間=10,等待時間=0 */
for(;;)/*系統程序,完成初始化和處理器分配功能*/
{ cast { SIG = 0:swtch;
sig=1:服務員;
SIG = 3:proc 3;
SIG = 4:proc 4;
SIG = 5:proc 5;
SIG = 6:proc 6;
SIG = 7:proc 7;
SIG = 8:proc 8;
SIG = 9:proc 9;}
}
}
(2)進程調度程序
開關()
{
while(ready = = NULL)wake up();
將就緒隊列中的第壹塊PCB移出;
發送運行指針;
如果pri=1,Runtime = 4,否則Runtime = 10;
向sig發送running→pname。
}
(3)流程等待功能
等待()
{將正在運行的進程插入等待隊列,並將優先級數設置為1;
SIG = 0;
}
(4)進程喚醒功能
喚醒()
{
從等待隊列中所有PCB的等待時間中減去1;
移除等待隊列中waittime=0的所有PCBs
插入就緒隊列中優先級為0的第壹個PCB的前面。
}[/b][/font][/size]