2017-2018-1 20155218 《信息安全系统设计基础》第十一周学习总结

2017-2018-1 20155218 《信息安全系统设计基础》第十一周学习总结

教材学习内容总结

1. 虚拟存储器的概念和作用:

为解决内存小而作业大、作业多的矛盾, 以及执行过程中只是把当前运行需要的那部分程序和数据装入内存。 所以,操作系统把各级存储器统一管理起来。就是说, 应该把一个程序当前正在使用的部分放在内存, 而其余部分放在磁盘上,就启动执行它。操作系统根据程序执行时的要求和内存的实际使用情况, 随机地对每个程序进行换入/换出。
这样, 就给用户提供一个比正式的内存空间大的多的地址空间, 这就是虚拟存储器。所谓虚拟存储器是用户能作为可编址内存对待的存储空间, 在这种计算机系统中虚地址被映射成实地址。简单地说,虚拟存储器:是由操作系统提供的一个假想的特大存储器。就是说, 虚拟存储器并不是实际的内存,它的大小比内存空间大的多; 用户感觉所能使用的“内存”非常大, 但这是操作系统对物理内存的扩充。

2. 地址翻译的概念

在既使用虚拟存储器有使用SRAM高速缓存的系统中,都存在应该使用虚拟地址还是物理地址来访问高速缓存的问题。在此,我们假设使用物理地址来模拟cpu发出读指令到取到数据的过程:

cpu产生读指令的虚拟地址—->MMU进行地址分析( 1 区分vpn(虚拟页号)、vpo(虚拟页内偏移);2 从vpn中找出TLBI、TLBT;3 在TLB存储器中找出这条记录,

命中:
取出PPN(物理页号);
PPN+VPO =PA;
得到PA,去高速缓存中找数据
找到:将数据传给cpu
未找到:去主存或磁盘中找;

未命中:
去DRAM中找;
找到同命中之后;
若未找到:触发缺页异常,程序选择一个牺牲页,将该页写回磁盘,从磁盘中拷贝所需页,之后同命中之后。

3. 存储器映射

存储器是一系列存储单元的集合,一般情况下存储器主要有随机存取存储器RAM(Random Access Memory)和只读存储器ROM(Read Only Memory)两种,随机存取存储器RAM就像黑板一样,可以在里面写上东西, 也可以擦掉后再写上新的内容,即既可以读数据也可以写数据。只读存储器ROM事先把规定好的内容存入存储器,只能将规定内容读出,不能改写。无论是RAM还是ROM,为使CPU能准确找到存储有某个信息的存储单元,就必须为这些存储单元分配一个能相互区别的标识,这些标识就是我们通常所说的地址编码。实际情况下,计算机或其他处理器(如ARM,在ARM中内核采用冯。诺依曼结构,即数据和指令共用一个存储器混合编址)在上电或复位之前,存储器只是一些没有地址编码的物理存储器,计算机或嵌入式系统在上电后要想很好的工作,就要求存储器与计算机或处理器所拥有的地址编码资源建立一一映射的关系。一般情况下,处理器设计者会为每一个存储器分配一个数值连续,数目与其存储单元数相等,以16进制表示的自然数的集合作为该存储器的地址编码,这种自然数集合与存储器的对应关系就是存储器映射,可以把存储器映射理解为嵌入式系统上电(复位)时的预备动作。

4.动态存储分配

动态存储分配方式是不一次性将整个程序装入到主存中。可根据执行的需要,部分地动态装入。同时,在装入主存的程序不执行时,系统可以收回该程序所占据的主存空间。再者,用户程序装入主存后的位置,在运行期间可根据系统需要而发生改变。此外,用户程序在运行期间也可动态地申请存储空间以满足程序需求。由此可见,动态存储分配方式在存储空间的分配和释放上,表现得十分灵活,现代的操作系统常采用这种存储方式。

5. C语言中与存储器有关的错误
  1. 间接引用坏指针
  2. 读未初始化的存储器
  3. 允许栈缓冲区溢出
  4. 假设指针和它们指向的对象是相同大小的
  5. 错位(Off-by-one)错误
  6. 错误理解操作符的优先级和结合性
  7. 错误理解指针运算
  8. 引用不存在的变量
  9. 引用空闲堆里的数据
  10. 引起存储器泄露

教材学习中的问题和解决过程

  • 问题1:除了动态分配还有哪些分配方式:
  • 问题1解决方案:解决存储分配问题有三种方式:直接存储分配方式、静态存储分配方式、动态存储分配方式。

直接存储分配方式:
直接存储分配方式要求存储器的可用空间已经确定,且确保各程序所用的地址之间互不重叠。缺点是用户感到不方便,存储器的利用率也不高。

静态存储分配方式:
静态存储分配方式中。在程序被装入、连接时,才确定它们在主存中的相应位置(物理地址)。系统必须分配其要求的全部存储空间.否则不能装入该用户程序。程序将占据着分配给它的存储空间直到程序结束。该存储空间的位置固定不变,也不能动态地申请存储空间。这种方式无法实现用户对存储空间的动态扩展,而且也不能有效地实现存储器资源的共享。

  • 问题2:如何尽量避免内存相关的问题:
  • 问题2解决方案:
  1. 始终结合使用 memset 和 malloc,或始终使用 calloc。
  2. 每当向指针写入值时,都要确保对可用字节数和所写入的字节数进行交叉核对。
  3. 在对指针赋值前,要确保没有内存位置会变为孤立的。
  4. 每当释放结构化的元素(而该元素又包含指向动态分配的内存位置的指针)时,都应首先遍历子内存位置并从那里开始释放,然后再遍历回父节点。
  5. 始终正确处理返回动态分配的内存引用的函数返回值。
  6. 每个 malloc 都要有一个对应的 free。
    确保您不是在访问空指针。
  • ...

代码托管


(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 下面代码中,对数组x填充后,采用直接映射高速缓存,所有对x和y引用的命中率为(D)

A .
1
B .
1/4
C .
1/2
D .
3/4

解析:在x[0],y[0]时发生强制不命中,在x[4],y[4]时发生冲突不命中。1-4/16=3/4
  • 下面说法正确的是(ABC)

A .
存储层次结构中最小的缓存是寄存器
B .
存储层次结构的中心思想是每一层都缓存来自较低一层的数据对象
C .
L4主存可以看作是L5:本地磁盘的缓存
D .
L4主存可以看作是L6的缓存

解析:对于每个k,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存,即层次结构中的每一层都缓存来自较低一层的数据结构。位于顶端的cpu寄存器组必然是最小的缓存,则L4主存为下一级L5的缓存。

-下面代码的步长是(C)

A .
1
B .
N
C .
NN
D .
N
N*N

解析:假设N为2,则内容依次为000,001,010,011,100,101,110,111.

由此可见步长为4.

  • 下面(B)是I/O总线

A .
USB
B .
PCI
C .
网卡
D .
图形卡

解析:输入输出设备都是通过I/O总线,例如intel的外围设备互联(Peripheral Component Interconnect,PCI)总线连接到CPU和主存的。
  • 计算下面磁盘的容量(C):4个盘片,100000个柱面,每条磁道400个扇区,每个扇区512个字节
    A .
    81.92GB
    B .
    40.96GB
    C .
    163.84
    D .
    327.68GB
解析: n×t×s×b

其中n为保存数据的总盘面数;t为每面磁道数;s为每道的扇区数;b为每个扇区存储的字节数。而题目中为4个盘片,所以应有8个盘面;容量=2x4x100000x400x512=16384000000字节=163.84G

结对及互评

点评模板:

  • 博客中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 其他

本周结对学习情况

- [20155218](博客链接)
- 结对照片
- 结对学习内容
    - XXXX
    - XXXX
    - ...

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

xxx
xxx

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第十一周 194/2494 2/10 10/56

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:8小时

  • 实际学习时间:10小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted @ 2017-12-03 13:08  徐志瀚  阅读(147)  评论(0编辑  收藏  举报