陈泳鑫3110006379操作系统课程设计Word文档下载推荐.docx

上传人:b****4 文档编号:16940632 上传时间:2022-11-27 格式:DOCX 页数:16 大小:551.52KB
下载 相关 举报
陈泳鑫3110006379操作系统课程设计Word文档下载推荐.docx_第1页
第1页 / 共16页
陈泳鑫3110006379操作系统课程设计Word文档下载推荐.docx_第2页
第2页 / 共16页
陈泳鑫3110006379操作系统课程设计Word文档下载推荐.docx_第3页
第3页 / 共16页
陈泳鑫3110006379操作系统课程设计Word文档下载推荐.docx_第4页
第4页 / 共16页
陈泳鑫3110006379操作系统课程设计Word文档下载推荐.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

陈泳鑫3110006379操作系统课程设计Word文档下载推荐.docx

《陈泳鑫3110006379操作系统课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《陈泳鑫3110006379操作系统课程设计Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。

陈泳鑫3110006379操作系统课程设计Word文档下载推荐.docx

任务要求

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

参考文献

[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

intptl[256];

intpt[256];

intpf[256];

intpl;

}segpagt;

structsegpagtsp;

4、算法流程图

分页式:

分段式:

段页式:

5、主要函数列表

函数原型

功能

入口、出口参数说明

voidmain()

输入、输出

Int整形变量

6、测试与分析

分页式地址换算结果:

分页式地址越界中断:

分段式地址转换结果:

分段式地址段号越界中断:

分段式地址段内越界中断:

段页式地址转换结果:

段页式地址转换段号越界中断:

段页式地址转换页号越界中断:

段页式地址转换段内地址越界中断:

结束:

7、用户使用说明

  根据提示输入1-4,然后有相应的提示说明,分别输入,错误的时候有提示,正确的输入会输出相应的正确的结果。

附录:

#include<

stdlib.h>

stdio.h>

intpage(intA,intL);

intSegment(intsn,intsl);

intSegPagt(intsn,intpn,intpd);

intmain()

intcode;

intpl,pa,sn,sd,pd,pn,pc;

//constintptl;

inttemp;

do{

printf("

----------------地址换算过程----------------------------\n\n"

);

******本程序由陈泳鑫设计--2013年1月3号*****\n"

1.分页式地址换算\n"

2.分段式地址换算\n"

3.段页式地址换算\n"

4.结束运行\n\n"

--------------------------------------------------------\n"

请输入1-4:

"

scanf("

%d"

&

temp);

switch(temp)

{

case1:

printf("

预设页表长度为256\n"

page(pl,pa);

break;

case2:

intpl,pa;

预设段表长度为256\n"

请输入您的逻辑地址段号:

scanf("

pl);

printf("

请输入您的页内地址:

pa);

if(pl>

256)

段号%d大于段表长度256,越界中断\n"

pl);

else{

if(pa>

段内地址%d大于段长度256,越界中断\n"

pa);

else

{

Segment(pl,pa);

}

}

case3:

预设段表长度为256,页面大小为256\n"

请输入您的页号:

pc);

if(pl>

页号长度%d大于页表长度256,越界中断\n"

if(pc>

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

pc);

else

SegPagt(pl,pa,pc);

}

}

}while(temp!

=4);

return0;

}

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

intpage(intA,intL)

{

intpl,pa;

请输入您的逻辑地址:

请输入您的页面大小:

if(pl>

页号%d大于页表长度256,越界中断\n"

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{

页号=逻辑地址/页面大小=%d,页内地址=逻辑地址%页面大小=%d\n"

P,d);

//输出页号和页内地址

kd=PT[P];

//根据页号随机产生快号

根据页号%d得到块号%d\n"

P,kd);

WD=kd*L+d;

//计算物理地址的公式

物理地址=块号*页面大小+页内地址\n"

物理地址=%d*%d+%d\n"

kd,L,d);

//输出物理地址=块号*页面大小+页内地址

逻辑地址%d换算后的物理地址=%d\n\n"

A,WD);

//输出物理地址的结果

return(0);

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

intSegment(intsn,intsd)

inti,wd;

255;

st.segf[i]=rand()%255;

//定义随机产生段首地址为1到255之间

st.segl[i]=rand()%2048;

//定义随机产生段长度为1到2048之间

if(sn>

256)printf("

段号%d大于段表长度256,越界中断\n\n"

sn);

//如果段号大于段表长度,输出越界中断

elseif(sd>

st.segl[sn])printf("

段内地址%d大于段长度%d,越界中断\n\n"

sd,st.segl[sn]);

//如果段内地址大于段长度,输出越界中断

根据段号找到段首地址%d\n"

st.segf[sn]);

物理地址=段首地址+段内地址\n"

物理地址=%d+%d\n"

st.segf[sn],sd);

//输出物理地址=段首地址+段内地址

wd=st.segf[sn]+sd;

//计算物理地址的算法

换算得到的物理地址=%d\n\n"

wd);

//输出物理地址

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

intSegPagt(intsn,intpn,intpd)

inti,wd;

sp.pl=256;

for(i=0;

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("

//如果段号大于段表长度256,输出越界中断

else

if(pn>

页号%d大于页表长度256,越界中断\n\n"

pn);

//如果页号大于页表长度,输出越界中断

else

if(pd>

sp.pl)

页内地址%d大于页面长度%d,中断\n\n"

pd,sp.pl);

//如果页内地址大于页面长度,输出中断

通过段号%d找到页表首地址%d\n通过页号%d找到块号%d\n"

sn,sp.pf[sn],pn,sp.pt[pn]);

//输出页表首地址和块号

物理地址=页表首地址+块号*页面长度+页内地址\n"

物理地址=%d+%d*%d+%d\n"

sp.pf[sn],sp.pt[pn],sp.pl,pd);

//输出物理地址=页表首地址+快号*页面长度+页内地址

wd=sp.pf[sn]+sp.pt[pn]*sp.pl+pd;

物理地址为:

%d\n\n"

//输出物理地址的最好结果

return(0);

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

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

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

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