20155331 2017-2018 1 《信息安全系统设计基础》第11周学习总结
20155331 2017-2018 1 《信息安全系统设计基础》第11周学习总结
教材学习内容总结
虚拟存储器
一、作为缓存的工具
二、作为存储器管理的工具
三、作为存储器保护的工具
计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每宇节都有一个唯一的物理地址 。第一个字节的地址为 0,接下来的字节地址为 1,再下一个为 2, CPU 访问存储器的最自然的方式就是使用物理地址。我们把这种方式称为物理寻址 。
早期的 PC 使用物理寻址,现代处理器使用的是一种称为虚拟寻址的寻址形式。
1.虚拟存储器的作用:
它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,高效的使用了主存
它为每个进程提供了一致的地址空间,从而简化了存储器管理
它保护了每个进程的地址空间不被其他进程破坏
(1)物理寻址
•主存被组织成一个由M个连续的字节大小的单元组成的数组,依次类推的寻址方式称为物理寻址。
(2)虚拟寻址
•CPU生成一个虚拟地址来访问主存,在被传送到存储器之前先转换成适当的物理地址。地址翻译通过CPU芯片上的存储器管理单元完成。
2.地址空间
地址空间是一个非负整数地址的有序集合:{0,1,2,……}
(1)线性地址空间
地址空间中的整数是连续的。
(2)虚拟地址空间
•CPU从一个有 N=2^n 个地址的地址空间中生成虚拟地址,这个地址空间成为称为虚拟地址空间。
(3)物理地址空间
•与系统中的物理存储器的M个字节相对应。
(4)地址空间的大小
虚拟存储器——虚拟页VP,每个虚拟页大小为P=2^平字节
物理存储器——物理页PP,也叫页帧,大小也为P字节。
•任意时刻,虚拟页面的集合都被分为三个不相交的子集:
•未分配的:VM系统还没分配/创建的页,不占用任何磁盘空间。
•缓存的:当前缓存在物理存储器中的已分配页
•未缓存的:没有缓存在物理存储器中的已分配页
DRAM 缓存的组织结构
SRAM 缓存位于 CPU 和主存之间的 Ll、 L2 和 L3 高速缓存。
DRAM 缓存来表示虚拟存储器系统的缓存,它在主存中缓存虚拟页。
在存储层次结构中, DRAM 缓存的位置对它的组织结构有很大的影响。
DRAM 缓存中的不命中比起 SRAM 缓存中的不命中要昂贵得多,因为 DRAM 缓存不命中要由磁盘来服务,而 SRAM 缓存不命中通常是由基于 DRAM 的主存来服务的。
DRAM 缓存的组织结构完全是由巨大的不命中开销驱动的。
页表
页表:是一个数据结构,存放在物理存储器中,将虚拟页映射到物理页,就是一个页表条目的数组。
•页表就是一个页表条目PTE的数组。
PTE:由一个有效位和一个n位地址字段组成的,表明了该虚拟页是否被缓存在DRAM中。
•页表的组成:有效位+n位地址字段
•如果设置了有效位:地址字段表示DRAM中相应的物理页的起始位置,这个物理页中缓存了该虚拟页。
•如果没有设置有效位: •空地址:表示该虚拟页未被分配
•不是空地址:这个地址指向该虚拟页在磁盘上的起始位置。
缺页
•缺页:就是指DRAM缓存不命中。
•缺页异常:会调用内核中的缺页异常处理程序,选择一个牺牲页。
•页:虚拟存储器的习惯说法,就是块
•交换=页面调度:磁盘和存储器之间传送页的活动
•按需页面调度:直到发生不命中时才换入页面的策略,所有现代系统都使用这个。
地址翻译
当页面命中时,CPU硬件执行步骤
•处理器生成虚拟地址,传给MMU
•MMU生成PTE地址,并从高速缓存/主存请求得到他
•高速缓存/主存向MMU返回PTE
•MMU构造物理地址,并把它传给高速缓存/主存
•高速缓存/主存返回所请求的数据给处理器。
处理缺页时,CPU硬件执行步骤
•处理器生成虚拟地址,传给MMU
•MMU生成PTE地址,并从高速缓存/主存请求得到他
•高速缓存/主存向MMU返回PTE
•PTE中有效位为0,触发缺页异常
•确定牺牲页
•调入新页面,更新PTE
•返回原来的进程,再次执行导致缺页的指令,会命中
多级页表
用来压缩页表的常用方法是使用层次结构的页表。
一个两级页表层次结构。 注意地址是从上往下增加的
这种方法从两个方面减少了存储器要求。
1.如果一级页表中的一个 PTE 是空的,那么相应的二级页表就根本不会存在,这代表着一种巨大的潜在节约,因为对于一个典型的程序, 4GB 的虚拟地址空间的大部分都将是未分配的。
2.只有一级页表才需要总是在主存中:虚拟存储器系统可以在需要时创建、页面调入或调出二级页表,这就减少了主存的压力:只有最经常使用的二级页表才需要缓存在主存中。
带多级页表的地址翻译并不比单级页表慢很多。
Linux 虚拟存储器系统
一个虚拟存储器系统要求硬件和内核软件之间的紧密协作。
内核虚拟存储器包含内核中的代码和数据结构。内核虚拟存储器的某些区域被映射到所有进程共享的物理页面。
内核虚拟存储器的其他区域包含每个进程都不相同的数据。
fork 函数
当 fork 函数被当前进程调用时,内核为新进程创建各种数据结构,并分配给它一个唯一的 PID。为了给这个新进程创建虚拟存储器,它创建了当前进程的 mm_struct、区域结构和页表的原样拷贝。它将两个进程中的每个页面都标记为只读,并将两个进程中的每个区域结构都标记为私有的写时拷贝。
当 fork 在新进程中返回时,新进程现在的虚拟存储器刚好和调用 fork时存在的虚拟存储器相同。当这两个进程中的任一个后来进行写操作时,写时拷贝机制就会创建新页面,因此,也就为每个进程保持了私有地址空间的抽象概念。
execve 函数
execve 函数在当前进程中加载并运行包含在可执行目标文件 a.out 中的程序,用 a.out 程序有效地替代了当前程序。加载并运行 a.out 需要以下几个步骤:
•删除已存在的用户区域。
•映射私有区域。
•映射共享区域。
•设置程序计数器 (PC)。
动态存储器分配
分配器将堆视为一组不同大小的块的 集合来维护。每个块就是一个连续的虚拟存储器片,要么是已分配的,要么是空闲的。己分配的 块显式地保留为供应用程序使用。空闲块可用来分配。空闲块保持空闲,直到它显式地被应用所分配。一个已分配的块保持已分配状态,直到它被释放,这种释放要么是应用程序显式执行的,要么是存储器分配器自身隐式执行的。
垃圾收集
应用通过调用 malloc 和 free 来分配和释放堆块。应用要负责释放所有不再需要的已分配块。
垃圾收集器 是一种动态存储分配器,它自动释放程序不再需要的己分配 块。这些块称为垃圾 。
自动回收堆存储的过程叫做垃圾收集。在一个支持垃圾收集的系统中,应用显式分配堆块,但是从不显示地释放它们。在 C 程序的上下文中,应用调用 malloc,但是从不调用 free。反之,垃圾收集器定期识别垃圾块,并相应地调用 free,将这些块放回到空闲链表中。
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的后继。
教材学习中的问题和解决过程
问题:虚拟存储器有哪些特征?其中最本质的特征是什么?
答案:操作系统四个特征:并发,共享,虚拟和异步。其中最主要的特征是并发。 虚拟存储器特征:1)离散性2)多次性3)对换性 4)虚拟性其中最本质的特征是离散性
上周错题总结
下面说法正确的是(ACEF)
A .
Linux内核使用的file table 所有的进程共享的。
B .
不同进程打开同一个文件的文件描述符必须一样。
C .
使用dup2 把标准输入重定向到描述符7 dup2(7,0)
D .
使用dup2 把标准输入重定向到描述符7 dup2(0,7)
E .
ls > foo.txt 是输出重定向
F .
类型为FILE的流是对文件描述符和流缓冲区的抽象。
Unix/Linux中,对于代码fd=open("foo",O_WRONLY,0766),umask=022,下面说法正确的是(AC)
A .
进程对foo是只写的
B .
同组成员能写foo
C .
使用者可以执行foo
D .
任何人都可以写foo
下面代码的输出是(D)
Image 6.png
A .
fd2 = 0
B .
fd2 = 1
C .
fd2 = 2
D .
fd2 = 3
E .
fd2 = 4
F .
不确定
关于open(2),下面说法正确的是(AC )
A .
flag 参数中O_RDONLY,O_WRONLY,O_RDWR至少要有一个
B .
O_RDONLY|O_WRONLY == O_RDWR
C .
fd=open("foo.txt",O_WRONLY|O_APPEND,0),调用write(fd,buff,n)写入foo.txt的数据不会破坏已有数据。
D .
fd=open("foo.txt",O_WRONLY|O_APPEND,0644),必将导致其他人不能写foo.txt
其他(感悟、思考等,可选)
无