最先适应法c实现,要求根据某一存储分配算法编程,判断系统的空闲分区能否满足某一作业序列的请求。要求运行程序时,输入数据包括:空闲分区表、作业请求序列;程序运行结果是:如果能够满足作业序列的请求,则输出分配后的空闲分区表,否则输出拒绝分配的提示即可
时间: 2024-03-09 22:48:15 浏览: 25
以下是基于最先适应法的内存分配算法的C语言实现,用于判断系统的空闲分区能否满足某一作业序列的请求:
```c
#include <stdio.h>
#define MAX_MEM_SIZE 1024
#define MAX_REQ_SIZE 10
int main() {
int i, j, k;
int mem_size, num_requests;
int memory[MAX_MEM_SIZE] = {0}; // 初始化内存为空闲状态
// 读取内存大小和请求次数
printf("请输入内存大小和请求次数:\n");
scanf("%d %d", &mem_size, &num_requests);
// 读取每个请求的内存大小
int requests[MAX_REQ_SIZE];
printf("请输入每个请求的内存大小:\n");
for (i = 0; i < num_requests; i++) {
scanf("%d", &requests[i]);
}
// 输出初始的空闲分区表
printf("初始的空闲分区表:\n");
int start_addr = 0;
for (i = 0; i < mem_size; i++) {
if (memory[i] == 0) { // 如果当前位置为空闲状态
if (start_addr == -1) { // 如果之前有连续的已分配区域
printf("%d-%d 已分配 ", i-1, i-start_addr-1);
}
start_addr = i;
} else { // 如果当前位置为已分配状态
if (start_addr != -1) { // 如果之前有连续的空闲区域
printf("%d-%d 空闲 ", start_addr, i-start_addr);
}
start_addr = -1;
}
}
if (start_addr != -1) { // 如果最后有连续的空闲区域
printf("%d-%d 空闲 ", start_addr, i-start_addr);
}
printf("\n");
// 使用最先适应法进行内存分配
for (i = 0; i < num_requests; i++) {
for (j = 0; j < mem_size; j++) {
if (memory[j] == 0 && j + requests[i] <= mem_size) { // 如果找到了足够大的空闲区域
for (k = j; k < j + requests[i]; k++) {
memory[k] = 1; // 将这段空闲区域标记为已使用
}
break;
}
}
if (j == mem_size) { // 没有找到足够大的空闲区域
printf("第 %d 个请求 %d 分配失败\n", i+1, requests[i]);
} else { // 找到了足够大的空闲区域
printf("第 %d 个请求 %d 分配成功,起始位置为 %d\n", i+1, requests[i], j);
}
// 输出当前的空闲分区表
printf("当前的空闲分区表:\n");
start_addr = 0;
for (k = 0; k < mem_size; k++) {
if (memory[k] == 0) { // 如果当前位置为空闲状态
if (start_addr == -1) { // 如果之前有连续的已分配区域
printf("%d-%d 已分配 ", k-1, k-start_addr-1);
}
start_addr = k;
} else { // 如果当前位置为已分配状态
if (start_addr != -1) { // 如果之前有连续的空闲区域
printf("%d-%d 空闲 ", start_addr, k-start_addr);
}
start_addr = -1;
}
}
if (start_addr != -1) { // 如果最后有连续的空闲区域
printf("%d-%d 空闲 ", start_addr, k-start_addr);
}
printf("\n");
}
return 0;
}
```
该程序首先读取内存大小和请求次数,然后读取每个请求的内存大小。然后输出初始的空闲分区表。接着,使用最先适应法进行内存分配,并在分配的过程中输出每个请求的分配结果和当前的空闲分区表。如果没有找到足够大的空闲区域,就输出分配失败的信息。最后,程序结束。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)