博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Operating System Concepts--chap9 Memory Management;
阅读量:5990 次
发布时间:2019-06-20

本文共 1994 字,大约阅读时间需要 6 分钟。

  hot3.png

这一章节的memory management内容覆盖从bare-machine approach到paging和segmentation;

9.1 background

我们在编程时候所操作的地址--logical address和实际机器中的地址--physical address不是一样的;
他们之间的mapping是通过Memory Management Unit来进行转换,通常是通过[relocation,offset]这样的典型组合来完成;
而且他们之间的binding,也有几种情况:
1,compile time:在程序编译的时候就bind,那么这个地址肯定是绝对地址;
2,load/execution time:load/execute程序的时候bind,这种情况普遍有个模式:Relocable Addr+offset的模式,程序操作offset,然后由系统来确认Relocable addr的值,在不同情况改变relocable addr那么程序就被在memory中移来移去;

定义:

logical address:由cpu产生的address
physical address:memory unit所见的address

dynamic loading:一个模块知道被使用的时候才会被load

dynamic linking:推迟link,但是需要os的支持,因为link会需要考虑process的protection,

9.2 swapping

swapping:针对process而言,执行的时候swap进内存,不执行的时候swap出去;
一些基于优先级的算法来支持swapping

9.3 continuous memory allocation

就是给定一块内存,比如256M,来支持alloc/free;
《the art of computer programming》给出著名的heap算法
1,把内存用链表串起--开始的时候就一个节点,随着分配和释放,连续内存被打散,形成链表;
2,另外用hash表来索引节点,[key,value]--[内存块大小,内存块的地址],hash表有多个,以size大小分类--1k-2k的一类,2k-4k的一类,4k-8k的一类...
我们需要alloc内存出来时迅速定位到hash表,然后选择best fit的模块进行分类;
分配时如果已有内存块大于所需,就裂开,
free时,如果归还内存前后有free的内存,就merge

最大问题是:external fragmentation,可能剩余10M内存,但是都是零碎的小块,无法alloc出一个1m的空间;

由于游戏开发中,内存有一定的规律,比如在ps3中管理显存,就可以根据游戏需要,特殊处理render target,resolve buffer这类问题,

利用游戏的特性来进行优化,而不是单纯的去做支持general的工作;会很大程度上降低这个工作;

9.4 paging

paging--允许process的logical address是连续的,但是physical address是不连续的;非常牛逼的做法;
基本概念
physical memory被分成大小一样的一块块,called frame
logical memory分成大小一样的一块块,叫page
page灵活的map到frame中,逻辑地址中连续的page,在physical memory中就是可以分散的分配的;

requirements

需要page table,frame table
而且在真正访问内存的时候,需要做逻辑地址向物理地址的转换,这会大大降低速度,硬件的支持不可避免;
TLB作为page table的cache出现,加快逻辑物理转换速度;

more:

可以有多级page table,shared page table。。。

9.5 segmentation

segmentation:支持用户角度对内存的划分;
比如我们coding时候常说的:stack,heap,全局区等等;
以segmentation table做管理,以[base,offset]对来索引,可以区域保护和共享,享受external fragmentation;

9.6 segmentation with paging

把segmentation架在paging上,通过segmentation的[base,offset]地址访问到page的[page_number,offset]再到physical memory;
很灵活很牛逼,有硬件支持也很快,intel 80386这么干的;
 

原文链接:

转载于:https://my.oschina.net/dtec/blog/44686

你可能感兴趣的文章
Cocoa Touch事件处理流程--响应者链
查看>>
MSSQL注入
查看>>
10个开发中常用的PHP代码样例
查看>>
JavaScript数组小方法
查看>>
Treap树应用-bzoj 1862 GameZ游戏排名系统问题
查看>>
从手忙脚乱到袖手旁观:RPA对财务流程的颠覆
查看>>
python大佬养成计划----HTML网页设计(序列)
查看>>
EOS Asia & 思否区块链达成战略合作
查看>>
文本分析——分词、统计词频、词云
查看>>
Android 5.x重大漏洞:谁都能轻松绕过锁屏密码
查看>>
OurMine黑客攻击汇丰银行
查看>>
英国即将成立一个数据中心崩溃报告调查小组
查看>>
如何看mysql锁信息
查看>>
我的友情链接
查看>>
linux下追查线上问题常用命令
查看>>
手机服务端开发关于版本控制的处理个人一些意见,欢迎补充!!!
查看>>
传输层协议UDP和TCP
查看>>
智和网管平台(SugarNMS)油气管线网管系统解决方案
查看>>
智和网管平台-真正开放源码的网元管理系统(EMS)
查看>>
丹尼斯·里奇:让乔布斯立足肩上的C语言之父
查看>>