當前位置:編程學習大全網 - 編程語言 - 論操作系統的進程調度

論操作系統的進程調度

首先,如何保證操作系統的內核調度進程能在某個時間得到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]

  • 上一篇:雲南北大青鳥設計培訓告訴妳零基礎怎麽快速學習web前端開發?
  • 下一篇:現在初中成績不好可以去學電腦專業嗎?
  • copyright 2024編程學習大全網