基於優先順序的執行緒排程
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個程序共行的程序排程程式。程序排程演算法 採用最高優先數優先的排程演算法 即把處理機分配給優先數最...