2

我不确定这是否是一个正确的提问地点,也不确定如何提出我的查询。

让我这样说吧:

  • 主内存从 0x00000 到 0xFFFFF。
  • 从 0x00000000 到 0xFFFFFFFF 的磁盘空间。

但是我们能够访问的不是从第 0 个字节到最后一个字节,对吧?在硬盘上,我猜在第 0 个字节我们有 MBR。& 在某个地方我们有文件系统(我们只能访问这个)。还有什么?

与主存储器类似。我们有一些内核内存和用户内存(每个进程都在其中)。还有什么?

我的问题是从第 0 个字节到最后一个字节的所有区域是什么?我不知道要搜索什么或在哪里可以找到此类信息?如果有人可以发布一些链接,那就太好了。

编辑:

我在 Windows 上使用 x86 32 位。实际上,我正在阅读一本有关计算机安全的书,其中作者提到恶意软件可以存在于磁盘或内存中。(这是非常正确的)。但是当我们说计算机被感染时,并不意味着只有文件(文件系统的一部分)被感染。还有其他区域不适合用户使用,例如 MBR。或内核内存。

于是,我的脑海里浮现了这个问题。我可能不知道的所有这些领域是什么?

4

2 回答 2

1

除了这个问题的答案高度依赖于操作系统这一事实之外,磁盘空间根本不是主内存的一部分。在 Intel 架构上,磁盘访问占用每个通道的一些 I/O 地址空间(不同于内存地址)。确切的字数取决于什么通道:IDE/ATA/SATA/SCSI。在像 PowerPC 磁盘访问这样的内存映射的其他体系结构上,确实需要一些内存地址空间,但仍然不多。

为了说明(并注意这是一个非常简化的示例,而不是真实世界),假设像 PowerPC 一样的内存映射 CPU* 试图访问具有 LBA 寻址的磁盘。磁盘实际上只需要 2 到 3 个字的内存即可保存数 GB 的数据。也就是说,我们只需要 12 个字节来存储和检索千兆字节的数据:

  • 2 个字(8 个字节)告诉磁盘要查找的位置,即我们要读取或写入的地址。
  • 1 个字(4 个字节)实际进行读取和写入。每次从该地址读取时,2 字指针会自动增加 1 个字符(如果读取 32 位,则增加 4 个字符)。

但以上是对实际情况的抽象视图。大多数磁盘控制器还有几个寄存器来控制电源管理、磁盘旋转速度、进入和退出睡眠模式等。

这些内存位置的地址是什么?嗯,这取决于你在谈论什么 I/O 通道。老式的 ISA 总线依赖于用户在卡上设置跳线来设置地址。所以对于那些你需要询问用户的人。PCI 总线在引导时自动与磁盘控制器协商地址,然后根据架构告诉您的 BIOS 存在哪些设备,或者将它们作为参数传递给引导加载程序,或者将它们存储在系统总线上的一些临时寄存器中。USB 像 PCI 一样工作,但与操作系统而不是 BIOS 协商......等等。

如您所见,即使您将其限制在特定情况下,例如在戴尔主板上运行的 64 位 AMD CPU 上运行的 Windows7,也没有简单的答案。

*注意:因为您担心内存位置。

于 2010-01-18T07:05:50.020 回答
0

您的问题很复杂,如果不知道内存视图的范围,很难回答。

假设我们在具有直接映射内存的 ring-0 中,PC 兼容具有多个内存区域。较低的内存、BIOS 映射代码、IO 端口、视频内存等。它们都存在于相同的内存空间中。您通过读取和写入特定内存地址(映射到这些组件)与外围设备进行通信。这些地址由相关硬件和使用的驱动程序设置。

一旦我们进入用户模式,你就必须处理虚拟内存。地址是象征性的,可能会或可能不会映射到物理内存的任何特定部分。我建议阅读虚拟内存

于 2010-01-18T07:09:42.230 回答