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

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

教材学习内容总结

9.1 物理和虚拟寻址

1.物理地址

计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组,每字节都有一个唯一的物理地址PA。
根据物理地址寻址的是物理寻址。

2.虚拟地址

虚拟存储器被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。使用虚拟寻址时,CPU通过生成一个虚拟地址VA来访问主存,这个虚拟地址在被送到存储器之前先转换成适当的物理地址。

9.3 虚拟存储器作为缓存的工具

虚拟存储器——虚拟页VP,每个虚拟页大小为P=2^平字节

物理存储器——物理页PP,也叫页帧,大小也为P字节。

任意时刻,虚拟页面的集合都被分为三个不相交的子集:


未分配的:VM系统还没分配/创建的页,不占用任何磁盘空间。
缓存的:当前缓存在物理存储器中的已分配页
未缓存的:没有缓存在物理存储器中的已分配页

DRAM缓存的组织结构

这种缓存结构:


1、不命中处罚很大

2、是全相联的——任何虚拟页都可以放在任何的物理页中。

3、替换算法精密

4、总是使用写回而不是直写。

9.4 虚拟存储器作为内存管理的工具

1、操作系统为每个进程提供了一个独立的页表,也就是一个独立的虚拟地址空间。

2、抖个虚拟页面可以映射到同一个共享物理页面上。

3、存储器映射:将一组连续的虚拟页映射到任意一个文件中的任意位置的表示法。

9.5 虚拟存储器作为存内存保护的工具

PTE的三个许可位:


SUP:表示进程是否必须运行在内核模式下才能访问该页
READ:读权限
WRITE:写权限

9.6地址翻译

当页面命中时,CPU动作:

处理器生成虚拟地址,传给MMU

MMU生成PTE地址,并从高速缓存/主存请求得到他

高速缓存/主存向MMU返回PTE

MMU构造物理地址,并把它传给高速缓存/主存

高速缓存/主存返回所请求的数据给处理器。

处理缺页时

处理器生成虚拟地址,传给MMU

MMU生成PTE地址,并从高速缓存/主存请求得到他

高速缓存/主存向MMU返回PTE

PTE中有效位为0,触发缺页异常

确定牺牲页

调入新页面,更新PTE

返回原来的进程,再次执行导致缺页的指令,会命中

9.8 内存映射

映射对象

1.Unix文件系统中的普通文件

2.匿名文件(全都是二进制0)

共享对象

共享对象对于所有把它映射到自己的虚拟存储器进程来说都是可见的

即使映射到多个共享区域,物理存储器中也只需要存放共享对象的一个拷贝。

私有对象

私有对象运用的技术:写时拷贝

在物理存储器中只保存有私有对象的一份拷贝

9.9 动态内存分配

malloc和free函数

系统调用malloc函数,从堆中分配块:


#include <stdlib.h>

void *malloc(size_t size);

成功返回指针,指向大小至少为size字节的存储器块,失败返回NULL

调用free函数来释放已分配的堆块:


#include <stdlib.h>

void free(void *ptr);

分配器的要求和目标

要求

1、处理任意请求序列

2、立即响应请求

3、只使用堆

4、对齐块

5、不修改已分配的块

目标
1、最大化吞吐率(吞吐率:每个单位时间里完成的请求数)

2、最大化存储器利用率——峰值利用率最大化

9.10 垃圾收集

垃圾收集器是一种动态存储分配器,它自动释放程序不再需要的已分配块,这些块被称为垃圾,自动回收堆存储的过程叫做垃圾收集。

Mark&Sweep垃圾收集器

一些相关函数:


int blockMarked(ptr b):如果已经标记了块b,那么就返回true

int blockAllocated(ptr b):如果块b是已分配的,那么久返回ture

void markBlock(ptr b):标记块b

int length(ptr b):返回块b的以字为单位的长度,不包括头部

void unmarkBlock(ptr b):将块b的状态由已标记的改为未标记的

ptr nextBlock(ptr b):返回堆中块b的后继

9.11 C程序中常见的与存储器有关的错误

间接引用坏指针

—scanf错误

读未初始化的内存

一般表现为:假设堆存储器被初始化为0

允许栈缓冲区溢出

常见错误:缓冲区溢出错误

假设指针和它们指向的对象是相同大小的

“action at distance” 在远处起作用

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

  • 问题1:为什么要使用动态存储器分配更好?

  • 问题1解决:因为程序经常到程序实际运行时,才知道某些数据结构的大小,使用动态存储器能够很好适用这个条件

代码托管

本周代码包含实验所用代码和前面一些未上传到码云上的部分代码,改动可能较多

上周考试错题总结

  • 错题1:

下面说法正确的是()

A、CPU通过内存映射I/O向I/O设备发命令

B、DMA传送不需要CPU的干涉

C、SSD是一种基于闪存或Flash的存储技术

D、逻辑磁盘块的逻辑块号可以翻译成一个(盘面,磁道,扇区 )三元组。

正确答案: A B C D
我的答案: B C

原因:A:I/O通道通过执行通道(I/O)程序来控制I/O操作,通道与CPU共享内存

D:控制器上的固件执行一个快速表查找,将一个逻辑块号翻译一个(盘面、磁道、扇区)的三元组,这个三原则唯一地表示了对应的物理扇区。

结对及互评

本周结对学习情况

- [20155307](http://www.cnblogs.com/zhuanyedajiesanshinian/p/7965789.html)
- 结对学习内容
    - 内存映射
    - 动态内存分配

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

学期即将结束,觉得虽然学了很多东西,但这些东西在脑子里很乱,没有条理,我觉得需要经常翻书整理知识脉络,才不会觉得知识特别乱。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 2000行 15篇 200小时
第一周 150/150 1/1 17/17
第二周 70/220 1/2 12/29
第三周 100/320 1/3 10/39
第四周 100/420 1/4 10/59
第五周 80/500 2/6 22/81
第六周 300/800 2/8 30/111
第七周 200/1000 1/9 25/136
第八周 500/1500 2/11 30/166
第九周 500/2000 2/13 36/202
第十周 100/2100 0/13 20/222
第十一周 200/2300 2/15 35/257

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

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

  • 计划学习时间:30小时

  • 实际学习时间:35小时

  • 改进情况:

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

参考资料

posted @ 2017-12-03 22:46  Csj-rup  阅读(189)  评论(0编辑  收藏  举报