Caching 2基本计算机问题

Caching 2基本计算机问题,caching,controller,cpu,device,Caching,Controller,Cpu,Device,问题1: 内部寄存器和内部缓存究竟存在于何处?我知道,当一个程序加载到主存时,它包含一个文本段、一个堆栈、一个堆等等。然而,寄存器是位于主存的固定区域,还是物理上位于CPU上而不驻留在主存中?这是否也适用于缓存 问题2: 设备控制器如何准确地使用直接内存访问而不使用CPU在本地缓冲区和主内存之间调度/移动数据 基本答案: 这些数据直接在CPU上。L1、L2和L3通常是片上的;然而,它们可能在多个内核或处理器之间共享,因此它们并不总是“物理上在CPU上”。然而,它们也从来不是主内存的一部分。一般的

问题1:

内部寄存器和内部缓存究竟存在于何处?我知道,当一个程序加载到主存时,它包含一个文本段、一个堆栈、一个堆等等。然而,寄存器是位于主存的固定区域,还是物理上位于CPU上而不驻留在主存中?这是否也适用于缓存

问题2:

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

基本答案:

  • 这些数据直接在CPU上。L1、L2和L3通常是片上的;然而,它们可能在多个内核或处理器之间共享,因此它们并不总是“物理上在CPU上”。然而,它们也从来不是主内存的一部分。一般的原则是,内存越靠近CPU,速度越快,成本越高(因此越小)。缓存中的每个项都有一个与之关联的特定主内存地址(但是,同一个插槽可以在不同的时间与不同的地址关联)。然而,寄存器和主存之间没有直接的联系。这就是为什么如果在C中使用
    register
    关键字(这不是经常需要的,因为编译器通常是更好的优化器),那么就不能使用
    &
    操作符
  • DMA控制器直接执行传输。CPU监视总线,以便知道何时“在背后”进行更改,从而使其缓存失效

  • 尽管CPU是中央处理器,但它并不是唯一的“推动者”。设备与CPU以及RAM一起生活在总线上。现代总线允许设备在不涉及CPU的情况下与RAM通信。有些设备只需对设备轮询的RAM进行更改即可编程。设备驱动程序可能会轮询设备正在写入的RAM块,但通常CPU会从设备接收到一个中断,告诉它RAM块中有准备读取的内容


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

    谢谢,我在“可视化”DMA控制器如何进行传输方面仍然有点困难。我猜在我的脑海里,CPU是移动器/震动器,不知何故,不使用它感觉像是某种黑魔法。当然,它取决于内存控制器。但DMA控制器基本上使用内存所需的任何协议从内存发送或接收数据。总线只是所有设备连接到的一束电线。通常,设备使用它来知道CPU需要什么信息,并将这些信息发送回去。但是,在CPU的许可下,它可以自己进行询问。它已经连接到总线上了,它只需要确保CPU没有在它上面讲话。这就是DMA。谢谢,这有助于更好地理解DMA。