gem5中event queue执行原理机制具体分析
搞清楚这个花了两天时间,下面内容为简略版。为了给自己赚点下载用的积分。如须要具体版本号。请点击下载点击打开链接
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcWlhbmxvbmc0NTI2ODg4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
图1 与Event相关的类
以上是在gem5中,event相关的类继承图,SimObject、EventBase是Event的基础类。GlobalEvent继承于Event类。
(1)Event:gem5中全部和时序相关的操作都是由event来驱动的,比方tick、trap、writeback等等。
Event是event queue中的node。不论什么须要使用Event作为基类的子类须要重构虚函数Event中的process()以实现对应的event功能。
1.1 Eventqueue
一系列的event依照时间先后顺序组合成一个eventqueue。
Event的调度使用schedule()函数实现。主要功能就是把event插入对应的eventqueue,event分为两类:同步(synchronous)、异步(asynchronous)event:
同步event:当schedule()函数调度同步event时,event中的global參数会被设置为false,这样的情况仅仅同意在thread持有对应event queue的锁(EventQueue::service_mutex)的情况下。
在调用event处理函数process()时,这个锁一直由当前event queue持有,其自己能够insert event到自己的event queue中,称其这样的插入到当前event queue的event为同步event。
异步event:event能够event queue之间来回调度,仅仅要持有目标event queue的锁。就能够向目标event queue插入event。可是为了防止死锁,假设eventqueue A中的某个event处理过程中须要向B插入event。A必须主动释放其自己的锁,而且申请B的锁后才干插入event,否则easy引起死锁。就算这样,在event queue中迁移的动作的结果是不确定的,这样的情况仅仅能在处理异步IO或者KVM中fast-forwarding情况下同意。
普通的异步event的调度时global參数会被设置为true。跟前面的迁移策略不同的时。这样的行为是确定性的。
当插入异步event时。会先将event插入一个单独的async_queue,当每个simulation quantum结束时,由函数handleAsyncInsertions把async_queue和目标event queue合并起来。
须要注意的是,这样的插入操作的目标event queue须要跟当前event queue的时间差超过一个quantum,否则会easy导致插入的event无法被目标event queue处理函数所处理,即时间上已经past了。
gem5中event queue执行原理机制具体分析的更多相关文章
- Android AsyncTask内部线程池异步执行任务机制简要分析
如下分析针对的API 25的AsyncTask的源码: 使用AsyncTask如果是调用execute方法则是同步执行任务,想要异步执行任务可以直接调用executeOnExecutor方法,多数情况 ...
- 深入理解 JS 引擎执行机制(同步执行、异步执行以及同步中的异步执行)
首先明确两点: 1.JS 执行机制是单线程. 2.JS的Event loop是JS的执行机制,深入了解Event loop,就等于深入了解JS引擎的执行. 单线程执行带来什么问题? 在JS执行中都是单 ...
- Javascript引擎的单线程机制和setTimeout执行原理阐述
工作中使用setTimeout解决了一个问题,于是对setTimeout的相关资料整理了下,以及对js引擎执行的原理一并整理了下,希望能给码农们一些帮助.若发现有错的地方大家及时指出,共同学习进步. ...
- 从虚拟机指令执行的角度分析JAVA中多态的实现原理
从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧 ...
- Android10_原理机制系列_事件传递机制
前言和概述 Android的输入设备,最常用的就是 触摸屏和按键 了.当然还有其他方式,比如游戏手柄,比如支持OTG设备,则可以链接鼠标.键盘等. 那么这些设备的操作 是如何传递到系统 并 控制界面的 ...
- MapReduce调度与执行原理之作业初始化
前言 :本文旨在理清在Hadoop中一个MapReduce作业(Job)在提交到框架后的整个生命周期过程,权作总结和日后参考,如有问题,请不吝赐教.本文不涉及Hadoop的架构设计,如有兴趣请参考相关 ...
- ASP.NET MVC下的异步Action的定义和执行原理[转]
http://www.cnblogs.com/artech/archive/2012/06/20/async-action-in-mvc.html Visual Studio提供的Controller ...
- linux中的热插拔和mdev机制
mdev手册(自己翻译的留着看) mdev实现U盘或SD卡的自动挂载 mdev的使用以及mdev.conf的规则配置--busybox linux中的热插拔和mdev机制 关于实现udev/mdev自 ...
- Zookeeper执行原理的详细概述
文章作者:Holy Null,来源:http://holynull.leanote.com/post/Zookeeper,非常感谢作者提供如此优秀的原创文章,作者通过俩个月的努力将<Hadoop ...
随机推荐
- java内存管理之垃圾回收及JVM调优
GC(garbage Collector 垃圾收集器)作用:a.内存的动态分配:b.垃圾回收注:Java所承诺的自动内存管理主要是针对对象内存的回收和对象内存的分配. 一.垃圾标记 程序计数器.Jav ...
- HDU 1709
MB,一开始就想到是不是只要加上一个不选择砝码的情况,但一直没动手做,因为看了看网上了,觉得总有点复杂,认为自己想错了.... 相信自己 #include <iostream> #incl ...
- 2014百度之星资格赛—— Xor Sum(01字典树)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
- aliyun Ubuntu 14.04 64bit OpenJDK Tomcat7 install
my work environment: aliyun Ubuntu 14.04 64位 first phase:apt-get update (it is very important,oth ...
- android 读取xml
在有些应用中,有一点小数据.直接存储在XML就是.实现较为简单, 1.xml文件放入asset目录.结构如: <?xml version="1.0" encoding=&qu ...
- NOIP2017提高组模拟赛4 (总结)
NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...
- pjlib深入剖析和使用详解
1. PJSIP简介 PJSIP的实现是为了能在嵌入式设备上高效实现SIP/VOIP.其主要特征包括: 1).极具移植性.(Extremely portable) ...
- SPOJ 694/705 后缀数组
思路: 论文题*n Σn-i-ht[i]+1 就是结果 O(n)搞定~ //By SiriusRen #include <cstdio> #include <cstring> ...
- http请求post,返回excel文件,并接收
1.post的方法里要加responseType: 'arraybuffer'参数,不然下载的excel会乱码 2.使用{type: "application/vnd.ms-excel&qu ...
- pugixml读取unicode编码的xml文件的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 实际上在多字节编码的情况下,即以记事本打开显示的ANSI编码的,如下图: pugixml是可以直接读取中文字符的,示例 ...