西北工业大学-操作系统实验报告-实验五_第1页
西北工业大学-操作系统实验报告-实验五_第2页
西北工业大学-操作系统实验报告-实验五_第3页
西北工业大学-操作系统实验报告-实验五_第4页
西北工业大学-操作系统实验报告-实验五_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、实验五 进程管理一、 实验目的(1)加深对进程概念的理解,明确进程和程序的区别;(2)进一步认识并发执行的实质;(3)了解FreeBSD系统中进程通信的基本原理。二、 实验内容与要求1、掌握进程的概念,明确进程的含义;2、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果(多次运行,查看结果是否有变化),并分析原因;3、修改已编写的程序,将每个进程输出一个字符改为每个进程输

2、出一句话,在观察程序执行时屏幕出现的现象(多次运行,查看结果是否有变化),并分析原因;4、如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象;5、对整个实验过程进行分析总结,给出详细步骤;三、 实验过程1、进程的概念与含义狭义:进程就是一段程序的执行过程。广义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、

3、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。 2、编写一段程序,使用系统调用fork( )创建两个子进程 源代码如下所示:#include

4、 <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h> main() int p1, p2    if (p1 = fork()       / 子进程1          &

5、#160; printf("bn");        exit(0);        else            if (p2 =  fork()   / 子进程2     &

6、#160;               printf("cn");             exit(0);          else         

7、60;printf("an");      / 父进程         exit(0);     运行结果如下所示:运行结果: bca(有时会出现bac)。分析:从进程执行并发来看,输出bac,acb等情况都有可能。原因:fork()创建进程所需的时间多于输出一个字符的时间,因此在主进程创建进程2的同时,进程1就输出了“b”,而进程2和主程序的输出次序是有随机性的,所以会出现上

8、述结果。  3、修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。 源代码如下所示:#include<stdio.h> int main() int p1,p2,i;  if(p1=fork()    for(i=0;i<5;i+)           printf("child %dn&qu

9、ot;,i);  else   if(p2=fork()       for(i=0;i<5;i+)     printf("son %dn",i);   else       for(i=0;i<5;i+)      prin

10、tf("daughter %dn",i);   运行结果如下所示:运行结果:  childsondaughter或child son child son daughter  分析:由于函数printf()输出的字符串之间不会被中断,因此,字符串内部的字符顺序输出时不变。但是 , 由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。这与打印单字符的结果相同。4、如果在程序中使用调用loc

11、kf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象源代码如下所示: #include<stdio.h> int main()    int p1,p2,i;  if(p1=fork()    lockf(1,1,0); for(i=0;i<5;i+)     printf("child %dn",i);   

12、0;    lockf(1,1,0);    else    if(p2=fork()         lockf(1,1,0);         for(i=0;i<5;i+)  printf("son %dn",i);  

13、;       lockf(1,1,0);         else        lockf(1,1,0);        for(i=0;i<5;i+)   printf("daughter %dn",i);       lockf(1,0,0);        运行结

温馨提示

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

评论

0/150

提交评论