操作系统试验.
- 格式:doc
- 大小:353.50 KB
- 文档页数:26
0;i--){printf("" />
《操作系统》实验报告2013/2014 学年第2 学期
系别************
专业************
班级****************
姓名*******
学号**************
授课老师*********
姓名:课程名称:**************
massage="I am father\n";
}
for(;i>0;i--)
{
printf("%s",massage);
sleep(1);
}
return 0;
}
运行结果:(截图)
运行结果:
四、实验分析与总结
1.实验内容1运行结果为什么无固定顺序,fork()函数创建进程是如何并发执行的。
答:因为是并发执行的,fork()函数创建的三个进程抢占CPU不同,从而导致三个进被CPU调用执行的顺序不同,从而输出的结果无固定顺序;fork()函数调用成功后,子进程与父进程并发执行相同的代码,但由于子进程也继承了父进程的程序指针,所以子进程是从fork()后的语句开始执行,另外fork在子进程和父进程中的返回值是不同的,在父进程中返回子进程的PID,而在子进程中返回0,使父进程和子进程执行不同的分支,从而实现了进程的并发执行。
2.实验内容3是如何实现父子进程的同步执行的。
答:wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束。程序段主要使用了函数wait()和,e x i t()这是因为父进程必须等待两个子进程终止后才终。在父进程中调用wait()函数,则父进程被阻塞,进入等待队列,等待子进程结束。子进程终止时执行exit()向父进程发终止信号,当接到信号后,父进提取子进程的结束状态值,从wait()返回继续执行原程序,从而实现了父、子进程的同步推进。
运行结果:(截图)
运行结果:(截图)
运行结果:(截图)
四、实验分析与总结
对实验运行结果进行分析:试比较实验中两种方法实现进程通信的不同之处。
答:①消息队列的建立比共享区的设立消耗的资源少.前者只是一个软件上设定的问题,后者需要对硬件操作,实现内存的映像,当然控制起来比前者复杂.如果每次都重新进行队列或共享的建立,共享区的设立没有什么优势。
②当消息队列和共享区建立好后,共享区的数据传输,受到了系统硬件的支持,不耗费多余的资源;而消息传递,由软件进行控制和实现,需要消耗一定的CPU资源.从这个意义上讲,共享区更适合频繁和大量的数据传输.
③消息的传递,自身就带有同步的控制.当等到消息的时候,进程进入睡眠状态,不再消耗CPU资源.而共享队列如果不借助其他机制进行同步,接受数据的一方必须进行不断的查询,白白浪费了大量的CPU资源。
运行结果:(截图)
四、实验分析与总结
对实验运行结果进行分析:程序采用的是何种动态分区分配算法,写出判断依据,并分析该算法的优缺点。
答:采用的是首次适应算法,程序使用一个链表来模拟内存存储空间,以地址递增的顺序链接。该算法倾向于优先利用内存中低地址部分的空闲分区,保留了高地址部分的大空闲分区,为后来的大作业分配大内存创造了条件;其缺点是低地址部分被不断划分,留下了许多小的空闲分区,而每次查找又是从低地址部分开始的,从而增加了查找可用空闲分区时的开销。
//加减乘除四则运算
#!/bin/bash
printf "please input first num:" read fnum;
echo "please input second num:" read snum;
read -p "please input function:" fun
case $fun in
"+") result=$(( $fnum + $snum ));; "-") result=$(( $fnum - $snum ));; "*") result=$(( $fnum * $snum ));; "/") result=$(( $fnum / $snum ));; esac
echo "The result is: $resu
运行结果:(截图)
八、实验分析与总结
对实验运行结果进行分析和总结。
答:显示指定文件内容部分echo输出Please input your name,输入建立的文本文档的名字,如test.txt,cat是显
示文本本文档的内容。加减乘除四则运算部分先输入第一个数和第二个数,用case语句实现运算功能的选择,用;;来终止语句。
在刚开始用shell程序编写时感觉比较困难,因为对每个指令所代表的功能并不是很熟悉,但在熟悉shell程序指令之后,感觉比c语言编写更加简便,更加直观明了。