- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《操作系统》实训报告讲述
PAGE 21
实训一、模拟进程操作原语
实训目的:
通过设计并调试创建、终止、阻塞、唤醒原语功能,有助于对操作系统中进程控制功能的理解,掌握操作系统模块的设计方法和工作原理。
实训内容:
设计创建、终止、阻塞、唤醒原语功能函数。
设计主函数,采用菜单结构(参见后面给出的流程图)。
设计“显示队列”函数,目的能将就绪、阻塞队列中的进程信息显示在屏幕上,以供随时查看各队列中进程的变化情况。
实训步骤:
1、系统总体结构:
开始
系统主菜单1…创建
2…阻塞
3…唤醒
4…终止
5…显示
0…退出
请输入您需要的功能(0-5):
输入选择=?
5
4
3
2
1
0
退出
创建
阻塞
唤醒
终止
显示
结束
其中:
进程名用P1,P2标识。
优先级及运行时间:为实训题目二做准备。
状态为:就绪、运行、阻塞,三种基本状态。
指针:指向下一个PCB。
2、进程PCB中应包含以下内容:
进程名优先级运行时间状态指针实训代码:
#include stdio.h
#includestring.h
struct PCB
{
char name[4];
int priority;
int runtime;
};
void main()
{
int x,t;
int a=0;
int k=0,r=1,i=0,j=0;//k为就绪队列总数,r堵塞队列总数
char name[4];
struct PCB pcb[10];
struct PCB pcb1[10];
struct PCB pcb2[10];
printf(菜单\n\n\n);
printf(0退出系统\n);
printf(1创建进程\n);
printf(2堵塞进程\n);
printf(3唤醒进程\n);
printf(4终止进程\n);
printf(5显示进程\n);
printf(\n);
strcpy(pcb1[0].name,s);//堵塞队列
pcb1[0].priority = 2;
pcb1[0].runtime = 3;
while(1)
{
printf(请输入你的选择:);
scanf(%d,x);
if(x==0)
break;
if(x==1)
{
printf(创建进程\n);
printf(进程名:);
scanf(%s,pcb[k].name);
printf(优先级:);
scanf(%d,pcb[k].priority);
printf(运行时间:);
scanf(%d,pcb[k].runtime);
k=k+1;
}
if(x==2)
{
printf(堵塞进程\n);
printf(请输入要查找的进程:);
scanf(%s,name);
for(j=0;j=k;j++)
{
if(strcmp(pcb[j].name,name)==0)
{
t=j;
strcpy(pcb2[a].name,pcb[t].name);
pcb2[a].priority = pcb[t].priority;
pcb2[a].runtime = pcb[t].runtime;
strcpy(pcb1[r].name,pcb2[a].name);
pcb1[r].priority = pcb2[a].priority;
pcb1[r].runtime = pcb2[a].runtime;
r=r+1;
a=a+1;
for(i=t;i=k;i++)
{
strcpy(pcb[i].name,pcb[i+1].name);
pcb[i].priority = pcb[i+1].priority;
pcb[i].runtime = pcb[i+1].runtime;
}
k=k-1;
printf(将就绪序列调度为运行:);
for(i=0;ia;i++)
printf(%s %d %d\n,pcb2[i].name,pcb2[i].priority,pcb2[i].runti
文档评论(0)