问题1:
内部寄存器和内部缓存到底在哪里?我知道当一个程序加载到主内存时它包含一个文本部分,一个堆栈,一个堆等等。但是寄存器位于主存储器的固定区域中,还是物理上位于CPU上并且不驻留在主存储器中?这也适用于缓存吗?
问题2:
设备控制器如何使用直接内存访问而不使用CPU在本地缓冲区和主内存之间调度/移动数据?
答案 0 :(得分:2)
基本答案:
register
关键字(不是经常需要它,因为编译器通常是一个更好的优化器),你就不能使用&
运算符。答案 1 :(得分:0)
即使CPU是中央处理单元,它也不是唯一的“移动器和振动器”。设备存在于总线,CPU和RAM上。现代总线允许设备与RAM通信而不涉及CPU。一些设备只需通过更改设备轮询的RAM就可以编程。设备驱动程序可能会轮询设备正在写入的RAM,但通常CPU会从设备接收中断,告知它已经准备好读取RAM中的某些内容。
因此,在回答您的问题2时,CPU不涉及总线上的内存传输,除非涉及高速缓存行无效的高速缓存一致性消息。请记住,场景很棘手。当设备决定修改字节40时,CPU可能已在高速缓存行上修改了字节1.需要在设备修改数据之前将该高速缓存行从CPU中取出,但无论如何,在x86上,该活动由总线,而不是CPU。