20145326蔡馨熠《信息安全系统设计》第7周学习总结

教材学习内容总结

在简单模型中,存储器系统是一个线性的字节数组,而cpu能够在一个常数时间内访问每个存储器位置。实际上,存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。书上有的内容我就不重复赘述了,只需要将部分重要的知识点归纳总结一下。

存储技术

  • 静态RAM(SRAM):用来作为高速缓存存储器,每个位存储在一个双稳态的存储器单元里。双稳态就是说电路可以无限期的保持在两个不同的电压配置或者状态之一。只要供电,就会保持不变。即使有干扰,例如电子噪音来扰乱电压,当干扰消除后,电路就会恢复到稳定值。其不需要刷新, 存取速度快 , 对光电噪声不敏感 ,晶体管多密集度低 ,功耗贵代价高 。
  • 动态RAM(DRAM):用来作为主存以及图形系统的帧缓冲区。将每个位存储为对一个电容的充电,当电容的电压被扰乱之后,他就永远都不会再恢复了。暴露在光线下会导致电容电压改变。其以纳秒为周期刷新,存取速度慢,光电因素易导致电压改变,电容小,密集度高, 功耗低。
  • 电路设计者将DRAM组织成二维阵列,而不是线性数组的一个原因是降低芯片上地址引脚的数量。当然二维阵列组织的缺点是必须分两步发送地址,这 增加了访问时间。
  • 可编程ROM(PROM):只能被编程一次。PROM每个存储单元有一种熔丝,只能用高电流熔断一次。
  • 可擦写可编程ROM(EPROM):紫外线光照射过窗口,EPROM就被清除为0,被擦除和重编程的次数为1000次。
  • 电子可擦除ROM(EEPROM):不需要一个物理上独立的编程设备,因此可以直接在印制电路卡上编程,能够编程的次数为10^5。
  • 闪存:基于EEPROM,为大量的电子设备提供快速而持久的非易失性存储。
  • 磁盘结构(磁盘驱动器)结构:盘片磁道扇区间隙柱面。
  • 磁盘容量
  • 访问时间:寻道时间旋转时间传送时间
  • 逻辑磁盘块:内存可以看成字节数组、磁盘可以看成块数组,每一个逻辑块号可以翻译成一个(盘面磁道扇区)三元组。
  • 根据携带信号不同,总线可分为数据总线地址总线控制总线三种。
  • CPU使用存储器映射I/O技术向I/O设备发出命令。

局部性

  • 局部性有两种形式:时间局部性空间局部性
  • 程序访问一个向量,步长越大空间局部性越差
  • 重复引用同一个变量的程序有良好的时间局部性; 对于具有步长为k的引用模式的程序,步长越小,空间局部性越好; 对于取指令来说,循环具有良好的时间和空间局部性。循环体越小,迭代次数越多局部性越好。

存储器层次结构

  • 存储层次结构的中心思想是上层作为下层的缓存
  • 利用时间局部性: 一旦一个数据在第一次不命中时被拷贝到缓存中,我们就会期望后面对该目标有一系列的访问命中。
  • 利用空间局部性:块通常包含多个数据对象,我们通常期望后面对该块中其他对象的访问能够补偿不命中后拷贝该块的花费。
  • 缓存不命中时,决定哪个块是牺牲块由替换策略来控制;空缓存的不命中叫强制性不命中冷不命中;容量不命中的原因是缓存太小

高速缓存存储器

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

学习过程

代码驱动的程序设计学习

git在之前就安装完毕,首先安装tree

然后输入mkdir 20145326CSAPP2E 建立自己的代码文件夹“20145326CSAPP2E”,

输入cd 20145326CSAPP2E进入文件夹,建立相应的子文件夹。接着输入cd src进入文件夹,并创建12章相应的文件夹。

用tree查看:

在“ 01intro ”文件夹里新建一个“hello  world”程序,然后运行。

最后就是git代码了。在这之前,要在码云新建一个项目“CSAPP2E”。

git成功后的效果:

然后按照这个过程,继续推送了本周剩余的代码。

实验楼作业(太有趣了!)

安装fortune:

练习题

习题6.2

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

磁盘容量 = (512/400)4001000022= 8 192 000 000 字节 = 8.192GB

习题6.3

估计访问下面的一个磁盘上的一个扇区需要的时间(以ms为单位)。旋转速率:15000RPM;Taveseek = 8ms;每条磁道的平均扇区数:500

访问时间 = Taveseek+Taverotation+Tavetransfer = 8ms +0.51/15000RPM60secs.min1000ms/s+1/15000RPM1/50060secs/min1000ms/s=8ms+2ms+0.008ms=10.008ms

习题6.4

假设1MB的文件由512字节的逻辑块组成,存储在有如下特性的磁盘驱动器上(旋转速率:10 000RPM,Taveseek=5ms,平均扇区/磁道 = 1000)。
(1)最好的情况:给定逻辑块到磁盘扇区的最好的可能的映射(即,顺序的),估计读这个文件需要的最优时间
(2)随机的情况:如果块是随机地映射到磁盘扇区的,估计读这个文件需要的时间

(1)T=Taveseek+Taverotation+2Tmaxrotation=5ms+3ms+26ms=20ms

(2)在这种情况下,块被随机的映射到扇区上,读2000块的每一块都需要Taveseek+Tavgrotation=8ms。所以读这个文件的总时间为T = 8ms*2000=16000ms=16s

习题6.8

改变原函数中循环的顺序,使得它以步长为1的引用模式扫描三位数组a。

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

习题6.9

判断图中三个函数的空间局部性。

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

习题6.11

在前面dotprod的例子中,在我们对数组x做了填充之后,所有对x和y的引用的命中率是多少?

在对dotprod例子中对数组x定义为float x[12]后,填充消除了冲突不命中,也就是不会发生y[0] ~ y[3]的块被拷贝到组0,覆盖前一次引用拷贝进来的X的值的情况,因此有四分之三的引用是命中的。

习题6.13

有两个低位是块偏移(CO),然后是三位的组索引(CI),剩下的位作为标记(CT)

代码托管情况

代码托管连接

把所有的代码都增加了详细的注释:

代码统计行数:

学习进度条

  代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时  
第一周 0/0 1/2 20/20  
第二周 58/58 1/3 20/40  
第三周 150/208 1/4 22/62  
第五周 150/358 1/5 21/83  
第六周 136/494 1/6 25/108  
第七周 115/609 1/7 24/132  

心得体会

本周的学习内容主要是了解存储设备的类型和特点,以及局部性原理和缓存思想在存储层次结构中的应用,大部分的知识在前几章的学习中都或多或少有涉及到,比如存储的核心思想是每层存储设备都作为下一层的“缓存”等等,有了之前的基础,这一章的学习不是特别的吃力。静下心来,挨着一页页的看教材,边看边理解,收获还是比较大。学习完这部分知识后,我更清楚的了解了存储器的分类,更深入了解了数据传送的过程。要说难点的话,还是直接映射高速缓存运行过程的那部分知识,最开始觉得比较模糊,但是后面又学习到组相联高速缓存和全相联高速缓存时,把三种过程综合起来看就能够理解标记、组索引、块偏移各自的作用了。我一直认为完全不看教材,一心想走捷径是绝对不行的,要想有收获,必须投入大量时间与精力。最重要的还是摆正心态,不要应付,不要敷衍。我们应该挖掘学习的乐趣,享受学习的过程,这才是完美的。我会每周给自己定一个小目标~ 不断前进!!!争取早点获得娄老师颁发的奖品!哈哈哈!~

时间: 2024-11-05 14:57:28

20145326蔡馨熠《信息安全系统设计》第7周学习总结的相关文章

20145326蔡馨熠《信息安全系统设计》第2周学习总结

20145326蔡馨熠<信息安全系统设计>第2周学习总结 教材学习内容总结 一.计算机系统与链接 信息就是位+上下文,都是由一串位表示的,区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文.ASCII字符构成的文件是文本文件,所有其他文件都是二进制文件. 文件是字节序列 Hello程序的生命周期从高级C语言程序开始,每条C语句被转化为一系列“低级机器语言”指令,然后这些指令按照“可执行目标程序”的格式打包,并以二进制磁盘文件的形式存放起来,目标程序也称为“可执行目标文件”. 源文件到目

20145326蔡馨熠《网络对抗》——恶意代码分析

20145326蔡馨熠<网络对抗>--恶意代码分析 1.实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所以想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控.. 需要监控什么? 系统中各种程序.文件的行为. 还需要注意是否会出现权限更改的行为. 注册表. 是否有可疑进程. 如果有网络连接的情况,需要注意这个过程中的IP地址与端口. 用什么来监控? 最先想到的肯定是使用wireshark抓包了,再进行进一步分析. Sysinternals

20145221高其&amp;20145326蔡馨熠《信息安全系统设计基础》实验二 固件设计

20145221高其&20145326蔡馨熠<信息安全系统设计基础>实验二 固件设计 实验目的与要求 了解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 linux 环境下串行程序设计的基本方法. 掌握终端的主要属性及设置方法,熟悉终端I /O 函数的使用.学习使用多线程来完成串口的收发处理. 熟悉linux开发环境,学会基于S3C2410的linux开发环境的配置和使用.使用linux的armv4l-unknown-linux-gcc编译,使用基于NFS方式的

20145326蔡馨熠 实验三 &quot;敏捷开发与XP实践&quot;

20145326蔡馨熠 实验三 "敏捷开发与XP实践" 程序设计过程 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 一.git上传代码 首先我通过git上传一个名为“shiyansan”的代码. 设置权限: 然后我的partner从网上把这个文档下载到他的电脑中. 然后再修改,再上传: 我的partner:-  [20145211黄志远开源托管代码](https://git.oschina.net/nostalgia_) 二.敏捷开发与XP 软件工程是把

20145326蔡馨熠《Java程序设计》第一周学习总结

20145326蔡馨熠 <Java程序设计>第一周学习总结 教材学习内容总结 转眼间新的一学期终于开始了!为什么我这么期待呢?因为这学期可以上娄嘉鹏老师的java程序设计课,我不是什么电脑天才,之前c语言学得也不是特别好.可我就是对hdl和java特别感兴趣(之前在我的问卷调查报告里面提到过),并且寒假的时候在家里也预习了一部分java知识.第一周要求学习两个章节并作心得体会,虽然我早已看过前两章的知识,不过为了进一步巩固,我还是用了星期六一天的时间把第一章和第二章的知识从头到尾仔仔细细的看了

20145326蔡馨熠《信息安全系统设计基础》第11周学习总结

20145326蔡馨熠<信息安全系统设计基础>第11周学习总结 教材内容总结 异常控制流(ECF)发生在计算机系统的各个层次,是计算机系统中提供并发的基本机制.在硬件层,异常是由处理器中的事件触发的控制流中的突变.控制流传递给一个软件处理程序,该处理程序进行一些处理,然后返回控制给被中断的控制流. 有四种不同类型的异常:中断.故障.终止和陷阱.当一个外部旧设备,例如定时器芯片或者一个磁盘控制器,设置了处理器芯片上的中断引脚时(对于任意指令)中断会异步地发生控制返回到故障指令后面的那条指令. 一

20145326蔡馨熠《信息安全系统设计基础》第12周学习总结

20145326蔡馨熠<信息安全系统设计基础>第12周学习总结 教材学习内容总结 第九周学习内容总结 第十周学习内容总结 第十一周学习内容总结 视频学习与实践 指针与声明 C语言中变量的声明包括两个部分: 类型 声明符 对于简单类型,声明并不会对代码产生多大的阅读障碍,而对于复杂类型的识别,可以采用右左右左法进行判断. 指针数组.数组指针.指针函数.函数指针的区别 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的

20145326蔡馨熠《信息安全系统设计》第五周学习总结

教材学习内容总结 书上有的内容我就不重复赘述了,只需要将部分重要的知识点归纳总结一下. 1.使用GDB的堆栈跟踪功能(GDB中有很多针对调用堆栈的命令,都需要一个目标栈帧,例如打印局部变量值的命令) 在栈帧之间切换 frame args 将当前栈帧设置为args(编号或Address)指定的栈帧,并打印该栈帧的简要信息. up n 向上回退n个栈帧(更外层),n默认为1. down n 向下前进n个栈帧(更内层),n默认为1. 打印栈帧信息(不移动栈帧) frame 打印当前栈帧的简要信息. i

Buffer lab——20145326蔡馨熠

Buffer lab 缓冲区溢出攻击的原理 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写.从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于