作業系統課程設計報告

2021-04-11 19:18:35 字數 3311 閱讀 1776

學院: 資訊科學與工程學院

專業: 電腦科學與技術

班級: 計***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 日 課程設計任務書 電腦科學與技術專業年級班 一 設計題目 檔案訪問介面設計 二 主要內容 利...