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



推荐阅读
  • 解决Win10 1709版本文件共享安全警告问题
    每当Windows 10发布新版本时,由于兼容性问题往往会出现各种故障。近期,一些用户在升级至1709版本后遇到了无法访问共享文件夹的问题,系统提示‘文件共享不安全,无法连接’。本文将提供多种解决方案,帮助您轻松解决这一难题。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文介绍了SELinux的两种主要工作模式——强制模式和宽容模式,并提供了如何在CentOS 7中正确启用和配置SELinux的方法,以及在遇到登录问题时的解决策略。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • Hibernate全自动全映射ORM框架,旨在消除sql,是一个持久层的ORM框架1)、基础概念DAO(DataAccessorOb ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 利用 Calcurse 在 Linux 终端高效管理日程与任务
    对于喜爱使用 Linux 终端进行日常操作的系统管理员来说,Calcurse 提供了一种强大的方式来管理日程安排、待办事项及会议。本文将详细介绍如何在 Linux 上安装和使用 Calcurse,帮助用户更有效地组织工作。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
  • Fiddler 安装与配置指南
    本文详细介绍了Fiddler的安装步骤及配置方法,旨在帮助用户顺利抓取用户Token。文章还涵盖了一些常见问题的解决方案,以确保安装过程顺利。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
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社区 版权所有