【问题标题】:How are memory mapped devices allocated an address and how does the CPU know what it is内存映射设备如何分配地址以及CPU如何知道它是什么
【发布时间】:2021-01-16 02:00:04
【问题描述】:

我认为CPU寻址设备的主要方式是“端口”和“内存”映射。

在这两个方面:

  • 设备如何动态分配地址 - 谁分配地址以及如何分配?
  • CPU 如何知道设备的存在、已分配以及地址是什么,尤其是它正在运行的程序? (如果计算机处于开启和关闭状态,这如何工作)
  • 这些设备如何使用中断?
  • 操作系统和硬件有什么区别?
  • 可以说内存映射是现代系统中的主要方法吗?

意识到这可能一次性完成很多,但在此先感谢!

【问题讨论】:

    标签: cpu hardware memory-mapping deviceiocontrol peripherals


    【解决方案1】:

    一般来说,CPU 并不知道特定地址是内存映射的。

    将地址范围定义为不可缓存是 SW 的职责(主要是 BIOS/驱动程序)(因此每次读/写都将通过设备,并且在 WB 之前不会在内部保留),在核心之外有一些映射重定向特定地址到设备而不是 DDR(内存)。

    对部分要点的简短回答(我不确定我是否理解所有问题):

    • 设备如何动态分配地址 - 谁分配它以及如何分配?

      任一 BIOS 都定义了这样的范围(驱动程序在新设备上与 BIOS 通信,BIOS 为即插即用设备保存一些地址)

    • CPU 如何知道设备的存在、已分配以及地址是什么,尤其是它正在运行的程序? (如果计算机处于开启和关闭状态,这如何工作)

      CPU 不知道,这些地址被视为正常的不可缓存地址。

    • 可以说内存映射是现代系统中的主要方法吗?

      是的,在内存中的另一个位置处理它更容易(它也快一点)。

    【讨论】:

    • 感谢您的回答!所以我想问的中间问题是,当计算机正在运行并且我插入一个新设备(例如,通过 USB 端口的网络摄像头)时,它是如何分配地址的以及操作系统是如何知道的它的存在。对于机器打开时插入的东西(例如键盘),同样的问题 - 操作系统如何告诉它存在?在这两种情况下,它会指示 CPU 做什么以使其找出地址以及它如何知道地址连接到什么?
    • 关于中断的问题紧随其后——如果地址是动态分配的,CPU如何知道中断来自哪里? (或者执行只是因“某个地址”而中断 - 但它被告知要去哪个地址以找出发生了什么?)
    猜你喜欢
    • 2020-08-21
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2012-10-03
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多