system/stimulate_operating_system.py
2024-12-05 19:45:11 +08:00

97 lines
3.1 KiB
Python

import sys
import time
from typing import List, Dict, Any
from dataclasses import dataclass, field
# 导入其他模块
from process_management import ProcessManager
from memory_management import MemoryManager
from resource_management import ResourceManager
# from file_system import FileSystem
# from disk_management import DiskManager
from command_interpreter import CommandInterpreter
@dataclass
class OperatingSystem:
"""
模拟操作系统核心类
"""
process_manager: ProcessManager = field(default_factory=ProcessManager)
memory_manager: MemoryManager = field(default_factory=MemoryManager)
resource_manager: ResourceManager = field(default_factory=ResourceManager)
# file_system: FileSystem = field(default_factory=FileSystem)
# disk_manager: DiskManager = field(default_factory=DiskManager)
command_interpreter: CommandInterpreter = field(default_factory=CommandInterpreter)
def execute_job_script(self, script_path: str):
"""
通过命令解释器执行作业脚本
:param script_path: 作业脚本文件路径
"""
try:
# 读取并解析脚本
with open(script_path, 'r') as script_file:
script_lines = script_file.readlines()
# 为脚本创建作业/进程
job = self.process_manager.create_process(script_path)
# 解释并执行命令
for line in script_lines:
line = line.strip()
if line:
self.command_interpreter.execute_command(line, job, self)
# 完成进程
self.process_manager.terminate_process(job)
except Exception as e:
print(f"执行作业脚本 {script_path} 时出错: {e}")
def run_system(self, job_scripts: List[str]):
"""
并发运行多个作业脚本
:param job_scripts: 要执行的脚本路径列表
"""
# 模拟并发作业处理
for script in job_scripts:
try:
self.execute_job_script(script)
except Exception as e:
print(f"作业 {script} 出错: {e}")
# 计算并显示系统性能指标
self.display_system_performance()
def display_system_performance(self):
"""
显示整体系统性能指标
"""
print("\n--- 系统性能指标 ---")
print(f"总进程数: {self.process_manager.get_total_processes()}")
print(f"平均周转时间: {self.process_manager.calculate_avg_turnaround_time():.2f}")
print(f"平均带权周转时间: {self.process_manager.calculate_avg_weighted_turnaround_time():.2f}")
print(f"缺页率: {self.memory_manager.calculate_page_fault_rate():.2%}")
# print(f"磁盘寻道优化: {self.disk_manager.get_seek_optimization_metric()}")
def main():
# 创建操作系统实例
os_sim = OperatingSystem()
# 模拟作业脚本
job_scripts = [
'job1_script.txt',
'job2_script.txt',
'job3_script.txt'
]
# 运行操作系统模拟
os_sim.run_system(job_scripts)
if __name__ == '__main__':
main()