项目概述
这个 Python 项目主要实现了对计算机 CPU 相关信息的监测以及死锁检测的功能,并通过图形用户界面(Tkinter)展示 CPU 信息,同时将相关信息记录到日志中。
功能模块
1. CPU 信息获取
项目定义了 CPUInfo 类来处理与 CPU 相关的各种信息获取操作。在这个类中:
初始化方法 __init__ 定义了一系列用于存储 CPU 不同信息的属性,如物理核心数量、逻辑核心数量、CPU 使用率等。同时还设置了模拟的资源总量、已分配资源和需求资源等相关数据结构,并创建了一个线程锁用于资源分配和释放的同步操作。
针对不同的 CPU 信息指标,如物理核心数量(_get_cpu_count)、逻辑核心数量(_get_cpu_count_logical)、CPU 使用率(_get_cpu_usage)、每个核心的 CPU 使用率(_get_cpu_per_core_usage)、CPU 时间信息(_get_cpu_times)以及 CPU 频率(_get_cpu_freq),都有对应的私有方法来获取相应信息。这些方法在获取信息前会先通过 request_resources 方法请求所需资源,获取完成后再通过 release_resources 方法释放资源,以模拟资源分配和管理的过程。
2. 资源管理
request_resources 方法用于在获取 CPU 信息前检查并分配所需资源。它会根据指定的进程(对应不同的 CPU 信息获取操作)检查资源是否足够,如果资源不足则抛出异常;如果资源充足,则从模拟的资源总量中扣除相应资源,并记录已分配资源的情况。
release_resources 方法则在 CPU 信息获取完成后,将之前分配的资源释放回模拟的资源总量中,并相应地更新已分配资源的数据结构。
3. 死锁检测
detect_deadlock 方法实现了死锁检测的功能。它通过不断循环检查当前所有需要资源的进程,模拟资源分配过程,判断是否所有进程都能顺利完成资源分配并执行完毕。如果所有进程都能完成,则表示系统无死锁,记录相应日志信息;如果存在进程无法完成资源分配,即判定系统检测到死锁,此时会通过 Tkinter 弹出警告框提示用户,并抛出异常终止程序。