📄 nibolan.txt
字号:
#include <stdio.h>
#include <stdlib.h>
#define MAX 50
#define n 10
#define m 10
#define blocklength 100
typedef struct
{
int flag;
int page[n][2];
int length;
int stack[n];
int slength;
int rear;
}pbc;
pbc a[MAX];
int pbcnum=MAX;
int MEM[m][m];
int memnum;
int I,J;
main()
{
void init();
void create();
void lookp(int num);
void lookm();
void help();
void fifo_lru(char type);
void end();
void search();
char ch;
init();
do
{
printf("\nWhat do you want to do?");
help();
printf("\nSELECT: ");
ch=bioskey(0);printf("%c",ch);
switch(ch)
{
case'c':
case'C':
create();
break;
case'r':
case'R':
printf("\nFIFO or LRU.(f or l)\nAnswer: ");
ch=bioskey(0);printf("%c",ch);
fifo_lru(ch);
break;
case'e':
case'E':
end();
break;
case'l':
case'L':
lookm();
break;
case'#':
printf("\nThe END.");
sleep(1);
return;
}
}while(ch!='#');
}
void end()
{
int i,t,num,lt,pt,pn;
char ch;
do
{
printf("\nInput the pbc number: ");
scanf("%d",&num);getchar();
if (a[num].flag==0)
{
printf("\nThe pbc hasn't create.");
sleep(1);
return;
}
for (i=0;i<n;i++)
{
if (a[num].page[i][0]!=0)
{
if (a[num].page[i][0]%m==0)
MEM[(a[num].page[i][0]/m)-1][m-1]=0;
else
MEM[a[num].page[i][0]/m][(a[num].page[i][0]%m)-1]=0;
a[num].page[i][0]=0;
a[num].page[i][1]=0;
}
a[num].stack[i]=0;
}
a[num].length=0;
a[num].slength=0;
a[num].rear=-1;
a[num].flag=0;
printf("\nDo you want end another PBC?\nAnswer: ");
ch=bioskey(0);printf("%c",ch);
}while(ch!='n' && ch!='N');
}
void fifo_lru(type)
char type;
{
int i,t,num,lt,pt,pn;
char ch;
printf("\nInput the pbc number: ");
scanf("%d",&num);getchar();
if (a[num].flag==0)
{
printf("\nThe pbc hasn't create.");
sleep(1);
return;
}
do
{
printf("\nInput the Logical address.\nLogical address: ");
scanf("%d",<); getchar();
pn=lt/blocklength;
if ( pn < a[num].length )
{
if (a[num].page[pn][1]==1)
{
printf("\nThe Physical address: %d",(a[num].page[pn][0])*blocklength+lt%blocklength);
if (type=='l' || type=='L')
{
i=0;
while(a[num].stack[i]!=pn)
i++;
for (;i<a[num].rear;i++)
a[num].stack[i]=a[num].stack[i+1];
a[num].stack[a[num].rear]=pn;
}
}
else
{
printf("\nDiaoDu:");
if (a[num].slength>a[num].rear+1)
{
search();
a[num].page[pn][0]=I*m+J+1;
a[num].page[pn][1]=1;
a[num].stack[++a[num].rear]=pn;
printf("\nThe Physical address: %d",(a[num].page[pn][0])*blocklength+lt%blocklength);
}
else
{
a[num].page[a[num].stack[0]][1]=0;
a[num].page[pn][0]=a[num].page[a[num].stack[0]][0];
for (i=0;i<a[num].rear;i++)
a[num].stack[i]=a[num].stack[i+1];
a[num].page[pn][1]=1;
a[num].stack[a[num].rear]=pn;
printf("\nThe Physical address: %d",(a[num].page[pn][0])*blocklength+lt%blocklength);
}
}
}
else
printf("\Out of side.");
lookp(num);
printf("\nDo you want input another Logical?\nAnswer: ");
ch=bioskey(0);printf("%c",ch);
}while(ch!='n' && ch!='N');
printf("\n\nPress any key back to the MENU.");
bioskey(0);
}
void search()
{
if (memnum!=0)
{
for (I=0;I<m;I++)
for (J=0;J<m;J++)
if (MEM[I][J]==0)
{
MEM[I][J]=1;
return;
}
}
else
printf("\nThere is no mem left.");
}
void lookm()
{
int i,j;
clrscr();
for (i=0;i<m;i++)
{
printf("\n");
for (j=0;j<m;j++)
printf("%-2d",MEM[i][j]);
}
printf("\n\nPress any key back to the MENU.");
bioskey(0);
}
void create()
{
int i;
if (pbcnum==0)
{
printf("\ncann't create any more.");
sleep(1);
return;
}
else
{
pbcnum--;
i=0;
while(a[i].flag!=0)
i++;
a[i].flag=1;
printf("\nThe < %d > pbc is built.",i);
printf("\nInput the page's length: ");
scanf("%d",&a[i].length);
printf("Input the stact's length: ");
scanf("%d",&a[i].slength);
}
printf("\nPress any key back to the MENU.");
bioskey(0);
}
void lookp(num)
int num;
{
int i;
if (a[num].flag!=0)
{
printf("\nThe page: ");
for (i=0;i<a[num].length;i++)
if (a[num].page[i][1]!=0)
printf("\npage < %d > is in the mem %d.",i,a[num].page[i][0]);
printf("\nThe stack: ");
for (i=0;i<=a[num].rear;i++)
printf("%d ",a[num].stack[i]);
}
else
{
printf("\nThis produce hasn't create.");
sleep(1);
}
}
void help()
{
clrscr();
printf("\nC Create a produce.");
printf("\nR RUN (FIFO or LRU).");
printf("\nE End one PBC.");
printf("\nL Look MEM.");
printf("\n# End one demostration.");
}
void init()
{
int i,j;
for (i=0;i<MAX;i++)
{
a[i].flag=0;
for (j=0;j<n;j++)
{
a[i].page[j][0]=0;
a[i].page[j][1]=0;
a[i].stack[j]=0;
}
a[i].length=0;
a[i].slength=0;
a[i].rear=-1;
}
for (i=0;i<m;i++)
for (j=0;j<m;j++)
MEM[i][j]=0;
memnum=(m*m);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -