您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 操作系统课程设计地址转换
课程设计课程名称操作系统学院计算机学院专业年级班别学号学生姓名指导教师2013年1月7日操作系统课程设计任务书学生姓名陈泳鑫专业班级学号题目编程演示三种存储管理方式的地址换算过程指导教师林穗题目编号2012秋-14主要内容1、分页方式的地址换算2、分段方式的地址换算3、段页式的地址换算任务要求要求演示正确、清晰,编程所用工具不限。参考文献[1]计算机操作系统,汤小丹等,西安电子科技大学出版社[2]操作系统实验指导书,傅秀芬,广东工业大学(自编)[3]计算机操作系统教程(第二版),张尧学、史美林,清华大学出版社[4]现代操作系统,A.S.Tanenbaum著,陈向群等译机械工业出版社审查意见指导教师签字:系主任签字:年月日1、设计思想说明1.1设计环境在实现地址转换的程序实现时,运用了C++6.0来实现,因为对C语言程序的编写稍微熟悉点,可以很好的编写及调试。程序很容易看懂,输入条件在后边备注。1.2设计思想编程演示三种存储管理方式的地址换算过程,分别为分页方式的地址换算,分段方式的地址换算,段页式的地址换算。分页方式通过逻辑地址算出页号与叶内地址,然后通过页表来实现向物理地址的转换。分段方式通过段号和段内地址得到物理地址。段叶式通过段号得到页表首地址,通过页号得到块号,进而得到物理地址。2、系统结构程序主要有三个功能,分别是分页方式的地址换算,分段方式的地址换算,段页式的地址换算。Switch函数包含3个case语句,分别用page,Segment,SegPagt完成分页方式的地址换算,分段方式的地址换算,段页式的地址换算。3、数据结构的说明typedefstructsegtable{intsegf[256];intsegl[256];}segtable;structsegtablest;typedefstructsegpagt{intsegf[256];intsegl[256];intptl[256];intpt[256];intpf[256];intpl;}segpagt;structsegpagtsp;4、算法流程图分页式:分段式:段页式:5、主要函数列表函数原型功能入口、出口参数说明voidmain()输入、输出Int整形变量6、测试与分析分页式地址换算结果:分页式地址越界中断:分段式地址转换结果:分段式地址段号越界中断:分段式地址段内越界中断:段页式地址转换结果:段页式地址转换段号越界中断:段页式地址转换页号越界中断:段页式地址转换段内地址越界中断:结束:7、用户使用说明根据提示输入1-4,然后有相应的提示说明,分别输入,错误的时候有提示,正确的输入会输出相应的正确的结果。附录:#includestdlib.h#includestdio.hintpage(intA,intL);intSegment(intsn,intsl);intSegPagt(intsn,intpn,intpd);typedefstructsegtable{intsegf[256];intsegl[256];}segtable;structsegtablest;typedefstructsegpagt{intsegf[256];intsegl[256];intptl[256];intpt[256];intpf[256];intpl;}segpagt;structsegpagtsp;intmain(){intcode;intpl,pa,sn,sd,pd,pn,pc;//constintptl;inttemp;do{printf(----------------地址换算过程----------------------------\n\n);printf(******本程序由陈泳鑫设计--2013年1月3号*****\n);printf(1.分页式地址换算\n);printf(2.分段式地址换算\n);printf(3.段页式地址换算\n);printf(4.结束运行\n\n);printf(--------------------------------------------------------\n);printf(请输入1-4:);scanf(%d,&temp);switch(temp){case1:printf(预设页表长度为256\n);page(pl,pa);break;case2:intpl,pa;printf(预设段表长度为256\n);printf(请输入您的逻辑地址段号:);scanf(%d,&pl);printf(请输入您的页内地址:);scanf(%d,&pa);if(pl256)printf(段号%d大于段表长度256,越界中断\n,pl);else{if(pa256)printf(段内地址%d大于段长度256,越界中断\n,pa);else{Segment(pl,pa);}}break;case3:printf(预设段表长度为256,页面大小为256\n);printf(请输入您的逻辑地址段号:);scanf(%d,&pl);printf(请输入您的页号:);scanf(%d,&pa);printf(请输入您的页内地址:);scanf(%d,&pc);if(pl256)printf(段号%d大于段表长度256,越界中断\n,pl);else{if(pa256)printf(页号长度%d大于页表长度256,越界中断\n,pa);else{if(pc256)printf(页内地址%d大于页面长度256,越界中断\n,pc);elseSegPagt(pl,pa,pc);}}break;}}while(temp!=4);return0;}//分页式地址换算部分:intpage(intA,intL){intpl,pa;printf(请输入您的逻辑地址:);scanf(%d,&pl);printf(请输入您的页面大小:);scanf(%d,&pa);if(pl256)printf(页号%d大于页表长度256,越界中断\n,pl);else{intd,P,kd,i;intWD;intPT[256];for(i=0;i256;i++){PT[i]=rand()%512;//定义随机产生的快号在1到512之间}P=A/L;//页号等于逻辑地址/页面大小d=A%L;//页内地址=逻辑地址%页面大小if(P=256)printf(页号大于页表长度,越界中断\n\n);//如果页号大于页表长度,输出越界中段else{printf(页号=逻辑地址/页面大小=%d,页内地址=逻辑地址%页面大小=%d\n,P,d);//输出页号和页内地址kd=PT[P];//根据页号随机产生快号printf(根据页号%d得到块号%d\n,P,kd);WD=kd*L+d;//计算物理地址的公式printf(物理地址=块号*页面大小+页内地址\n);printf(物理地址=%d*%d+%d\n,kd,L,d);//输出物理地址=块号*页面大小+页内地址printf(逻辑地址%d换算后的物理地址=%d\n\n,A,WD);//输出物理地址的结果return(0);}}}//分段式地址换算部分:intSegment(intsn,intsd){inti,wd;for(i=0;i255;i++){st.segf[i]=rand()%255;//定义随机产生段首地址为1到255之间st.segl[i]=rand()%2048;//定义随机产生段长度为1到2048之间}if(sn256)printf(段号%d大于段表长度256,越界中断\n\n,sn);//如果段号大于段表长度,输出越界中断elseif(sdst.segl[sn])printf(段内地址%d大于段长度%d,越界中断\n\n,sd,st.segl[sn]);//如果段内地址大于段长度,输出越界中断else{printf(根据段号找到段首地址%d\n,st.segf[sn]);printf(物理地址=段首地址+段内地址\n);printf(物理地址=%d+%d\n,st.segf[sn],sd);//输出物理地址=段首地址+段内地址wd=st.segf[sn]+sd;//计算物理地址的算法printf(换算得到的物理地址=%d\n\n,wd);//输出物理地址}return(0);}//段页式地址换算部分:intSegPagt(intsn,intpn,intpd){inti,wd;sp.pl=256;for(i=0;i255;i++){sp.pf[i]=sp.segf[i]=rand()%26624;//定义随机产生的数在1到26624之间sp.ptl[i]=sp.segl[i]=rand()%512;//定义随机产生的数在1到512之间sp.pt[i]=rand()%256;//定义随机产生的数在1到256之间}if(sn=256)printf(段号%d大于段表长度256,越界中断\n\n,sn);//如果段号大于段表长度256,输出越界中断elseif(pn=256)printf(页号%d大于页表长度256,越界中断\n\n,pn);//如果页号大于页表长度,输出越界中断elseif(pdsp.pl)printf(页内地址%d大于页面长度%d,中断\n\n,pd,sp.pl);//如果页内地址大于页面长度,输出中断else{printf(通过段号%d找到页表首地址%d\n通过页号%d找到块号%d\n,sn,sp.pf[sn],pn,sp.pt[pn]);//输出页表首地址和块号printf(物理地址=页表首地址+块号*页面长度+页内地址\n);printf(物理地址=%d+%d*%d+%d\n,sp.pf[sn],sp.pt[pn],sp.pl,pd);//输出物理地址=页表首地址+快号*页面长度+页内地址wd=sp.pf[sn]+sp.pt[pn]*sp.pl+pd;//计算物理地址的公式printf(物理地址为:%d\n\n,wd);//输出物理地址的最好结果}return(0);}
本文标题:操作系统课程设计地址转换
链接地址:https://www.777doc.com/doc-5134751 .html