参考资料操作系统实验报告Word格式文档下载.docx
- 文档编号:21261304
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:20
- 大小:685.05KB
参考资料操作系统实验报告Word格式文档下载.docx
《参考资料操作系统实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《参考资料操作系统实验报告Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
三、实验三---------------------------------------------8
1.实验目的-----------------------------------------------------------8
2.实验内容-----------------------------------------------------------8
3.实验要求-----------------------------------------------------------8
4.实验设计-----------------------------------------------------------9
5.实验程序-----------------------------------------------------------10
6.实验结果-----------------------------------------------------------11
7.实验感想-----------------------------------------------------------11
四、实验四---------------------------------------------11
1.实验目的-----------------------------------------------------------11
2.实验内容-----------------------------------------------------------11
3.实验要求-----------------------------------------------------------11
4.实验设计-----------------------------------------------------------12
5.实验结果-----------------------------------------------------------16
6.实验感想-----------------------------------------------------------17
五、实验五---------------------------------------------17
1.实验目的-----------------------------------------------------------17
2.实验内容-----------------------------------------------------------17
3.实验要求-----------------------------------------------------------17
4.实验设计-----------------------------------------------------------17
5.实验程序-----------------------------------------------------------18
6.实验结果-----------------------------------------------------------19
7.实验感想-----------------------------------------------------------19
六、实验六---------------------------------------------20
1.实验目的-----------------------------------------------------------20
2.实验内容-----------------------------------------------------------20
3.实验要求-----------------------------------------------------------20
4.实验设计-----------------------------------------------------------20
5.实验结果-----------------------------------------------------------23
6.实验感想-----------------------------------------------------------24
七、实验七---------------------------------------------24
1.实验目的-----------------------------------------------------------24
2.实验内容-----------------------------------------------------------24
3.实验要求-----------------------------------------------------------24
4.实验设计-----------------------------------------------------------25
5.实验程序-----------------------------------------------------------27
6.实验结果-----------------------------------------------------------28
7.实验感想-----------------------------------------------------------28
实验一UNIX/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编译并观看编译后的结果,然后运行它。
三、实验要求
依照要求编写程序,放在相应的目录中,编译成功后执行,并依照要求分析执行结果,并写出实验报告。
四、实验设计
Linux系统经常使用命令格式:
command[option][argument1][argument2]...
五、实验程序
#include<
>
intmain(void)
{
printf("
HelloWorld!
\n"
);
system("
pause"
return0;
}
六、实验结果
七、实验感想
通过第一次室验,熟悉了LINUX系统的操作,终端的利用,GCC编译c程序
实验二进程治理
一、实验目的
加深对进程概念的明白得,明确进程与程序的区别;
进一步熟悉并发执行的实质。
二、实验内容
(1)进程创建
编写一段程序,利用系统挪用fork()创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符:
父进程显示“a“;
子进程别离显示字符”b“和字符“c”。
试观看记录屏幕上的显示结果,并分析缘故。
(2)进程操纵
修改已编写的程序,将每一个进程输出一个字符改成每一个进程输出一句话,再观看程序执行时屏幕上显现的现象,并分析缘故。
(3)进程的管道通信
编写程序实现进程的管道通信。
利用系统挪用pipe()成立一个管道,二个子进程P1和P2别离向管道各写一句话:
Child1issendingamessage!
Child2issendingamessage!
父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。
三、实验要求
四、实验设计
一、功能设计
实验要求成立一个管道实现父进程和子进程间的通信,子进程有两个,子进程向管道里写数据,父进程从管道里读出数据。
管道的作用是将两个缓冲区相关连起来,使得一个缓冲区写的东西能够从另一个缓冲区读出来,遵循先进先出的顺序。
程序的顺序是如此的:
先创建子进程1,向管道写入一句话,子进程1终止后创建子进程2,向管道写入一句话,最后父进程从管道中读出。
二、数据结构
子进程:
使用pid_tfork()函数创建,返回值为子进程号。
管道:
利用intpipe(intfiledis[2])创建无名管道,filedis[2]为两个文件描述符。
3、程序框图
五、实验程序
#include<
intpipe(intfiledis[2]);
#defineINPUT0
#defineOUTPUT1
intmain()
{
intfile_descriptors[2];
pid_tpid1,pid2;
Linux支持的消息通信机制及其利用方式
2.Linux系统的共享存储区的原理及利用方式。
1.消息的创建、发送和接收
利用消息挪用msgget()、msgsnd()、msggrev()、msgctrl()编制长度为1K的消息的发送和接收程序。
2.共享存储取得创建、附接和断接
利用系统挪用shmget()、shmat()、shmctl()、shmctl(),编制一个与上述功能相同的程序。
一、消息的创建、发送和接收
(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前后接收这11条消息,方能达到实验目的。
(2)数据结构
消息(mymsg):
结构体实现,包括的成员变量有消息类型和消息内容,具体实现如下:
structmymsg{
5&
后台运行此程序,利用kill–USR14096时,子进程接收信号,信号处置程序输出子进程号0,并输出信号名称。
七、实验心得
通过本次实验,我把握了注册信号处置程序及signal()挪用方式,而且了解了如何让程序在后台运行的方式。
我也进一步了解了LINUX系统中进程同步与通信的原理。
实验六线程的创建
编写Linux环境下的多线程程序,了解多线程的程序设计方式,把握最经常使用的三个函数pthread_create,pthread_join和pthread_exit的用法。
1、主程序创建两个线程myThread1和myThread2,每一个线程打印一句话。
利用
pthread_create(&
id,NULL,(void*)thread,NULL)完成。
提示:
先概念每一个线程的执行体,然后在main中()创建几个线程,最后主线程等待子线程结
束后再退出。
2、创建两个线程,别离向线程传递如下两种类型的参数
传递整型值
传递字符
一、创建两个进程每一个进程打印一句话
题目要求创建两个线程,每一个线程打印一句话,能够以为两个线程的功能是相同的,故只需要写一个线程的运行函数thread(),在那个函数里有一个printf输出一句话即可。
然后在main函数里别离创建两个线程,然后等待两个线程终止。
线程:
利用pthread_create()创建。
每一个线程有相应的线程标示符,也有各自的属性。
线程能够和线程运行函数绑定,并能够在创建线程时确信该线程运行函数的参数。
(3)程序框图
(4)程序
voidthread(void)n"
n"
pthread_join(id1,NULL);
pthread_join(id1,NULL);
//等待线程1终止
pthread_join(id2,NULL);
//等待线程2终止
return(0);
五、实验结果
由图可知两个线程主程序创建了两个进程这两个进程别离输出了一句话
主程序别离创建了两个线程并向线程1传递了‘t’向线程2传递了99,线程运行函数别离输出告知接收了这两个参数。
六、实验感想
通过本次实验,我学会了如何利用LINUX下的线程创建函数pthread_create()来创建线程,而且向线程传递参数。
同时加倍熟练的利用LINUX。
实验七利用信号量实现进程的操纵
学习UNIX类操作系统信号量机制,编写Linux环境下利用信号量实现进程操纵的方式,把握相关系统挪用的利用方式。
创建4个线程,其中两个线程负责从文件读取数据到公共的缓冲区,另两个线程从缓冲区读取数据作不同的处置(加和乘运算)。
利用信号量操纵这些线程的执行。
参见“五、补充材料”中的相关系统挪用的大体用法。
1、功能设计
题目要求创建4个线程,其中两个负责从文件读数据到缓冲区,另两个负责从缓冲区读数据进行加和乘的运算。
我对这4个线程进行如下安排,线程1读后线程2才能够读,线程2读了后线程3才能够进行加的运算,线程3加完了后线程4才能进行乘的运算,线程4乘完后线程1才能继续读。
故需4个信号量sem1,sem2,sem3,sem4。
线程1消费sem1生产sem2,线程2消费sem2生产sem3,线程3消费sem3生产sem4,线程4消费sem4生产sem1,形成一个循环,直到文件终止为止。
2、数据结构
信号量(semaphore):
数据类型为结构sem_t,本质上是一个长整型的数。
一共4个
公共缓冲区(stack):
采纳2维数组的方式实现(stack[NUM][2])。
数组中的两列别离存储两个文件中的数据。
该2维数组还有一个索引:
size,指向2维数组的顶部。
读线程每次从文件读出两个数放到stack[NUM][0]和stack[NUM][1]
Y
#defineMAX10
intoperand[MAX][2];
intsize=0;
sem_tsem;
voidReadData1(void){
FILE*fp=fopen("
"
"
r"
while(!
feof(fp)){
fscanf(fp,"
%d%d"
&
operand[size][0],&
operand[size][1]);
if(feof(fp))
break;
++size;
sem_post(&
sem);
fclose(fp);
voidReadData2(void){
++size;
voidHandleData1(void){
while
(1){
sem_wait(&
--size;
printf("
Plus:
%d+%d=%d\n"
operand[size][0],operand[size][1],
operand[size][0]+operand[size][1]);
voidHandleData2(void){
Multiply:
%d*%d=%d\n"
operand[size][0]*operand[size][1]);
intmain(void){
pthread_tt1,t2,t3,t4;
sem_init(&
sem,0,0);
t3,NULL,(void*)ReadData1,NULL);
t1,NULL,(void*)HandleData1,NULL);
t4,NULL,(void*)ReadData2,NULL);
t2,NULL,(void*)HandleData2,NULL);
pthread_join(t2,NULL);
六、实验结果
从图可知每次线程1从读两个数到缓冲区然后线程2从读两个数到缓冲区,然后线程3从缓冲区读出两个数相加,最后线程4再读出两个数相乘,由于缓冲区的结构是堆栈式的后进先出的,因此会看到程序对后写入的九、10先相加,然后再对先写入的-九、-10相加,以此类推。
七、实验感想
通过本次实验,我进一步把握了如何利用LINUX下的线程创建函数pthread_create()创建线程,而且学会了如何利用信号量操纵进程的运行,学会了利用消费函数sem_wait(),生产函数sem_post(),和如何初始化信号量,同时也把握了文件的读取方式,本次实验加深了我对信号量的熟悉。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 参考资料 操作系统 实验 报告