操作系統1-進程管理_第1頁
操作系統1-進程管理_第2頁
操作系統1-進程管理_第3頁
操作系統1-進程管理_第4頁
操作系統1-進程管理_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、仲愷農業工程學院實驗報告紙 信息科學與技術(院、系)計算機科學與技術 專業142班_組 操作系統實驗 課學號:201420224430 姓名:黃麗君 實驗日期 教師評定 實驗一、進程管理一、實驗目的通過實驗使學生進一步了解進程、進程狀態、進程控制等基本概念。基本能達到下列具體的目標:1、 理解進程 PCB 的概念,以及 PCB 如何實現、如何組織以及管理。2、 復習數據結構中如何對鏈的操作,包括建鏈、刪除、插入結點等,來實現進程的管理。二、實驗內容1、 建立一個結點,即 PCB 塊包括用戶標識域、狀態域(執行、等待、就緒)、 link 域。2、 建立三個隊列(執行隊列、就緒隊列、等待隊列)。3

2、、 根據進程狀態轉換實現對三個隊列的具體操作。具體的驅動可以采用時間片算法或手動調度的形式完成三個狀態之間的轉換4、 用 switch 選擇語句選擇狀態。5、 按照自己的設定能完成所有的狀態轉換的運行(包括創建和運行結束)。三、實驗步驟1、 復習進程管理三狀態模型部分內容。2、 預習C+ Builder或VC+、Delphi、JBuilder線程編程。3、 運行示例程序,進一步明確實驗要求。可以采用控制臺模式或窗口模式。4、 上機編程、調試程序。5、 完成實驗報告。4、 實驗代碼#include<stdlib.h>#include<stdio.h>#include<

3、;conio.h>#define getpch(type)(type*)malloc(sizeof(type) /將申請內存空間函數自定義為getpch(type)#define NULL 0struct pcdchar name10;char state; /進程狀態int super; /進程優先級int ntime; /進程需要運行的時間int rtime; /進程已經運行的時間struct pcb* link;/進程指向另一個進程的指針*ready=NULL,*p; /ready表示指向就緒隊列中首元素的指針,初始化為NULL,p用來存放當前剛剛輸入的PCBtypedef str

4、uct pcb PCB; void sort() /建立對進程進行優先級排列函數PCB *first,*second;int insert=0;if(ready=NULL)|(p->super)>(ready->super) /優先級最大者,插入隊首p->link=ready;ready=p;else /進程比較優先級,插入適當的位置first=ready;second=first->link;while(second!=NULL)if(p->super)>(ready->super) /若插入進程比當前進程優先數大 /插入到當前進程前面p-&g

5、t;link=second;first->link=p;second=NULL;insert=1; /插入隊列記錄符號else /插入進程優先數最低,則插入到隊尾first=first->link;second=second->link;if(insert=0) first->link=p;void input() /建立進程控制塊函數,PCB輸入模塊int i,num;printf("n請輸入進程號:");scanf("%d",&num);for(i=0;i<num;i+)printf("n進程號%d:n

6、",i);p=getpch(PCB);printf("n請輸入進程名:"); scanf("%s",&p->name); printf("n請輸入進優先數:"); scanf("%d",&p->super); printf("n請輸入進程運行時間:"); scanf("%d",&p->ntime); printf("n"); p->rtime=0;p->state='W' p-

7、>link=NULL; sort(); /調用sort函數int space() /PCB就緒隊列元素計數模塊,計算就緒隊列中PCB的總數int l=0;PCB* pr=ready; /獲取就緒隊列的頭指針readywhile(pr!=NULL)l+;pr=pr->link;return(l);void disp(PCB* pr) /建立進程顯示函數,用于顯示當前進程printf("n進程名 t 進程狀態 t 優先級 t 運行需要時間 t 已經運行時間n");printf("%s t",pr->name);printf("%c

8、 t",pr->state);printf("%d t",pr->super);printf("%d t",pr->ntime);printf("%d t",pr->rtime);printf("n");void check() /建立進程查看函數PCB* pr;printf("nt當前正在運行的進程是:%s",p->name); /顯示當前運行進程disp(p);pr=ready;printf("nt當前就緒隊列狀態是:n"); /顯

9、示就緒隊列狀態while(pr!=NULL)disp(pr);pr=pr->link;void destroy() /建立進程撤銷函數,進程運行結束,撤銷進程printf("n 進程: %s 已經完成n",p->name);free(p);void running() /建立進程就緒函數,進程運行時間到,置就緒狀態(p->rtime)+;if(p->rtime=p->ntime)destroy(); /調用destroy函數else(p->super)-;p->state='W'sort(); /調用sort函數void main() /主函數int len,h=0; /h表示進程調度次數char ch;input();len=space(); /獲取就緒隊列長度while(len!=0)&&(ready!=NULL)ch=getchar();h+;printf("n 執行數:%dn",h);p=ready; /以下3行是將P從就緒隊列的隊首摘除ready=p->link;p->link=N

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論