操作系统实验04 Linux 多进程编程
(9页)
本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
15.9 积分
《操作系统》实验报告实验序号: 实验四 实验项目名称:实验04 Linux 多进程编程学 号1207022103姓 名陈华荣专业、班网络工程实验地点实1-311指导教师李桂森实验时间2014.10.26一、 实验目的及要求 1.通过本实验的学习,使学生掌握Linux多进程编程的基本方法。 2.实验内容:利用Linux多进程实现题目所要求的功能。3.以学生自主训练为主的开放模式组织教学二、实验设备(环境)及要求 PC机三、实验内容与步骤1、编写一个显示“HELLO”的c语言程序,并利用GCC编译,然后运行此程序。(提示:若没有gcc,需先安装gcc编译程序)指令: Apt-get install updateApt-get install gccCd /home/normaluesrTouch helloworld.cVim helloeorld.c在helloworld里编辑进:#includeInt main(){ Printf(“helloworld”);Return 0;}然后用gcc进行编译运行:或者直接2、 进程的创建:编制一程序,利用系统调用fork()创建两个子进程。程序运行时,系统中有一个父进程和两个子进程活动,分别让他们显示“A”、“B”和“C”,分析程序运行结果。3、用ctrl+alt+F2切换到第二个终端(tty2)并使用另外一个用户登录(可利用第二个实验创建的用户登录),然后使用who命令查看用户登录情况。用ctrl+alt+F1切换到第二个终端(tty1),修改第二步的程序,在每个进程退出前都加上一个sleep(20)的函数来延缓进程的退出,然后运行此程序,立即切换到tty2,使用ps -a命令查看系统运行的进程,观察程序创建的进程都有哪些?pid是多少?4、进程的管道通信:编制一程序,使用系统调用pipe()建立一管道,两个子进程P1和P2分别向管道各写一句话,父进程则从管道中读取出来并显示在屏幕。(提示:利用pipe创建管道,利用write和read函数分别进行写与读的操作,使用wait函数等待子进程结束)运行结果: 5、利用Linux多进程编程实现以下功能:创建两个子进程;一个子进程(生产者进程)依次向缓冲区写入整数0,1,2,...,19;另一个子进程(消费者进程)暂停3s后,从缓冲区读数,每次读一个,然后将数字显示出来;父进程等待子进程2(消费者进程)的退出信息,待收集到该信息后,父进程就返回。(提示:用char数组创建缓冲区)码源:#include #include #include #include #include char globe_buffer[100]; void *read_buffer_thread(void *arg); //这里先声明一下读缓存的线程,具体实现写在后面了 int main() { int res,i; pthread_t read_thread; for(i=0;i<20;i++) globe_buffer[i]=i; printf("\nTest thread : write buffer finish\n"); sleep(3);\\这里的3秒是多余,可以不要。 res = pthread_create(&read_thread, NULL, read_buffer_thread, NULL); if (res != 0) { printf("Read Thread creat Error!"); exit(0); } sleep(1); printf("waiting for read thread to finish...\n"); res = pthread_join(read_thread, NULL); if (res != 0) { printf("read thread join failed!\n"); exit(0); } printf("read thread test OK, have fun!! exit ByeBye\n"); return 0;} void *read_buffer_thread(void *arg){ int i,x; printf("Read buffer thread read data : \n"); for(i=0;i<20;i++) { x=globe_buffer[i]; printf("%d ",x); globe_buffer[i]=0;//清空 } printf("\nread over\n");}---------------------------------------------------------------------------------以上程序编译:gcc -D_REENTRANT test.c -o test.o –lpthread运行这个程序:$ ./test.o思考题多进程编程与单进程编程有何区别?单进程编程:顺序执行多进程编程:同时执行单进程编程:数据同步多进程编程:数据异步单进程编程:复杂度低多进程编程:复杂度高单进程编程:用途单一多进程编程:用途广泛四、实验心得体会五、教师评语签名:日期:成绩 关 键 词: 操作系统实验04Linux多进程编程
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。