zoukankan      html  css  js  c++  java
  • 硬件小问题“答疑”



    我有在学习操作系统原理。这几天应试赶着把机组也大致过了一遍。试着回答吧。

    > 还有几个硬件小问题:
    > 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直接就能够这样通过电路选择读出内容,而硬盘须要磁头定位。磁盘调度还有好多算法。


    今天学习时,发现了能解决上次一个疑问的知识点。

    实际上,依据MAR中的地址訪问某个存储单元时。还需经过地址译码、驱动等电路。才干找到所需訪问的单元,读出时,需经过读出放大器,才干将被选中单元的存储字送到MDR中。
    译码驱动能那个把地址总线送来的地址信号翻译成相应存储单元的选择信号。
    译码驱动方式有线选法和重合法两种。
      ——《计算机组成原理》唐朔飞


    地址译码驱动电路
      译码器将地址总线输入的地址码转换成与其相应的译码输出线上的高电平或低电平信号。以表示选中了某一单元。并由驱动器提供驱动电流去驱动相应的读/写电路。完毕对被选中单元的读/写操作。该电路实际上包括译码器和驱动器两部分。

    存储体是存储器的核心,是存储单元的集合体。

    它由若干个存储单元组成。每一个存储单元又由若干个基本存储电路(或称存储元)组成,每一个存储单元可存放一位二进制数。通常,一个存储单元为一个字节。存放8位二进制数。即以字节形式来组织。为了区分不同的存储单元和便于读/写操作,每一个存储单元有一个地址(称为存储单元地址)。CPU訪问时按地址訪问。为了降低存储器芯片的封装引脚数和简化译码器结构,存储体总是依照二维矩阵的形式来排列存储单元电路



    http://blog.csdn.net/csc2003/article/details/36378035   我把我的“解答”写在blog上,有人对此作出了自己的解答。

    大家能够看看~
    我是原帖作者,事实上原帖的问题是我们邮件列表中一个朋友提出的。
    谢谢csc2003,我非常惊喜有人如此具体回复,受益良多。

    “纵观全文,楼主偏向硬件方面。这些全属于厂家硬件商业机密,对外发布的也仅仅会是接口,内部详细实现肯定不会对外发布的,别瞎想了。


    事实上我是CS的学生,稍稍涉猎下硬件方面玩玩而已。

    由于看了《编码》这本书。心中已经根植了“给我一堆继电器,我能创造一台计算机!”这种念头。学习时不禁想深入究竟。
    当然。现代计算机的细微构造是多年来各位大牛的结晶,与我所说的用继电器造成的计算机有着天渊地别(首先都已经用半导体不用继电器了好不好)。


  • 相关阅读:
    【C语言篇】☞ 2. 常量、变量、scanf函数和printf 函数
    【C语言篇】☞ 1. 前言、基础
    React快速入门教程
    数论-欧拉函数
    数论-约数
    数论-质数专题
    匈牙利算法求二分图的最大匹配数
    染色法判断二分图
    Kruskal算法
    Prim算法
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7101695.html
Copyright © 2011-2022 走看看