You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

内存分配管理示例项目Python脚本运行逻辑咨询

内存分配管理模拟脚本实现逻辑说明

这是一个带图形界面的操作系统内存分配、优先级任务调度、垃圾回收演示项目,使用链表结构管理模拟内存块,区分超级用户/普通用户两类权限角色,任务素材从同目录文本文件读取,执行过程中会实时展示任务进度与程序实际内存占用。

全局常量与标记

  • __FILENAME__ = "stories.txt":任务素材读取路径,文件内每一行文本对应一个任务加载的内容
  • __KO_SIZE_BYTE__ = 1024:单位换算常量,即1KB对应的字节数
  • __TIME_TASK_S__ = 5:单个任务默认执行时长,单位为秒
  • __NUMBER_BLOCKS_BY_TASK__ = 5:单个任务默认占用的内存块数量
  • is_locked_for_super_user = False:全局优先级抢占锁,值为True时所有普通用户任务自动暂停,仅超级用户任务可执行

核心数据结构

Block 内存块类

每个实例代表内存链表上的一个独立内存块,单块固定大小为512KB:

  • 内置状态枚举:FREE(空闲,可回收)、BUSY(被任务占用)
  • 核心属性:
    • number_of_blocks:当前块组占用的连续内存块数量
    • state:内存块当前状态
    • data:块存储的二进制数据,初始化时会自动补零填满分配的全部块空间
    • next_block:链表指针,指向同链表的下一个内存块
  • 核心方法add():递归遍历到链表尾部追加新块,返回新块的索引位置

MemoryBlock 内存链表管理类

以单向链表结构统一管理所有已分配的模拟内存块:

  • 支持通过索引直接访问链表任意位置的内存块
  • 核心方法:
    • add():链表为空时将新块设为头节点,否则递归追加到链表尾部,返回新块索引
    • remove():按索引删除指定内存块,自动维护链表指针保证结构连续
    • size():遍历链表返回当前已分配的总内存块数量

核心线程类

Task 单任务线程类

继承Python原生线程类,每个实例对应一个实际执行的用户任务:

  • 内置枚举定义:
    • 任务优先级:HIGH(超级用户任务,高优先级)、LOW(普通用户任务,低优先级)
    • 运行状态:ACTIVE(运行中)、SLEEPING(未启动/执行完成休眠)
  • 初始化逻辑:创建任务时自动向内存链表申请对应数量的内存块,标记为占用状态,保存分配到的块索引
  • 运行逻辑:
    1. 启动后将自身状态设为ACTIVE,按执行时长计算每秒需要展示的文本字符数
    2. 在对应权限的GUI任务列表中新增自身的进度条目
    3. 逐秒更新GUI上的执行进度,每次更新前检查全局锁:如果是普通用户任务且超级用户正在执行,就循环休眠直到锁释放
    4. 逐秒追加展示的文本长度,模拟任务逐步加载执行的效果
    5. 执行满设定时长后展示完整文本,将自身状态设为SLEEPING,对应占用的内存块标记为FREE待回收

TaskManager 任务调度线程类

负责批量启动、调度同权限下的所有任务:

  • 启动前先检查全局锁:如果调度的是普通用户任务且超级用户正在执行,先休眠等待锁释放
  • 打乱所有待执行的故事文本顺序,保证每次任务执行顺序随机
  • 逐个创建Task实例启动,每启动一个任务就等任务进入ACTIVE状态后再启动下一个
  • 阻塞等待同批次所有任务全部执行完成后才退出

工具函数说明

  • get_memory_usage():调用psutil库获取当前Python进程的实际内存占用,返回值单位为MB
  • launch_task_manager():用户点击按钮触发的任务启动入口:
    1. 清空对应权限GUI面板的旧任务记录
    2. 如果启动的是超级用户任务,先将全局抢占锁设为True,暂停所有正在运行的普通用户任务
    3. 创建TaskManager实例启动,等待所有任务执行完毕
    4. 倒序遍历内存链表,删除所有标记为FREE的空闲块,模拟垃圾回收(倒序遍历避免删除节点导致索引错乱)
    5. 如果是超级用户任务执行完毕,将全局抢占锁设为False,恢复普通用户任务执行
  • read_stories():读取指定txt文件的所有行,去掉换行符后返回文本列表作为任务素材
  • monitor_interface():常驻独立线程,每秒读取一次进程内存占用,更新GUI底部的内存进度条和数值说明,自动调整进度条最大值匹配历史最高内存占用

完整运行流程

  1. 程序启动进入主函数:
    • 初始化空的内存块链表
    • 读取同目录下stories.txt的所有行作为任务素材
    • 基于turtle+tkinter绘制800*600尺寸的GUI窗口:左侧为超级用户任务列表+启动按钮,右侧为普通用户任务列表+启动按钮,底部为内存占用进度条+数值说明标签
    • 启动常驻内存监控线程,实时更新内存占用展示
    • 进入GUI事件循环等待用户操作
  2. 用户点击对应权限的启动按钮后,独立线程触发launch_task_manager流程,按调度规则执行任务、更新进度、回收内存
  3. 优先级抢占规则:普通用户任务执行过程中,如果用户点击超级用户启动按钮,全局锁立刻置为True,所有运行中的普通用户任务会进入休眠暂停状态,等超级用户所有任务执行完毕、锁释放后,普通用户任务从暂停位置继续执行

运行前置要求

  • 脚本同目录下必须存在stories.txt文件,每行填写一段非空文本作为单个任务的加载内容
  • 依赖第三方库psutil,运行前需执行pip install psutil完成安装

内容的提问来源于stack exchange,提问作者proxy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 01:51:45