收藏 分销(赏)

操作系统实验三-进程.doc

上传人:Fis****915 文档编号:554521 上传时间:2023-12-08 格式:DOC 页数:3 大小:98.50KB 下载积分:6 金币
下载 相关 举报
操作系统实验三-进程.doc_第1页
第1页 / 共3页
操作系统实验三-进程.doc_第2页
第2页 / 共3页


点击查看更多>>
资源描述
操作系统实验三 完成人:谌浩旗 学号:71109424 日期:2011-4-8 【实验内容】 在Linux操作系统上,利用fork()创建一个子进程去生成Fibonacci数列,并采用POSIX share memory 将结果传递给父进程,具体要求见”Operating System Concepts(Seventh Edition)” Chapter 3后的习题3.10。编写程序并在父进程中输出测试结果 【实验目的】 1. 通过实验,了解Unix/Linux中新进程的创建,以及父进程与子进程之间关系 2. 通过实验,掌握共享内存的创建、使用和删除 【设计思路】 1. 在创建子进程的前面用相应的函数创建共享内存 2. 创建子进程,并在子进程内修改内存中存储的值 3. 在父进程中输出内存中存储的值 【流程图】 创建共享内存 创建子进程并修改内存的值 父进程中输出修改后的值 【主要数据结构及其说明】 struct Fibonacci { //结构体,用来存储 long fib_sequence [MAX_SEQUENCE]; //数组,存储Fibonacci数值 int sequence_size; //数组的大小 } shared_data; 【源程序并附上注释】 #include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <sys/shm.h> #include <sys/stat.h> #include <sys/wait.h> #define MAX_SEQUENCE 10 //定义共享内存段数据结构 typedef struct { long fib_sequence [MAX_SEQUENCE]; int sequence_size; } shared_data; int main(int argc, char **argv) { //读取表示数列长度的参数,将其转化为int型 int size = 0; int i = -1; while(argv[2][++i] != '\0') size = size * 10 + (int)argv[2][i] - (int)'0'; //参数合法判断 if (size < 0 || size > MAX_SEQUENCE) { printf("wrong argument\n"); return -1; } //共享内存段标识符 int segment_id; //一个指向共享内存段的指针 shared_data *shared_memory; //创建共享内存段 segment_id = shmget(IPC_PRIVATE, sizeof(shared_data), S_IRUSR | S_IWUSR); //加入共享内存 shared_memory = (shared_data *)shmat(segment_id, NULL, 0); //将来自命令行的参数赋值给shared_data shared_memory->sequence_size = size; //创建子进程 pid_t pid; pid = fork(); //创建失败 if (pid < 0) { printf("create child process failed\n"); return -1; } //子进程操作 else if (pid == 0) { //构造Fabonacci数列,并将数据写入共享内存段 long preNum = 0, behNum = 1, temp; for (int i = 0; i < shared_memory->sequence_size; ++i) { shared_memory->fib_sequence[i] = behNum; temp = preNum + behNum; preNum = behNum; behNum = temp; } //子进程分离共享内存段 shmdt(shared_memory); } //父进程操作 else if (pid > 0) { //等待子进程退出 wait(NULL); //打印共享内存段的信息 printf("Fibonacci: "); for (int i = 0; i < shared_memory->sequence_size; ++i) printf("%ld ", shared_memory->fib_sequence[i]); printf("\n"); //父进程分离共享内存段 shmdt(shared_memory); //父进程删除共享内存段 shmctl(segment_id, IPC_RMID, NULL); } return 0; } 【程序运行时的初值和运行结果】 【实验体会】 在使用函数创建共享内存时,应当注意函数的返回形式,必要的时候要做强制转换。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服