武汉大学第五次操作系统实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编号:

武汉大学计算机学院

课程实验(设计)报告

专业(班):2014级计算机科学与技术4班

学号:2014301500385

姓名:颜子琦

课程名称:操作系统设计

任课教师:

2016年12月18日

实习题目:模拟页面地址重定位

实习内容及设计思想:

1、设计思路:

1、定义逻辑地址,物理地址,页表,页长,进程大小等数据结构

2、提示并接受用户输入页长,进程大小,逻辑地址

3、根据输入的进程大小得到进程所需块数,加上逻辑地址的页号,检查是否超出

页表范围,若是重新输入

4、搜索页表将页号转换为物理块号,左移页长后加上页内偏移地址得到物理地址2、主要数据结构:

1、逻辑地址logadd

2、物理地址寄存器phyadd

3、页表pagelength[16][2]={{0,13},{1,7},{2,11},{3,8},{4,0},{5,12},{6,3},{7,9},{8,5},

{9,2},{10,15},{11,4},{12,10},{13,6},{14,1},{15,14}};

4、页长pagelength

5、进程大小process

3、主要代码结构及代码段分析:

phyadd=logadd%pagelength;//页内偏移拷贝到物理地址寄存器

if(process/pagelength+1+logadd/pagelength>15){//若超过页表范围

//logadd/pagelength为页号,process/pagelength+1为进程需要分配的块数

printf("页数超过页表表项数,请重新输入!\n");

main();

return;

}

for(i=0;i<16;i++)

if(pagetable[i][0]==logadd/pagelength){//在页表中找到该页号

phyadd+=pagetable[i][1]*pagelength;//物理地址寄存器加上物理块号左移页长得到物理地址

break;

}

上机实习所用平台及相关软件:windows10、codeblocks

调试过程:

1、测试数据设计:

2、测试结果分析:

90=5*16+10 5→12 12*16+10=202

180/16+1=12 12+5>15

233=14*16+9 14+2>15

233=7*32+9 7→9 9*32+9=297

500/32+1=16 16+7>15

500=15*32+20 15+1>15

程序得到的结果与预期一致

总结:

1、实习中遇到的问题及解决方法:

程序比较简单,没有遇到什么问题

2、实习中产生的错误及原因分析:

同上。

3、实习体会及收获

第五个实验只需要对页面地址重定位有一个最基本的了解,无论是对内部机制的理解和编程难度都不大

源代码:

#include

#include

int logadd;//逻辑地址

int phyadd;//物理地址寄存器

int pagetable[16][2]={{0,13},{1,7},{2,11},{3,8},{4,0},{5,12},{6,3},{7,9},{8,5},

{9,2},{10,15},{11,4},{12,10},{13,6},{14,1},{15,14}};//页表

int pagelength;//页长

int process;//进程大小

void main(){

int i;

printf("请输入页长:");

scanf("%d",&pagelength);

printf("请输入进程大小:");

scanf("%d",&process);

printf("请输入需要转换的逻辑地址:");

scanf("%d",&logadd);

phyadd=logadd%pagelength;//页内偏移拷贝到物理地址寄存器

if(process/pagelength+1+logadd/pagelength>15){//logadd/pagelength为页号,process/pagelength+1为进程需要分配的块数

printf("页数超过页表表项数,请重新输入!\n");

main();

return;

}

for(i=0;i<16;i++)

if(pagetable[i][0]==logadd/pagelength){

//printf("%d",pagetable[i][1]);

phyadd+=pagetable[i][1]*pagelength;

break;

}

printf("物理地址是:%d",phyadd);

return;

}

相关文档
最新文档