操作系统实验报告B.docx
- 文档编号:377299
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:15
- 大小:840.73KB
操作系统实验报告B.docx
《操作系统实验报告B.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告B.docx(15页珍藏版)》请在冰豆网上搜索。
操作系统实验报告B
操作系统实验报告
1.进程管理····································3
2.线程的管理··································7
3.利用信号量实现进程控制···························11
4.基于消息队列和共享内存的进程间通信···············13
5.一个进程启动另一个程序的执行···················17
6.个人总结········································19
实验二进程管理
【实验目的】
加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质。
【实验内容】
(1)进程创建
编写一段程序,是系统调用fork()创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符:
父进程显示a;子进程分别显示b和c。
(2)进程控制
修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象
(3)进程的管道通信
编写程序实现进程的管道通信。
使系统调用pipe()建立一个管道,两个子进程P1和P2分别向管道各写一句话:
child1issendingamessage!
child2issendingamessage!
父进程从管道中读出两个来自子进程的信息并显示
【实验要求】
按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告
【实验设计】
(1)进程创建
(2)进程控制
(3)进程的管道通信
【实验测试结果及分析】
(1)进程创建
显示顺序为bca的原因:
在创建两个子进程时分别在两个子进程中写入了需要显示的字符,但因为创建的顺序有先后所以显示顺序是bc,父进程中的a是最后显示的。
父进程在子进程开始前就会执行,但是子进程中的代码先后性是随机的,不一定那一个先执行完,所以在实验中通过if···else的语句能分清两个子进程的先后顺序。
(2)进程控制
显示顺序与创建顺序有关。
(3)进程的管道通信
先创建了两个子进程和一个父进程,分别在屏幕上显示出进程的创建状态,显示顺序由创建顺序而得,在创建两个子进程时也创建了管道,分别在管道内写入了相应需要显示的字符串,在父进程中调用了管道中的数据,所以会分别显示出来。
通过管道pipe,进行数据输入的时候,主要学会了如何和再合适的时间里封闭和打开p管道的出入口,从而使得父子进程能够方便调用。
【运行结果】
(1)进程创建
(2)进程控制
(3)进程的管道通信
【参考资料】
实验指导书
实验三线程的管理
【实验目的】
编写Linux环境下的多线程程序,了解多线程的程序设计方法,掌握最常用的三个函pthread_create,pthread_join和pthread_exit的用法
【实验内容】
1、主程序创建两个线程myThread1和myThread2,每个线程打印一句话。
使用pthread_create(&id,NULL,(void*)thread,NULL)完成。
提示:
定义每个线程的执行体,然后在main中()创建几个线程,最后主线程等待子线程结束后再退出。
2、创建两个线程,分别向线程传递如下两种类型的参数
传递整型值
传递字符
【实验要求】
按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告
【实验设计】
(1)线程的创建
(2)利用线程传递参数
【实验测试结果及分析】
通过本次实验我知道了如何建立一个线程,并通过对pthread_create()函数的学习,知道如何利用指针进行参数的传递和利用。
【运行结果】
(1)线程的创建
(2)利用线程传递不同类型参数
【参考资料】
实验指导书
实验四利用信号量实现进程控制
【实验目的】
学习使用UNIX类操作系统信号量机制,编写Linux环境下利用信号量实现进程控制的方法,掌握相关系统调用的使用方法。
【实验内容】
创建4个线程,其中两个线程负责从文件读取数据到公共的缓冲区,另两个线程从缓冲区读取数据作不同的处理,使用信号量控制这些现成的执行。
【实验要求】
按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。
【实验设计】
【实验测试结果及分析】
此程序主要通过建立(void*)ReadData1,(void*)ReadData2,(void*)Multiply,(void*)Plus四个函数进行操作。
并且通过信号量的使用,实现对四个函数先后执行的区分。
其中,信号量empty判断缓冲区是否为空,operation_signal判断当前缓冲区是否只有一个生产者在操作(避免数据覆盖)。
通过信号量的控制以保证子线程的先后顺序。
【运行结果】
【参考资料】
实验指导书,XX知道
实验五基于消息队列和共享内存的进程间通信
【实验目的】
Linux系统的进程通信机构允许在任意进程间大批量地交换数据。
本实验要求了解熟悉Linux支持的消息通信机制机器使用方法和Linux系统的共享存储区的原理和使用方法。
【实验内容】
1.消息的创建,发送和接收
使用msgget(),msgsnd(),msggrev(),msgctrl()编制长度为1K的消息的发送和接收程序。
2.共享存储区的创建,附接和断接
使用shmget(),shmat(),shmctl(),shmctl(),编制一个与上述功能相同的程序。
【实验要求】
按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果。
【实验设计】
1.消息的创建,发送和接收
2.共享存储区的创建,附接和断接
【实验测试结果及分析】
第一个实验主要利用msgget();创建一个队列,并利用msgsnd();和msgrcv()把msg结构体和队列之间进行传入和传出操作,并进行输出。
第二个实验利用shmget()创建出一块共享内存,通过指针addr的附接,进行对内存中数据的写入和输出。
【运行结果】
1.消息的创建,发送和接收
2.共享存储区的创建,附接和断接
【参考资料】
实验指导书,XX百科
实验六一个进程启动另一个程序的执行
【实验目的】
在Linux环境下,fork()与exec()的结合使用实现一个进程启动另一个程序的知性的基本方法。
【实验内容】
父进程从终端读取要执行的命令,并交给子进程执行。
父进程等待子进程结束,并打印子进程的返回值。
【实验要求】
按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。
【实验设计】
【实验测试结果及分析】
此程序通过对execlp()函数的调用,使得通过输入命令被执行。
输入的命令用fgets()存入command字符串中,然后用execlp()函数执行command的内容,如果不正确返回值给errorno,否则执行此命令。
通过我们之前做的几个实验的实验结果来验证这个实验是否能够正确的运行。
【运行结果】
【参考资料】
实验指导书
个人总结
通过此次Linux实验,我对操作系统的相关知识有了更加深入的了解和体会。
首先我对如何建立进程,以及对进程的调用有着一定的理解,一开始做实验,我遇到了种种困难,可以说进行的不是很顺利,但当我理解了编程思想以及方法的时候,问题都一一解决了,所以在当我做到线程实验的时候也就更加的顺利,对通过线程的调用来实现相关的运算有了更深刻的理解并且进行了实际的操作。
在编写信息量相关程序的代码的过程中,我知道了怎么样利用信号量来控制线程的发生,不只是把sem_wait()和sem_post()放到函数前后就可以,而是要根据特定的情况通过对变量的初始化,采用不同的放置,才能使函数能够按照自己的意愿进行。
在编写基于消息队列和共享内存的进程间通信的实验时,里面各类函数的功能和应用我研究的时间比较长,这让我对编程有了更为深刻的理解。
除了对代码的熟悉之外,更多的是对linux操作系统有了了解,我认识并且熟悉了这种用代码操作的平台,不仅仅限于听说。
与此同时也接触了虚拟机等相关的知识,让自己以此为机会查资料学习,并最终完成实验,实验虽然不难,但是开始的熟悉还是需要一段过程,熟悉之后让我对以后对相关知识的学习也有了更多的信心,希望能越做越好。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告