我知道有一个磁盘控制器这样的东西,它包含一个缓冲区,但想知道 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,以访问固定的内存位置?或者我错过了一些重要的线索?