IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 操作系统实验——进程调度 -> 正文阅读

[C++知识库]操作系统实验——进程调度

进程调度算法实现
摘要:
实现了进程调度算法,包括FCFS(先进先出),SPF(短进程优先),HRRF(最高响应比优先法),HPF(优先级法)算法,设计了一个允许 n 个进程并发运行的进程管理模拟系统。该系统包括有简单的进程控制、同步,其进程调度算法可任意选择。

初始值:
进程名 到达时间 服务时间 优先级
a 0 4 0
b 1 3 1
c 2 5 2
d 3 2 3
e 4 4 4
算法描述
FCFS(先进先出):每次从就绪队列选择最先进入队列的进程,然后一直运行,直到进程退出或被阻塞,才会继续从队列中选择第一个进程接着运行。

SPF(短进程优先):每次从就绪队列选择最短服务时间进程,然后一直运行,直到进程退出或被阻塞,才会继续从队列中选择最短服务时间的进程接着运行。

HRRF(最高响应比优先法):每次进行进程调度时,先计算响应比优先级,然后把响应比优先级最高的进程投入运行。响应比计算公式为响应比=(进程执行时间+进程等待时间)/ 进程执行时间。

HPF(优先级法):每次从就绪队列选择优先级最高的进程,然后一直运行,直到进程退出或被阻塞,才会继续从队列中选择优先级最高的进程接着运行。
FCFS:
算法:
//先来先服务
void FCFS_run()
{
//设置当前系统时间
int cur_svc_time = 0;
//初始化参数
init();
while(1)
{
//判断当前时间下是否有任务进入队列,并加入队列
get_arv_task();
//判断当前是否有任务运行,如果无
if(_cur_task == nullptr || cur_svc_time == 0)
{
//获取先来的任务
_cur_task = get_first_task();
if(_cur_task != nullptr)
{
//执行该任务
std::cout << “进程” << _cur_task->get_name() << “开始执行——当前时间为:” << _time << “s\n”;
//计算系统时间
cur_svc_time = _cur_task->get_svc_time();
_cur_task->set_start_time(_time);
}
}
//没任务了,输出执行完毕
if(_cur_task == nullptr && _cur_num == _task_num)
{
std::cout << “执行完毕!\n”;
break;
}
//计算当前任务所剩运行时间
if(cur_svc_time > 0)cur_svc_time–;
//系统时间+1
_time++;
//当前进程运行完毕
if(cur_svc_time == 0 && _cur_task != nullptr)
{
std::cout << “进程” << _cur_task->get_name() << “执行完毕——当前时间为:” <<_time << “s\n”;
_cur_task->set_fns_time(_time);
}
}
}
甘特图:
在这里插入图片描述
执行结果:
在这里插入图片描述
平均等待时间:5.4
带权周转时间:
进程名 带权周转时间
a 1.0
b 2.0
c 2.0
d 5.5
e 3.5
SPF:
算法:
//短进程优先
void SHR_run()
{
int cur_svc_time = 0;
init();
while(1)
{
get_arv_task();

        if(_cur_task == nullptr || cur_svc_time == 0)
        {
			//获取最短的任务
            _cur_task = get_min_task();
            if(_cur_task != nullptr)
            {
                std::cout << "进程" << _cur_task->get_name() << "开始执行——当前时间为:" << _time << "s\n";
                cur_svc_time = _cur_task->get_svc_time();
                _cur_task->set_start_time(_time);
            }
        }
        if(_cur_task == nullptr && _cur_num == _task_num)
        {
            std::cout << "执行完毕!\n";
            break;
        }

        if(cur_svc_time > 0)cur_svc_time--;
        _time++;
        if(cur_svc_time == 0 && _cur_task != nullptr)
        {
            std::cout << "进程" << _cur_task->get_name() << "执行完毕——当前时间为:" <<_time << "s\n";
            _cur_task->set_fns_time(_time);
        }
    }
}

甘特图:
在这里插入图片描述
执行结果
在这里插入图片描述
平均等待时间:4.4
带权周转时间:
进程名 带权周转时间
a 1.0
b 2.67
c 3.2
d 1.5
e 2.25
HRRF:
算法:
//高响应比
void HRRF_run()
{
int cur_svc_time = 0;
init();
while(1)
{
get_arv_task();
update_res_ratio();

        if(_cur_task == nullptr || cur_svc_time == 0)
        {
			//获取最高响应比的任务
            _cur_task = get_max_res_ratio();
            if(_cur_task != nullptr)
            {
                std::cout << "进程" << _cur_task->get_name() << "开始执行——当前时间为:" << _time << "s\n";
                cur_svc_time = _cur_task->get_svc_time();
                _cur_task->set_start_time(_time);
            }
        }
        if(_cur_task == nullptr && _cur_num == _task_num)
        {
            std::cout << "执行完毕!\n";
            break;
        }

        if(cur_svc_time > 0)cur_svc_time--;
        _time++;
        if(cur_svc_time == 0 && _cur_task != nullptr)
        {
            std::cout << "进程" << _cur_task->get_name() << "执行完毕——当前时间为:" <<_time << "s\n";
            _cur_task->set_fns_time(_time);
        }
    }
}

甘特图:
在这里插入图片描述
执行结果:
在这里插入图片描述
平均等待时间:4.4
带权周转时间:
进程名 带权周转时间
a 1.0
b 2.67
c 3.2
d 1.5
e 2.25
HPF:
算法:
//优先级算法
void HPF_run()
{
int cur_svc_time = 0;
init();
while(1)
{
get_arv_task();

        if(_cur_task == nullptr || cur_svc_time == 0)
        {
			//获取最优先的任务
            _cur_task = get_max_pri();
            if(_cur_task != nullptr)
            {
                std::cout << "进程" << _cur_task->get_name() << "开始执行——当前时间为:" << _time << "s\n";
                cur_svc_time = _cur_task->get_svc_time();
                _cur_task->set_start_time(_time);
            }
        }
        if(_cur_task == nullptr && _cur_num == _task_num)
        {
            std::cout << "执行完毕!\n";
            break;
        }

        if(cur_svc_time > 0)cur_svc_time--;
        _time++;
        if(cur_svc_time == 0 && _cur_task != nullptr)
        {
            std::cout << "进程" << _cur_task->get_name() << "执行完毕——当前时间为:" <<_time << "s\n";
            _cur_task->set_fns_time(_time);
        }
    }
}

甘特图:
在这里插入图片描述
执行结果:
在这里插入图片描述
平均等待时间:5.4
带权周转时间:
进程名 带权周转时间
a 1.0
b 5.67
c 2.6
d 3.5
e 1.0

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:13:22  更:2022-03-10 22:17:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:39:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码