热门标签 | 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



推荐阅读
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • hadoop1.2.1文档中这样写:Nowcheckthatyoucansshtothelocalhostwithoutapassphrase:$sshlocalhostIfyou ... [详细]
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社区 版权所有