我知道有一个磁盘控制器这样的东西,它包含一个缓冲区,但想知道 CPU 是否直接从这个缓冲区读取,或者数据是否必须首先转到内存中的特定位置,然后允许自己读取由 CPU ?
有谁也知道缓冲区叫什么?DMA 如何适应这一切?
一些 SMART 统计数据:
Device Model: Samsung SSD 850 EVO 500GB
Firmware Version: EMT01B6Q
9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 252
12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 75
199 UDMA_CRC_Error_Count 0x003e 099 099 000 Old_age Always - 3
241 Total_LBAs_Written 0x0032 099 099 000 Old_age Always - 543780004
Run Code Online (Sandbox Code Playgroud)
主机是Thinkpad T420。是UDMA_CRC_Error_Count = 3
在这个时候出了问题?
有没有其他人在使用这种组合并看到类似的行为?
这到底是什么意思?
我的问题是如何找出笔记本电脑上的哪个设备具有不允许的 DMA 功能。我尝试禁用 USB 设备并将笔记本电脑从扩展坞上拔下。我的同事有相同的笔记本电脑型号,但他没有遇到与我相同的问题。
系统信息
OS Name Microsoft Windows 10 Enterprise
Version 10.0.16299 Build 16299
Other OS Description Not Available
OS Manufacturer Microsoft Corporation
System Name NB-SOKRE
System Manufacturer LENOVO
System Model 20L7S02M00
System Type x64-based PC
System SKU LENOVO_MT_20L7_BU_Think_FM_ThinkPad T480s
Processor Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz, 2112 Mhz, 4 Core(s), 8 Logical Processor(s)
BIOS Version/Date LENOVO N22ET37W (1.14 ), 22.5.2018.
SMBIOS Version 3.0
Embedded Controller Version 1.08
BIOS Mode UEFI
BaseBoard Manufacturer LENOVO
BaseBoard Model Not Available …
Run Code Online (Sandbox Code Playgroud) 我想知道当需要在地址空间中维护一些“固定”地址时,如何将虚拟内存系统与 MMU 一起管理。
例如,当机器启动时,CPU 开始从固定地址(映射到某种 ROM)读取第一条指令,然后为外围设备提供地址(如果使用内存映射 I/O 系统),然后然后操作系统被引导。我还知道中断例程和此类内容需要位于内存中的“固定”位置,并且这些内容由操作系统加载。
我可能认为MMU在这样的过程中被禁用,然后在操作系统加载后启用它。
我可能认为上面的进程使用系统地址空间,并且系统地址空间没有虚拟化,尽管用户地址空间实际上是虚拟化的。
这将导致物理地址池保持不变,以便访问 I/O 外设、中断例程等,以及由 MMU 管理的虚拟用户空间,进程可以在其中详细说明它们需要详细说明的所有数据,要求操作系统访问 I/O 外设。
但我不确定这些事情。那么我问你,MMU什么时候才真正启用呢?它处理所有地址,还是只处理用户空间的地址?即使系统正在运行,某些地址是否也可以绕过 MMU,以访问固定的内存位置?或者我错过了一些重要的线索?