分页存储方式管理模拟 C++实现

您所在的位置:网站首页 分页式存储管理 分页存储方式管理模拟 C++实现

分页存储方式管理模拟 C++实现

2023-12-24 07:31| 来源: 网络整理| 查看: 265

分页存储方式管理模拟 C++实现 1.任务要求

目的:了解分页存储管理方式的原理和实现的基本过程。 设计要求:设计一个简单分页存储管理系统,要求实现以下功能。 (1) 定义分页的地址结构和页表结构。 (2) 对进程的逻辑地址空间、页表起址、给定的逻辑地址进行初始化。 (3) 实现从逻辑地址到物理地址的变换。 (4) 实现“主存空间的共享和保护”功能。 (5) 实现“主存扩充”虚拟功能。

2.代码实现

C++源码如下(编译环境:Mingw-w64/gcc 8.1.0):

//物理块:4KB; 物理块数:256;共享状态:1共享,0不共享;访问状态:1访问过,0未访问过 #include #include #include #include #include using namespace std; int init(); //初始化 int show_Share_Page(); //展示共享页表 int t = 1; int p = -1; //clock算法指针 int q = 0; int c = 0; int ram_block_state[256]; //物理块分配状态 struct Pages_item { //页表项 int pages_num; int ram_block_num; int share_state; //1共享,0不共享 int position_state;//1在内存,0不在内存 int visit;//1最近被访问;0最近未被访问 }; struct share_page_item //共享页表项 { int pro_id; int pages_num; int share_state; }; vector Share_Page; //共享页表 class PCB { int id; int page_item_sum; int ram_block[5]; vector Page; public: PCB(); int show(); //展示页表 int inquiry(); //输入逻辑地址,并转化为物理地址 int clock(); //置换算法; }; PCB::PCB() { id = t++; int r = 0; srand(time(0)); //分配进程物理块 for (int i = 0; i int a = 0; ram_block[i] = rand() % 0xff + 1; if (ram_block_state[ram_block[i]] == 0) { ram_block_state[ram_block[i]] = 1; break; } else a++; if (a == 256) { cout r = 1; break; } } if (r == 1) { r = 0; i--; } } //分配进程页数 page_item_sum = rand() % 10 + 3; for (int i = 0; i b.pro_id = id; b.pages_num = a.pages_num; b.share_state = a.share_state; Share_Page.push_back(b); } } } int PCB::show() { cout cout hex >> a) || a b = 1; if (Page[i].position_state == 0) { int a = clock(); //选择出要置换的页面 int t = Page[a].ram_block_num; Page[a].ram_block_num = Page[i].ram_block_num; Page[i].ram_block_num = t; Page[i].position_state = 1; Page[a].position_state = 0; } ram_block_ = ram_block[Page[i].ram_block_num]; Page[i].visit = 1; break; } if (b == 0) { cout for (int i = 0; i init(); PCB one; PCB two; int b = 0; int c = 0; while (1) { if (b == 0) { one.show(); two.show(); } if (c == 0) { cout two.inquiry(); b = 0; c = 0; } else if (a == 3) { show_Share_Page(); b = 1; c = 0; } else if (a == 4) break; else { cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3