作系统实验报告_第1页
作系统实验报告_第2页
作系统实验报告_第3页
作系统实验报告_第4页
作系统实验报告_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

作系统实验报告操作系统实验报告学号:姓名:指导老师:完成日期:目录实验一11实验二22实验三77实验四10实验五15实验六18实验七22

实验一XUNIX/LINUX入门一、实验目的了解UNIX/LINUX运行环境,熟悉UNIX/LINUX的常用基本命令,熟悉和掌握UNIX/LINUX下c语言程序的编写、编译、调试和运行方法。二、实验内容熟悉UNIX/LINUX的常用基本命令如ls、who、pwd、ps等。

练习UNIX/LINUX的文本行编辑器vi的使用方法熟悉UNIX/LINUX下c语言编译器cc/gcc的使用方法。用vi编写一个简单的显示Hello,World。c语言程序,用gcc编译并观察编译后的结果,然后运行它。三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。四、实验程序includeintmain(){printf(HelloWorld。\n);return0;}五、实验感想通过第一次室验,我了解UNIX/LINUX运行环境,熟悉了UNIX/LINUX的常用基本命令,熟悉和掌握了UNIX/LINUX下c语言程序的编写、编译、调试和运行方法。

实验二进程管理一、实验目的加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质。二、实验内容(1)进程创建编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示a;子进程分别显示字符b和字符c。试观察记录屏幕上的显示结果,并分析原因。

(2)进程控制修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。

(3)进程的管道通信编写程序实现进程的管道通信。使用系统调用pipe()建立一个管道,二个子进程P1和P2分别向管道各写一句话:

Child1issendingamessage。Child2issendingamessage。父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。四、实验设计1、功能设计(1)进程创建使用fork()创建两个子进程,父进程等待两个子进程执行完再运行。

(2)进程控制使用fork()创建两个子进程,父进程等待两个子进程分别输出一句话再运行。

(3)进程的管道通信先创建子进程1,向管道写入一句话,子进程1结束后创建子进程2,向管道写入一句话,最后父进程从管道中读出。2、数据结构子进程和管道。3、程序框图五、实验程序(1)进程创建includeintmain(){intpid1,pid2;pid1=fork();if(pid10){printf(Fork1failed。。);}if(pid1==0){printf(b\n);exit(0);}if(pid10){wait(NULL);pid2=fork();if(pid20){printf(Fork2failed。。);}if(pid2==0){printf(c\n);exit(0);}if(pid20){wait(NULL);printf(a\n);exit(0);}}}(2)进程控制

includeintmain(){intpid1,pid2;pid1=fork();if(pid10){printf(Fork1failed。。);}if(pid1==0){printf(Thisischildb\n);exit(0);}if(pid10){wait(NULL);pid2=fork();if(pid20){printf(Fork2failed。。);}if(pid2==0){printf(Thisischildc\n);exit(0);}if(pid20){wait(NULL);printf(Thisisfathera\n);exit(0);}}}(3)进程的管道通信includeincludeintmain(){intpid1,pid2;intpfd;char*msg1=Child1issendingamessage。;char*msg2=Child2issendingamessage。;charbuf;intr,w;if(pipe(pfd)0){printf(pipecreateerror。\n);exit(1);}pid1=fork();if(pid10){printf(Fork1failed。。);}if(pid1==0){close(pfd);Linux支持的消息通信机制及其使用方法2.Linux系统的共享存储区的原理及使用方法。二、实验内容1.消息的创建、发送和接收

使用消息调用msgget()、msgsnd()、msggrev()、msgctrl()编制长度为1K的消息的发送和接收程序。

2.共享存储取得创建、附接和断接使用系统调用shmget()、shmat()、shmctl()、shmctl(),编制一个与上述功能相同的程序。三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。四、实验设计1、消息的创建、发送和接收(1)功能设计为了实现进程之间消息的创建、发送和接收,首先应定义两个子进程,Server进程负责发送,Client进程负责接收,父进程负责创建。其次需要用到msgget()、msgsnd()、msggrev()、msgctrl()等函数进行对消息的控制。题目要求消息长度为1K,那么msgsnd(id,msgp,size,flag)和msgrcv(id,msgp,size,type,flag)函数中参数size应设为1024,msgget(key,flag)中的key应为75。父进程获得创建消息后,子进程Server先后发送编号为1~10的10条消息,子进程Client先后接收这10条消息,方能达到实验目的。

(2)数据结构消息(mymsg):结构体实现,包含的成员变量有消息类型和消息内容,具体实现如下:

structmymsg{shiyan5后台运行此程序,使用killUSR12472时,子进程接收信号,信号处理程序输出子进程号0,并输出信号名称。七、实验心得通过本次实验,我掌握了注册信号处理程序及signal()调用方法,并且了解了如何让程序在后台运行的方法。我也进一步了解了LINUX系统中进程同步与通信的原理。实验六线程的创建一、实验目的编写Linux环境下的多线程程序,了解多线程的程序设计方法,掌握最常用的三个函

数pthread_create,pthread_join和pthread_exit的用法。二、实验内容1、主程序创建两个线程myThread1和myThread2,每个线程打印一句话。使用pthread_create(id,NULL,(void*)thread,NULL)完成。2、创建两个线程,分别向线程传递如下两种类型的参数传递整型值传递字符三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。四、实验设计1、创建两个进程每个进程打印一句话(1)功能设计题目要求创建两个线程,每个线程打印一句话,可以认为两个线程的功能是相同的,故只需要写一个线程的运行函数thread(),在这个函数里有一个printf输出一句话即可。然后在main函数里分别创建两个线程,然后等待两个线程结束。

(2)数据结构线程:使用pthread_create()创建。每个线程有相应的线程标示符,也有各自的属性。线程可以和线程运行函数绑定,并可以在创建线程时确定该线程运行函数的参数。

(3)程序框图2、创建两个进程每个进程打印一句话分别向线程传递如下两种类型的参数:整型值、字符(1)功能设计题目要求创建两个线程,两个线程分别传递int型和char型数据给线程运行函数。所以要编写两个不同的线程运行函数分别接收int型和char型的数据。相应的pthread_create()函数中要给第四个参数,作为形参传进线程运行函数。

(2)数据结构线程:同1,使用pthread_create()创建。每个线程有相应的线程标示符,也有各自的属性。

线程可以和线程运行函数绑定,并可以在创建线程时确定该线程运行函数的参数。

(3)程序框图五、实验程序1、创建两个进程每个进程打印一句话includeincludeinclude#defineMAX10intoperand;intsize=0;sem_tsem;voidReadData1(void){FILE*fp=fopen(,r);while(。feof(fp)){fscanf(fp,%d%d,operand,operand);if(feof(fp))break;++size;sem_post(sem);}fclose(fp);}voidReadData2(void){FILE*fp=fopen(,r);while(。feof(fp)){fscanf(fp,%d%d,operand,operand);if(feof(fp))break;++size;sem_post(sem);}fclose(fp);}voidHandleData1(void){while(1){sem_wait(sem);--size;printf(Plus:%d+%d=%d\n,operand,operand,operand+operand);}}voidHandleData2(void){while(1){sem_wait(sem);--size;printf(Multiply:%d*%d=%d\n,operand,operand,operand*operand);}}intmain(void){pthread_tt1,t2,t3,t4;sem_init(sem,0,0);pthread_create(t3,NULL,(void*)ReadData1,NULL);pthread_create(t1,NULL,(void*)HandleData1,NULL);pthread_create(t4,NULL,(void*)ReadData2,NULL);pthread_create(t2,NULL,(void*)HandleData2,NULL);pthread_j

温馨提示

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

评论

0/150

提交评论