参考和查阅了一下他人的资料,整理下 虚拟内存、物理内存、Swap分区、页面置换机制等基础知识
  1. 虚拟地址空间 与 物理地址空间的关系

虚拟地址由操作系统维护,由MMU可以进行转换,扩大了内存空间分页管理。

大多数 使用虚拟存储器的系统 都使用一种称为 分页(paging)机制 。
虚拟地址空间划分成称为(page)的单位,而相应的物理地址空间也被进行划分,单位是页帧(frame),一个在磁盘,一个在内存,页和页桢的大小必须相同。在32位地址的机器,它的虚拟地址范围从0~0xFFFFFFFF(4G),而这台机器只有256M的物理地址,因此他可以运行4G的程序,但该程序不能一次性调入内存运行。这台机器必须有一个达到可以存放4G程序的外部存储器(例如磁盘或是FLASH),以保证程序片段在需要时可以被调用。
在这个例子中,页的大小为4K (4096 B),页桢大小与页相同——这点是必须保证的,因为内存和外围存储器之间的传输总是以页为单位的。对应4G的虚拟地址和256M的物理存储器,他们分别包含了1M个页 和64K个页帧。
( 1M个页  :   1M* 4k = 2^20 * 2^2 *2 ^10 = 2^32 = 4G)  
(64K个页帧:64k = 2^8 * 2^10 = 2^18  = 256M)

页表就像一个函数,输入是页号,输出是页桢,实现从页号到物理地址的映射。

操作系统给每一个进程维护一个页表。所以不同进程的虚拟地址可能一样。页表给出了进程中每一页所对应的页帧的位置。

PS:“虚拟内存”这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,同时,隔离每个进程的安全保护网,使每个进程都不受其它程序的干扰。

2. 页面置换

区分概念:虚拟内存、物理内存、Swap分区(硬盘存储区)

虚拟内存映射整个程序存储空间,并将当前运行的数据 通过虚拟空间 映射到 对应的物理内存上运行,物理内存不足时,将其中一部分数据交换到 硬盘交换区--swap中,当需要时,在将swap分区的内容,置换到物理内存中。

页面置换:把一个页面从内存调换到磁盘的交换区中 (swap分区,即硬盘存储区的一部分)

Swap分区在系统物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。

抖动:在具有虚存的计算机中,由于频繁的调页活动使访问磁盘的次数过多而引起的系统效率降低的一种现象。

例:操作系统同时运行多个程序,当切换到一个很长时间没有理会的程序时,会听到硬盘“哗哗”直响。这是因为这个程序的内存被那些频繁运行的程序给“偷走”了,放到了Swap区中。因此,一旦此程序被放置到前端,它就会从Swap区取回自己的数据,将其放进内存,然后接着运行。

并不是所有从物理内存中交换出来的数据都会被放到Swap中。有相当一部分数据被直接交换到文件系统。例如,对文件进行读写,当需要将这些程序的内存空间交换出去时,可以直接将其放到文件里去。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为下次需要时,可直接从文件系统恢复;如果是写文件,只需要将变化的数据保存到文件中,以便恢复。 但是那些用malloc和new函数生成的对象的数据则不同,它们需要Swap空间,因为它们在文件系统中没有相应的“储备”文件,因此被称作“匿名”(Anonymous)内存数据。这类数据还包括堆栈中的一些状态和变量数据等。所以说,Swap空间是“匿名”数据的交换空间。

3. Swap分区

Swap空间是分页的(物理存储器以页帧为单位划分),每一页的大小和内存页的大小一样,方便Swap空间和内存之间的数据交换。

旧版本的Linux实现Swap空间时,用Swap空间的第一页作为所有Swap空间页的一个“位映射”(Bit map)。这就是说第一页的每一位,都对应着一页Swap空间。如果这一位是1,表示此页Swap可用;如果是0,表示此页是坏块,不能使用。这么说来,第一个Swap映射位应该是0,因为,第一页Swap是映射页。另外,最后10个(字节)映射位也被占用,用来表示Swap的版本。那么,如果说一页的大小为s,这种Swap的实现方法共能管理“8 * ( s - 10 ) - 1”个Swap页。对于i386系统来说s=4096,则空间大小共为133890048,如果认为1 MB=2^20 Byte的话,大小正好为128M。

Linux取消了位映射的方法,也就取消了128M的限制。直接用地址访问,限制为2G (不理解)

4. Swap大小的分配(对性能的影响)

如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。

通常情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍。但根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加,具体配置参见各服务器产品的说明。

因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。

在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断。当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。

参考此处

操作系统 内存管理机制相关推荐

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

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

  2. python中内存管理机制一共分为多少层_python 内存管理机制

    内存管理机制 ​python中万物皆对象,python的存储问题是对象的存储问题,并且对于每个对象,python会分配一块内存空间去存储它 ​Python的内存管理机制:引入计数.垃圾回收.内存池机制 ...

  3. JVM内存管理机制线上问题排查

    本文主要基于"深入java虚拟机"这本书总结JVM的内存管理机制,并总结了常见的线上问题分析思路.文章最后面是我对线上故障思考的ppt总结. Java内存区域 虚拟机运行时数据区如 ...

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

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

  5. 什么是python语言的动态类型机制_python的内存管理机制

    一.python是一个什么样类型的语言 1.python是一种动态解释性强类型定义的高级.通用性编程语言. 解释型:执行的时候,才一条一条的解释成机器语言给计算机来执行.如:python.js.rub ...

  6. Android内存管理机制详解,【安卓知识普及贴】之关于安卓内存管理机制的一些介绍和阐述。...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 安卓系统其实不需要极度精简,只是一味的精简并不会给系统带来什么好处反而只有害处,因为许多系统应用跟设置里的选项有关联,删除掉就会在选择关联选项的时候FC, ...

  7. Python源码阅读-内存管理机制(一)

    Python的内存管理架构 基本分层 在Objects/obmalloc.c源码中, 给了一个分层划分 _____ ______ ______ ________[ int ] [ dict ] [ l ...

  8. Android内存管理机制

    好文摘录 原作: https://www.cnblogs.com/nathan909/p/5372981.html 1.基于Linux内存管理 Android系统是基于Linux 2.6内核开发的开源 ...

  9. 【OS学习笔记】三十 保护模式九:段页式内存管理机制概述

    上几篇文章学习了任务切换相关知识,如下: [OS学习笔记]二十六 保护模式八:任务门-任务切换 [OS学习笔记]二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中断嵌套 今 ...

最新文章

  1. opencv 取roi_利用OpenCV 识别两张相似的图片
  2. 了解使用Android ConstraintLayout
  3. leetcode145. 二叉树的后序遍历 意想不到的骚操作
  4. python 无法引入同级目录的方法_再见 virtualenv!K神教你轻松管理多个Python环境...
  5. Linux slab分配器【转】
  6. 比特币 以太坊 真的是去中心化的吗?
  7. Linux学习笔记——网络组成
  8. PMON分析(1)- ROM阶段
  9. 从苏宁电器到卡巴斯基第05篇:我的创业梦
  10. Python打开文件权限及编码方式
  11. 桌面ie图标删除不了
  12. javax.validation校验整理
  13. 【强化学习】《Easy RL》- Q-learning - CliffWalking(悬崖行走)代码解读
  14. 用Python找101-200之间的素数
  15. 4、木马防范:木马分析检测及常见木马防护工具
  16. 用JAVA写一个简单的21点游戏(不设置庄主的情况下)
  17. hiho第三周 KMP
  18. 【Android Gradle 插件】DexOptions 配置 ⑤ ( additionalParameters 属性配置 | --minimal-main-dex 参数最小化主 dex 字节码 )
  19. vue.use是干什么的?
  20. 大概这就是“无监督学习”的机器学习算法实例

热门文章

  1. 计算机命令跟踪,如何使用tracert这一个命令跟踪IPv6路径
  2. MIMO OFDM 系统常用信号检测算法
  3. uni-app实战之社区交友APP(1)项目介绍和环境搭建
  4. 解决win10安装net framework 3.5失败问题错误代码0x800f0950
  5. SIP.js 0.20.0版本简单Demo
  6. java web QQ (前言)
  7. 爬取微博用户ID和评论
  8. Win2003 SP0/SP1 下安装WMP11
  9. Java 判断一个整数是否是质数
  10. JS知识 - 收藏集 - 掘金