文档详情

操作系统实验的报告2.docx

发布:2018-10-20约4.37千字共8页下载文档
文本预览下载声明
操作系统实验报告2 篇一:操作系统实验二实验报告   操作系统实验报告   ——实验二:线程和管道通信实验   一、 实验目的   通过 Linux 系统中线程和管道通信机制的实验,加深对于线程控制和管道通信概念的理解,观察和体验并发进(线)程间的通信和协作的效果 ,练习利用无名管道进行进(线)程间通信的编程和调试技术。   二、实验说明   1) 与线程创建、执行有关的系统调用说明   线程是在共享内存中并发执行的多道执行路径,它们共享一个进程的资源,如进程程序段、文件描述符和信号等,但有各自的执行路径和堆栈。线程的创建无需像进程那样重新申请系统资源,线程在上下文切换时也无需像进程那样更换内存映像。多线程的并发执行即避免了多进程并发的上下文切换的开销又可以提高并发处理的效率。   pthread 库中最基本的调用。   1.pthread_create 系统调用语法:   #include   Int pthread_create(pthread_t *thread,pthread_attr_t *attr,   void *(*start_routine)(void *) Void *arg);   pthread_create 函数创建一个新的线程。pthread_create 在 thread 中保存新线程的标识符。Attr 决定了线程应用那种线程属性。使用默认可给定参数 NULL; (*start_routine) 是一个指向新线程中要执行的函数的指针 arg 是新线程函数携带的参数。 Pthread_create 执行成功会返回0并在 thread 中保存线程标识符。执行失败则返回一个非0的出错代码   2.pthread_exit 系统调用语法:   #include   void pthread_exit(void *retval);   pthread_exit 函数使用函数 pthread_cleanup_push 调用任何用于该线程的清除处理 函数,然后中止当前进程的执行,返回 retval。 Retval 可以由父线程或其他线程通过 pthread_join 来检索。一个线程也可以简单地通过从其初始化函数返回来终止。   3.pthread_join 系统调用语法:   #include   int pthread_join(pthread_t th, void **thread_return);   int pthread_detach(pthread_t th);   函数 pthread_join 用于挂起当前线程,直到 th 指定的线程终止运行为止。   2) 管道通信机制   管道 pipe 是进程间通信最基本的一种机制。在内存中建立的管道称为无名管道, 在磁盘上建立的管道称为有名管道。无名管道随着进程的撤消而消失,有名管道则可以长久保存,shell 命令符| 建立的就是无名管道,而 shell 命令 mkfifo 建立的是有名管道。两个进程可以通过管道一个在管道一端向管道发送其输出,给另一进程可以在管道的另一端从管道得到其输入.管道以半双工方式工作,即它的数据流是单方向的. 因此使用一个管道一般的规则是读管道数据的进程关闭管道写入端,而写管道进程关闭其读出端。管道既可以采用同步方式工作也可以采用异步方式工作。   三、实验内容   题目:设有二元函数 f(x,y) = f(x) + f(y)其中: f(x) = f(x-1) * x(x 1) f(x)=1 (x=1) f(y) = f(y-1) + f(y-2) (y 2) f(y)=1 (y=1,2)   请编程建立 3 个并发协作进程,它们分别完成 f(x,y)、f(x)、f(y) (1)首先要创建三个线程,分别执行f(x)、f(y)和f(x,y)函数,通过pthread_create系统调用即可以创建相应的线程,若创建成功则返回0并保存线程标识符。   (2)线程之间的通信是通过管道实现,在内存中建立的管道称为无名管道,在磁盘上建立的管道称为有名管道。无名管道随着线程的撤销而消失。通过pipe系统调用即可创建相应的管道。   (3)管道通信的数据流是单方向的,管道的一端只能作为输入端或输出端,通过系统调用   read(int pipe_id,const void *buf,size_t count)、   write(int pipe_id,const void *buf,size_t count)即可实现管道的读出与写入。   (4)创建相应的线程和管道后,则要考虑相应线程的执行,这是要一个系统调用,   pthread_join(pthread_t th, void **thread_re
显示全部
相似文档