存储器的功能需求

  • 容量足够大
  • 速度足够快
  • 信息永久保存
  • 多道程序并行

多道程序并行带来的问题

  1. 共享:代码和数据共享,节省内存
  2. 保护:不允许内存中的程序相互间非法访问

实际存储器体系

  • 三级存储体系

  • Cache(快、小、贵)+内存(适中)+辅存(慢、大、廉)
  • 基本原理
    • 当内存太小不够用时,用辅存来支援内存
    • 暂停不运行的模块换出到辅存上,必要时再换入内存

存储管理的功能

  1. 地址映射
  2. 虚拟存储
  3. 内存分配
  4. 存储保护

存储管理的功能1:地址映射

定义

  • 把程序中的地址(虚拟地址/虚地址/逻辑地址)变换成内存的真实地址(实地址/物理地址)的过程
  • 地址重定位,地址重映射

方式

  1. 固定地址映射
  2. 静态地址映射
  3. 动态地址映射

固定地址映射

定义:编程或编译时确定逻辑地址和物理地址的映射关系

特点

  • 程序加载时必须放在指定的内存区域
  • 容易产生地址冲突,运行失败

静态地址映射

定义:程序再装入时由操作系统完成逻辑地址到物理地址的映射

静态地址映射

  • 逻辑地址:VA(Virtual Addr.)

  • 装入基址:BA(Base Addr.),程序装在内存中的起始地址

  • 物理地址:MA(Memory Addr.)

    MA = BA + VA

例子:

MA = x + BA

  • 逻辑地址:VA=X,(X) = 1234
  • 装入基址:BA
  • MA = X + BA

特点

  • 程序运行之前确定映射关系
  • 程序装入后不能移动
    • 如果移动必须放回原来位置
  • 程序占用连续的内存空间

动态地址映射

定义:程序在执行过程中把逻辑地址转换为物理地址

​ 例如:MOV AX, [500];访问500单元时执行地址转换

映射过程

  • MA = BA + VA

  • 逻辑地址:VA(Virtual Addr.)

  • 装入基址:BA(Base Addr.)

  • 物理地址:MA(Memory Addr.)

    • 注意:如果程序有移动,BA可能会有改变,自动计算新的MA。

特点:

  1. 程序占用的内存空间可动态变化

    • 要求及时更新基址BA
  2. 程序不要求占用连续的内存空间
    • 每段放置基址BA系统应该知道
  3. 便于多个进程共享代码
    • 共享代码作为独立的一段存放

缺点

  1. 硬件支持(MMU:内存管理单元)
  2. 软件复杂

存储管理的功能2:虚拟存储

解决的问题

  1. 程序过大或过多时,内存不够,不能运行
  2. 多个程序并发时地址冲突,不能运行

虚拟内存的概念

虚拟内存时面向用户的虚拟封闭存储空间(每个进程都有,但是各个都不相关)

  • 线性地址空间
  • 容量4G = \(2^{32}\)Byte
  • 封闭空间(进程空间)
  • 和物理地址分离(地址无冲突
  • 程序员编程时使用现性虚拟地址

虚拟内存管理的目标

  1. 使得大的程序能在较小的内存中运行
  2. 使得多个程序能在较小的内存中运行(/能容纳下)
  3. 使得多个程序并发运行时地址不冲突(/方便、高效)
  4. 使得内存利用效率高:无碎片,共享方便

存储管理的功能3:内存分配功能

为程序运行分配足够的内存空间

需要解决的问题

  1. 放置策略:程序调入内存时将其放置在哪个/哪些内存区
  2. 调入策略:何时把要运行的代码和要访问的数据调入内存
  3. 淘汰策略:内存空间不够时,迁出(/淘汰)那些代码或数据以腾出内存

存储管理的功能4:存储保护功能

保证在内存中的多道程序只能在给定的存储区域活动并互不干扰。

  • 防止访问越界
  • 防止访问越权

方法:界址寄存器

在CPU中设置一对下限寄存器和上限寄存器存放程序在内存中的下限地址和上限地址,程序访问内存时硬件自动将目的地址与这两对寄存器中存放的地址界限比较,判断是否越界。

【av68676164(p41-p42)】内存管理功能的更多相关文章

  1. Linux内核之内存管理完全剖析

    linux虚拟内存管理功能 ? 大地址空间:? 进程保护:? 内存映射:? 公平的物理内存分配:? 共享虚拟内存.实现结构剖析   (1)内存映射模块(mmap):负责把磁盘文件的逻辑地址映射到虚拟地 ...

  2. 理解CPU内存管理

    概述:从设计层面理解CPU的内存模式,包括段式内存管理.页式内存管理以及虚拟化扩展内存管理.实际上,硬件支持与软件实现从来就不是能分开讲的,比如,Intel CPU架构师在选择CPU的硬件特性时,必然 ...

  3. 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现

    http://blog.csdn.net/pi9nc/article/details/23334659 注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料 ...

  4. Qt的内存管理

    在QT的程序中经常会看到只有new而不delete的情况,其实是因为QT有一套回收内存的机制,主要的规则如下: 1.所有继承自QOBJECT类的类,如果在new的时候指定了父亲,那么它的清理时在父亲被 ...

  5. MFC与Qt的内存管理

    最近在做MFC向Qt的移植,在内存管理方面遇到了很头疼的问题,虽然不知道问题到底出在哪,先了解下这两个库的内存管理方式.于是转载两篇关于内存管理的文章. 一. Qt内存管理: 在Qt的程序中经常会看到 ...

  6. 内存管理之三——Cocos2d-x学习历程(七)

    1.容器---2.0版本 Cocos2d-x引擎为我们提供了CCArray.CCDictionary等Objective-C风格的容器.使用Cocos2d-x容器的一个重要原因在于Cocos2d-x的 ...

  7. U-Boot内存管理

    如<Linux内核内存管理架构>一文中提到,linux内核中的内存管理支持内存地址映射.内存分配.内存回收.内存碎片管理.页面缓存等众多功能.但U-Boot做为启动引导程序,其核心功能就是 ...

  8. oracle基础——内存管理、优化

    内存图解: 自动管理:11g:AMM   10g:ASMM SGA(system global area):由所有服务进程和后台进程共享 PGA(program global area): 由每个服务 ...

  9. Oracle 自己主动内存管理 SGA、PGA 具体解释

    ASMM自己主动共享内存管理: 自己主动依据工作量变化调整 最大程度地提高内存利用率 有助于消除内存不足的错误 SYS@PROD>show parameter sga NAME          ...

随机推荐

  1. 数据可视化之DAX篇(九) 关于DAX中的VAR,你应该避免的一个常见错误

    https://zhuanlan.zhihu.com/p/67803111 本文源于微博上一位朋友的问题,在计算同比增长率时,以下两种DAX代码有什么不同? -------------------- ...

  2. Quartz.Net系列(十四):详解Job中两大特性(DisallowConcurrentExecution、PersistJobDataAfterExecution)

    1.DisallowConcurrentExceution 从字面意思来看也就是不允许并发执行 简单的演示一下 [DisallowConcurrentExecution] public class T ...

  3. C#-CLR note - 26线程

    开篇 async/wait的使用 static async Task Main(string[] args) { Console.WriteLine("start-- "); va ...

  4. ffmpeg常见用法总结

    1. 视频/音频剪切: ffmpeg -i input_file [-ss 00:00:10] [-t 00:00:20] output_file 去掉-ss指令表示从头开始 去掉-t指令表示剪切到结 ...

  5. Python数据分析实战:使用pyecharts进行数据可视化

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:刘早起 开始使用 基本套路就是先创建一个你需要的空图层,然后使用.s ...

  6. P1330 封锁阳光大学(洛谷)

    题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由n个点构成的无向图,n个点由m条道 ...

  7. LGTB 与 序列

    题目描述 LGTB 有一个长度为 N 的序列 A ,现在他想构造一个新的长度为 N 的序列 B ,使得 B 中的任意两个数都互质.并且他要使 \sum_{1\le i\le N}|A_i-B_i| 最 ...

  8. javascript : 复杂数据结构拷贝实验

    数组深拷贝看起来很简单. array.concat()就行了. 但是,如果数组里有对象呢? 实际上,你以为你拷贝了对象,但实际上你只拷贝了对象的引用(指针)! 我们可以做个试验. // test le ...

  9. CSS:有点难的面试题①

    1 举例说明匿名块框和匿名行内框2 什么是标准文档流?3 inline-block遵循怎样的渲染规则?4 什么是BFC?如何触发BFC?5 什么是Line box?(最好画图说明) 6 <met ...

  10. 微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)

    (一) 准备工作 (1) 登录注册 注册账号:这就不谈了,只需要注意使用一个全新的邮箱,别之前注册过公众号小程序等就可以了 https://mp.weixin.qq.com/wxopen/waregi ...