热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

20145324《信息安全系统设计基础》第七周学习总结

20145324《信息安全系统设计基础》第七周学习总结教材学习内容总结存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构随机访问存储器(两类࿰

20145324 《信息安全系统设计基础》第七周学习总结

教材学习内容总结

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

随机访问存储器(两类)

1.静态RAM
SRAM的特点:存储器单元具有双稳态特性,只要有电就会永远保持它的值,干扰消除时,电路就会恢复到稳定值

2.动态RAM
DRAM的特点:每一位的存储是对一个电容的充电,当电容的电压被扰乱之后,就永远不会恢复
DRAM存储不稳定的应对机制:
①存储器系统必须周期性地通过读出,或者重写来刷新存储器的每一位
②使用纠错码

SRAM和DRAM的区别:

①只要有电,SRAM就会保持不变,而DRAM需要不断刷新
②SRAM的存取比DRAM快
③SRAM对光和电噪声等干扰不敏感
④SRAM比DRAM需要使用更多的晶体管,所以更昂贵

传统的DRAM:
行地址i:RAS
列地址j:CAS
DRAM组织成二位阵列降低芯片上地址引脚的数量,但增加了访问时间

DRAM芯片包装在存储器模块中插入到主板的扩展槽上
存储器模块分类:
①168个引脚的双列直插存储器模块,以64位为块传送数据
②72个引脚的单列直插存储器模块,以32位为块传送数据

访问主存:

读事务:从主存传送数据到CPU
写事务:从CPU传送数据到主存
总线:一组并行的导线,能携带地址、数据和控制信号(两个以上的设备也能共享同一根总线)

885282-20161026221636296-92738259.jpg

885282-20161026221931125-1172443939.jpg

磁盘存储

磁盘构造:
由盘片构成
表面:每个盘片有两个表面
主轴:盘片中央,可旋转
磁道:同心圆
扇区:每个磁道被划分为一组扇区
数据位:每个扇区包含相等数量的数据位,通常为512字节
间隙:存储用来标识扇区的格式化位
柱面:所有盘片表面上到主轴中心的距离相等的磁道的集合

885282-20161026222238718-1533960659.jpg

磁盘驱动器→磁盘→旋转磁盘(一样的)

磁盘容量:
记录密度:磁道一英寸的段中可以放入的位数
磁道密度:从盘片中心出发半径上一英寸的段内可以有的磁道数
面密度:记录密度与磁道密度的乘积
记录区:柱面的集合被分割成不相交的子集合(多区记录技术)

计算公式:

磁盘容量=字节数/扇区x平均磁盘数/磁道x磁道数/表面x表面数/盘片x盘片数/磁盘

1GB=10^9字节

磁盘操作:

读写头:磁盘用读写头来读写存储在磁性表面的位

寻道:通过沿着半径轴前后移动的这个传动臂,驱动器可以将读写头定位在盘片上的任何磁道上在任何时刻,所有的读写头都位于同一个柱面上

读写头碰撞:读写头碰到了阻碍,读写头就会停下来

磁盘以扇区大小的块来读写数据:

寻道时间:移动传送臂所需要的时间

旋转时间:一旦读写头定位你到了期望的磁道,驱动器等待目标扇区的第一个位旋转到读写头下
Tmax rotation=1/RPM x 60secs/1min
Tavg rotation=0.5Tmax rotation

传送时间:一个扇区的传送时间依赖于旋转速度和每条磁道的扇区数目
Tavg transfer= 1/RPM x 1/(平均扇区数/磁道) x 60s/1min

访问时间=Tavg rotation+Tavg transfer+Tavg seek

逻辑磁盘块
磁盘控制器:磁盘中一个小的硬件、固件设备,维护着逻辑块号和实际物理磁盘扇区之间的映射关系

连接到I/O设备:
外围设备互连(PCI):连接到CPU和主存 I/O总线的分类:
通用串行总线(USB):包括键盘、鼠标、调制解调器、数码相机、游戏操纵杆、打印机、外部磁盘驱动器和固态硬盘等
图形卡(适配器):负责代表CPU在显示器上画像素
主机总线适配器:使用特别的主机总线接口定义的通信协议

固态硬盘(SSD):

一个SSD包由一个或多个闪存芯片和闪存翻译层组成
随机读和写的性能差别是由底层闪存基本属性决定的

读写很慢的原因:
①擦除块需要相对较长的时间
②写操作试图修改一个包含已经有数据的页p,那么这个二块中的所有带有用数据的页都必须被拷贝到一个新(擦除过的)块,然后才能进行对页p的写

优点:随机访问时间比旋转磁盘块,能耗更低,更结实。
缺点:闪存翻译层中的平均磨损逻辑试图通过将擦除平均分布在所有的块上来最大化每个块的寿命

局部性

倾向于引用邻近与其他最近引用过的数据项的数据项,或者最近引用过的数据项本身,这种倾向性,被称为局部性原理。

时间局部性:被引用过一次的存储器位置很可能在不远的将来再被多次引用
空间局部性:一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置

评价一个程序中局部性的简单原则:

①重复引用同一个变量的程序有良好的时间局部性
②对于具有步长为k的引用模式的程序,步长越小,空间局部性越好
③对于取指令来说,循环有好的时间和空间局部性,循环体越小,循环迭代次数越多,局部性越好

存储器层次结构

885282-20161026224239953-971107936.jpg

存储器层次结构中的缓存

高速缓存:是一个小而快速地存储设备,它作为存储在更大、也更慢的设备中的数据对象的缓冲区域cash
缓存:使用高速缓存的过程cashing
块:第k+1层的存储器被划分成连续的对象片,每个块有一个唯一的地址或名字,使之区别于其他的块
传送单元:数据总是以块大小为传送单元

缓存命中:

当程序需要第k+1层的某个数据对象d时,它首先在当前存储在第k层的一个块中查找d,如果d刚好缓存在第k层中,那么就是我们说的缓存命中。

缓存不命中:若第k层中没有缓存数据对象d,那么就是我们所说的缓存不命中

替换或驱逐:覆盖一个现存的块的过程
牺牲块:被驱逐的这个块
替换策略:决定应该替换哪个块

缓存不命中的种类:
冷缓存(强制不命中\冷不命中):一个空的缓存,对于有效位为0的情况
放置策略:发生了不命中,第k层的缓存就必须执行某个放置策略,确定把它从第k+1层中取出来的块放在哪里
冲突不命中:限制性的放置策略会引起的一种不命中
工作集:程序是按照一系列阶段来运行的,每个阶段访问缓存块的某个相对稳定不变的集合
容量不命中:当工作集的大小超过缓存的大小时

缓存管理:某个东西要将缓存划分成块,在不同的层之间传送块,判定是命中还是不命中,并处理它们

高速缓存存储器

通用的高速缓存存储器结构:

每个存储器地址有m位,形成M=2^m个不同的地址
高速缓存组:S=2^s个高速缓存组的数组
高速缓存行:B=2^b字节的数据块组成
有效位:指明这个行是否包含有意义的信息
标记位:唯一地标识存储在这个高速缓存行中的块,t=m -(b+s)

885282-20161026225035312-1769293613.jpg

有关写的问题

直写:立即将w的高速缓存块写回到紧接着的第一层中 ,但是每次写都会引起总线流量

写回:只有当替换算法要驱逐更新过的块时,才能把它写到紧接着的低一层中,由于局部性,写回能显著减少总线流量,但是增加了复杂性。

高速缓存必须为每个高速缓存行维护一个额外的修改位,表明这个高速缓存块是否被修改过

写分配:加载相应的低一层中的块到高速缓存中,然后更新这个高速缓存块,但是每次不命中都会导致一个块从低一层传送到高速缓存

非写分配:避开高速缓存,直接把这个字写到低一层中

高速缓存参数的性能影响

不命中率:不命中数量/引用数量
命中率:1-不命中率
命中时间:组选择、行确认和字选择的时间
不命中处罚:不命中需要的额外的时间

代码驱动的程序设计学习

git的安装测试

1.输入git,检查是否安装
2.如未安装输入sudo apt-get install git安装
3.安装完后输入git --version检查是否安装成功
4.安装成功后开始配置git
5.输入git init
6.git config --global user.name "SJZGM10(用户民)"
7.git config --global user.eamil "suju1015463462@vip.qq.com(邮箱地址)"
8.配置完成后创建公钥
9.输入ssh-keygen -C 'suju1015463462@vip.qq.com(邮箱地址)' -t rsa
10.创建完公钥后上传公钥
11.输入cd ~/.ssh
12.输入gedit id_rsa.pub
13.复制公钥,并粘贴到http://git.oschina.net/profile/sshkeys
14.完成后输入ssh -T git@git.oschina.net检查是否通畅
885282-20161026212002546-253984432.jpg

15.建立自己的代码文件夹
16.输入mkdir 20145324(可以用自己的学号)
17.输入cd 20145324进入文件夹
18.输入mkdir 20145324CSAPP2E(用于保存本课代码)
19.输入cd 20145324CSAPP2E进入文件夹
20.输入mkdir src(用于存放源代码文件)
21.输入mkdir include(用于存放头文件)
22.输入mkdir bin(用于存放编译后的目标文件、可执行文件等)
23.输入mkdir lib(存放项目所需的静态库、动态(共享)库)
24.输入mkdir res(存放项目所需的图标、声音、图片等资源)
25.输入mkdir docs(存放项目相关的参考资料、帮助文档)
26.输入touch README Makefile 新建README(对项目的简要介绍:licence、功能、编译环境等,详细的要在docs下有帮助文档)和Makefile(实现项目编译自动化)连个文件
27.输入cd src进入文件夹,并创建12章相应的文件夹
28.输入mkdir 01intro
29.输入mkdir 02data
30.输入mkdir 03asm
31.输入mkdir 04arch
32.输入mkdir 05perf
33.输入mkdir 06mem
34.输入mkdir 07link
35.输入mkdir 08ecf
36.输入mkdir 09vm
37.输入mkdir 10io
38.输入mkdir 11netp
39.输入mkdir 12conc
885282-20161026212048656-2073214069.jpg

885282-20161026212103906-639751840.jpg

40.完成后输入cd ..返回上一级
41.输入tree 查看一下刚刚建的结构目录(没有安装tree再输入tree后按照提示安装即可)
885282-20161026212143703-85451476.jpg

42.开始使用git传代码
43.输入ls查看一下
44.输入vim src/01intro/hello.c
45.输入i进入编辑模式
46.输入代码
-#include
int main()
{
printf("hello 20145324\n");
}
47.按Esc键退出编辑,并输入:wq保存代码并退出vim
48.输入gcc src/01intro/hello.c -o bin/hello编译程序
49.输入./bin/hello执行程序
885282-20161026212220171-1047103264.jpg

50.上传代码前配置一下
51.输入git init(好像可以不用输这个)
52.输入ls显示当前目录内容
53.输入git config user.name "SJZGM10"
54.输入git config user.email "suju1015463462@vip.qq.com"
55.输入config user.core.edit vim
56.输入git config --list查看配置
885282-20161026212424218-1376368642.jpg

57.进入开源中国新建一个项目CSAPP2E
58.输入git remote add origin https://git.oschina.net/SJZGM10(用户民)/CSAPP2E(项目名称).git
59.输入git pull origin master下载README.md(不进行这一步后面可能会存在git push时有error:failed to push some refs to 'https://git.oschina.net/SJZGM10/CSAPP2E.git')
60.输入git add .添加代码
61.输入git commit -m "gitxuexi"给代码添加注释
62.输入git push origin master
63.输入SJZGM10(用户民)回车
63.输入密码回车
64.上传成功
885282-20161026212632656-2036338262.jpg

885282-20161026212647328-580748797.jpg

885282-20161026212702218-1263843629.jpg

65.通过shell脚本来简化编译运行程序

66.输入compile.sh
67.输入i编辑脚本
68.输入脚本:
-#! /bin/sh

-#compile ch01 hello world program (注释)

gcc ./src/01intro/hello.c -o ./bin/hello
./bin/hello
69.按Esc退出输入,并输入:wq保存退出脚本编辑
70.输入chmod +x compile.sh给脚本添加可执行权限
71.输入./compile.sh
885282-20161026212818765-1744137072.jpg

77.输入ls显示当前目录内容
78.使用.gitignore文件把不想纳入git管理的文件、文件夹排除掉(bin文件夹)
79.输入vi .gitignore
80.输入i开始编辑
81.输入内容:
-# ignore bin directory

bin/
82.按Esc退出输入,并输入:wq保存退出编辑
885282-20161026212920921-1813363123.jpg

使用gdb辅助学习

1.输入sudo apt-get install cgdb安装替代调试工具
885282-20161026213236453-150366834.jpg

2.输入vi src/02data/testcast.c建立示例
3.按i输入代码:
885282-20161026213507875-131241453.jpg
4.按Esc退出输入,并输入:wq保存并退出编辑
5.输入vi compile.sh编辑脚本
6.输入i编辑脚本
7.脚本内容:
-# ch02 p44 test casting
gcc -g ./src/02data/testcast.c -o ./bin/testcast
./bin/testcast
8.按Esc退出输入,并输入:wq保存并退出编辑
9.输入./compile.sh
885282-20161026214023421-1361889874.jpg

10.输入cgdb bin/testcast进行调试
885282-20161026214153093-1808371068.jpg

885282-20161026214219406-1681004447.jpg

思考题:使用compile.sh有什么问题?

答:在操作过程中我觉得使用compile.sh很方便编译,写好了几个代码,可以一起写脚本再编译,但是运行程序的时候就不是很好找到结果,如果有问题的话,修改起来也很麻烦

代码调试中的问题和解决过程

在运行教材p402的代码时出现下图情况
885282-20161026214616515-1466093634.jpg

再教材给出的代码上加了main函数还是无法运行,说给的实参太少
885282-20161026214732625-853838946.jpg

仔细看上图自己写的代码,发现main函数里没有写参数,修改后即可编译通过

本周代码托管截图

本周根据代码驱动的程序设计学习重新建立了项目

885282-20161026214451468-110860292.jpg

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

多动手操作,百度,很多问题自己就可以解决了

学习进度条

博客量(新增/累积)学习时间(新增/累积)重要成长
目标30篇400小时
第零周1/120/20
第一周1/220/40
第二周1/320/60
第三周1/420/80
第四周1/520/100
第五周1/620/120
第六周1/720/140
第七周1/820/160

参考资料

  • 《深入理解计算机系统V2》学习指导
  • ...

转:https://www.cnblogs.com/SJZGM10/p/6002262.html



推荐阅读
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
author-avatar
mobiledu2502858053
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有