收藏 分享(赏)

操作系统课设报告 完成版new.doc

上传人:dreamzhangning 文档编号:2251769 上传时间:2018-09-07 格式:DOC 页数:28 大小:581.84KB
下载 相关 举报
操作系统课设报告 完成版new.doc_第1页
第1页 / 共28页
操作系统课设报告 完成版new.doc_第2页
第2页 / 共28页
操作系统课设报告 完成版new.doc_第3页
第3页 / 共28页
操作系统课设报告 完成版new.doc_第4页
第4页 / 共28页
操作系统课设报告 完成版new.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、内容摘要掌握使用面向对象程序设计方法解决问题的基本思路和方法,增强我们的动手与实践能力。在页面置换算法,我觉得此次实验就是将三种页面置换算法按照课本上老师讲的方式直观简便的输出 ,在采用输出算法时,我摒弃了常人所用的一维数组输出法,而别出心裁的采用了二维数组的输出算法,模拟了内存的物理块,清晰直观的表达了页面是如何在外存中被调入内存中的,以及各页面在调入过程中是否命中或在置换时又置换了内存中哪个页面。在软件工程的角度来看,我的系统具有高内聚低耦合的优点,即各种算法之间,并不影响彼此的函数调用,而在各算法的内部,内聚度很高。在生产者与消费者问题中,生产者-消费者问题是很经典很具有代表性的进程同步

2、问题,计算机中的很多同步问题都可抽象为生产者-消费者问题,通过本实验的练习,能加深我们对进程同步问题的认识与理解。关键词:线程 先进先出置换算法 最佳置换算法 最近最久置换算法1目 录目 录 3第 1 章 绪论 41.1 课题研究现状分析 .41.1.1 本领域内已开展的研究工作 41.2 选题的目的及意义 .4第 2 章 系统总体设计 62.1 系统功能设计 .62.1.1 页面调度算法系统功能设计 62.1.2 多进程同步 62.2 系统功能模块流程图 .62.2.1 多线程同步功能流程图 62.2.2 页面调度系统功能流程图 8第 3 章 系统实现 123.1 用多进程同步方法解决生产者

3、-消费者问题。 123.1.1 源代码 .123.1.2 调试与运行 .143.2 页面置换程序 .143.2.1 源代码 .143.2.2 调试与运行 24第 4 章 系统使用说明书 26第 5 章 课程设计总结 27参考文献 282第 1 章 绪论在进程运行过程中,若其所要访问的页面不在内存而需要把他们调入内存,但存已无内存空间时,为了保证该进程能顺利的运行,系统必须从内存中调出一页程序或数据送内存的兑换区中。但应将那个页面调出,需根据一定的算法来确定。通常,把换出页面的算法称为页面置换算法(Page-Replacement Algorithms) 。页面置换的好坏,将直接影响到系统的性能

4、。一个好的页面置换算法,应具有较低的页面置换频率。从理论上讲,应将那些以后不再会访问的页面换掉,或把那些在较长时间内不会访问的页面调出。1.1 课题研究现状分析1.1.1 本领域内已开展的研究工作1、理论研究基础前台以 VC+6.0 为开发环境实现页面调度,以及在虚拟机中实现多线程并发,根据调度的需要选择不同的算法。提高页面调度的命中率和处理机的利用率。2、技术层面的支持系统界面采用 DOS 界面,根据用户选择进入不同的算法执行不同的操作。1.2 选题的目的及意义一、 设计目的:1、页面置换系统:用 C#编写 OPT、FIFO 、LRU 三种置换算法;熟悉内存分页管理策略;了解页面置换的算法;

5、掌握一般常用的调度算法;根据方案使算法得以模拟实现。2、多进程同步:通过编写程序实现多进程同步。二、设计的意义:通过对几种算法的比较了解各种算法的性能以及线程同步问题。锻炼知识的运用能力和实践能力。3第 2 章 系统总体设计2.1 系统功能设计2.1.1 页面调度算法系统功能设计本系统实现了对 OS 页面置换算法的模拟。主要功能模块包括:先进先出算法(FIFO) 、最近最久未使用算法(LRU) 、最佳置换算法(OPT) 。如图 2-2 所示。页面调度算法最佳置换算法最近最久未使用先进先出置换算法图 2-2 页面置换2.1.2 多进程同步本系统通过 C 语言实现了对 OS 多线程同步。主要功能模

6、块包括:生产者生产算法,消费者消费算法,线程 ID 号产生。图 2-1 生产与消费2.2 系统功能模块流程图2.2.1 多线程同步功能流程图3 个生产者、3 个消费者、共享 20 个单元缓冲区4图 2-3 生产与消费图形描述生产者线程开始资源信号量 P 操作互斥信号量 P 操作生产一个产品把产品送入缓冲区互斥信号量 V 操作资源信号量 V 操作等待队列中有消费者线程等待队列中有消费者线程线程自我阻塞添加到等待队列线程自我阻塞添加到等待队列未通过未通过通过通过唤醒对头的消费者线程唤醒对头的消费者线程生产者线程结束YYNN图 2-4 生产者流程结构5生产者线程开始资源信号量 P 操作互斥信号量 P

7、 操作生产一个产品把产品送入缓冲区互斥信号量 V 操作资源信号量 V 操作等待队列中有消费者线程等待队列中有消费者线程线程自我阻塞添加到等待队列线程自我阻塞添加到等待队列未通过未通过通过通过唤醒对头的消费者线程唤醒对头的消费者线程生产者线程结束YYNN图 2-5 消费者流程结构2.2.2 页面调度系统功能流程图功能描述:(1)最佳置换算法:被淘汰的页面,将是以后永不使用或是在最长(未来) 时间内不在被访问的页面。采用最佳置换算法可以保证获得最低的缺页率。如图 2-6 所示。6成功开始输入物理块数和页号数失败错误提示选择最佳置换算法页在物理块内扫描未载入的页面 , 找出与内存中页号相等的页面并记

8、录下标是结束否载入页面页号序列加 1是页号序列载完 ?替换下标最大的页面 ( 即最晚出现的 )内存物理块已满否否内存物理块加 1是图 2-6 最佳置换算法(2)先进先出置换算法:该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法简单,但与进程实际运行规律不相适应,可能出现“抖动现象” 。如图 2-7 所示。7成功开始输入物理块数和页号数失败错误提示选择先进先出置换算法页在物理块内置换 p h y s i c a l n % m n u m b e r 物理块 ( m n u m b e r 为内存物理块数 ); n + + ;是结束否载入页面页号序列加 1是页号

9、序列载完 ?内存物理块已满否否内存物理块加 1是标志位 n = 0图 2-7 先进先出置换算法流程图(3)最久最近未使用置换算法:该算法是根据页面调入内存的使用情况进行决策的。由于无法预测个页面未来的使用情况,只能利用“最近的过去”作为“最近的将来的近似” 。LRU 选择最近最久未使用8的页面予以淘汰。如图 2-8 所示。成功开始输入物理块数和页号数失败错误提示最近最久未使用算法页在物理块内扫面各物理块的状态标志位 ,找出状态标志位最大的物理块置换是结束否载入页面页号序列加 1是页号序列载完 ?设置新置换的物理块状态标志位为 0 , 其他物理块状态标志位加 1内存物理块已满否否内存物理块加 1

10、是设置对应物理块的状态标志位为0 , 其他物理块的状态标志位加 1图 2-8 最近最久未使用模块功能流程图9第 3 章 系统实现3.1 用多进程同步方法解决生产者- 消费者问题。3.1.1 源代码#include #include#include #include #define NUM 20int queueNUM;/设置缓冲区int p = 0; int c = 0;pthread_mutex_t mutex= PTHREAD_MUTEX_INITIALIZER;/定义互斥访问量sem_t empty, full;/定义 Semaphore 变量void *producer(void *a

11、rg) /定义生产者函数 while(1) sem_wait(/ 对缓冲区互斥访问pthread_mutex_trylock(/空缓冲区个数queuep = rand()%20+1;/随机产生生产数printid1(arg);printf(“当前指针位于缓冲区的第%d 个单元n“,p+1);int i;for(i=0;i max)max = ai;r = i;static void Main(string args)Console.Write(“请输入页面个数(内存分配的物理块为 3):“); int pageNum = int.Parse(Console.ReadLine(); int a

12、= new intpageNum;/保存输入的进程调度页面的顺序int opt = new intpageNum;/最佳置换算法int fifo= new intpageNum;/先进先出int lru = new intpageNum;/最近最久未使用int ,show=new int 3,pageNum;/内存物理块的置换情况int count = 0,num;Console.WriteLine(“请输入页面号引用串:“);for (int i = 0; i 最佳置换算法(OPT) |“);Console.WriteLine(“| |“); Console.WriteLine(“ | 2

13、= 先进先出页面置换算法(FIFO ) |“);Console.WriteLine(“| |“); Console.WriteLine(“|3 = 最近最久未使用置换算法(LRU) |“);Console.WriteLine(“| |“); Console.WriteLine(“| 4 = 退出 |“);Console.WriteLine(“| |“); Console.WriteLine(“ nn“);Console.Write(“选择页面置换算法(请输入 1-4):“);while (true)trynum = int.Parse(Console.ReadLine();/num 用来接收用

14、户选择的置换算while (num = 4 | num = 1 | num = 2 | num = 3)if (num = 1)13int i = 1; int j = 0; int k = 1; count = 0;for (int aa = 0; aa = 3)14int m = 333, n = 222, t = 111;for (int q = k; q 最佳置换算法(OPT) |“);Console.WriteLine(“| |“); Console.WriteLine(“ | 2 = 先进先出页面置换算法(FIFO ) |“);Console.WriteLine(“| |“); C

15、onsole.WriteLine(“|3 = 最近最久未使用置换算法(LRU) |“);Console.WriteLine(“| |“); Console.WriteLine(“| 4 = 退出 |“);Console.WriteLine(“| |“); Console.WriteLine(“ nn“);Console.Write(“选择页面置换算法(请输入 1-4):“);num = int.Parse(Console.ReadLine();/num 用来接收用户选择的置换算法的序号catch (FormatException er) Console.WriteLine(er.Message

16、);/“输入错误!“finallyConsole.WriteLine(“n *欢迎进入地址换算算法演示*nn“);Console.WriteLine(“ 最佳置换算法(OPT) |“);Console.WriteLine(“| |“); Console.WriteLine(“ | 2 = 先进先出页面置换算法(FIFO ) |“);Console.WriteLine(“| |“); Console.WriteLine(“|3 = 最近最久未使用置换算法(LRU) |“);Console.WriteLine(“| |“); Console.WriteLine(“| 4 = 退出 |“);Cons

17、ole.WriteLine(“| |“); Console.WriteLine(“ nn“);Console.Write(“选择页面置换算法(请输入 1-4):“); Console.ReadLine();213.2.2 调试与运行图 1 页面号输入图 2 最佳置换算法22图 3 先进先出置换算法图 4 最近最久为使用置换算法图 5 输入格式错误23第 4 章 系统使用说明书1、多进程同步为解决生产者/消费者问题,应该设置两个资源信号量,其中一个表示空缓冲区的数目,用Full 表示,其初始值为有界缓冲区的大小 BUFFER_NUM;另一个表示缓冲区中产品的数目,用Empty 表示,其初始值为

18、0。另外,由于有界缓冲区是一个临界资源,必须互斥使用,所以还需要再设置一个互斥信号量 Mutex,起初值为 1。在生产者/消费者问题中,信号量实现两种功能。首先,它是生产产品和消费产品的计数器,计数器的初始值是可利用的资源数目(有界缓冲区的长度)。其次,它是确保产品的生产者和消费者之间动作同步的同步器。生产者要生产一个产品时,首先对资源信号量 Full 和互斥信号量 Mutex 进行 P 操作,申请资源。如果可以通过的话,就生产一个产品,并把产品送入缓冲区。然后对互斥信号量 Mutex 和资源信号量 Empty 进行 V 操作,释放资源。消费者要消费一个产品时,首先对资源信号量 Empty 和

19、互斥信号量 Mutex 进行 P 操作,申请资源。如果可以通过的话,就从缓冲区取出一个产品并消费掉。然后对互斥信号量 Mutex 和资源信号量 Full 进行 V 操作,释放资源。如果缓冲区中已经没有可用资源,就把申请资源的进程添加到等待队列的队尾。如果有一个资源被释放,在等待队列中的第一个进程被唤醒并取得这个资源的使用权。 2、页面置换系统运行该系统首先出现的是一个提示界面,该提示界面包含系统的名称以及系统的作者。按任意键则可进入输入界面。系统提示输入内存中物理块的个数,在此处只能输入系统规定范围内的数字,输入字母、特殊符号及任何不符合条件的字符都会提示错误,之后重新输入。输入正确的内存中物

20、理块的个数后,系统将提示输入页面数,在此也只能输入规定范围内的页面数,否则提示出错。输入正确的页面后系统将随机生成页号。系统跳转到算法选择主界面,在此界面用户可根据需要选择置换算法,选择错误时会有提示信息,如果选择正确将进入该算法的界面。在该算法界面,将在最上边一行显示随机生成的页号,并在对应页号下以列的方式显示该算法的置换过程。最后界面的最后三行将显示“缺页次数X”、 “置换次数 Y”、 “访问命中率 Z”字段。当然用户也可以选择“退出”选项退出系统。2425第 5 章 课程设计总结本次课程设计通过模拟计算机操作系统中经典的“生产者消费者问题” ,巩固了我在操作系统原理课上所学的知识,加深了

21、对操作系统中进程同步和互斥等问题,完成了多进程同步方法解决生产者消费者问题全部过程,结果满足设计要求。设计过程中遇到不少困难,在反复研究老师的 PPT 及一站式学习后才逐渐明晰怎样将代码实现,在页面调度系统中,算法经过我仔细的阅读教材充分理解了。但是输出页面置换过程时不能像书上那样在各页面下显示对应物理块信息,导致我的输出结果整体有正确性但看起来不明了。于是我就把原来的只要内存物理块中页号有变化就输出改为把变化的内存信息暂时存放在一个二维数组中,在页面置换完后再输出二维数组中的信息。至此解决了输出结果看起来不清楚明白的问题。为期两周的课程设计结束了,在老师和同学的帮助下,我完成了本次系统的课程

22、设计。虽然在本次课程设计过程中遇到了一系列的问题,但也正是这些问题使我对多进程同步和页面置换中各种算法有了进一步的理解。这些算法在做课程设计之前会运算,但是具体的使用语言编程写出,其实我不太清楚该算法的详细思路,也不清楚它具体的执行情况。在不太懂到懂的过程中,收获的不仅仅是知识,更是那种遇到问题解决问题的能力。从这次课程设计中我学习到,遇到问题不能总是想寻求帮助。要锻炼自己独立解决问题的能力,只有自己思考过的东西才能深刻的记住。不怕错误,怕逃避错误。26参考文献1. 谭浩强. C 语言程序设计. 清华大学出版社, 2005.112. 于帆, 赵妮. 程序设计基础(C 语言版). 清华大学出版社, 2006.113. 汤小丹, 梁红兵, 哲凤屏, 汤子瀛. 计算机操作系统. 西安电子科技大学出版社, 2007.5 4 段清玲,陈雷编著。C/C+程序设计教程。清华大学出版社,2004 年 2 月第一版27评 语 课程设计成绩: 指导教师: 日期: 年 月 日

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报