- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
系统结构实验1报告
青 岛 理 工 大 学
计算机系统结构实验报告
课程名称 计算机系统结构 班级 计算121 实验日期 2015.10.20 姓名 潘洪菊 学号 201207003 实验成绩 实验名称 CPU无流水无cache执行状况软件模拟 实验
目的
及
要
求
用软件实现CPU非流水下指令执行过程模拟,
了解、掌握CPU无流水无cache工作方式。 实验环境 操作系统windows 7, 编译工具VC++6.0 实
验
内
容
含
设
计
思
想
与
过
程
实验内容:
使用C++语言编写一个程序模拟CPU内部的部件以及其工作原理。
程序开始运行时首先输入子过程数量、子过程名称,要执行的指令条数等相关参数。
程序运行时会动态显示模拟CPU的工作过程,以及各个部件正在执行的指令。
该过程模拟的是CPU的非流水下指令执行的过程。
程序设计思想:
1、输入输出
输入:子过程数量p_num、子过程名称p_name[]、指令的条数i_num
输出:流水处理图像 graph[][]
2、数据结构
1一个二维数组graph[][],用于存储流水图像
2一个一维数组proc[],proc[i]表示子过程正在处理第proc[i]条指令
3整数t,表示当前时刻
3、算法:
1输入相关参数
2模拟CPU工作原理,修改proc数组,修改t
3根据proc数组和t,修改graph数组
4输出数组graph表示的图像
5返回2,直到执行完所有指令
流水方式与非流水方式的区别:
非流水下各条指令之间顺序串行(执行完一条指令后才取下一条指令)地进行,每条指令内部的各个微操作也顺序串行地进行。
流水方式下是将一条指令细分成若干个子过程,不同指令的不同子过程之间可以并行执行。
调
试
过
程
及
实
验
结
果
输入相关参数:
非流水处理状态1:
非流水处理状态2:
非流水处理状态3:
总
结
通过此次试验,对CPU非流水线的工作过程更加清楚,CPU非流水线是指模拟过程中调度算法简单,无复杂的预载入,跳转重置算法。非流水线的处理器每次只运行一个指令。防止分支延时(事实上,每个分支都会产生延时)和串行指令被并行运行产生的问题。设计比较简单和较低生产成本。
非流水线处理器有固定指令位宽。流水线处理器的性能更难以预测,并且不同的程序之间的变化可能更大。
在运行相同的指令时,非流水线处理器的指令传输延迟时间比流水线处理器明显较短。这是因为流水线的处理器必须在数据路径中添加额外触发器。
附
录
#includecstdio
#includecstring
#includecstdlib
#includectime
#includewindows.h
const int maxn = 100;
int p_num,i_num;//p_num表示子过程的数量,i_num表示指令的数量
char p_name[maxn][maxn];//p_name[i]表示第i个过程的名称,如取指令,指令译码,取操作数、执行
char graph[maxn][maxn];//graph数组用来存放流水处理图像,graph[i][j]表示第i个过程第j时刻正在执行的指令序号
int proc[maxn];//proc[i]表示子过程i正在处理第proc[i]条指令
int t;
void init() //初始化函数,初始化相关数组和变量
{
p_num = i_num = t = 0;
memset(graph, 0, sizeof(graph));
memset(p_name, 0, sizeof(p_name));
memset(proc, 0, sizeof(proc));
}
void input() //输入函数
{
printf(请输入子过程的数量:);
scanf(%d, p_num);
for(int i = 1; i = p_num; i ++)
{
printf(请输入第%d个子过程的名称:, i);
scanf(%s, p_name[i]);
}
printf(请输入指令的条数:);
scanf(%d, i_num);
}
int get_maxlen()
{
int max = strlen(子过程);
for(int i = 0; i p_num; i ++)
{
int tmp = strlen(p_name[i]);
if(max tmp)
max = tmp;
}
return max;
}
void print_space(int n)
文档评论(0)