From b6ef8f4aef1cfbb443bfed9fb7433960334820de Mon Sep 17 00:00:00 2001 From: GuanM <30427262+sxhoio@users.noreply.github.com.> Date: Thu, 7 Nov 2024 17:15:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=A2=98=E7=9B=AEF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 操作系统/题目6.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 操作系统/题目6.py diff --git a/操作系统/题目6.py b/操作系统/题目6.py new file mode 100644 index 0000000..baf15e8 --- /dev/null +++ b/操作系统/题目6.py @@ -0,0 +1,45 @@ +def 计算空闲分区数量(进程数量, 分配信息, 回收进程): + 进程映射 = {} + for i in range(进程数量): + 起始地址 = 分配信息[i*2] + 大小 = 分配信息[i*2+1] + 进程映射[f'p{i+1}'] = (起始地址, 大小) + + 回收列表 = 回收进程.split() + for 进程 in 回收列表: + if 进程 not in 进程映射: + return "false" + + 已分配区域 = [] + for i in range(进程数量): + 进程 = f'p{i+1}' + if 进程 not in 回收列表: + 起始地址, 大小 = 进程映射[进程] + 已分配区域.append((起始地址, 起始地址 + 大小)) + + if not 已分配区域: + return 1 + + 已分配区域.sort() + + 空闲数量 = 1 + + if 已分配区域[0][0] > 0: + 空闲数量 = 1 + else: + 空闲数量 = 0 + + for i in range(len(已分配区域)-1): + if 已分配区域[i+1][0] > 已分配区域[i][1]: + 空闲数量 += 1 + + if 已分配区域[-1][1] < 512: + 空闲数量 += 1 + + return 空闲数量 + +进程数量 = int(input()) +分配信息 = list(map(int, input().split())) +回收进程 = input() + +print(计算空闲分区数量(进程数量, 分配信息, 回收进程))