【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执行操作系统的中断处理程序,根据页表中给出的外存地址将该页调入内存,并修改页表。
相关推荐
AI视觉网奇6 分钟前
ue 角色驱动衣服 绑定衣服
笔记·学习·ue5
三水不滴44 分钟前
计网ping原理
经验分享·笔记·计算机网络
prog_61031 小时前
【笔记】思路分享:各种大模型免费当agent后台
笔记·大语言模型·agent·cursor
凯尔萨厮1 小时前
Maven(Windows下载安装)
笔记·maven
wdfk_prog1 小时前
[Linux]学习笔记系列 -- [drivers][input]serio
linux·笔记·学习
菩提小狗2 小时前
小迪安全2023-2024|第5天:基础入门-反弹SHELL&不回显带外&正反向连接&防火墙出入站&文件下载_笔记|web安全|渗透测试|
笔记·安全·web安全
_OP_CHEN3 小时前
【Linux系统编程】(二十八)深入 ELF 文件原理:从目标文件到程序加载的完整揭秘
linux·操作系统·编译·c/c++·目标文件·elf文件
Wentao Sun3 小时前
致敬软件创业者2026
笔记·程序人生
深蓝海拓4 小时前
PySide6,QCoreApplication::aboutToQuit与QtQore.qAddPostRoutine:退出前后的清理工作
笔记·python·qt·学习·pyqt
酒鼎4 小时前
学习笔记(3)HTML5新特性(第2章)
笔记·学习·html5