操作系统算法模拟实例之单处理机系统进程调度

1.实验目的

在多道程序或多任务系统中,系统回时处于就绪态的进程有若干个,为使系统中
的各进程能有条不素地运行,必须选择某种调度策略,以选择一进程占用处理机。
要求学生设计一个模拟单处理机调度算法,以巩固和加探对进念和进程调度算法的理解。

2.实验内容

编写程序完成单处理机系统中的进程调度,要求采用最高优先级优先调度算法。具体内容包括

  • 确定进程控制块的内容和组织方式;
  • 完成进程创建原语和进调度原语:
  • 编写主函数井对所做的工作进行测试

3.实验指导

进程调度算法:

采用最高优先级优先调度算法(即把处理机分配给优先级最高的进程)和先来先服务调度算法,每个进程用一个进程控制块(PCB)表示,进程控制块可以包含以下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间,进程状态等。进程的优先数(表示优先级别)及需要的运行时间可以事先人为描定(也可以随机数产生),进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位。

每个进程的状态可以是就绪W(Wait),运行R(Run)或完成F( Finish)三种状态之就绪进程获得CPU后都只能运行一个时间片,用已占用CPU时间加1来表示,如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则激销该进程,如果运行一个时间片后进程的已占用CPU时间还未达到所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。

每进行一次,调度程序都打印一次运行进程,就绪队列以及各个进程的PCB,以假进
行检查。重复以上过程,直到所有进程都完成为止。

4.程序实例

#include"stdio.h"
#include <stdlib.h>
#include <conio.h>
#define getpch(type)(type *)malloc(sizeof(type))struct pcb               //定义进程控制块
{char name[10];char state;int super;int ntime;int rtime;struct pcb* link;
}*ready=NULL,*p;
typedef struct pcb PCB;
int sort()                  //建立对进程进行优先级排列的函数
{PCB *first,*second;int insert = 0;//优先级最大者,插入队首if((ready==NULL)||((p->super )>(ready->super ))){p->link =ready;ready=p;}else        //进程比较优先级,插入适当的位置中{first = ready;second = first->link ;while(second != NULL){ //插入进程比当前进程优先数大、插到当前进程前面if((p->super )>(second->super )){p->link =second;first->link = p ;second = NULL;insert = 1;}else    //插入进程优先级数最低,则插入到队尾{first=first->link ;second=second->link ;}}if(insert==0)   first->link=p;}
}
/*说明:上述程序首先定义进程控制块结构,然后对每个进程的优先级赋初值,完成优先级的排序过程,把优先级大的进程插入就绪队首,等待cup调度,该实验完成了优先级大者优先调度的原则,从而对进程调度过程加深理解和掌握
*/
int input() //建立进程控制块函数
{int i,num;system("cls");       //清屏printf("\n请输入进程个数?");scanf("%d",&num);for(i = 0; i < num; i++){printf("\n进程号 No.%d:\n",i);p = getpch(PCB);printf("\n输入进程名:");scanf("%s",p->name );printf("\n 输入进程优先数:");scanf("%d",&p->super );printf("\n 输入进程运行时间:");scanf("%d",&p->ntime );printf("\n");p->rtime = 0;p->state = 'w';p->link = NULL;sort();}
}
int space()
{int l = 0;PCB *pr = ready;while(pr!=NULL){l++;pr = pr->link;}return(l);
}
int disp(PCB *pr)
{printf("\n qname\t state\t super \t ndtime \t runtime \n");printf("|%s\t",pr->name);printf("|%c\t",pr->state);printf("|%d\t",pr->super);printf("|%d\t",pr->ntime);printf("|%d\t",pr->rtime);printf("\n");}
int check()         //进程查看函数
{PCB *pr;printf("\n****当前正在运行的程序是:%s",p->name );     //显示当前运行进程disp(p);pr=ready;printf("\n****当前就绪队列状态为:\n");                //显示就绪队列状态while (pr!=NULL){disp(pr);pr=pr->link;}
}
int destroy()                      //建立进程撤销函数(进程运行结束,撤销进程)
{printf("\n进程{%s}已完成.\n",p->name );free(p);}
int running()                  //建立进程就绪函数(进程运行时间到,置就绪状态)
{(p->rtime )++;if(p->rtime ==p->ntime )destroy();else{(p->super )--;p->state ='w';sort();}
}
int main()
{int len,h = 0;char ch;input();len = space();while((len!=0)&&(ready != NULL)){ch=getchar();h++;printf("\n The execute number:%d\n",h);p=ready;ready=p->link ;p->link =NULL;p->state ='R';check();running();printf("\n 按任意键继续....");ch=getchar();}printf("\n\n进程已经完成.\n");ch=getchar();
}

操作系统算法模拟实例之单处理机系统进程调度相关推荐

  1. 单处理机系统的进程调度动态优先_操作系统复习笔记(王道)C2.1

    进程与线程 一.进程特征和概念 前提:允许多个程序并发执行. 1.概念 PCB(process control block)进程控制块,系统利用 PCB 来描述进程的基本情况和运行状 态,进而控制和管 ...

  2. 单处理机系统的进程调度实验_Chcore -- 上交IPADS操作系统银杏书配套Lab实验笔记 - Lab3进程与异常(一)...

    实验为IPADS<现代操作系统原理与实现>配套实验,慕课上有完整的课程教学视频,以下为个人实验过程和踩坑记录. Capability 为什么需要有capability?用户进程是不能直接访 ...

  3. AGV调度系统/两阶段算法模拟源代码 地图建模

    (多)AGV调度系统/两阶段算法模拟源代码 地图建模c++/openTCS 1.AGV调度系统源码(OpenTCS)(OpenTCS是一个开源的AGV调度系统程序,能给初入AGV 行业的人士一些帮助, ...

  4. 操作系统实验1—实现单处理机下的进程调度程序

    操作系统实验1-实现单处理机下的进程调度程序 文章目录 操作系统实验1-实现单处理机下的进程调度程序 实验描述 设计思路 上机代码 测试结果 心得体会 实验描述 实验内容: 编写一个单处理机下的进程调 ...

  5. 操作系统笔记——Linux系统实例分析、Windows系统实例分析

    文章目录 传送门 Linux进程管理 Linux进程组成 Linux进程链表 Linux进程控制 用户进程创建与撤销 0,1,2号进程 Linux进程切换 Linux进程调度 内核同步 Linux储存 ...

  6. 操作系统原理模拟实验(基于C/C++模拟处理机调度、存储管理和文件系统)

    目录 引言 一.处理机调度模拟 1.下载链接 2.目的与要求 3.截图示例 二.存储管理模拟 动态分区分配 1.下载链接 2.目的与要求 3.截图示例 分页存储地址转换 1.下载链接 2.目的与要求 ...

  7. 操作系统银行家算法模拟实现(C语言版)

    目录 一.实验目的 二.实验内容 三.实验要点说明 银行家算法实例 程序结构 四.实验代码 五.实验运行结果 一.实验目的 通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁.产生死锁的 ...

  8. 计算机操作系统实验:银行家算法模拟

    目录 前言 实验目的 实验内容 实验原理 实验过程 代码如下 代码详解 算法过程 运行结果 总结 前言 本文是计算机操作系统实验的一部分,主要介绍了银行家算法的原理和实现.银行家算法是一种用于解决多个 ...

  9. 华南理工大学计算机操作系统课程设计大作业银行家死锁避免算法模拟,2016春操作系统大作业银行家死锁避免算法模拟.doc...

    文档介绍: 2016春操作系统大作业银行家死锁避免算法模拟20160501华南理工大学"计算机操作系统"课程设计大作业计算机科学与技术专业:春2015班级:号:2015047420 ...

最新文章

  1. 程序员语言也有鄙视链!某美团程序员爆料:筛选简历时,用go语言的基本不看!网友:当韭菜还当出优越感了!...
  2. spring boot二:搭建环境
  3. 使用python 下载_使用python下载大量文件
  4. OpenCV自带dnn的Example研究(3)— object_detection
  5. [多图]Google Chrome漫画书中文版
  6. Visual C++编程中的文件操作
  7. ​智能驾驶疆场,海天瑞声的「数据」纵横论
  8. 关于蛙跳算法的计算机文献,文化蛙跳算法性能分析研究.PDF
  9. mysql字段里面有16字节特殊字符替换
  10. RTSP视频流开发经验总结
  11. 关于matlab的erf与erfc
  12. my ReadBook_liutongjingjixue / circulation economics
  13. 计算机应用基础课程学什么,计算机专业本科课程 主要学什么
  14. ios wkweb设置图片_ios·WKWebView\UIWebView加载HTMLString,实现图片懒加载
  15. 论文写作 16: 图片与图摘要
  16. 网络与信息安全工程师职位要求
  17. Nginx的部署与配置
  18. Pyspark 读 DataFrame 的使用与基本操作
  19. WordCount编程及执行流程
  20. java的段子_java爬取捧腹网段子(多线程版)

热门文章

  1. 南京理工计算机学院考研真题,南京理工大学计算机考研历年真题
  2. 【日积月累】Spring
  3. float子元素超出父元素解决办法
  4. 数据结构java版之《简单排序》
  5. 美团外卖订单状态html,美团外卖商家获取订单-signToken取值(示例代码)
  6. .NET中间件 -- MEF2
  7. 树莓派4B关于cpu降频的查看与修改
  8. 工作纪实_25-SpringCloud整合sentinel问题汇总
  9. 成本费用空缺,所得税税负高,怎么合理避税?
  10. PHP实现一次性多张图片上传功能