zoukankan      html  css  js  c++  java
  • 7.3 编址与存储相关计算

    两个方面的内容:一方面是内存的编址方法,另外一方面就是磁带、光盘它的容量以及其它方面的一些计算.内存编址方法这一块有两个方面的内容是需要大家掌握的:第一方面是编址,

    编址的概念:在计算机的系统当中,它的存储器有很多个存储空间,就如同我们去一个澡堂,它可能有储物柜,然后排列了很多很多的储物柜,它会对这个储物柜进行编号,从1号开始编一直编到100号或者是200号,如果说你不对这些储物柜进行编号,那么这些储物柜就无法利用起来.因为客人来了之后他不清楚自己是哪一个储物柜,所以不方便把东西放进来也不方便把东西取出去.编址就起了这样的一个作用:就是标明每一个空间它的一个地址,或者说是一个名称,能够找得到这一个空间的名称.内存当中的具体编址的方法:

    例如这是一块内存芯片,要对这一块芯片进行编址,我们首先要了解的就是这每一个空格代表一个位,就是一个bit.每一个方格就是一个bit,然后这一块芯片总共呢它有8行4列,所以有32位,32个bit.这4条线是数据线,用于取出当中的数据.然后我们的编址是按4位4位的编址,每4位编一个地址.每4位编一个地址之后我们就可以一次性每一次取出4个位.其实这一个概念就和我们以前讲到的多少位的计算机能够联系起来,比如说16位的计算机,那么它的数据位,数据总线的宽度它就是16位,这样的一个计算机系统它一次可以取出来的数据量就为16位.这样的计算机它的一个字,注意不是字节,是一个字,就是16位.当然对于32位的计算机,那么它的一个字就是32位.64位的计算机,它的一个字,就是64位.注意这个64位也就是我们所说的这个数据总线的宽度.数据总线的宽度就表示了计算机一次它可以取出多少个数据,或者说是一次处理多少数据.扯远了,回到正题.

    这里是每4位编成一个地址,那么我们的32个空间要编多少个地址呢?我们就发现按4位4位的编址这一块芯片要编8个地址,要编8个地址是不是就意味着要8条地址线呢?是不是需要8条地址线?其实不需要的.因为我们所用的地址是3位的地址,用不着8位.只需要用3位的10就能够表示8个地址了.

    我们可以把这8位连到一个译码芯片上面.这边接3个位,这边的才是地址线.这边输入的比如是000,译码信号就会指示出我们现在要存储的数据是000号数据.而如果译码信号进入的是001,那么译码信号它就会指示需要存取的空间是001号空间.所以说我们平时所讲到的地址的位数或者说编这一些地址需要的地址线的数量,是讲的这个地址它的位数,并不是指的它能够指示的空间的一个数量.其实从这一个例题我们也能够看出一个规律,多少位的2进制数,能够表示出来的数值,就是它的编址空间的大小.我们刚才说了3位的空间,3位的2进制数,用2^3就可以计算出它能够给多少个空间进行编址.2^3=8,所以3位的地址能够编8个地址出来.可以指示出8个空间.而2^4=16,所以用4位的地址可以表示16个空间.同样的道理,地址线的条数,比如说是14,那么它可以编址的内存空间的个数就是2^14个.

    主要要理解的就是地址的位数和它表达的值的数量的一个关系.3位的地址可以表示出8个实际的地址出来.4位的可以表示16个地址.这个就像我们平常的储物柜编号一样的,这是2进制的,然后如果我们是10进制的,1位10进制的就可以编0-9个地址,就可以表示给10个存储空间进行编址.而两位的地址是00-99就可以给100个数、100个空间进行编址,这是10进制.而我们现在用的2进制,2进制的话就是2^n,2的n次方,得到的数就是这么多位地址,能够表示给多少个存储空间进行编址.


    下面我们还需要了解的一个问题就是芯片的拼接.芯片的拼接也比较常用.这一个芯片它是8*4位的芯片,也就是有8行,每一行有4个位,4个bit,然后我们如果说要把这一个芯片拼接成容量更大的芯片.我们通常有两种方式进行拼接,我们可以纵向的拼接,也可以横向的拼接.这样子拼接出来的存储空间,我们知道都是64个位,也就是8个字节的空间.但是大家需要注意一点,这样子拼接出来的两块芯片,它就是完全不同的两种芯片了.这一块芯片称为16*4的芯片,而这种芯片被称为8*8的芯片.它们的特性也由它们的结构所决定,所以它们也存在着不同的特性.

    这个16*4拼合起来的大芯片,它的地址位数是4位,就是不再是我们以前所说的3位了,因为3位已经编不完这些地址了,3位只能够编8个地址,因为2^4=16,刚好够用4位地址,那么我们这一种芯片它的地址线的位数就是4位,而数据线的位数它没有变化.这种芯片它一次只能取4个位,而这种8*8的芯片情况就不同了,8*8的芯片由于它的行数仍然只有8行,所以对它进行编址仍然用3位的地址就可以了.它不同的是它这个数据线的位数增多了,它数据线的位数由4位增至了8位数据线,这样子它就一次性能够取出8个数据来,就是8个位的数据.

    所以这两种芯片虽然都是用同样的芯片组合起来的,拼接起来的,但是它们的特性是完全不同的.我们再把这个意思把它拓广,因为我们平常8*4位芯片不可能会出现到这种这么小的芯片,那么我们可以认为是8KB*4位的芯片.让你两块芯片组成一个16KB*4位的芯片,那么你组合就应该是这种组合方式.而这个8KB我们也可以计算出它的编址需要多少位地址,我们就把8KB写成2^n次方的形式,求出这个n来就行了.因为1KB它是等于2^10,而8=2^3,所以8KB=2^13,所以若这个存储芯片是8KB的大小,那么它的地址线应该有13根,也就是说它的地址的位数有13位之多.好,下面我们讲清楚这一些基本的一些的概念,一些思想之后,我们来从实际的问题当中来看待.

    来看看这些问题应当要如何应用我们刚刚所学到的知识,来解决.


    如果主存的容量为:

    它其实就是一个16MB*8位的芯片,主存我们可以看做是16MB*8位的芯片,它是按字节来编址,所以每一次能够取出8个位因为8位就是一个字节,所以我们就只要把这一个16MB化成2的n次方,就能够求出,求出这个n之后,就知道主存的地址至少应该需要多少个位,那么16MB是等于2的,1MB=2^20,因为1KB=2^10,16MB=2^(4+20)=2^24.那么我们就求出来了,求出这个主存的地址,应该是24位.


    如果这个题目不按字节来编址,我按4位来编址,换成4位编址情况确实有所不同,我们就把这个16MB*8位就得变化了,就是16MB*2*4位,就等于把一个字节拆成两个部分,两个4位,然后这个2要并入前面一部分,就变成了32MB*4位,然后就是把这一个32MB的地址空间化为2的n次方形式,我们就发现如果按4位来编址,那么地址的位数就需要25位了.


    同样再把这个题目改一改, 我们改成按字编址,而不按字节编址.按字编址而我们同时又知道这个计算机系统是64位的系统,64位代表是8个字节,因为每8位是一个字节,所以64位应该是8个字节,那么也就是说现在要对16MB字节的这个空间每8个字节来进行这个编址.那么我们这边就得写成另外一种形式了,就写成2MB*8字节,注意哦我们再怎么变换形式它的总容量大小一直没有发生变化的,都是16MB.这个乘以8位就相当于乘了一个字节.而这里乘了2后面乘了4位,4位是0.5个字节,也就是半个字节,1/2个字节,这里就是2MB*8字节,我们只要把这个2MB写成2的n次方形式,求出n,那么这个地址的数也就求出来了.求出来应该是21.就是按字编址,而每个字有64位的话那么我们的地址的位数就只需要21位了.


    接下来再来看一个问题,这一个问题就牵涉到了也是内存编址,它是内存地址容量的一个计算.题目是这样子的:内存按字节编址,地址从A4000H-CBFFFH,这个计算还是比较容易的.它的原则是什么一个原则呢?一个什么原理来计算呢?

    开始起始地址是A4000这一条线,这一条线就是CBFFF,我们就只要求出这一段的大小就可以了.因为它是一个连续的地址空间,当然这个计算就比较好计算了,而且又是字节编址,那么我们就直接把这个地址减去这一个地址,用它尾数-开始数+1那么我们就能够得到字节数,这里有一个单位的换算我们就直接用CBFFF-A4000+1,加1是为了,很容易理解如果我的起始地址是从1开始,到9,我们很容易可以知道123456789是9个空间,然后如果说我们用尾数9减去1还缺了1个所以要补1个加1.那么我们就直接用CBFFF减A4000再加1就行了.我们可以先给这个CBFFF+1-A4000,这样子就得到了2进制的28000H.我们把这个16进制的数转成10进制,转成10进制之后然后我们就发现它的大小刚好是160KB.我们也可以现在用计算机、计算器算一下,

  • 相关阅读:
    DNS
    NTP服务
    DHCP服务
    NFS服务、SSHD服务
    samba 、 FTP 、 lrzsz工具
    centos7系统忘记root密码
    linux系统rpm和yum软件包管理
    linux系统命令(调试命令)(nmtui,ip a、ss、ps、uptime、top、lsof、grep,iotop、iftop)
    浅聊TCP的三次握手和四次挥手
    C语言学习笔记--动态库和静态库的使用
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/7252436.html
Copyright © 2011-2022 走看看