20145304 《信息安全系统设计基础》第十四周学习总结

20145304 《信息安全系统设计基础》第十四周学习总结

教材学习内容总结

虚拟存储器

  • 一个系统中的进程是与其余进程共享CPU和主存资源的。
  • 为了更加有效地管理存储器而且少出错,现代系统提供了一种对主存的抽象概念,叫作虚拟存储器(VM)。
  • 虚拟存储器的三个重要功能:1)将主存看作是一个存储在磁盘上的地址空间的高速缓存,在主存中只保护活动区域。2)为每一个进程提供了一致的地址空间,从而简化了存储器管理。3)保护了每一个进程的地址空间不被其余进程破坏。

物理和虚拟寻址

  • 物理寻址:主存被组织成一个由M个连续的字节大小的单元组成的数组,依次类推的寻址方式称为物理寻址。
  • 虚拟寻址:CPU生成一个虚拟地址(VA)来访问主存,在被传送到存储器以前先转换成适当的物理地址。地址翻译经过CPU芯片上的存储器管理单元完成。

地址空间

  • 地址空间是一个非负整数地址的有序集合:{0,1,2.....}
  • 线性地址空间:地址空间中的整数是连续的。
  • 虚拟地址空间:CPU生成的虚拟地址。
  • 物理地址空间:与系统中的物理存储器的M个字节相对应。

虚拟存储器做为缓存的工具

VM系统将虚拟存储器分割为虚拟页,虚拟页面的集合分为三个不相交的子集:html

  • 未分配的:系统还未分配的页,未存储数据,不占用磁盘空间。
  • 缓存的:当前缓存在物理存储器中的已分配页
  • 未缓存的:没有缓存在物理存储器中的已分配页。
页表
  • 页表:将虚拟页映射到物理页,就是一个页表条目的数组。
  • PTE:由一个有效位和一个n位地址字段组成的,代表了该虚拟页是否被缓存在DRAM中。
页命中
  • 当CPU读取一个字的时候,地址翻译硬件将虚拟地址做为一个索引来定位PTE,并从存储器中读取它。
缺页
  • DRA缓存不命中称为缺页。在不命中发生时,换入页面的策略称为按需页面调度。

虚拟存储器做为存储器管理的工具

按需页面调度和独立的虚拟地址空间的结合简化了连接和加载、代码和数据共享,以及应用程序的存储器分配。git

  • 简化连接:独立的地址空间容许每一个进程的存储器映像使用相同的基本格式,而无论代码和数据实际存放在物理存储器的何处。
  • 简化加载:虚拟存储器使得容易想存储器中加载可执行文件和共享文件对象。
  • 简化共享:独立地址空间为操做系统提供了一个管理用户进程和操做系统自身之间共享的一致机制。
  • 简化存储器分配:虚拟存储器为向用户进程提供一个简单的分配额外存储器的机制。

虚拟存储器做为存储器保护的工具

  • 经过在PTE上添加一些额外的许可来控制对一个虚拟页面的内容访问。

地址翻译

  • 地址翻译是一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS)之间的映射。
MAP(A)=
A':若是虚拟地址A处的数据在PAS的物理地址A处'
空:若是虚拟地址A处的数据不在物理存储器中
- CPU中的一个控制寄存器页表基址寄存器指向当前页表,n位的虚拟地址包含两个部分:一个p位的虚拟页面偏移(VPO) 和一个(n-p)位的虚拟页号,页表条目中的物理页页号和虚拟地址中的VPO串联起来,就获得了相应的物理地址。
- 在MMU中包括了一个关于PTE的小的缓存,称为翻译后备缓冲器(TLB),其中每一行都保存着一个由单个PTE组成的块。

CPU产生一个虚拟地址。
MMU从TLB中取出相对应的PTE。
MMU将这个虚拟地址翻译成一个物理地址,并将它发送到高速缓存/主存。
高速缓存/主存将所请求的数据字返回给CPU。数组

- 多级页表:用来压缩页表的经常使用方法是使用层次结构的页表。

####存储器映射
Linux经过将一个虚拟存储器区域与一个磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容,这个过程成为存储器映射。具体能够映射的对象有两种:
- Unix文件系统中的普通文件。一个区域能够映射到一个普通磁盘文件的连续部分。
- 匿名文件。匿名文件由内核建立,包含的全是二进制的0。
一旦一个虚拟页面被初始化了,它就在一个由内核维护的专门的交换文件之间换来换去。交换文件也叫交换空间,或交换区域。
#####共享对象
- 一个对象被映射到虚拟存储器的一个区域,要么做为共享对象,要么做为私有对象。
- 一个映射到共享对象的虚拟存储器区域叫作共享区域,相似的,也有虚拟区域。
- 私有对象时使用一种叫作写时拷贝的技术被映射到虚拟存储器中的,相应私有区域的页表条目都被标记为只读,而且区域结构被标记为私有的写时拷贝。

#####execve函数
- 使用execve函数将a.out程序加载到存储器的过程
```
Execve("a.out",NULL,NULL);
```
具体通过的步骤以下:

删除已存在的用户区域。
映射私有区域。
映射共享区域。
设置程序计数器。缓存

#####使用map函数的用户级存储器映射
- Unix进程可使用mmap函数来建立新的虚拟存储器区域,并将对象映射到这些区域当中

void mmap(void start,size_t length,int prot,int flags,int fd,off_t offest);
若成功则为指向映射区域的指针,若出错则MAP_FAILD(-1)
`- munmap函数删除虚拟存储器的区域。 ``` int munmap(void *start,size_t length); 若成功则返回0,若失败则返回-1.安全

动态存储器分配

动态存储器分配器

当运行时须要额外虚拟存储器时,使用动态存储器分配器维护一个进程的虚拟存储器区域。分配器有两种风格。函数

  • 显示分配器:要求应用显式地释听任何已经分配的块。
  • 隐式分配器:要求分配器检测一个已分配块什么时候再也不被程序所使用,就释放这个块。也叫作垃圾收集器。
malloc和free函数
  • C标准库提供了一个称为malloc程序包的显式分配器,程序经过调用malloc函数来从标准堆中分配块。
void *malloc(size_t size);
                若成功则为指针,若出错则为NULL。
  • 经过调用free函数来释放已分配的块。
void free(void *ptr);
分配器的目标和要求
  • 显式分配器工做的约束条件:
处理任意请求序列。
当即响应请求。
只使用堆。
对齐块(对齐要求)。
不修改已分配的额块。
  • 理想分配器的目标:
最大化吞吐率:吞吐率定义为每一个单位时间里完成的请求数。
最大化存储器利用率:最有用的标准是峰值利用率。

垃圾处理

  • 垃圾收集器是一种动态存储分配器。,自动释放程序已经再也不须要的已分配快(垃圾)。
垃圾收集器的基本知识
  • 垃圾收集器将存储器视为一张有向可达图,图的节点被分配为一组根节点和一组堆节点。当存在一条从任意根节点出发到并到达P的有向路径时,就称节点P是可达的。
Mark&Sweep垃圾收集器
  • Mark&Sweep垃圾收集器由标记阶段和清除阶段组成,标记阶段标记出根节点全部可达的和已分配的后继,清除阶段释放每一个未被标记的已分配块。
  • 在对Mark&Sweep的描述中使用下列函数
ptr isPtr(ptr p):若是p指向一个已分配块中的某个字,那么就返回一个指向这个块起始位置的指针b,不然返回NULL。
int blockMarked(ptr b):若是已经标记了块b,就返回true。
int blockAllocated(ptr b):若是块b是已分配的,就返回true。
void markBlock(ptr b):标记块b。
int length(ptr b):返回块b的以字为单位的长度(不包括头部)。
void unmarkBlock(ptr b):将块b的状态由已标记的改成未标记的。
ptr nextBlock(ptr b):返回堆中块b的后继。

C语言中常见的与存储器有关的错误

  • 间接引用坏指针。
  • 读未初始化的存储器。
  • 容许栈缓冲区溢出。
  • 假设指针和指向他们的对象大小是相同的。
  • 形成错位错误。
  • 引用指针,而不是他所指向的对象。
  • 误解指针运算。
  • 引用不存在的变量。
  • 引用空闲堆块中的数据。
  • 引发存储器泄露。

代码托管连接

https://git.oschina.net/20145304/computer-systems工具

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第五周 30/60 1/5 10/32
第七周 0/160 1/7 8/48
第八周 0/160 1/8 5/53
第九周 157/317 1/9 7/60
第十周 647/964 1/10 6/66
第十一周 1086/2050 1/11 9/75
第十二周 10/2060 7/18 10/85
第十三周 473/2533 1/19 10/85
第十四周 /2533 220 10/95

参考资料

相关文章
相关标签/搜索