操作系统课程设计--编程演示三种存储管理方式的地址换算过程.docx

上传人:b****1 文档编号:251099 上传时间:2022-10-07 格式:DOCX 页数:14 大小:387.56KB
下载 相关 举报
操作系统课程设计--编程演示三种存储管理方式的地址换算过程.docx_第1页
第1页 / 共14页
操作系统课程设计--编程演示三种存储管理方式的地址换算过程.docx_第2页
第2页 / 共14页
操作系统课程设计--编程演示三种存储管理方式的地址换算过程.docx_第3页
第3页 / 共14页
操作系统课程设计--编程演示三种存储管理方式的地址换算过程.docx_第4页
第4页 / 共14页
操作系统课程设计--编程演示三种存储管理方式的地址换算过程.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

操作系统课程设计--编程演示三种存储管理方式的地址换算过程.docx

《操作系统课程设计--编程演示三种存储管理方式的地址换算过程.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计--编程演示三种存储管理方式的地址换算过程.docx(14页珍藏版)》请在冰豆网上搜索。

操作系统课程设计--编程演示三种存储管理方式的地址换算过程.docx

课程设计

课程名称 操作系统

学 院 计算机学院

专 业 软件工程年级班别

学号学生姓名指导教师

2013年 1 月 7日

操作系统课程设计任务书

学生姓名

陈泳鑫

专业班级

学号

题 目

编程演示三种存储管理方式的地址换算过程

指导教师

题目编号

主要内容

1、分页方式的地址换算

2、分段方式的地址换算

3、段页式的地址换算

要求演示正确、清晰,编程所用工具不限。

任务要求

参考文献

[1]计算机操作系统,汤小丹等,西安电子科技大学出版社

[2]操作系统实验指导书,傅秀芬,广东工业大学(自编)

[3]计算机操作系统教程(第二版),张尧学、史美林,清华大学出版社

[4]现代操作系统,A.S.Tanenbaum著,陈向群等译机械工业出版社

指导教师签字:

审查意见

系主任签字:

设计思想说明

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,然后有相应的提示说明,分别输入,错误的时候有提示,正确的输入会输出相应的正确的结果。

附录:

#include#include

intpage(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(pl>256)

printf("段号%d大于段表长度256,越界中断\n",pl);

else{

if(pa>256)

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(pl>256)

printf("段号%d大于段表长度256,越界中断\n",pl);

else{

if(pa>256)

printf("页号长度%d大于页表长度256,越界中断\n",pa);

else

{

if(pc>256)

printf("页内地址%d大于页面长度256,越界中断\n",pc);

else

SegPagt(pl,pa,pc);

}

}

break;

}

}while(temp!

=4);return0;

}

//分页式地址换算部分:

intpage(intA,intL)

{

intpl,pa;

printf("请输入您的逻辑地址:

");scanf("%d",&pl);

printf("请输入您的页面大小:

");scanf("%d",&pa);

if(pl>256)

printf("页号%d大于页表长度256,越界中断\n",pl);

else{

intd,P,kd,i;

intWD;

intPT[256];

for(i=0;i<256;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;i<255;i++)

{

st.segf[i]=rand()%255;//定义随机产生段首地址为1到255之间

st.segl[i]=rand()%2048;//定义随机产生段长度为1到2048之间

}

if(sn>256)printf("段号%d大于段表长度256,越界中断\n\n",sn);//如果段号大于段表长度,输出越界中断

else if(sd>st.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;i<255;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大于段表长度

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1