-
1、实现分页方式的地址转换 2、执行分段方式的地址转换
资源介绍
一、 课程设计目的
本课程设计是学生学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。
二、课程设计的内容
1、分页方式的地址换算
2、分段方式的地址换算
3、段页式的地址换算
三、程序运行
1、 分页式地址转换:
数据:
逻辑地址:223、页面大小:23
2、 分段式地址转换
数据:
逻辑地址段号:223、段内地址:23
3、 段页式地址换算
逻辑地址的段号:2、页号:3
四、程序源代码
#include
#include
int page(int A,int L );
int Segment(int sn,int sl);
int SegPagt(int sn,int pn,int pd);
typedef struct segtable
{
int segf[256];
int segl[256];
}segtable;
struct segtable st;
typedef struct segpagt
{
int segf[256];
int segl[256];
int ptl[256];
int pt[256];
int pf[256];
int pl;
}segpagt;
struct segpagt sp;
int main()
{
int code;
int pl,pa,sn,sd,pd,pn;
//const int ptl ;
int temp;
do{
printf("----------------地址换算过程----------------------------\n\n");
printf(" 1.分页式地址换算\n");
printf(" 2.分段式地址换算\n");
printf(" 3.段页式地址换算\n");
printf(" 4.结束运行\n\n");
printf("----------------------------------------------------------\n");
printf("请输入您的选择:");
scanf("%d",&code);
switch(code)
{
case 1:{
printf("注意:请演示设定页表长度小于\n");
printf("请输入换算的逻辑地址:\n");
scanf("%d",&pa);
printf("页面大小(B):\n");
scanf("%d",&pl);
page(pa,pl);
}break;
case 2:{
printf("请演示设定段表长度小于\n");
printf("请输入逻辑地址的段号:\n");
scanf("%d",&sn);
printf("段内地址:\n");
scanf("%d",&sd);
Segment(sn,sd);
}break;
case 3:{
printf("预设定段表长为,页面大小为\n");
printf("请输入逻辑地址的段号:\n");
scanf("%d",&sn);
printf("页号:\n");
scanf("%d",&pn);
printf("页内地址:\n");
scanf("%d",&pd);
SegPagt(sn,pn,pd);
}break;
case 4:{}break;
}
}while (code<4);
}
int page(int A,int L)
{
int d,P,kd,i;
int WD;
int PT[256];
for(i=1;i<256;i++)
{
PT[i]=rand() %512;//定义随机产生的快号在到之间
}
P=A/L;//页号等于逻辑地址/页面大小
d=A%L;//页内地址=逻辑地址%页面大小
if(P>L) printf("页号大于页表长度,越界中断\n\n");//如果页号大于页表长度,输出越界中段
else {
printf("页号=逻辑地址/页面大小=%d,页内地址=逻辑地址%页面大小=%d\n",P,d);//输出页号和页内地址
kd=PT[P];//根据页号随机产生快号
printf("根据页号%d得到块号%d\n",P,kd);
WD=kd*L+d;//计算物理地址的公式
printf("物理地址=块号%d*页面大小%d+页内地址%d\n",kd,L,d);//输出物理地址=块号*页面大小+页内地址
printf("逻辑地址%d换算后的物理地址为%d\n\n",A,WD);//输出物理地址的结果
return (0);
}
}
- 上一篇: 数据库课程设计-手机话费管理系统
- 下一篇: 生产者消费者问题