当前位置: 首页 > 其他范文 > 其他范文

模拟进程创建、终止、阻塞、唤醒原语操作系统原理

作者:老刘忙啊 | 发布时间:2020-12-21 16:11:49 收藏本文 下载本文

操作系统原理 题 目:模拟进程创建、终止、阻塞、唤醒原语 院(部):

管理工程学院 专 业:

信息管理与信息系统 班 级:

信管 姓 名:

学 号:

实验题目一:模拟进程创建、终止、阻塞、唤醒原语 一、题目类型:必做题目。

二、实验目的:通过设计并调试创建、终止、阻塞、唤醒原语功能,有助于对操作系统中进程控制功能的理解,掌握操作系统模块的设计方法和工作原理。

三、实验环境:

1、硬件:pc机及其兼容机。

2、软件:Windows OS,Turbo C或C++、VC++、VS.net、Java等。

四、实验内容:

1、设计创建、终止、阻塞、唤醒原语功能函数。

2、设计主函数,采用菜单结构(参见后面给出的流程图)。

3、设计“显示队列”函数,目的能将就绪、阻塞队列中的进程信息显示在屏幕上,以供随时查看各队列中进程的变化情况。

五、算法流程图 开始 系统主菜单 1…创建 2…阻塞 3…唤醒 4…终止 5…显示 0…退出 请输入您需要的功能(0-5):

输入选择=? 5 4 3 2 1 0 退出 创建 阻塞 唤醒 终止 显示 结束 六、程序清单 #include #include struct pcb { char name[10];int status;int order;int time;int wtime;int ytime;}pcb[11];//该结构体用于存储已经输入的进程 struct ghost { char name[10];int status;int order;int time;}ghost[11];//该结构体用于优先级调度时,进程的优先级排序 char a_name[10];int i=0,y,a=0,x,z,jilu;void insert();void block();void rouse();void stop();void outPut();void control();//实验二添加函数 void order_control();//实验二添加函数 void time_control();//实验二添加函数 void insert(){ jilu=0;//jilu是一个用于判断的变量,在重复时进行判断跳过 if(i>=10)printf(“进程已经存在10个,无法继续添加进程\n“);else { printf(“请输入插入pcb的数据:\n“);printf(“1、进程名:“);scanf(“%s“,&pcb[i].name);printf(“2、该进程的优先级(1-10):“);scanf(“%d“,&pcb[i].order);printf(“3、运行时间“);scanf(“%d“,&pcb[i].time);for(y=0;y0)jilu=0;else { printf(“输入已经完成\n您输入的数据为:\n进程名: %s\n优先级: %d\n运行时间: %d\n“,pcb[i].name,pcb[i].order,pcb[i].time);printf(“------------------------------------------------------------------\n“);strcpy(ghost[i].name,pcb[i].name);ghost[i].order=pcb[i].order;ghost[i].time=pcb[i].time;pcb[i].status=1;ghost[i].status=1;pcb[i].wtime=pcb[i].time;pcb[i].ytime=0;i++;} } } void block(){ int m;printf(“\n请输入您要改变状态的进程的进程名: “);scanf(“%s“,&a_name);for(y=0;y<=i;y++){ if(strcmp(pcb[y].name,a_name)==0){ a=1;if(pcb[y].status==0){ printf(“您要修改的进程已经是阻塞状态,无法更改\n“);} if(pcb[y].status==2){ pcb[y].status=0;for(m=0;m<=i;m++){ if(strcmp(ghost[m].name,a_name)==0){ ghost[m].status=0;} } printf(“操作已完成,进程成功改为阻塞状态\n“);} } } if(a==0){ printf(“对不起!您查找的进程名不存在\n“);} a=0;} void rouse(){ int m;printf(“\n请输入您要改变状态的进程的进程名: “);scanf(“%s“,&a_name);for(y=0;y<=i;y++){ if(strcmp(pcb[y].name,a_name)==0){ a=1;if(pcb[y].status==1){ printf(“您要修改的进程已经是就绪状态,无法更改\n“);break;};if(pcb[y].status==0){ pcb[y].status=1;for(m=0;m<=i;m++){ if(strcmp(ghost[m].name,a_name)==0){ ghost[m].status=1;} } printf(“操作已完成,进程成功改为运行状态\n“);break;} } } if(a==0){ printf(“对不起!您查找的进程名不存在\n“);} a=0;} void stop(){ printf(“\n请输入您要改变状态的进程的进程名: “);scanf(“%s“,&a_name);for(y=0;y<=i;y++){ if(strcmp(pcb[y].name,a_name)==0){ a=1;for(;y

现象:使用阻塞功能后,输出功能无法正常显示进程状态。

解决:在进程的结构体中添加控制进程状态的变量。

操作系统课程设计银行家算法模拟实现

操作系统课程设计编程序模拟银行家算法

本文标题: 模拟进程创建、终止、阻塞、唤醒原语操作系统原理
链接地址:https://www.dawendou.com/fanwen/qitafanwen/326601.html

版权声明:
1.大文斗范文网的资料来自互联网以及用户的投稿,用于非商业性学习目的免费阅览。
2.《模拟进程创建、终止、阻塞、唤醒原语操作系统原理》一文的著作权归原作者所有,仅供学习参考,转载或引用时请保留版权信息。
3.如果本网所转载内容不慎侵犯了您的权益,请联系我们,我们将会及时删除。

本栏目阅读排行

    栏目最新

      重点推荐栏目

      关于大文斗范文网 | 在线投稿 | 网站声明 | 联系我们 | 网站帮助 | 投诉与建议 | 人才招聘 | 网站大事记
      Copyright © 2004-2025 dawendou.com Inc. All Rights Reserved.大文斗范文网 版权所有