免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: redac
打印 上一主题 下一主题

while (1) { i = 1; }在硬件级别的执行过程 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-01-14 16:57 |只看该作者
把时间的范围拉大,可能就稍微好理解一点了,不知道如下理解有没有问题???

1.假设cpu在1秒时间内能发起100次写内存操作,而从cpu发出写内存操作到数据真正
  存储到内存中需要1秒的话,从cpu发出读内存操作到数据真正从内存读到cpu自己的
  寄存器中也需要1秒的话,那么如下的指令序列:
  mov eax, mem  // 读内存
  mov mem, eax  // 写内存
  就需要执行2秒钟,且写汇编(或机器语言)的人并不需要关心内存是否读/写成功的
  问题(读写一定由硬件执行成功了)。但执行第一条指令之后,cpu休息了999倍的时间,
  才自动在第2秒开始执行写内存操作(也就是说在硬件电气上cpu和内存之间遵守了cjaizss
  兄的所说的“协议”)
2.对于8139网卡的驱动来说,执行完
  RTL_W8 (ChipCmd, CmdReset);
  这一句后,其后再执行的指令会自动等事实上网卡的控制寄存器中已经写入了我们
  所希望写入的值后才去真正开始执行(类比于第1点)(无论RTL_W8还是RTL_R8
  最终不是都要翻译成汇编的形式?)

  也就是说
  RTL_W8和RTL_R8之间不需要udelay(10) ??? 因为硬件已经保证了这个语义???

  那么这里执行的udelay是什么意思呢?还是有点模棱两可啊

[ 本帖最后由 redac 于 2010-1-14 16:59 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2010-01-14 16:58 |只看该作者
诸位高手多出招啊,困扰很长时间的问题了!!

论坛徽章:
0
13 [报告]
发表于 2010-01-14 17:07 |只看该作者
首先你说的怎样知道操作已经完成了?这个问题是由总线来保证的,总线有协议保证,不会我一次操作还没完成,第二次操作又覆盖上来了!

你举的那个网卡的例子里,里面的delay不是用来保证硬件操作不出错,而是为了不让cpu“杯具”!^_^!

论坛徽章:
0
14 [报告]
发表于 2010-01-14 17:17 |只看该作者
haohao_h兄,啥是cpu“杯具”?^_^?

论坛徽章:
0
15 [报告]
发表于 2010-01-14 17:22 |只看该作者
我靠!土人!
这年头连“杯具”都不知道!out了!

论坛徽章:
0
16 [报告]
发表于 2010-01-14 17:34 |只看该作者
OUT, 出局!!

食神上的经典场景啊,哈哈。。。

论坛徽章:
0
17 [报告]
发表于 2010-01-14 18:31 |只看该作者
一个指令周期内含若干个时钟周期。先是读指令第一字节,此时译码器译出操作码并确定该指令共有几个字节,逐次读入CPU,生成操作数地址,然后执行指令,做写操作。再读下一条指令。。。
指令是流水执行的。
如果有流水线,在执行这条指令时,已读入了下一条指令,但不会执行。
只有并行CPU体系结构,才真正同时执行几条指令。
至于是不是真正写入了内存,与时间没关系,只与内存质量有关。过去的内存,有校验位。现在为了不影响速度,没有了。

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
18 [报告]
发表于 2010-01-14 23:36 |只看该作者
原帖由 redac 于 2010-1-14 16:57 发表
那么这里执行的udelay是什么意思呢?还是有点模棱两可啊


不就降低CPU使用率以及控制总时间么?还能干什么?

论坛徽章:
0
19 [报告]
发表于 2010-01-15 10:20 |只看该作者
还有一个问题,烦请各位高手不吝赐教啊!!

假如网卡寄存器的访问速度是1小时
就是说: 从cpu发出写网卡寄存器指令,到这个数据真正写入网卡寄存器
需要1个小时的时间

假如内存的访问速度是1分钟
就是说: 从cpu发出写内存指令,到这个数据真正写入内存
需要1分钟的时间

那么假如现在有一个指令序列:
1.写网卡寄存器
2.写内存

那么是否意味着从cpu发出写网卡寄存器指令,到发出写内存指令,之间
需要间隔1个小时的时间呢??? 在这1个小时的时间里cpu只是一直在
等待?

论坛徽章:
0
20 [报告]
发表于 2010-01-15 13:05 |只看该作者
简单的系统确实就是这样的 , 复杂的体系如果从cpu的角度来看也是这样 , 但时间不能这么绝对化 .
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP