?? 25.c
字號:
#include<stdio.h>
#include<stdlib.h>
#define PAGENUM 6 /*主存中允許的最大的頁數(shù)*/
#define MAXPAGENUM 15 /* 一個程序包含的最大頁數(shù)*/
/*定義棧的結(jié)構(gòu) 即置換器*/
typedef struct stack
{
int page[PAGENUM];
int head;
}PAGER;
/*定義一個置換器*/
PAGER pager;
/*棧的初始化*/
void InitPager()
{
int top = 0;
int i,j,tmp;
int r;
randomize();
r = random(MAXPAGENUM);
pager.page[top++] = r;
while(top < PAGENUM )
{
randomize();
r = random(MAXPAGENUM);
for(j =0;j<top;j++)
{
if(r == pager.page[j])
{
break;
}
if(j == top-1)
pager.page[top++] = r;
}
}
pager.head = PAGENUM - 1;
}
/*棧中成員的移動,即移動頁面的操作*/
void MovingPage(int Begin )
{
int i;
for(i = Begin; i < PAGENUM-1; i++)
{
pager.page[i] = pager.page[i+1] ;
}
}
/*出棧操作,即 交換出頁面的操作 */
void PopPage(int p)
{
MovingPage(p);
pager.head = PAGENUM - 2;
}
/*入棧操作 ,即換進新頁面的操作*/
void PushPage(int page)
{
pager.head = PAGENUM-1;
pager.page[pager.head] = page;
}
/*打印主存中的頁面*/
void printPager()
{
int i;
printf("The pages in the pager is:");
for(i = 0; i< PAGENUM;i++)
{
printf(" %d ",pager.page[i]);
}
printf("\n");
}
/*處理頁面的換進和換出*/
void PagingProcess()
{
int rdm;
int i;
randomize();
rdm = random(MAXPAGENUM);
for(i = 0; i< PAGENUM; i++)
{
if(rdm == pager.page[i])
{
printPager();
printf("The page [%d] will be accessed\n",rdm);
PopPage(i);
PushPage(rdm);
printPager();
break;
}
if(i == PAGENUM-1)
{
printPager();
printf("The page [0] will be paged out\n");
PopPage(0);
printf("The page [%d] will be paged in\n",rdm);
PushPage(rdm);
printPager();
}
}
}
int main()
{
int i;
clrscr();
for(i = 0; i<3; i++)
{
InitPager();
printf("ROUND %d:\n\n",i+1);
PagingProcess();
}
getch();
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -