首页 > 代码库 > 硬件小问题“答疑”

硬件小问题“答疑”

我有在学习操作系统原理,这几天应试赶着把机组也大致过了一遍,试着回答吧。
> 还有几个硬件小问题:
> 1、对内存编址的时候,是每个位都编号还是只对每个字节编号?若是后者,那意味着每个字节是被当做整体使用的,即字节就是最小存储单位不可再分。若是前者,那么会出现这么一种情况,一个字节的前四位存储一些信息,后四位存储其他信息而互不相关,可以分别调用。
主存各存储单元的空间位置是由单元地址号来表示的,而地址总线是用来指出存储单元地址号的,根据该地址可读出或写入一个存储字。
计算机系统既可按字寻址,也可按字节寻址。




> 3、内存如何寻址,或者(CPU)如何在内存条中找到需要的地址?
当要读取内存中的信息字时,CPU先将地址送至内存,内存再把该地址单元的信息读出。
详细如下:
CPU先将该信息字的地址送至MAR(放地址信息的 存储器地址寄存器Memory address register,在cpu上),MAR通过地址总线把地址送至内存,发出读命令;
内存接收到读命令,便将单元信息读出至MDR(放数据的存储器数据寄存器Memory Data register,在cpu上)


以上就是我学习唐溯飞《计算机组成原理》还有找了几本外国教材参考后所得出的回答。但是我觉得还是没有回答到点子上。因为“通过地址总线把地址送至内存”,这里还是没有说明到底如何找到内存的这个地址。然后我深入找了地址总线的资料,发现几本书籍都基本上只是说“地址总线主要用来指出数据总线上的源数据或目的数据在主存单元的地址或I/O设备的地址。(ps:大家有什么好的计算机组成原理教材推荐吗?我找过几本书,但是都不够国人的那本教材详细)
接着去网上搜集了一些资料,基本上都是只有粗略的说法,在wiki上
”When a processor or DMA-enabled device needs to read or write to a memory location, it specifies that memory location on the address bus (the value to be read or written is sent on the data bus). The width of the address bus determines the amount of memory a system can address. “
和实现
”Early processors used a wire for each bit of the address width. For example, a 16-bit address bus had 16 physical wires making up the bus. As the buses became wider, this approach became expensive in terms of the number of chip pins and board traces. Beginning with the Mostek 4096 DRAM, address multiplexing implemented with multiplexers became common. In a multiplexed address scheme, the address is sent in two equal parts on alternate bus cycles. This halves the number of address bus signals required to connect to the memory. For example, a 32-bit address bus can be implemented by using 16 lines and sending the first half of the memory address, immediately followed by the second half.“
开始我以为这样可以解答,但是感觉还是差点。再去看看《编码》,我发现,其实只要知道地址总线传输过去的二进制地址,就可以通过类似这样的选择电路把内存(或里面锁存器【其实就是存放一位信息的触发器】)的信息读出。
补充下:因为有采用虚拟内存,CPU还要将一个虚拟内存空间中的地址转换为物理地址再送至内存。
以上就是我的理解。若有错漏,还望各位不吝指教。


> 2、内存的地址信息存放在哪里?就像对硬盘编址一样,总要腾出一部分空间专门记录硬盘的地址管理信息,即元数据。
参见问题3,如果确实像我理解的那样子,内存中没有专门存放所有地址的地方,每次要访问哪个地址,由地址线来二进制地址通过电路选择器来确定。
硬盘要腾出一部分空间专门记录硬盘的地址管理信息,是因为硬盘寻址的原理与RAM不一样。RAM直接就可以这样通过电路选择读出内容,而硬盘需要磁头定位,磁盘调度还有好多算法。