main
进程管理系统课程设计
这是一个使用 C 语言实现的进程管理系统模拟器,包含进程管理、调度、IPC、同步与 Web 可视化展示。
当前架构:
C 进程管理程序
-> 输出 data/state.json
Python WebUI 服务
-> 读取 JSON 并提供 Web API
浏览器
-> 展示 PCB、队列、调度统计、IPC 状态
功能概览
- 进程创建、派生、阻塞、唤醒、撤销
- FCFS、优先级、RR、MLFQ 调度
- 调度统计,benchmark 对比放在测试验收中
- 消息队列、共享内存、管道
- 信号量 P/V、持有记录、等待队列和进程结束自动释放
- 资源申请/释放、进程结束自动回收资源、死锁检测
- JSON 状态输出
- WebUI 可视化展示
系统手册
如果是第一次阅读这个项目,建议先看 SYSTEM_MANUAL.md。手册按初学者视角解释了运行方式、代码结构、PCB、进程状态、调度、IPC、同步、资源和死锁检测等内容。
目录结构
include/ 头文件
src/ C 源码
web/ WebUI 静态文件
webui_server.py Python WebUI 服务
CMakeLists.txt CMake 构建配置
Makefile Unix 风格构建入口
PROJECT_PROGRESS.md 项目进展记录
进程系统设计.txt 小组系统设计
C 核心代码按 5 个模块组织:
common.h 公共常量和通用 PID 队列
process.h / process.c 进程管理、PCB、命令行入口
scheduler.h / scheduler.c 调度算法、统计、甘特图
ipc.h / ipc.c 消息队列、共享内存、管道
sync.h / sync.c 信号量 P/V、资源申请/释放、死锁检测
output.h / output.c JSON 输出
macOS / Linux 构建
使用 Makefile
需要安装 C 编译器、make 和 Python 3。
make
运行命令行版本:
./process_manager
运行 WebUI:
python3 webui_server.py
浏览器打开:
http://127.0.0.1:8080
使用 CMake
cmake -S . -B build
cmake --build build
把可执行文件复制到项目根目录,供 Python WebUI 调用:
cp build/process_manager .
python3 webui_server.py
也可以直接运行 C 程序:
./build/process_manager
Windows 构建
推荐方式:WSL
在 WSL Ubuntu 中安装工具:
sudo apt update
sudo apt install build-essential cmake python3
构建并运行:
cmake -S . -B build
cmake --build build
cp build/process_manager .
python3 webui_server.py
浏览器打开:
http://127.0.0.1:8080
MSYS2 / MinGW
安装 MSYS2 后,在 UCRT64 shell 中执行:
pacman -S mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-cmake make python
cmake -S . -B build -G "MinGW Makefiles"
cmake --build build
cp build/process_manager.exe .
python webui_server.py
Visual Studio + CMake
在 “Developer PowerShell for VS” 中执行:
cmake -S . -B build
cmake --build build --config Debug
copy build\Debug\process_manager.exe .
python webui_server.py
如果使用 Release:
cmake --build build --config Release
copy build\Release\process_manager.exe .
python webui_server.py
浏览器打开:
http://127.0.0.1:8080
JSON 输出模式
C 程序可以直接输出系统状态 JSON:
mkdir -p data
./process_manager --json data/state.json
Windows PowerShell:
mkdir data
.\process_manager.exe --json data\state.json
WebUI 服务也是通过这种方式启动 C 程序并读取 JSON。
常用命令
启动 C 程序后可以输入:
create <name> <priority> <service_time>
fork <pid>
schedule <fcfs|priority|rr|mlfq> [quantum]
step
run
block <pid>
wakeup <pid>
kill <pid>
killtree <pid>
send <from_pid> <to_pid> <message>
recv <pid>
sem_create <name> <value>
sem_wait <sem_id> <pid>
sem_signal <sem_id>
shm_create <size>
shm_attach <shm_id> <pid>
shm_write <shm_id> <pid> <offset> <data>
shm_read <shm_id> <pid> <offset> <len>
shm_destroy <shm_id>
pipe_create
pipe_write <pipe_id> <pid> <data>
pipe_read <pipe_id> <pid>
pipe_close <pipe_id> <close_reader> <close_writer>
resource_add <name> <total>
request <pid> <resource_id> <amount>
release <pid> <resource_id> <amount>
detect_deadlock
ps
queue
status
exit
测试样例
自动化测试:
make test
调度算法性能对比报告:
make benchmark
该命令会用同一组进程分别运行 FCFS、Priority、RR、MLFQ,并输出平均周转时间、平均等待时间、平均响应时间、平均带权周转时间、上下文切换次数、CPU 利用率和甘特图摘要,适合验收时直接展示。
当前自动化测试覆盖:
- 进程创建、派生、阻塞、唤醒、撤销、进程树撤销
- FCFS、Priority、RR、MLFQ 调度和甘特图时间线
- 调度统计、测试验收 benchmark、CPU 利用率、等待时间、带权周转时间
- 消息队列 FIFO、空接收阻塞、发送唤醒、队列容量上限、阻塞进程不能主动接收
- 信号量 P/V、持有者记录、多个等待进程 FIFO 唤醒、进程终止自动释放、信号量死锁检测与清除
- 共享内存读写、重复 attach 记录、越界写入截断、销毁后访问失败
- 管道读空阻塞、写入唤醒、写满阻塞、关闭管道端点、阻塞进程不能主动读写管道
- 资源申请/释放、等待队列、进程撤销/自然结束释放资源、资源死锁检测与解除
- 无效 PID、非法命令参数、非法服务时间等失败路径
tests/cases/下的复杂集成脚本也被自动化测试读取并断言最终状态
手动演示样例在 tests/cases/ 下,例如:
./process_manager < tests/cases/scheduling.txt
./process_manager < tests/cases/ipc_sync.txt
./process_manager < tests/cases/shm_pipe.txt
./process_manager < tests/cases/resource_deadlock.txt
./process_manager < tests/cases/full_workflow.txt
./process_manager < tests/cases/error_edges.txt
./process_manager < tests/cases/complex_termination_cleanup.txt
./process_manager < tests/cases/complex_ipc_pipe_shm.txt
./process_manager < tests/cases/complex_deadlock_recovery.txt
注意事项
- WebUI 需要 Python 3。
- Python WebUI 默认查找项目根目录下的
process_manager或 Windows 下的process_manager.exe。 - 如果使用 CMake 构建,建议将生成的可执行文件复制到项目根目录。
- Windows 控制台如果中文乱码,可优先使用 Windows Terminal、PowerShell 7、WSL 或 MSYS2。
Languages
C
55.2%
Python
26.6%
JavaScript
9%
HTML
5.3%
CSS
3.4%
Other
0.5%