nachos作業系統 基於優先順序的執行緒排程

2021-08-07 10:58:31 字數 3015 閱讀 9638



基於優先順序的執行緒排程

1.實驗目的

熟悉nachos作業系統,掌握執行緒優先順序的排程,深入理解作業系統核心,了解使用者程式的載入過程以及多使用者程序的記憶體分配機制。

2.

實驗內容

nachos

的執行緒管理模組公升級源**及實現執行緒的優先順序排程

3.

實驗方法(實驗步驟)

thread.h

檔案(1)、指定執行緒的最大值;

(2)、過載thread建構函式,用於使用者執行緒的建立;

(3)、定義成員變數和成員函式;

thread.cc

檔案(1)、設定random()函式用於獲取三個優先順序使用;

(2)、初始化tid;

(3)、過載函式給出使用者建立的執行緒(id號從1000起)

(4)、用selftest()對三個佇列分別設定不同的優先順序(1、高優先順序,2、中優先順序,3、低優先順序);

scheduler.h

檔案(1)、在scheduler中定義其他兩個就緒佇列並使用不用的優先順序;

scheduler.cc

檔案(1)

、建構函式scheduler建立三個就緒佇列,分別為不同的優先順序;

(2)、建構函式scheduler分別析構

(3)、建構函式scheduler進行優先順序比較。

4.

實驗過程(源**、配置清單必須帶注釋)

注:對以下的檔案進行修改源**

(1)、thread.h檔案 (新增tids、priority、tid變數)

private:

int *stacktop;         

void *machinestate[machinestatesize];   

static int threadnum;   

static bitmap *tids;

int priority;     

int tid;     

public:

thread(char* debugname);      

thread(char* debugname,int p);    

~thread();               

int random();  

void settid(int id);

int gettid();

void setpriority(int p);  

int getpriority();   

(2)、thread.cc檔案 (新增random()、gettid()、thread(char* threadname,int p)函式)

int thread::random() //

獲取執行緒優先順序 {

inti,number;

for(i=0; i<3; i++)

return number; }

voidthread::settid(int id)

intthread::gettid()

intthread::threadnum = 0;

thread::thread(char*threadname,int p)

name = threadname;

settid(tids->findandset() + 1000);//

setpriority(p);

stacktop = null;

stack = null;

status = just_created;

for (int i = 0; i < machinestatesize;i++)

space = null;

cout << "create no."<< threadnum << " userthread with tid=" << gettid()<< " and priority=" << getpriority() << endl; }

voidthread::setpriority(int p) //

intthread::getpriority() //

voidthread::selftest() */

}(3)、scheduler.cc檔案(對執行緒優先順序進行比較排序)

scheduler::scheduler()

scheduler::~scheduler()

voidscheduler::readytorun (thread *thread)

else if(thread->getpriority() == 2)

else if(thread->getpriority() == 3) }

(4)、scheduler.h檔案 (新增兩個優先順序的成員變數)

private:

list*readylist; 

list*readymidlist; 

list*readyhiglist; 

6

、實驗截圖

實驗體會

基本實現要求功能,實現限制執行緒數目和根據優先順序來排程; 

作業系統 優先順序反轉 優先順序繼承

優先順序反 準確來說,指的是一種現象,並非一項任務排程技術,即高優先順序任務被低優先順序任務阻塞推遲的行為被稱為 優先順序反轉 這是一種不合理的行為方式,如果把這種行為再進一步放大,當高優先順序任務正等待訊號量 此訊號量被乙個低優先順序任務擁有著 的時候,乙個介於兩個任務優先之間的中等優先順序任務開...

作業系統 優先順序反轉 優先順序繼承 優先順序天花板

目錄 什麼是優先順序反轉?什麼是優先順序繼承?什麼是優先順序天花板?高優先順序任務被低優先順序任務阻塞,導致高優先順序任務遲遲得不到排程。但其他中等優先順序的任務卻能搶到cpu資源。舉個栗子 程序a,程序b,程序c。優先順序依次遞增。程序c優先順序最低,但程序c最先執行 占有鎖 此時程序b執行,因為...

作業系統程序優先順序排程實驗

目的要求 用高階語言編寫和除錯乙個程序排程程式,以加深對程序的概念及程序排程演算法的理解 準備知識 一 基本概念 1 程序的概念 2 程序的狀態和程序控制塊 3 程序排程演算法 試驗內容 設計乙個有 n個程序共行的程序排程程式。程序排程演算法 採用最高優先數優先的排程演算法 即把處理機分配給優先數最...