`
PatternCat
  • 浏览: 8647 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

3.CPU模型

 
阅读更多
一个中央处理器可带若干个终端。终端每隔一定时间(均值为25秒的指数分布)向CPU传送一个任务,服务时间服从均值为0.8秒的指数分布。
   该计算机系统用轮转法选择下一进程。
   1  CPU为每一个任务分配的服务时间最大为:
       q=0.1秒。
   2  若进程的剩余服务时间s<=q,CPU用s+t时间
       处理该进程(t=0.015秒,切换时间)。
   3  若s>q,CPU用q+t完成该任务的处理
       和切换后,该任务排到队尾,剩余服
       务时间减少q。CPU为下一进程服务。
   4  重复上述步骤直到某任务结果返回终
       端,经过一定间隔时间下一任务再传
       出。
   5  模拟处理完1000个任务的情形。在响
       应时间低于30秒的前提下,求CPU可
       带最大终端数和CPU的利用率。

事件:n个到达,1个离开
思路:
  1.到达事件:记录到达时间,服务时间,所属终端,该终端的下一个到达时间无穷。
    若CPU不忙,则占用CPU,CPU状态设忙,安排占用CPU.
  2.安排占用CPU:若本次可以完成处理,则安排离开系统的时间,所需的剩余服务时间为0;若还得继续处理,则安排离开CPU时间,计算所需的剩余服务时间。
  3.离开CPU事件:若已经处理完成,计算响应时间,安排下一个的到达,若系统为空,则设备只闲,下次离开CPU不发生,若不空,则安排队首占用CPU。
     若没服务完成,若系统只有自己,安排自己占用CPU,若系统还有其他人,安排队首占用CPU,自己排到队尾。

java程序1:事件数组版本:
到达事件:
public void arrive(int terminalNo){
		this.currentTime=events[terminalNo];
		this.numberOfTaskInSystem++;
		Task tmp=new Task();
		tmp.setArriveTime(events[terminalNo]);
		tmp.setServiceTime(this.GenerateExpRandom(theta2));
		tmp.setTerminalNo(terminalNo);
		queue.add(tmp);
		System.out.println("at "+this.currentTime+"----terminal["+tmp.getTerminalNo()+"] arrived...");
		events[terminalNo]=this.INFINITE;
		
		if(statusBusy==false){
			this.statusBusy=true;
			this.task=this.queue.getFirst();
			this.occupyCPU();
		}
		
		
	}


占用CPU:
public void occupyCPU(){
		//this.task=queue.getFirst();
		if(task.getServiceTime()<=this.cycleTime){
			events[TerminalSize+1]=task.getServiceTime()+this.currentTime;
			task.setServiceTime(0.0);
		}else{
			events[TerminalSize+1]=this.cycleTime+this.currentTime;
			task.setServiceTime(task.getServiceTime()-this.cycleTime);
		}
	}



离开CPU:
public void depart(){
		this.currentTime=events[TerminalSize+1];
		if(task.getServiceTime()==0){
			// 可以离开系统,计算停留时间
			this.stayingTime+=this.currentTime-task.getArriveTime();
			this.finishNumer++;
			//安排此终端下次到达时间
			events[task.getTerminalNo()]=this.currentTime+this.GenerateExpRandom(theta1);
			this.numberOfTaskInSystem--;
			queue.removeFirst();
			System.out.println("at "+this.currentTime+"----terminal["+task.getTerminalNo()+"] depart cpu...");
		
			if(this.numberOfTaskInSystem==0){
				this.statusBusy=false;
				events[TerminalSize+1]=this.INFINITE;
				
			}else{
				
				this.task=queue.getFirst();
				this.occupyCPU();
			}
		}else{
			if(this.numberOfTaskInSystem==1){
				this.occupyCPU();
			}else{
				Task tmp=queue.getFirst();
				queue.removeFirst();
				queue.addLast(tmp);
				this.task=queue.getFirst();
				this.occupyCPU();
			}
		}
	}


链表版本:
到达CPU:
public void arrive(Event e){
		this.currentTime=e.getTime();
		this.numberOfTaskInSystem++;
		Task tmp=new Task();
		tmp.setArriveTime(e.getTime());
		tmp.setServiceTime(this.GenerateExpRandom(theta2));
		tmp.setTerminalNo(e.getTerminalNo());
		queue.add(tmp);
		System.out.println("at "+this.currentTime+"----terminal["+tmp.getTerminalNo()+"] arrived...");
		
		
		if(statusBusy==false){
			this.statusBusy=true;
			this.task=this.queue.getFirst();
			this.occupyCPU();
		}
		
		
	}


占用CPU:
public void occupyCPU(){
		//this.task=queue.getFirst();
		Event e=new Event();
		e.setEventType(Event.departType);
		e.setTerminalNo(task.getTerminalNo());
		
		if(task.getServiceTime()<=this.cycleTime){
			
			e.setTime(task.getServiceTime()+this.currentTime);
			task.setServiceTime(0.0);
		}else{
			e.setTime(this.cycleTime+this.currentTime);
			task.setServiceTime(task.getServiceTime()-this.cycleTime);
		}
		
		eventList.add(e);
	}


离开CPU:
public void depart(Event e){
		this.currentTime=e.getTime();
		if(task.getServiceTime()==0){
			// 可以离开系统,计算停留时间
			this.stayingTime+=this.currentTime-task.getArriveTime();
			this.finishNumer++;
			//安排此终端下次到达时间
			//System.out.println("测试两个地方的终端号:"+(e.getTerminalNo()==task.getTerminalNo()));
			Event e1=new Event();
			e1.setEventType(Event.arriveType);
			e1.setTerminalNo(e.getTerminalNo());
			e1.setTime(this.currentTime+this.GenerateExpRandom(theta1));
			eventList.add(e1);
			
			this.numberOfTaskInSystem--;
			queue.removeFirst();
			System.out.println("at "+this.currentTime+"----terminal["+task.getTerminalNo()+"] depart cpu...");
		
			if(this.numberOfTaskInSystem==0){
				this.statusBusy=false;
				
				
			}else{
				
				this.task=queue.getFirst();
				this.occupyCPU();
			}
		}else{
			if(this.numberOfTaskInSystem==1){
				this.occupyCPU();
			}else{
				Task tmp=queue.getFirst();
				queue.removeFirst();
				queue.addLast(tmp);
				this.task=queue.getFirst();
				this.occupyCPU();
			}
		}
	}

分享到:
评论

相关推荐

    一种用于ASIC芯片测试的多接口CPU模型的VHDL设计.pdf

    "一种用于ASIC芯片测试的多接口CPU模型的VHDL设计" 本文主要介绍了一种用于ASIC芯片测试的多接口CPU模型的...3. [3] CPU模型在测试中的研究文献 4. [4] 仿真测试和验证相关文献 5. [5] 硬件描述语言(HDL)相关文献

    cpu_nms.py

    重写覆盖原模型中使用的 cpu_nms.pyx, 解决碰到的 ModuleNotFoundError: No module named 'utils.nms.cpu_nms' 报错

    CPU与简单模型机设计实验.pdf

    CPU与简单模型机设计实验 CPU(Central Processing Unit,中央处理单元)是计算机的主要组成部分,负责执行指令和控制计算机的运算。简单模型机设计实验是计算机组成原理实验的重要部分,旨在掌握简单 CPU 的组成...

    从pytorch生成MLU220支持的离线模型(.cambricon)

    这些文件在CPU或GPU上运行时非常有效,但为了在特定硬件平台上运行,例如搭载MLU220芯片的设备,我们需要将模型转换为该硬件支持的格式。本篇文章将详细介绍如何将PyTorch模型转换为`.cambricon`格式,以便在MLU220...

    用于directx的一些.x模型

    .x模型可能包含大量数据,对内存和CPU有较高需求。因此,优化模型加载、减少冗余数据、使用适当的压缩技术和数据结构等都是提高游戏性能的关键。 总结起来,"用于DirectX的一些.x模型"涵盖了3D模型在DirectX游戏...

    CPU模型机.zip

    《CPU模型机设计详解》 在信息技术领域,CPU(中央处理器)是计算机系统的核心,它负责执行所有的计算和控制任务。本项目“湖南大学数电综合设计——模型机”聚焦于CPU模型的设计与实现,涵盖了从基本逻辑单元到...

    Windows下cpu部署运行清华大学ChatGLM-6B语言模型(详解).docx

    这一步骤是确保模型能够在CPU上正确运行的关键。 最后,运行ChatGLM-6B模型有两种主要方式:在Python程序中直接调用,或者通过命令行接口。在Python环境中,可以导入`transformers`库的`AutoTokenizer`和`AutoModel...

    西门子PLC;S7-1200;CPU-1215C-3D模型.STEP

    3D模型.STEP文件则能够提供CPU-1215C的精确尺寸信息。这种三维模型可以直观地展示PLC的外观、尺寸和接口位置,有助于在工程设计阶段避免安装冲突。例如,通过查看3D模型,设计师可以确认PLC是否能适应有限的空间限制...

    西门子S7-300 315 CPU_iso三维模型图.zip

    这个"西门子S7-300 315 CPU_iso三维模型图.zip"压缩包包含的是一份关于这款CPU的三维模型图,这对于系统集成、工程设计和故障排查等环节具有重要意义。 首先,了解S7-300 315 CPU的基本规格和特性是至关重要的。它...

    cpu 内存模型和java内存模型

    Java程序员了解CPU以及相关的内存模型,对于深入理解Java内存模型以及并发编程至关重要。CPU作为计算机硬件的核心,其架构和工作原理影响着软件的性能和执行效率。尤其在Java这种多线程、高并发的编程语言中,对CPU...

    CPU验证平台的研究与实现.pdf

    3. CPU 验证平台的结构:CPU 验证平台的结构通常包括四个部分:测试用例生成器、验证引擎、测试平台和结果分析器。测试用例生成器负责生成测试用例,验证引擎负责执行测试用例,测试平台负责运行测试用例,而结果...

    VHDL写的八位模型机CPU

    在这个项目中,我们关注的是一个用VHDL编写的八位模型机CPU。这个CPU具有基本的算术和逻辑运算功能,以及控制流程操作,如跳转和输出。 首先,让我们了解一下CPU的基本结构。CPU是计算机的核心部件,负责执行指令、...

    h5模型转为.kmodel/.tflite/.pb文件

    3. **.pb 转换**:.pb是TensorFlow的图定义和模型权重的二进制文件,通常用于保存模型以便于部署。要从H5转换为.pb,首先需要将H5模型加载到TensorFlow中,然后使用`tf.saved_model.save`函数保存模型。.pb文件可与...

    CPU界面传热过程热接触模型研究.pdf

    3. CPU 的传热过程:论文中讨论了 CPU 产生的热量传递到集成式散热器、空气散热器和周围环境空气中的过程。这包括了 CPU 产生的热量传递到集成式散热器、集成式散热器传递到空气散热器、空气散热器传递到周围环境...

    单周期CPU模型机的设计与实现 SingleCycleCPU.rar

    在这个项目中,Verilog被用来编写单周期CPU的逻辑电路模型。 4. **FPGA**:Field Programmable Gate Array(现场可编程门阵列)是可重构硬件平台,能够根据Verilog代码配置为实现特定的逻辑功能。在单周期CPU设计中...

    C++使用onnxRt部署tensorflow .pb模型源代码

    使用onnxRt CPU 部署tensorflow模型 需要使用tensorflow simple_save将模型保存为带参数的pb模型,再转化为onnx模型进行部署。训练:TensorFlow1.13.1 cuda 10.0 cudnn7.6.5 部署:cuda10.2 tensorRT8.0.1.6 cudnn...

    简易CPU模型设计verilog.pdf

    在本篇内容中,我们将探讨如何使用Verilog设计一个简易的CPU模型。这个CPU模型包含了五条基本指令,主要用于操作累加器和内存,并通过状态机控制整个计算流程。以下是详细的设计过程和相关知识点: 1. **指令集**: ...

Global site tag (gtag.js) - Google Analytics