所以我知道32位操作系统可以支持2 32 个不同的值,大约是4x10 9 。
我可以想象每个值的内部表示是这样的:
0000 0000 0000 0000 0000 0000 0000 0000
.....
1111 1111 1111 1111 1111 1111 1111 1111
所以我们这里大约有4x10 9 不同的模式。 但是由于每个地址都包含4个字节(32/8 = 4),因此RAM不应 4x4x10 9 ?
答案 0 :(得分:0)
在典型的现代系统中,每个地址寻址一个字节。
即使硬件一次只能传输四个字节或八个字节,在这样一个单元内的每个字节也会被赋予自己的地址。处理器只能使用28或29或其他一些位数与存储硬件进行交互,但是它使用附加位来区分字中的字节。
当程序访问特定地址时,处理器使用低位隔离字节。读取时,它将从内存中获取整个单元,然后使用低位隔离请求的一个或多个字节。写入时,它使用低位将选定的一个或多个字节合并为一个数据单位,然后将整个单位写入内存。
因此,如果一个地址中有32位,则2 32 = 4,294,967,296个地址可用,并且可以解决4,294,967,296个问题。在典型的现代硬件中,所有这些都是一个字节。通常,并非所有的代码都可供用户程序使用,因为某些地址是为特殊目的保留的。
答案 1 :(得分:0)
x86
是字节寻址的,这意味着每个字节都有一个唯一的地址。 (在正常情况下)这使可寻址内存的总量为2^32 bytes
(大约为4 GB
)。而且不可寻址的内存(您无法为其提供地址的内存)完全无法使用。
在整个地址空间中,并非所有地址都位于主存储器中。其中的一部分是为IO保留的,因此最大RAM量甚至低于4 GB
。
我会尽力解决您的困惑
所以我们这里大约有4x10 9 不同的模式。
正确
但是由于每个地址都包含4个字节(32/8 = 4)
无关
RAM应该不是4x4x10 9 吗?
否
地址的位数确定可以有多少个不同的值。我们已经确定32 bits
给我们确切的2^32 ≈ 4^10
个不同的地址。因此,我们可以拥有≈4^10
个具有唯一地址的不同对象。忍受我,让我们思考一下。如果地址是城市的地址,那么我们最多可以有≈4^10
个城市。如果地址是街道地址,那么我们最多可以有≈4^10
条街道。如果地址是苹果的地址,那么我们最多可以有≈4^10
个苹果。与我一起?如果地址是64-bit
个QWORDS的地址,那么我们最多可以有≈4^10 64-bit
个qwords。如果地址是32-bit DWORDS
的地址,那么我们最多可以有≈4^10 32-bit qwords
个地址。但是在x86
中,地址不是上述任何一个。在x86
中,地址是一个字节(8位)的地址,因此我们最多可以有≈4^10 bytes
又名≈4 GiB
。
如您所见,地址的宽度仅给出了我们可以处理的不同对象的数量。在x86
中,这些 object 是字节,因此我们最多可以有2^32
个可寻址字节。
Physical Address Extension可以克服2^32 bytes
的正常限制。这需要操作系统和硬件(CPU,芯片组和主板)的支持,即使满足这些条件,每个程序仍然只能使用32 bit
地址。
答案 2 :(得分:-1)
[我可能误解了这个问题。我可能稍后会删除此答案。]
对于具有32位(4字节-假设为8位字节)地址的系统,有2 32 个不同的地址值。如果内存空间完全装有RAM,则可以使用32位地址来引用系统上2 32 个字节的内存中的任何一个。
但是您不能同时将所有这两个2 32 地址值存储在内存中。如您所说,您将需要4 * 2 32 字节来存储所有这些地址值。
幸运的是,无需将所有这些不同的内存地址值存储在内存中。您只需要存储您实际使用的地址值即可。
(我忽略了虚拟内存与物理内存的问题。)
答案 3 :(得分:-1)
对于现代操作系统,通常会将虚拟地址转换为物理地址。
对于32位操作系统,虚拟地址通常(但不一定)是32位。使用字节寻址,这意味着您可以拥有1234个进程,其中每个进程具有4 GiB的虚拟空间(或总共4936 GiB的虚拟空间)。但是,通常,每个虚拟地址空间在一个部分中被划分为“用户空间”,而在另一部分中被划分为“内核空间”。因此,每个进程可能更像2 GiB,内核更像2 GiB(或者1234个进程总共2470 GiB)。
但是,由于虚拟地址已转换为物理地址,因此虚拟地址的大小不必与物理地址的大小相同。这意味着即使虚拟地址是32位,物理地址也可以大于(或小于)32位。例如,对于大多数较旧的80x86 CPU,具有“物理地址扩展”(PAE)功能,可将物理地址大小扩展到36位(为您提供16 GiB的物理地址空间),而对于现代80x86 CPU(具有以下功能:运行64位OS的PAE)得到了增强,允许32位OS使用最多52位(“当前最大体系结构”)的物理地址,从而使32位OS的物理地址空间最大为4096 TiB。位操作系统(理论上)。
当然,物理地址空间包含RAM,一些ROM,设备的某些区域等。例如,如果物理地址空间为16 GiB,则可能为非RAM保留1.5 GiB的空间,因此最大RAM您可能可以(并且最多可以使用32位操作系统)为14.5 GiB。
不幸的是,大多数主板不支持CPU可以使用的最大RAM量。例如,许多现代CPU支持48位物理地址(物理地址空间为256 TiB),但我从未见过能够支持超过8 TiB RAM的主板,而且大多数现代主板甚至都不支持1位。 RAM的TIB。
以同样的方式,各种操作系统都有其自身的局限性。例如,大多数32位版本的Windows不支持PAE(最初是由于设备驱动程序兼容性问题,然后由于每个人都采用64位,所以没有人在意)。因此,如果您有一台具有(例如)8 GiB RAM的计算机,则操作系统将无法使用大部分RAM(并且可能只能使用3 GiB RAM,因为ROM可能保留/使用了1 GiB空间) ,设备等)。
请注意,对于80x86上的64位操作系统;虚拟地址是48位(不是64位),物理地址是从32位(Atom)到52位(也不是64位)。英特尔一直在考虑“ 5级分页”扩展,以允许使用57位虚拟地址(仍然不会是64位)。
通常(如果忽略特定的CPU);通用寄存器的大小,虚拟地址的大小和物理地址的大小都可以完全不同;对于32位OS(使用32位通用寄存器),虚拟地址空间大小可以为任意值,物理地址空间大小可以为任意值;并且您在物理地址空间中可以拥有的最大RAM数量可以是任何数量。