Skip to content

hanxi19/processor_scheduling

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

进程调度器实现文档

目录

项目概述

本项目实现了一个支持多种调度算法的进程调度器,可以管理和调度多个作业的执行。调度器支持作业的创建、终止、状态查询等功能,并实现了三种不同的调度算法。

功能特性

支持的调度算法

  1. 高优先级优先(HPF)

    • 选择当前优先级最高的作业
    • 优先级相同时选择等待时间最长的作业
    • 适合对任务优先级有明确要求的系统
  2. 先来先服务(FCFS)

    • 选择等待时间最长的作业
    • 完全基于等待时间进行选择
    • 适合任务长度相近的系统
  3. 短作业优先(SJF)

    • 选择预计运行时间最短的作业
    • 运行时间相同时选择等待时间最长的作业
    • 适合任务长度差异较大的系统

核心功能

  1. 作业管理

    • 作业创建和入队
    • 作业终止和出队
    • 作业状态查询
    • 作业优先级管理
  2. 进程控制

    • 进程创建和终止
    • 进程状态切换
    • 信号处理
  3. 调度控制

    • 定时调度
    • 作业切换
    • 资源管理

实现细节

关键数据结构

// 作业信息结构体
struct jobinfo {
    int    jid;                 // 作业ID
    int    pid;                 // 进程ID
    char** cmdarg;              // 执行命令及参数
    int    defpri;              // 默认优先级
    int    curpri;              // 当前优先级
    int    ownerid;             // 作业所有者ID
    int    wait_time;           // 等待时间
    time_t create_time;         // 创建时间
    int    run_time;            // 已运行时间
    int    duration;            // 预计总运行时间
    enum   jobstate state;      // 作业状态
};

// 等待队列节点
struct waitqueue {
    struct waitqueue *next;    // 下一个等待作业
    struct jobinfo *job;       // 当前作业信息
};

主要函数实现

  1. 调度算法实现
// HPF算法
struct waitqueue* jobselect_HPF() {
    // 选择优先级最高的作业
}

// FCFS算法
struct waitqueue* jobselect_FCFS() {
    // 选择等待时间最长的作业
}

// SJF算法
struct waitqueue* jobselect_SJF() {
    // 选择运行时间最短的作业
}
  1. 作业切换实现
void jobswitch() {
    // 暂停当前作业
    kill(current->job->pid, SIGSTOP);
    current->job->state = READY;
    
    // 启动新作业
    current = next;
    next = NULL;
    current->job->state = RUNNING;
    kill(current->job->pid, SIGCONT);
}
  1. 作业出队实现
void do_deq(struct jobcmd deqcmd) {
    // 查找并终止指定作业
    // 从队列中移除
    // 释放资源
}

使用说明

编译和运行

  1. 编译调度器:
gcc -o scheduler scheduler.c
  1. 运行调度器:
./scheduler

命令使用

  1. 提交作业
enq [-p priority] [-d duration] executable args
  1. 终止作业
deq job_id
  1. 查询状态
stat

注意事项

系统要求

  • 需要正确的系统头文件路径配置
  • 需要适当的系统权限
  • 需要支持信号处理机制

使用限制

  • 作业优先级范围:0-3
  • 作业持续时间范围:0-65535
  • 需要提供可执行文件的绝对路径

潜在问题

  • 可能存在资源泄漏风险
  • 需要处理信号竞争条件
  • 可能需要考虑并发访问问题

后续优化

功能扩展

  • 添加更多调度算法
  • 实现抢占式调度
  • 添加作业优先级动态调整

性能优化

  • 优化队列操作
  • 改进进程切换机制
  • 减少系统调用开销

可靠性提升

  • 添加日志记录
  • 完善错误恢复机制
  • 增加系统状态监控

贡献指南

欢迎提交问题和改进建议。在提交代码时,请确保:

  1. 代码符合项目的编码规范
  2. 添加适当的注释和文档
  3. 通过基本的测试

许可证

本项目采用 MIT 许可证。详见 LICENSE 文件。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages