操作系统-(第三次、第四次实验)(共16页)_第1页
操作系统-(第三次、第四次实验)(共16页)_第2页
操作系统-(第三次、第四次实验)(共16页)_第3页
操作系统-(第三次、第四次实验)(共16页)_第4页
操作系统-(第三次、第四次实验)(共16页)_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上操作系统课程实验报告姓名XX学号系计算机任课教师XX指导教师XX评阅教师贺辉实验地点综合楼B102实验时间2012/10/24实验课表现出勤和个人表现Q1(15+15(组长评分)=30分)得分:实验总分(Q1+Q2+Q3)实验完成情况Q2(60分)得分:体会实验过程中遇到的问题解决办法与实验体会Q3(10分)得分:实验编号与实验名称:实验目的:1  管理Linux系统进程1) 回顾系统进程的概念,加深对Linux / UNIX进程管理的理解。2) 回顾ps命令和选项。3) 列出当前shell中的进程。4) 列出运行在系统中的所有进程。2 

2、 进程互斥实验1、进一步认识并发执行的实质2、通过分析实验结果,分析进程竞争资源的现象,学习解决进程互斥的方法 3  进程的控制实验1、掌握进程另外的创建方法:需认真分析实验结果,体会本次实验进程创建方法与fork的不同2、通过分析实验结果,熟悉进程的睡眠、同步、撤消等进程控制方法实验内容    1、用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容2、利用wait( )来控制进程执行顺序实验内容及要求(详见实验讲义与实验指导书):实验用到的软件(:)实验内容及关键步骤(代码)Q2(60分)步骤1:登录进入Linux。步骤2:

3、访问命令行。单击“系统工具”-“终端”命令,打开“终端”窗口。步骤3:回顾系统进程概念。每个运行的程序都会创建一个进程,进程分配到一个唯一的进程标识符 (PID) 。PID被系统用于标识和跟踪进程,直到进程结束。1) Linux系统中,几乎每一个启动的进程,都会由内核分配一个唯一的_PID_,用于跟踪从进程启动到进程结束。2) 当启动新进程的时候,内核也给它们分配系统资源,如_CPU_和_RAM_。3) 永远不向父进程返回输出的进程叫做_僵进程_。4) 由父进程派生出来的进程叫做_子_进程。5) _父_进程是一个派生另一个进程的进程。6) 运行用于提供服务的Linux系统进程是_ sched

4、(调度) 和init (初始化)_。7) 如果父进程在子进程之前结束,它创建了一个_孤儿_进程。步骤5:列出系统中运行的所有进程。输入 ps -ef 命令,显示运行在系统中的各个进程的完全信息。执行该命令,并与ps f命令的输出结果对照,一致吗?有何不同? 不一致:Ps ef:Ps f:Ps ef表示的是所有进程的完整列表,而ps f表示的是一个进程的完整列表。在范围上不一样。注意分析当前终端窗口中的输出结果:a. 显示了多少个进程?_144_b. PID是什么?进程的进程标识号。PID可以用来杀死进程_c. 启动进程的命令 (CMD) 是什么?命令名守护进程执行的程序的名字_d. 请观察,什

5、么命令的PID号是1?_sbin/init_e. 再次运行  ps -ef | wc -l命令,计算进程的数目并把输出结果输入到wc命令中:_144_执行 man ps命令,可以打开Linux用户命令手册,了解ps命令的用法,输入wq命令可退出用户手册的阅读。man命令可以执行吗?结果如何?可执行_试调试下二段代码。并写明结果(考虑fork与sleep是什么函数)1.int main()int p1,i;while (p1=fork()=-1);if (p1>0)    for (i=0;i<5;i+)    &

6、#160;       printf("I am parent.n");        sleep(1);    else    for (i=0;i<5;i+)            printf("I am child.n");  

7、0;     sleep(1);    return 0;结果:2、int main()int p1,i;while (p1=fork()=-1);if (p1>0)            wait(0);        for (i=0;i<5;i+)        

8、0;           printf("I am parent.n");            sleep(1);            else           

9、 for (i=0;i<5;i+)                    printf("I am child.n");            sleep(1);           

10、     exit(0);    return 0;结果:父子进程到底谁先得到调度执行是由操作系统在运行时决定的,而且系统中也不止这两个进程,所以即使你使用了sleep让它睡眠,谁先运行谁后运行也是不确定的。而且每次运行的结果也不一样Fork()函数: 一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次 Sleep()函数:执行挂起一段时间 ,就是在执行的过程中,让执行停顿一下!2  进程互斥实验1. 修改以下代码,用l

11、ockf( )来给每一个进程加锁,以实现进程之间的互斥 /=#include <stdio.h>main( )int p1,p2;while(p1=fork( )= = -1);        /*创建子进程p1*/if (p1= =0)  putchar('b');       elsewhile(p2=fork( )= = -1);   /*创建子进程p2*/if(p2= =0)  p

12、utchar('c');  else  putchar('a');    答案:循环十次:答案:很容易看出答案不一样了,bc的顺序倒过来了!没有加锁的答案:2、#include <stdio.h>main( )int p1,p2,i;while(p1=fork( )= = -1);          /*创建子进程p1*/if (p1= =0)  for(i=0;i<10;i+

13、)printf("daughter  %dn",i);else                while(p2=fork( )= = -1);   /*创建子进程p2*/if(p2= =0)                  fo

14、r(i=0;i<10;i+)                       printf("son  %dn",i);else                  for(i=0

15、;i<10;i+)                       printf("parent  %dn",i);答案:这个程序和上面的程序是一样原理的,没有什么可比性,我就不执行这个程序了!循环输出也在上面的程序执行了!(四)分析以下程序的输出结果【写进实验报告】:#include<stdio.h>#include<unis

16、td.h>main()int p1,p2,i;int *fp;fp = fopen("to_be_locked.txt"            ,"w+");if(fp=NULL)      printf("Fail to create file");    exit(-1);   while(p1=fork( )= -1);

17、60;      /*创建子进程p1*/if (p1=0)lockf(*fp,1,0);              /*加锁*/for(i=0;i<10;i+)    fprintf(fp,"daughter %dn",i);  lockf(*fp,0,0);        

18、;      /*解锁*/else   while(p2=fork( )=-1);  /*创建子进程p2*/if (p2=0)lockf(*fp,1,0);        /*加锁*/for(i=0;i<10;i+)fprintf(fp,"son %dn",i);lockf(*fp,0,0);        /*解锁*/else  

19、        wait(NULL);      lockf(*fp,1,0);         /*加锁*/      for(i=0;i<10;i+)      fprintf(fp,"parent %dn",i);      l

20、ockf(*fp,0,0);         /*解锁*/   fclose(fp);答案:分析:程序开始定义了文件读写指针用于打开指定的文件,当文件不存在时则自动创建。然后有创建了一个进程p1,p1获得处理机执行,给文件读写指针加锁,这样,即使p1失去处理机,其他获得处理机的进程也无法访问文件指针指向的文件,当p1再次获得处理机后继续执行直至进程p1结束并解锁;p1结束后父进程获得处理机执行又创建了进程p2,p2获得处理机执行,也给文件指针加锁,同理直至p2运行完解锁;p2结束后父进程获得处理

21、机,父进程也给文件指针加锁,直至父进程执行完毕解锁,程序结束。 3  进程的控制实验实验内容    1、用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容2、 利用wait( )来控制进程执行顺序(1) 如何更新子进程内容? 答案:系统调用exec( )将一个可执行的二进制文件覆盖在新进程的用户级上下文的存储空间上,改变调用进程的执行代码,从而形成新进程。用fork( )建立子进程,然后在子进程中使用exec( ),这样就实现了父进程与一个与它完全不同子进程的并发执行。(2) 可执行文件加载时进行了哪些处理?答案:可执行文件加载时首先是创建一个新进程的fork系统调用,然后用于实现进程自我终止的exit系统调用;改变进程原有代码的exec系统调用;用于将调用进程挂起并等待子进程终止的wait系统调用;获得进程标识符的getpid系统调用等处理过程。 (3)什么是进程同步?wait( )是如何实现进程同步的? 答案:把异步环境下的一组并发进程因直接制约而互相发送消息

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论