哈尔滨理工大学课程设计报告
if(pp->nxt != NULL) { pp->nxt->pre = p; } free(pp);
} else if((p->pre == &subHead || p->pre->state == Busy) && (p->nxt != NULL && p->nxt->state == Free)) { // 情况2:只合并下面的分区 pp = p->nxt; p->size += pp->size; p->state = Free; p->taskId = -1; p->nxt = pp->nxt; if(pp->nxt != NULL) { pp->nxt->pre = p; } free(pp);
} else if((p->pre != &subHead && p->pre->state == Free) && (p->nxt == NULL || p->nxt->state == Busy)) { // 情况3:只合并上面的分区 pp = p; p = p->pre; p->size += pp->size; p->nxt = pp->nxt; if(pp->nxt != NULL) { pp->nxt->pre = p; } free(pp);
哈尔滨理工大学课程设计报告
} else {
// 情况4:上下分区均不用合并 p->state = Free; p->taskId = -1; } } p = p->nxt; }
if(flag == 1) { // 回收成功
printf(\内存分区回收成功...\\n\ return 1; } else {
// 找不到目标作业,回收失败
printf(\找不到目标作业,内存分区回收失败...\\n\ return 0; } }
/* int start(int task) { }
int end(int task) {
clock_t s;
clock_t s; s=(int)clock(); return s;
哈尔滨理工大学课程设计报告
}*/
s=(int)clock(); return s;
// 显示空闲分区链情况 void showSubArea() {
printf(\ printf(\ 当前的内存分配情况如下: **\\n\ printf(\ printf(\起始地址 | 空间大小 | 工作状态 | 作业号 **\\n\ subAreaNode *p = subHead.nxt; while(p != NULL) {
printf(\ printf(\
printf(\ k |\ printf(\ k |\
printf(\ %5s |\ if(p->taskId > 0) {
printf(\ \ } else {
printf(\ \ }
printf(\ p = p->nxt; }
printf(\
哈尔滨理工大学课程设计报告
} int main() {
int option, ope, taskId, size; // 初始化空闲分区链 intSubArea(); // 选择分配算法 l1: while(1) {
printf(\
printf(\请选择要模拟的分配算法:\\n0 表示首次适应算法\\n1 表示最佳适应算法\\n2 表示最坏适应算法\\n3 退出\\n\ printf(\ scanf(\
system(\
if(option == 0) {
printf(\你选择了首次适应算法,下面进行算法的模拟\\n\ break;
} else if(option == 1) {
printf(\你选择了最佳适应算法,下面进行算法的模拟\\n\ break;
} else if(option == 2) {
printf(\你选择了最坏适应算法,下面进行算法的模拟\\n\ break; }
else if(option == 3){
exit(0);
哈尔滨理工大学课程设计报告
}
else {
printf(\错误:请输入 0/1\\n\\n\ } }
// 模拟动态分区分配算法 while(1) {
printf(\
printf(\
printf(\ 1: 分配内存\\n 2: 回收内存\\n 3: 返回上一级菜单\\n 退出 \\n\\n\
printf(\ scanf(\
system(\
if(ope == 0) break; if(ope == 1) { // 模拟分配内存
printf(\请输入作业号: \ scanf(\
printf(\请输入需要分配的内存大小(KB): \ scanf(\ if(size <= 0) {
printf(\错误:分配内存大小必须为正值\\n\ continue; }
0: