學院: 資訊科學與工程學院
專業: 電腦科學與技術
班級: 計***x
學號: 20131222***
學生姓名: ***
指導教師: ***
2015 年 7 月 23 日
一、 實驗內容
設計乙個有 n個程序的程序排程程式
[問題描述]
通過乙個簡單的程序排程模擬程式的實現,加深對各種程序排程演算法,程序切換的理解。
[基本要求]
1、程序排程演算法:採用動態最高優先數優先的排程演算法(即把處理機分配給優先數最高的程序)。
2、每個程序有乙個程序控制塊( pcb)表示。程序控制塊可以包含如下資訊:
程序名---程序標示數 id
優先數 priority 優先數越大優先權越高
到達時間---程序的到達時間為程序輸入的時間。、
程序還需要執行時間alltime,程序執行完畢alltime=0,
已用cpu時間----cputime、
程序的阻塞時間startblock-表示當程序在執行startblock個時間片後,程序將進入阻塞狀態
程序的阻塞時間blocktime--表示當程序阻塞blocktime個時間片後,程序將進入就緒狀態
程序狀態—state
佇列指標next 用來將pcb排成佇列。
3、排程原則:
程序的優先數及需要的執行時間可以事先人為地指定(也可以由隨機數產生)。程序的到達時間為程序輸入的時間。
程序的執行時間以時間片為單位進行計算。
程序在就緒佇列中待乙個時間片,優先數加1
每個程序的狀態可以是就緒 r(ready)、執行r(run)阻塞b(block)、或完成f(finish)四種狀態之一。
就緒程序獲得 cpu後都只能執行乙個時間片。用已占用cpu時間加1來表示。
如果執行乙個時間片後,程序的已占用cpu時間已達到所需要的執行時間,則撤消該程序,如果執行乙個時間片後程序的已占用cpu時間還未達所需要的執行時間,也就是程序還需要繼續執行,此時應將程序的優先數減3,然後把它插入就緒佇列等待cpu。
每進行一次排程程式都列印一次執行程序、就緒佇列、以及各個程序的 pcb,以便進行檢查。 重複以上過程,直到所要程序都完成為止。
二、資料結構設計
//定義pcb塊結構體
struct pcb;
//函式定義
void display(pcb* p結構體資料輸出函式
void input程序資訊初始化函式
void wait就緒佇列優先順序操作
void block阻塞佇列阻塞時間操作
void running程序執行操作
void insertwait(pcb* insert將pcb塊插入到就緒佇列
void insertreach(pcb* insert將pcb塊插入到未到達佇列
void insertblock(pcb* insert將pcb塊插入到阻塞佇列
void insertfinish(pcb* insert將pcb塊插入到完成佇列
void resort(pcb* head,pcb* insert);//對就緒佇列程序重新排序
void change將就緒佇列首位狀態修改為執行
//定義全域性變數
//定義全域性結構體指標變數—就緒佇列,未到達佇列,阻塞佇列,完成佇列
struct pcb*waiting=null,*reaching=null,*blocking=null,*finished=null;
int total=0定義全域性變數—總cpu時間
三、演算法設計(總體設計及模組設計)
四、測試資料及程式運**況
測試資料:
運**況:
五、實驗過程中出現的問題及解決方法
①由於長時間未使用c語言程式設計,對鍊錶的使用變得很陌生,所以花了一天的時間學習鍊錶的相關知識。
②如何使未到達佇列或阻塞佇列的程序進入就緒佇列也花了很長時間,後來想到對未到達佇列的程序按照到達時間從小到大的順序排列,對阻塞佇列的程序按照阻塞時間的順序進行排序,然後每次將到達時間減1,到達時間為零的時候、將阻塞時間減1,阻塞時間為零的時候插入到就緒佇列,並從未到達佇列、阻塞佇列刪除。
③由於鍊錶的使用依然不太熟練,所以如果當未到達佇列有幾個程序的到達時間相同,卻每次只能將乙個程序成功移動到就緒佇列。現在依然沒想到方法解決。
六、參考文獻
七:附錄:源**
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "stdlib.h"
#include
#define getpch(type) (type*)malloc(sizeof(type))
//pcb結構體
struct pcb;
//函式初始化
void block();
void display(pcb* p);
void input();
void wait();
void running();
void insertwait(pcb* insert);
void insertreach(pcb* insert);
void insertblock(pcb* insert);
void insertfinish(pcb* insert);
void resort(pcb* head,pcb* insert);
void change();
//定義全域性變數
struct pcb *waiting=null,*reaching=null,*blocking=null,*finished=null;
int total=0;
//就緒佇列排序函式
void resort(pcb* head,pcb* insert)else
if(p0->priority >= p1->priority)else
}waiting= head;
}//插入到就緒佇列
void insertwait(pcb* insert) else
if(p0->priority >= p1->priority)else
}}//插入到未到達佇列
void insertreach(pcb* insert) else
if(p0->reach <= p1->reach){
判斷該節點是否為頭節點,如果是,則將新節點設定為頭節點
if(p1==reaching){
reaching=p0;
else{
p2->next=p0;
p0->next=p1;
作業系統課程設計報告
上海電力學院 計算機作業系統原理 課程設計報告 題目名稱 編寫程式模擬虛擬儲存器管理 姓名 杜志豪 學號 20121798 班級 2012053班 同組姓名 孫嘉軼 課程設計時間 2014.6.30 2014.7.4 評語成績 一 設計內容及要求4 1.1 設計題目4 1 2 使用演算法分析4 1 ...
作業系統課程設計報告
作業系統 課程設計報告 姓名吳昊學號 20091811042 系別資訊管理與工程系 專業電腦科學與技術班級 09級 課程設計題目模擬檔案管理系統 指導教師崔新會 小組成員吳昊 丁強強 辛夢娟 王放 周洋 2012 年 6 月 11 日 目錄 內容摘要 2 第一章引言 2 第二章需求分析 4 第三章系...
作業系統課程設計報告
課程設計說明書 設計名稱 作業系統課程設計 題目 檔案訪問介面設計 學生姓名 陳小浪 專業 電腦科學與技術 班級 12級1班 學號 2012314118 指導教師 任朝暉 日期 2014 年 9 月 15 日 課程設計任務書 電腦科學與技術專業年級班 一 設計題目 檔案訪問介面設計 二 主要內容 利...