《操作系统原理》课程实验报告.doc

上传人:scccc 文档编号:13177752 上传时间:2021-12-17 格式:DOC 页数:10 大小:148KB
返回 下载 相关 举报
《操作系统原理》课程实验报告.doc_第1页
第1页 / 共10页
《操作系统原理》课程实验报告.doc_第2页
第2页 / 共10页
《操作系统原理》课程实验报告.doc_第3页
第3页 / 共10页
《操作系统原理》课程实验报告.doc_第4页
第4页 / 共10页
《操作系统原理》课程实验报告.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《《操作系统原理》课程实验报告.doc》由会员分享,可在线阅读,更多相关《《操作系统原理》课程实验报告.doc(10页珍藏版)》请在三一文库上搜索。

1、武汉纺织大学?操作系统原理?课程实验报告姓名: 班级: _ _ 学号: 实验时间: 2021 年 11 月 5 日 指导教师: 实验名称: 进程调度与管理 一、实验目的1了解进程的根本状态和创立方法;2熟悉优先级进程调度的实现原理。二、实验内容1调试下面的进程管理程序,描述其实现的根本过程。2了解进程的创立及优先级进程的调度的实现原理和方法,并观察实现的结果。三、操作步骤1进程管理程序实例:/*进程管理*/ #include"stdio.h"#include"stdlib.h"#include "string.h"#include &

2、quot;ctime"#define WAIT 1#define RUN 2#define FINISH 3typedef struct pcb int num; struct pcb *next; int priority; int timeneed; int state;pcb;/*用此结构体来模拟一个进程*/struct pcb *head;struct pcb *run;pcb *jccreat(int n)/*此函数用于创立进程队列*/ int i=1; pcb *head,*p,*q; srand(unsigned(time(NULL); /*随机函数的初始化*/ hea

3、d=(pcb *)malloc(sizeof(pcb);/*创立一个空头表*/ p=head; for(i=1;i<=n;i+)/*用循环来创立指定个结点*/ q=(pcb *)malloc(sizeof(pcb); p->next=q; q->num=i; q->next=NULL; q->priority=rand()%10+1;/*随机产生优先级*/ q->timeneed=rand()%10;/*随机产生运行时间*/ q->state=WAIT; p=q; return head;/*返回表头指针*/pcb *getmaxpriority(st

4、ruct pcb *head)/*此函数用来挑选一个优先级最大的进程来执行*/ struct pcb *p,*q; int max; p=head->next; max=p->priority;/*初始max为队首结点的优先级*/ q=p; while(p) if(p->priority>max)/*逐一比拟,选出优先级最大的结点*/ max=p->priority; q=p; p=p->next; return q;void delect(struct pcb *head,struct pcb *run)/*此函数用来将运行完的进程删除出进程队列*/ st

5、ruct pcb *q=head; while(q->next)/*扫描进程队列,找到执行完了的进程*/ if(q->next->num=run->num)/*判断是不是已完成的进程*/ if(run->next!=NULL) q->next=run->next; else q->next=NULL; free(run);/*释放申请的空间*/ return; q=q->next; void control()/*此函数是用来控制各个进程的执行和调度*/ struct pcb *p; run=head->next;/* 初始让第一个进

6、程运行*/ run->state=RUN; while(run) if(run->timeneed>0)/*如果当前run指针指向的进程所需时间不为零,状态为运行状态,就让这个进程运行*/ if(run->state=RUN) printf("pcb%d is running.n",run->num); printf("Waiting list:");/*显示整个等待队列*/ p=head->next; while(p) if(p!=run) printf("pcb%d ",p->num);

7、p=p->next; printf("n"); int delay(10000000);/*模拟进程运行*/ run->timeneed-;/*进程需要时间减一*/ run->priority=run->priority-3;/*进程优先级减三*/ if(run->timeneed!=0) if(run->priority<=head->next->priority)/*如果当前运行完的进程的优先级低于队首进程的优先*/ run->state=WAIT; run=getmaxpriority(head);/*那么从

8、进程队列中挑选一个优先级最大的进程来运行*/ run->state=RUN; else printf("pcb%d is finished.n",run->num); int delay(10000000); delect(head,run);/*删除该结点*/ if(head->next!=NULL)/*判断进程队列是不是为空*/ run=head->next; run->state=RUN; else printf("All progresses are done.n"); return; main() int n; i

9、nt flag=1; printf("Enter the number of the progresses:"); scanf("%d",&n);/*输入要创立的进程的数量*/ head=jccreat(n);/*创立进程队列,将链表的表头赋给head指针*/ run=head->next;/*run指针指向正在运行的进程的pcb*/ while(run) printf("num: %d,priority: %d,timenees: %d n", run->num, run->priority, run-&g

10、t;timeneed); run=run->next; /*将刚创立的进程队列打印出来*/ while(flag)/*由flag的值判断是否继续执行control()函数*/ if(head->next)/*判断进程是否完成*/ control(); else flag=0; int getch();2调试进程管理程序,分析程序执行过程,补齐程序中需要注释的空格;3描述程序的整个执行过程,掌握进程的创立方法及运行机制;4描述程序执行结果,并抓取图片。四、实验收获和建议1、分析实验或程序的运行过程在C-Free里新建文件,命名为“text2,把进程管理程序实例代码复制粘贴到里面中保存

11、运行,一会儿出现如下画面:Enter the number of the progresses:输入数量的进展,输入“5按Enter 键,得到如下结果2了解进程的创立及优先级进程的调度的实现原理和方法,并观察实现的结果。进程的定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。进程的创立:功能:创立一个指定标示符的进程。创立的过程及方法:1 申请空白PCB。为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB。 2 为新进程分配资源。为新进程的程序和数据以及用户栈分配必要的内存空间。显然,此时操作系统必须知道新进程所需要的内存大小。 3 初始化进程控制块。PC

12、B的初始化包括:初始化标识信息。将系统分配的标识符和父进程标识符,填入新的PCB中;初始化处理机状态信息。使程序计数器指向程序的入口地址,使栈指针指向栈顶;初始化处理机控制信息。将进程的状态设置为就绪状态或静止就绪状态,对于优先级,通常是将它设置为最低优先级,除非用户以显式的方式提出高优先级要求。 4 将新进程插入就绪队列。如果进程就绪队列能够接纳新进程,便将新进程插入到就绪队列中。 程序的调试过程:由jccreat函数创立5个进程队列,创立一个空表头,用循环来创立指定的结点,随机产生5个进程的优先级和运行时间。然后返回表头指针。挑选一个优先级最大的进程来执行,然后删除已经运行完了的进程,用contorl函数来控制各个进程的执行和调度,当前run指针指向的进程所需时间不为零,状态为运行状态,就让这个进程运行,如果当前运行完的进程的优先级低于队首进程的优先级,那么从进程队列中挑选一个优先级最大的进程来运行。然后用if(head->next!=NULL)判断进程队列是不是为空,如果为空,那么全部进程执行完毕。2、 谈谈自己在实验中的收获学习操作系统都有一个了解、理解、进一步理解的过程。而我现在就是在理解的过程,虽然过程很多困难,但通过问别个,翻书,慢慢的理解,相信结果是好的的。3、 提出自己对实验运行的看法和建议 还是有蛮多不对的地方,希望老师上课可细细讲下

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1