Operating System Concepts--chap9 Memory Management;

这一章节的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这么干的;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值