您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 请求分页虚拟存储器设计
请求分页虚拟存储器设计管理结构图:1.接口和全局结构定义//----------------基本常量定义---------------------------------#definePROCESS_SIZE//系统允许的最多进程数#definePAGE_SIZE//页面大小#defineMEMORY_SIZE//内存所含的物理块数#defineINIT_FREEBLOCKS//内存保留的空闲的物理块数#defineMAX_PAGES//最多页面数//----------------基本数据结构定义---------------------------//***********************操作队列结构****************************structop_Que{intprocessNum;//进程编号inttime;//进程起始时间intpages;//进程包含的页面数intoper;//进程要求的操作:1=提交;2=释放intprotection;//权限:0=PAGE_READONLY;//1=PAGE_READWRITE//2=PAGE_EXECUTE};安子毓杨兴国张守元毕斐张艳丽刘川意翟高寿老师structQueNode{structop_QueopQuene;structopQue*next};structopQue{structQueNode*front;structQueNode*rear;};//******************************************************************//***********************模拟内存使用情况**********************structblock//内存中每一个物理块的结构{intstate;//当前块的状态:1=空闲;2=已被分配;intarray[PAGE_SIZE];//块内字节的使用情况(程序扩展用)};structfreeQueNode//系统保留的物理块队列结构{intblockNumber;//当前块的编号int*next;};structfreeQue//空闲物理块队列{freeQueNode*front;freeQueNode*rear;}structmemory//内存的模拟结构{blockblocks[MEMORY_SIZE];//物理块freeQuefQ;//空闲队列,每一数据项为内存块的编号};//*******************************************************************//*************************页表*****************************structpage//页表项结构{intprocessNum;//进程号intpageNumber;//特定进程pricess中虚拟页面的编号intblockNumber;//物理块号intstate;//当前页的状态:0=外存;1=内存;intaccessNum;//当前页被访问的次数intaddress;//外存地址(程序扩展用)};structpageTable//页表结构{pagepages[MEMORY_SIZE]};//*******************************************************************//*******************************************************************structaccessArrayStruct//虚拟地址结构{intprocessNum;//访问的进程号intpageNumber;//该进程的页号intpageAddress;//页内地址};//*******************************************************************2.模拟进程的申请,形成进程申请队列本模块包括2个子模块。子模块1:模拟进程的申请。随机形成一队列,模拟请求分页系统中进程的执行顺序。随机队列的每一项元素包含进程编号、进程中含有的页面数、进程要求的操作以及权限。其中:process//进程编号pages//进程要访问的页面数oper//进程要求的操作:1=提交;2=释放protection//权限:0=PAGE_READONLY1=PAGE_READWRITE2=PAGE_EXECUTE子模块2:模拟进程对页面的访问序列。随即产生一队列,模拟请求分页系统中进程对页面的访问序列。随机队列的每一项元素包含进程编号、页号、页内地址。其中:process//进程号pageNumber//将要访问的该进程的页面pageAddress//页内地址3.读取opQue队列,进行内存分配和回收,同时生成和修改页表pageTable开始读opernipagesS1(n为进程数)Oper==1?Y分配)_(.FSIZEMEMORYSpagesi个物理块给进程i对分配的每一个物理块k,使其page项中iprocessk.NOper==2?选择进程i对应的page项中accessi.较小的pagesi.个物理块Y以上得到的物理块k,使:1].[statuskblocks,fQk结束4.读取accessArray,通过查找pageTable进行地址转换,同时更新pageTable。系统生成流程和程序设计流程详细流程图:读取进程号progressNum是退出,报错读取该进程将要访问的页号pageNum否是否越界是否越界是退出报错否由accessArray开始由progressNum和pageNum在pageTable中检索是接软件输出程序模块1否由进程编号processNum在memory.blocks中检索Blocks[blockNum].state=1?是否将页面pageNum调入内存,修改页表接软件输出程序模块2接下页接上freeQueneisNull?是否把freeQuene中的一个空闲物理块分给processNum,修改页表接软件程序输出模块3在进程processNum中检索最久未使用页面pageNum在momry中找到pageNum所在物理块,换出修改页表
本文标题:请求分页虚拟存储器设计
链接地址:https://www.777doc.com/doc-31456 .html