操作系统实验3-进程

2020-04-14 06:49

操作系统实验报告

实验三 进程

一、 基本信息

二、 实验内容

利用fork()创建一个子进程生成一个Fibonacci序列。在父进程和子进程之间建立一个共享内存字段。允许子进程将Fibonacci序列的内容写入共享内存段,当子进程完成时,父进程输出此序列。

三、 实验目的

(1)通过实验,进一步了解新进程的创建,以及父进程与子进程之间的关系。

(2)学习POSIX共享内存,shmget()、shmat()等系统调用。

四、 设计思路和流程图

(1)创建一个大小为shared_data的共享内存段

(2)将共享内存段附加到地址空间

(3)为shared_data赋值

(4)创建子进程,并在子进程内修改内存中存储的值 (5)父进程调用系统调用wait()等待子进程结束 (6)父进程中输出共享内存段中Fibonacci序列的值 (7)释放并删除共享内存段

五、 主要数据结构及其说明

#include #include #include #include

#define MAX_SEQUENCE 10

//Fibonacci结构体 struct fibonacci{

long fib_sequence [MAX_SEQUENCE];

操作系统实验报告

int sequence_size;

} shared_data;

int main() {

int fib_id;

fibonacci-> sequence_size = 10; //创建共享内存段

fib_id = shmget(IPC_PRIVATE, MAX_SEQUENCE, S_IRUSR |

S_IWUSR);

struct fibonacci* fib = (struct fibonacci*)shmat(fib_id, NULL, 0);

//创建子进程 pid_t pid = fork(); if(pid < 0) {

//在子进程中修改内存值 fib->fib_sequence[0] = 1; fib->fib_sequence[1] = 1;

for(int i = 2; i < fibonacci-> sequence_size; i++) fib->fib_sequence[i] = fib->fib_sequence[i - 1] + fib->fib_sequence[i - 2]; }

else//父进程 {

//等待子进程结束

//输出共享内存字段中的序列

wait(NULL);

for(int j = 0; j < fibonacci-> sequence_size; j++) printf(\j]);

printf(“%s”, ”Error!”);

else if(pid == 0)//子进程

操作系统实验报告

}

shmctl(fib_id, IPC_RMID, NULL);//释放并删除共享内存段 }

return 0;

六、 程序运行时的初值和运行结果

七、 实验体会

此次实验中学习了shmget()与shmat()系统调用,并且进一步了解了父进程和子进程之的关系。通过该实验,学习到了父进程与子进程之间如何来使用共享内存段。并且也加深了进程的运行机制。


操作系统实验3-进程.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:upc600条款(讲稿)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: