好文档 - 专业文书写作范文服务资料分享网站

操作系统实验全(包含源代码)

天下 分享 时间: 加入收藏 我要投稿 点赞

计算机操作系统教程(第三版)

{

disp(pr); pr=pr->link; } }

destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ {

printf(\进程 [%s] 已完成.\\n\ free(p); }

running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ {

(p->rtime)++;

if(p->rtime==p->ntime)

destroy(); /* 调用destroy函数*/ else {

(p->super)--; p->state='w';

sort(); /*调用sort函数*/ } }

main() /*主函数*/ {

int len,h=0; char ch; input(); len=space();

while((len!=0)&&(ready!=NULL)) {

ch=getchar(); h++;

printf(\ p=ready;

ready=p->link; p->link=NULL; p->state='R'; check(); running();

printf(\按任一键继续......\ ch=getchar(); }

printf(\进程已经完成.\\n\ ch=getchar(); }

计算机操作系统教程(第三版)

修改之后:

#include \ #include #include

#define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0

struct pcb { /* 定义进程控制块PCB */ char name[10]; char state; /*状态*/ int super; /*优先级*/ int ntime; int rtime;

struct pcb* link; /*结构体pcb的指针类型*/ }*ready=NULL,*p;/*指向当前用行的pcb*/ typedef struct 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)>(second->super)) /*若插入进程比当前进程优先数大,*/ { /*插入到当前进程前面*/ p->link=second; first->link=p; second=NULL; insert=1; } else /* 插入进程优先数最低,则插入到队尾*/ { first=first->link; second=second->link; }

计算机操作系统教程(第三版)

} if(insert==0) first->link=p; } }

void input() /* 建立进程控制块函数*/ {

int i,num;

//clrscr(); /*清屏*/

printf(\请输入进程个数:\ scanf(\ for(i=0;irtime=0;p->state='w'; p->link=NULL; sort(); /* 调用sort函数*/ } }

int space() {

int l=0; PCB* pr=ready; while(pr!=NULL) { l++; pr=pr->link; }

return(l); }

disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ {

printf(\ printf(\ printf(\ printf(\

计算机操作系统教程(第三版)

printf(\ printf(\ printf(\ }

check() /* 建立进程查看函数 */ {

PCB* pr;

printf(\当前正在运行的进程是:%s\显示当前运行进程*/ disp(p); pr=ready;

printf(\当前就绪队列状态为:\\n\显示就绪队列状态*/ while(pr!=NULL) { disp(pr); pr=pr->link; } }

destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ {

printf(\进程 [%s] 已完成.\\n\ free(p); }

running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ {

(p->rtime)++;

if(p->rtime==p->ntime) destroy(); /* 调用destroy函数*/ else { (p->super)--; p->state='w'; sort(); /*调用sort函数*/ } }

main() /*主函数*/ {

int len,h=0; char ch; input(); len=space();

while((len!=0)&&(ready!=NULL)) { ch=getchar();

计算机操作系统教程(第三版)

h++; printf(\ p=ready; ready=p->link; p->link=NULL; p->state='R'; check(); running(); printf(\按任一键继续......\ ch=getchar(); }

printf(\进程已经完成.\\n\ ch=getchar(); }

实验二、银行家算法

(一) 目的和要求

银行家算法是由Dijkstra设计的最具有代表性的避免死锁的算法。本实验要求用高级语言编写一个银行家的模拟算法。通过本实验可以对预防死锁和银行家算法有更深刻的认识。 (二) 实验内容

1、 设置数据结构

包括可利用资源向量(Availiable),最大需求矩阵(Max),分配矩阵(Allocation),需求矩阵(Need) 2、 设计安全性算法

设置工作向量Work 表示系统可提供进程继续运行可利用资源数目,Finish 表示系统是否有足够的资源分配给进程

(三) 实验环境

1、 pc 2、 vc++ (四)、程序源代码:

/*子函数声明*/

int Isprocessallover(); //判断系统中的进程是否全部运行完毕 void Systemstatus(); //显示当前系统中的资源及进程情况 int Banker(int ,int *); //银行家算法

void Allow(int ,int *); //若进程申请不导致死锁,用此函数分配资源 void Forbidenseason(int ); //若发生死锁,则显示原因

/*全局变量*/

int Availiable[3]={3,3,2}; //初始状态,系统可用资源量 int Max[5][3]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};

//各进程对各资源的最大需求量

int Allocation[5][3]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};

//初始状态,各进程占有资源量

int Need[5][3]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};

操作系统实验全(包含源代码)

计算机操作系统教程(第三版){disp(pr);pr=pr->link;}}destroy()/*建立进程撤消函数(进程运行结束,撤消进程)*/{printf(\进程[%s]已完成.\\n\free(p);}running()/*建立进程就绪函数(进程运行时间到,置就绪状态
推荐度:
点击下载文档文档为doc格式
5nfo837mjm37lyc0yel2
领取福利

微信扫码领取福利

微信扫码分享