(一) 进程调度

2023-05-16

 进程调度算法有FIFO,优先数调度算法,时间片轮转调度算法,分级调度算法,目前主要是考虑FIFO和优先数调度算法(静态优先级)。
 输入:

  进程流文件,其中存储的是一系列要执行的进程, 
  每个作业包括四个数据项:
 进程名  进程状态(1就绪 2等待 3运行)  所需时间  优先数(0级最高)
 输出:
 进程执行流 和等待时间 平均等待时间
 本程序包括:FIFO,优先数调度算法,时间片轮转调度算法

 

 

进程调度

  
#include < stdio.h >
#include
< string .h >
#include
< iostream.h >

const int block_time = 10 ; // 定义时间片的长度为10秒
const int MAXPCB = 100 ; // 定义最大进程数

// 定义进程结构体
typedef struct node{
char name[ 20 ];
int status;
int time;
int privilege;
int finished;
int wait_time;
}pcb;

pcb pcbs[MAXPCB];
int quantity;

// 初始化函数
void initial(){
int i;

for (i = 0 ;i < MAXPCB;i ++ ){
strcpy(pcbs[i].name,
"" );
pcbs[i].status
= 0 ;
pcbs[i].time
= 0 ;
pcbs[i].privilege
= 0 ;

pcbs[i].finished
= 0 ;
pcbs[i].wait_time
= 0 ;
}

quantity
= 0 ;
}

// 读数据函数
int readData(){
FILE
* fp;
char fname[ 20 ];
int i;

cout
<< " 请输入进程流文件名: " ;
cin
>> fname;
if ((fp = fopen(fname, " r " )) == NULL){
cout
<< " 错误,文件打不开,请检查文件名 " << endl;
}
else {
while ( ! feof(fp)){
fscanf(fp,
" %s %d %d %d " ,pcbs[quantity].name, & pcbs[quantity].status, & pcbs[quantity].time, & pcbs[quantity
].privilege);
quantity
++ ;
}

// 输出所读入的数据
cout << " 输出所读入的数据 " << endl;
cout
<< " 进程名 进程状态 所需时间 优先数 " << endl;
for (i = 0 ;i < quantity;i ++ ){
cout
<< " " << pcbs[i].name << " " << pcbs[i].status << " " << pcbs[i].time << " " << pcbs[i].privilege << endl;
}
return ( 1 );
}
return ( 0 );

}

// 重置数据,以供另一个算法使用
void init()
{
int i;

for (i = 0 ;i < MAXPCB;i ++ ){

pcbs[i].finished
= 0 ;
pcbs[i].wait_time
= 0 ;
}
}

// 先进先出算法
void FIFO()
{
int i,j;
int total;

// 输出FIFO算法执行流
cout << endl << " --------------------------------------------------------------- " << endl;
cout
<< " FIFO算法执行流: " << endl;
cout
<< " 进程名 等待时间 " << endl;
for (i = 0 ;i < quantity;i ++ ){
cout
<< " " << pcbs[i].name << " " << pcbs[i].wait_time << endl;

for (j = i + 1 ;j < quantity;j ++ ){
pcbs[j].wait_time
+= pcbs[i].time;
}
}
total
= 0 ;
for (i = 0 ;i < quantity;i ++ ){
total
+= pcbs[i].wait_time;
}
cout
<< " 总等待时间: " << total << " 平均等待时间: " << total / quantity << endl;

}

// 优先数调度算法
void privilege()
{
int i,j,p;
int passed_time = 0 ;
int total;

int queue[MAXPCB];
int current_privilege = 1000 ;

for (i = 0 ;i < quantity;i ++ ){
current_privilege
= 1000 ;
for (j = 0 ;j < quantity;j ++ ){
if ((pcbs[j].finished == 0 ) && (pcbs[j].privilege < current_privilege)){
p
= j;
current_privilege
= pcbs[j].privilege;
}
}
queue[i]
= p;
pcbs[p].finished
= 1 ;
pcbs[p].wait_time
+= passed_time;
passed_time
+= pcbs[p].time;
}

// 输出优先数调度执行流
cout << endl << " --------------------------------------------------------------- " << endl;
cout
<< " 优先数调度执行流: " << endl;
cout
<< " 进程名 等待时间 " << endl;
for (i = 0 ;i < quantity;i ++ ){
cout
<< " " << pcbs[queue[i]].name << " " << pcbs[queue[i]].wait_time << endl;
}

total
= 0 ;
for (i = 0 ;i < quantity;i ++ ){
total
+= pcbs[i].wait_time;
}
cout
<< " 总等待时间: " << total << " 平均等待时间: " << total / quantity << endl;

}

// 时间片轮转调度算法
void timer()
{
int i,j,number,flag = 1 ;
int passed_time = 0 ;
int max_time = 0 ;
int round = 0 ;

int queue[ 1000 ];
int total = 0 ;

while (flag == 1 ){
flag
= 0 ;
number
= 0 ;

for (i = 0 ;i < quantity;i ++ ){
if (pcbs[i].finished == 0 ){
number
++ ;
j
= i;
}
}

if (number == 1 ){
queue[total]
= j;
total
++ ;
pcbs[j].finished
= 1 ;
}

if (number > 1 ){

for (i = 0 ;i < quantity;i ++ ){
if (pcbs[i].finished == 0 ){
flag
= 1 ;
queue[total]
= i;
total
++ ;
if (pcbs[i].time <= block_time * (round + 1 )){
pcbs[i].finished
= 1 ;
}
}
}
}
round
++ ;
}

if (queue[total - 1 ] == queue[total - 2 ]){
total
-- ;
}

cout
<< endl << " --------------------------------------------------------------- " << endl;
cout
<< " 时间片轮转调度执行流: " ;
for (i = 0 ;i < total;i ++ ){
cout
<< pcbs[queue[i]].name << " " ;
}


}

// 显示版权信息函数
void version()
{
cout
<< endl << endl;

cout
<< " ┏━━━━━━━━━━━━━━━━━━━━━━━┓ " << endl;
cout
<< " ┃       进程调度模拟系统         ┃ " << endl;
cout
<< " ┠───────────────────────———————┨ " << endl;
cout
<< " ┃    (c)All Right Reserved Neo       ┃ " << endl;
cout
<< " ┃      sony006@163.com       ┃ " << endl;
cout
<< " ┃     version 2004 build 1122     ┃ " << endl;
cout
<< " ┗━━━━━━━━━━━━━━━━━━━━━━━┛ " << endl;
cout
<< endl << endl;
}


// 主函数
void main()
{
int flag;

version();

initial();

flag
= readData();

if (flag == 1 ){
FIFO();
init();

privilege();
init();

timer();
}
}

 

转载于:https://www.cnblogs.com/FCWORLD/archive/2010/12/04/1896340.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(一) 进程调度 的相关文章

  • Maven学习总结(八)——使用Maven构建多模块项目

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Maven学习总结 八 使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护 xff0c 我们一般会进行分层开发 xff0c 最常见的就是分为d
  • Echache整合Spring缓存实例讲解

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 摘要 xff1a 本文主要介绍了EhCache xff0c 并通过整合Spring给出了一个使用实例 一 EhCache 介绍 EhCache 是一个纯Java的进程内缓存
  • XML学习总结(1)——XML入门

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 XML语法学习 学习XML 语法的目的就是编写 XML 一个XML文件分为如下几部分内容 xff1a 文档声明 元素属性注释 CDATA区 特殊字符 处理指令 xff0
  • 多个jar包合并成一个jar包(ant)

    https blog csdn net gzl003csdn article details 53539133 多个jar包合并成一个jar 使用Apache的Ant是一个基于Java的生成工具 这个工具的全名是another neat t
  • 国家电网大数据中心成立

    国家电网大数据中心成立国家电网大数据中心成立 5 月 21 日 xff0c 国家电网有限公司举行国网大数据中心成立揭牌仪式暨大数据发布会 xff0c 同时启动中国电力大数据创新联盟筹备工作 公司董事长 党组书记寇伟为国网大数据中心成立揭牌
  • shell的进阶编程

    shell的进阶编程 关于for for 变量名字 in 列表 xff1b do 循环体 done 例如for for NAME in WORDS do COMMANDS don其中前面的name就是个变量名 xff0c 而且不需要加 xf
  • 多线程程序写日志时遇到加锁的问题

    前段时间在做项目时 xff0c 系统是个多线程程序 xff0c 几个线程都需要写日志 xff0c 主线程和通讯线程经常在写日志时打架 xff0c 为了解决这个问题 xff0c 考虑在写日志的方法中加锁 代码如下 xff1a lt summa
  • imba 为什么那么快?

    本专栏思考不周到 imba 文档 下面列出vue作者的关于虚拟dom的评论 xff1a 在比较性能的时候 xff0c 要分清楚初始渲染 小量数据更新 大量数据更新这些不同的场合 Virtual DOM 脏检查 MVVM 数据收集 MVVM
  • 学习记录-数组算法题:最大子数组

    内容摘自现代 JavaScript 教程 题干 输入是以数字组成的数组 xff0c 例如 arr 61 1 2 3 4 9 6 任务是 xff1a 找出连续的 arr 的子数组 xff0c 其里面所有项的和最大 写出函数 getMaxSub
  • 项目管理之代码合并

    由于现在项目发布比较频繁 xff0c 因而经常需要改变版本 xff0c 但是为了能够保有一个最新的CodeFix版本 xff0c 所以 我们也需要在修改主线版本的同时同步合并修改的内容到Fix版本 由于种种原因经常导致合并到CodeFix的
  • C#日写点滴(1)

    渐渐感觉 xff0c 学一种知识 xff0c 脚踏实地 xff0c 一步一步是多么重要 以前习惯一看几十页 xff0c 以为学了很多 xff0c 很有成就感 xff0c 在要用的时候 xff0c 会想起来看过 xff0c 可具体怎么用 xf
  • download excel file from datagrid for webpage

    lt summary gt Summary description for WebExcelUtil lt summary gt public sealed class WebExcelUtil public static void Gen
  • C#:装箱和拆箱

    C 允许 值类型 的任何值与 Object 类型的值相互转换 装箱是将值类型转换为引用类型 xff1b 拆箱是将引用类型转换为值类型 xff1b int i 61 100 object o 61 i 装箱 xff1a 将值类型i转化为了ob
  • 漂亮的登陆框

    转载于 https www cnblogs com aspphpvbs archive 2013 04 20 3033057 html

随机推荐

  • IOS设计模式浅析之抽象工厂模式(Abstract Factory)

    概述 在前面两章中 xff0c 分别介绍了简单工厂模式 和工厂方法模式 xff0c 我们知道简单工厂模式 的优点是去除了客户端与具体产品的依赖 xff0c 缺点是违反了 开放 关闭原则 xff1b 工厂方法模式 克服了简单工厂模式 的缺点
  • 软件工程小组第八次会议记录

    会议主题 xff1a 确定各个接口的命名及功能 与会时间 xff1a 6月17日 与会地点 xff1a 逸夫楼C202 与会成员 xff1a 尚卓燃 张世豪 傅宇豪 王昊钰 会议记录 xff1a 前端与后端讨论了接口的命名和功能 xff0c
  • Ant入门教程

    本内容包含了Ant的历史简要介绍 xff0c Ant的功能以及Ant框架的介绍 xff0c 并对下载安装使用Ant进行了示例介绍 xff0c 同时通过一个Java程序讲解了Ant的基本使用方法 1 Ant简介 xff1a 这里引用Ant帮助
  • Python 与系统管理

    作为一名系统管理员 xff0c 您可能碰到过各种各样的挑战和问题 管理用户 磁盘空间 进程 设备和备份 xff0c 可能让许多系统管理员绞尽脑汁 xff0c 从而变得心情郁闷 甚至精神错乱 Shell 脚本可以为此提供帮助 xff0c 但是
  • Nuget控制台 - 给你的快速添加缺少的包

    利用命令行安装包 转载于 https www cnblogs com davidgu p 3250663 html
  • Swift语言精要 - Operator(运算符重载)

    运算符重载 Swift的这一语言特性或许应该启发于C 43 43 class Vector2D var x Float 61 0 0 var y Float 61 0 0 init x Float y Float self x 61 x s
  • 关于研究性和工程性

    自己将要往哪个方向发展呢 xff1f 最近一段时间很认真的考虑了一下周围的人 xff0c 有做工程的 xff0c 有做研究的 xff0c 还有做商务的 做工程实际具体 xff0c 相对简单些 xff0c 但是可能薪水也相对低一些 xff1b
  • C#日写点滴(2)

    CTS Common Type System 公共类型系统 C 认可的基本预定义类型并没有内置于C 语言中 xff0c 而是内置于 NET Framework中 例如 xff0c 在C 中声明一个int类型的数据时 xff0c 声明实际上是
  • SQL-关联查询【转】

    T A A表 T B B标 xff0c id为表与表相关联的字段 96 创建相关表结构 span class hljs keyword CREATE span class hljs keyword TABLE Table B span cl
  • char, varchar, nchar, nvarchar (Transact-SQL)

    char 和 varchar Transact SQL 长度固定或可变的字符串数据类型 char n 固定长度 xff0c 非 Unicode 字符串数据 n 用于定义字符串长度 xff0c 并且它必须为 1 到 8 000 之间的值 存储
  • .net中类(class)与结构(struct)的不同

    Class可以被实例化 属于引用类 型 是分配在内存的堆上的 类是引用传递的 Struct属于值类型 是分配在内存的栈上的 结构体是复制传递的 Int32 Boolean等都属于结构体 转载于 https www cnblogs com b
  • Intro to asp.net MVC 简单的小程序(2)

    我们做的很简单 xff0c 就是一个电影的表单 xff0c 显示还有创建 强大的封装真的很好用 xff0c 当我们新建的视图的时候 xff0c 强类型下面都有封装好的 Create List Details 很多 xff0c 我们只要选择一
  • 利用网站上传漏洞使用一句话木马控制服务器

    一句话木马 常用于php asp aspx php lt php echo shell exec GET 39 cmd 39 gt asp lt execute request 34 value 34 gt aspx lt 64 Page
  • 用MotoMidMan给L7批量安装java程序

    在给手机装完驱动后 可以通过MotoMidMan给手机内存安装java程序 需要资源 数据线 MotoMidMan java程序 由一个 jar文件与一个 jad文件组成 操作步骤 1 下载完的是个压缩包 扩展名为 rar 解压完的文件清单
  • 28. Implement strStr()

    public class Solution public int strStr String haystack String needle int next 61 new int needle length generateNextArra
  • Oracle数据库删除了数据如何恢复

    再操作数据库时 xff0c 有时候误删了数据或者更新数据时忘记设置更新条件 xff0c 要是这时候没有提交事务 xff0c 还可以执行回滚操作 要是这时候不小心提交了 xff0c 数据也是可以恢复的 我们只需要执行下面这句sql selec
  • (译)ASP.NET MVC Routing 概述

    ASP NET MVC Routing 概述 在本篇教程中 xff0c 你将会了解到 ASP NET MVC 中一个重要的组件 这个组件叫做 ASP NET Routing xff0c 它负责将客户端请求的路径映射到特定的一个类 Contr
  • eclipse中mysql java驱动的安装

    1 下载mysql connector java x x x zip 2 将压缩包中的mysql connector java x x x bin解压到eclipse中需要导入驱动的工程的根目录下 3 在eclipse中右键该工程选择属性
  • 如何使用gettext, po, mo制作多语言应用程序 (转)

    一 翻译档制作部分 1 制作 po 档 1 生成template文件 xgettext k o ui pref pot ui c pref pot head fuzzy msgid 34 34 msgstr 34 34 34 Project
  • (一) 进程调度

    进程调度算法有FIFO xff0c 优先数调度算法 xff0c 时间片轮转调度算法 xff0c 分级调度算法 xff0c 目前主要是考虑FIFO和优先数调度算法 xff08 静态优先级 xff09 输入 xff1a 进程流文件 xff0c