我不确定这里是否适合提问,也不确定如何提出查询。
让我这样说:
- 主内存从 0x00000 开始到 0xFFFFF。
- 磁盘空间从 0x00000000 到 0xFFFFFFFF。
但是我们能够访问的不是从第 0 个字节到最后一个字节,对吧? 在硬盘上,我猜在第 0 个字节处我们有 MBR。 &在某个地方我们有文件系统(我们只能访问它)。还有什么?
与主存储器类似。我们有一些内核内存和用户内存(每个进程都在其中)。还有什么?
我的问题是从第 0 个字节到最后一个字节的所有区域是什么?我不知道要搜索什么或在哪里可以找到此类信息?如果有人可以发布一些链接,那就太好了。
编辑:
我在 Windows 上使用 x86 32 位。实际上我在读一本关于计算机安全的书,作者提到恶意软件可以存在于磁盘或内存中。(这是真的)。但是,当我们说计算机被感染时,并不意味着只有文件(文件系统的一部分)被感染。还有其他区域不适合用户使用,例如 MBR。或内核内存。
于是,我的脑海里冒出了这个问题。我可能不知道的所有这些领域是什么?
最佳答案
除了这个问题的答案高度依赖于操作系统之外,磁盘空间根本不是主内存的一部分。在 Intel 架构上,磁盘访问每个 channel 占用一些 I/O 地址空间(不同于内存地址)。而确切的字数取决于什么 channel :IDE/ATA/SATA/SCSI。在内存映射的其他架构上,如 PowerPC 磁盘访问确实需要一些内存地址空间,但仍然不多。
为了说明(请注意,这是一个非常简化的示例,并非真实世界),假设内存映射 CPU*(如 PowerPC)试图访问具有 LBA 寻址的磁盘。磁盘实际上只需要 2 到 3 个字的内存来保存数 GB 的数据。也就是说,我们只需要 12 个字节来存储和检索千兆字节的数据:
- 2个字(8字节)告诉磁盘去哪里寻找,也就是我们要在什么地址读取表格或写入。
- 1 个字(4 个字节)实际进行读写。每次您从该地址读取时,2 字的指针 会自动增加 1 个字符(如果您以 32 位读取,则为 4)。
但以上是对真实情况的抽象看法。大多数磁盘 Controller 还有几个寄存器来控制电源管理、磁盘旋转速度、进入和退出 sleep 模式等。
这些内存位置的地址是什么?好吧,这取决于您所谈论的 I/O channel 。老式 ISA 总线依赖于用户在卡上设置跳线来设置地址。所以对于那些你需要问用户。 PCI 总线在启动时自动与磁盘 Controller 协商地址,然后根据体系结构告诉您的 bios 存在哪些设备或将它们作为参数传递给引导加载程序或将它们存储在系统总线上的一些临时寄存器中。 USB 像 PCI 一样工作,但与操作系统而不是 BIOS 协商......等等。
如您所见,即使您将其限制在特定情况下(例如在戴尔主板上运行的 64 位 AMD CPU 上运行的 Windows7),也没有简单的答案。
*注意:因为您担心内存位置。
关于windows - 内存和磁盘有哪些不同的区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2084277/