希冀 操作系统 实验四 段式存储管理

目录

一.补全代码及分析

二.思考题

三.总结


一.补全代码及分析

申请进程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++;
}

代码结构分析

  1. 输入进程基本信息阶段
    • 通过scanf函数获取用户输入的进程名字(%s格式)和进程的段数(%d格式)。这里使用duanbiaos数组存储进程相关信息,duanbiaonum可能是用于记录当前进程的索引或者数量。
  2. 段大小输入与地址计算阶段
    • for循环(for (int j = 0; j < duanbiaos[duanbiaonum].num; j++))中:
      • 对于每个段,获取用户输入的段大小(%ld格式)。
      • 计算该段的起始地址(duanbiaos[duanbiaonum].duans[j].addr = paddr;),并通过累加段大小来更新下一段的起始地址(paddr += duanbiaos[duanbiaonum].duans[j].capacity;)。
  3. 进程状态标记与计数更新阶段
    • 将进程标记为未调用状态(duanbiaos[duanbiaonum].Isdiaoyong = 0;)。
    • 计算并存储进程的总大小(duanbiaos[duanbiaonum].total = paddr;)。
    • 增加进程数量的计数(duanbiaonum++;

函数diaodu()的主要功能是将某进程装入内存,在装入之前需要判断剩余可用空间是否能够满足内存需求,如果满足则将其装入内存

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值