Compare commits
No commits in common. "5676194e148df7138551f05b61a6ac75f8157c02" and "c593f3b0e9ac2f8367700343d079fe26f1d2cf5a" have entirely different histories.
5676194e14
...
c593f3b0e9
53
操作系统/题目5.py
53
操作系统/题目5.py
@ -1,53 +0,0 @@
|
|||||||
def 安全检查(可用, 最大需求, 分配, 进程):
|
|
||||||
n = len(进程)
|
|
||||||
工作 = 可用.copy()
|
|
||||||
完成 = [False] * n
|
|
||||||
安全序列 = []
|
|
||||||
|
|
||||||
需求 = []
|
|
||||||
for i in range(n):
|
|
||||||
需求.append([最大需求[i][j] - 分配[i][j] for j in range(3)])
|
|
||||||
|
|
||||||
while True:
|
|
||||||
找到 = False
|
|
||||||
for i in range(n):
|
|
||||||
if not 完成[i] and all(需求[i][j] <= 工作[j] for j in range(3)):
|
|
||||||
for j in range(3):
|
|
||||||
工作[j] += 分配[i][j]
|
|
||||||
完成[i] = True
|
|
||||||
安全序列.append(进程[i])
|
|
||||||
找到 = True
|
|
||||||
break
|
|
||||||
|
|
||||||
if not 找到:
|
|
||||||
break
|
|
||||||
|
|
||||||
return all(完成), 安全序列
|
|
||||||
|
|
||||||
def 主函数():
|
|
||||||
资源 = list(map(int, input().split()))
|
|
||||||
|
|
||||||
进程 = []
|
|
||||||
最大需求 = []
|
|
||||||
分配 = []
|
|
||||||
|
|
||||||
for _ in range(4):
|
|
||||||
行 = input().split()
|
|
||||||
进程.append(行[0])
|
|
||||||
最大需求.append(list(map(int, 行[1:4])))
|
|
||||||
分配.append(list(map(int, 行[4:7])))
|
|
||||||
|
|
||||||
可用 = 资源.copy()
|
|
||||||
for i in range(4):
|
|
||||||
for j in range(3):
|
|
||||||
可用[j] -= 分配[i][j]
|
|
||||||
|
|
||||||
安全状态, 序列 = 安全检查(可用, 最大需求, 分配, 进程)
|
|
||||||
|
|
||||||
if 安全状态:
|
|
||||||
print(" ".join(序列))
|
|
||||||
else:
|
|
||||||
print("false")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
主函数()
|
|
45
操作系统/题目6.py
45
操作系统/题目6.py
@ -1,45 +0,0 @@
|
|||||||
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(计算空闲分区数量(进程数量, 分配信息, 回收进程))
|
|
28
操作系统/题目7.py
28
操作系统/题目7.py
@ -1,28 +0,0 @@
|
|||||||
def 计算物理地址(段表, 逻辑地址):
|
|
||||||
段号, 偏移 = 逻辑地址
|
|
||||||
|
|
||||||
if 段号 < 0 or 段号 >= len(段表):
|
|
||||||
return "interrupt"
|
|
||||||
|
|
||||||
起始地址, 段长度 = 段表[段号]
|
|
||||||
|
|
||||||
if 偏移 < 0 or 偏移 >= 段长度:
|
|
||||||
return "interrupt"
|
|
||||||
else:
|
|
||||||
return 起始地址 + 偏移
|
|
||||||
|
|
||||||
段表输入 = input().split()
|
|
||||||
逻辑地址输入 = input().split()
|
|
||||||
|
|
||||||
段表 = []
|
|
||||||
for i in range(0, len(段表输入), 2):
|
|
||||||
起始地址 = int(段表输入[i])
|
|
||||||
段长度 = int(段表输入[i + 1])
|
|
||||||
段表.append((起始地址, 段长度))
|
|
||||||
|
|
||||||
段号 = int(逻辑地址输入[0])
|
|
||||||
偏移 = int(逻辑地址输入[1])
|
|
||||||
|
|
||||||
物理地址 = 计算物理地址(段表, (段号, 偏移))
|
|
||||||
|
|
||||||
print(物理地址)
|
|
50
操作系统/题目8.py
50
操作系统/题目8.py
@ -1,50 +0,0 @@
|
|||||||
def 初始化位示图():
|
|
||||||
bitmap = [0] * 64
|
|
||||||
已占用 = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
|
|
||||||
for 块 in 已占用:
|
|
||||||
bitmap[块] = 1
|
|
||||||
return bitmap
|
|
||||||
|
|
||||||
def 分配内存(bitmap, 进程大小):
|
|
||||||
进程块 = {}
|
|
||||||
|
|
||||||
for 进程ID, 大小 in enumerate(进程大小, 1):
|
|
||||||
if 大小 > 54:
|
|
||||||
continue
|
|
||||||
|
|
||||||
块列表 = []
|
|
||||||
计数 = 0
|
|
||||||
|
|
||||||
for i in range(64):
|
|
||||||
if len(块列表) == 大小:
|
|
||||||
break
|
|
||||||
if bitmap[i] == 0:
|
|
||||||
块列表.append(i)
|
|
||||||
bitmap[i] = 1
|
|
||||||
计数 += 1
|
|
||||||
|
|
||||||
if 计数 < 大小:
|
|
||||||
for 块 in 块列表:
|
|
||||||
bitmap[块] = 0
|
|
||||||
else:
|
|
||||||
进程块[进程ID] = 块列表
|
|
||||||
|
|
||||||
return 进程块
|
|
||||||
|
|
||||||
def 主函数():
|
|
||||||
进程大小 = list(map(int, input().split()))
|
|
||||||
查询进程, 查询页面 = map(int, input().split())
|
|
||||||
|
|
||||||
bitmap = 初始化位示图()
|
|
||||||
|
|
||||||
进程块 = 分配内存(bitmap, 进程大小)
|
|
||||||
|
|
||||||
if 查询进程 not in 进程块:
|
|
||||||
print("wait")
|
|
||||||
elif 查询页面 >= 进程大小[查询进程-1] or 查询页面 < 0:
|
|
||||||
print("error")
|
|
||||||
else:
|
|
||||||
print(进程块[查询进程][查询页面])
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
主函数()
|
|
Loading…
x
Reference in New Issue
Block a user