目录
一.补全代码及分析
申请进程apply()函数完成了新开进程的功能,同时还记录了该进程需要的内存空间段数和每段的具体大小,你需要补全该函数。
补全的代码为:
void apply() {
printf("请输入进程的名字:");
scanf("%s", duanbiaos[duanbiaonum].processname);
printf("请输入该进程的段数:");
scanf("%d", &duanbiaos[duanbiaonum].num);
if (duanbiaos[duanbiaonum].num > 10) {
printf("段数太多,申请失败\n");
return;
}
int paddr = 0;
for (int j = 0; j < duanbiaos[duanbiaonum].num; j++) {
printf("进程第%d段的大小是:", j + 1);
scanf("%ld", &duanbiaos[duanbiaonum].duans[j].capacity);
duanbiaos[duanbiaonum].duans[j].addr = paddr;
paddr += duanbiaos[duanbiaonum].duans[j].capacity;
}
duanbiaos[duanbiaonum].Isdiaoyong = 0;
duanbiaos[duanbiaonum].total = paddr;
duanbiaonum++;
}
代码结构分析
- 输入进程基本信息阶段
- 通过
scanf
函数获取用户输入的进程名字(%s
格式)和进程的段数(%d
格式)。这里使用duanbiaos
数组存储进程相关信息,duanbiaonum
可能是用于记录当前进程的索引或者数量。
- 通过
- 段大小输入与地址计算阶段
- 在
for
循环(for (int j = 0; j < duanbiaos[duanbiaonum].num; j++)
)中:- 对于每个段,获取用户输入的段大小(
%ld
格式)。 - 计算该段的起始地址(
duanbiaos[duanbiaonum].duans[j].addr = paddr;
),并通过累加段大小来更新下一段的起始地址(paddr += duanbiaos[duanbiaonum].duans[j].capacity;
)。
- 对于每个段,获取用户输入的段大小(
- 在
- 进程状态标记与计数更新阶段
- 将进程标记为未调用状态(
duanbiaos[duanbiaonum].Isdiaoyong = 0;
)。 - 计算并存储进程的总大小(
duanbiaos[duanbiaonum].total = paddr;
)。 - 增加进程数量的计数(
duanbiaonum++;
)
- 将进程标记为未调用状态(
函数diaodu()的主要功能是将某进程装入内存,在装入之前需要判断剩余可用空间是否能够满足内存需求,如果满足则将其装入内存