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 ...
随机推荐
- STM32 Cubemx 输出可调频率与占空比的PWM
这里就不对STM32的PWM进行讲解了,想要了解的可以百度一下,这里主要说怎么实现. 1.建立工程,我选的是STM32F103zet6芯片,选择定时器的PWM功能 2.配置时钟,我这里配的是内部时钟, ...
- nutch的一些基础整理
nutch的一些基础整理 原创 2015年03月22日 18:18:01 标签: nutch / 240 编辑 删除 一.关于配置文件: nutch-default.xml:爬虫的默认配置.在${nu ...
- SQL SERVER-主键的建立和删除
PRIMARY KEY 约束唯一标识数据库表中的每条记录.主键必须包含唯一的值.主键列不能包含 NULL 值.每个表都应该有一个主键,并且每个表只能有一个主键.主键约束操作包含了添加约束和删除约束,修 ...
- 鸟哥的Linux私房菜-----11、压缩指令与正则表示法
- 关于sql中的with(nolock)
SQL Server 中的 NOLOCK 究竟是什么意思 一般用于此类语句中:select * from t with(NOLOCK) nolock是不加锁查询.能够读取被事务锁定的数据,也称为脏读. ...
- legend---十一、thinkphp事务中if($ans1&&$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里
legend---十一.thinkphp事务中if($ans1&&$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里 一.总结 一句话总结:执行的条件其 ...
- xBIM 实战03 使用WPF技术实现IFC模型的加载与浏览
系列目录 [已更新最新开发文章,点击查看详细] WPF应用程序在底层使用 DirectX ,无论设计复杂的3D图形(这是 DirectX 的特长所在)还是绘制简单的按钮与文本,所有绘图工作都是 ...
- xBIM 基础09 WeXplorer 基本应用
系列目录 [已更新最新开发文章,点击查看详细] 在本教程中,将学习如何创建最基本和最直接的查看器. 除了展示建筑模型外,不做其他任何操作.它将只使用内置导航,但是不会对按钮做出事件响应. &l ...
- Django之ORM数据库增删改查
总结:ORM的 查.增.删.改 - 查 - client - 有一个展示页面(xxx_show.html) - 这一个页面一输入执行后,get请求向server端发送 - 这个展示页面有添加按钮.删除 ...
- APACHE KYLIN™ 概览(分布式分析引擎)
Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区.它能 ...