- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统课程设计推荐
操作系统
课 程 设 计 书
学院
专业
班级
题目 操作系统实验报告
教师
学生
目 录
一、 实验题目与要求 1
实验一 进程创建及进程通信 1
实验二 生产者-消费者问题 1
实验三 存储管理实验 1
二、总的设计思想及环境语言、工具等 1
三、数据结构与模块说明 2
3.1数据结构设计 2
3.2模块说明 2
四、源程序及运行结果 4
4.1、实验一 进程创建及进程通信 4
exam1:创建子进程示例1 4
exam2:创建子进程示例2 5
exam3:利用管道实现单向通信 5
exam4:利用管道实现父子进程双向通信 6
4.2、实验二 生产者-消费者问题 7
exam5:实现进程互斥示例程序 7
exam6:实现进程同步示例程序 11
exam7:生产者和消费者问题 15
4.3、实验三 存储管理实验 20
exam8:请求页式存储管理页面置换算法比较 20
五、自我评价和总结 25
六、课程设计教材及主要参考资料 26
实验题目与要求
实验一 进程创建及进程通信
实验目的:掌握linux进程创建的基本方法及进程间的通信
实验要求:利用fork()创建子进程,利用pipe()实现进程间的通信。
实验二 生产者-消费者问题
实验目的:掌握进程之间的同步与互斥
实验要求:利用信号量实现生产者-消费者问题。
实验三 存储管理实验
实验目的:通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。
实验要求:
(1).通过随机数产生一个页地址流,共640页
(2).用户内存容量为4页到32页
(3).计算并输出下述各种算法在不同内存容量下的命中率。
a.FIFO 先进先出算法
b.LRU 最近最少使用页面算法
c.OPT 最佳淘汰算法
二、总的设计思想及环境语言、工具等
总的设计思想:
1.利用fork()创建子进程,利用pipe()实现进程间的通信。
2.利用信号量实现生产者-消费者问题。
3.(1)通过随机数产生一个页地址流,共640页
(2)用户内存容量为4页到32页
(3)计算并输出下述各种算法在不同内存容量下的命中率。
a.FIFO 先进先出算法
b.LRU 最近最少使用页面算法
c.OPT 最佳淘汰算法
环境语言:
cygwin环境C语言
工具:
cygwin2.738
三、数据结构与模块说明
3.1数据结构设计
a.实验一
1.利用fork()创建一个新进程。
2.利用pipe()实现进程间的通信。使子进程与父进程之间实现同步。
3.子进程将信息写入管道并向父进程发出信号,父进程接到信号后从管道中读取信息,并将信息输出,如果读取失败则输出“fork error”。
b.实验二
生产者进程的功能:生产东西,供消费者消费;
消费者进程的功能:消费生产者生产的东西。生产者生产产品并存入缓冲区供消费者取走使用,消费者从缓冲器内取出产品去消费;
在生产者和消费者同时工作时,必须禁止生产者将产品放入已装满的缓冲器内,禁止消费者从空缓冲器内取产品。
c.实验三
系统功能流程图:
3.2模块说明
a.实验一
系统功能模块文字说明:
图3.2.1 进程的创建及通信模块演示
b.实验二
系统功能模块图:
图3.2.2 生产消费者进程模块演示
c.实验三
系统功能模块图:
图3.2.3 页式存储管理模块划分
四、源程序及运行结果
4.1、实验一 进程创建及进程通信
exam1:
//父进程创建一个子进程,父进程显示金木水火土,子进程显示日月星辰,多次运行该程序会得到不同的运行结果。
#include unistd.h
#include stdio.h
#include stdlib.h
main()
{
int pid,n=0;
srand(getpid());/*设置随机种子*/
if ((pid=fork())!=0)
while(n5)
{printf(%d,n++);
printf(金木水火土\n);
sleep(rand()%3);} //睡眠
else
while(n5)
{printf(%d,n++);
printf(日月星辰\n);
sleep(rand()%3);
}
}
运行结果:
exam2:
//子进程改变了全局变量globa 和局部变量vari的值。通过调试运行,体会进程的运动轨迹。
#include s
文档评论(0)