【av68676164(p41-p42)】内存管理功能
存储器的功能需求
- 容量足够大
- 速度足够快
- 信息永久保存
- 多道程序并行
多道程序并行带来的问题
- 共享:代码和数据共享,节省内存
- 保护:不允许内存中的程序相互间非法访问
实际存储器体系
- 三级存储体系

- Cache(快、小、贵)+内存(适中)+辅存(慢、大、廉)
- 基本原理
- 当内存太小不够用时,用辅存来支援内存
- 暂停不运行的模块换出到辅存上,必要时再换入内存
存储管理的功能
- 地址映射
- 虚拟存储
- 内存分配
- 存储保护
存储管理的功能1:地址映射
定义
- 把程序中的地址(虚拟地址/虚地址/逻辑地址)变换成内存的真实地址(实地址/物理地址)的过程
- 地址重定位,地址重映射
方式
- 固定地址映射
- 静态地址映射
- 动态地址映射
固定地址映射
定义:编程或编译时确定逻辑地址和物理地址的映射关系
特点:
- 程序加载时必须放在指定的内存区域
- 容易产生地址冲突,运行失败
静态地址映射
定义:程序再装入时由操作系统完成逻辑地址到物理地址的映射
静态地址映射
逻辑地址: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。
特点:
- 程序占用的内存空间可动态变化
- 要求及时更新基址BA
- 程序不要求占用连续的内存空间
- 每段放置基址BA系统应该知道
- 便于多个进程共享代码
- 共享代码作为独立的一段存放
缺点
- 硬件支持(MMU:内存管理单元)
- 软件复杂
存储管理的功能2:虚拟存储
解决的问题
- 程序过大或过多时,内存不够,不能运行
- 多个程序并发时地址冲突,不能运行
虚拟内存的概念
虚拟内存时面向用户的虚拟封闭存储空间(每个进程都有,但是各个都不相关)
- 线性地址空间
- 容量4G = \(2^{32}\)Byte
- 封闭空间(进程空间)
- 和物理地址分离(地址无冲突)
- 程序员编程时使用现性虚拟地址
虚拟内存管理的目标
- 使得大的程序能在较小的内存中运行
- 使得多个程序能在较小的内存中运行(/能容纳下)
- 使得多个程序并发运行时地址不冲突(/方便、高效)
- 使得内存利用效率高:无碎片,共享方便
存储管理的功能3:内存分配功能
为程序运行分配足够的内存空间
需要解决的问题
- 放置策略:程序调入内存时将其放置在哪个/哪些内存区
- 调入策略:何时把要运行的代码和要访问的数据调入内存
- 淘汰策略:内存空间不够时,迁出(/淘汰)那些代码或数据以腾出内存
存储管理的功能4:存储保护功能
保证在内存中的多道程序只能在给定的存储区域活动并互不干扰。
- 防止访问越界
- 防止访问越权
方法:界址寄存器
在CPU中设置一对下限寄存器和上限寄存器存放程序在内存中的下限地址和上限地址,程序访问内存时硬件自动将目的地址与这两对寄存器中存放的地址界限比较,判断是否越界。
【av68676164(p41-p42)】内存管理功能的更多相关文章
- Linux内核之内存管理完全剖析
linux虚拟内存管理功能 ? 大地址空间:? 进程保护:? 内存映射:? 公平的物理内存分配:? 共享虚拟内存.实现结构剖析 (1)内存映射模块(mmap):负责把磁盘文件的逻辑地址映射到虚拟地 ...
- 理解CPU内存管理
概述:从设计层面理解CPU的内存模式,包括段式内存管理.页式内存管理以及虚拟化扩展内存管理.实际上,硬件支持与软件实现从来就不是能分开讲的,比如,Intel CPU架构师在选择CPU的硬件特性时,必然 ...
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
http://blog.csdn.net/pi9nc/article/details/23334659 注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料 ...
- Qt的内存管理
在QT的程序中经常会看到只有new而不delete的情况,其实是因为QT有一套回收内存的机制,主要的规则如下: 1.所有继承自QOBJECT类的类,如果在new的时候指定了父亲,那么它的清理时在父亲被 ...
- MFC与Qt的内存管理
最近在做MFC向Qt的移植,在内存管理方面遇到了很头疼的问题,虽然不知道问题到底出在哪,先了解下这两个库的内存管理方式.于是转载两篇关于内存管理的文章. 一. Qt内存管理: 在Qt的程序中经常会看到 ...
- 内存管理之三——Cocos2d-x学习历程(七)
1.容器---2.0版本 Cocos2d-x引擎为我们提供了CCArray.CCDictionary等Objective-C风格的容器.使用Cocos2d-x容器的一个重要原因在于Cocos2d-x的 ...
- U-Boot内存管理
如<Linux内核内存管理架构>一文中提到,linux内核中的内存管理支持内存地址映射.内存分配.内存回收.内存碎片管理.页面缓存等众多功能.但U-Boot做为启动引导程序,其核心功能就是 ...
- oracle基础——内存管理、优化
内存图解: 自动管理:11g:AMM 10g:ASMM SGA(system global area):由所有服务进程和后台进程共享 PGA(program global area): 由每个服务 ...
- Oracle 自己主动内存管理 SGA、PGA 具体解释
ASMM自己主动共享内存管理: 自己主动依据工作量变化调整 最大程度地提高内存利用率 有助于消除内存不足的错误 SYS@PROD>show parameter sga NAME ...
随机推荐
- java 数据结构(七):Collection接口
1.单列集合框架结构|----Collection接口:单列集合,用来存储一个一个的对象* |----List接口:存储序的.可重复的数据. -->“动态”数组* |----ArrayList. ...
- Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系
Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...
- dataframe一次小实验
老师搞不清,一个ndarray[df['columns']==a],返回的是什么,目前看来应该是df[] == a 的索引
- 如何手写一个简单的LinkedList
这是我写的第三个集合类了,也是简单的实现了一下基本功能,这次带来的是LinkedList的写法,需要注意的内容有以下几点: 1.LinkedList是由链表构成的,链表的核心即使data,前驱,后继 ...
- Burp Suite Compare Module - 对比模块
虚拟目标网站: http://10.0.0.15/orangehrm/login.php (RangeHRM) - 可以通过OWASP虚拟机搭建此网站 模拟攻击步骤: 1. 通过设置浏览器代理 ...
- T3 成绩单 题解
这个题本来不归我讲,但我A完之后觉得太坑了,还是讲一下吧. 首先这个题有个重要的地方:(字典顺序,学号全为小写字母,从小到大排列) 字典序和字典顺序是不一样的!!! 我以为是字典序……,wa了,字典顺 ...
- 面试官:连Spring三级缓存都答不好,自己走还是我送你?
面试官:简历上写了精通Spring,那你回答一下Spring为什么用“三级缓存”去解决循环依赖? 我:.......应该有三个缓存的map结构 面试官:具体回答一下 我:平时没认真深入过 面试官:公司 ...
- xmake从入门到精通12:通过自定义脚本实现更灵活地配置
xmake是一个基于Lua的轻量级现代化c/c++的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验. 本文主要详细讲解下,如何通过添加自定义的脚本,在脚 ...
- 面试题千变万化,为什么总是会问MySQL?
前言 当你简历上写了 熟悉mysql关系型数据库时,那肯定免不了面试官对于myql索引.事务,慢查询等等的考察 那么到底什么是索引,索引的数据类型有哪些,它们的优缺点以及如何去排查那些慢SQL语句等, ...
- 分布式ID生成服务,真的有必要搞一个
目录 阐述背景 Leaf snowflake 模式介绍 Leaf segment 模式介绍 Leaf 改造支持RPC 阐述背景 不吹嘘,不夸张,项目中用到ID生成的场景确实挺多.比如业务要做幂等的时候 ...