【OS笔记25】:页的共享和保护、页式虚拟存储管理

文章目录

1. 页的共享和保护

1. 页的共享

当若干进程运行相同的程序时(例如多个用户同时运行一个编辑器程序),共享代码变得非常重要。

  • 实现方法 :一种有效的方法是使相关进程在逻辑空间中的页面,通过各自的页表指向相同的内存物理页面。这样可以避免在内存中出现同一页面的两个副本,大大节省了内存空间。
  • 共享原则 :通常,只有只读页面(如纯代码段)可以共享,而数据页面往往是进程私有的,不能共享。
2. 存储保护

在分页管理机制下,存储保护通过两种方式实现:

  • 地址越界保护

    • 与分区管理中使用上、下界寄存器不同,分页管理中的越界保护是由地址变换机构自动完成的。
    • 在地址转换时,硬件会根据页表长度寄存器 (PTLR) 的值,来判断逻辑地址中的页号是否超出了页表长度。如果页号大于或等于页表长度,则产生越界中断。
  • 存取控制保护

    • 可以在页表项 中增加相应的保护位来实现,例如设置"只读"、"可读写"等权限。每次访问时,硬件会检查操作类型是否与保护位设定的权限相符。

静态分页式存储管理的优缺点

优点:
  1. 作业不必作为整体装入内存连续区域:实现了离散分配,解决了外部碎片问题。
  2. 便于多道程序设计,提高资源利用率:内存管理更灵活,可以容纳更多进程并发执行。
  3. 页面大小和块的大小相等,便于主存管理:管理和分配都以固定大小的块为单位,非常规整和简单。
缺点:
  1. 地址转换增加系统开销:每次访存都需要查表,增加了时间开销(虽可通过快表缓解)。
  2. 仍存在内存碎片(内部碎片):一个进程的最后一页往往不能被充分使用,造成空间浪费。
  3. 页表占用存储空间:对于地址空间大的进程,页表本身可能会非常庞大,占用可观的内存。
  4. 内存的扩充问题:作业的地址空间受内存容量限制,无法运行超过物理内存大小的程序。
  5. 共享困难:页由系统划分,对用户透明,用户很难根据逻辑意义(如函数、变量)实现共享。

2. 页式虚拟存储管理

为了解决静态分页中作业大小受物理内存限制的问题,在分页管理的基础上引入了虚拟存储技术。

  • 基本思想 :在程序运行时,仅将部分页面装入内存 。在执行过程中,若所需页面不在内存,则发生缺页中断 (Page Fault),系统根据一定的算法,将所需页面调入内存。

与基本分页管理相比,需要重点解决以下新问题:

  • 如何发现缺页情况,发现后如何处理?
  • 调入时若内存中无空闲页,如何淘汰(置换)内存中的页面?
请求页式动态方法
  • 核心思想
    • 在作业或进程开始执行之前,都不把作业的程序段和数据段一次性全部转入内存,而只装入被认为是经常反复执行和调用的工作区部分。
    • 其他部分则在执行过程中动态装入
程序的局部性原理

请求页式之所以高效,其理论基础是程序的局部性原理

  • 定义:指程序在执行过程中的一个较短时间内,所执行的指令地址或数据地址分别局限于一定的存储区域中。
  • 分类
    • 时间局部性:如果一个存储项被访问,那么在不久的将来它很可能被再次访问(例如:循环中的指令和数据)。
    • 空间局部性:如果一个存储项被访问,那么与它地址相邻的项也很可能在不久的将来被访问(例如:顺序执行的代码、数组的遍历)。
请求页式的具体方法
  1. 划分:划分内存和进程的逻辑空间为大小相等的页面和页(同基本分页)。
  2. 部分加载:只把部分页加载入内存。
  3. 执行与中断 :执行时,检查需要的页面在不在内存内?
    • 如果在,则正常执行。
    • 如果不在 (发生缺页),则执行缺页中断处理程序
      1. 把所缺页面调入内存。
      2. (调入前需检查是否有足够的空闲内存空间;如果没有,需要调出某个页面到外存,直至空闲空间足够。)
  4. 回收:进程结束后回收其占用的内存。
1. 数据结构的扩充:页表的扩充

为了支持虚拟存储,页表项中需要增加几个关键的标志位。

页号 页面号 中断位 (P ) 外存地址 修改位 (M)
  • 中断位 :也称"状态位"或"有效位"。

    • 1: 表示该页在内存中,地址转换有效。
    • 0: 表示该页在外存中,访问该页会产生缺页中断。
  • 修改位

    • 用于标记该页面调入内存后是否被修改过。
    • 当需要淘汰该页时,如果修改位为1,表示需要将其内容写回外存 ;如果为0,则无需写回,直接丢弃即可。
  • 外存地址:指出该页在外存(如磁盘)上的存放位置。

2. 地址重定位(地址转换过程)
  1. 硬件访问页表时,首先检查页表项中的中断位
  2. 若中断位为 1 :表明该页在内存中,则使用页表中对应的页面号,正常完成地址转换。
  3. 若中断位为 0 :表明该页不在内存中,则产生硬件中断(缺页中断) 。CPU执行操作系统的中断处理程序,根据页表中给出的外存地址将该页调入内存,并修改页表。
相关推荐
于越海1 天前
材料电子理论核心四个基本模型的python编程学习
开发语言·笔记·python·学习·学习方法
我命由我123451 天前
开发中的英语积累 P26:Recursive、Parser、Pair、Matrix、Inset、Appropriate
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
北岛寒沫1 天前
北京大学国家发展研究院 经济学原理课程笔记(第二十三课 货币供应与通货膨胀)
经验分享·笔记·学习
wdfk_prog1 天前
[Linux]学习笔记系列 -- [fs][proc]
linux·笔记·学习
hetao17338371 天前
2026-01-04~06 hetao1733837 的刷题笔记
c++·笔记·算法
民乐团扒谱机1 天前
【微实验】数模美赛备赛MATLAB实战:一文速通各种“马尔可夫”(Markov Model)
开发语言·人工智能·笔记·matlab·数据挖掘·马尔科夫链·线性系统
宵时待雨1 天前
数据结构(初阶)笔记归纳1:复杂度讲解
c语言·数据结构·笔记
今儿敲了吗1 天前
第二章 C++对C的核心拓展
c++·笔记
weixin_433179331 天前
《旋元佑进阶文法》之 句型
笔记·英语语法
麻雀无能为力1 天前
VAE(变分自编码器 Variational Auto-Encoder)学习笔记
笔记·学习