操作系统课程设计报告书-设计一个虚拟存储区和内存工作区

合集下载

操作系统课程设计任务书

操作系统课程设计任务书

操作系统课程设计任务书操作系统课程设计任务书一、设计目的:本课程设计是学生学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。

二、设计要求:从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:1、鼓励并优先个人独立选题设计,可从下面设计题目中选择,也可以自拟相关题目;如要合作,每组最多两名同学,且设计文档不能相同;2、题目选定后报给班长,班长要注意班级内题目的平衡,根据所选题目进行协调,不要都选一样的题。

3、设计完成后由老师进行统一答辩,答辩时不能对自己提供的设计进行讲解的同学,视为抄袭;4、要求每位同学写出一份详细的课程设计报告(A4纸),同组者程序相同,但报告要自己独立完成。

5、最后每位同学要将自己的设计报告和电子文档(包括报告和源程序)交给学习委员,并由学习委员统一刻盘后上交。

三、设计内容:课题一、编制银行家算法通用程序,在实现资源分配时,能够有效地避免死锁的产生。

课题二、处理机调度算法设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。

也就是说能运行的进程数大于处理机个数。

为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。

要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。

设计要求:1.进程调度算法包括:先来先服务算法、时间片轮转法,短作业优先算法,动态优先级算法2.可选择进程数量,每个进程由一个进程控制块PCB来标识。

3.根据个人能力可实现其中的两种以上调度算法。

课题三、用多进程同步方法解决生产者-消费者问题设计要求:(1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者线程的标识符.(2)生产者和消费者各有两个以上.(3)多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码.提示:(1) 有界缓冲区可用数组实现.课题四、设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问命中率:要求设计主界面以灵活选择某算法,且以下算法都要实现1、先进先出算法(FIFO)2、最近最久未使用算法(LRU)3、最佳置换算法(OPT)课题五、编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度:要求设计主界面以灵活选择某算法,且以下算法都要实现1、先来先服务算法(FCFS)2、最短寻道时间优先算法(SSTF)3、扫描算法(SCAN)4、循环扫描算法(CSCAN)课题六、编程模拟多进程共享临界资源:要求产生3个进程:1、两个进程模拟需要进入临界区的用户进程,当需要进入临界区时,显示:“进程x请求进入临界区…”,同时向管理进程提出申请;申请返回,表示进入了临界区。

操作系统实验实验报告 虚拟内存

操作系统实验实验报告  虚拟内存

操作系统实验实验报告虚拟内存一、实验目的本次操作系统实验的目的是深入理解虚拟内存的概念、原理和实现机制,通过实际操作和观察,掌握虚拟内存的相关技术,包括页面置换算法、内存分配策略等,并分析其对系统性能的影响。

二、实验环境操作系统:Windows 10 专业版开发工具:Visual Studio 2019编程语言:C++三、实验原理1、虚拟内存的概念虚拟内存是一种计算机系统内存管理技术,它使得应用程序认为自己拥有连续的可用内存(一个连续完整的地址空间),而实际上,这些内存可能是被分散存储在物理内存和外部存储设备(如硬盘)中的。

虚拟内存通过将程序使用的内存地址映射到物理内存地址,实现了内存的按需分配和管理。

2、页面置换算法当物理内存不足时,操作系统需要选择一些页面(内存中的固定大小的块)换出到外部存储设备,以腾出空间给新的页面。

常见的页面置换算法有先进先出(FIFO)算法、最近最少使用(LRU)算法、时钟(Clock)算法等。

3、内存分配策略操作系统在分配内存时,需要考虑如何有效地利用有限的物理内存资源。

常见的内存分配策略有连续分配、分页分配和分段分配等。

四、实验内容与步骤1、实现简单的虚拟内存系统使用 C++编写一个简单的虚拟内存模拟程序,包括内存页面的管理、地址映射、页面置换等功能。

2、测试不同的页面置换算法在虚拟内存系统中,分别实现 FIFO、LRU 和 Clock 算法,并对相同的访问序列进行测试,比较它们的页面置换次数和缺页率。

3、分析内存分配策略的影响分别采用连续分配、分页分配和分段分配策略,对不同大小和类型的程序进行内存分配,观察系统的性能(如内存利用率、执行时间等)。

具体步骤如下:(1)定义内存页面的结构,包括页面号、标志位(是否在内存中、是否被修改等)等。

(2)实现地址映射函数,将虚拟地址转换为物理地址。

(3)编写页面置换算法的函数,根据不同的算法选择要置换的页面。

(4)创建测试用例,生成随机的访问序列,对不同的算法和分配策略进行测试。

操作系统实验报告存储管理

操作系统实验报告存储管理

操作系统上机实验报告实验名称:存储管理实验目的:通过请求页式存储管理页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理页面置换算法。

实验内容:1.设计一个虚拟存储区和内存工作区;例如内存工作区大小为9个内存块,假设系统中最多可运行3个进程,每个进程分配3个内存块;2.模拟实现FIFO、LRU、OPT算法,给出页面走向,可计算缺页率;3.根据实验结果比较几种算法的差别。

实验步骤及分析:(一)FIFO算法实现提示定义一个常量total_instruction来记录页面总共使用的次数;定义一个变量diseffect记录总共换入页面的次数。

利用公式diseffect/total_instruction*100%可以得到缺页率。

(1)初始化。

设置两个数组page[ap]和pagecontrol[pp]分别表示进程页面数和内存分配的页面数,并产生一个随机数序列pageorder[total_instruction ](这个序列由page[]的下标随机构成)表示待处理的进程页面顺序,diseffect置0。

(2)看pageorder[]中是否有下一个元素,若有,就由pageorder[]中获取该页面的下标,并转到(3);如果没有就转到(7)。

(3)如果该page已在内存中,就转到(2);否则就到(4),同时未命中的diseffect加1。

(4)观察pagecontrol是否占满,如果占满须将使用队列中最先进入的pagecontrol单元“清干净”,同时将对应的page[]单元置为“不在内存中”。

(5)将该page[]与pagecontrol[]建立关系。

可以改变pagecontrol[]的标志位,也可以采用指针链接,总之至少要使对应的pagecontrol单元包含两个信息:一是它被使用了,二是哪个page[]单元使用的。

Page[]单元也包含两个信息:对应的pagecontrol 单元号和本 page[]单元已在内存中。

虚拟内存管理——操作系统课程大作业虚拟内存管理报告

虚拟内存管理——操作系统课程大作业虚拟内存管理报告

2011年操作系统大作业1.虚拟内存管理实验。

在Linux环境下编写一个内核模块,分别实现如下几个函数:●static void mtest_dump_vma_list(void):依次列出当前进程所占用的虚拟内存空间各段的读、写或执行权限。

●static void mtest_find_vma(unsigned long addr):查找出虚拟地址addr所在的vma,并通过printk打印该段的起始地址、终止地址和段标志等信息。

●static void mtest_find_page(unsigned long addr):找到虚拟地址addr对应的物理地址并打印。

为了测试和使用以上函数,需要在内核模块的初始化函数中创建一个名为mtest的/proc 文件。

mtest文件绑定的写函数mtest_write允许用户程序写入一串字符串:●如果写入的字符串是listvma则调用函数mtest_dump_vma_list(void);●如果写入的字符串是findvma0xffffffff则调用函数mtest_find_vma(0xffffffff),字符串的后几个字符是传递给函数的参数;●如果写入的字符串是findpage0xffffffff则调用函数mtest_find_page(0xffffffff),同样字符串的后几个字符是参数。

实验要求:为了测试以上模块的正确性,需要编写一个小型的test应用程序,它打开/proc/mtest文件,并向其中写入字符串调用模块中的相关函数并给出相应的反馈信息。

知识储备:●虚拟存储空间管理的相关数据结构vm_area_struct和mm_struct●/proc文件系统的相关知识●内核模块的相关知识实验思路及过程:相关知识储备:1.可以使用/proc文件系统和pmap工具查看给定进程的内存空间和其中所包含的内存区域mmap描述的该地址空间中的全部内存区域。

内核使用内存描述符结构表示进程的地址空间,由结构体mm_struct结构体表示,定义在linux/sched.h中,同时linux操作系统采用虚拟内存技术,所有进程之间以虚拟方式共享内存。

设计一个虚拟存储区和内存工作区-编程序演示下述算法的具体实现过程-并计算访问命中率:

设计一个虚拟存储区和内存工作区-编程序演示下述算法的具体实现过程-并计算访问命中率:

齐齐哈尔大学操作系统课程综合实践题目:主界面以灵活选择某算法班级:计本093姓名:***学号: **********指导教师:***2008年 12 月主界面以灵活选择某算法实验摘要:计算机应用专业的学生全面了解和掌握系统软件,一般软件设计方法和技术的必不可少的综合课程,也是了解计算机硬件和软件如何衔接的必经之路。

我觉得此次实验最大的亮点以及不同于别人的地方就是将三种页面置换算法按照课本上老师讲的方式直观简便的输出,在采用输出算法时,我摒弃了常人所用的一维数组输出法,而别出心裁的采用了二维数组的输出算法,模拟了内存的物理块,清晰直观的表达了页面是如何在外存中被调入内存中的,以及各页面在调入过程中是否命中或在置换时又置换了内存中哪个页面。

在软件工程的角度来看,我的系统具有高内聚低耦合的优点,即各种算法之间,并不影响彼此的函数调用,而在各算法的内部,内聚度很高。

关键词:设计原理, 设计方案, 流程图,源代码,测试结果,结束语,参考文献课题运行环境操作系统:Windows XP编程环境:Microsoft Visual C++6.01.1实验内容:通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。

熟悉虚拟存储管理的各种液面置换算法,并辨析恶魔你程序实现请求页式存储管理的页面置换算法。

设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问命中率。

设计要求:主界面以灵活选择某算法,且以下算法都要实现1、先进先出算法(FIFO)2、最近最久未使用算法(LRU)3、最佳置换算法(OPT)2.1运行环境1)操作系统:Windows XP2)编程环境:Microsoft Visual C++6.03.1设计原理:3.1.1 先进先出算法(FIFO)最简单的页面置换算法是先入先出(FIFO)法。

操作系统课程设计报告-内存管理

操作系统课程设计报告-内存管理

设计1 题目内存管理一、问题描述与分析1、虚拟存储技术为了扩充内存容量,同时避免增加系统成本以及机器自身的限制,因此采取从逻辑上扩充内存容量的方法,即虚拟存储技术。

2、解决方法程序运行之前,仅将当前需要运行的少数页面先装入内存便可继续运行,其余部分暂存在盘上。

程序运行时,如果他所要访问的页面已调入内存,便可继续执行下去;但如果程序所要访问的页面尚未调入内存,此时程序应利用OS提供的请求调页功能,将他们调入内存,以是进程能继续执行下去。

如果此时内存已满,无法再装入新的页面,则还需在利用页面的置换功能,将内存中暂时不用的页面调至盘上,腾出足够的内存空间,再将要访问的页面调入内存,使程序继续执行下去。

二、设计要求和目的1、设计目的在本课程设计中,通过对“请求分页存储管理方式”中“页面置换算法”的模拟实现,进一步了解虚拟存储的特点,掌握请求分页存储管理的页面置换算法、2、设计要求模拟页面置换设计中,分别利用最佳置换算法(OPT)、最近最久未使用置换算法(LUR)、先进先出置换算法(FIFO)。

需要提供一定数量的页面序列,这些页面序列为了减少人工输入的麻烦,而采用随机产生。

在执行程序时,只要改变页面的大小,就可以达到不用的页面序列。

同时,记录页面置换次数,最后计算并输出OPT、LUR、FIFO 算法在不用页面数量下的缺页率。

三、背景知识在学习了操作系统这本书之后,了解到:为了扩充内存容量,采取虚拟存储技术,其中的核心思想就是从逻辑上扩充内存容量。

所谓虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。

在虚拟存储器中,允许讲一个作业分多次调入内存,因此虚拟内存气的实现都毫无例外的建立在离散分配的存储器方式的基础上。

于是采用了分页请求系统来实现。

即,增加了请求调页和页面置换功能的所形成的页面虚拟存储系统。

分页请求系统,它允许只装入少数页面的程序及数据,先启动运行。

以后再通过调页功能及页面置换功能,陆续的把即将要运行的页面调入内存,同时把暂不运行的页面换出到外存上。

操作系统课程设计报告书-设计一个虚拟存储区和内存工作区

课程设计任务书学生姓名:专业班级:计网2093班指导教师:工作单位:信息工程系设计题目:设计一个虚拟存储区和内存工作区初始条件:Linux操作系统,GCC编译环境要求完成的主要任务主要任务:通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。

设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。

1、最佳淘汰算法(OPT)2、先进先出的算法(FIFO)3、最近最久未使用算法(LRU)设计程序时先用srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。

设计报告撰写格式要求:1设计题目与要求 2 设计思想3系统结构 4 数据结构的说明和模块的算法流程图5 使用说明书(即用户手册):内容包含如何登录、退出、读、写等操作说明6 运行结果和结果分析(其中包括实验的检查结果、程序的运行情况)7 自我评价与总结8 附录:程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加注释;时间安排6月 20日布置课程设计任务;分配题目后,查阅资料、准备程序;6月 21 ~6月23 日上机调试程序、书写课程设计报告;6月24 日提交课程设计报告及相关文档。

指导教师签名:2011年6月18日系主任签名:2011年6月19日课程设计报告书一.设计题目:设计一个虚拟存储区和内存工作区二.设计要求:1、设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。

①最佳淘汰算法(OPT)②先进先出的算法(FIFO)③最近最久未使用算法(LRU)设计程序时先用srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。

2、所编辑的程序能够在Linux系统中GCC环境下正常运行。

操作系统课程设计-虚拟页式存储管理系统的实现

课程设计课程设计名称:计算机操作系统专业班级:计算机科学与技术学生姓名:学号:指导教师:课程设计时间:操作系统专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页目录一、设计目的为了掌握Linux环境下常用编译工具如gcc/g++/nasm及开源虚拟机bochs 的下载、安装、使用,掌握x86架构下分页式存储管理系统的基本原理,设计一个请求分页式虚拟存储系统。

掌握Linux系统下程序的编写及运行等方面展开实验。

二、设计要求2.1要求熟练掌握sudo apt-get install的用法。

2.2要求能够掌握分页存储管理系统的基本原理。

2.3要求学会在Linux系统下编写程序、执行程序。

三、设计内容3.1运行环境3.1.1虚拟机系统下3.1.2使用Ubuntu下提供的apt-get软件包安装工具安装vim、 g++ 、nasm 、bochs等3.2 2.详细设计1)回顾虚拟页式存储系统:作业分页,内存分块,只有当进程要使请认真阅读readme.txt文件,弄清楚各个文件的作用2)用其虚拟内存时,其对应的数据才装入物理内存。

3)完成frame_pool.H 、frame_pool.C 、page_table.C三个文件,其中page_table.H已经提供,我们需要添加page_table.C,自己设计并实现这些函数。

4)在frame_pool.H定义所需要的数据结构,在frame_pool.C完成这些函数。

添加代码如下所示:class FramePool {private: unsigned long base_frame_no; unsigned long nframes;unsigned long info_frame_no; unsigned char* free_frames;public:static const unsigned char USED -1;static const unsigned char UNUSED -0;static const unsigned int FRAME_SIZE -4096;public:FramePool(unsigned long _base_frame_no,unsigned long_nframes,unsigned long _info_frame_no);5)建立Frame_pool.C文件系统中使用位示图bitmap标识页面是否使用,start_frame表示第一个页面的起始地址(如系统内存池从2M开始),pool_size表示在用户池中页框的总数(如系统内存池的页框从2M~4M,因此共有(4M-2M)/4KB=512个页框)。

操作系统管理_-_虚拟存储器_实验报告_代码

淮海工学院计算机工程学院实验报告书课程名:《操作系统原理》题目:虚拟存储器班级:学号:姓名:评语:成绩:指导教师:批阅时间:年月日一、目的与要求(一)目的由于超大规模集成电器电路(VLSI)技术的发展,使存贮器的容量不断扩大,价格大幅度下降。

但从应用角度看,存贮器的容量和成本总会受到一定的限制。

所以,提高存贮器的使用效率始终是操作系统研究的重要课题之一,虚拟存贮器技术是用来扩大主存容量的一种重要的方法。

本实习要求学生独立地用高级语言编写几个常用的存贮器分配算法,并能设计一个存贮管理的模拟程序,能对各种算法进行分析比较,评测其性能优劣,从而加深对这些算法的了解。

(二)要求为了比较真实地模拟存贮器管理,可预先生成一个大致符合实际情况的指令地址流。

然后,通过模拟这样一种指令序列的执行来计算和分析比较各种算法的访问命中率。

二、示例1.题目本示例给出采用页式分配存贮器管理方案,并通过分析、计算不同页面淘汰算法情况下的访问命中率来比较各种算法的优劣,另外也考虑改变页面尺寸大小和实际存贮器容量对计算结果的影响,从而可为选择好的算法、合适的页面尺寸和存贮器实际容量提供依据。

本程序是按下述原则生成指令序列的:(1)50%的指令是顺序执行的。

(2)25%的指令是均匀分布在前地址部分。

(3)25%的指令是均匀分布在后地址部分。

示例中选用最佳淘汰算法(OPT)和最近最少使用页面淘汰算法(LRU)计算页面命中率。

公式为:页面失败次数命中率=1-───────页地址流长度假定虚拟存贮容量为32K,页面尺寸从1K到8K,实存容量从4页到32页。

2.算法与框图(1)最佳淘汰算法(OPT)。

这是一种理想的算法,可用来作为衡量其他算法优劣的依据,在实际系统中是难以实现的,因为它必须先知道指令的全部地址流。

由于本示例中已生成了全部地址流,故可计算最佳命中率。

该算法的准则是淘汰已满页表中以后不再访问或是最迟访问的页。

这就要求将页表中的页逐个与后继指令访问的所有页比较,如后继指令不再访问此页,则把此页淘汰,不然得找出后继指令中最迟访问的页面予以淘汰。

操作系统实验报告——虚拟内存

北京邮电大学软件学院2019-2020学年第1学期实验报告课程名称:操作系统实验名称:虚拟存储器管理实验完成人:日期:2019 年12 月21 日一、实验目的(说明通过本实验希望达到的目的)1. 了解虚拟存储技术的特点;2. 掌握请求页式管理的页面置换算法。

二、实验内容(说明本实验的内容)1. 通过随机数产生一个指令序列,共320 条指令。

其地址按下述原则生成:(1)50%的指令是顺序执行的;(2)50%的指令是均匀分布在前地址部分;(3)50%的指令是均匀分布在后地址部分;具体的实施方法是:A. 在[0,319]的指令地址之间随机选取一起点M;B. 顺序执行一条指令,即执行地址为M+1 的指令;C. 在前地址[0,M+1]中随机选取一条指令并执行,该指令的地址为M’;D. 顺序执行一条指令,其地址为M’+1;E. 在后地址[M’+2,319]中随机选取一条指令并执行;F. 重复A—E,直到执行320 次指令。

2. 指令序列变换成页地址流设:(1)页面大小为1K;(2)用户内存容量为4 页到32 页;(3)用户虚存容量为32K。

在用户虚存中,按每K 存放10 条指令排列虚存地址,即320 条指令在虚存中的存放方式为:第0 条—第9 条指令为第0 页(对应虚存地址为[0,9]);第10 条—第19 条指令为第1 页(对应虚存地址为[10,19]);……………………第310 条—第319 条指令为第31 页(对应虚存地址为[310,319]);按以上方式,用户指令可组成32 页。

3. 计算并输出下述各种算法在不同内存容量下的命中率。

A. 先进先出(FIFO)页面置换算法B. 最近最久未使用(LRU)页面置换算法--最近最少使用算法C. 最少使用(LFR)页面置换算法D. 最佳(Optimal)页面置换算法三、实验环境(说明本实验需要的环境)Vscode+ubuntun四、实验过程描述本实验需要分几个步骤完成。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计任务书学生姓名:专业班级:计网2093班指导教师:工作单位:信息工程系设计题目:设计一个虚拟存储区和内存工作区初始条件:Linux操作系统,GCC编译环境要求完成的主要任务主要任务:通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。

设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。

1、最佳淘汰算法(OPT)2、先进先出的算法(FIFO)3、最近最久未使用算法(LRU)设计程序时先用srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。

设计报告撰写格式要求:1设计题目与要求 2 设计思想3系统结构 4 数据结构的说明和模块的算法流程图5 使用说明书(即用户手册):内容包含如何登录、退出、读、写等操作说明6 运行结果和结果分析(其中包括实验的检查结果、程序的运行情况)7 自我评价与总结8 附录:程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加注释;时间安排6月 20日布置课程设计任务;分配题目后,查阅资料、准备程序;6月 21 ~6月23 日上机调试程序、书写课程设计报告;6月24 日提交课程设计报告及相关文档。

指导教师签名:2011年6月18日系主任签名:2011年6月19日课程设计报告书一.设计题目:设计一个虚拟存储区和内存工作区二.设计要求:1、设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。

①最佳淘汰算法(OPT)②先进先出的算法(FIFO)③最近最久未使用算法(LRU)设计程序时先用srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。

2、所编辑的程序能够在Linux系统中GCC环境下正常运行。

三.设计思想:先建立三种算法的基本结构,再在主程序中调用,并实现其功能。

1、最近最久未使用(LRU)置换算法的思路最近最久未使用置换算法的实质是当需要置换一页时,选择最长时间未被使用的那一页淘汰。

为了能检测出那一页长时间未被使用我们可以设置一个计数器oldest2(),把每一次放入固定内存内的序列数做一个统计,通过选择将计数最少的数淘汰出去。

2、最佳淘汰(OPT)置换算法的思路最佳算法是当调入一新页而必须先淘汰一旧页,所淘汰的那一页应是以后不再使用的,或者是在最长时间段之后才会用到的页。

这就需要我们先要知道所要放入页的内容,然后逐一判断那些页应该在放入内存后可以被淘汰。

这个我用oldest()这个函数实现这一筛选功能,先用两个循环对内存中的数与随机序列对比,看有没有相等的数,然后利用计数器oldest2()返回未来最长时间不使用的页面位置。

3、先进先出(FIFO)置换算法的思路先进先出算法实际上是选择在主存中居留最久的一页淘汰,即先进入主存的页。

可以利用一个查询函数IsInBuf()来判断所要置换的页面与内存中的页面是否有重复,重复不置换,不重复就利用一个赋值语句将旧页置换出来,这里最重要的是页号的操作,可以利用一个控制语句old=(old+1)%(int)B来进行页面的转换。

四.系统结构:最佳淘汰算法(OPT)模块先进先出的算法(FIFO)模块最近最久未使用算法(LRU)模块主程序模块使用最佳淘汰算法(OPT)的命中率使用先进先出的算法(FIFO)的命中率使用最近最久未使用算法(LRU)的命中率程序系统结构图五.数据结构的说明和模块的算法流程图1.数据结构的说明作业的页面走向(执行过程中对页面的访问顺序)用数组,页面走向的长度控制以-1为终结符。

页框(作业分得的物理块)在不同置换算法执行之前长度由不同的置换算法其数据结构不同但原则式尽可能使程序的时间复杂度最低。

FIFO ,采用队列,对于LRU 堆栈。

2.模块的算法流程图2.1 FIFO 算法的流程图开始中断页数change=0;循环控变量i=0;利用循环将buf[]中的值全置-1(过程略);真假判断buf[old]==-1 输出空字符 判断i<N输出置换页buf[old]判断是否置换标志: j==-1将新的序列装入内存中buf[old]=list[i] 重置置换标志:old=(old+1)%(int)B真假中断次数change++;i++;真输出空字符;i++;假j=IsInBuf(buf,list[i];结束输出算法命中率:1-(float)change/39;2.2 LRU 算法的流程图开始中断页数change=0;循环控变量i=0;利用循环将buf[]中的值全置-1(过程略);判断i<Nj=IsInBuf(buf,list[i]; 确定置换页:old=oldest2(f);判断是否置换标志: j==-1输出置换页buf[old]将新的序列装入内存中buf[old]=list[i] 将内存固定序列数计数数组清零:f[old]=0;中断次数change++;i++;将位置换内存技术数组清零:f[j]=0;输出空字符;i++;输出算法命中率:1-(float)change/39; 结束真真假假2.3 OPT 算法的流程图开始中断页数change=0;循环控变量i=0;利用循环将buf[]中的值全置-1(过程略);判断i<Nj=IsInBuf(buf,list[i];判断是否置换标志: j==-1求出要置换的位置:old=oldest(list,buf,f,i);输出置换页buf[old]将新的序列装入内存中buf[old]=list[i]将内存固定序列数计数数组清零:f[old]=0;中断次数change++;i++;输出空字符;i++;输出算法命中率:1-(float)change/39;结束真真假假六.使用说明:1.登录Linux系统的终端使用一下指令1.1 cd 目录名(进入你存程序的文件夹)1.2 gedit 文件名 &(打开Linux系统内置的编译器并把文件导入文本区)1.3回到终端输入gcc 文件名(编译源程序)1.4再次输入./a.out(运行源程序并得出结果)1.5得出结果键入exit(退出所有操作)2.使用Microsoft Visual C++ 6.0编译运行2.1直接将编好的文件导入到编译器中2.2 如图按钮执行编译运行操作2.3退出直接关闭编译器即可七.运行结果及分析1运行结果1.1 FIFO算法与LRU算法命中率一样的情况1.2 FIFO算法命中率最低的情况1.3 FIFO算法比LRU算法命中率高的情况2.运行结果分析三种结果告诉我们OPT算法的命中率最高,淘汰页面最少,而FIFO算法和LRU算法在不同的情况下略有不同,但是淘汰的页面却有很大不同。

在理论上来说,LRU算法优于FIFO 算法。

八.自我评价与总结通过这次课程设计,不仅让我了解了页面置换算法,而且使我对操作系统这门课程有了更进一步的认识和了解,要想学好它要重在实践。

在有充分的理论基础的情况下要通过不断的上级操作才能更好地学习它。

在编好程序后,我一开始就一味的进行调试,急切的想侥幸调试出来,但由于没有进行深入的考虑,我调试了很久都没有成功,我仔细的分析题目,分析材料,在原有基础上我进行了改正,经过了一番努力,最后还是调试成功了。

同时在编程阶段,我发现自己在逻辑思维的设计上还存在一定的缺陷,一些C语言的基础知识还未掌握到位,对于函数的形参与实参之间的转化还不是很清楚。

虽然在学习课本知识的时候感觉老师讲起来很好懂,但是一旦要运用到实际当中却不知道怎么转换,出现了对知识结构的空洞状态。

三种置换算法,特别是在FIFO算法与LRU算法的设计上出现了混乱状态,通过对运行结果的一次又一次的检查还有在老师的帮助下我才慢慢的洞察到自己到底哪里出现了问题,在设置置换标志与判断是否置换的条件设计上出现了考虑不周全的情况。

在找空闲物理块的时候,起初我比较物理块是否等于0,若为0,则直接把页面放入,后来发现不论什么时候都是把0替换出去,才恍然大悟,既然页面序列数有0就不能用0来表示空闲物理块,后来换成-1问题就解决了。

总而言之,虽然程序不是很完美,但是付出了汗水,也收获了结果,今后对于此类问题的设计可以有一个很好的借鉴意义。

希望能有下一次的实践机会,争取在程序设计的界面和逻辑上更加美观、自然。

附录:程序清单#include <stdio.h>#include<stdlib.h>#include<time.h>#define N 39 /*随即数列的长度*/#define B 4 /*内存的页面数*//*-----------------------------------------------------------------------------函数名:IsInBuf()功能:返回某个数X有没有在缓冲区Buf[]中,若在,返回其位置;若不在,则返回-1-------------------------------------------------------------------------------*/int IsInBuf(int buf[],int x){int i,j=-1;for(i=0;i<B;i++){if(buf[i]==x) {j=i;break;}else if(buf[i]==-1) {buf[i]=x;j=i;break;}}return j;}/*-----------------------------------------------------------------------------函数名:oldest()功能:返回最近最久未使用的页面的位置-----------------------------------------------------------------------------*/int oldest(int list[],int buf[],int f[],int start){int i,j;for(i=0;i<B;i++){for(j=start;j<N;j++){if(buf[i]==list[j]) break;}f[i]=j;}return oldest2(f);}/*-----------------------------------------------------------------------------函数名:oldest2()功能:返回未来最长时间不使用的页面的位置------------------------------------------------------------------------------*/int oldest2(int f[]){int i,j=0,max=-1;for(i=0;i<B;i++){if(f[i]>max) {max=f[i];j=i;}f[i]++;}return j;}/*---------------------------------------------------------------------------- 函数名:main()功能:-----------------------------------------------------------------------------*/ main(){int list[N];int buf[B],f[B],i,j,k,max,min;int old=0;int change=0;printf("本程序假设内存为程序分配的内存块数是4!\n");/*生成一系列随机数并初始化环境*/srand((int)time(NULL));for(i=0;i<B;i++) buf[i]=f[i]=-1;printf("\n产生的随机数列为:\n");for(i=0;i<N;i++){list[i]=(int) rand()%10; //产生随机数列printf("%2d",list[i]);}printf("\n");/*显示OPT淘汰页面的序列*/printf("\nOPT淘汰页面的序列为:\n");change=0;for(i=0;i<B;i++) buf[i]=f[i]=-1;for(i=0;i<N;i++){j=IsInBuf(buf,list[i]);if(j==-1){old=oldest(list,buf,f,i);printf("%2d",buf[old]);buf[old]=list[i];f[old]=0;change++;else{printf("");}}/*输出OPT算法的命中率*/printf("\nOPT算法的命中率为:%f\n",1-(float)change/39); /*显示FIFO淘汰页面的序列*/printf("\nFIFO淘汰页面的序列为:\n");change=0;for(i=0;i<B;i++) buf[i]=-1;for(i=0;i<N;i++){j=IsInBuf(buf,list[i]);if(j==-1){if(buf[old]==-1)printf("");else printf("%2d",buf[old]);buf[old]=list[i];old=(old+1)%(int)B;change++;}elseprintf("");}/*输出FIFO算法的命中率*/printf("\nFIFO算法的命中率为:%f\n",1-(float)change/39); /*显示LRU淘汰页面的序列*/printf("\nLRU淘汰页面的序列为:\n");change=0;for(i=0;i<B;i++) buf[i]=f[i]=-1;for(i=0;i<N;i++){j=IsInBuf(buf,list[i]);old=oldest2(f);if(j==-1){printf("%2d",buf[old]);buf[old]=list[i];f[old]=0;change++;}{f[j]=0;printf("");}}/*输出LRU算法的命中率*/printf("\nLRU算法的命中率为:%f\n",1-(float)change/39); }设计过程中质疑(或答辩)记载:1.页面置换算法最主要的有哪几种?答:主要有最佳算法(OPT算法)、先进先出算法(FIFO算法)、最久未使用算法(LRU算法)、最不经常使用算法(LFU算法)等等。

相关文档
最新文档