ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:271.51KB ,
资源ID:7696709      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7696709.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统实验二 进程管理.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、操作系统实验二 进程管理操作系统实验实验二 进程管理学号 姓名 班级 华侨大学电子工程系实验目的 1、理解进程的概念,明确进程和程序的区别。2、理解并发执行的实质。3、掌握进程的创建、睡眠、撤销等进程控制方法。 实验内容与要求 基本要求:用C语言编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;杀死进程等功能。 实验报告内容1、进程、进程控制块等的基本原理。进程是现代操作系统中的一个最基本也是最重要的概念,掌握这个概念对于理解操作系统实质,分析、设计操作系统都有其非常重要的意义。为了强调进程的并发性和动态性,可以给进程作如下定义:进程是可并发执行的程序在一个数据集合上的运行过程,是系

2、统进行资源分配和调度的一个独立单位。进程又就绪、执行、阻塞三种基本状态,三者的变迁图如下: I/O完成 时间片完 进程调度 I/O请求由于多个程序并发执行,各程序需要轮流使用CPU,当某程序不在CPU上运行时,必须保留其被中断的程序的现场,包括:断点地址、程序状态字、通用寄存器的内容、堆栈内容、程序当前状态、程序的大小、运行时间等信息,以便程序再次获得CPU时,能够正确执行。为了保存这些内容,需要建立个专用数据结构,我们称这个数据结构为进程控制块PCB (Process Control Block)。进程控制块是进程存在的惟一标志,它跟踪程序执行的情况,表明了进程在当前时刻的状态以及与其它进程

3、和资源的关系。当创建一个进程时,实际上就是为其建立一个进程控制块。在通常的操作系统中,PCB应包含如下一些信息:1 进程标识信息。为了标识系统中的各个进程,每个进程必须有惟一的标识名或标识数。 位置信息。指出进程的程序和数据部分在内存或外存中的物理位置。 状态信息。指出进程当前所处的状态,作为进程调度、分配CPU的依据。 进程的优先级。一般根据进程的轻重缓急其它信息。这里给出的只是一般操作系统中PCB所应具有的内容,不同操作系统的PCB结构是不同的,我们将在2.8节介绍Linux系统的PCB结构。程度为进程指定一个优先级,优先级用优先数表示。 进程现场保护区。当进程状态变化时(例如一个进程放弃

4、使用CPU),它需要将当时的CPU现场保护到内存中,以便再次占用CPU时恢复正常运行,有的系统把要保护的CPU现场放在进程的工作区中,而PCB中仅给出CPU现场保护区起始地址。 资源清单。每个进程在运行时,除了需要内存外,还需要其它资源,如I/O设备、外存、数据区等。这一部分指出资源需求、分配和控制信息。 队列指针或链接字。它用于将处于同一状态的进程链接成一个队列,在该单元中存放下一进程PCB首址。其它信息。这里给出的只是一般操作系统中PCB所应具有的内容,不同操作系统的PCB结构是不同的,我们将在2.8节介绍Linux系统的PCB结构。2、程序流程图。3、程序及注释。 #include#in

5、clude#includestruct jincheng_type / 定义表示进程信息的结构体 int pid; /进程ID int youxian; /优先级 int daxiao; /大小 int zhuangtai; /进程的状态,这里用0表示没有建立或被杀死,1表示执行,2表示换出 int info; /内容;struct jincheng_type neicun20; /定义20个内存单位给进程使用int shumu=0,guaqi=0,pid,flag=0; /定义正在执行进程数目,被挂起进程数目,进程ID,运行标志位void create() /函数创建一个新进程 if(shu

6、mu=20) printf(n内存已满,请先换出或杀死进程n); /判断内存空间是否已满 else for(int i=0;i20;i+) if(neicuni.zhuangtai=0) break; /选出空着的内存单元给新进程使用 printf(n请输入新进程pidn); /输入新进程ID存至选出的内存单元 scanf(%d,&(neicuni.pid); for(int j=0;ji;j+) if(neicuni.pid=neicunj.pid) /当输入的新进程与原有进程ID相同时,显示“该进程已存在” printf(n该进程已存在n); return; printf(n请输入新进程优

7、先级n); /输入新进程的优先级、大小和内容 scanf(%d,&(neicuni.youxian); printf(n请输入新进程大小n); scanf(%d,&(neicuni.daxiao); printf(n请输入新进程内容n); scanf(%d,&(neicuni.info); neicuni.zhuangtai=1; /将新进程的内存单元状态(zhuangtai)设成“1”,以表示存在且未被换出 shumu+; /正在运行的进程数目加一 void run() /函数查看正在运行的进程 for(int i=0;i20;i+) if(neicuni.zhuangtai=1) /将存在

8、且未被挂起(即zhuangtai=1)的进程显示出来,若存在这样的程序,则将flag设成1 printf(n pid=%d,neicuni.pid); printf(youxian=%d,neicuni.youxian); printf(daxiao=%d,neicuni.daxiao); printf(zhuangtai=%d,neicuni.zhuangtai); printf(info=%d,neicuni.info); flag=1; if(!flag) printf(n当前没有运行进程n); /若当前没有运行进程(即flag=0),则显示“当前没有运行进程”void huanchu(

9、) /函数换出进程 if(!shumu) /判断是否无进程存在 printf(n当前没有进程存在n); return; printf(n 输入唤出进程ID值); /输入需要换出的进程ID, scanf(%d,&pid); for(int i=0;i20;i+) if(pid=neicuni.pid) if(neicuni.zhuangtai=1) /若该ID代表的进程正在运行,则将其挂起,即将zhuangyai置成2,并将guaqi加一 neicuni.zhuangtai=2; guaqi+; printf(n已经成功换出进程n); else if(neicuni.zhuangtai=2) p

10、rintf(n要唤出的进程已被挂起n); /若该ID代表的进程已被挂起,即zhuangtai=2,则显示要唤出的进程已被挂起 flag=1; break; if(!flag) printf(n要唤出的进程不存在n); /若进程不存在,给出显示void kill() /函数杀死进程 if(!shumu) /判断是否无进程存在 printf(n当前没有进程存在n); return; printf(n 输入杀死进程的ID值); /读入要杀死的进程ID scanf(%d,&pid); for(int i=0;i20;i+) if(pid=neicuni.pid) if(neicuni.zhuangta

11、i=1) /若进程正在运行则再次询问是否要杀死,通过用户的反馈执行不同操作 printf(n该进程正在运行,您确定要杀死吗?n); printf(n请输入 1:确定;0:不确定 n); scanf(%d,&flag); if(flag) neicuni.zhuangtai=0; /将zhuangtai置为0,表示进程被杀死,并将shumu自减一 shumu-; printf(n已经成功杀死进程n); else printf(要杀死的进程正在运行n); else if(neicuni.zhuangtai=2) /若该进程已经被挂起,则直接杀死 neicuni.zhuangtai=0; shumu

12、-; printf(n已经成功杀死进程n); flag=1; break; if(flag=0) printf(n要杀死的进程不存在n); /若进程不存在,给出显示void huanxing() /函数唤醒进程 if(!shumu) /判断是否无进程存在 printf(n当前没有运行进程n); return; if(!guaqi) /判断是否无进程被挂起 printf(n当前没有挂起进程n); return; printf(n输入pidn); /输入需要唤醒进程ID scanf(%d,&pid); for(int i=0;i20;i+) if(pid=neicuni.pid) flag=fal

13、se; if(neicuni.zhuangtai=2) /判断该进程是否被挂起,若没有则将其唤醒并将guaqi自减一 neicuni.zhuangtai=1; guaqi-; printf(n已经成功唤醒进程n); else if(neicuni.zhuangtai=2) printf(n要唤醒的进程已被挂起n); /若目标进程已被挂起,则显示要唤醒的进程已被挂起 flag=1; break; if(!flag) printf(n要唤醒的进程不存在n); /若要唤醒的进程不存在,给出显示void viewall() /函数查看内存状态 for(int i=0;i20;i+) /显示所有20个内

14、存单元的状态 printf(n pid=%d,neicuni.pid); printf(youxian=%d,neicuni.youxian); printf(daxiao=%d,neicuni.daxiao); printf(zhuangtai=%d,neicuni.zhuangtai); printf(info=%d,neicuni.info); void main() /主函数 int n=1; int num; for(int i=0;i20;i+) /先将内存zhuangtai位清零 neicuni.zhuangtai=0; while(n) printf(n*n); /用户操作界面

15、 printf(n*n); printf(n*进程演示系统*n); printf(n 1.创建新的进程 2.查看运行进程 n); printf(n 3.唤出某个进程 4.杀死某个进程 n); printf(n 5.唤醒某个进程 6.查看内存状态 n); printf(n 7.退出进程 n); printf(n*n); printf(n请选择(1-7)n); scanf(%d,&num); switch(num) /功能选择 case 1:create();break; case 2:run();break; case 3:huanchu();break; case 4:kill();break

16、; case 5:huanxing();break; case 6:viewall();break; case 7:exit(0); default:n=0; flag=0; 4、程序运行演示与截图(1)创建新进程,依次建立进程1、2、3,图中为建立进程2。(2)查看运行的进程与查看内存状态(2)换出进程。图中以换出进程3为例。(4)此时再次查看运行的进程与查看内存状态,可以看到进程3已不在运行的进程中,内存状态中其zhuangtai标识等于2,表明进程3确实已被换出。(5)唤醒进程。图为将进程3唤醒。(6)此时再次查看运行的进程与查看内存状态,可以看到进程3重新出现在运行的进程中,且内存状态中其zhuangtai标识等于1,表明进程3已被成功唤醒。(7)杀死进程。图中以杀死进程3为例,并附以杀死后运行的进程与内存状态图,内存状态中进程3的zhuangtai=0,表示进程3已被杀死。5、实验结论通过这次实验,我了解到进程控制块(PCB)在进程管理中的重要作用,它跟踪程序执行的情况,表明了进程在当前时刻的状态以及与其它进程和资源的关系。多个程序并发的执行需要依靠对PCB的控制来实现。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1