操作系统 (第三次、第四次实验)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 进程的控制实验

相关文档
最新文档