计算机体系基础相关问题

我是小康小白,一个平平无奇的Java小白。热爱有趣的文字,生活和远方。
个人博客:https://blog.csdn.net/weixin_45791445
有问题欢迎QQ联系:1059320343 (记得备注CSDN)

在这里插入图片描述

  1. 例如在32位处理器中,如果Cache大小为16KB,块大小为32字节,求Offset,index,tag的位数?
  • 首先看一张图
    在这里插入图片描述

  • 一个完整的地址由Tag,Index,Offset组成

在这里插入图片描述
注:上图是笔者自己的理解,如果有问题,希望大家指出来。

  • 其次理解Tag,Offset,index都是用来干什么的?
    Tag:用来对比地址,如果相同就发出命中信号。
    Offset:储存在Cache块中,是块内地址,所以块的大小决定了Offset的大小。
    Index:索引Cache,用作地址来访问Cache块,根据块的数量来确定。

      首先三者相加是处理器的位数,
      因为2^5=32,(块的大小是32)所以Offset是5位(此时位的单位是字。这里8位就是指8个位置,每个位置是2字节),(Offset的位数只与Cache块的大小有关)
      因为Cache大小为16KB,块大小为32字节,所以一共有512个Cache块。
      如果是直接相连结构,因为2^9=512(直接相连时是完整的),所以index是9位,所以tag=32-5-9=18,
      如果是全相联结构,index为0,所以tag=32-5=27位,
      如果是二路组相联结构,因为2*2^8=512(二路组是Cache被分为了两组,所以要再消个二),所以index=8位,所以tag=32-5-8=19位。
    
  • 注意:不同的处理器字对应字节的转换关系是不同的。16位的处理器,一个字是2字节。32位的处理器,一个字是4字节。64位的处理器,一个字是8字节。

  • 小白上面的这道题是以字节作为位的单位。有的题是以字作为位的单位,与上题的思路相同,或者可以将它转换为位(Bit)来进行计算。

  • 其次对于全相联,没有对应关系,数据可以随便放,没有index。
    对于直接相联,小白的理解是一对一的关系,所以有index。
    对于几路组相联的这种,小白的理解是一对多的关系,一条数据可以放到不同路的对应位置,所以对于index来讲,就需要减去路的位数。

  1. 有符号数扩展位数:
    补码:负数往前补1,非负数补0;
    原码:符号位前移到首位,其余位补0,不分正负。

  2. 在内存中数字大的是高位。
    例如:0x44332211,在内存中按小尾端(小尾端是:数字的高位存储在内存的高位,数字的低位存储在内存的地位。)是 0x11,0x22,0x33,0x44
    未待续完
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45791445/article/details/107867911