gem5 se.py总结

来源:互联网 发布:阿里云登陆 编辑:程序博客网 时间:2024/05/21 23:48

gem5有两种基本模式

FS:

能够启动完整的操作系统

建模硬件设备

中断,例外, 特权指令,故障处理函数。

SE:

用来运行单个应用,一系列指令在MP/SMT上。

建模用户可见的ISA和常见的系统调用

模拟系统调用,通过调用主机操作系统。

简化的地址翻译模型,没有调度

这两个模式是在编译时进行选择的,尽管代码没有很大差别。


你所关注的就是一个对象(C++或者python对象)

从SimObject基类继承而来。

基类包含创建的一般代码,配置参数,命名,检查点。等等。

针对对象类型的统一的基于方法的API

CPU, cache, memory

跨实现的插入兼容性。

功能性,详细的CPU模型

传统的cache VS 间接索引cache

很容易复制,多核,多个系统。




关于event

标准的事件队列timing模型。

全局逻辑时间,用tick计算

与实际时间没有固定关系

在我们的例子中通常以皮秒计量【百亿分之一秒】

每一个object调度它自己的事件。

可以做详细程度和性能的trade-off

现在你知道一个事件驱动的模拟器是如何工作的了,simulator从事件队列取出事件,object会产生事件,object又把它产生的新事件加入到事件队列中。

例如:

一个cpu通常按照固定的时间间隔来调度事件,

每个周期或者n个皮秒

如果stalled或者idle就不会调度


关于端口

端口是把MemObjects链接在一起的方法。

每个MemObjects子类都有它自己的端口子类。

这些端口子类用来给相应MemObjects子类发送packets

每对MemObjects都是通过一对端口连接的。

函数对来负责在端口之间传输packets。

sendTiming() ------recvTiming() 


1 0
原创粉丝点击