操作系统实验一进程与线程—Linux进程与线程通讯实验报告_第1页
操作系统实验一进程与线程—Linux进程与线程通讯实验报告_第2页
操作系统实验一进程与线程—Linux进程与线程通讯实验报告_第3页
操作系统实验一进程与线程—Linux进程与线程通讯实验报告_第4页
操作系统实验一进程与线程—Linux进程与线程通讯实验报告_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

操作系统 课程设计任务书实验题目:实验一:进程与线程Linux进程与线程通讯实验目的:深刻理解线程与进程的概念,掌握进程与线程在组成成分上的差别以及与其相适应的通讯方式和应用目标。实验内容:以Linux系统进程和线程机制为背景,掌握fork()和clone()系统调用的形式和功能以及与其相适应的高级通讯方式。有fork派生的子进程之间通过pipe通讯,由clone创建的线程之间通过共享内存通讯,对于后者需要考虑互斥问题。 以生产者 消费者问题为例,通过实验理解fork()和clone()两个系统调用的区别。程序要求能够创建4个进程或线程,其中包括两个生产者和两个消费者,生产者和消费者之间能够传递数据。设计准备:(理论技术)1. 什么是进程?进程是具有一定独立功能的程序关于一个数据集合的一次运行活动。2. 什么是线程?线程是进程内的一个相对独立的执行流。3. 线程是与其父进程具有相同地址空间的进程。4. 进程与线程的差别通过与fork不同的另一个系统调用clone体现出来。fork为子进程创建一个具有全新上下文的独立的地址空间,而clone并不产生新的地址空间,子进程共享父进程的地址空间。Clone 为应用程序提供了细粒度的共享成分控制。5. Linux中的进程包含3个段,数据段,代码段,堆栈段。6. fork()函数用于从已存在的进程中创建一个新进程,新进程称为子程,而原进程称为父进程。使用fork()函数,子进程从父进程处继承了整个进程的地址空间。而子进程独有的只有它的进程号,资源使用和计时器等。7. Fork()函数语法要点: 所需头文件:#include/提供类型pid_t的定义;#include 函数原型:pid_t fork(void) 函数返回值:0:子程序; 子进程ID(大于0的整数):父进程;-1:出错。8.实验步骤:1. 安装虚拟机,并安装虚拟Linux系统,实现Linux联网2. 在上下载OS文件夹,保存在终端3. 打开终端,运行一下代码Cd osgcc test_fork.c o forkls./fork(运行fork())gcc lpthread test_clone.c o clone./clone(运行clone())4. 分析实验代码,与实验代码对比,弄懂其中的原理5. 实验结束,保存系统,退出Linux系统实验结果:./fork输出结果:./clone输出结果:实验讨论:由程序1结果可知,使用fork()语句创建的子进程与其父进程具有相对独立的地址空间,在此解决生产者-消费者问题里,可以采用pipe()进行通讯。子进程复制了父进程的打开文件表,所以pipe()所建立的通信管道可被子进程继承,生产和消费进程可以通过对同一通信管道文件的读书进行通讯。由程序2结果可知:clone()语句在创建进程时,可通过参数设定子进程与父进程是否共享存储空间,从而可以创建真正意义上的程序。生产者和消费者进程共享内在,从而可以通过共享交换数据。但多个进程共享共存需要互斥机制。 三实验流程图程序二流程图:基于clone()系统调用父进程:生产者子进程(Producer):消

温馨提示

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

评论

0/150

提交评论