不卑不亢、双赢思维
不怕吃苦、不怕吃亏
带齐纸币、举例画图
展现自己、不成不归
代码清晰
画图 + 举例
思路
堆 快速 八皇后 生兔子
冒 择 路 希 快 归 堆
虚拟存储器: 页式、段式、和段页式。
页式虚拟储存器中通过: 主存空间和程序空间都机械等分成固定大小的页(页面大小随机器而定,4kb到4MB),按页
顺序编号,用相应的映像表机构来指明该程序的某页是否已经装入主存。如果已经装入主存,则应同时指明其在主存中所处的
位置;如果未装入主存,则取辅寸中调页,并建立起程序空间和实存空间的地址映射关系。这样,程序执行的通过查映像表将
程序地址变换成实时主存(物理地址)再访问主存。
此存储系统具有速度和辅存的容量,提高了存储器系统的性能价格比。cpu直接访问主存,主存与辅存之间的信息交换由操作系统和硬件
来完成,这种把辅存看作室主存的一部分,来扩大主存容量的技术,称为虚拟技术,用虚拟技术设计的存储器,虚拟存储器。
主存和辅存之间实际存在的操作和辅助软、硬件,对应程序设计者来讲是透明的。但虚拟存储器系统程序员来讲基本是不透明的。
只是某些部分(如虚拟地址到主存地址的变换)由于采用硬件实现是透明的。
虚拟地址--- 逻辑地址,是指访问虚拟空间的地址。由于指令中给出的地址码是按虚拟空间来系统编址,因此指令的地址码实际上是
虚拟地址。
物理地址--是指访问主存空间的地址。
为了给用户提供更大的随机存取空间而采用的一种存储技术。它将内存与外存结合使用,好像有一个容器极大的内存存储器,工作速度接近于
主存,每位成本又与辅存接近。
虚拟存储技术是由硬件和操作系统自动实现存储信息调度和管理的。他的工作过程包括6个步骤:1.
中央处理器访问主存的逻辑地址分解成组号a和组内地址b,并且组好a进行地址变换,即将逻辑组号a作为索引,查地址变换表,以确定该组信息是否存放在主内存。
2. 如该组号在主内存,则转而实现4 :如歌该组号不在主内存,则检索主存是否有空闲区,如果没有,便将某个暂时不用的组调出送往辅存,以便将这组信息调入主存。
3. 从辅存读取所要的组,并送到主存空间空闲区,然后将那个空闲区的物理组号a和将这组号a登录在地址变换表中。
4. 从地址变换表读出与逻辑组号a对应的物理组号a。
5. 从物理组号a和组内字节地址b得到物理地址。
6. 根据物理地址从主存中存取必要的信息。
调度方式:
页式调度室将逻辑和物理地址空间都分成固定大小的页。主存安页顺序编号,而每个独立编址的程序空间自己的页号顺序,通过
调度辅存储中程序的各页可以离散装入主存不同的页面位置,并可据表---一一对应检索。
页式调度的优点: 页内零头小,页表对程序员来说是透明的,地址变换快,调度操作简单;
缺点: 是各页不是程序的独立模块,不便于实现程序和数据的保护。
段式调度: 按程序的逻辑结构划分地址空间,段的长度是随便的,并且允许伸长,他的优点是消除了内存的零头,易于实现存储保护,
便于程序动态装配;
缺点: 调入操作复杂。
将两种技术结合起来构成段页式调度综合了段页式的各个优点。缺点:证劵硬件的成本,软件业变的负载。 大型通用计算机系统多数采用
段页是调度。
虚拟存储器地址变换基本上有3中虚拟存储器工作过程式: 全联想变换、直接变换和组联变换。任何逻辑空间页面能够变换到物理空间任何
页面位置的方式称为全联想变换。
替换规则用来去顶替换主存中哪一部分,以便腾空部分主存,存放来自辅存调入的那部分内容。
替换算法:1. 随机算法: 用软件或硬件随机数产生器确定替换的页面
2. 先进先出: 先调入主存的页面先替换
3. 最近最少使用算法: 替换最长时间不用的页面
4. 最优算法: 替换最长时间以后次啊使用的页面。 这是作为衡量其他各种算法优劣的标准。
虚拟存储技术的效率是系统性能评价的重要内容,它与主存容量、页面大小。、命中率,程序局部性和替换算法等因素有关。
例如: pagefile.sys是windows下的一个虚拟内存,他的作用与物理内存基本相似,但它是作为物理内存的“后背力量”而存在的。
2. 一个简单的虚拟寻址系统:
MMU(memory management unit)利用存放在主存中的查讯表动态翻译虚拟地址。
3,虚拟页面分为三个不想交的子集:
(1)未分配的.
(2)缓冲的.
(3)未缓冲的(没有缓冲在主存中的已分配页).
DRAM 比SRAM慢大约10倍,而磁盘比DRAM 慢大于10万多倍,而且从磁盘的第一个扇区读取第一个字节的时间比读这个扇区后面的自己
都要慢大约10万倍。
由于不命中的巨大出发,虚拟页趋于很大,电信的是4~8KB.
一个页表的简单样式:
注:磁盘和存储器之间传送页的活动叫做交换或页面调度.
6. 实际中,不命中中的概率不大,归功于“局部性”
如果工作集的大小超出了物理存储器的大小,会出现一种不幸的状态(thrashing)页面不断换进换出。
7 实际中操作系统为每个进程提供了一个独立的也表,也就是一个独立的虚拟地址空间。
好处:
简化链接: 每个linux 进程都是用下图格式:
文本区总是从 0x8048000 出开始,栈总是从地址0xbffffffff 向下伸展,共享库代码总是低着0x4000000开始操作系统的代码
总是从0xcfffffff开始。
简化共享:
操作系统分配一个适合连续的虚拟存储器页面,可以将他们映射到物理存储器中任意位置的K个任意的物理页面
简化加载:
加载器从不真正从磁盘拷贝任何数据到存储器中,当每个第一场被引用时虚拟存储器将自动把数据从磁盘调入到存储器
存储器映射: 映射一个连续虚拟页面的集合到任意一个文件中的人员一个位置的概念叫做存储器映射。
Unix提供了一个系统调用 : map
9.关于地址翻译
cpu有个控制寄存器:页表机址寄存器,指向当前页表
cpu 硬件执行的步骤:
1. 处理器生成一个虚拟地址,送给MMU
2. MMU生成PTE地址,并从高速缓冲/主存得到它。
3. 高速缓冲/主存想MMU返回PTE
4. MMU构造物理地址,并把它传送给高速缓冲/主存。
页命中情况:
每个cpu产生一个虚拟地址,MMU就必须查阅一个pte,可以在MMU中包括一个关于PTE的小的缓冲,称为TLB(翻译后备缓冲器)
TLB的组成同高速缓冲: 分组,标记位 块索引。
TLB 命中的情况:
假如一个PTE占用4k的大小,对于32位地址空间,需要一个4MB页表驻留在存储器中。
一个二级页表:
一级页表中的每个PTE负责虚拟地址空间中一个4M的组块,每个组块石由1024个连续的页面组成。
可以减少对存储器的要求:
a. 如果一个一级页表的一个PTE是空的,那么相应的二级页表根本不会存在这个一种巨大的潜在节约。
b. 只用一级页表总是主存中,而最常使用的二级页表才会需要缓冲在主存中。