2024年5月25日发(作者:)

操作系统实验报告2

篇一:操作系统实验二实验报告

操作系统实验报告

——实验二:线程和管道通信实验

一、 实验目的

通过 Linu 系统中线程和管道通信机制的实验,加深对于线程控制和管道通信

概念的理解,观察和体验并发进(线)程间的通信和协作的效果 ,练习利用无名管

道进行进(线)程间通信的编程和调试技术。

二、实验说明

1) 与线程创建、执行有关的系统调用说明

线程是在共享内存中并发执行的多道执行路径,它们共享一个进程的资源,如

进程程序段、文件描述符和信号等,但有各自的执行路径和堆栈。线程的创建无需

像进程那样重新申请系统资源,线程在上下文切换时也无需像进程那样更换内存映

像。多线程的并发执行即避免了多进程并发的上下文切换的开销又可以提高并发处

理的效率。

pthread 库中最基本的调用。

dcreate 系统调用语法:

#include

Int pthreadcreate(pthreadt thread,pthreadattrt attr,

void (startroutine)(void ) Void arg);

pthreadcreate 函数创建一个新的线程。pthreadcreate 在 thread 中保存

新线程的标识符。Attr 决定了线程应用那种线程属性。使用默认可给定参数 NULL;

(startroutine) 是一个指向新线程中要执行的函数的指针 arg 是新线程函数携带

的参数。 Pthreadcreate 执行成功会返回0并在 thread 中保存线程标识符。执

行失败则返回一个非0的出错代码

deit 系统调用语法:

第 1 页 共 6 页

#include

void pthreadeit(void retval);

pthreadeit 函数使用函数 pthreadcleanuppush 调用任何用于该线程的清除

处理 函数,然后中止当前进程的执行,返回 retval。 Retval 可以由父线程或其他

线程通过 pthreadjoin 来检索。一个线程也可以简单地通过从其初始化函数返回

来终止。

djoin 系统调用语法:

#include

int pthreadjoin(pthreadt th, void threadreturn);

int pthreaddetach(pthreadt th);

函数 pthreadjoin 用于挂起当前线程,直到 th 指定的线程终止运行为止。

2) 管道通信机制

管道 pipe 是进程间通信最基本的一种机制。在内存中建立的管道称为无名

管道, 在磁盘上建立的管道称为有名管道。无名管道随着进程的撤消而消失,有名

管道则可以长久保存,shell 命令符| 建立的就是无名管道,而 shell 命令 mkfifo

建立的是有名管道。两个进程可以通过管道一个在管道一端向管道发送其输出,给

另一进程可以在管道的另一端从管道得到其输入.管道以半双工方式工作,即它的数

据流是单方向的.

因此使用一个管道一般的规则是读管道数据的进程关闭管道写入端,而写管道

进程关闭其读出端。管道既可以采用同步方式工作也可以采用异步方式工作。

三、实验内容

题目:设有二元函数 f(,y) = f() + f(y)其中: f() = f(-1)

( >1) f()=1 (=1) f(y) = f(y-1) + f(y-2) (y> 2) f(y)=1 (y=1,2)

请编程建立 3 个并发协作进程,它们分别完成 f(,y)、f()、f(y) (1)首

先要创建三个线程,分别执行f()、f(y)和f(,y)函数,通过

pthreadcreate系统调用即可以创建相应的线程,若创建成功则返回0并保存线程

标识符。

第 2 页 共 6 页