一、题目
二、代码
#include<iostream>
#include<vector>
using namespace std;
struct Work {
char job;
vector<int>pageChart;
};
vector<bool>mem(100, false);
int freeRoom = 100;
vector<Work>workList;
void allocate()
{
char job;
int size;
cin >> job>>size;
int pageNum = size / 1000;
int excess = size % 1000;
if (excess != 0)
pageNum++;
if (freeRoom < pageNum) {
cout << "内存容量不足,无法分配" << endl;
return;
}
Work work;
work.job = job;
int count = 0;
for (int i = 0; i < 100; i++) {
if (mem[i] == false) {
mem[i] = true;
work.pageChart.push_back(i);
count++;
if (count == pageNum)
break;
}
}
workList.push_back(work);
freeRoom -= pageNum;
}
void recycle() {
char job;
cin >> job;
vector<Work>::iterator it;
for (it= workList.begin(); it != workList.end(); it++) {
if (it->job == job)
break;
}
for (int i = 0; i < it->pageChart.size(); i++) {
mem[it->pageChart[i]] = false;
}
freeRoom += it->pageChart.size();
workList.erase(it);
}
void showInfo() {
for (Work work:workList) {
cout << work.job << " " << work.pageChart.size()<<" ";
for (int i : work.pageChart)
cout << i << ' ';
cout << endl;
}
}
void mapping(){
char job;
int address;
cin >> job >> address;
int page = address / 1000;
int offset = address % 1000;
for (Work work : workList) {
if (work.job == job) {
if (page >= work.pageChart.size()) {
cout << "越界访问" << endl;
return;
}
int block = work.pageChart[page];
cout << "页框:" << block << " " << "页内偏移:" << offset << endl;;
break;
}
}
}
int main() {
while (1)
{
cout << "0.退出" << endl;
cout << "1.分配" << endl;
cout << "2.回收" << endl;
cout << "3.情况" << endl;
cout << "4.查询物理地址" << endl;
int choice;
int flag = 0;
cin >> choice;
switch (choice)
{
case 0:
flag = 1;
break;
case 1:
allocate();
break;
case 2:
recycle();
break;
case 3:
showInfo();
break;
case 4:
mapping();
break;
default:
cout << "请输入正确的指令";
break;
}
if (flag == 1)
break;
}
cout << "退出管理" << endl;
return 0;
}
三、测试数据
四、运行结果