實驗報告
課程名稱
實驗專案
實驗儀器
院系計算機學院
專業電腦科學與技術
班級/學號計0503 / 29
學生姓名楊天心
實驗日期
成績指導老師
實驗二作業/程序排程演算法設計與實現
一.實驗目的
排程是作業系統的主要功能,本實驗通過自行設計實現的排程程式,使同學們加深對作業/程序排程功能的理解,從而掌握作業系統的基本原理。同時還可以提高同學們的程式設計能力。
二.實驗要求
用c語言編制按優先順序排程三個程序的排程程式,其中要求程序的優先順序隨著執行時間的延長而降低,但卻隨著等待時間的延長而公升高。
三.實驗方法內容
(一)演算法設計的思路
1、 設計程序控制塊為以下結構:
struct pro
﹛char id; /*程序的id號,可以表示為a, b, c */
int pri; /*程序的初始優先順序*/
int p; /*等待程序可以動態增加的優先順序量*/
int s; /*執行程序應該動態減少的優先順序量*/
int status; /*表示程序的狀態,0為等待,1為執行*/
﹜a=,b=, c=;
2、 要求接管時鐘中斷:int 1ch
使用到的c語言函式為:
getvect(intno) /*獲得intno的中斷向量*/(要求儲存在乙個全域性變數中)
setvect(intno,time) /*設定intno的中斷向量為函式time的入口位址*/
3、 在自己編制的新的時鐘中斷處理程式中,完成程序優先順序的修改;並記錄被中斷的次數。
void interrupt time( )
4、 編制函式select( ),其功能是從三個程序中選擇優先順序最高的程序,並將其狀態設定為執行,其餘設定為等待。並返回執行程序的序號供主程式選擇執行。
5、 編制函式int prime (int n),功能是判斷n是否為素數,如果是素數,返回n;否則返回0。該函式是三個程序的執行過程。
6、 主程式框架如下:
main ( )
; int i, j, k, u, v, w=0, x=0, y=0;
char c;
/*獲得時鐘中斷向量*/
/*設定新的中斷向量*/
while(xx<300) /*xx是全域性變數,用於記錄時鐘中斷的次數;用迴圈來模擬三個程序的執行過程*/
break;
case1
case2}}
/*恢復時鐘中斷*/
}(二)題目理解說明:
從實驗的題目可以看出本次實驗的內容是在已經給定的結構上對程式進行補充完善。
通過對已給程式的分析,只需要完成時鐘中斷處理函式time(),程序選擇程式select(),求素數函式prime()以及主函式中switch語句部分的程式編制即可。
(三)演算法的功能框架流程圖
(四)此演算法中用到的資料結構:
程序實體結構,模擬pcb:
struct pro
(五)主要常量變數:
intr:存放中斷號1ch的常量
xx:存放中斷次數的全域性變數
oldhandler:指向原中斷處理程式的向量
a[3]:對素數進行操作的陣列空間
(六)主要模組:
1.中斷處理函式
void interrupt time(...)
接管時鐘中斷,當中斷到達時,對a,b,c三個程序資料結構中優先順序pri進行修改。
對正在執行的程式,優先順序減去乙個遞減量s,對於未執行的程式,優先順序增加乙個的增量p。處理完成後,中斷次數xx加1。
2.程序選擇函式
char select()
根據程序的優先順序進行選擇。選出優先順序最高的程序,將其狀態status設定為1,即為該程序分配處理機,投入執行,返回該程序的程序號id。將其他程序狀態status設定為0,即剝奪處理機或不為其分配處理機。
此函式模擬對pcb的操作。
3求素數函式
int prime (int n)
用於判斷n是否為素數。通過迴圈依次用從2到n的平方根對n取模。如果能被除盡,餘數為零。跳出迴圈,返回0。如果始終沒被除盡,表明n為素數,返回n。
4.主函式
void main ( )
首先定義所需要的變數,陣列。獲取中斷,並將中斷處理程式設定到time()函式上。
輸出提示資訊後。便開始模擬程序排程過程。
通過select()函式取得優先順序最高的程序號。通過switch語句判別程序號,選中三個模擬的迴圈求素數程序的程式體中的乙個,執行其中的內容,輸出資訊。
如果中斷次數xx小於300次,則繼續呼叫select()函式選出程序並執行,直至滿足這個條件。
最後恢復系統原有的中斷處理程式。
四.實驗**:
#include <>
#include <>
#include <>
#include <>
#define intr 0x1c //int 1ch
int xx=0記錄中斷次數的全域性變數
void interrupt (*oldhandler定義中斷向量
//程序控制塊結構體
struct pro
a=,b=,c=;
//中斷處理函式
void interrupt time(...)
/*程序選擇函式*/
char select()
/* 求素數函式*/
int prime (int n)
//主函式
void main ( )
; int u, v, w=0, x=0, y=0;
char c;
oldhandler=getvect(intr獲取中斷處理 int 1ch*/
setvect(intr,time); /*將中斷處理函式設為time()*/
gotoxy(10,2); printf("the processes are playing:\n");
gotoxy(10,4); printf("processid prime times\n");
while(xx<=300)
break;
case 'b': a[1]++; if(a[1]>10000) a[1]=100; v=prime(a[1]);
if(v) break;
case 'c': a[2]++; if(a[2]>10000) a[2]=100; v=prime(a[2]);
if(v) break;
最短作業優先排程演算法 SJF演算法 的C 實現
在作業排程中,該演算法每次從後備作業佇列中挑選估計服務時間最短的乙個或幾個作業,將他們調入記憶體,分配必要的資源,建立程序並放入就緒佇列。與在程序排程中的原理類似。假設有n項作業位於就緒佇列中,這些作業的請求時間用陣列requesttimes按照提交時間的先後順序儲存,對應的作業服務時間 也稱持續時...
作業系統實驗報告 程序排程 作業排程等
作業系統實驗報告 1 程序排程 2 作業排程 3 主存空間的分配和 4 檔案系統 學生學院 計算機學院 專業班級 網路工程 3 班 學號 3107007062 學生姓名 張菲 指導教師 胡欣如 2009 年 12 月 20 日 計算機學院網路工程專業 3 班 組 學號 3107007062 姓名張菲...
攝像頭智慧型車速度控制演算法的設計與實現
學士學位 設計 bachelor s thesis 學士學位 設計 誠信承諾書 謝波 指導老師,胡長暉講師 湖北師範學院機電與控制工程學院中國黃石 435002 摘要 本文介紹了以mc9s12xs128微控制器為主控制器的攝像頭智慧型車的速度控制演算法的設計與實現。在系統硬體設計部分,主要闡述了舵機...