操作系统课程设计报告

发布 2022-10-05 12:38:28 阅读 8864

河南城建学院。

操作系统》课程设计说明书。

设计题目: 管道通信

专业: 计算机科学与技术

指导教师邵国金

班级0814091

学号: 081409126

姓名刘燕龙

同组人: 杨俊鹏 、魏中亚

计算机科学与工程系。

2024年12 月 30 日。

前言。linux操作系统是一个向用户开放源码的免费的类unix操作系统。它为在校学生学习操作系统课程提供了一个看得见摸得着的范例。

对于学生正确理解,掌握操作系统的基本知识具有重要意义。鉴于此,本操作系统课程涉及的实验均在linux环境下进行。

这就要求大家:

1)熟悉linux的操作和开发环境;

2)具有c语言知识(linux操作系统大约90%的源码是用c语言编写)。

我们的设计和实验将在windows xp环境下,基于虚拟机软件vmware软件进行安装。

学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。

例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源**等。但由于我们的条件和学时有限,在理论学习过程中没有给同学们提供更多的实验机会。

管道通信,通过在两个进程间创建通道,一个写信息通过通道传送给另一个进程并且读出来,同过实践让我们了解了什么是管道通信机制,实现了程序进程间的通信。积极通过合作,完成任务。

目录。一、系统环境4

二、设计目的4

三、设计题目及要求4

1)设计管道通信4

2)设计命名管道4

四、总体设计4

五、详细设计6

1、实现管道通信6

2、命名管道设计8

六、调试与测试方法12

七、执行结果及分析13

八、源程序清单14

九、心得体会19

十、参考文献19

一、系统开发环境。

windows xp系统和unix/linux系统运行环境。

二、设计目的。

1、进一步了解什么是管道。

2、实现unix/linux系统环境下的管道通信方式。

3、熟练掌握c/s中的管道通信机制。

学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。

三、设计题目及要求。

利用unix系统提供的管道机制实现进程间的通信。

1)管道通信。利用pipe()和lockf()系统调用,编写程序,实现同族进程间的通信。使用系统调用pipe()建立一条管道线;创建子进程p1,p2,…。

子进程pi分别向管道各写信息,而父进程则从管道中读出来自于各子进程的信息,实现进程家族间无名管道通讯。

扩展之,使之成为客户/服务器模式,并完成一定的任务(自己定义)。

2)命名管道通信:利用mkfifo(name,mode)或mknod(name,mode,0)创建一个命名管道,然后利用它和文件部分系统调用实现不同进程间的通信。

改造之,使之成为客户/服务器模式,并完成一定的任务(自己定义)。

四、总体设计。

创建一个新进程。

用法: int fork()

其中返回int取值意义如下:

0:创建子进程,从子进程返回的id值。

0:从父进程返回的子进程id值。

1:创建失败。

用作锁定文件的某些段或者整个文件。

头文件:#include <>

参数定义:int lockf(files,function,size);

int files,function;

long size;

其中:files是文件描述符;function是锁定和解锁;1表示锁定;0表示解锁;size是锁定或解锁的字节数,若用0,表示从文件的当前位置到文件尾。

功能:从描述符为filedes的文件读信息。

用法:#include <>

ssize_t read(int filedes, void *buff, size_t nbytes) ;

返回:读到的字节数,若已到文件尾为0,若出错为-1。

在unix/linux 可重定义为:

int read(int fd, char *buff, unsigned nbytes) ;

功能:向已打开的文件写数据。

用法:#include <>

ssize_t write(int filedes, const void * buff, size_t nbytes) ;

返回值:若成功为已写入的字节数;出错为-1。

int write(int fd, char *buff, unsigned nbytes) ;

文件位置指针。

文件位置指针:每个打开文件都有一个与其相关联的“当前位移量”。是从文件开始处计算的字节数。通常,读、写操作都从当前文件位置处开始,并使位移量增加所读或写的字节数。

按系统默认,当打开一个文件时,除非指定o_append选择项,否则该位移量被设置为0,即指向文件的开始处。

文件位置指针可以通过系统调用lseek来移动。

5.创建。用mkfifo或mknod创建一个命名管道。以mkfifo为例:

#include

#include

int mkfifo(const char *fifo_name, mode_t mode成功返回0,否则为-1

允许调用进程控制软中断信号的处理。

头文件:#include <>

参数定义。signal(sig,function)

int sig;

void (*function)()

返回值:成功时返回旧的(以前)函数描述,失败时返回sig_err。

7、client、server

可以以client/server方式使用fifo。如果一个服务器有多个客户时,每个客户可通过一个well_known fifo服务器连接。连接后可以通过well_known fifo向服务器发送请求,所发信息的长度必须≤pipe_buf (4096)。

命。命名管道通信示意图。

五、详细设计。

1、实现管道通信。

编制一段程序,实现进程的管道通信。使用系统调用pipe()建立一条管道线。两个子进程p1和p2分别向管道各写一句话:

child 1 is sending message!

child 2 is sending message!

而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。

程序》#include <>

main()

int i,r,p1,p2,fd[2];

char buf[50],s[50];

pipe(fd); 创建匿名管道,fd[0]为读端,fd[1]为写端//

while((p1=fork())1); 创建子进程p1,直至成功为止(p1!=-1)//

if(p1==0) /子进程p1执行逻辑//

lockf(fd[1],1,0); 锁定管道写端,保证写入数据的完整性//

sprintf(buf,"child process p1 is sending messages!");在buf中填入准备写入管道的信息数据。

printf("child processp1!");打印“子进程p1正在运行” /

write(fd[1],buf,50); 向管道写端fd[1]写入buf中的数据,写完后该数据即可以从读端fd[0]读出//

sleep(5); 睡眠5秒//

lockf(fd[1],0,0); 解锁管道写端//

操作系统课程设计报告

西安郵電大學。院系名称 计算机学院。专业名称 软件工程。班级 1104 学生姓名 赵大伟。学号 8位 04113124 指导教师 舒新峰。设计起止时间 2013.11.10 2013.11.20 1 通过观察 分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中...

操作系统课程设计报告

课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...

操作系统课程设计报告

实验一进程管理。一 实验目的。1 开发一个函数,建立进程控制块和资源控制块结构,并实现相关数据结构的初始化。2 开发一系列操作,由进程调用这些操作,达到控制进程申请或释放各种资源的目的。通过实验理解进程的概念,进程的组成 pcb结构 进程的并发执行和操作系统进行进程管理的相关原语 主要是进程的创建 ...