一、 课程设计目的
本课程设计是学生学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。
二、课程设计的内容
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;iL) printf("页号大于页表长度,越界中断\n\n");//如果页号大于页表长度,输出越界中段
else {
printf("页号=逻辑地址/页面大小=%d,页内地址=逻辑地址%页面大小=%d\n",P,d);//输出页号和页内地址
kd=PT[P];//根据页号随机产生快号
printf("根据页号%d得到块号%d\n",P,kd);
WD=kd*L+d
1