32位操作系统和64位操作系统的区别
是这样的
真的很乱 然后吧 网上那些人又总是说来说去 不说到点子上 一问就是巴拉巴拉一堆你听不懂的 秀优越感呢还是干嘛
编址方式有两种
(1)按字节编地址
它的MAR的位数与字节数有关的。一个字节有一个地址,即地址总线位数反映了字节的个数
(2)按字编址
它的MAR的位数与存储字数有关的。一个存储字(32位CPU有四个字节)有一个地址,即地址总线位数反映了存储字的个数。
总之不需要纠结一个存储字几位以及CPU多少位 CPU一次能取几个字节。
而是CPU一次能取几位数据,即便是按字节编址,但如果你CPU的MDR是32位,一次就可以取32位四字节的数据。
当然如果按字节编地址 这四个字节地址都不同就是了。
22 人赞同了该回答
PS:
最高赞回答的不错,但他好像看题看错了,存储器容量是2M*32 = 8MB,不是2MB
地址的概念:存储器被划分成若干单元。从0号单元开始编号。这些编号就可以看作地址。
寻址的概念:CPU要从存储器读数据,必须要说明读存储器的哪个单元,即指明地址。地址信息通过地址总线向存储器传输。一个N位的地址总线,可以寻址的最大范围是2^N个存储单元。
按字节编址:存储器被划分成若干个单元,每个单元容量为1个字节,从0开始编号(地址)。
按字编址:存储器被划分为若干个单元,每个单元容量为1个字(假定为32位),从0开始编号。
对一个2M x 32位的存储器,其容量为8MB
按字编址:CPU一次寻址的大小为1个字(32位),共有8M*8bit/32bit = 2M个单元,即寻址2^21个存储单元,地址总线为21位。
按字节编址:CPU一次寻址大小为1个字节(8位),共有8M*8bit/8bit = 8M个单元,即寻址2^23个存储单元,地址总线为23位。
,寻址范围仅仅是一个数字范围,不带有单位
//我觉得下面这一段话完美解决问题
现在的 PC 内存还是以字节为单元编址的。内存单元的位数、cpu 内寄存器的位数、数据总线的位数,这些是可以不一样的。尽管内存单元为 1 字节,但一次内存访问可以操作的数据位数由数据总线决定,只是要一次性地访问整个数据总线位的话,访问单元的起始地址必须对齐到总线位数上,否则会被拆分为两个访问(这个拆分是 cpu 自动完成的,对程序来说透明,最多是损失些性能);比如数据总线 32 位,访问 0x12345678 一次可以访问那里的 32 位即 4 字节的数据,但要求 0x12345678 能被 4 整除,否则如果是 0x01234567 这样的,就要被拆分了,甚至在些要求高的指令里会引发访问异常!
但是很有一个很坑爹的地方 既然是按字节编址为什么还需要内存对齐机制呢 明明可以不四个字节32位32位的读可以定位到字节
为什么还要内存对齐呢 想不太懂
假设CPU要读取一个4字节大小的数据到寄存器中(假设内存读取粒度是4),分两种情况讨论:
1.数据从0字节开始
2.数据从1字节开始
解析:当数据从0字节开始的时候,直接将0-3四个字节完全读取到寄存器,结算完成了。
当数据从1字节开始的时候,问题很复杂,首先先将前4个字节读到寄存器,并再次读取4-7字节的数据进寄存器,接着把0字节,4,6,7字节的数据剔除,最后合并1,2,3,4字节的数据进寄存器,对一个内存未对齐的寄存器进行了这么多额外操作,大大降低了CPU的性能。
但是这还属于乐观情况,上文提到内存对齐的作用之一是平台的移植原因,因为只有部分CPU肯干,其他部分CPU遇到未对齐边界就直接罢工了。
参考图片:
从这里也可以看出他尽管按字节编址 地址总线根数按字节数来但仍然固执的32位32位读我真的服了
即便说 一个32位数据在内存中的首地址是第一个字节,那你CPU为什么要从0字节开始一次读32位,你不是按字节编址吗
为什么不直接定位到第一个字节首地址读四位呢 你自己从0字节位置开始读 要读两次 还要在剔除和组合 你不是自找麻烦跟死板吗??
如果是按字节编址的话 那么内存容量看的其实是 寻址范围* 8bit.
所以那个数据总线和地址总线那咋回事啊 对不上了
其实不管是按字节编址还是按字编址就随机应变算总容量就可以了
它这里感觉概念很乱
书上还有一个题 20根地址总线和十六根数据总线按字编址和按字节编址寻址范围一次是多少
就是16为CPU哈。既然支持按字节编址 说明2的20次方可以表示以字节描述的内存容量
那么按字节编址的寻址范围是2的20次方 而按字编址。有一根就用作十六位的内部寻址了实际上
所以是
2的20次方Byte/2Byte=2的19次方
也就按字节编址时 寻址范围和内存容量都和数据总线位数无关
当按字编址时才有关
所以可能即便按字节编址因为数据总线32位的关系 也会受到限制不能精准定位从某字节开始取
而是只能32位32位的作为首地址一个取32位
、、、、、、、、、、、、、、、、、、、、、
而OS是32位或64位很大程度上和机器字长也就是 数据总线 地址总线位数有关
32位OS如果数据总线也是32位 一次能处理32位也就是四个字节的信息。
而且一般说的是按字节编址那么可寻址的内存空间就是2的32次方Byte
也就是可以支持那么多的内存容量 你内存容量再大访问不到也没用哈。
那64位OS 我们知道软件是基于硬件的 当然你32位机器字长也可以用64位OS,但是没必要也不适合
那如果你的硬件比如数据总线是64位的,那一次能处理的数据就是64位 那对处理计算量大的应用很有帮助
就比如游戏实时渲染 建模等等计算量大的很有帮助 我记得