北京工业大学操作系统实验报告_第1页
北京工业大学操作系统实验报告_第2页
北京工业大学操作系统实验报告_第3页
北京工业大学操作系统实验报告_第4页
北京工业大学操作系统实验报告_第5页
已阅读5页,还剩22页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1操作系统实验报告姓名XXX学号110703XX完成时间2013年11月21日2目录实验一UNIX/LINUIX入门3实验二进程管理5实验三线程的管理11实验四利用信号量实现进程间通信15实验五基于消息队列和共享内存的进程间通信20实验六一个进程启动另一个程序的执行253实验一UNIX/LINUIX入门一、实验目的了解UNIX/LINUX运行环境,熟悉UNIX/LINUX的常用基本命令,熟悉和掌握UNIX/LINUX下C语言程序的编写、编译、调试和运行方法。二、实验内容1、熟悉UNIX/LINUX的常用基本命令如LS、WHO、PWD、PS等。2、练习UNIX/LINUX的文本行编辑器VI的使用方法3、熟悉UNIX/LINUX下C语言编译器CC/GCC的使用方法。用VI编写一个简单的显示“HELLO,WORLD”C语言程序,用GCC编译并观察编译后的结果,然后运行它。三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。四、实验设计代码如下INCLUDEINTMAINPRINTF“HELLO,WORLD“RETURN0五、运行结果4六、收获及机会此次实验让我熟悉了C语言编译器CC/GCC的使用方法。七、参考资料实验指导书5实验二进程管理一、实验目的加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质二、实验内容(1)进程创建编写一段程序,使用系统调用FORK创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符父进程显示“A“;子进程分别显示字符”B“和字符“C”。试观察记录屏幕上的显示结果,并分析原因。(2)进程控制修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。(3)进程的管道通信编写程序实现进程的管道通信。使用系统调用PIPE建立一个管道,二个子进程P1和P2分别向管道各写一句话CHILD1ISSENDINGAMESSAGECHILD2ISSENDINGAMESSAGE父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。四、实验设计(1)进程创建使用FORK()创建两个子进程,父进程等待两个子进程执行完在运行。(2)进程控制使用FORK()创建两个子进程,父进程等待两个子进程分别输出一句话在运行。(3)进程的管道通信建立一个管道。在程序中先建立一个子进程,然后向管道中输入数据,然后从子进程中退出到父进程,读出管道数据,然后再建立一个子进程,写入数据,再读出,即可。代码如下(1)进程创建INCLUDEINCLUDEVOIDMAININTPID1,PID2PID1FORKIFPID10WAITNULLPID2FORKIFPID20WAITNULLPRINTF“A“EXIT0(2)进程控制INCLUDEINCLUDEVOIDMAININTPID1,PID2PID1FORKIFPID10WAITNULLPID2FORKIFPID20WAITNULLPRINTF“FATHERAN“EXIT0(3)进程的管道通信INCLUDEINCLUDEINCLUDEINCLUDEVOIDMAININTPID1,PID2INTPFD2CHARMSG1“CHILD1ISSENDINGAMESSAGE“CHARMSG2“CHILD2ISSENDINGAMESSAGE“CHARBUF256INTR,WIFPIPEPFD0WAITNULLPID2FORKIFPID20CLOSEPFD1/READSLEEP3IFRREADPFD0,BUF,256INCLUDEINCLUDEVOIDMYTHREAD1VOIDPRINTF“THISISPTHREAD1N“VOIDMYTHREAD2VOIDPRINTF“THISISPTHREAD2N“INTMAINVOIDPTHREAD_TID1,ID2INTRET1,RET212RET1PTHREAD_CREATEIF0RET1PRINTF“CREATEPTHREAD1ERRORN“EXIT1RET2PTHREAD_CREATEIF0RET2PRINTF“CREATEPTHREAD2ERRORN“EXIT2PTHREAD_JOINID1,NULLPTHREAD_JOINID2,NULLRETURN02、创建两个线程,分别向线程传递如下两种类型的参数INCLUDEINCLUDEINCLUDEVOIDMYTHREAD1VOIDARGINTNUMNUMINTARGPRINTF“CREATEPARAMETERISDN“,NUMRETURNVOID0VOIDMYTHREAD2VOIDARGCHARCHCHCHARARGPRINTF“CREATEPARAMETERISCN“,CHRETURNVOID0INTMAINVOIDPTHREAD_TID1,ID2INTRET1,RET2INTNUM1CHARCHAINTP_NUMCHARP_CHRET1PTHREAD_CREATEIF0RET1PRINTF“CREATEPTHREAD1ERRORN“EXIT1RET2PTHREAD_CREATE13IF0RET2PRINTF“CREATEPTHREAD2ERRORN“EXIT2PTHREAD_JOINID1,NULLPTHREAD_JOINID2,NULLRETURN0五、运行结果1、主程序创建两个线程MYTHREAD1和MYTHREAD2,每个线程打印一句话。2、创建两个线程,分别向线程传递如下两种类型的参数14六、收获及体会此次实验让我对线程的创建有了初步的理解,在熟练掌握PTHREAD_CREATE和PTHREAD_JOIN两个函数的应用上,学会了如何向线程中传入参数。七、参考资料实验指导书15实验四利用信号实现进程间通信一、实验目的学习UNIX类(SYSTEMV)操作系统信号机制,编写LINUX环境下利用信号实现进程间通信的方法,掌握相关系统调用的使用方法。二、实验内容创建4个线程,其中两个线程负责从文件读取数据到公共的缓冲区,另两个线程从缓冲区读取数据作不同的处理(加和乘运算)。使用信号量控制这些线程的执行。三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。四、实验设计4个线程,两个生产者两个消费者;3个信号量信号量N确保消费者不会从空的缓冲区取数;信号量S确保所有参与者之间互斥对缓冲区操作(防止出现两个生产者同时向一个缓冲区部分写,或写的同时有消费者来读的情况);信号量E确保缓冲区满后不会再向其中写。两个生产者分别从两个文件中读取数据写到缓冲区,两个消费者分别做“”和“”操作代码如下INCLUDEINCLUDEINCLUDE16INCLUDEDEFINEDATA1“DATA1TXT“DEFINEDATA2“DATA2TXT“DEFINEMAX_BUFFER5INTIN0INTOUT0INTCOUNT10INTCOUNT20INTNUM_BUFFERMAX_BUFFERSEM_TNSEM_TSSEM_TEVOIDPRODUCETHREAD1FILEFP1INTNUMWHILEFSCANFFP1,“D“,SEM_WAITPRINTF“PRODUCETHREAD1PUTDINBUFFERDN“,NUM,INNUM_BUFFERINNUMINININMAX_BUFFERSEM_POSTSEM_POSTVOIDPRODUCETHREAD2FILEFP2INTNUMWHILEFSCANFFP2,“D“,SEM_WAITPRINTF“PRODUCETHREAD2PUTDINBUFFERDN“,NUM,INNUM_BUFFERINNUMINININMAX_BUFFERSEM_POSTSEM_POSTVOIDCONSUMETHREAD3INTNUMS2INTRESULTWHILE1SEM_WAITSEM_WAIT17NUMSCOUNT1NUM_BUFFEROUTPRINTF“CONSUMETHREAD3GETDFROMBUFFERDN“,NUMSCOUNT1,OUTOUTOUTOUTMAX_BUFFERCOUNT1IF2COUNT1RESULTNUMS0NUMS1PRINTF“DDDN“,NUMS0,NUMS1,RESULTCOUNT10SEM_POSTSEM_POSTVOIDCONSUMETHREAD4INTNUMS2INTRESULTWHILE1SEM_WAITSEM_WAITNUMSCOUNT2NUM_BUFFEROUTPRINTF“CONSUMETHREAD4GETDFROMBUFFERDN“,NUMSCOUNT2,OUTOUTOUTOUTMAX_BUFFERCOUNT2IF2COUNT2RESULTNUMS0NUMS1PRINTF“DDDN“,NUMS0,NUMS1,RESULTCOUNT20SEM_POSTSEM_POSTVOIDMAININTRET1,RET2,RET3,RET4PTHREAD_TID1,ID2,ID3,ID4SEM_INITSEM_INITSEM_INITFILEFP1NULLFILEFP2NULLFP1FOPENDATA1,“R“FP2FOPENDATA2,“R“18IFNULLFP1EXIT1IFNULLFP2EXIT2RET1PTHREAD_CREATEIF0RET1PRINTF“CREATEPTHREAD1ERRORN“EXIT1RET2PTHREAD_CREATEIF0RET2PRINTF“CREATEPTHREAD2ERRORN“EXIT2RET3PTHREAD_CREATEIF0RET3PRINTF“CREATEPTHREAD3ERRORN“EXIT3RET4PTHREAD_CREATEIF0RET4PRINTF“CREATEPTHREAD4ERRORN“EXIT4PTHREAD_JOINID1,NULLPTHREAD_JOINID2,NULLPTHREAD_JOINID3,NULLPTHREAD_JOINID4,NULLFCLOSEFP1FCLOSEFP2五、运行结果19六、收获及体会此次实验让我实践了在LINUX环境下利用信号量实现生产者消费者问题的解决,掌握20了信号量相关函数的使用方法。七、参考资料实验指导书实验五基于消息队列和共享内存的进程间通信一、实验目的LINUX系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据。本实验的目的是了解和熟悉1LINUX支持的消息通信机制及其使用方法2LINUX系统的共享存储区的原理及使用方法。二、实验内容1消息的创建、发送和接收使用消息调用MSGGET、MSGSND、MSGGREV、MSGCTRL编制长度为1K的消息的发送和接收程序。2共享存储区的创建、附接和断接使用系统调用SHMGET、SHMAT、SHMCTL,编制一个与上述功能相同的程序。三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。四、实验设计1消息队列先定义一个消息结构,包含消息类型和文本长度(1024)。在主函数中,首先获得一个KEY为75的消息的描述符,然后在CLIENT子进程中连续发消息类型为101的十条消息。然后在SERVER子进数中,用WHILE(I1)循环接受消息,以21IMSGMYMSGTYPE1作为结束条件。接受完后撤销消息队列。INCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEDEFINEMAX1024STRUCTMYMSGLONGINTMYMSGTYPECHARTEXTMAXMSGINTMSGIDINTI1VOIDMAINPID_TPID_CLIENTPID_TPID_SERVERMSGIDMSGGET75,0777|IPC_CREAT/HUODEXIAOXIDUILIEMIAOSHUFUIFPID_CLIENTFORK0WHILEIINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEINCLUDEDEFINEMAX1024DEFINEKEY75INTMAININTID,I,PID_SERVER,PID_CLIENTCHARVIRTUAL_ADDRESSIDSHMGETKEY,SIZEOFCHARMAX,IPC_CREAT|0777/CREATEASHMVIRTUAL_ADDRESSSHMATID,0,0/RETURNTOADDRESSOFTHESHMFUJIEIFPID_SERVERFORK1PRINTF“FORKSERVERFAILEDN“EXIT1IFPID_SERVER0SLEEP1FORI0ICHARCOMMAND256INTMAININTRTNINTERRORNOWHILE1PRINTF“FGETSCOMMAND,256,STDINCOMMANDSTRLENCOMMAND10IFFORK0ERRORNOEXECLPCOMMAND,COMMAND,NULL,NULLPERRORCOMMANDEXITERRORNOELSEWAITPRINTF“CHILDPROCESSRETURNDN“,RTNRETURN0五、运行结

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论