操作系统 (第三次、第四次实验)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统课程实验报告
__CPU______和____RAM____。
3) 永远不向父进程返回输出的进程叫做___僵进程___________。
4) 由父进程派生出来的进程叫做___________子_______进程。
5) ________父________进程是一个派生另一个进程的进程。
6) 运行用于提供服务的Linux系统进程是__ sched (调度) 和init (初始化)_____________。
7) 如果父进程在子进程之前结束,它创建了一个______孤儿
________进程。
步骤5:列出系统中运行的所有进程。
输入ps -ef 命令,显示运行在系统中的各个进程的完全信息。执行该命令,并与ps –f命令的输出结果对照,一致吗?有何不同?
不一致:
Ps –ef:
Ps –f:
Ps ef表示的是所有进程的完整列表,而ps –f表示的是一个进程的完整列表。在范围上不一样。
注意分析当前终端窗口中的输出结果:
a. 显示了多少个进程?
___________________144______________________________________
__________
b. PID是什么?
进程的进程标识号。PID可以用来杀死进程
______________________________________________________________
c. 启动进程的命令(CMD) 是什么?
命令名守护进程执行的程序的名字_____________________________________________
d. 请观察,什么命令的PID号是1?
__________sbin/init____________________________________________
______
e. 再次运行ps -ef | wc -l命令,计算进程的数目并把输出结果输入到wc命令中:
____________144_____________________________________________
___________
执行man ps命令,可以打开Linux用户命令手册,了解ps命令的用法,输入wq命令可退出用户手册的阅读。man命令可以执行吗?结果如何?
可执行
______________________________________________________________
2、
int main()
{
int p1,i;
while ((p1=fork())==-1);
if (p1>0)
{
wait(0);
for (i=0;i<5;i++)
{
printf("I am parent.\n");
sleep(1);
}
}
else
{
for (i=0;i<5;i++)
{
printf("I am child.\n");
sleep(1);
}
exit(0);
}
return 0;
}
结果:
父子进程到底谁先得到调度执行是由操作系统在运行时决定的,而且系统中也不止这两个进程,所以即使你使用了sleep让它睡眠,谁先运行谁后运行也是不确定的。
而且每次运行的结果也不一样
Fork()函数:
一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次
Sleep()函数:
执行挂起一段时间,就是在执行的过程中,让执行停顿一下!
2 进程互斥实验
1. 修改以下代码,用lockf( )来给每一个进程加锁,以实现进程之
间的互斥
循环十次:
答案:
很容易看出答案不一样了,bc的顺序倒过来了!没有加锁的答案:
2、
#include
main( )
{
int p1,p2,i;
while((p1=fork( ))= = -1); /*创建子进程p1*/
if (p1= =0)
for(i=0;i<10;i++)
printf("daughter %d\n",i);
else
{
while((p2=fork( ))= = -1); /*创建子进程p2*/
if(p2= =0)
for(i=0;i<10;i++)
printf("son %d\n",i);
else
for(i=0;i<10;i++)
printf("parent %d\n",i);
}
}
答案:这个程序和上面的程序是一样原理的,没有什么可比性,我就不执行这个程序了!循环输出也在上面的程序执行了!
分析:
程序开始定义了文件读写指针用于打开指定的文件,当文件不存在时则自动创建。然后有创建了一个进程p1,p1获得处理机执行,给文件读写指针加锁,这样,即使p1失去处理机,其他获得处理机的进程也无法访问文件指针指向的文件,当p1再次获得处理机后继续执行直至进程p1结束并解锁;p1结束后父进程获得处理机执行又创建了进程p2,p2获得处理机执行,也给文件指针加锁,同理直至p2运行完解锁;p2结束后父进程获得处理机,父进程也给文件指针加锁,直至父进程执行完毕解锁,程序结束。
3 进程的控制实验