【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执行操作系统的中断处理程序,根据页表中给出的外存地址将该页调入内存,并修改页表。
相关推荐
蒸蒸yyyyzwd33 分钟前
学习笔记 八股手撕
笔记·学习
揣一尾游鱼yu2 小时前
Spring上(IOC)笔记
java·笔记·spring·ioc
小李不想当小白3 小时前
BKP备份寄存器与RTC实时时钟(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
瑞码空间5 小时前
JSP与Servlet核心开发与CRUD实战笔记
java·笔记·servlet·jsp
La Pulga6 小时前
【FreeRTOS源码学习笔记】链表的实现
数据结构·笔记·stm32·mcu·链表·嵌入式·freertos
wuyoutrans8 小时前
以色列专利OA答复翻译,重点要避开哪些坑?
笔记
宝绿特塑业再生科技8 小时前
HDPE再生颗粒户外家具表面粉化机理与改性技术全解析
笔记·户外家具·再生塑料·塑木桌椅
凉、介9 小时前
深入理解 ARMv7-A | Generic Timer
笔记·学习·嵌入式·arm
n 55!w !10810 小时前
MySQL笔记整理2
数据库·笔记·mysql
La Pulga10 小时前
【FreeRTOS源码学习笔记】任务创建
笔记·stm32·mcu·学习·嵌入式·freertos·实时操作系统