实验一  进程管理

1.目的和要求

通过实验理解进程的概念,进程的组成(PCB结构),进程的并发执行和操作系统进行进程管理的相关原语(主要是进程的创建、执行、撤消)。

2.实验内容

用C语言编程模拟进程管理,至少要有:创建新的进程;查看运行进程;换出某个进程;杀死运行进程以及进程之间通信等功能。

3.实验环境

Windows操作系统、VC++6.0

C语言

4.实验提示

PCB结构通常包括以下信息:进程名,进程优先数,轮转时间片,进程所占用的CPU时间,进程的状态,当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删。

主体程序

 #include "conio.h"#include "stdio.h"#include "stdlib.h"struct  PCB_type{  int pid;int priority;int cputime;………   };struct PCB_type neicun[20];int shumu=0,pid_l;main(){int n,m,i;char a;n=1;while(n==1){clrscr();printf("\n********************************************");printf("\n*               进程演示系统               *");printf("\n********************************************");printf("\n     1.创建新的进程      2.查看运行进程     ");printf("\n     3.换出某个进程      4.杀死运行进程     ");printf("\n     5.退出系统                             ");printf("\n********************************************");printf("\n请选择(1~5)");a=getchar();switch(a){ case'1':create( );  /*自定义过程*/break;case'2':run( );  /* 自定义过程 */break;case'3':huanchu();  /*自定义过程*/break;case'4':kill( );   /*自定义过程*/break;case'5':exit(0);  default: n=0;}}}create( )  /* 创建一个进程的示例(不完整的程序) */{if(shumu>=20){printf("\n内存已满,请先结束或换出进程\n");}else{printf("\n请输入新进程的pid\n");scanf("%d",&neicun[shumu-1].pid);printf("\n请输入新进程的优先级\n");scanf("%d",&neicun[shumu-1].youxian);printf("\n请输入新进程的大小\n");scanf("%d",&neicun[shumu-1].daxiao);shumu++;}}

5.实验运行结果

********************************************

*               进程演示系统               *

********************************************

1.创建新的进程      2.查看运行进程

3.换出某个进程      4.杀死运行进程

5.退出系统

********************************************

请选择(1~5)

然后根据你选择的不同,出现不同的结果。

6. 实验要求:

  1. 上机前认真使用C语言编写好程序,采用Visual C++6.0作为编译环境;
  2. 上机时独立调试程序

根据具体实验要求,填写好实验报告(包括目的和要求、实验内容、实验环境、设计思想、源程序、实例运行结果、总结)

实验报告代码:

#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
struct PCB_type
{  int pid;int priority;int size;char content[10];int state;     /* 0表示不在内存,1表示在内存,2表示挂起*/
};
struct PCB_type storage[20];
int num=0,hang_up=0,bj,i,j,pid;/*定义相关参数变量*/
/*********************创建新进程*************************/
void create()
{  if(num>=20)   /*判断是否有存储空间*/printf("\n 内存已满,请删除或挂起其他程序");else{for(i=0;i<20;i++)if(storage[i].state==0) break; /*按顺序在内存中寻找创建新进程的空间*/printf("\n请输入新建进程的pid值\n");scanf("%d",&storage[i].pid);for(j=0;j<i;j++)   /*判断是否之前已存储相同pid进程*/if(storage[j].pid==storage[i].pid){  printf("\n该进程已存在于内存中");return;}printf("\n请输入新进程的优先级 \n" ); scanf("%d",&storage[i].priority);printf("\n请输入新进程的大小\n" ); scanf("%d",&storage[i].size);printf("\n请输入新进程的内容\n" ); scanf("%s",&storage[i].content);storage[i].state=1;    /*将进程状态设为1,表示在内存中*/num++;/*内存中进程数目加一*/}
}
/********************查看当前运行进程**************************/
void run()
{  bj=0;for(i=0;i<20;i++)
if(storage[i].state==1)   /*若进程状态设为1,表示在内存中,输出查看*/
{printf("\n pid=%d",storage[i].pid);printf("   priority=%d",storage[i].priority);printf("   size=%d",storage[i].size);printf("   content=%s",storage[i].content);bj=1;/*存在于内存中的进程标记为1 */
}if(bj==0)  printf("\n当前没有运行该进程\n" );/*标记为0,表示该进程未创建于内存中*/ }
/********************换出进程***************************/void swap_out()
{if(num==0)  /*num=0,表示内存中无进程*/{ printf("\n当前没有运行的进程\n" );return;} printf("\n请输入要换出的进程的pid值\n" );scanf("%d",&pid);bj=0;for(i=0;i<20;i++){if(pid==storage[i].pid){ if(storage[i].state==1){storage[i].state=2; /*将该进程的状态设为挂起*/hang_up++;printf("\n该进程已成功挂起换出\n" );}else if(storage[i].state==0)printf("\n要换出的进程不存在\n" );else printf("\n要换出的进程已经被挂起\n" ); bj=1;break;}}if(bj==0) printf("\n要换出的进程不存在\n" );
}
/********************杀死进程***************************/
void kill()
{if(num==0){ printf("\n当前没有运行的进程\n" );return;}printf("\n请输入要杀死的进程的pid值\n" );scanf("%d",&pid);bj=0;for(i=0;i<20;i++){if(pid==storage[i].pid){ if(storage[i].state==1){storage[i].state=0; /*将该进程的状态设为不在内存中*/num--;  /*内存中的进程数目减少一个*/printf("\n该进程已成功杀死\n" );}else if(storage[i].state==0)printf("\n要杀死的进程不存在\n" );else printf("\n要杀死的进程已经被挂起\n" );/*剩余状态为2,挂起*/bj=1;break;}} if(bj==0) printf("\n要杀死的进程不存在\n" );}
/********************唤醒进程***************************/
void rouse()
{ if(num==0) { printf("当前没有运行的进程\n");return;}if(hang_up==0)  /*hang_up=0,表示没有挂起的进程*/{ printf("\n当前没有换出的进程\n");return;}printf("\n请输入要唤醒的进程的pid值:\n");scanf("%d",&pid);for(i=0;i<20;i++){if(pid==storage[i].pid){if(storage[i].state==2){storage[i].state=1; /*将该进程的状态设为挂起*/hang_up--;num++;printf("\n该进程已成功唤醒\n" );}else if(storage[i].state==0)printf("\n要唤醒的进程不存在\n" );else printf("\n要唤醒的进程已经在内存中\n" );}}}
/********************主程序***************************/
int main()
{int serial,n=1,i;
for(i=0;i<20;i++)storage[i].state=0; /*使所有进程都初始设为不在内存中*/
while(n){
printf("\n**********************************************");
printf("\n*               进程演示系统                 *");
printf("\n**********************************************");
printf("\n     1.创建新的进程             2.查看运行进程");
printf("\n     3.换出某个进程             4.杀死运行进程");
printf("\n     5.唤醒某个进程             6.退出程序    ");
printf("\n**********************************************");
printf("\n请选择(1~6):");scanf("%d",&serial);switch(serial){ case 1: create( ); break;case 2 :run(); break;case 3 :swap_out();break;case 4 :kill();break;case 5 :rouse();break;case 6 :exit(0);default: n=0;break;}
}
return 0;
}

运行结果:

操作系统实验一 进程管理相关推荐

  1. 操作系统实验二 进程管理

    进程管理 一.实验目的 1. 理解进程的概念,明确进程和程序的区别. 2. 理解并发执行的实质. 3. 掌握进程的创建.睡眠.撤销等进程控制方法. 二.实验内容与基本要求 用C语言编写程序,模拟实现创 ...

  2. 操作系统——实验二 进程管理

    1.实验目的 (1)加深对进程概念的理解,明确进程和程序的区别. (2)进一步认识并发执行的实质. (3)分析进程竞争资源现象,学习解决进程互斥的方法. 2.实验预备内容 (1)阅读Linux的sch ...

  3. 计算机操作系统实验二 进程管理

    一.实验目的 1.掌握进程的概念,明确进程的含义 2.认识并了解并发执行的实质 二.实验内容 1.编写一段程序,使用系统调用fork( )创建两个子进程.当此程序运行时,在系统中有一个父进程和两个子进 ...

  4. 操作系统 实验一 进程管理与进程同步

    理解安全性算法和银行家算法的核心机制: 针对3类资源.5个进程的情况,设计相应的数据结构,分别表示每个进程占用各类资源的情况: 编程实现安全性算法函数,编制主函数,动态输入资源的占用情况,进程的资源申 ...

  5. 操作系统实验一 Linux基本操作|实验二 进程管理

    由于当时没存代码,只有实验文档代码截图,文末也可直接获取实验文档. 操作系统实验 目录 实验一 Linux基本操作 实验二进程管理 实验一 Linux基本操作 1实验目的 1.熟悉在Linux操作系统 ...

  6. linux进程管理命令实验,实验2Linux进程管理.doc

    实验2Linux进程管理 实验2 Linux进程管理 实验目的 1.加深对进程概念的理解,明确进程和程序的区别 2.进一步认识并发执行的实质 3.分析进程争用资源的现象,学习解决进程互斥的方法 实验性 ...

  7. (王道408考研操作系统)第二章进程管理-第三节10:经典同步问题之哲学家进餐问题

    本文接: (王道408考研操作系统)第二章进程管理-第三节6:经典同步问题之生产者与消费者问题 ((王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题 (王道408 ...

  8. (王道408考研操作系统)第二章进程管理-第三节8:经典同步问题之吸烟者问题

    本文接: (王道408考研操作系统)第二章进程管理-第三节6:经典同步问题之生产者与消费者问题 ((王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题 文章目录 一 ...

  9. (王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题

    注意:生产者与消费者问题Linux系统编程专栏有案例讲解 Linux系统编程39:多线程之基于阻塞队列生产者与消费者模型 Linux系统编程40:多线程之基于环形队列的生产者与消费者模型 本文接:(王 ...

  10. 笔记篇:操作系统第二章 进程管理

    笔记篇:操作系统第二章 进程管理 目录 笔记篇:操作系统第二章 进程管理 2.1 进程的基本概念 2.1.1 程序的顺序执行及其特征 2.1.2 前驱图 2.1.3 程序的并发执行及其特征 2.1.4 ...

最新文章

  1. CCNA11月14日战报
  2. 0127-python内置函数(一).abb
  3. 启动Spark Shell,在Spark Shell中编写WordCount程序,在IDEA中编写WordCount的Maven程序,spark-submit使用spark的jar来做单词统计
  4. 《DSP using MATLAB》第6章开始了
  5. 【东营seo】SEO发展下的大机遇
  6. Python之包管理工具
  7. SpringBoot入门(四)——自动配置
  8. 第7章[7.18] Ext JS组件嵌入HTML页面
  9. 一篇文章搞定Python多进程
  10. 第26讲 js函数调用过程内存分析 js函数细节
  11. java内存分配与回收策略、动态对象年龄判断、空间分配担保
  12. c语言常用函数doc下载,c语言常用函数.doc
  13. win7系统如何加速计算机启动,怎么使win7系统开机加速
  14. 【BZOJ2434】【NOI2011】阿狸的打字机(AC自动机及Fail树的性质,树状数组)
  15. ARCGIS Pro试用申请教程以及登录页面脚本错误解决办法
  16. Anroid在应用层实现开机自启
  17. 移动硬盘坏了数据可以恢复吗?新方法一看便知
  18. 慢牛股票-基于Sencha touch+Cordova的股票类APP
  19. 从现在开始学 Kafka:SpringBoot 集成 Kafka,生产者与消费者示例
  20. 恢复被病毒强制隐藏的文件夹

热门文章

  1. 滴滴上市年营收超千亿,程维:我必须时刻保持危机感
  2. 支付宝资金预授权怎么开通详解,芝麻信用免押接口开通,免押领取/免押金租赁设备!
  3. 计算机媒体分类及其特点,多媒体的媒体种类有哪些?试归纳叙述多媒体关键特性以及这些特性之间的关系。...
  4. com.thoughtworks.xstream.InitializationException 打包时偶尔就会报错
  5. Anaconda2020安装与使用
  6. android台式电脑系统安装,怎么在台式机上安装安卓系统
  7. 算法-猴子运香蕉,看谁剩的多,N种解法
  8. ai画面怎么调大小_AI里面怎么改变文件的大小?
  9. android sqlite英文文献,SQLite数据库外文文献翻译.doc
  10. 氨基酸三字母序列转单字母序列