进程调度时间片轮转例题_进程调度算法java

进程调度时间片轮转例题_进程调度算法java一、实验目的(1)加深对进程的理解(2)理解进程控制块的结构(3)理解进程运行的并发性(4)掌握时间片轮转法进程调度算法二、实验原理(1)建立进程控制块(2)设计两个链队列,分别表示就绪队列和完成队列(3)用户输入进程标识符,进程到达时间,进程所需的时间,申请空间存放进程,PCB信息。(

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定



一、实验目的

1) 加深对进程的理解

2) 理解进程控制块的结构

3) 理解进程运行的并发性

4) 掌握时间片轮转法进程调度算法

二、实验原理

1)建立进程控制块

2)设计两个链队列,分别表示就绪队列和完成队列

3)用户输入进程标识符,进程到达时间,进程所需的时间,申请空间存放进程,PCB信息。

4)每一个时间片结束输出各进程的进程标识符,CPU运行时间

,进程所需时间,达到时间,周转时间,以及状态(运行完成或者就绪)


三、实验步骤、数据记录及处理


1.算法流程


本程序中用到抽象数据类型的定义


struct _PCBNode{	char name[20];       //进程名称	int arrive_time;     //到达时间	int need_time;      //服务时间	int cputime;         //CPU已经执行的时间	int accomplish_Time; //完成时间	int turn_over_time;  //周转时间	bool tag;            //是否完成};  class _PCB{	private:	queue<struct _PCBNode> _PNode;	queue<struct _PCBNode> _CNode;	int TIME;}

Jetbrains全家桶1年46,售后保障稳定

 

主程序的流程以及各程序模块之间的层次(调用)关系。

进程调度时间片轮转例题_进程调度算法java

实现概要设计中定义的主要函数,主要函数写出核心算法(要求注释);并尽可能画程

序流程图)

本程序写着的就绪队列中放着客户外界输入未到达的进程,所以在进行时间片轮转时要判断当前时间和到达时间,到达时间大于当前时间时才能CPU的调度
进程调度时间片轮转例题_进程调度算法java
void Pop()//模仿时间轮转调度
	{
		struct _PCBNode node;
		unsigned int n = _PNode.size();
		unsigned int  i = 0;
		for(; i< n; ++i)// for循环找队列中到达时间大于当前时间时的进程
		{
			node = _PNode.front();_PNode.pop();
			if(node.arrive_time <= TIME)
			{
				break;
			}
			_PNode.push(node);

		}

		TIME = TIME+Time_Pice;//模拟进程运行中
		
		if(i == n)//没找到到达时间大于当前时间时的进程		{
			Display_PCB();
			return ;
		}

		node.cputime +=Time_Pice; //进程占有CPU运行的时间

		if(node.cputime >= node.need_time)//完成运行,进入完成队列
		{
			node.accomplish_Time = TIME;
			node.tag = true;
			node.turn_over_time  = node.accomplish_Time -node.arrive_time ;
			_CNode.push(node);  
			cout<<node.name<<"   run over"<<endl;
		}
		else
		{
			_PNode.push(node);
		}
		Display_PCB(); 
	}

2.运行结果分析

时间片被设置为 2,打印TIME时间时就绪队列和运行完成队列的进程状态


进程调度时间片轮转例题_进程调度算法java

四、总结与体会

  通过做本次实验,我模拟了CPU进程调度中的时间片轮转调度算法。时间片轮状调度算法可以实现进程共享CPU。在试验中,我发现时间片不能太大,否则会导致大部分的进程在一个时间片中就能运行完成,不能实现进程对CPU资源的共享。


附录:源程序

#include<iostream> #include<queue> #include<string> using namespace std; #define Time_Pice 2 struct _PCBNode { char name[20]; //进程名称 int arrive_time; //到达时间 int need_time; //服务时间 int cputime; //CPU已经执行的时间 int accomplish_Time; //完成时间 int turn_over_time; //周转时间 bool tag; //是否完成 }; class _PCB { public: void Push(struct _PCBNode& node) { _PNode.push(node); } void init_time() { TIME = 0; } bool empty() { return _PNode.empty(); } void Pop() { struct _PCBNode node; unsigned int n = _PNode.size(); unsigned int i = 0; for(; i< n; ++i) { node = _PNode.front();_PNode.pop(); if(node.arrive_time <= TIME) { break; } _PNode.push(node); } TIME = TIME+Time_Pice; if(i == n) { Display_PCB(); return ; } node.cputime +=Time_Pice; if(node.cputime >= node.need_time) { node.accomplish_Time = TIME; node.tag = true; node.turn_over_time = node.accomplish_Time -node.arrive_time ; _CNode.push(node); cout<<node.name<<" run over"<<endl; } else { _PNode.push(node); } Display_PCB(); } void Display_PCB() { cout<<" TIME "<<TIME<<endl; int n = _PNode.size(); if(n != 0) { cout<<"ready......."<<endl; cout<<"name arrive_time need_time cputime tag"<<endl; for(int i = 0;i<n; ++i) { struct _PCBNode node = _PNode.front();_PNode.pop(); if(node.arrive_time <= TIME) { cout<<node.name<<" "<<node.arrive_time<<" " <<node.need_time<<" "<<node.cputime <<" "<<node.tag <<endl; } _PNode.push(node); } cout<<endl; } n = _CNode.size(); if(n != 0) { cout<<"run over"<<endl; cout<<"name arrive_time need_time accomplish_Time turn_over_time tag"<<endl; for(int i = 0;i<n; ++i) { struct _PCBNode node = _CNode.front();_CNode.pop(); cout<<node.name<<" "<<node.arrive_time<<" " <<node.need_time<<" "<<node.accomplish_Time<<" "<< node.turn_over_time<<" "<<node.tag <<endl; _CNode.push(node); } cout<<endl; } cout<<"**************************************************"<<endl; } private: queue<struct _PCBNode> _PNode; queue<struct _PCBNode> _CNode; int TIME; }; void main() { _PCB pcb; pcb.init_time(); int PCB_Numble; char PCBname[20]; int arrive_time; int need_time; cout<<"input PCB_Numble : "; cin>>PCB_Numble; cout<<"input PCBname arrive_time need_time example A 0 5\n"; for(int i = 0; i<PCB_Numble; ++i) { cin>>PCBname>>arrive_time>>need_time; struct _PCBNode node; strcpy(node.name ,PCBname); node.arrive_time = arrive_time; node.need_time = need_time; node.accomplish_Time = 0; node.cputime = 0; node.tag = 0; pcb.Push(node); } pcb.Display_PCB(); while(!pcb.empty()) { pcb.Pop(); } }  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218958.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Django接受json_django获取post数据

    Django接受json_django获取post数据HttpResponse对象Django服务器接收到客户端发送过来的请求后,会将提交上来的这些数据封装成一个HttpRequest对象传给视图函数。那么视图函数在处理完相关的逻辑后,也需要返回一个响

    2022年7月31日
    5
  • Salesforce中的单点登录简介「建议收藏」

    Salesforce中的单点登录简介「建议收藏」单点登录的定义引自维基百科:单点登录(英语:Singlesignon,缩写为SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,

    2022年8月5日
    7
  • 使用JAX-WS进行应用程序身份验证「建议收藏」

    使用JAX-WS进行应用程序身份验证「建议收藏」在JAX-WS中处理身份验证的常用方法之一是客户端提供“用户名”和“密码”,将其附加在SOAP请求标头中并发送到服务器,服务器解析SOAP文档并检索提供的“用户名”和“密码”从请求标头中进行,并从数据库中进行验证,或者使用其他任何方法。在本文中,我们向您展示如何实现上述“JAX-WS中的应用程序级别认证”。想法…在Web服务客户端站点上,只需将“用户名”和“密码”放入请…

    2022年7月15日
    20
  • UART接口定义_uart接口图片

    UART接口定义_uart接口图片认识UART接口嵌入式里面说的串口,一般是指UART口,但是我们经常搞不清楚它和COM口的区别,以及RS232,TTL等关系,实际上UART,COM指的物理接口形式(硬件),而TTL、RS-232是指的电平标准(电信号)。UART有4个pin(VCC,GND,RX,TX),用的TTL电平,低电平为0(0V),高电平为1(3.3V或以上)。COM口是我们台式机上面常用的口(下图)…

    2022年9月14日
    0
  • uwsgi模式_uwsgi配置详解[通俗易懂]

    uwsgi模式_uwsgi配置详解[通俗易懂]#先激活virtualenv#启动:uwsgiuwsgi.ini#停止:uwsgi–stopuwsgi.pid[uwsgi]#对外提供http服务的端口http=:8000#thelocalunixsocketfilethancommnuincatetoNginx用于和nginx进行数据交互的端口socket=127.0.0.1:8001#the…

    2022年9月11日
    1
  • 剑指 Offer 56 – I. 数组中数字出现的次数

    剑指 Offer 56 – I. 数组中数字出现的次数一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2] 限制:2 <= nums.length <= 10000a ^ a = 0,异或满足交换律所有class Solution {publi

    2022年8月8日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号