我不确定这是否是一个正确的地方,也不确定如何提出我的查询。
让我这样说吧:
但我们能够访问的内容不是从第0个字节到最后一个字节对吗? 在硬盘上我猜第0个字节我们有MBR。 &安培;在某个地方我们有文件系统(我们只能访问它)。还有什么?
与主内存类似。我们有一些内核内存&用户内存(每个进程都在其中)。还有什么?
我的问题是从第0个字节到最后一个字节的全部区域是什么?我不知道搜索什么或在哪里可以找到这样的信息?如果任何人可以发布一些链接,那就太棒了。
修改
我在Windows上使用x86 32Bit。实际上我正在读一本关于计算机安全的书,其中提到恶意软件可以存在于磁盘上或内存中(这是非常正确的)。但是,当我们说计算机被感染时并不意味着只有文件(属于文件系统的一部分)被感染。还有其他区域对用户来说并不意味着,比如MBR。或内核内存。
所以,问题突然出现在我的脑海里。我可能没有意识到的所有这些领域是什么?
答案 0 :(得分:1)
除了这个问题的答案高度依赖于操作系统之外,磁盘空间并不是主存储器的全部内容。在Intel体系结构中,磁盘访问会为每个通道占用一些I / O地址空间(与内存地址不同)。确切的字数取决于哪个通道:IDE / ATA / SATA / SCSI。在像PowerPC磁盘访问这样的内存映射的其他体系结构上确实需要一些内存地址空间,但仍然不多。
为了说明(并警告这是一个非常简化的示例,而不是现实世界),假设内存映射CPU *就像PowerPC试图访问具有LBA寻址的磁盘一样。磁盘实际上只需要2到3个字的内存来容纳多GB的数据。也就是说,我们只需要12个字节来存储和检索千兆字节的数据:
但上面是对真实情况的抽象观点。大多数磁盘控制器都有几个寄存器来控制电源管理,磁盘旋转速度,进入和退出睡眠模式等。
这些内存位置的地址是什么?那么,这取决于你所说的I / O频道。老式ISA总线取决于用户设置卡上的跳线来设置地址。所以对于那些你需要询问用户的人。 PCI总线在引导时自动与磁盘控制器协商地址,然后根据体系结构,告诉您的BIOS存在哪些设备或将它们作为参数传递给引导加载程序或将它们存储在系统总线上的某些临时寄存器中。 USB就像PCI一样可以与操作系统协商,而不是与BIOS等协商。
正如您所看到的,即使您将其限制为仅在特定情况下(例如在戴尔主板上运行的64位AMD CPU上运行的Windows7),也没有简单的答案。
*注意:因为你担心内存位置。
答案 1 :(得分:0)
你的问题很复杂,如果不知道内存视图的范围,就很难回答。
假装我们在ring-0中使用直接映射内存,PC兼容有多个内存区域。较低的内存,BIOS映射的代码,IO端口,视频内存等。它们都存在于相同的内存空间中。通过从特定内存地址(映射到这些组件)读取和写入来与外围设备进行通信。这些地址由相关硬件和正在使用的驱动程序设置。
进入用户模式后,您必须处理虚拟内存。地址是符号的,可能会也可能不会映射到物理内存的任何特定部分。我建议你阅读Virtual memory