使用C语言模拟时钟置换页法
下面是题目
以下是代码,不保证最优
#include<stdio.h>
#define PAGE_SIZE 4096 //定义页面大小为 4KB
#define PAGE_NUM 4 //定义分配给进程的物理页帧数为 4 页
#define VIRTURAL_SPACE 8 //定义进程的虚拟地址空间大小为 8 页
int main(){
int n;
int i;
int page_now;
int page_line;
int page_change;
int page[PAGE_NUM];
int page_p[VIRTURAL_SPACE];
int page_r[VIRTURAL_SPACE];
int page_vir[VIRTURAL_SPACE];
int add_phy;
for(i=0;i<VIRTURAL_SPACE;i++){
page_p[i] = 0;
page_r[i] = 0;
page_vir[i] = 0;
}
page_now = 0;
page_line = 0;
page_change = 0;
add_phy = 0;
for(i=0;i<PAGE_NUM;i++){
page[i] = -1;
}
printf("please input the virtual address (end of -1):");
scanf("%d", &n);
while(n >= 0){
page_line = n / PAGE_SIZE;
if(page_p[page_line] == 1){
add_phy = n;
printf("the page is in the RAM, and the physical address is %d\n",add_phy);
//刷新r
for(i=0;i<VIRTURAL_SPACE;i++){
if(i != page_line){
page_r[i] = 0;
}
else{
page_r[i] = 1;
}
}
}
else{
printf("the page is not in the RAM!\n");
if(page_now < PAGE_NUM){
printf("there are free pages, we can get NO.%d page!\n",page_now);
page_now++;
page[page_change] = page_line;
for(i=0;i<VIRTURAL_SPACE;i++){
if(i != page_line){
page_r[i] = 0;
}
else{
page_r[i] = 1;
}
}
page_r[page_line] = 1;
page_vir[page_line] = page_change;
page_change=(page_change + 1)%PAGE_NUM;
}
else{
printf("there is no free page in RAM,so we have to exchange one!\n");
if(page_r[page[page_change]] == 1){
printf("page NO.%d is just read, we should search next one!\n",page_change);
page_change=(page_change + 1)%PAGE_NUM;
}
printf("NO.%d page is exchanged!!\n",page_change);
page[page_change] = page_line;
page_vir[page_line] = page_change;
page_change=(page_change + 1)%PAGE_NUM;
for(i=0;i<VIRTURAL_SPACE;i++){
if(i != page_line){
page_r[i] = 0;
}
else{
page_r[i] = 1;
}
}
}
}
for(i=0;i<VIRTURAL_SPACE;i++){
page_p[i] = 0;
}
for(i = 0;i<PAGE_NUM;i++) {
if(page[i] != -1){
page_p[page[i]] = 1;
}
}
printf("pa_num\tR\tP\n");
for(i = 0;i<VIRTURAL_SPACE;i++){
printf("%d\t%d\t%d\n",page_vir[i],page_r[i],page_p[i]);
}
printf("please input the virtual address (end of -1):");
scanf("%d",&n);
}
}