操作系统实验一进程管理实验报告_对进程的管理和控制使用

操作系统实验一进程管理实验报告_对进程的管理和控制使用实验一进程管理1.目的和要求通过实验理解进程的概念,进程的组成(PCB结构),进程的并发执行和操作系统进行进程管理的相关原语(主要是进程的创建、执行、撤消)。2.实验内容用C语言编程模拟进程管理,至少要有:创建新的进程;查看运行进程;换出某个进程;杀死运行进程以及进程之间通信等功能。3.实验环境Windows操作系统、VC++6.0C语言4.实验提示PCB结…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

实验一  进程管理

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;
}



运行结果:

操作系统实验一进程管理实验报告_对进程的管理和控制使用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/195260.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • chrome录制脚本的工具_chrome录屏插件

    chrome录制脚本的工具_chrome录屏插件Jmeter录制脚本工具之chrome插件–BlazeMeter

  • pycharm2021.11.3激活补丁_最新在线免费激活

    (pycharm2021.11.3激活补丁)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • 前端使用Vue框架解决跨域问题「建议收藏」

    前端使用Vue框架解决跨域问题「建议收藏」现在项目开发,都实现前后端分离开发,导致前端向后端发送请求,会出现跨域错误;如何解决这个问题?方法一:后端可以下载cors包,对指定的前端域名允许请求;具体操作可以自行百度;今天主要介绍的是前端人员不用去麻烦后端人员,就可以通过前端设置实现跨域请求;方法二:前端设置服务器代理;本人用的是脚手架vue…

  • sprintf函数用法注意事项

    sprintf函数用法注意事项注意字符串格式化时不要,输入和输出参数不要使用同一个字符数组。springt函数处理流程分析:输入和输出参数不同sprintf(str2,“ab%s”,str):输入和输出参数相同sprintf(str,“ab%s”,str):示例#include<stdio.h>intmain(){ charstr[10]=”0123456789″;…

  • pycharm:系统找不到指定文件[通俗易懂]

    pycharm:系统找不到指定文件[通俗易懂]解决办法:打开你的项目里面有一个idea文件→找到idea文件下的workspace.xml文件,修改name=”SDK_HOME”,这一行的value→将它的路径修改为Python安装包的路径

  • 数据分析sql面试必会6题经典_SQL常见面试题[通俗易懂]

    数据分析sql面试必会6题经典_SQL常见面试题[通俗易懂]SQL主要是用来到数据库里查询数据,这是数据分析过程的第一步。你要分析数据,首先要获取数据。所以,这是转行到数据分析岗位的必备技能。感谢@猴子老师的“猴子聊人物”公众号,我入门SQL就是在猴子的“转行数据分析师闯关教程”里学到的。柯本:新手如何学习SQL​zhuanlan.zhihu.com柯本:《MySQL必知必会》学习小结​zhuanlan.zhihu.com一、SQL性能优化题SQL语句…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号