2017-2018-1 20155327 《信息安全系统设计基础》第九周学习总结

学习目标

了解常见的存储技术(RAM、ROM、磁盘、固态硬盘等)
理解局部性原理
理解缓存思想
理解局部性原理和缓存思想在存储层次结构中的应用
高速缓存的原理和应用

教材学习内容总结

常见的存储技术

  • 随机访问存储器(RAM)
    (1)静态RAM:用来作为高速缓存存储器,每个位存储在一个双稳态的存储器单元里。双稳态:电路可以无限期的保持在两个不同的电压配置或者状态之一。
    (2)动态RAM:用来作为主存以及图形系统的帧缓冲区。将每个位存储为对一个电容的充电,当电容的电压被扰乱之后,他就永远都不会再恢复了。暴露在光线下会导致电容电压改变。
    (3)传统的DRAM:DRAM芯片中的单元(位)被分成了d个超单元,每个超单元都由w个DRAM单元组成, 一个d*w的DRAM共存储dw位信息。超单元被组织成一个r行c列的长方形阵列,rc=d。每个超单元的地址用(i,j)来表示(从零开始)。
  • ROM
    只能被编程一次。PROM每个存储单元有一种熔丝,只能用高电流熔断一次。
    可擦写可编程ROM(EPROM):紫外线光照射过窗口,EPROM就被清除为0,被擦除和重编程的次数为1000次。
    电子可擦除ROM(EEPROM):不需要一个物理上独立的编程设备,因此可以直接在印制电路卡上编程,能够编程的次数为10^5。
    闪存:基于EEPROM,为大量的电子设备提供快速而持久的非易失性存储。
  • 磁盘
    由盘片构成,旋转速率大约为5400-15000每分钟。磁盘的每个表面是一组称为磁道的同心圆组成,每个磁道被划分为一组扇区,扇区之间由一些间隙隔开,间隙存储用来标识扇区的格式化位。
    磁盘容量由以下技术因素决定:
    记录密度(位/英寸):磁道一英寸的段中可以放入的位数。
    磁道密度(道/英寸):从盘片中心出发半径上一英寸的段内可以有的磁道数
    面密度(位/平方英寸):记录密度与磁道密度的乘积。
  • 固态硬盘
    固态硬盘是一种基于闪存的存储技术。一个硬盘包由一个或者多个闪存芯片和内存翻译层组成,闪存芯片替代旋转磁盘中的机械驱动器,而闪存翻译层将对逻辑块的请求翻译成对底层物理设备的访问

局部性原理

一个编写良好的计算机程序倾向于引用邻近于其他最近引用过的数据项,或者最近引用过的数据项本身。有良好局部性的程序比局部性差的程序运行的更快,在硬件层引入高速缓存存储器就体现了局部性原理。

存储型层次结构

(1)缓存命中:当程序需要第k+1层的某个数据对象d时,首先在当前存储的第k层的一个块中查找d,如果d刚好在第k层中,则称为缓存命中。
(2)缓存不命中:如果k层中没有缓存数据d,则称为缓存不命中,此时要从k+1层取出包含d的块,可能会覆盖(替换/驱逐)现在的一个块(牺牲块)。
(3)缓存不命中的种类
强制性不命中/冷不命中:第k层缓存是空的(冷缓存),只是短暂的状态,不会在反复访问存储器使得缓存暖身之后的稳定状态出现。
冲突不命中:第k+1层的第i块,必须放置在第k层的块(i mod 4)中,这种限制性的放置策略引起冲突不命中。

高速缓存存储器结构

高速缓存被组织成一个有S=2s个高速缓存组的数组,每个组包含E个高速缓存行,每个行是由一个B=2b字节的数据块、一位有效位以及t=m-(b+s)个标记位组成,唯一标识存储在这个高速缓存行中的块。
高速缓存的结构用元组(S,E,B,m)来描述,高速缓存的大小C = S * E * B。

教材学习中的问题和解决过程

(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )

  • 问题1:XXXXXX
  • 问题1解决方案:XXXXXX
  • 问题2:XXXXXX
  • 问题2解决方案:XXXXXX
  • ...

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 错题1 Linux信号处理说法正确的是()
    A .
    可以用signal()处理信号
    B .
    一个信号最多只能被接收一次
    C .
    kill(1)用来杀死进程
    D .
    kill(1)用来发送信号
    E .
    可以通过键盘发送信号
    F .
    可以用sigaction()处理信号
    正确答案: A B D E F
    看书不够仔细没有选完。
  • 错题2 关于代码 int main(){} 说法正确的是()
    A .
    返回值是0
    B .
    返回值不确定
    C .
    会调用exit(0)
    D .
    返回值大于0
    E .
    上面代码运行完,在命令行中运行echo $? 的值是0
    正确答案: A C E
  • 3.Unix/Linux中通过调用( )可以获取子进程PID。
    A .
    getpid()
    B .
    getppid()
    C .
    getcpid()
    D .
    fork()
    正确答案: D
    在linux或unix中,使用系统调用fork( )创建两个子进程,并观察子进程和父进程的运行情况。

其他(感悟、思考等,可选)

本次学习学习到了基本的储存技术并知道了他们是如何被组织成层次结构的,学会了如何分析c程序的局部性,学会了如何改进自己所编写程序中局部性问题,对储存器山有了新的了解。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

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

  • 计划学习时间:XX小时

  • 实际学习时间:XX小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

 posted on 2017-11-19 20:11  20155327李百乾-  阅读(180)  评论(0编辑  收藏  举报