操作系统课程设计页式存储

合集下载

操作系统课程设计

操作系统课程设计

操作系统课程设计实验WRK内存管理试验姓名:王刚班级:030911学号:一.实验内容描述1.目的(1)了解Windows内存管理器(2)理解Windows的地址过程2.内容任意给出一个虚拟地址,通过WinDbg观察相关数据并找到其物理地址二.理论分析Windows采用页式虚拟存储管理技术管理内存,页面是硬件级别上的最小保护单位1.Windows内存管理器Windows的内存管理主要由Windows执行体中的虚存管理程序负责,并由环境子系统负责,并由环境子系统负责与具体API相关的一些用户态特性的实现。

虚存管理程序是Windows 中负责内存管理的那些子程序和数据结构的集合内存管理器的主要任务是:地址变换:将一个进程的虚拟地址空间转译为物理内存地址交换:当内存不足时,将内存中的有些内容转移到磁盘上,并且以后还要再次将这些内容读回2.Windows内存管理策略Windows采用页式虚拟存储管理技术管理内存,页面是硬件级别上最小的保护单位。

根据硬件的体系结构不同,页面尺寸被分为两种,大页面和小页面。

X86系统下小页面为4KB,大页面为4MB。

大页面的优点是:当引用同一页面内其他数据时,地址转移的速度会很快。

不过使用大页面通常要较大的内存空间,而且必须用一个单独的保护项来映射,因此可能会造成出现错误而不引发内存访问违例的情况。

通常PC机都为小页面3.Windows虚拟地址空间布局x86结构下的布局方式:默认情况下,32位Windows系统中每个用户进程可以占有2GB的私有地址空间。

操作系统占有另外的2GB2GB用户的进程地址空间布局如表:2GB的系统地址空间布局如同:3.虚拟地址转译地址转译是指将进程的虚拟地址空间映射到实际物理页面的过程。

x86系统中地址转译过程如图:关键数据结构如下:页目录:每个进程都有一个页目录,它是内存管理器为了映射进程中所有的页表位置而创建的一个页面。

进程也目录的地址被保存在内核进程快KPROCESS中,在x86系统上,它被映射到虚拟地址0xC0300000,当一个进程正在执行时,CPU 可以通过寄存器CR3知道该进程页目录的位置。

操作系统-课件页式存储管理

操作系统-课件页式存储管理
有一个分页式虚拟存储管理系统,每个进程在内存有3页 数据区、1页程序区,刚开始时数据区为空。现有一个进程有 以下访问序列:
1,5,4,1,2,3,2,1,5,4,2,4,3,5,1 若系统采用: (1)最近最少使用(LRU)淘汰算法 (2)先进先出(FIFO)淘汰算法 请计算缺页次数和发生缺页中断后的淘汰页号。
页号
物理块号
0
5
1
10
2
3
3
7
分析:(1)根据题意,页内地址为10位,页号为5位。
210=1024,25=32
(2)根据给定的逻辑地址得到页号和页内地址。
035E(H)=(0000001101011110)2 从左边 数10位为页内地址,剩余为页号。页号为0。
(3)根据页号查页表,得到块号为5。
(4)将块号与块内地址组合为物理地址:
在调入内存时,若内存已满
进行“页面替换”:从内存中选择一个页调 出内存,为新调入的页让出空间。
如果替换的不合适,则发生“抖动”或“颠 簸”现象:页在内外存之间频繁地调入调出, 系统开销很大。
页面替换算法:
先进先出法(FIFO):将最先调入内存的页调出 内存。
最近最少使用算法(LRU:least recently used)。 将最近一段时间内没有用过的页调出内存。
用户作业请求:块数B 空闲块数B N
无法分配
扫描位示图,查找为0的位 计算块号 建立页表
页式系统的内存保护和共享
保护:在页表上添加一个保护位。在做地址 变换时,检查对页面的访问是否合法。
共享:根据地址转换过程可知:如果在不同 用户的页表中填上相同的页表表项(块号), 就能够访问相同的内存空间。
例题:对于利用快表且页表存于内存的分页系统,

操作系统——页式存储管理

操作系统——页式存储管理

操作系统——页式存储管理分区式存储管理最⼤的缺点是碎⽚问题严重,内存利⽤率低。

究其原因,主要在于连续分配的限制,即它要求每个作⽤在内存中必须占⼀个连续的分区。

如果允许将⼀个进程分散地装⼊到许多不相邻的分区中,便可充分地利⽤内存,⽽⽆需再进⾏“紧凑”。

基于这⼀思想,产⽣了“⾮连续分配⽅式”,或者称为“离散分配⽅式”。

连续分配:为⽤户进程分配的必须是⼀个连续的内存空间。

⾮连续分配:为⽤户进程分配的可以是⼀些分散的内存空间。

分页存储管理的思想:把内存分为⼀个个相等的⼩分区,再按照分区⼤⼩把进程拆分成⼀个个⼩部分。

分页存储管理分为:实分页存储管理和虚分页存储管理⼀、实分页式存储管理实分页式存储最⼤的优点是内存利⽤率⾼,与⽬前流⾏的虚分页存储管理相⽐,具有实现简单,程序运⾏快的优点。

⽬前,飞速发展的硬件制造技术使得物理内存越来越⼤,因此我们认为,实分页式存储管理将是⼀种最有发展前途的存储管理⽅式。

1.1、基本原理假设⼀个⼤型饭店,所有的客房都是标准的双⼈间,部分客房已经住进客⼈,现在⼜有⼀个旅游团要求⼊住。

接待员统计了⼀下,对旅游团领队说:“贵团全体成员都能住下,两⼈⼀个房间,但是不能住在同⼀楼层了,因为每层空着的客房不够,更没有⼏个挨着的。

请原谅!”。

对于这样的安排,⼀般⼈不会感到奇怪。

因为旅游团本来就是由⼀位位个⼈或夫妻等组成的,⽽饭店的客房本来也是两⼈⼀间的,两⼈⼀组正好可住在⼀个客房⾥;另外,饭店⼏乎每天都有⼊住的和退房的客⼈,想在同⼀楼层找⼏间挨着的客房实在不容易。

①将整个系统的内存空间划分成⼀系列⼤⼩相等的块,每⼀块称为⼀个物理块、物理页或实页,页架或页帧(frame),可简称为块(block)。

所有的块按物理地址递增顺序连续编号为0、1、2、……。

这⾥的块相当于饭店的客房,系统对内存分块相当于饭店把⼤楼所有的客房都设计成标准的双⼈间。

②每个作业的地址空间也划分成⼀系列与内存块⼀样⼤⼩的块,每⼀块称为⼀个逻辑页或虚页,也有⼈叫页⾯,可简称为页(page)。

操作系统课程设计-模拟设计页式存储管理的分配与回收范文

操作系统课程设计-模拟设计页式存储管理的分配与回收范文

学号:28课程设计模拟设计页式存储管理的分题目配与回收学院计算机科学与技术专业计算机科学与技术班级XX姓名XX指导教师XXX2011年01月09日课程设计任务书学生姓名: XX 专业班级:计算机0902班指导教师: XXX 工作单位:计算机科学与技术学院题目: 模拟设计页式存储管理的分配与回收初始条件:1.预备内容:阅读操作系统的内存管理章节内容,了解有关虚拟存储器、页式存储管理等概念,并体会页式管理内存的分配和回收过程。

2.实践准备:掌握一种计算机高级语言的使用。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.采用页式管理方案实施内存分配和回收。

能够处理以下的情形⑴能够输入给定的内存页面数,页面大小,进程的个数及每个进程的页数。

⑵要求当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资源后内存空间的使用情况(被进程占用的页面,空闲的页面)。

2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他的其他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。

时间安排:设计安排一周:周1、周2:完成程序分析及设计。

周2、周3:完成程序调试及测试。

周4、周5:验收,撰写课程设计报告。

(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日武汉理工大学《操作系统》课程设计说明书模拟设计页式存储管理的分配与回收1需求分析页式管理是一种内存空间存储管理的技术,页式管理分为静态页式管理和动态页式管理。

作操系统课程设计模拟页式存储管理--大学毕设论文

作操系统课程设计模拟页式存储管理--大学毕设论文

操作系统课程设计报告模拟页式存储管理院系:计算机科学技术学院班级:**********班姓名:*******学号:******************指导教师:*********82016年12月9日操作系统原理课程设计任务书一、题目:磁盘调度二、设计要求(1)****(组长)、*****负责设计与实现。

(2)查阅相关资料,自学具体课题中涉及到的新知识。

(3)采用结构化、模块化程序设计方法,功能要完善,具有一定的创新。

(4)所设计的程序应有输入、输出。

(5)按要求写出课程设计报告,并于设计结束后1周内提交。

其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件总体设计、详细设计、软件的调试、总结、谢启、附录:带中文注释的程序清单、参考文献。

报告一律用A4纸打印,中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。

总体设计应配合软件总体模块结构图来说明软件应具有的功能。

详细设计应用传统或N-S流程图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。

三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。

四、课程设计工作计划2016年11月28日,指导教师讲课,学生根据题目准备资料;2016年11月29日~2016年12月1日,进行总体方案设计;2016年12月3日~2016年12月5日,完成程序模块并通过独立编译;2016年12月6日~2016年12月7日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;2016年12月8日~2016年12月9日,验收、撰写报告;指导教师签章:教研室主任签章操作系统原理课程设计指导教师评语与成绩目录第一章引言 (1)第二章设计目的及要求 (1)2.1 设计目的 (1)2.2 设计要求 (1)第三章概要设计 (2)3.1 系统功能结构 (2)3.2 程序文件详细说明 (3)3.3 整体流程图 (3)第四章详细设计 (4)4.1 数据定义 (4)4.2算法分析 (4)4.3核心代码与运行效果 (6)第五章软件调试 (18)5.1 系统测试 (18)5.2 算法效率分析和对比 (19)参考文献 ..................................................................... 错误!未定义书签。

操作系统课程设计(页式存储管理)任务书

操作系统课程设计(页式存储管理)任务书

一、课程设计的原始资料及依据查阅有关计算机操作系统的教材、实验指导书等资料,进一步熟悉操作系统的基本原理,算法的设计思想。

页式和段式存储管理是操作系统中存储管理中实现离散式存储管理的重要内容。

本设计要求用高级语言编写和调试一个简单的页式和段式存储管理程序。

通过本设计可以加深理解有关页表、段表、进程队列的概念,并体会和了解地址转换。

二、课程设计主要内容及要求1 •认真阅读资料,掌握离散式存储管理的原理和思想。

2 •要求在设计的过程中,建立清晰的层次结构。

3•画出主要的功能结构图和主要算法的流程图。

4. 设计页表和段表结构,实现离散式存储管理功能。

页表通常包括以下信息:页号,块号。

根据调度算法的不同,页表结构的内容可以作适当的增删。

5•实现逻辑地址到物理地址的转换。

6. 建立进程序列。

7. 实现进程的离散式分配。

&运行程序,检查结果是否和理论值一致。

9.环境可以使用Windows. Turbo C环境或Linux。

三、对课程设计说明书撰写内容、格式、字数的要求1. 课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。

一般不应少于3000字。

2. 在适当位置配合相应的实验原理图、功能模块图、算法流程图等图表进行说明。

应做到文理通顺,内容正确完整,书写工整,装订整齐。

3. 设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。

4. 课程设计说明书手写或打印均可。

手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距18 磅。

文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,表题与图题采用宋体五号字。

5. 课程设计说明书装订顺序为:封面、任务书、成绩评定表、目录、正文、参考文献。

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

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

课程设计课程设计名称:计算机操作系统专业班级:计算机科学与技术学生姓名:学号:指导教师:课程设计时间:操作系统专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页目录一、设计目的为了掌握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个页框)。

模拟页式存储管理 操作系统课程设计

模拟页式存储管理  操作系统课程设计

计算机科学与技术学院操作系统课程设计报告课题:模拟页式存储管理姓名:学号:同组姓名:专业班级:网工10101指导教师:刘国清设计时间: 2013-6-25 评阅意见:评定成绩:指导老师签名:年月日目录一、目的和要求 (2)1、设计目的 (2)2、设计要求 (2)二、设计思路及过程 (2)1、概要设计 (2)2、过程设计 (3)三、数据定义 (5)四、核心代码 (5)五、运行截图 (8)六、小结 (10)七、参考文献 (11)附录 (12)一、目的和要求1、设计目的通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。

2、设计要求根据模拟的页式管理设计,掌握在页式存储管理中最基本的三种页面调度算法FIFO、LRU以及OPT。

但在三种算法中均要求在调度程序中产生的页面序列是随机产生的,而不是人为的输入,在执行时只需改变页面的大小及内存容量就可以得到不同的页面序列,另外还需要说明随机的性能和其性能可能对算法的影响,并对随机性要有一定的参数控制能力。

此外,计算并输出FIFO、LRU以及OPT算法在不同内存容量下的命中率。

根据方法的执行过程,编写一个解决上述问题的程序,显示访问每个值页面中的值。

具体参数:访问串的长度,访问串,页面个数。

分别用3种不同的方法实现页面的置换,并输出相关信息。

二、设计思路及过程1、概要设计1.1 问题概述根据三种不同的置换算法,依据其不同的算法方式,分别计算该算法在不同情况下的命中率,并显示各页面的变化情况。

1.2 内容分析对于该课程设计中模拟的页式存储管理的页面置换过程,只要掌握其中最基本的三种算法,包括FIFO、LRU及OPT。

但最重要的一点就是要求产生随机序列,所以在编写程序时要采用控制产生随机值的种子数函数,如此能产生随机的访问序列。

另外,不能在执行完一次操作后就只能进行另外一种算法的操作,必须还要有更加详细的操作,比如:是否要重新得到新序列?还是要不改变访问序列而只改变访问串的内存容量?抑或是不操作就退出该算法以进行下一种调度算法?因此,在执行完每次操作后都必须要有提示语,看是否进入更细节的操作,还是退出本次算法的操作以进入下一种算法的调度。

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

操作系统课程设计报告——页式存储姓名:***班级:J计算机1302学号:**********指导老师:***日期:2016/1/12一、目的和要求1.理解页式存储的基本概念2.通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。

3. 3.根据模拟的页式管理设计,掌握在页式存储管理中最基本的两种种页面调度算法FIFO、LRU。

但在两种种算法中均要求在调度程序中产生的页面序列是随机产生的,而不是人为的输入,在执行时只需改变页面的大小及内存容量就可以得到不同的页面序列,另外还需要说明随机的性能和其性能可能对算法的影响,并对随机性要有一定的参数控制能力。

此外,计算并输出FIFO、LRU算法在不同内存容量下的命中率。

具体参数:访问串的长度,访问串,页面个数。

分别用2种不同的方法实现页面的置换,并输出相关信息。

二、基本原理1.页式存储基本原理将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者页面(page frame),然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。

页式管理采用请求调页或预调页技术实现了内外存储器的统一管理。

页的划分:2.静态/虚拟分页管理页式管理是一种内存空间存储管理的技术,页式管理分为静态分页管理和虚拟分页管理。

①静态页式存储管理:用户在作业开始执行之前,讲改作业的程序和数据全部装入到主存中,然后,操作系统统通过页表和硬件地址变换实现逻辑地址到屋里地址的转换,从而执行用户程序。

静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。

系统通过存储页面表、请求表以及页表来完成内存的分配工作。

页表:内存中的一块固定存储区。

页式管理时每个进程至少有一个页表。

请求表:用来确定作业或进程的虚拟空间的各页在内存中的实际对应位置;存储页面表:整个系统有一个存储页面表,其描述了物理存储空间的分配使用状况。

②虚拟页式存储管理当系统在运行时,经常会出现主存容量不能满足用户程序的要求,一种解决方法是:从逻辑上扩充主存的容量。

这便是虚拟存储技术。

分页式虚拟存储管理工作流程:页面置换:预调页策略请求调页策略分配策略:固定分配策略可变分配策略页面置换算法:1、优化算法OPT(理论化算法不是很实际的算法)*2、先进先出算法FIFO*3、最近最少用置换算法LRU4、最近未使用置换算法NRU5、最少使用置换算法LFU三、设计思路及过程1、概要设计1.1 问题概述根据三种不同的置换算法,依据其不同的算法方式,分别计算该算法在不同情况下的命中率,并显示各页面的变化情况。

1.2 内容分析对于该课程设计中模拟的页式存储管理的页面置换过程,只要掌握其中最基本的两种算法,包括FIFO、LRU。

但最重要的一点就是要求产生随机序列,所以在编写程序时要采用控制产生随机值的种子数函数,如此能产生随机的访问序列。

另外,不能在执行完一次操作后就只能进行另外一种算法的操作,必须还要有更加详细的操作,比如:是否要重新得到新序列?还是要不改变访问序列而只改变访问串的内存容量?抑或是不操作就退出该算法以进行下一种调度算法?因此,在执行完每次操作后都必须要有提示语,看是否进入更细节的操作,还是退出本次算法的操作以进入下一种算法的调度。

2、过程设计2.1 算法原理分析要学成功实现算法,首先要知道各个方法是怎么做的,即原理是怎样的,下面是两种算法的原理。

FIFO算法是先进先出,当当前内存中没有正要访问的页面时,置换出最先进来的页面。

LRU算法是最近最久未使用,当当前内存中没有正要访问的页面时,置换出在当前页面中最近最久没有使用的页面。

2.2程序流程图四、核心代码void fifo() //先进先出{int i,thisn=0;while(1){count=0;flag1=flag2=0;for(i=pos1;i<length;i++){if(!search(order[i])){count++;result1[i]='*';if(a[num_page-1]!=-1) //表示当前页面已满要淘汰一个{a[thisn]= order[i];thisn++;if(thisn>=num_page)thisn=0;}else{for(int j=0;j<num_page;j++){if(a[j]==-1){a[j]=order[i];break;}}}}else result1[i]=' ';for(int j=0;j<num_page;j++){result[j][i]=a[j];}}again(); //再操作if(flag1==0&&flag2==0)break;}}void lru() //最久最近没使用{int i,pos[10];while(1){count=0;flag1=flag2=0;memset(pos,-1,sizeof(pos));for(i=pos1;i<length;i++){if(!search(order[i])){count++;result1[i]='*';if(a[num_page-1]!=-1) //表示当前页面已满要淘汰一个{int j,k;for( j=0;j<i;j++) //查找当前页中的值对应的最近位置{for( k=0;k<num_page;k++){if(order[j]==a[k]){pos[k]=j;}}}int min=pos[0],min_pos=0;for( k=1;k<num_page;k++)//找出位置最远的那个{if(min>pos[k]){min=pos[k];min_pos=k;}}a[min_pos]=order[i];}else //还有空页{for(int j=0;j<num_page;j++){if(a[j]==-1){a[j]=order[i];break;}}}}else result1[i]=' ';for(int j=0;j<num_page;j++){result[j][i]=a[j];}}again(); //再操作if(flag1==0&&flag2==0)break;}}五、运行截图六、课设总结本次课程设计目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。

要求设计随机页面产生程序,并说明随机的性能和其性能可能对算法的影响,对随机性要有一定的参数控制能力;计算并输出FIFO及LRU算法在不同内存容量下的命中率。

相对来说,这次操作系统的课程设计容易许多,只是在之前实验基础上,要附加设计随机页面产生程序,对随机性要有一定的参数控制能力。

对于随机页面产生程序,我们之前没做过,在网上查阅资料,使用了库函数srand()和rand(),实现了简单的随机页面产生程序,功能基本完成。

我们知识所限,没有使用漂亮可视化界面编程实现功能,用简单的C语言编程实现的做了这么多次课程设计了,大致的过程都熟悉了,每次的动手实践,调动了我们主动学习的积极性, 并引导我们根据实际编程要求, 训练自己实际分析问题的能力及编程能力, 并养成良好的编程习惯。

通过详细的实例, 循序渐进地启发我们完成设计课程设计将要求。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

知识的获得是无止境的,只要你想学,只要你行动,就一定会有所收获的。

回首这两个星期的课程设计,尽管很是头痛,很多都不会,但经过努力,我们还是学了不少知识的。

这期间,老师给了我们许多帮助,非常感谢!七、参考文献谭浩强, 张基温. 《C语言程序设计教程》. 高等教育出版社,1991 《操作系统原理》百度文库操作界面:八、附录源程序代码:#include<iostream>#include<stdlib.h>using namespace std;int length,num_page,count,seed;int result[20][30],order[30],a[10];int pos1,flag1,flag2,flag3;char result1[30];void init(){memset(a,-1,sizeof(a));int i;cout<<"输入访问串的长度:";cin>>length;cout<<"输入种子数控制产生的随机值:";cin>>seed;srand(seed);cout<<"产生的随机访问串:";for(i=0;i<length;i++){// cin>>order[i];order[i]=rand()%10;cout<<order[i]<<" ";}cout<<endl;cout<<"输入页面的个数:";cin>>num_page;}void print(){int i,j;cout<<"(*表示缺页)"<<endl;cout<<endl;for( j=0;j<length;j++)printf("%2d ",order[j]);cout<<endl;for( i=0;i<num_page;i++){for( j=0;j<length;j++){if(result[i][j]==-1){printf(" ");}elseprintf("%2d ",result[i][j]);}cout<<endl;}for( j=0;j<length;j++){printf("%2c ",result1[j]);}cout<<endl;cout<<"缺页率:"<<count<<"/"<<length;printf("=%.1lf",(count*1.0)/(length*1.0)*100);cout<<"%"<<endl;}bool search(int n) //查找当期内存是否已存在{int i;for(i=0;i<num_page;i++){if(a[i]==n)return true;}return false;}void again() //用于再输入{print();int numpage,m;printf("************************************** \n");printf(" 1.重新输入新序列.\n");printf(" 2.不改变访问序列只改变页面数.\n");printf(" 0.不操作退出.\n");printf("************************************** \n");printf(" 选择所要操作:");scanf("%d",&m);if(m==1){flag1=1; //重新输入init();}else if(m==2){flag2=1;cout<<"输入新页面数:";cin>>numpage;num_page=numpage;memset(a,-1,sizeof(a));}else return ;}void fifo() //先进先出{int i,thisn=0;while(1){count=0;flag1=flag2=0;for(i=pos1;i<length;i++){if(!search(order[i])){count++;result1[i]='*';if(a[num_page-1]!=-1) //表示当前页面已满要淘汰一个{a[thisn]= order[i];thisn++;if(thisn>=num_page)thisn=0;}else{for(int j=0;j<num_page;j++){if(a[j]==-1){a[j]=order[i];break;}}}}else result1[i]=' ';for(int j=0;j<num_page;j++){result[j][i]=a[j];}}again(); //再操作if(flag1==0&&flag2==0)break;}}void lru() //最久最近没使用{int i,pos[10];while(1){count=0;flag1=flag2=0;memset(pos,-1,sizeof(pos));for(i=pos1;i<length;i++){if(!search(order[i])){count++;result1[i]='*';if(a[num_page-1]!=-1) //表示当前页面已满要淘汰一个{int j,k;for( j=0;j<i;j++) //查找当前页中的值对应的最近位置{for( k=0;k<num_page;k++){if(order[j]==a[k]){pos[k]=j;}}}int min=pos[0],min_pos=0;for( k=1;k<num_page;k++)//找出位置最远的那个{if(min>pos[k]){min=pos[k];min_pos=k;}}a[min_pos]=order[i];}else //还有空页{for(int j=0;j<num_page;j++){if(a[j]==-1){a[j]=order[i];break;}}}}else result1[i]=' ';for(int j=0;j<num_page;j++){result[j][i]=a[j];}}again(); //再操作if(flag1==0&&flag2==0)break;}}void mune(){int m;printf("略去优化算法,最近未用置换算法,最少使用置换算法 \n");printf("\n**************************************\n\n");printf(" 动态分配分区方法演示\n");printf("\n************************************** \n\n");printf(" 1.先进先出算法.\n\n");printf(" 2.最久最近未使用页面置换算法.\n\n");printf(" 0.退出程序.\n");printf("\n************************************** \n");printf("\n 选择所要操作:");scanf("%d",&m);switch(m){case 1:init();fifo( );mune();break;case 2:init();lru( );mune();break;case 0:break;default:printf("选择错误,重新选择.");mune();}}void main() //主函数{mune();}。

相关文档
最新文档