短作业优先调度算法
一、实验目的
了解并掌握作业调度的功能,熟悉并掌握各种作业调度算法。
二、实验内容
模拟实现SJF调度。
设置作业体:作业名,作业的到达时间,服务时间,作业状态(W——等待,R——运行,F——完成),作业间的链接指针;
作业初始化:由用户输入作业名、服务时间、到达时间进行初始化,同时,初始化作业的状态为W。
显示函数:在作业调度前、调度中和调度后进行显示。
排序函数:对等待状态的作业按照调度算法排序(不同的调度算法排序方式不同),注意考虑到达时间。
调度函数:每次从等待队列队首调度已到达的适合的作业执行,状态变化。当服务结束时,状态变为F。
删除函数:撤销状态为F的作业。
三、实验代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_JOBS 100
#define NAME_LEN 20typedef struct Job {char name[NAME_LEN];int arrival_time;int service_time;char status;struct Job *next;int completion_time;
} Job;Job *waiting_queue = NULL;
Job *completed_jobs = NULL;
int current_time = 0;void init_job(Job *job, const char *name, int arrival_time, int service_time) {strncpy(job->name, name, NAME_LEN);job->arrival_time = arrival_time;job->service_time = service_time;job->status = 'W';job->next = NULL;job->completion_time = 0;
}void add_job(const char *name, int arrival_time, int service_time) {Job *new_job = (Job *)malloc(sizeof(Job));init_job(new_job, name, arrival_time, service_time);if (waiting_queue == NULL || waiting_queue->arrival_time >= new_job->arrival_time) {new_job->next = waiting_queue;waiting_queue = new_job;} else {Job *temp = waiting_queue;while (temp->next != NULL && temp->next->arrival_time < new_job->arrival_time) {temp = temp->next;}new_job->next = temp->next;temp->next = new_job;}
}void display_jobs() {Job *temp = waiting_queue;printf("当前时间:%d\n", current_time);while (temp != NULL) {printf("Job:%s, 状态:%c\n", temp->name, temp->status);temp = temp->next;}printf("\n");
}void schedule() {while (waiting_queue != NULL) {Job *min_job = NULL;Job *prev_min_job = NULL;Job *temp = waiting_queue;Job *prev_temp = NULL;while (temp != NULL) {if (temp->arrival_time <= current_time) {if (min_job == NULL || temp->service_time < min_job->service_time) {min_job = temp;prev_min_job = prev_temp;}}prev_temp = temp;temp = temp->next;}if (min_job == NULL) {if (waiting_queue != NULL) {current_time = waiting_queue->arrival_time;}continue;}min_job->status = 'R';printf("Job:%s在%d时刻开始\n", min_job->name, current_time);display_jobs();current_time += min_job->service_time;min_job->completion_time = current_time;min_job->status = 'F';printf("Job:%s在%d时刻结束\n", min_job->name, current_time);display_jobs();if (min_job == waiting_queue) {waiting_queue = waiting_queue->next;} else {if (prev_min_job != NULL) {prev_min_job->next = min_job->next;}}min_job->next = completed_jobs;completed_jobs = min_job;}
}void display_turnaround_times() {Job *temp = completed_jobs;printf("\n作业周转时间和带权周转时间:\n");while (temp != NULL) {int turnaround_time = temp->completion_time - temp->arrival_time;float weighted_turnaround_time = (float)turnaround_time / temp->service_time;printf("Job:%s, 完成时间:%d, 周转时间:%d, 带权周转时间:%.2f\n",temp->name, temp->completion_time, turnaround_time, weighted_turnaround_time);temp = temp->next;}
}int main() {int n, arrival_time, service_time;char name[NAME_LEN];printf("输入Job数量: ");scanf("%d", &n);for (int i = 0; i < n; i++) {printf("输入Job%d名称, 到达时间, 服务时间: ", i + 1);scanf("%s %d %d", name, &arrival_time, &service_time);add_job(name, arrival_time, service_time);}printf("\n初始运行队列:\n");display_jobs();printf("\nSJF调度开始运行...\n");schedule();printf("\n所有作业全部完成.\n");display_turnaround_times();return 0;
}
四、实验结果



相关文章:
短作业优先调度算法
一、实验目的 了解并掌握作业调度的功能,熟悉并掌握各种作业调度算法。 二、实验内容 模拟实现SJF调度。 设置作业体:作业名,作业的到达时间,服务时间,作业状态(W——等待,R——运行,F——完成)…...
SpringBoot 应用并发处理请求数的深入解析
SpringBoot 应用并发处理请求数的深入解析 一、引言 在现代Web开发中,了解一个应用程序可以同时处理多少个并发请求是至关重要的。 对于基于Spring Boot构建的应用程序来说,这个问题的答案并非绝对,而是取决于多个因素,包括但不…...
MetaGPT中的教程助手:TutorialAssistant
1. 提示词 COMMON_PROMPT """ You are now a seasoned technical professional in the field of the internet. We need you to write a technical tutorial with the topic "{topic}". """DIRECTORY_PROMPT (COMMON_PROMPT "…...
介绍一款docker ui 管理工具
http://vm01:18999/main.html 管理员登陆账号 jinghan/123456 ui启动命令所在文件夹目录 /work/docker/docker-ui 参考链接 DockerUI:一款功能强大的中文Docker可视化管理工具_docker ui-CSDN博客...
0022 基于SpringBoot的婚纱摄影线上预约系统的设计与实现
电子商城系统 1.项目描述2. 绪论2.1 研究背景2.2 目的及意义2.3 国内外研究现状 3.需求分析4.界面展示5.源码获取 1.项目描述 摘 要 本文旨在研究并开发一套基于Spring Boot框架的婚纱摄影线上预约系统,以满足现代婚纱摄影行业对高效、便捷、个性化服务的需求。该系…...
uni-app在image上绘制点位并回显
在 Uni-app 中绘制多边形可以通过使用 Canvas API 来实现。Uni-app 是一个使用 Vue.js 开发所有前端应用的框架,同时支持编译为 H5、小程序等多个平台。由于 Canvas 是 H5 和小程序中都支持的 API,所以通过 Canvas 绘制多边形是一个比较通用的方法。 1.…...
Comparator.comparing 排序注意
1. 对数字型字符串排序 List<String> values new ArrayList<>();values.add("10");values.add("6");values.add("20");values.add("30");values.add("50");//方法1 (正确的排序方法)//倒…...
PPO系列3 - PPO原理
On Policy: 采集数据的模型,和训练的模型,是同一个。缺点:慢,生成一批样本数据,训练一次,又要重新生成下一批。 Off Policy: 采集数据的模型,和训练的模型,不是同一个。有点…...
.idea
.idea/ 文件夹下的文件和目录主要用于存储 JetBrains IDE(如 PyCharm、IntelliJ IDEA 等)的项目配置。下面是一些常见文件和目录及其作用的详细介绍: 1. workspace.xml 用户界面布局:保存了IDE窗口布局,包括打开的文…...
单片机:实现呼吸灯(附带源码)
单片机实现呼吸灯详细解读 呼吸灯是一种常见的灯光效果,广泛应用于电子产品、汽车、家居照明等领域。其基本特性是通过逐渐增亮和减弱的方式,使得灯光呈现出“呼吸”的效果,给人一种平缓、舒适的视觉感受。在嵌入式系统中,呼吸灯…...
PostgreSQL数据库序列信息查询
PostgreSQL序列信息查询 说明: 在PostgreSQL数据库中序列和表都是序列的对象。 数据库中不应该存在孤儿序列,序列应该和表对应的字段绑定起来。绑定后删除表或表对应的字段后,序列会自动被删除。 创建测试表和序列 create table test_t(…...
【Linux】Nginx一个域名https一个地址配置多个项目【项目实战】
👨🎓博主简介 🏅CSDN博客专家 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入!…...
Linux驱动开发(12):中断子系统–按键中断实验
本章我们以按键为例讲解在驱动程序中如何使用中断, 在学习本章之前建议先回顾一下关于中断相关的裸机部分相关章节, 这里主要介绍在驱动中如何使用中断,对于中断的概念及GIC中断控制器相关内容不再进行讲解。 本章配套源码和设备树插件位于“…...
代码随想录-算法训练营-番外(图论02:岛屿数量,岛屿的最大面积)
day02 图论part02 今日任务:岛屿数量,岛屿的最大面积 都是一个模子套出来的 https://programmercarl.com/kamacoder/0099.岛屿的数量深搜.html#思路往日任务: day01 图论part01 今日任务:图论理论基础/所有可到达的路径 代码随想录图论视频部分还没更新 https://programmercar…...
20 go语言(golang) - gin框架安装及使用(一)
一、简介 Gin是一个用Go语言编写的高性能Web框架,专注于构建快速、可靠的HTTP服务。它以其速度和简洁性而闻名,非常适合用于开发RESTful API。 高性能:Gin使用了httprouter进行路由管理,这是一个轻量级且非常快速的HTTP请求路由器…...
重生之我在学Vue--第3天 Vue 3 模板语法与指令
重生之我在学Vue–第3天 Vue 3 模板语法与指令 文章目录 重生之我在学Vue--第3天 Vue 3 模板语法与指令前言一、数据绑定1.1 单向绑定1.2 双向绑定 二、常用指令2.1 v-bind2.2 v-model2.3 v-if2.4 v-show2.5 v-for2.6 v-on 三、事件处理与表单绑定3.1 事件处理3.2 表单绑定 前言…...
电脑win11家庭版升级专业版和企业版相关事项
我的是零刻ser9,自带win11家庭版,但是我有远程操控需求,想用windows系统自带的远程连接功能,所以需要升级为专业版。然后在系统激活页面通过更改序列号方式,淘宝几块钱买了个序列号升级成功专业版了。但是,…...
docker 架构详解
Docker架构是基于客户端-服务器(C/S)模式的,包含多个关键组件,以确保容器化应用的高效构建、管理和运行。以下是对Docker架构的详细解析: Docker 架构概述 Docker 架构采用客户端-服务器(C/S)…...
tinyCam Pro 用于远程监控,控制和录制您的私人公共网络或IP摄像机
tinyCam Pro 是一款用于远程监控,控制和录制您的私人/公共网络或IP摄像机,视频编码器和具有500万次下载的CCTV摄像头的DVR。需使用3G/4G/WiFi连接和下载数据。 tinyCam Monitor Pro 可用于远程安全地监控您的宝宝、宠物、家庭、商业、交通和天气…...
Flask 验证码自动生成
Flask 验证码自动生成 想必验证码大家都有所了解,但是可以自己定义图片验证码,包含数字,英文以及数字计算,自动生成验证码。 生成图片以及结果 from captcha.image import ImageCaptchafrom PIL import Image from random impo…...
AlwaysOnTop:重新定义你的数字工作空间
AlwaysOnTop:重新定义你的数字工作空间 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 想象一下这样的场景:你正在为一个重要的项目编写报告,…...
PostgreSQL杂谈 13—GIN索引的优化策略与实战调优
1. GIN索引的核心原理与性能瓶颈 GIN(Generalized Inverted Index)作为PostgreSQL中的"万能工具箱",特别擅长处理数组、全文搜索这类"一对多"的数据关系。它的核心设计借鉴了搜索引擎的倒排索引思想,但比传统…...
Z-Image Turbo提示词调试技巧:从失败案例反推有效表达逻辑
Z-Image Turbo提示词调试技巧:从失败案例反推有效表达逻辑 1. 为什么提示词调试如此重要 如果你用过AI绘画工具,一定遇到过这种情况:脑子里想的是赛博朋克少女,生成出来的却是模糊不清的怪异图像。这不是模型的问题,…...
如何通过CPUDoc免费优化CPU性能:5大核心功能全面指南
如何通过CPUDoc免费优化CPU性能:5大核心功能全面指南 【免费下载链接】CPUDoc 项目地址: https://gitcode.com/gh_mirrors/cp/CPUDoc 还在为电脑运行卡顿、游戏帧率不稳而烦恼吗?CPUDoc这款免费开源工具能够通过智能线程调度和动态电源管理&…...
Alpamayo-R1-10B详细步骤:从supervisorctl服务管理到日志实时监控
Alpamayo-R1-10B详细步骤:从supervisorctl服务管理到日志实时监控 1. 引言:为什么你需要关注这个自动驾驶模型 如果你正在研究自动驾驶,或者对AI如何“看懂”路况并做出决策感到好奇,那么Alpamayo-R1-10B绝对值得你花时间了解。…...
提升数据抓取效率:用快马AI生成openclaw命令自动化脚本模板
最近在做一个数据抓取项目时,发现手动写openclaw命令实在太费时间了。每次都要重复写类似的fetch和parse命令,还要处理各种异常情况。后来发现用InsCode(快马)平台可以快速生成自动化脚本模板,效率提升了好几倍。今天就把这个经验分享给大家。…...
AI驱动的Vue3应用开发平台深入探究(十):物料系统之内置组件库
内置组件库(Element Plus、Ant Design Vue、Vant) VTJ 通过其统一的物料系统架构,与三个流行的 Vue 组件库提供了全面的集成。这一抽象层使开发者能够利用熟悉的组件模式,同时保持低代码的可扩展性和跨库的可移植性。该系统将组件…...
颠覆式数据主权革命:WeChatMsg如何让你的聊天记录真正归属自己
颠覆式数据主权革命:WeChatMsg如何让你的聊天记录真正归属自己 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...
AgentScope-Java:以 Agentic 为核心设计,构建可推理、可记忆、可扩展的生产级智能体系统
AgentScope-Java:以 Agentic 为核心设计,构建可推理、可记忆、可扩展的生产级智能体系统 副标题:从 ReActAgent、ReMe 记忆管理到高并发工程化落地,系统讲透 AgentScope-Java 的架构原理与企业级实践 一、为什么企业需要的不是“接个大模型”,而是 Agentic 系统 过去两年…...
【菜鸟飞】Conda环境管理与vscode无缝协作实战指南
1. Conda环境管理入门:从零搭建Python工作区 第一次接触Conda时,我被它强大的环境隔离能力惊艳到了。想象你正在装修房子,Conda就像给你的每个项目分配了独立的房间——在这个房间里,你可以随意摆放家具(安装依赖包&am…...
