计算机虚拟页式存储管理系统的仿真实现内容摘要:
进程 CLOCK 方法的驻留集状态 setFifoStayPage PCB pcb void 获得当前进程 FIFO 方法的驻留集状态 clearall 无 void 清空全部界面 ( 7)完成命 中率的计算 以评价模拟系统的优劣。 3 裸机 硬件 部件仿真设计 3. 1 存储空间 的设计与抽象 抽象并设计存储空间模块,采用将程序指令存储和数据存储分开的 哈弗 结构,具体分为内存抽 象与外存抽象。 存储空间按块划分,块与页大小相同,均为 32B。 内存 1024B 即 32 块,外存 2048B 即 64 块。 9 物理地址 9 位, 4位页号, 5位页内偏移,可访问 512B 大小 的空间 ; 逻辑地址 10 位, 5位页号, 5 位页内偏移 ,可访问 1024B 大小的空间。 3. 2 存储管理部件 MMU 的抽象与设计 抽象并设计存储管理部件 MMU 模块, 以对象类的形式模拟 存储管理部件 MMU的结构和功能。 存放逻辑地址与物理地址的寄存器 等结构部件以静态属性抽象模拟。 地址分解、地址转换、发出异常与异常处理功能 等功能以动态成员函数抽象模拟。 3. 3 中央处理器 CPU 的抽象与设计 抽象并设计 中央处理器 CPU 模块, 以对象类的形式模拟中央处理器 CPU的结构和功能。 程序状态字 PSW ; 页表基址寄存器 PTBR; 指令计数器 PC; 指令寄存器 IR; 快表 TLB等寄存器 部件都以静态属性抽象模拟。 进程调度时进行进程上下文切换以保护 CPU 现场信息 ; 将逻辑地址传送给存储管理部件 MMU; 指 令的运行等功能以动态成员函数抽象模拟。 4 通用数据结构设计 4. 1 后备作业队列抽象设计 4. 1. 1 数据结构设计 typedef struct{//后备作业队列,数据结构用队列表示 int base[10]。 //队列基地址 int rear。 //队列尾指针 int front。 //队列头指针 }JQueue。 4. 1. 2 基本操作 void EnJob(int job){//进后备作业队列 作业进队列; 尾指针 +1; } int DeJob(){//出后备作业队列 if(队列为空,作业执行结束 ){ 返回 1; }else{ 作业出队列; 头指针 +1; 为作业分配外存 ; 返回 0; } } void InitJob(){//初始化后备作业队列 队列指针初始化 ; while(作业数不为 0) 10 { 作业号 =生成随机数 ; 作业数 =作业数 1; } } 4. 2 进程状态队列抽象设计 4. 2. 1 数据结构设计 typedef struct{//进程状态队列 PCB base[100]。 //队列元素为进程控 制块 int rear。 //队列尾指针 int front。 //队列头指针 }PQueue。 4. 2. 2 基本操作 int ReadyQueueisEmpty(){//判断就绪队列是否为空 if( 队列头指针 == 队列尾指针 ){ 返回 1; } 返回 0; } int WaitQueueisEmpty(){//判断等待队列是否为空 if( 队列头指针 == 队列尾指针 ){ 返回 1; } 返回 0; } int EnReadyQueue(PCB qpcb){//表示进程已获 得内存等资源,进入就绪态 进程进入就绪队列; 队列尾指针 +1; } PCB DeReadyQueue(){//出就绪队列,表示进程获得处理器,进入运行态 if(就绪队列不为空 ){ 进程出队列; 队列头指针 +1; }else{ 返回空; } } int ReadyQueueLength()。 //就绪队列长度 int EnWaitQueue(PCB qpcb){ //表示进程出现等待事件,被阻塞进入等待态 进程进入等待队列; 队列尾指针 +1; } PCB DeWaitQueue(){//出等待队列,表示等待事件结束 if(等待队列不为空 ){ 进程出队列; 11 队列头指针 +1; }else{ 返回空; } } 4. 3 快表抽象设计 4. 3. 1 数据结构设计 typedef struct TNode{//页号和页框号的对应关系的数据结构 int tpageno。 //页号 int trealpageno。 //页框号 }TNode。 typedef struct{//快表队列 TNode base[4]。 //快表大小是 3,数据结构为循环队列,所以空出一位 int rear。 //队列尾指针 int front。 //队列头指针 }TQueue。 4. 3. 2 基本操作 void InitTlb(){//初始化快表 快表头指针 =快表尾指针 =0; } int EnTlb(int epageno,int erealpageno){//进快表 生成新的快表项; 快表项进快表; 快表尾指针 +1; } int DeTlb(){//出快表 if(快表为空 ){ 返回 1; }else{ 返回表头快表项的物理页号; } } int TlbisFull(){//判 断快表是否满 if(尾指针 +1==头指针 ){ 返回 1; } 返回 0; } void ClearTlb(){//清空快表 尾指针 =头指针 =0; } int VisitTlb(int pageno)。 //遍历快表 int TlbSize(){//快表长度 返回 尾指针 头指针; } 12 4. 4 页表项抽象设计 4. 4. 1 数据结构设计 typedef struct Page{//页表项,大小为 2B int iPageNo。 //页号 int iRealPageNo。 //页框号 int iInMemory。 //驻留标志位 int iHavenUse。 //引用位 int iChange。 //修改位 int iProtect。 //保护位 }Page; 4. 4. 2 基本操作 void setPage(){//进程页表 { 生成新页表; 设置 页号 ; 设置 驻留位 、 引用位 、 修改位 、 保护位 ; 对应 页框号 ; } void setPageInMemory(int pageno,int n){//设置 页面的驻留位 遍 历页表; if(页号相同) { 该页面驻留位置 n。 } } void setPageHavenUse(int pageno,int n)。 //设置 页面的引用位 int getPageInMemory(int pageno){ //根据页号获得进程页表 驻留位 遍历页表; if(遍历未结束 amp。 amp。 页号相同 ){ 驻留位置 n; 返回 0; } if(遍历结束 amp。 amp。 不存在页号相同 ){ 返回 1; } } int getPageHavenUse(int pageno)。 //根据页号获得进程页表 引用 位 int getPhyPageNo(int pageno)。 //根据页号获得对应物理页号 4. 5 外页表项抽象设计 4. 5. 1 数据结构设计 typedef struct OutPage{//外页表项,大小为 2B int iOutPageNo。 //页号 int iOutRealPageNo。 //页框号 int phyAddr。 //物理地址 }OutPage。 13 4. 5. 2 基本操作 void setOutPage(){//进程外页表 生成新页表; 设置 页号 ; 对应物 理地址; } 4. 6 页表基址寄存器 抽象设计 4. 6. 1 数据结构设计 typedef struct PTBR{//页表基地址寄存器抽象 int iF。 //页表起始地址 int iM。 //页表长度 }PTBR。 4. 6. 2 基本操作 void setPtbr(){//生成页表基地址 设置页表基地址; 设置页表长度; } int getiF(){//获得进程页表基址 返回页表基址; } 4. 7 程序状态字 抽象设计 4. 7. 1 数据结构设计 typedef struct PSW{//程 序状态字抽象 int iNumber。 //当前运行指令编号 int IF。 //中断允许标志,为 1 允许响应中断,否则关中断 int iType。 //此时运行状态, 0表示用户态 ,1 表示内核态 }PSW。 4. 7. 2 基本操作 void setPSW(PSW psw){//设置程序状态字,用于进程上下文切换 设置 当前运行指令编号 设置 中断允许标志,为 1 允许响应中断,否则关中断 设置 此时运行状态, 0表示用户态 ,1 表示内核态 } 4. 8 驻留集抽象设计 4. 8. 1 数据结构设计 typedef struct{//用于 CLOCK 算法的驻留集,数据结构用循环队列表示 int ptr。 //当前指针指向的位置 int front。 //队首标志 int rear。 //队尾标志 int *base。 //队列元素 14 }CycleQueue。 typedef struct{//用于 FIFO 的驻留集,数据结构用顺序队列表示 int *base。 //驻留集基地址 int rear。 //驻留集尾指针 int front。 //驻留集头指 针 }MQueue。 4. 8. 2 基本操作 int fStaySize(){//获得 驻留集当前长度 返回 尾指针 头指针; } int enCycleQueue(int pageno){//进驻留集 if(驻留集已经满 ){ 返回 1; }else{ 新页号进驻留集; 尾指针 +1; } } int deCycleQueue(){//出驻留集 if(驻留集已经空 ){ 返回 1; }else{ 出驻留集; 头指针 +1; } } 4. 9 内存抽象设计 4. 9. 1 数据结构设计 typedef struct Memory{//内存空间抽象 Page page[256]。 //8 页大小的页表区 ,一页 32B,共 256B Mpage mpage[768]。 //24 页大小的空闲区 ,共 768B }Memory。 //共 32 页 ,1024B 15 4. 9. 2 基本操作 void setPCBSpace(int addr, int pid){ //为进程分配内存空间 if(内存空间未占用 ){ 进程占用内存空间; 位示图置 1; } } void freePCBSpace(int addr,int pid){//为进程释放内存空间 进程释放内存空间; 位示图置 0; } 4. 10 外存抽象设计 4. 10. 1 数据结构设计 typedef struct Disk{//外存空间抽象 OutPage doutpage[512]。 //16 页大小的页表区 ,一页 32B,共 512B Mpage mpage[1536]。 //48 页大小的空闲区 ,共 1536B }Disk。 //共 64页 ,2048B 4. 10. 2 基本操作 void setJOBSpace(int addr){//为作业分配外存 if(外存空间未占用 ){ 作业占用外存空间; 位示图法置 1; } } void freeJOBSpace(int addr){//为作业释放外存 作业释放内存空间; 位示图置 0; 5 软件系统设计 5. 1 系统 结构 5. 1. 1 底层硬件抽象 抽象设计中央处理器 CPU 模块、存储管理部件 MMU 模块、内存储器与外存储器模块。计算机虚拟页式存储管理系统的仿真实现
本资源仅提供20页预览,下载后可查看全文
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。
相关推荐
晚稻苗期病虫害防治意见
1、据近期部分县植保站田间调查,晚稻稻飞虱、稻纵卷叶螟、纹枯病、叶稻瘟、细菌性条斑病已经在田间发生为害。 如:上犹 8 月 5 日百丛稻飞虱 261,稻瘟病病叶率 并有急性病斑,12 日稻飞虱 257720 头,二化螟枯鞘丛率 0%。 会昌 8 月 4 高的 纹枯病病丛率 百丛有稻纵卷叶螟 62361条。 于都 8 月 4 日稻飞虱百丛一般 300500 头,高的 1200 头。 宁都 8 月
晚稻后期栽培管理技术要点
1、稻生长后期是指从剑叶全出至完熟这段时间,这个时期的栽培管理目标是养根保叶、防止早衰、提高结实率、增加千粒重,其主要管理措施如下:一、适当补施壮尾肥晚稻后期秋高气爽,光照充足,昼夜温差大,施壮尾肥增产效果显著。 一般在群体适中、叶色偏淡的稻田,可在齐穗期施壮尾肥,每亩施尿素 23 公斤或复合肥 5 公斤左右。 同时可在齐穗期开始每隔 7 天根外追肥1 次,每次亩用磷酸二氢钾 150 克加尿素
计算机实验室管理系统毕业论文设计
得的数据库安全保密的设计考虑。 说明各个数据结构与访问这些数据结构的各个程序之间的对应关系,可采用如下的矩阵图的形式:系统设计(SystemDesign,SD)是指设计软件系统的体系结构、用户界面、数据库、模块等,从而在需求与代码之间建立桥梁,指导开发人员去实现能满足需求的软件。 系统设计过程域是SPP模型的重要组成部分。 本规范阐述了系统设计过程域的四个主要规程