C语言实现:分页式存储系统位示图内存分配与进程页面查询
#include <stdio.h> // 定义位示图长度 #define BIT_MAP_LEN 64 // 函数声明 int allocateMemory(int processNum, int pageNum); void updateBitMap(int pageNum, int state); void printBitMap(); // 位示图数组,用于记录内存块的状态,0表示空闲,1表示占用 int bitMap[BIT_MAP_LEN] = {0}; int main() { // 读取已占用内存块的编号 int occupiedBlocks[10] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}; // 更新位示图 int i; for (i = 0; i < 10; i++) { updateBitMap(occupiedBlocks[i], 1); } // 读取进程申请的内存块数 int process1, process2, process3, process4; scanf("%d %d %d %d", &process1, &process2, &process3, &process4); // 新申请的内存块号 int newBlockNum; // 申请内存块 if (process1 > 0) { newBlockNum = allocateMemory(1, process1); printf("%d\n", newBlockNum); } if (process2 > 0) { newBlockNum = allocateMemory(2, process2); printf("%d\n", newBlockNum); } if (process3 > 0) { newBlockNum = allocateMemory(3, process3); printf("%d\n", newBlockNum); } if (process4 > 0) { newBlockNum = allocateMemory(4, process4); printf("%d\n", newBlockNum); } // 打印更新后的位示图 printBitMap(); return 0; } // 分配内存块函数 int allocateMemory(int processNum, int pageNum) { int i, j; // 遍历位示图数组,查找连续的空闲内存块 int count = 0; // 连续空闲内存块计数器 int startBlockNum = -1; // 起始内存块号 for (i = 0; i < BIT_MAP_LEN; i++) { if (bitMap[i] == 0) { if (count == 0) { startBlockNum = i; } count++; if (count == pageNum) { // 更新位示图 for (j = startBlockNum; j < startBlockNum + pageNum; j++) { updateBitMap(j, 1); } return startBlockNum; } } else { count = 0; } } // 若没有足够的连续空闲内存块,进程在外存等待 printf("wait\n"); return -1; } // 更新位示图函数 void updateBitMap(int pageNum, int state) { bitMap[pageNum] = state; } // 打印位示图函数 void printBitMap() { int i; for (i = 0; i < BIT_MAP_LEN; i++) { printf("%d ", bitMap[i]); if ((i + 1) % 8 == 0) { printf("\n"); } } } ######[AI写代码神器 | 1578点数解答 | 2024-12-02 10:23:09]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)380
- 补全含错误代码:Vue结合Element UI组件实现查询、新增及表格展示功能 ( | 400点数解答 | 2023-12-19 15:20:50)452
- 单线程频繁查ClickHouse致CPU飙升?这些优化方案速看!(DeepSeek | 491点数解答 | 2025-02-13 17:49:54)250
- MySQL:巧用 NOT LIKE 查询字段不包含特定字符串及注意要点 (DeepSeek | 264点数解答 | 2025-02-13 18:25:01)193
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)350
- iOS开发:手把手教你完整实现代理模式,含声明与实现步骤!(阿里通义 | 268点数解答 | 2023-11-08 00:39:55)276
- JavaScript 开发:用 Animation 实现自定义动画的简易教程 (阿里通义 | 333点数解答 | 2023-11-09 01:50:07)267
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)497
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)386
- Vue.js 与 Matter.js 碰撞:轻松实现物理模拟全攻略 (讯飞星火 | 522点数解答 | 2024-05-29 22:26:06)453
- JS实现移动端网页快捷键创建方式及注意事项(阿里通义 | 284点数解答 | 2024-06-05 19:02:59)284
- 车载系统 UML 类图设计:涵盖 Car、Engine、娱乐系统等的完整类定义与关系解析 (字节豆包 | 760点数解答 | 2024-08-15 22:51:04)331