# osExperiment **Repository Path**: yeyu8866/os-experiment ## Basic Information - **Project Name**: osExperiment - **Description**: scnu操作系统实验 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-27 - **Last Updated**: 2026-05-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 操作系统实验 - 进程调度模拟器 一个用于操作系统教学实验的进程调度模拟器,采用前后端分离架构,支持实时可视化展示进程调度过程。 ## 项目简介 本项目是一个进程调度实验教学工具,模拟操作系统中的进程调度算法。通过直观的 Web 界面,你可以创建进程、启动调度器、观察进程状态变化,理解操作系统中进程调度的原理。 ## 功能特性 - **进程管理**:创建新进程、终止进程、查看所有进程状态 - **调度控制**:支持手动单步调度和自动定时调度 - **实时可视化**:通过 WebSocket 实时推送进程状态变化 - **优先级调度**:基于优先级的调度算法,高优先级进程优先执行 - **生命周期跟踪**:显示进程的剩余生命周期 ## 技术栈 ### 后端 - Java 17 - Spring Boot 3.x - WebSocket (Spring WebSocket) - Maven ### 前端 - Vue 3 - Vite - 原生 WebSocket API ## 项目结构 ``` os-experiment/ ├── src/main/java/cn/edu/scnu/os/ │ ├── config/ # 配置类 │ ├── controller/ # 控制器 │ ├── dto/ # 数据传输对象 │ ├── model/ # 数据模型 │ ├── service/ # 业务服务 │ ├── websocket/ # WebSocket 处理 │ └── OsExperimentApplication.java # 启动类 ├── src/main/resources/ │ └── application.properties ├── os-experiment-frontend/ │ ├── src/ │ │ ├── api/ # API 接口 │ │ ├── components/ # Vue 组件 │ │ ├── composables/ # 组合式 API │ │ ├── App.vue │ │ └── main.js │ └── index.html └── pom.xml ``` ## 快速开始 ### 前置要求 - JDK 17+ - Maven 3.8+ - Node.js 18+ ### 后端启动 ```bash # 克隆项目后,在项目根目录执行 mvn clean install mvn spring-boot:run ``` 后端服务将在 `http://localhost:8080` 启动。 ### 前端启动 ```bash cd os-experiment-frontend npm install npm run dev ``` 前端默认在 `http://localhost:5173` 启动。 ## 使用指南 ### 1. 创建进程 点击控制面板中的"创建进程"按钮,系统将随机创建一个新进程,分配优先级和生命周期。 ### 2. 启动调度 - **自动模式**:设置时间片间隔(毫秒),点击"启动调度"按钮,调度器将按照设定间隔自动执行调度 - **手动模式**:点击"单步执行"按钮,调度器执行一次调度 ### 3. 观察调度 - 进程表格实时显示所有进程的状态 - 颜色标识:绿色表示就绪,蓝色表示运行中 - 底部状态栏显示调度器当前状态 ## API 接口 ### 进程管理 | 方法 | 路径 | 描述 | |------|------|------| | POST | `/api/process` | 创建新进程 | | GET | `/api/process` | 获取所有进程 | | GET | `/api/process/{pid}` | 获取指定进程 | | DELETE | `/api/process/{pid}` | 终止指定进程 | | DELETE | `/api/process` | 清空所有进程 | ### 调度控制 | 方法 | 路径 | 参数 | 描述 | |------|------|------|------| | POST | `/api/scheduler/start` | interval (可选) | 启动调度器 | | POST | `/api/scheduler/stop` | - | 停止调度器 | | POST | `/api/scheduler/step` | - | 单步执行 | | GET | `/api/scheduler/status` | - | 获取调度器状态 | ### WebSocket 连接地址:`ws://localhost:8080/ws/process` 消息格式: ```json { "type": "update|status|error", "data": { /* 进程信息 */ }, "allProcesses": [ /* 所有进程列表 */ ], "message": "消息内容" } ``` ## 核心数据结构 ### 进程状态 (ProcessStatus) - NEW:新创建 - READY:就绪 - RUNNING:运行中 - TERMINATED:已终止 ### PCB (进程控制块) - `pid`:进程 ID - `status`:进程状态 - `priority`:优先级 - `life`:生命周期(剩余时间片数) ## 调度算法 采用基于优先级的调度算法: 1. 从就绪队列中选择优先级最高的进程 2. 选中的进程状态变为 RUNNING 3. 执行一个时间片后,进程生命周期减 1 4. 如果生命周期耗尽,进程终止;否则重新入队 ## 许可证 MIT License