C语言实现分页式存储系统内存分配:处理进程请求与页号查询
```c #include <stdio.h> #include <string.h> #define BLOCKS 64 int main() { int blocks[BLOCKS]; // 存储器块状态,0表示空闲,1表示已占用 int requests[4]; // 四个进程的请求块数 int n, m; // 进程编号和页号 int allocated[BLOCKS]; // 记录已分配的块号 // 初始化存储器块状态 for (int i = 0; i < BLOCKS; i++) { blocks[i] = 0; } // 已占用的块号 int occupied[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}; for (int i = 0; i < 10; i++) { blocks[occupied[i]] = 1; } // 读取四个进程的请求块数 for (int i = 0; i < 4; i++) { scanf("%d", &requests[i]); } // 读取进程编号和页号 scanf("%d %d", &n, &m); // 检查进程编号是否有效 if (n < 1 || n > 4) { printf("wait\n"); return 0; } // 检查页号是否合理 if (m < 0 || m >= requests[n - 1]) { printf("error\n"); return 0; } // 分配内存块 int free_blocks = 0; for (int i = 0; i < BLOCKS; i++) { if (blocks[i] == 0) { free_blocks++; } } int total_requested = 0; for (int i = 0; i < 4; i++) { total_requested += requests[i]; } // 检查是否有足够的空闲块 if (free_blocks < total_requested) { printf("wait\n"); return 0; } // 找到当前进程的起始块号 int start_block = 0; for (int i = 0; i < n - 1; i++) { start_block += requests[i]; } // 从起始块号开始分配 int block_number = -1; int allocated_count = 0; for (int i = 0; i < BLOCKS && allocated_count < requests[n - 1]; i++) { if (blocks[i] == 0) { blocks[i] = 1; allocated[allocated_count + start_block] = i; allocated_count++; } } // 输出结果 if (m < allocated_count) { printf("%d\n", allocated[start_block + m]); } else { printf("error\n"); } return 0; } ``` ### 需要注意的逻辑点 1. **块号初始化**:确保所有块号在程序开始时都初始化为0,表示未占用。 2. **已占用块号处理**:将已占用的块号设置为1,避免重复分配。 3. **进程编号和页号检查**:确保输入的进程编号和页号在合理范围内,否则直接返回错误或等待状态。 ######[AI写代码神器 | 748点数解答 | 2024-11-21 17:19:10]
- 易语言实现高并发 HTTP 操作:多线程、线程池与异步操作实战(字节豆包 | 849点数解答 | 2025-06-03 23:17:33)295
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)383
- CentOS下Java进程出现futex_wait_queue_me问题的处理全流程(阿里通义 | 283点数解答 | 2023-11-20 14:51:26)489
- 补全含错误代码:Vue结合Element UI组件实现查询、新增及表格展示功能 ( | 400点数解答 | 2023-12-19 15:20:50)454
- 替雷利珠单抗致免疫相关性糖尿病:病例报道与机制探讨,为临床用药敲响警钟( | 164点数解答 | 2024-10-11 14:52:52)291
- 单线程频繁查ClickHouse致CPU飙升?这些优化方案速看!(DeepSeek | 491点数解答 | 2025-02-13 17:49:54)251
- MySQL:巧用 NOT LIKE 查询字段不包含特定字符串及注意要点 (DeepSeek | 264点数解答 | 2025-02-13 18:25:01)196
- Python 代码转 C++:计算花朵鲜艳值总和(字节豆包 | 408点数解答 | 2026-04-19 21:50:57)21
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)352
- PHP代码:循环检测域名状态,借助HTTP请求与CURL实现(GPT | 947点数解答 | 2024-10-27 11:56:50)277
- PHP实现微信授权登录,完整获取用户信息与手机号流程揭秘(阿里通义 | 1041点数解答 | 2024-11-06 21:46:35)240
- Java 创建 HTTP POST 请求实现文件上传:代码示例与注意要点 (字节豆包 | 300点数解答 | 2024-12-06 16:07:20)356