操作系统课程设计.pdf
编程演示三种管理方式的地址换算过程,分别为分页方式的地址换算,
分段方式的地址换算,段页式的地址换算。分页方式通过逻辑地址算出页号与叶
内地址,然后通过页表来实现向地址的转换。分段方式通过段号和段内地址
得到地址。段叶式通过段号得到页表首地址,通过页号得到块号,进而得到
地址。
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