操作系统实验——进程控制

预习内容:

1.进程的概念
⑴程序的并发执行
⑵进程的定义
2.进程的描述
⑴进程控制块
⑵进程上下文
⑶进程上下文切换
⑷进程空间与大小
3. 进程状态及其转换
⑴进程状态
⑵进程状态转换
4.进程控制
⑴进程创建与撤销
⑵进程的阻塞与唤醒

实验目的与要求(及主要实验仪器、设备):

1、理解进程的概念,明确进程和程序的区别。
2、理解并发执行的实质。
3、 掌握进程的创建、睡眠、撤销等进程控制方法
要求:
(1)一台Windows7以上版本操作系统的计算机。
(2)计算机装有Microsoft Visual Studio专业版或企业版。

实验原理(方法与与原理分析):

进程的创建:
1.为新进程分配唯一的进程标识符,并从PCB队列中申请一个空闲的PCB;
2.为新进程分配必要的内存空间和其它各种资源;
3.初始化PCB中的相应信息,如标识信息、CPU信息、进程控制信息;
4.若条件许可,将新进程的PCB插入到就绪队列中;

实验步骤(程序代码与实验过程):

步骤1:登录进入Windows,启动VC++。
步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32ConsolApplication”,然后在“Projectname”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。
步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++SourceFile”,然后在“File”处输入C/C++源程序的文件名。
步骤4:将新创建的C/C++源程序中,编译成的可执行文件进行执行。
1.创建新进程代码:
void create()
{
if(num>=20) /判断是否有存储空间/
printf("\n 内存已满,请删除或挂起其他程序");
else{
for(i=0;i<20;i++)
if(neicun[i].state0) break; /按顺序在内存中寻找创建新进程的空间/
printf("\n 请输入新建进程的 pid 值\n");
scanf("%d",&neicun[i].pid);
for(j=0;j<i;j++) /判断是否之前已存储相同 pid 进程/
if(neicun[j].pidneicun[i].pid)
{ printf("\n 该进程已存在于内存中");
return;
}
printf("\n 请输入新进程的优先级 \n" );
scanf("%d",&neicun[i].youxianji);
printf("\n 请输入新进程的大小\n" );
scanf("%d",&neicun[i].daxiao);
printf("\n 请输入新进程的内容\n" );
scanf("%s",&neicun[i].neirong);
neicun[i].state=1; /将进程状态设为 1,表示在内存中/
num++;/内存中进程数目加一/
}
}
2.查看进程代码:
void run()
{ bj=0;
for(i=0;i<20;i++)
if(neicun[i].state1) /若进程状态设为 1,表示在内存中,输出查看/
{printf("\n pid=%d",neicun[i].pid);
printf(" youxianji=%d",neicun[i].youxianji);
printf(" daxiao=%d",neicun[i].daxiao);
printf(" neirong=%s",neicun[i].neirong);
bj=1;/*存在于内存中的进程标记为 1 */
}
if(bj0)
printf("\n 当前没有运行该进程\n" );/标记为 0,表示该进程未创建于内存中/
}

3.换出进程代码
void huanchu()
{if(num0) /num=0,表示内存中无进程/
{ printf("\n 当前没有运行的进程\n" );
return;
}
printf("\n 请输入要换出的进程的 pid 值\n" );
scanf("%d",&pid);
bj=0;
for(i=0;i<20;i++)
{
if(pidneicun[i].pid)
{ if(neicun[i].state1)
{neicun[i].state=2; /将该进程的状态设为挂起/
guaqi++;
printf("\n 该进程已成功挂起换出\n" );
}
else if(neicun[i].state0)
printf("\n 要换出的进程不存在\n" );
else printf("\n 要换出的进程已经被挂起\n" );
bj=1;break;
}
}
if(bj0) printf("\n 要换出的进程不存在\n" );
}
4.杀死进程代码
void kill()
{
if(num0)
{ printf("\n 当前没有运行的进程\n" );
return;
}
printf("\n 请输入要杀死的进程的 pid 值\n" );
scanf("%d",&pid);
bj=0;
for(i=0;i<20;i++)
{
if(pidneicun[i].pid)
{ if(neicun[i].state1)
{neicun[i].state=0; /将该进程的状态设为不在内存中/
num–; /内存中的进程数目减少一个/
printf("\n 该进程已成功杀死\n" );
}
else if(neicun[i].state0)
printf("\n 要杀死的进程不存在\n" );
else printf("\n 要杀死的进程已经被挂起\n" );/剩余状态为 2,挂起/
bj=1;break;
}
}
if(bj0) printf("\n 要杀死的进程不存在\n" );
}
5.唤醒进程代码
void huanxing()
{
if(num0)
{ printf(“当前没有运行的进程\n”);
return;
}
if(guaqi0) /guaqi=0,表示没有挂起的进程/
{ printf("\n 当前没有换出的进程\n");
return;
}
printf("\n 请输入要唤醒的进程的 pid 值:\n");
scanf("%d",&pid);
for(i=0;i<20;i++){
if(pidneicun[i].pid)
{
if(neicun[i].state2)
{neicun[i].state=1; /将该进程的状态设为挂起/
guaqi–;
num++;
printf("\n 该进程已成功唤醒\n" );
}
else if(neicun[i].state==0)
printf("\n 要唤醒的进程不存在\n" );
else printf("\n 要唤醒的进程已经在内存中\n" );
}
}
}

实验结果(数据分析与结论):

1.通过代码实现进程的创建和对是否有存储空间的判断,在有存储空间的情况下新建进程pid值,并且对之前是否存储相同pid值进行判断,在确定没有相同的pid进程的情况下输入进程的优先级,并且修改新建进程状态内存空间减少,之后结束;如果在有存储空间或者有相同的pid进程的情况下直接进行结束。
2.执行查看的代码后通过查看当前运行进程来判断循环判断内存中进程状态是否为1,是的情况下输出当前进程状态后结束,如果内存中状态不为1则直接结束。
3.创建进程

4.查看当前运行进程

5.换出进程

6.杀死进程

7.唤醒进程

问题讨论:

问:在什么情况下会导致进程被撤销?
答:
(1)该进程已完成所要求的功能而正常终止;
(2)由于某种错误导致非正常终止;
(3)祖先进程要求撤销某个子进程。

操作系统实验——进程控制相关推荐

  1. 操作系统实验进程控制(C语言版)

    操作系统实验进程控制 1.实验目的 2.实验内容 3.实验准备 3.1进程 3.1.1进程的含义 3.1.2进程状态 3.1.3进程状态之间的装换 3.2进程控制块 3.3进程的创建与撤消 3.4进程 ...

  2. 操作系统实验-进程控制(python实现)

    操作系统实验-进程控制(python实现) 一.实验目标 模拟操作系统对进程的管理.实现进程之间的切换. 二.实验要求 (1)单处理机,即一次只能 1 个进程处于运行态 (2)内核实现进程切换和进程调 ...

  3. Linux多线程矩阵,操作系统实验(进程)多线程实现矩阵乘法

    <操作系统实验(进程)多线程实现矩阵乘法>由会员分享,可在线阅读,更多相关<操作系统实验(进程)多线程实现矩阵乘法(6页珍藏版)>请在人人文库网上搜索. 1.多线程编程实现矩阵 ...

  4. 操作系统实验--进程的创建撤销和控制

    进程的创建撤销和控制 一.实验名称 进程的创建撤销和控制 二.实验内容 学生独立设计用于描述进程的数据结构,完成进程的创建.同步和互斥. 三.实验原理和设计思路 在Linux系统下用fork()函数创 ...

  5. 操作系统:进程控制与调度

    目录 3.3 进程控制与调度 3.3.1 进程执行 3.3.2 进程调度 3.3.3 进程调度算法 3.4 作业与进程的关系 3.5 线程引入 3.3 进程控制与调度 3.3.1 进程执行 系统模型: ...

  6. 模拟进程创建、终止、阻塞、唤醒原语_操作系统基础8-进程及进程控制

    进程(Process) 的定义 从不同的角度,进程可以有不同的定义,传统典型的定义: 进程是程序的一次执行过程. 或者:一个正在执行的程序的实例 进程是一个程序及其数据在处理机上顺序执行所发生的活动 ...

  7. 实验四 linux进程控制实验报告,Linux系统进程控制操作系统实验报告4

    实验课程名称:操作系统 实验项目名称Linux系统进程控制实验成绩 实验者专业班级组别 同组者实验日期年月日第一部分:实验分析与设计(可加页) 实验内容描述(问题域描述) 要求:掌握Linux系统中进 ...

  8. 操作系统实验:Linux下的进程控制实验

    进程控制实验 一.实验目的: 二.实验平台: 三.实验内容: 1.进程的创建与销毁 进程控制相关函数 实验结果分析 2.多进程并发执行 time命令 实验结果分析 四.总结分析 一.实验目的: 加深对 ...

  9. 操作系统—进程控制实验

    文章目录 1.关于实验前环境准备 2.关于可能用到的命令 3.关于makefile 4.关于实验说明 5.关于实验指导的程序 6.关于独立实验 Q(跪求大佬解答)? 1.关于实验前环境准备 要准备好C ...

  10. 操作系统实验二进程的创建控制实验(含代码及实验心得)

    实现工具:PC机 实现环境:Linux 实习内容(功能.目标): 实验目的:  创建进程,体会进程间的并发特征. 实验内容:  编写一段程序,使用系统调用 fork() 创建两个子进程 p1 和 p2 ...

最新文章

  1. leetcode - 150. Evaluate Reverse Polish Notation
  2. 17年三月计算机二级,2017年3月计算机二级考试攻略
  3. linux ll 文件大小单位_该如何改善 Linux 系统性能?
  4. C++输入一个整数后接着输入字符串
  5. IOS – OpenGL ES 调节图像阴影 GPUImageHighlightShadowFilter
  6. 京东面试官:你是怎么理解 MySQL 的优化原理的?
  7. hadoop和spark的区别和联系
  8. HTML5:去除IE10中输入框和密码框的X按钮和小眼睛
  9. python爬虫结构化_python爬虫获取小区经纬度以及结构化地址
  10. 使用A2P2V针对特定目标生成攻击序列
  11. linux扫描后门工具,Linux下rootkit后门检测工具chkrootkit安装使用教程
  12. navicat的注册码
  13. 使用51单片机驱动航模无刷电机
  14. Centos7端口查看命令
  15. html5video拼接屏一部分黑屏,拼接屏常见问题与解决方法
  16. SpringBoot+MyBatisPlus+Vue+ElementUI实现前后端分离的物业管理系统
  17. 如何构建OctoberCMS Widget插件
  18. #64-【模拟】屠城(zly#3)
  19. 利用JAVA的BFS爬虫爬出豆瓣读书的评论和标签
  20. 无需工具qlv转mp4格式最新,下载好的qlv文件怎么转换成mp4?腾讯视频怎么下载mp4格式?怎么把腾讯视频转换成mp4格式?

热门文章

  1. 电信家庭宽带光猫端口映射实现外网访问家庭内网
  2. 几个网络捕获工具的评价
  3. 机器学习Class 6:分类及描述
  4. git 提交错误:The requested URL returned error: 502
  5. git 代码提交,出现403错误的问题
  6. iOS NSString,NSLog添加%百分号和引号等符号
  7. 强化学习的方法总结与分类
  8. 用计算机怎么管理小米路由器,小米路由器3G怎么设置?(电脑)
  9. 雷允上药业百年老店回春
  10. 18软工实践-团队现场编程实战(抽奖系统)