把参数换成别的
时间: 2023-09-20 20:08:10 浏览: 37
你是想让我帮你改变代码中的变量名吗?如果是的话,可以参考下面的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define PAGE_SIZE 32
#define PAGE_NUM 4
#define FRAME_NUM 8
#define BACKINGSTORE_SIZE 256
int page_table[PAGE_NUM];
char physical_memory[FRAME_NUM][PAGE_SIZE];
char backing_store[BACKINGSTORE_SIZE];
void load_page_to_frame(int page_idx, int idx) {
FILE *fp;
fp = fopen("pdata.bin", "rb");
if (fp == NULL) {
printf("Failed to open file.\n");
exit(1);
}
fread(physical_memory[idx], sizeof(char), PAGE_SIZE, fp);
fseek(fp, page_idx * PAGE_SIZE, SEEK_SET);
fclose(fp);
}
int get_physical_address(int page_idx, int page_offset) {
int idx = page_table[page_idx]; // idx is frame index
if (idx == -1) {
int c = 0, r = 0;
while (c < FRAME_NUM) {
if (page_table[c] != -1) {
r++;
}
c++;
}
if (r == FRAME_NUM) {
printf("Page fault happen.\n");
idx = rand() % FRAME_NUM;
int page_idx_replace = -1;
for (int c = 0; c < PAGE_NUM; c++) {
if (page_table[c] == idx) {
page_idx_replace = c;
break;
}
}
page_table[page_idx_replace] = -1;
} else {
idx = r;
}
page_table[page_idx] = idx;
load_page_to_frame(page_idx, idx); // Loading page
}
return idx * PAGE_SIZE + page_offset;
}
int main() {
for (int i = 0; i < FRAME_NUM; i++) {
page_table[i] = -1;
}
FILE *fp;
fp = fopen("pdata.bin", "rb");
if (fp == NULL) {
printf("Failed to open file.\n");
exit(1);
}
fread(backing_store, sizeof(char), BACKINGSTORE_SIZE, fp);
fclose(fp);
printf("data in pdata.bin:\n");
int j = 0;
for (int i = 0; i < BACKINGSTORE_SIZE;) {
if (i % 32 == 0) {
printf("page %d\n", j++);
}
printf("%d\t", backing_store[i++]);
if (i % 8 == 0) {
printf("\n");
}
}
// read the logical address from la.txt
fp = fopen("la.txt", "r");
if (fp == NULL) {
printf("Failed to open file\n");
exit(1);
}
int ld; // logical address
int page_idx, page_offset;
int pd; // physical address
int v; // value
// get two address and print out
while (fscanf(fp, "%d", &ld) != EOF) {
page_idx = ld / PAGE_SIZE;
page_offset = ld % PAGE_SIZE;
pd = get_physical_address(page_idx, page_offset); // get the physical address
v = backing_store[page_offset + page_idx * PAGE_SIZE]; // find value in backing store
printf("\npage no: %d offset: %d\nVirtual address: %d Physical address: %d Value: %d\n", page_idx, page_offset, ld, pd, v);
}
fclose(fp);
return 0;
}
```
注意,这里修改的只是变量名,代码逻辑和功能并没有改变。