优点 缺点
分页管理 内存利用率高,不会产生外部碎片,只会有少量的页内碎片 不方便按照逻辑模块实现信息的共享和保护。
分段管理 很方便按照逻辑模块实现信息的共享和保护。 如果段长过大,为其分配很大的连续空间会很不方便,另外,段式管理会产生外部碎片。

 

段式地址:段号+段内地址

页式地址:页号+页内偏移量

  • 段号位数决定了每个进程最多可以分几个段
  • 页号位数决定了每个段最多有多少页
  • 页内偏移量决定了页面大小、内存块大小是多少

段表:存储界限、基地址

传统存储管理方式:

一次性:作业必须一次性全部装入内存后才能开始运行。这会造成两个问题(1)作业很大不能全部装入内存,导致大作业无法运行。(2)当大量作业要求运行时,由于内存无法容纳所有作业,因此只有少量作业能运行,导致多道程序并发度下降

驻留性:一旦作业被装入内存,就会一直驻留在内存中,直到作业运行结束。浪费了内存的资源。

局部性原理(principle of locality)

指程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域。表现为:

  • 时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内;
  • 空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的数据都集中在一个较小区域内。

虚拟存储器是具有请求调入功能和置换功能,能仅把进程的一部分装入内存便 可运行进程的存储管理系统,它能从逻辑上对内存容量进行扩充的一种虚拟的存储器系统。

Demand Paging 请求调页:

页表项:

物理块号 状态位P 访问字段A 修改位M 外存地址
表示该页是否已被调入内存,供程序访问时参考。 可记录最近被访问的次数、上次访问的时间,供置换算法选择换出页面时参考。 页面在调入内存后是否修改过 页面在外存中存放的位置

 

Page fault 缺页中断

页面不在内存时,产生缺页中断,缺页进程阻塞,进入阻塞队列,调页完成后再将其唤醒,放回就绪队列

内存有空闲块 内存没有空闲块
为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项。 由页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存。未修改过的不用写回。

换入换出外存需要进行慢速I/O操作,换入内存的页面表项会直接加入快表。

 

缺页率 page fault rate = p ~[0,1]

有效访存时间 effective memory-access time = (1 – p) x physical-memory-access + p x ( page-fault-overhead + swap-page-out + swap-page-in + restart-overhead )

Three major components of the page-fault service time

  • Service the page-fault interrupt(缺页中断服务时间)
  • Read in the page(将缺页读入时间)
  • Restart the process(重新启动进程时间)

 

写时拷贝 Copy-on-Write

父进程和子进程共享一个页面,在需要进行写操作时复制这个共享页,而不是直接在父进程的页面上进行修改。eg: Windows、Linux、Solaris

 

页面置换算法

最佳置换算法 OPT 

每次选择淘汰的页面将是以后永不使用,或是在最长时间内不再被访问的页面,这样可以保证最低的缺页率。

需要知道之后要依次访问的页面序列,因此,最佳置换算法是无法实现的。

 

先进先出置换算法 FIFO

每次选择淘汰的页面是最早进入内存的页面

Belady异常:当为进程分配物理块数增大时,缺页次数不减反增的异常现象。

 

最近最少使用算法 LRU

每次淘汰的页面是最近最久未使用的页面

实现方法:

  • Conter 在页面条目上,每次引用时更新/复制时钟时间。
  • Stack 按访问顺序入栈,长时间未访问的在栈低,将栈低的置换出去。

由于需要记录页面使用时间,硬件开销太大

 

近似LRU算法 LRUA

reference bit 引用位初始为0,当被访问时,置1。

1.附加引用位算法

被访问时左边最高位置1,定期右移并且最高位补0,于是寄存器数值最小的是最久未使用页面。

2.第二次机会算法/Clock算法

如果访问位为0,表示很长时间未被使用,访问位为1,表示最近访问过。

需要选择更换时,如果为0,则换出;若不为0,则置0,往后检查。

当全部为1时,则依次置0,再进行第二轮扫描。

3.增强二次机会算法 Enhanced Second-Chance

使用引用位和修改位:引用过或修改过置成1

  • (Reference bit, modified bit) :
  • (0,0): best page to replace
  • (0,1): not quite good for replacement
  • (1,0): will be used soon
  • (1,1): worst page to replace.
  • 淘汰次序:(0,0)->(0,1)->(1,0)->(1,1)

 

基于计数的页置换 Counting Algorithm

最不经常使用算法 LFU

经常使用算法 MFU 基于这样一种观点,即计数最小的页面可能是刚刚引入的,尚未使用。

 

页面缓冲算法

通过被置换页面的缓冲,有机会找回刚被置换的页面

  • 被置换页面的选择和处理:用FIFO算法选择被置换页,把被置换的页面放入两个链表之一 。即:如果页面未被修改,就将其归入到空闲页面链表的末尾,否则将其归入到已修改页面链表
  • 需要调入新的页面时,将新页面内容读入到空闲页面链表的第一项所指的页面,然后将第 一项删除。
  • 空闲页面和已修改页面,仍停留在内存中一段时间,如果这些页面被再次访问,这些页面 还在内存中。
  • 当已修改页面达到一定数目后,再将它们一起调出到外存,然后将它们归入空闲页面链表 。
  • VAX/VMS系统使用 , Windows、Linux页面置换算法是基于页面缓冲算法。

 

帧分配 Allocation of Frames

Fixed Allocation 固定分配

Equal allocation 平均分配算法 :把帧平均分配给每个进程

Proportional allocation 按比例分配算法 :Allocate according to the size of process

Priority Allocation 优先级分配

置换策略:

  • Global replacement(全局置换) – process selects a replacement frame from the set of all frames; one process can take a frame from another
  • Local replacement (局部置换)– each process selects from only its own set of allocated frames

分配策略:

  • 固定分配
  • 可变分配

组合成三种策略:

  • 固定分配局部置换策略
  • 可变分配全局置换策略
  • 可变分配局部置换

 

系统颠簸/抖动

a process is busy swapping pages in and out 系统忙于换页

原因:进程频繁访问的页面数目高于可用的物理块数。

Working-set Model 工作集模型:

  • working set (WS)工作集:The set of pages in the most recent Δ page references
  • Δ = working-set window(工作集窗口) = a fixed number of page references Example: 10,000 instruction
  • WSSi (working set size of Process Pi 工作集大小) = total number of pages referenced in the most recentΔ (varies in time)
    • if Δ too small will not encompass entire locality.
    • if Δ too large will encompass several localities.
    • if Δ = ∞ ->will encompass entire program.
  • D = Σ WSSi = total demand frames; m = total available frames
  • if D > m -> Thrashing
  • Policy if D > m, then suspend one of the processes

统计缺页频率 Page-fault frequency PFF


0 条评论

发表评论

Avatar placeholder