找出全书你认为学得最差的一章,深入重新学习一下,要求(期末占5分):

总结新的收获
给你的结对学习搭档讲解或请教,并获取反馈
参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 《信息安全系统设计基础》第十四周学习总结”,博客(随笔)要通过作业提交。

全书来看,我认为自己学的最差的一章是第六章。

教材内容总结

存储器系统:具有不同容量、成本和访问时间的存储器设备的层次结构。

计算机程序的基本属性:局部性。具有良好局部性的程序倾向于一次又一次访问相同的或者邻近的数据项集合,倾向于从存储器层次结构中较高层次处访问数据项,因此运行的更快。

2、局部性:
在存储器层次结构的基础之上引出了一个很重要的思想,也是计算机程序里面一个很基本的属性”局部性“。局部性又分为两 个方面:1、 时间局部性:有良好的时间局部性程序中,被引用过一次的存储器很有可能在不久的将来再被多次调用;2、 空间局部 性:有良好空间局部性程序中,被引用过一次的存储器,很有可能在不久的将来引用其附近临近的存储器。由此可以给出量化评价 一个程序局部性的简单原则:1、重复引用一个变量的程序有良好的时间局部性;2、对于步长为k的引用模式的程序,步长越小, 程序的空间局部性越好;3、对于取指令来说,循环有好的时间和空间局部性。

        /*有良好局部性的程序*/
int loop1( int array[M][N] ){
    int i = 0,j = 0,sum = 0;
    for( i = 0;i < M;i++ ){
        for( j = 0;j < N;j++ )
            sum += a[i][j];
    return sum;
}

/*局部性很差的程序*/
int loop2( int array[M][N] ){
    int i = 0,j = 0,sum = 0;
    for( i = 0;i < M;i++ ){
        for( j = 0;j < N;j++ )
            sum += a[j][i];
    return sum;
}

3、缓存:
第k层总是作为第k+1层存储设备的数据对象的缓冲区域,使用高速缓存这个过程称为缓存。在这过程中,总是以传送单元(块)在第k层与第k+1层之间来回拷贝数据。
对于缓存:一般有缓存命中和缓存命不中两种情况。对于缓存命中的情况比较简单,就是我们需要从k+1层中提取的数据正好就在已经缓存在第k层中了。对于缓存命不中则有几种不同的情况:1、 冷不命中(强制性不命中):若第k层缓存是空的,那么对任何数据对象的访问都是不命中的;2、冲突命不中:发生在缓存足够大,能够保存引用的数据,但是由于多个引用数据被映射在了缓存区的同一个位置,导致多次缓存不命中;3、容量不命中:当缓存太小了,不能处理一个完整的工作集(程序按照一系列的阶段来运行,每一个阶段访问块的某一相对稳定不变的集合,这个集合就叫工作集)的时候出现这种情况。
高速缓存存储器

上图给出了通用高速缓存存储器的结构(S,E,B,m):S为高速缓存组数组,每个高速缓存组包含E个高速缓存行,每行由B字节的数据块组成,有效位说明该行数据是否包含有意义的信息,还有t=m-(b+s)个标记位,它们唯一地标识存储在这个高速缓存行中的块。缓存容量大小:C=SEB
这个部分需要注意的是:为什么高速缓存用中间的位作为组索引,而不是用高位。这是因为使用高位一些连续的存储器会映射在相同的高速缓存块中,造成冲突不命中的情况。

习题总结

蓝墨云习题总结:

下面代码中,对数组x填充后,采用直接映射高速缓存,所有对x和y引用的命中率为()


A .
1
B .
1/4
C .
1/2
D .
3/4
答案是b

The following table gives the parameters for a number of different caches. For
each cache, determine the number of cache sets (S), tag bits (t), set index bits (s),
and block offset bits (b)

A .
第三行S为1
B .
第一行t为24
C .
第二行b为5
D .
第三行s的值为0

答案:acd

有关局部性原理,说法正确的是()

A .
程序访问一个向量,步长越小或短,空间局部性越好
B .
局部性有两种形式:空间局部性,时间局部性
C .
程序访问一个向量,步长越大空间局部性越好。
D .
硬件、OS,应用程序都会用到局部性原理
答案: acd

计算下面磁盘的容量():4个盘片,100000个柱面,每条磁道400个扇区,每个扇区512个字节
A .
81.92GB
B .
40.96GB
C .
163.84
D .
327.68GB

答案 c

解析:
磁盘
:由一个或多个叠放在一起的盘片组成,被封装在一个密封的包装里。整个装置通常被称为磁盘驱动器,简称为磁盘(又称旋转磁盘,以区别基于闪存的固态硬盘(SSD没有移动部分))。

书上习题6.2

计算这样一个磁盘的容量,它有2个盘片,10000个柱面,每条磁道平均有400个扇区,而每个扇区有512个字节

磁盘容量=(512字节/扇区)×(400扇区数/track)×(10000磁道数/表面)×(2表面数/盘片)×(2盘片数/磁盘)=8192000000字节=8.192GB

有关磁盘,说法正确的是()

A .
磁盘的读取时间为毫秒级

B .
每张磁盘有一个表面

C .
表面由磁道组成

D .
每个扇区的面积不同,包含的数据位的数量也不一样

答案:ac

关于非易失性存储器,下面说法正确的是()

A .
DRAM是非易失性存储器

B .
SRAM是非易失性存储器

C .
PROM只能编程一次

D .
EEPROM可以用紫外线进行擦除

E .
存在ROM中的程序通常被称为固件

答案:ce

书上习题

练习题6.1

In the following, let r be the number of rows in a DRAM array, c the number of columns, br the number of bits needed to address the rows, and bc the number of bits needed to address the columns. For each of the following DRAMs, deter- mine the power-of-two array dimensions that minimize max(br, bc), the maximum number of bits needed to address the rows or columns of the array.(接下来,设r表示一个DRAM阵列中的行数,c表示列数,br表示行寻址所需的位数,bc表示列寻址所需的位数。对于下面每个DRAM,确定2的幂数的阵列维数,使得max(br,bc)最小,max(br,bc)是对阵列的行或列寻址所需的位数中较大的值。)

组织 r c br bc max(br,bc)
16×1 4 4 2 2 2
16×4 4 4 2 2 2
128×8 16 8 4 3 4
512×4 32 16 5 4 5
1024×4 32 32 5 5 5

练习题6.7

Permute the loops in the following function so that it scans the three-dimensional array a with a stride-1 reference pattern.(改变下面函数中循环的顺序,使得它以步长为1的引用模式扫描三维数组a:)

int sumarray3d(int a[N][N][N]) 
{
    int i, j, k, sum = 0;
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            for (k = 0; k < N; k++) {
                sum += a[k][i][j];
            }
        }
    }
    return sum;
}

我的解答

sum += a[k][i][j];
表明步长为N*N,为了创建一个步长为1的引用模式,必须改变循环的次序,使得最右边的索引变化得最快:

int sumarray3d(int a[N][N][N]) 
{
    int i, j, k, sum = 0;
    for (k = 0; i < N; i++) {
        for (i = 0; j < N; j++) {
            for (j = 0; k < N; k++) {
                sum += a[k][i][j];
            }
        }
    }
    return sum;
}

书上习题6.8解析:
以下中的三个函数,以不同的空间局部性程度,执行相同的操作。请对这些函数就空间局部性进行排序。解释你是如何得到排序结果的。

(a)structs数组:

#define N 1000 1 void 

typedef struct {
    int vel[3];
    int acc[3];
} point;

point p[N];

(b)clear1函数:

void clear1(point *p, int n) 
{
    int i, j; 
    
    for (i = 0; i < n; i++) {
        for (j = 0; j < 3; j++) 
            p[i].vel[j] = 0;
        for (j = 0; j < 3; j++) 
            p[i].acc[j] = 0;
    } 

(c)clear2函数:

void clear2(point *p, int n)
{
    int i, j;
    
    for (i = 0; i < n; i++) {
        for (j = 0; j < 3; j++) {
            p[i].vel[j] = 0;
            p[i].acc[j] = 0;
        }
    }
}

}

(d)clear3函数:

void clear3(point *p, int n) 
{
    int i, j;
 
    for (j = 0; j < 3; j++) {
        for (i = 0; i < n; i++) {
            p[i].vel[j] = 0;
        for (i = 0; i < n; i++)
            p[i].acc[j] = 0;
    }
}

解析:空间局部性:clear1>clear2>clear3。因为函数clear1以步长为1的引用模式访问数组,因此明显地具有最好的空间局部性;函数clear2依次扫描N个结构中的每一个,这是好的,但是在每个结构中,它以步长不为1的模式跳到下列相对于结构起始位置的偏移处:0、12、4、16、8、20,所以比clear1的要差;函数clear3不仅在每个结构中跳来跳去,而且还从结构跳到结构,所以比clear3和clear1都要差。

练习题6.9

The following table gives the parameters for a number of different caches. For each cache, determine the number of cache sets (S), tag bits (t), set index bits (s), and block offset bits (b).(下表给出了几个不同的高速缓存的参数。确定每个高速缓存的高速缓存组数(S)、标记位数(t)、组索引位数(s)以及块偏移位数(b)。)

我的解答

高速缓存 m C B E S t s b

  1. 32 1024 4 1 256 22 8 2
  2. 32 1024 8 4 32 24 5 3
  3. 32 1024 32 32 1 27 0 5

结对及互评
-本周结对学习情况

20155220

同伴重点学习了第十二章的教材内容,我复习了第六章的内容。

其他(感悟、思考等)
存储器这章的知识需要我们记忆的很多,所以就需要我们花更多的时间来背

学习进度条
代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长 |
| -------- | :----------------😐:----------------😐:---------------: |:-----: |
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 10 /10 | 1/1 | 10/10 | |
| 第二周 | 40 /70 | 2/4 | 18/38 | |
| 第三周 | 150/200 | 3/7 | 15/60 | |
|第四周 | 160/210 |6/8| 23/70

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难,软件工程 估计方法

计划学习时间:25小时
实际学习时间:20小时
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
《深入理解计算机系统V3》学习指导
...