操作系统第34次作业.docx
《操作系统第34次作业.docx》由会员分享,可在线阅读,更多相关《操作系统第34次作业.docx(17页珍藏版)》请在冰豆网上搜索。
操作系统第34次作业
操作系统课程实验报告
实验编号与实验名称:
1、管理Linux系统进程
2、进程互斥实验
3、进程的控制实验
实验目的:
一、
1)回顾系统进程的概念,加深对Linux/UNIX进程管理的理解。
2)回顾ps命令和选项。
3)列出当前shell中的进程。
4)列出运行在系统中的所有进程。
二、
1、进一步认识并发执行的实质
2、通过分析实验结果,分析进程竞争资源的现象,学习解决进程互斥的方法
三、
1、掌握进程另外的创建方法:
需认真分析实验结果,体会本次实验进程创建方法与fork的不同
2、2、通过分析实验结果,熟悉进程的睡眠、同步、撤消等进程控制方法
实验内容及要求(详见实验讲义):
一、
步骤1:
登录进入Linux。
步骤2:
访问命令行。
步骤3:
回顾系统进程概念。
步骤4:
回顾ps命令和信息。
步骤5:
列出系统中运行的所有进程。
步骤6:
试调试下二段代码。
二、
1、进程互斥的实现
2、分析以下程序的输出结果
三、
1、用fork()创建一个进程,再调用exec()用新的程序替换该子进程的内容
2、利用wait()来控制进程执行顺序
实验用到的软件(:
)
虚拟机
实验内容、关键步骤(流程图、代码等)及结果分析(70分)
第一个实验
步骤3:
回顾系统进程概念
1)Linux系统中,几乎每一个启动的进程,都会由内核分配一个唯一的进程标识符(PID),用于跟踪从进程启动到进程结束。
2)当启动新进程的时候,内核也给它们分配系统资源,如CPU时间和RAM空间。
3)永远不向父进程返回输出的进程叫做僵进程。
4)由父进程派生出来的进程叫做子进程。
5)父进程是一个派生另一个进程的进程。
6)运行用于提供服务的Linux系统进程是守护进程。
7)如果父进程在子进程之前结束,它创建了一个孤儿进程。
步骤4:
回顾ps命令和信息
输入ps命令,将结果截图贴到实验报告。
输入ps-f命令
步骤5:
列出系统中运行的所有进程
输入ps-ef命令,显示运行在系统中的各个进程的完全信息。
执行该命令,并与ps–f命令的输出结果对照,一致吗?
有何不同?
答:
不一致
ps–f完全产生一个完全列表,给出每个进程的所有可用信息。
ps–ef每一个完全产生一个完全列表,给出每个进程的所有可用信息,显示系统中每一个进程的信息。
a.显示了多少个进程?
ps–f2个
ps–ef所有143
b.PID是什么?
进程的进程标识号。
PID可以用来杀死进程
c.启动进程的命令(CMD)是什么?
命令名守护进程(执行的程序的名字)
d.请观察,什么命令的PID号是1?
第一个命令rootinit
e.再次运行 ps-ef|wc-l命令,计算进程的数目并把输出结果输入到wc命令中:
执行manps命令,可以打开Linux用户命令手册,了解ps命令的用法,输入
wq命令可退出用户手册的阅读。
man命令可以执行吗?
结果如何?
步骤6:
第二个实验
Code1:
没加lockf()函数的实验
Code1:
加了lockf()函数的实验
Code2:
没加lockf()函数的实验
Code2:
加了lockf()函数的实验
第三个实验:
第三题结果:
思考题:
二、
1.2观察并分析出现的现象
结果如何?
与未上锁的输出结果相比,结果有无不同?
原因?
将打印字符串的循环次数改为1000结果加锁与否的结果又是否相同?
结果都一样。
因为程序在被运行之时会被赋予一个时间片,而i的值小于1000时,CPU执行完这个程序所需时间还小于这个时间片,所以操作系统并不会把公共设备夺过来给其他程序。
从而两个结果都一样。
没使用了lockf()函数
使用了lockf()函数
从上图的比较中我们可以看出,当i的值变得很大时,lockf()函数的作用就体现出来了。
他会将一个程序和这个程序所需的公共设备上锁,直至这个程序结束才解锁。
在这段期间,没有程序能使用被上锁的公共设备。
三、
(1)如何更新子进程内容?
fork时根据返回的进程ID锁定指定的子进程即进入子进程,其后的操作都是能有效更新子进程的。
(2)可执行文件加载时进行了哪些处理?
初始化,开辟内存,显示窗口是后期可选工作。
每个程序,任何一个程序,任何一个可执行文件,启动运行时都要调用Ntdll.dll中的NtCreateProcess()。
(3)什么是进程同步?
wait()是如何实现进程同步的?
我们把异步环境下的一组并发进程因直接制约而互相发送消息而进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。
进程同步是进程之间直接的相互作用,是合作进程间有意识的行为。
如果我们对一个消息或事件赋以唯一的消息名,则我们可用过程wait(消息名)表示进程等待合作进程发来的消息。
这样,wait()就实现了进程间的同步。
实验过程中遇到的问题解决办法与实验体会(10分)【请注意:
此处必须如实填写,为空或不适均扣10分】
1、因为第一次使用lockf(),所以搞不懂lockf()中的参数到底应该怎样用。
2、我使用了lockf()后并没有意识到时间片对于程序的影响
如但是我只是写了一个i=5而已,因为我觉得他们的结果应该都是一样的。
后来多测试了几次后才发现,但i=1000时结果是会有所改变的。
3、第一次使用Exec()函数,我同样不知道其中的参数所代表的意思是什么。
如第一个参数是path路径,但是这时我又不知道我写的文件的路径了。
还有第三个参数则是0,我完全不知道它到底代表的是什么。
而且,这中间还有一些不同的参数,我更是看得云里雾里。