搞清楚这个花了两天时间,下面内容为简略版。为了给自己赚点下载用的积分。如须要具体版本号。请点击下载点击打开链接

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执行原理机制具体分析的更多相关文章

  1. Android AsyncTask内部线程池异步执行任务机制简要分析

    如下分析针对的API 25的AsyncTask的源码: 使用AsyncTask如果是调用execute方法则是同步执行任务,想要异步执行任务可以直接调用executeOnExecutor方法,多数情况 ...

  2. 深入理解 JS 引擎执行机制(同步执行、异步执行以及同步中的异步执行)

    首先明确两点: 1.JS 执行机制是单线程. 2.JS的Event loop是JS的执行机制,深入了解Event loop,就等于深入了解JS引擎的执行. 单线程执行带来什么问题? 在JS执行中都是单 ...

  3. Javascript引擎的单线程机制和setTimeout执行原理阐述

    工作中使用setTimeout解决了一个问题,于是对setTimeout的相关资料整理了下,以及对js引擎执行的原理一并整理了下,希望能给码农们一些帮助.若发现有错的地方大家及时指出,共同学习进步. ...

  4. 从虚拟机指令执行的角度分析JAVA中多态的实现原理

    从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧 ...

  5. Android10_原理机制系列_事件传递机制

    前言和概述 Android的输入设备,最常用的就是 触摸屏和按键 了.当然还有其他方式,比如游戏手柄,比如支持OTG设备,则可以链接鼠标.键盘等. 那么这些设备的操作 是如何传递到系统 并 控制界面的 ...

  6. MapReduce调度与执行原理之作业初始化

    前言 :本文旨在理清在Hadoop中一个MapReduce作业(Job)在提交到框架后的整个生命周期过程,权作总结和日后参考,如有问题,请不吝赐教.本文不涉及Hadoop的架构设计,如有兴趣请参考相关 ...

  7. ASP.NET MVC下的异步Action的定义和执行原理[转]

    http://www.cnblogs.com/artech/archive/2012/06/20/async-action-in-mvc.html Visual Studio提供的Controller ...

  8. linux中的热插拔和mdev机制

    mdev手册(自己翻译的留着看) mdev实现U盘或SD卡的自动挂载 mdev的使用以及mdev.conf的规则配置--busybox linux中的热插拔和mdev机制 关于实现udev/mdev自 ...

  9. Zookeeper执行原理的详细概述

    文章作者:Holy Null,来源:http://holynull.leanote.com/post/Zookeeper,非常感谢作者提供如此优秀的原创文章,作者通过俩个月的努力将<Hadoop ...

随机推荐

  1. FastDFS 实现图片上传_01

    一.jar 包 jar包下载:https://pan.baidu.com/s/1nwkAHU5 密码:tlv6 或者 下载工程,安装到 maven 本地仓库 工程下载:https://pan.baid ...

  2. ACCESS-入门思维导图

    ACCESS-入门思维导图 链接:http://pan.baidu.com/s/1bozYiNt 密码:5tly 如果有错误,请告知我!

  3. [CSS3] The picture element

    <picture> <source media="(min-width: 1000px)" srcset="kookaburra_large_1x.jp ...

  4. cocos2d-x:读取指定文件夹下的文件名称+解决中文乱码(win32下有效)

    援引:http://blog.csdn.net/zhanghefu/article/details/21284323 http://blog.csdn.net/cxf7394373/article/d ...

  5. 使用XMLHttpRequest解析json

    不适用内函数或者promise的方式,可以在外部提取到json数据 <!DOCTYPE html> <html lang="en"> <head> ...

  6. ThinkPHP5.0框架开发--第7章 TP5.0数据库操作

    ThinkPHP5.0框架开发--第7章 TP5.0数据库操作 第7章 TP5.0数据库操作 ===================================================== ...

  7. zzulioj--1711--漂洋过海来看你(dfs+vector)

    1711: 漂洋过海来看你 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 89  Solved: 33 SubmitStatusWeb Board D ...

  8. CCS+C6678LE开发记录12:UIA组件的安装

    在安装了CCS 6.0版本的IDE和最新版的MCSDK后似乎一切都很完美,但事实并非如此. 当我试图编译SDK附带的image_processing (IPC based) demo时出现如下错误: ...

  9. Aspose.Words 操作指北

    前言:   这段时间因为业务需求,需要做一个word 导出,表单式的那种,因为之前也做过NPOI 操作 Excel 这类型的问题,所以总以为word 导出应该挺简单的,一直没有研究这块,汗颜,天真大意 ...

  10. POJ 1852 Ants O(n)

    题目: 思路:蚂蚁相碰和不相碰的情况是一样的,相当于交换位置继续走. 代码: #include <iostream> #include <cstdio> #include &l ...