欢迎来到天天文库
浏览记录
ID:15523102
大小:263.00 KB
页数:5页
时间:2018-08-03
《操作系统 进程管理实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验项目二进程管理一、实验目的1、加深对进程概念的理解,明确进程与程序的区别;2、进一步认识并发进程的实质;3、分析进程竞争资源的现象,学习解决进程互斥的方法;4、了解Linux系统中进程通信的基本原理。二、实验原理1、进程是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的一个独立单位。2、并发进程的实质是多个进程实体同存于内存中,且在一段时间内同时运行。3、进程竞争资源是因为系统中某些资源一次只允许一个进程使用,这样的资源称为临界资源,只要保证并发执行的诸进程互斥地进入各自的临界区,就能实现对临界资源的互
2、斥访问!4、进程通信的基本原理是指进程之间的信息交换。三、实验设备1、软件环境LinuxRedHat7.1以上;TurboC2.0。2、硬件环境局域网络;P2以上计算机;联机投影。四、实验步骤第一步、点击“开始”,再点击“运行”,输入telnet202.116.57.246,进入命令提示符界面;第二步、使用账户及密码“student1”登录;第三步、(1)用“mkdir09251103319”命令建立新目录;(2)输入“cd09251103319”命令进入该目录;(3)使用“vi09251103319.c”进入vi命
3、令模式,在输入模式下输入程序,输入完毕后按“Esc”键按切换到命令模式,然后按“:wq”存盘退出vi编辑模式;5/5(4)退出vi工作模式后,输入“gcc–o09251103319.exe09251103319.c”对源程序进行编译和修改,然后再输入,“./09251103319”,运行编译后的目标程序,得到运行结果。五、实验结果<任务1>:进程的创建(1)实验操作:编写一段程序,利用fork()创建两个子进程,其中父进程显示字符“a”,两个子进程分别显示字符“b”和“c”。先创建子进程p1,再创建子进程p2,最后父
4、进程执行。(2)实验结果截图:1(3)实验分析:因为fork()创建进程所需的时间多于输出一个字符需要的时间,故在父进程创建子进程2的同时,子进程1输出了字符“b“;而子进程2和父进程的输出次序是随机的,所以出现bac,acb等情况输出顺序都是有可能的。<任务2>:进程的控制(1)实验操作:创建子进程p1,输出字符串son,创建子进程p2,输出字符串daughter,父进程再执行,输出字符串children(2)实验结果截图:5/5程序1:程序2:(3)实验分析:5/5程序1:由于函数printf()输出的字符串之间
5、不会被中断,故字符串内部的顺序不变;但由于进程并发执行时的调度顺序和处理机分配的问题,输出字符串的先后顺序随执行的不同而不同。程序2:大致与程序1的执行结果相同,但不会出现同一组字符串间隔出现的情形。由于lockf()函数锁定标准输出设备屏幕,故不可能出现一个字符串序列还没有显示完,就被其他进程抢占输出的情形;各组字符串的输出顺序可能不同,但必定连续输出50次六、实验总结1、我学会了如何用fork()创建进程,以及利用系统调用lockf()给每个进程加锁实现进程间的互斥,对进程实施控制;2、我也加深了对Linux系统
6、中进程通信的基本原理的理解,即进程之间的信息交换;而并发进程的实质:多个进程实体同存于内存中,且在一段时间内同时运行。3、通过这次实验,我加深对进程概念的理解,明确进程与程序的区别:进程是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的一个独立单位,进程有如下特征:(1)结构特征:可并发执行(2)动态性:是进程实体的一次执行过程(3)并发性:是多个进程实体同存于内存中,且能在一段时间内同时运行(4)独立性:进程实体是一个能独立运行、分配资源,接受调度的基本单位(5)异步性:进程实体按异步方式运行。而程序则是
7、一组有序指令的集合,并存放于某种介质上,其本身并不具运动的含义,是静态的;一般的程序是不能并发执行的,凡是未建立PCB的程序都不能作为一个独立的单位参与运行。七、思考题1、系统是怎样创建进程的?答:一旦操作系统发现了要求创建新进程的事件后,便调用进程创建原语Creat()按下述步骤创建一个新进程。(1)申请空白PCB。为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB5/5(1)为新进程分配资源。为新进程的程序和数据以及用户栈分配必要的内存空间。(2)初始化进程控制块。包括:初始化标识信息,处理机状
8、态信息,处理机状态控制信息。(3)将新进程插入就绪队列,如果进程就绪队列能够接纳新进程,便将新进程插入到就绪队列中。1、当首次调用新创建进程时,其入口在哪里?答:fork系统调用创建的子进程继承了原进程的context,也就是说fork调用成功后,子进程与父进程并发执行相同的代码。但由于子进程也继承了父进程的程序指针,所以子进程是从fork()
此文档下载收益归作者所有