计算机操作系统 - 内存管理

目录

  • 计算机操作系统 - 内存管理
    • 虚拟内存
    • 分页系统地址映射
    • 页面置换算法
      • 1. 最佳
      • 2. 最近最久未使用
      • 3. 最近未使用
      • 4. 先进先出
      • 5. 第二次机会算法
      • 6. 时钟
    • 分段
    • 段页式
    • 分页与分段的比较

虚拟内存

虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。

为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程序引用到不在物理内存中的页时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。

从上面的描述中可以看出,虚拟内存允许程序不用将地址空间中的每一页都映射到物理内存,也就是说一个程序不需要全部调入内存就可以运行,这使得有限的内存运行大程序成为可能。例如有一台计算机可以产生 16 位地址,那么一个程序的地址空间范围是 0~64K。该计算机只有 32KB 的物理内存,虚拟内存技术允许该计算机运行一个 64K 大小的程序。

分页系统地址映射

内存管理单元(NMU)管理着地址空间和物理内存的转换,其中的页表(Page table)存储着页(程序地址空间)和页框(物理内存空间)的映射表。

一个虚拟地址分成两个部分,一部分存储页面号,一部分存储偏移量。

下面的页表存放着 16 个页,这 16 个页需要用 4 个比特位来进行索引定位。例如对于虚拟地址(0010 000000000100),前 4 位是存储页面号 2 ,读取表项内容为 (110 1),页表项最后一位表示是否存在与内存中,1 表示存在。后 12 位存储偏移量。这个页面对应的页框地址为(110 000000000100)。

页面置换算法

在程序运行过程中,如果要访问的页面不在内存中,就发生缺页中断从而将该页调入内存中。此时如果内存已无空闲空间,系统必须从内存中调出一个页面到磁盘对换区中来腾出空间。

页面置换算法和缓存淘汰策略类似,可以将内存看成磁盘的缓存。在缓存系统中,缓存的大小有限,当有新的缓存到达时,需要淘汰一部分已经存在的缓存,这样才有空间存放新的缓存数据。

页面置换算法的主要目标是是页面置换频率最低(也可以说缺页率最低)。

1. 最佳

OPT, Optimal replacement algorithm

所选择的被换出的页面将是最长时间内不再被访问,通常可以保证获得最低的缺页率。

是一种理论上的算法,因为无法知道一个页面多长时间不再被访问。

举例:一个系统为某进程分配了三个物理块,并有如下页面引用序列:

7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

开始运行时,先将 7, 0, 1 三个页面装入内存。当进程要访问页面 2 时,产生缺页中断,会将页面 7 换出,因为页面 7 再次被访问的时间最长。

2. 最近最久未使用

LRU, Least Recently Used

虽然无法知道将来要使用的页面情况,但是可以知道过去使用页面的情况。LRU 将最近最久未使用的页面换出。

为了实现 LRU,需要在内存中维护一个所有页面的链表。当一个页面被访问时,将这个页面移到链表表头。这样就能保证链表表尾的页面是最近最久未访问的。

因为每次访问都需要更新链表,因此这种方式实现的 LRU 代价很高。

4,7,0,7,1,0,1,2,1,2,6

3. 最近未使用

NRU, Not Recently Used

每个页面都有两个状态位:R 与 M,当页面被访问时设置页面的 R=1,当页面被修改时设置 M=1。其中 R 位会定时被清零。可以将页面分成以下四类:

  • R=0,M=0
  • R=0,M=1
  • R=1,M=0
  • R=1,M=1

当发生缺页中断时,NRU 算法随机地从类编号最小的非空类中挑选一个页面将它换出。

NRU 优先换出已经被修改的脏页面(R=0,M=1),而不是被频繁使用的干净页面(R=1,M=0)。

4. 先进先出

FIFO, First In First Out

选择换出的页面是最先进入的页面。

该算法会将那些经常被访问的页面换出,导致缺页率升高。

5. 第二次机会算法

FIFO 算法可能会把经常使用的页面置换出去,为了避免这一问题,对该算法做一个简单的修改:

当页面被访问 (读或写) 时设置该页面的 R 位为 1。需要替换的时候,检查最老页面的 R 位。如果 R 位是 0,那么这个页面既老又没有被使用,可以立刻置换掉;如果是 1,就将 R 位清 0,并把该页面放到链表的尾端,修改它的装入时间使它就像刚装入的一样,然后继续从链表的头部开始搜索。

6. 时钟

Clock

第二次机会算法需要在链表中移动页面,降低了效率。时钟算法使用环形链表将页面连接起来,再使用一个指针指向最老的页面。

分段

虚拟内存采用的是分页技术,也就是将地址空间划分成固定大小的页,每一页再与内存进行映射。

图为一个编译器在编译过程中建立的多个表,有 4 个表是动态增长的,如果使用分页系统的一维地址空间,动态增长的特点会导致覆盖问题的出现。

分段的做法是把每个表分成段,一个段构成一个独立的地址空间。每个段的长度可以不同,并且可以动态增长。

段页式

程序的地址空间划分成多个拥有独立地址空间的段,每个段上的地址空间划分成大小相同的页。这样既拥有分段系统的共享和保护,又拥有分页系统的虚拟内存功能。

分页与分段的比较

  • 对程序员的透明性:分页透明,但是分段需要程序员显式划分每个段。

  • 地址空间的维度:分页是一维地址空间,分段是二维的。

  • 大小是否可以改变:页的大小不可变,段的大小可以动态改变。

  • 出现的原因:分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护。

计算机操作系统 - 内存管理相关推荐

  1. 五分钟带你了解 计算机操作系统——内存管理(万字详解·图文)

    目录 无存储器抽象 一种存储器抽象:地址空间 地址空间的概念 交换技术 空闲内存管理 使用位图的存储管理 使用链表的存储管理 虚拟内存 分页 页表 加速分页过程 对大内存的页表 页面置换算法 最优页面 ...

  2. 【计算机操作系统-内存管理】局部性原理是什么?

    要想更好地理解虚拟内存技术,必须要了解计算机中著名的局部性原理. 早在1968年的时候,就有人指出我们的程序在执行的时候往往呈现局部性规律,也就是说在某个较短的时间段内,程序执行局限于某一小部分,程序 ...

  3. 操作系统内存管理-Linux版

    引言 操作系统内存管理:总的来说,操作系统内存管理包括物理内存管理和虚拟内存管理. 物理内存管理: 包括程序装入等概念.交换技术.连续分配管理方式和非连续分配管理方式(分页.分段.段页式). 虚拟内存 ...

  4. 操作系统内存管理——分区、页式、段式管理

    操作系统内存管理--分区.页式.段式管理 标签: 内存管理操作系统数据结构算法 2010-07-05 11:26 20805人阅读 评论(5) 收藏 举报 分类: 操作系统(4) 版权声明:本文为博主 ...

  5. php是硬件还是软件,计算机操作系统是管理计算机硬件和软件的什么

    计算机操作系统是管理计算机硬件和软件的计算机程序:操作系统提供一个让用户与系统交互的操作界面,它的主要功能有进程管理.存储管理.设备管理.文件管理和作业管理. 本文操作环境:Windows7系统,De ...

  6. 操作系统内存管理及虚拟内存技术

    一.内存管理 操作系统的内存管理主要负责内存的分配与回收(malloc 函数:申请内存,free 函数:释放内存),另外地址转换也就是将逻辑地址转换成相应的物理地址等功能也是操作系统内存管理做的事情. ...

  7. 内存与操作系统内存管理

    内存与操作系统内存管理 文章目录 内存与操作系统内存管理 一.内存的基础知识 二.内存管理 2.1 内存空间扩充 2.2 内存空间的分配与回收** Java.大数据开发学习要点(持续更新中-) 一.内 ...

  8. 操作系统 内存管理总结

    目录 内存管理介绍 什么是虚拟内存(Virtual Memory)? 逻辑(虚拟)地址和物理地址 CPU 寻址了解吗?为什么需要虚拟地址空间? 局部性原理 操作系统是如何管理虚拟地址与物理地址之间的关 ...

  9. 操作系统内存管理,你能回答这8个问题吗?

    # 干了这碗鸡汤 当我们是少数人时,我们要有勇气做自己:当我们是多数人时,我们要有胸襟容得下他人. -- 拉尔夫·W·索克曼 大家早上好,今天为大家总结整理了关于操作系统内存管理的知识点,更文不易,请 ...

最新文章

  1. python 提交form-data之坑
  2. Kotlin 1.2 新特性
  3. 收获,不止SQL优化——抓住SQL的本质--读过程
  4. ZigBee开发(15)--组网实验点播
  5. Perl -- 使用Perl 读取和发送邮件
  6. react build后直接从浏览器打开
  7. solr相关配置(搜索novel案例)
  8. php阿拉伯语字符串,使用PHP将RTL(阿拉伯语)文本写入图像
  9. 信息安全等级保护建设(二,三级)需上的设备
  10. 软件测试作业随笔之二:Homework 2
  11. 国人创造中文编程语言的优势
  12. Gorm Model FindFirstWhere等查询函数的区别
  13. 两个rsa密文相乘还能解密吗_RSA加密算法 | BitOL|比特在线-关注区块链技术动态的区块链导航...
  14. 梦幻西游ps计算机,五开选择PS与NE:那是因为效率高的缘故
  15. kafka报错:The Cluster ID doesn‘t match stored clusterId Some in meta.properties
  16. ubuntu 复制文件夹到另一目录命令
  17. Net2 A Graph Attention Network Method
  18. ENVI去除影像的地理坐标信息
  19. java计算机毕业设计中医药科普网站源码+mysql数据库+系统+lw文档+部署
  20. 远程桌面连接禁用本地磁盘

热门文章

  1. 2018年区块链红黑榜-千氪
  2. 【激光雷达】之点云数据滤波处理
  3. 公众号文章的动态图片如何制作
  4. detectron2 c++ 部署笔记
  5. 软件测试就是找茬的?那些年和开发小哥的“爱恨情仇”
  6. 【HTML作业】HTML设计--电影网站,影视网站
  7. 七届世界冠军迈克尔-舒马赫将正式退役
  8. selenium源码通读·12 |webdriver/remote分析
  9. 高性能家用 NAS 搭建(TrueNAS SCALE)
  10. 瑞禧整理常见的抗体药物偶连物(ADC-Linker)名称及结构式大全