操作系统实验六 - 虚拟存储器实验报告 下载本文

请输入指令的页号、单元号,以及是否为存指令: 5 023 N out 1 in 5

请输入指令的页号、单元号,以及是否为存指令: 2 15 N 绝对地址=1167

请输入指令的页号、单元号,以及是否为存指令: 1 037 y out 2 in 1

请输入指令的页号、单元号,以及是否为存指令: 3 21 Y 绝对地址=149

请输入指令的页号、单元号,以及是否为存指令: 2 078 N out 3 in 2

请输入指令的页号、单元号,以及是否为存指令: 0 56 N out 4 in 0

请输入指令的页号、单元号,以及是否为存指令: 4 001 N out 5 in 4

请输入指令的页号、单元号,以及是否为存指令: 6 40 N out 1 in 6

请输入指令的页号、单元号,以及是否为存指令: 6 084 Y 绝对地址=1236

请输入指令的页号、单元号,以及是否为存指令: exit

数组P 的值为: P[0]=0

P[1]=4 P[2]=6 P[3]=2

五、系统不足与经验体会

系统的不足包括健壮性尚不够好,界面比较简单,对页表的 初始化需要修改程序。

经验体会:注意体会算法的精神,程序前后逻辑要一致。注 意测试时数据的全面性。 六、附录:源代码(带注释) #include #include #define SizeOfPage 100 #define SizeOfBlock 128 #define M 4 struct info//页表 {

bool flag; //标志 long block;//块号

long disk;//在磁盘上的位置 bool dirty;//修改标志 }pagelist[SizeOfPage]; long po;//队列标记 long P[M]; void init_ex1() {

memset(pagelist,0,sizeof(pagelist)); pagelist[0].flag=1; pagelist[0].block=5; pagelist[0].disk=011; pagelist[1].flag=1; pagelist[1].block=8; pagelist[1].disk=012; pagelist[2].flag=1; pagelist[2].block=9; pagelist[2].disk=013; pagelist[3].flag=1;

pagelist[3].block=1; pagelist[3].disk=021; }

void work_ex1() {

bool stop=0; long p,q; char s[128]; do {

printf(\请输入指令的页号和单元号:\\n\if (scanf(\{

scanf(\if (strcmp(s,\{ stop=1; } } else {

if (pagelist[p].flag) {

printf(\绝对地址=%ld\\n\} else {

printf(\} }

}while (!stop); }

void init_ex2() { po=0;

P[0]=0;P[1]=1;P[2]=2;P[3]=3; memset(pagelist,0,sizeof(pagelist));

pagelist[0].flag=1; pagelist[0].block=5; pagelist[0].disk=011; pagelist[1].flag=1; pagelist[1].block=8; pagelist[1].disk=012; pagelist[2].flag=1; pagelist[2].block=9; pagelist[2].disk=013; pagelist[3].flag=1; pagelist[3].block=1; pagelist[3].disk=021; }

void work_ex2() { long p,q,i; char s[100]; bool stop=0; do {

printf(\请输入指令的页号、单元号,以及是否为存指令:\\n\if (scanf(\{

scanf(\if (strcmp(s,\{ stop=1; } } else {

scanf(\if (pagelist[p].flag) {

printf(\绝对地址=%ld\\n\if (s[0]=='Y' || s[0]=='y') {