2个基本的电脑问题

时间:2010-08-22 14:52:14

标签: caching controller cpu device

问题1:

内部寄存器和内部缓存到底在哪里?我知道当一个程序加载到主内存时它包含一个文本部分,一个堆栈,一个堆等等。但是寄存器位于主存储器的固定区域中,还是物理上位于CPU上并且不驻留在主存储器中?这也适用于缓存吗?

问题2:

设备控制器如何使用直接内存访问而不使用CPU在本地缓冲区和主内存之间调度/移动数据?

2 个答案:

答案 0 :(得分:2)

基本答案:

  1. CPU registers直接在CPU上。 L1,L2和L3 caches通常在片上;但是,它们可能在多个内核或处理器之间共享,因此它们并不总是“物理上位于CPU上”。然而,他们也从未成为主要记忆的一部分。一般原则是内存越接近CPU,它就越快,越昂贵(因此越小)。高速缓存中的每个项目都具有与之关联的特定主存储器地址(但是,相同的插槽可以在不同时间与不同的地址相关联)。但是,寄存器和主存储器之间没有直接关联。这就是为什么如果你在C中使用register关键字(不是经常需要它,因为编译器通常是一个更好的优化器),你就不能使用&运算符。
  2. DMA控制器直接执行传输。 CPU监视总线,因此它知道何时“在其后面”进行更改,这会使其缓存无效。

答案 1 :(得分:0)

即使CPU是中央处理单元,它也不是唯一的“移动器和振动器”。设备存在于总线,CPU和RAM上。现代总线允许设备与RAM通信而不涉及CPU。一些设备只需通过更改设备轮询的RAM就可以编程。设备驱动程序可能会轮询设备正在写入的RAM,但通常CPU会从设备接收中断,告知它已经准备好读取RAM中的某些内容。

因此,在回答您的问题2时,CPU不涉及总线上的内存传输,除非涉及高速缓存行无效的高速缓存一致性消息。请记住,场景很棘手。当设备决定修改字节40时,CPU可能已在高速缓存行上修改了字节1.需要在设备修改数据之前将该高速缓存行从CPU中取出,但无论如何,在x86上,该活动由总线,而不是CPU。