哪位高手帮我改1下缺页中断的程序嘛,只有一个错误!!。奖40分!!在线等。谢谢!

glow110 2010-07-08 11:17:34
#include "stdio.h"
#define max 100 /*定义页面数组大小的上限*/
#define size_pa 1024
void add_tran()
void page_si()
{
int array[max][2];/*页表,其中array[n][0]为页号,array[n][1]为块号*/
int size_PT;
int no_page,no_block;/* no_page,no_block 分别是页号和块号*/
int if_quit1; /*if_quit1退出子程序标志*/
int i,j;/*j表示下一个将被置换的页面位置*/
int add_logic,add_sys;/*逻辑地址和绝对地址*/
int if_page;/*中断标志*/
if_quit1=0;/*退出标志*/
/*初始化页表*/
printf("\n please input size of the page table: ");
scanf("%d",&size_PT);
j=size_PT-1;
printf("\n now initialize the page table, please input page number and block number \n");
for(i=0;i<=size_PT;i++)
{
printf("page number:");
scanf("%d",&no_page);
printf("block number:");
scanf("%d",&no_block);
array[i][0]=no_page;
array[i][1]=no_block;
}
printf("initializing complete");
/*输出初始化页表*/
printf("\nPage table: \n");
for(i=0;i<=size_PT;i++){
printf("page:%5d",array[i][0]);
printf("block:%5d",array[i][1]);
printf("\n");
}
printf("\n");
/*地址变换*/
while(if_quit1==0)
{
if_page=1;
pdntf("\n input the address wantted to be translated(0 exit):");
scanf("%x",&add_logic);
if(add_logic==0) if_quit1=1;
else
{
no_page=add_logic/size_pa;
for(i=0;i<size_PT;i++)
{
if(array[i][0]==no_page)
{
add_sys=add_logic%size_pa+array[i][1]*size_pa;
if_page=0;
}
else if_page=if_page*1;
if(if_page==1)
{
add_sys=add_logic%size_pa+array[j][1]*size_pa;
printf("\n intermittence occured,page%d has been replaced with page%\n",array[j][0],no_page);
array[j][0]=no_page;
j=(j+1)%size_PT;
}
prinf("the target address is:%x\n",add_sys);
printf("\nPage table:\n");
for(i=0;i<size_PT;i++)
{
prinf("page:%d",array[i][0]);
printf("block:%d",array[i][1]);
prinf("\n");
}
}
}
}
/*页面置换模拟:输入页面序列,缺页时按FIFO的策略进行页面置换。*/
/*输出置换情况,和缺页次数*/
/*假设页表大小不超过max,输入的页面数不超过max*1O*/
/*程序执行流程:*/
/*初始化:输入分配的块数,输入页面序列*/
/*输出依次访问一个页面后的页表,然后输出缺页中断总次数*/

/**********主程序*************/
void main()
{

int if_quit0;/*if-quit0退出主程序标志*/
int n_func;
if_quit0=0;
while(if_quit0==0)
{
printf("\n please input number of the funotion you want to execute\n");
printf("l--address translating,2--page simulating, 0--exit,");
scanf("%d",&n_func);
if(n_func==1) add_tran();
if(n_func==2) page_si();
if(n_func==0) if_quit0=l;
}
}
...全文
149 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
DotCpp 2010-07-10
  • 打赏
  • 举报
回复
mark
glow110 2010-07-10
  • 打赏
  • 举报
回复
谢谢大家了。该出来了。

#include "stdio.h"
#define max 100 /*定义页面数组大小的上限*/
#define size_pa 1024
void add_tran()
{
int array[max][2];/*页表,其中array[n][0]为页号,array[n][1]为块号*/
int size_PT;
int no_page,no_block;/* no_page,no_block 分别是页号和块号*/
int if_quit1; /*if_quit1退出子程序标志*/
int i,j;/*j表示下一个将被置换的页面位置*/
int add_logic,add_sys;/*逻辑地址和绝对地址*/
int if_page;/*中断标志*/
if_quit1=0;/*退出标志*/
/*初始化页表*/
printf("\n please input size of the page table: ");
scanf("%d",&size_PT);
j=size_PT-1;
printf("\n now initialize the page table, please input page number and block number \n");
for(i=0;i<=size_PT;i++)
{
printf("page number:");
scanf("%d",&no_page);
printf("block number:");
scanf("%d",&no_block);
array[i][0]=no_page;
array[i][1]=no_block;
}
printf("initializing complete");
/*输出初始化页表*/
printf("\nPage table: \n");
for(i=0;i<=size_PT;i++){
printf("page:%5d",array[i][0]);
printf("block:%5d",array[i][1]);
printf("\n");
}
printf("\n");
/*地址变换*/
while(if_quit1==0)
{
if_page=1;
printf("\n input the address wantted to be translated(0 exit):");
scanf("%x",&add_logic);
if(add_logic==0) if_quit1=1;
else
{
no_page=add_logic/size_pa;
for(i=0;i<size_PT;i++)
{
if(array[i][0]==no_page)
{
add_sys=add_logic%size_pa+array[i][1]*size_pa;
if_page=0;
}
else if_page=if_page*1;
if(if_page==1)
{
add_sys=add_logic%size_pa+array[j][1]*size_pa;
printf("\n intermittence occured,page%d has been replaced with page%\n",array[j][0],no_page);
array[j][0]=no_page;
j=(j+1)%size_PT;
}
printf("the target address is:%x\n",add_sys);
printf("\nPage table:\n");
for(i=0;i<size_PT;i++)
{
printf("page:%d",array[i][0]);
printf("block:%d",array[i][1]);
printf("\n");
}
}
}
}
}
/*页面置换模拟:输入页面序列,缺页时按FIFO的策略进行页面置换。*/
/*输出置换情况,和缺页次数*/
/*假设页表大小不超过max,输入的页面数不超过max*1O*/
/*程序执行流程:*/
/*初始化:输入分配的块数,输入页面序列*/
/*输出依次访问一个页面后的页表,然后输出缺页中断总次数*/
void page_si() {}
/**********主程序*************/
int main()
{
int if_quit0;/*if-quit0退出主程序标志*/
int n_func;
if_quit0=0;
while(if_quit0==0)
{
printf("\n please input number of the funotion you want to execute\n");
printf("l--address translating,2--page simulating, 0--exit,");
scanf("%d",&n_func);
if(n_func==1) add_tran();
if(n_func==2) page_si();
if(n_func==0) if_quit0=1;
}

return 0;
}

小楫轻舟 2010-07-09
  • 打赏
  • 举报
回复
只改了语法错误,逻辑没功夫看,抱歉,
你有几处printf写错了,一处括号没匹配,
ann_tran()函数没定义
...

#include "stdio.h"
#define max 100 /*定义页面数组大小的上限*/
#define size_pa 1024
void add_tran()
{
return;
}
void page_si()
{
int array[max][2];/*页表,其中array[n][0]为页号,array[n][1]为块号*/
int size_PT;
int no_page,no_block;/* no_page,no_block 分别是页号和块号*/
int if_quit1; /*if_quit1退出子程序标志*/
int i,j;/*j表示下一个将被置换的页面位置*/
int add_logic,add_sys;/*逻辑地址和绝对地址*/
int if_page;/*中断标志*/
if_quit1=0;/*退出标志*/
/*初始化页表*/
printf("\n please input size of the page table: ");
scanf("%d",&size_PT);
j=size_PT-1;

printf("\n now initialize the page table, please input page number and block number \n");
for(i=0;i<=size_PT;i++)
{
printf("page number:");
scanf("%d",&no_page);
printf("block number:");
scanf("%d",&no_block);
array[i][0]=no_page;
array[i][1]=no_block;
}
printf("initializing complete");
/*输出初始化页表*/
printf("\nPage table: \n");
for(i=0;i<=size_PT;i++)
{
printf("page:%5d",array[i][0]);
printf("block:%5d",array[i][1]);
printf("\n");
}
printf("\n");
/*地址变换*/
while(if_quit1==0)
{
if_page=1;
printf("\n input the address wantted to be translated(0 exit):");
scanf("%x",&add_logic);
if(add_logic==0) if_quit1=1;
else
{
no_page=add_logic/size_pa;
for(i=0;i<size_PT;i++)
{
if(array[i][0]==no_page)
{
add_sys=add_logic%size_pa+array[i][1]*size_pa;
if_page=0;
}
else if_page=if_page*1;
if(if_page==1)
{
add_sys=add_logic%size_pa+array[j][1]*size_pa;
printf("\n intermittence occured,page%d has been replaced with page%\n",array[j][0],no_page);
array[j][0]=no_page;
j=(j+1)%size_PT;
}
printf("the target address is:%x\n",add_sys);
printf("\nPage table:\n");
for(i=0;i<size_PT;i++)
{
printf("page:%d",array[i][0]);
printf("block:%d",array[i][1]);
printf("\n");
}
}
}
}
}
/*页面置换模拟:输入页面序列,缺页时按FIFO的策略进行页面置换。*/
/*输出置换情况,和缺页次数*/
/*假设页表大小不超过max,输入的页面数不超过max*1O*/
/*程序执行流程:*/
/*初始化:输入分配的块数,输入页面序列*/
/*输出依次访问一个页面后的页表,然后输出缺页中断总次数*/

/**********主程序*************/
void main()
{

int if_quit0;/*if-quit0退出主程序标志*/
int n_func;
if_quit0=0;
while(if_quit0==0)
{
printf("\n please input number of the funotion you want to execute\n");
printf("l--address translating,2--page simulating, 0--exit,");
scanf("%d",&n_func);
if(n_func==1) add_tran();
if(n_func==2) page_si();
if(n_func==0) if_quit0=1;
}
}
没花鹿 2010-07-09
  • 打赏
  • 举报
回复
先把{}整匹配了,否则看不懂
barech 2010-07-08
  • 打赏
  • 举报
回复
顶一下吧,没做过,在此围观

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧