linux多进程编程实验,操作系统实验04 Linux 多进程编程

62e50291a81fc54b507f33cb80033297.gif 操作系统实验04 Linux 多进程编程

(9页)

2cacd006b7a2869c8ebba974c63d4a78.png

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

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多进程编程

524d6daf746efaa52c3c71bbfe7ba172.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
进程间通信是指在不同进程之间传输数据或信号的机制。Linux提供了多种进程间通信的方式,包括管道、消息队列、共享内存和信号量等。以下是一些常用的进程间通信方式: 1. 管道(pipe):管道是一种半双工的通信方式,只能在具有亲缘关系的进程之间使用。数据只能单向流动,且在一个进程写入的数据只能被另一个进程读取。 2. 命名管道(named pipe):命名管道是一种特殊的文件,可以在不同进程之间共享数据。它允许不具有亲缘关系的进程之间进行通信。 3. 消息队列(message queue):消息队列是一种异步通信方式,进程通过消息队列发送消息,而不需要直接与接收进程进行交互。消息可以按照优先级进行排序,接收进程可以按照顺序接收消息。 4. 共享内存(shared memory):共享内存是一种高效的通信方式,它允许多个进程访问同一块内存空间。这种方式适合于大量数据的传输,但需要考虑同步和互斥等问题。 5. 信号量(semaphore):信号量是一种用于同步和互斥的机制,它可以用于控制进程对共享资源的访问。进程可以通过信号量实现互斥、同步和等待等操作。 在实际的应用中,通常需要结合多种进程间通信方式来实现复杂的功能。比如可以使用消息队列配合共享内存来实现高效的数据传输,或者使用信号量和共享内存来实现进程间的同步和互斥等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值