2017-2018-1 20155314 《信息安全系统设计基础》第9周学习总结
2017-2018-1 20155314 《信息安全系统设计基础》第9周学习总结
教材学习内容总结
学习目标
- 了解常见的存储技术(RAM、ROM、磁盘、固态硬盘等)
- 理解局部性原理
- 理解缓存思想
- 理解局部性原理和缓存思想在存储层次结构中的应用
- 高速缓存的原理和应用
教材内容提炼
第6章 存储器层次结构
6.1 存储技术
6.1.1 随机访问存储器
- 随机访问存储器(RAM)(易失性存储器)
-
分为两类
- 静态RAM(SRAM)
- 动态RAM(DRAM)
-
SRAM比DRAM更快,但更贵
-
传统的DRAM
-
内存模块(MM)
-
增强的DRAM
- 快页模式DRAM(FPM DRAM)
- 扩展数据输出DRAM(EDO DRAM)
- 同步DRAM(SDRAM)
- 双倍数据速率同步DRAM(DDR SDRAM)
- 视频RAM(VRAM)
-
- 只读存储器(ROM)(非易失性存储器)
- 可编程ROM(PROM)
- 可擦写可编程ROM(EPROM)
- 电子可擦除PROM(EEPROM)
- 闪存(FLASH)
- 固态硬盘(SSD)
- 访问主存
- CPU chip:CPU芯片
- Register file:寄存器文件
- ALU:算术逻辑单元
- Bus interface:总线接口
- System bus:系统总线
- I/O bridge:I/O桥
- Memory bus:内存总线
- Main memory:主存
6.1.2 磁盘存储
-
磁盘构造
- 磁盘(disk):由一个或多个叠放在一起的盘片组成,被封装在一个密封的包装里。整个装置通常被称为磁盘驱动器,简称为磁盘(又称旋转磁盘,以区别基于闪存的固态硬盘(SSD没有移动部分))
- 盘片(platter):磁盘由盘片构成,每个盘片有两面或者称为表面,表面覆盖着磁性记录材料
- 磁道(track):每个表面由一组称为磁道的同心圆组成
- 扇区(sector):每个磁道被划分为一组扇区
- 间隙(gap):扇区之间由一些间隙分隔开
- 柱面(cylinder)
- 磁盘(disk):由一个或多个叠放在一起的盘片组成,被封装在一个密封的包装里。整个装置通常被称为磁盘驱动器,简称为磁盘(又称旋转磁盘,以区别基于闪存的固态硬盘(SSD没有移动部分))
-
磁盘容量
- 记录密度(recording density)(位/英寸)
- 磁道密度(track density)(道/英寸)
- 面密度(areal density)(位/平方英寸)
计算公式:
-
磁盘操作
- 磁盘以扇区大小的块来读写数据
- 访问时间
- 寻道时间
- 旋转时间
- 传送时间
-
逻辑磁盘块
-
连接I/O设备
- 总线
- 数据总线
- 控制总线
- 地址总线
- 系统总线
- 存储总线
- I/O总线
- 连接到总线的设备
- 通用串行总线(USB)
- 图形卡(或适配器)
- 主机总线适配器
- 其他设备(如网络适配器)
- 总线
-
访问磁盘
6.1.3 固态硬盘
<img src="http://images2017.cnblogs.com/blog/1071508/201712/1071508-20171217175127749-1055827420.png" width="90%" />
6.1.4 存储技术趋势
- 不同的存储技术有不同的价格和性能折中
- 不同存储技术的价格和性能属性以截然不同的速率变化着
6.2 局部性
- 局部性原理
- 两种不同的形式
- 时间局部性
- 空间局部性
- 有良好局部性的程序比局部性差的程序运行得更快
6.2.1 对程序数据引用的局部性
- 步长为1的引用模式:顺序访问一个向量每个元素
- 步长为k的引用模式:一个连续向量中每隔k个元素进行访问
- 随着步长的增加,空间局部性下降
6.2.2 取指令的局部性
6.2.3 局部性小结
- 重复引用相同变量的程序有良好的时间局部性
- 对于:
- 具有步长为k的引用模式的程序,步长越小,空间局部性越好
- 具有步长为1的引用模式的程序有良好的空间局部性
- 在内存中以大步长跳来跳去的程序的空间局部性会很差
- 对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好
6.3 存储器层次结构
- 存储技术
- 计算机软件
- 典型的存储器层次结构
6.3.1 存储器层次结构中的缓存
- 缓存命中
- 缓存不命中
- 缓存不命中的种类
- 缓存管理
6.3.2 存储器层次结构概念小结
- 利用时间局部性
- 利用空间局部性
6.4 高速缓存存储器
#####6.4.1 通用的高速缓存存储器组织结构- 高速缓存参数小结
6.4.2 直接映射高速缓存
#####6.4.3 组相联高速缓存 #####6.4.4 全相联高速缓存 #####6.4.5 有关写的问题 #####6.4.6 一个真实的高速缓存层次结构的解剖 #####6.4.7 高速缓存参数的性能影响 ####6.5 编写高速缓存友好的代码 ####6.6 综合:高速缓存对程序性能的影响 #####6.6.1 存储器山 #####6.6.2 重新排列循环以提高空间局部性 #####6.6.3 在程序中利用局部性 ###课后实践:mypwd ####实践要求加分题-mypwd的实现
- 学习pwd命令
- 研究pwd实现需要的系统调用(man -k; grep),写出伪代码
- 实现mypwd
- 测试mypwd
提交过程博客的链接
思想
-
直接调用函数getcwd()
getcwd()会将当前工作目录的绝对路径复制到参数buffer所指的内存空间中,参数maxlen为buffer的空间大小。可以采取令buffer为NULL来使getcwd()调用malloc给buffer动态分配空间。
代码
#include <stdio.h>
#include <unistd.h>
int main(){
printf("当前路径为:%s\n",getcwd(NULL,0));
return 0;
}
运行截图
代码调试中的问题和解决过程
无法打开Y86-64模拟器界面
解决方法
这是Y86-64模拟器的Makefile中配置GUI相关路径错误导致的,解决方法是将两个GUI路径分别设置为TKLIBS=-L/usr/lib -ltk8.5 -ltcl8.5
和TKINC=-I/usr/include/tcl8.5
即可,如下图:
成功打开Y86-64模拟器:
代码托管
上周考试错题总结
CH03
-
假设用ADD指令完成C表达式t=a+b的功能,有关条件码寄存器的说法正确的是()
A. 若t==0 ,则ZF=1
B. 若t<0, 则CF=1
C. 若t<0, 则SF=1
D. 若(a<0==b<0)&&(t<0 != a<0), 则OF=1
E. 若(a<0==b<0)&&(t<0 != a<0), 则CF=1
F. leaq指令不影响条件码寄存器
G. cmp指令不影响条件码寄存器
【错选】A B D G
【答案】A D F
【解析】参考课本p135
-
以下代码是将void decode1(long *xp, long *yp, long *zp)反汇编的结果,下面说法正确的是()
A. 从汇编代码看出,decode1的参数先入栈的是zp
B. 从汇编代码看出,decode1的参数先入栈的是xp
C. 函数功能等价于 t=x; x=y; y=z; z=t;
D. 函数功能等价于 x=y; y=z; z=x;
【错选】B C
【答案】C
-
对于图中内存地址和寄存器的值,下面说法正确的是()
A. %rax的值是0x100
B. (%rax)的值是0x100
C. (%rax)的值是0x104
D. (%rax)的值是0xFF
E. 4(%rax)的值是0xAB
F. (%rax,%rcx,4)的值是0xAB
G. (%rax,%rcx,4)的值是0x104
【错选】A D E
【答案】A D E F
【解析】参考课本p121
CH08
-
有关exec系列函数,下面说法正确的是()
A. 可以用char[][] 来传递argv
B. 进程调用了exec系列函数后,pid会变
C. 进程调用了exec系列函数后,代码会改变
D. system()和exec系列等价
E. exec系列函数中带e的要传入环境变量参数
F. exec系列函数中带v的要传入环境变量参数
【错选】A C E
【答案】C E
【解析】不能用char[][] 来传递argv,结尾的0(null)无法处理;system=fork+exec+wait;
-
有关wait类系统调用,说法正确的是()
A. wait(&status) 等价于waitpid(-1, &status, 0)
B. 父进程中执行waitpid, 等待集合中的所有子进程结束了才返回
C. 父进程中执行waitpid, 等待集合中的任一子进程结束了才返回
D. 子进程中的退出状态在wait的status参数返回
【错选】A B D
【答案】A C D
【解析】参考课本p516 517 518
-
有关fork(),下面说法正确的是()
A. 一次调用,两次返回
B. 子进程中,fork()返回子进程PID
C. 子进程可以读写父进程中打开的文件
D. 子进程和父进程的用户级虚拟地址空间相同但独立
【错选】A D
【答案】A C D
【解析】参考课本p514
-
关于代码 int main(){} 说法正确的是()
A. 返回值是0
B. 返回值不确定
C. 会调用exit(0)
D. 返回值大于0
E. 上面代码运行完,在命令行中运行echo $? 的值是0
【错选】A E
【答案】A C E
【解析】main中不调用exit,会补上exit(0)
-
用户进程可以通过()访问内核代码和数据
A. 特权指令
B. 系统调用
C. 模式位
D. 程序计数器
【错选】C
【答案】B
【解析】参考课本p510
-
进程上下文包括程序的( )
A. 代码和数据
B. 栈
C. 通用寄存器中的内容
D. 程序计数器
E. 环境变量
F. 打开的文件描述符的集合
【错选】B C D F
【答案】A B C D E F
【解析】参考课本p508
-
Linux中,信号(Signal)是一种()异常控制流。
A. 硬件层
B. 操作系统层
C. 用户层
D. 网络层
【错选】B
【答案】C
【解析】参考课本p501
结对及互评
本周结对学习情况
- 20155323
- 结对学习内容
- 教材第1章 计算机系统漫游
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:5小时
-
实际学习时间:2小时