《操作系统实验三-进程(共4页).doc》由会员分享,可在线阅读,更多相关《操作系统实验三-进程(共4页).doc(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上操作系统实验三完成人:谌浩旗 学号: 日期:2011-4-8【实验内容】在Linux操作系统上,利用fork()创建一个子进程去生成Fibonacci数列,并采用POSIX share memory 将结果传递给父进程,具体要求见”Operating System Concepts(Seventh Edition)” Chapter 3后的习题3.10。编写程序并在父进程中输出测试结果【实验目的】1. 通过实验,了解Unix/Linux中新进程的创建,以及父进程与子进程之间关系2. 通过实验,掌握共享内存的创建、使用和删除【设计思路】1. 在创建子进程的前面用相应的函
2、数创建共享内存2. 创建子进程,并在子进程内修改内存中存储的值3. 在父进程中输出内存中存储的值 【流程图】创建共享内存创建子进程并修改内存的值父进程中输出修改后的值【主要数据结构及其说明】struct Fibonacci /结构体,用来存储long fib_sequence MAX_SEQUENCE; /数组,存储Fibonacci数值int sequence_size; /数组的大小 shared_data;【源程序并附上注释】#include #include #include #include #include #include #define MAX_SEQUENCE 10/定义共享
3、内存段数据结构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(argv2+i != 0)size = size * 10 + (int)argv2i - (int)0; /参数合法判断 if (size MAX_SEQUENCE) printf(wrong argumentn); return -1; /共享内存段标识
4、符 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(
5、); /创建失败 if (pid 0) printf(create child process failedn);return -1; /子进程操作 else if (pid = 0) /构造Fabonacci数列,并将数据写入共享内存段long preNum = 0, behNum = 1, temp;for (int i = 0; i sequence_size; +i) shared_memory-fib_sequencei = behNum; temp = preNum + behNum; preNum = behNum; behNum = temp;/子进程分离共享内存段 shmdt
6、(shared_memory); /父进程操作 else if (pid 0) /等待子进程退出wait(NULL);/打印共享内存段的信息printf(Fibonacci: );for (int i = 0; i sequence_size; +i) printf(%ld , shared_memory-fib_sequencei);printf(n);/父进程分离共享内存段shmdt(shared_memory);/父进程删除共享内存段shmctl(segment_id, IPC_RMID, NULL); return 0;【程序运行时的初值和运行结果】【实验体会】在使用函数创建共享内存时,应当注意函数的返回形式,必要的时候要做强制转换。专心-专注-专业