进程的唤醒与阻塞
更新时间:2023-10-20 16:37:01 阅读量: 综合文库 文档下载
进程的唤醒与阻塞
#include<stdio.h> #include<stdlib.h> #include<string.h> struct jincheng_type{ int pid; int youxian;
int zhuangtai;//标志进程状态,0为不存在内存,1为在内存,3为挂起
char info[10]; }
struct jincheng_type neicun[20]; int shumu=0,guaqi=0,pid,flag=0; void create(){
if(shumu>=20) printf("\\n内存已满,请先换出或杀死进程\\n"); else{
for(int i=0;i<20;i++)
//定位,找到可以还未创建的进程 if(neicun[i].zhuangtai==0) break;
printf("\\n请输入新进程pid\\n"); scanf("%d",&(neicun[i].pid)); for(int j=0;j<i;j++)
if(neicun[i].pid==neicun[j].pid){
printf("\\n该进程已存在\\n"); return; }
printf("\\n请输入该进程的优先级\\n"); scanf("%d",&(neicun[i].youxian)); printf("\\n请输入该进程的大小\\n"); scanf("%d",&(neicun[i].daxiao)); printf("\\n请输入新进程的内容\\n"); scanf("%s",&(neicun[i].info)); //创建进程,使标记为1 neicun[i].zhuangtai=1; shumu++; } }
void run(){
for(int i=0;i<20;i++){ if(neicun[i].zhuangtai==1){ //输出运行进程的各个属性值
printf("\\n pid=%d",neicun[i].pid); printf("youxian=%d",neicun[i].youxian); printf("daxiao=%d",neicun[i].daxiao); printf("zhuangtai=%d",neicun[i].zhuangtai); printf("info=%s",neicun[i].info); flag=1; } }
if(!flag)printf("\\n当前没有运行的进程\\n"); }
void huanchu(){ if(!shumu){
printf("当前没有运行的进程\\n"); return; }
printf("\\n"); printf("\\n");
scanf("%d",&pid); for(int i=0;i<20;i++){
//定位,找到所要换出的进程,根据其状态做相应的处理 if(pid==neicun[i].pid){ if(neicun[i].zhuangtai==1){ neicun[i].zhuangtai=2; guaqi++;
printf("\\n已成功换出进程\\n"); }
else if(neicun[i].zhuangtai==0) printf("\\n要换出的进程不存在\\n");
else printf("\\n要换出的进程已被挂起\\n"); flag=1; brek; } }
//找不到,则说明进程不存在
if(flag==0) printf("\\n要换出的进程不存在\\n"); } void kill(){ if(!shumu){
printf("当前没有运行的进程\\n"); return;
}
printf("\\n "); scanf("%d",&pid); for(int i=0;i<20;i++){
//定位,找到所要杀死的进程,根据其状态做相应的处理 if(neicun[i].pid){
if(pid==neicun[i].zhuangtai==1){ neicun[i].zhuangtai=0; shumu--;
printf("\\n已成功杀死进程\\n"); }
else if(neicun[i].zhuangtai==0) printf("\\n要杀死的进程不存在\\n");
else printf("\\n要杀死的进程已被挂起\\n"); flag=1; break; } }
//找不到,则说明进程不存在
if(!flag)printf("\\n要杀死的进程不存在\\n"); }
void huanxing(){
if(!shumu){
printf("当前没有运行的进程\\n"); return; } if(!guaqi){
printf("当前没有挂起的进程\\n"); return; }
printf("\\n输入pid\\n"); scanf("%d",&pid); for(int i=0;i<20;i++){ //定位,
找到所要换出的进程,根据其状态做出相应的处理
if(pid==neicun[i].pid){ flag=false;
if(neicun[i].zhuangtai==2){ neicun[i].zhuangtai=1; gauqi--;
printf("\\n已成功换出进程\\n"); }
else if(neicun[i].zhuangtai==0) printf("\\n要换出的进程不存在\\n");
else printf("\\n要换出的进程已被挂起\\n"); break; } }
//找不到,则说明进程不存在
if(flag) printf("\\n要换出的进程不存在\\n"); }
void main(){ int n=1; int sum;
//一开始所有进程都不在内存中 for(int i=0;i<20;i++) neicun[i].zhuangtai=0; while(n){
printf("\\n*************************************************************");
printf("\\n* 进程演示系统
*");
printf("\\n*************************************************************");
printf("\\n* 1.创建新的进程 *");
printf("\\n* 2.换出某个进程 *");
printf("\\n* 3.唤醒某个进程 *");
printf("\\n*************************************************************");
printf("\\n请选择(1~6)\\n"); scanf("%d",&sum); switch(sum){ case 1:creat();break; case 2:run;break; case 3:huanxing();break; case 4:kill();break; case 5:huangxing();break; case 6:exit(0); default:n=0 }
flag=0;//恢复标记 } }
正在阅读:
进程的唤醒与阻塞10-20
美丽的香纸沟作文400字06-27
一场冷战作文500字07-03
国庆节游鹤山公园600字作文08-07
开平区国土分局规章制度211-12
电子密码锁04-22
《经济法学》11-25
MP3格式-写数据到MP3数据帧12-23
小溪流的旅行作文500字07-10
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 阻塞
- 唤醒
- 进程