信息安全系统设计基础 第15周学习总结

第九章 虚拟存储器

现代操作系统普遍采用虚拟存储器,说白了虚拟存储器是不真实存在的,是操作系统虚拟的,在磁盘上开辟的空间,该虚拟存储器可以在任何磁盘上。

一、基本原理

1、一个系统中的进程是与其他进程共享CPU和主存资源的。

2、虚拟存储器,是硬件异常,硬件地址翻译,主存,磁盘文件和内核软件的完善交互,它为每个进程提供一个大的,一致的,私有地址空间。

通过一个清晰的机制,虚拟存储器提供了三个要重的能力:它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效的利用了主存;它为每个进程提供了一致的地址空间,从而简化了存储器管理;它保护每个进程的地址空间不被其他进程破坏。

3、物理和虚拟寻址

  • 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每字节都有一个惟一的物理地址。第一个字节地址是0,接下来的字节地址为1,...

  • 早期的PC使用物理寻址,而且诸如数字信号处理器,嵌入式微控制器以及Cray超级计算机这样的系统仍然继续使用这种寻址方式。而为通用计算机设计师的现代处理器使用的是虚拟寻址。

  • MMU(memory management unit,存储器管理单元),利用存放在主存中的查询表来动态翻译虚拟地址,该表的内容由OS管理。

4、地址空间

地址空间为非负整数地址的有序集合:{0,1,2,...}

如果地址是连续的,则称为线性地址空间。如果计算机有n位地址总线,在一个带有虚拟存储器的系统中,CPU从一个有N = 2n个地址的地址空间中生成虚拟地址,这个地址称为虚拟地址空间:{0,1,2,...,N-1}

物理地址空间,与物理存储器的M个字节相对应:{0,1,2,...M-1}。M不要求是2的幂。

允许每个数据对象(字节)有多个独立的地址(属性),其中每个地址都选自一个不同的地址空间,就是虚拟地址的基本思想。主存中的每字节都有一个选自虚拟地址空间的虚拟地址,和一个选自物理地址空间的物理地址。

5、虚拟存储器作为缓存的工具

概念上言,虚拟存储器被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。每字节都有一个惟一的虚拟地址,这个惟一的虚拟地址是作为到数组的索引的。磁盘上数组的内容被缓存到主存中。和存储器层次结构中其他缓存一样,磁盘(较低层)上的数据被分成块,这些块作为磁盘和主存(较高层)之间的传输单元。VM系统通过将虚拟存储器分割成称为虚拟页(virtual page,VP)的大小固定的块,来处理这个问题。每个虚拟页的大小为P = 2p字节。类似地,物理存储器被分割成物理页(physical page,PP),大小也为P字节(物理页也被称为页帧,page frame)。
  • 在任意时刻,虚拟页面的集合都分为三个不相交的子集:

      未分配的:VM系统还未分配或创建的页。未分配的块没有任何数据与它们相关联,因此也就不占用任何磁盘空间。
    
      缓冲存:当前缓存在物理存储器中的已分配页。
    
      未缓存的:没有缓存在物理存储器中的已分配页。
    
  • 因为大的不命中处罚和访问第一字节的开销,虚拟开销趋向于很大,典型地是4~8KB。由于大的不命中处罚,DRAM缓存是全相联的。也就是说,任何虚拟存储页都可以放置在任何的物理页中。DRAM缓存总是使用写回(write back)。

二、虚拟存储器

1、虚拟存储器提供了三个重要的能力:

  • 将主存看做是一个高速缓存,缓存最近使用的存放磁盘上的虚拟地址空间的内容,将虚拟地址与整个磁盘进行映射,主存中存储这种映射的页表,如果缺页,调入主存,存储器映射。

  • 为每一个进程提供了一致的地址空间,简化了连接、共享数据以及程序加载。

  • 保护每个进程的地址空间不被其他进程破坏。

2、在内存中,大体分为两种内容,除了给每个进程分配一定的虚拟地址之外,内存中还要维持一个内核虚拟存储器,在内核虚拟存储器中,包括与进程相关的数据机构(页表,任务结构等)、物理存储器和内核代码数据。在虚拟存储器中为每一个进程维持一个任务结构,以链表的形式表示进程的每一个区域。

3、页表将虚拟地址映射为物理地址,每个页表项(PTE),有一个有效位,标识该地址是否在内存的缓存中,还有物理页号或磁盘地址。

  • 页命中,收到虚拟地址时,根据该虚拟地址查找页表,如果有效位有效,则说明在内存中,则利用该地址构造物理地址。

  • 缺页,如果地址不再页表中,则牺牲一条记录,加载进新的地址映射和内容。

4、在实际中,操作系统为每一个进程提供独立的页表,因此也是独立的虚拟地址空间,按需页面调度和独立的虚拟地址空间的结合,可以简化链接(可执行文件独立于物理存储器中代码和数据的最终位置,目标文件知道数据的相对位置,连接的时候,只需加上基地址即可)、简化加载(容易向存储器中加载可执行文件和共享对象文件,不需拷贝任何数据,虚拟存储器会自动按需调入数据页)、简化共享、简化存储器分配(只需虚拟地址连续即可,物理地址可以不连续)、保护工具(在PTE中,可以加许可位,控制对虚拟页面的访问)。

5、地址翻译

得到虚拟地址之后,分为两部分,前部分虚拟页号,后部分偏移地址,根据虚拟页号在页表中找到物理页号,偏移地址不变,直接物理页号和偏移地址构成物理地址。该模块位于cpu内。每次翻译虚拟地址时,都需要到内存访问页表,为了加快速度,在cpu内直接再弄一个缓存表,缓存TBE的内容,称为TLB。

6、翻译整个过程

地址翻译单元从虚拟地址中拿到虚拟页号,检查TLB,看是否存在TPE的缓存,如果有返回,若没有,查询主存的页表,页表可以实现多级,拿到物理页号,如没有产生中断,调入地址,内核重新发送解析指令,最终返回物理地址;得到物理地址之后,将物理地址发给L1缓存,L1没有L2、L3、主存。

7、存储器映射

将一个虚拟存储器区域与一个磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容,一旦一个虚拟页面被初始化了,他就在一个由内核维护的专门的交换文件之间换来换去。这个概念可以扩展到传统的文件系统,这样通过存储器的映射,高效的把数据加载到存储器中。

8、动态存储器分配

堆,分为显示分配(new),隐式分配(垃圾回收)。

9、Malloc原理

根据系统的对齐策略,进行分配,可以重复使用已经释放的地址。由于对齐可能产生内部碎片,由于重复使用,可能产生外部碎片。至于消除碎片的方法有很多,可采取维护空闲列表,不同的放置、分割、合并策略,在分配的时候采取首次适配、下一次适配和最佳适配。

10、垃圾收集:

采用何种方式来辨别垃圾呐,系统采用的是图的方式进行,将存储器视为一张有向图,每个节点是根节点或堆节点,节点表示的一个分配块,如果在一个块中指向另一个块的某个位置,就连接,当存在一条从任意根节点出发并到达堆节点的有向路径时,视为可达,那些不可达的节点就是垃圾节点。再进行回收时,有两个阶段,标记和回收,标记垃圾节点,清除。

11、进程内存分布

参数、返回地址、bp、栈、共享、堆、bss:未初始化数据、data:全局,静态、代码段。

三、参考资料

学习体会

本周内容在操作系统和汇编课程上已经有所学习,页表的概念也不是那么难理解,缺页中断也都有所学习了。虽说是学习过了,但还是有一些原理没有完全的理解,过几天再看看书学习巩固一下。
posted @ 2015-12-12 13:49  20135312吴汉彦  阅读(159)  评论(0编辑  收藏  举报