文档详情

操作系统课程设计.pdf

发布:2025-02-04约7.63千字共10页下载文档
文本预览下载声明

编程演示三种管理方式的地址换算过程,分别为分页方式的地址换算,

分段方式的地址换算,段页式的地址换算。分页方式通过逻辑地址算出页号与叶

内地址,然后通过页表来实现向地址的转换。分段方式通过段号和段内地址

得到地址。段叶式通过段号得到页表首地址,通过页号得到块号,进而得到

地址。

2概要设计

程序主要有三个功能,分别是分页方式的地址换算,分段方式的地址换算,段页

式的地址换算。Switch函数包含4个case语句,分别用page,Segment,SegPagt

完成分页方式的地址换算,分段方式的地址换算,段页式的地址换算。

3运行环境

软件环境:Window10,VisualC++6.0

4开发工具和编程语言

开发工具:VisualC++6.0编程语言:C语言

5详细设计

主函数部分:

intmain()

{intcode;

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

//constintptl

inttemp;

do{

printf(地址换算过程

\n\n);

printf(1.分页式地址换算\n);

printf(2.分段式地址换算\n);

printf(3.段页式地址换算\n);

printf(4.结束运行\n\n);

printf(

\n);printf(请输入您的选择:);分页式地址换算部分:

intpage(intA,intL)

{intd,P,kd,i;intWD;intPT[256];for(i=1;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);//输出地址=块号*页面44

大小+页内地址

printf(逻辑地址%d换算后的地址=%d\n\n,A,WD);//

输出地址的结果

return(0);

}

}

分段式地址换算部分:

ntSegment(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,s

显示全部
相似文档