内存管理


内存管理

  • objects
    to provide a detailed description of various ways of organizing memory hardware
    to dicuss various memory-management techniques

背景

  • 内存由很大的一组字或字节组成,每个字或字节都有它们自己的地址
  • 内存即主存、分为两大部分:系统区和用户区
  • 功能
    存储空间的分配和回收
    地址变换
    存储保护
    存储扩充

基本硬件

cpu能直接访问的存储器有主存、高速缓存和寄存器
main memory, cache, the registers

地址绑定

  • 用户程序的执行步骤:compile, link, load
program execution
  • 将指令和数据绑定到内存地址有以下几种情况:
    compile time
    load time
    execution time
  • 绝对装入方式:
编译时产生绝对地址的目标代码,绝对装入程序按照装入模块中的地址将程序及数据装入内存,不需对地址进行变换
程序中使用的绝对地址可以在编译时给出,也可以由程序员直接赋予
特点:不方便,适合单程序运行
  • 可重定位装入方式
relocation
编译时产生相对地址的目标代码,由装入程序根据内存当时的实际使用情况,将装入模块装入内存的适当地方。
加载时:如果在编译时不知道进程在内存的驻留位置,则编译程序必须生成可重定位代码。绑定在加载时进行。
  • 动态运行时装入方式
bind in execution
在将装入模块装入内存时不进行地址变换,在程序执行过程中进行地址变换

如果进程在执行时可以在内存中移动,则地址绑定要延时到执行时

逻辑地址空间和物理地址空间

  • 逻辑地址:
    由cpu产生的地址,用户编程时所使用的地址,又称相对地址、虚拟地址,其集合称逻辑地址空间、地址空间
  • 物理地址:内存单元看到的地址,内存中的地址,又称绝对地址、实地址,其集合称物理地址空间、主存空间
  • 内存管理单元 MMU
    运行时把虚拟地址映射到物理地址的设备
  • 地址变换
    将逻辑地址转换成物理地址,又称地址映射、重定位,分为两类,静态~、动态~
  • 静态地址变换
    地址变换在程序装入时一次完成,以后不再改变
    特点:不需要硬件支持,但程序运行时不能在内存中移动,程序需要连续存储空间,难以共享
  • 动态地址变换
    在程序执行过程中,每次访问内存之前要将要访问程序地址转换成内存地址
    特点:需要硬件支持,不需连续空间,可以实现虚拟存储

动态加载

采用动态加载时,子程序只用调用时才会被加载
优点:不用的子程序不会被加载

动态链接

链接被延迟到执行期间

程序的链接

  • 功能
    将经过编译或汇编后得到的目标模块以及所需的库函数装配成一个完整的装入模块
  • 静态链接
    程序运行之前,将各目标模块及其所需的库函数装配成一个完整的装入模块
  • 装入时动态链接
    源程序编译后所得到的目标模块在装入内存时边装入边链接
    特点:便于软件版本的修改和更新,便于目标模块的共享
  • 运行时动态链接
    在执行过程中,若发现一个被调用模块尚未装入内存,由os去找到该模块,将它装入内存并链接到调用者模块上
    特点:加快了程序装入,节省了内存

覆盖与交换技术

  • 覆盖与交换技术是在多道程序环境下用来扩充内存的方法
  • 覆盖技术
    把一个大程序划分为一系列覆盖,每个覆盖是一个相对独立的程序单位,把程序执行时不要求同时装入内存的覆盖组成一组,称为覆盖段,将一个覆盖段分配到同一个存储区,这个存储区称为覆盖区,覆盖区的大小由覆盖段中最大的覆盖来确定
覆盖
  • 交换技术
    将内存中暂时不用的程序及数据换出到外存中,再将已具备运行条件的进程或进程所需的程序或数据从外存换入内存中
  • 交换空间的管理
    交换空间设置在外存交换区中,交换空间管理的主要目标是提高进程换入/换出速度
    采用连续分配方式,使用与动态分区分配类似的数据结构和分配回收算法
  • 进程的换出与换入
    换出:先选择换出进程(阻塞、优先级低、驻留时间长),再申请兑换空间,然后启动磁盘写,若成功则可释放其内存空间并修改数据结构
    换入:先选择换入进程(就绪、优先级、换出时间长),再申请内存空间,然后启动磁盘读
交换
  • 覆盖vs交换

连续内存分配与回收

两个区域:一个驻留操作系统(通常位于内存低端),一个用于用户进程(通常位于地址高端)

内存映射和保护

内存分配

分区存储管理是多道程序系统采用的最简单的方法,它把系统的内存划分成若干大小不等的区域,操作系统占一个区,其他区域由并发进程共享,每个进程占一个区域

  • 固定分区
  • 动态分区管理/可变分区存储管理
    基本思想:根据作业大小动态的建立分区,并使分区的大小正好适应作业的需求。因此,分区的大小和数目都可变
    常用的数据结构:空闲分区表,空闲分区链
空闲分区表
空闲分区链
  • 分区分配算法
  • 首次适应算法
    进行内存分配时,从空闲分区表中按地址递增的顺序开始查找,直到找到第一个能满足其大小需求的空闲区,然后按照作业大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍然留在空闲分区表中
    特点:优先使用内存低地址端,高地址端有大空闲区,但低地址端有许多小空闲区时会增加查找开销
  • 循环首次适应算法/下次适应算法
    进行内存分配时,从空闲分区表上次查找到的空闲去的下一个空闲区中按地址递增的顺序开始查找,直到找到第一个能满足其大小需求的空闲区,然后按照作业大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍然留在空闲分区表中
    特点:使存储空间的利用更加均衡,但会使系统缺乏大的空闲分区
  • 最佳适应算法
    进行内存分配时,从空闲分区表中按容量大小递增的顺序开始查找,直到找到第一个能满足其大小需求的空闲区,然后按照作业大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍然留在空闲分区表中
    特点:保留了很大的空闲区,但分割后的剩余空闲区很小
  • 最坏适应算法
    进行内存分配时,从空闲分区表中按容量大小递减的顺序开始查找,直到找到第一个能满足其大小需求的空闲区,然后按照作业大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍然留在空闲分区表中
    特点:分割后剩余空闲区较大,但当大作业到来时,其存储空间的申请往往得不到满足
内存分配算法

分区回收

  • 回收分区时,应将空闲区插入到适当位置
  • 回收分区r上邻接一个空闲分区:合并二者
  • 回收分区r下邻接一个空闲分区:合并二者
  • 回收分区r上面、下面各邻接一个空闲分区:合并三者
  • 回收分区r不与任何空闲分区临接:增加新表项

可重定位分区分配

分页

基本概念

  • 基本方法:将物理内存分为固定大小的块,称为帧,将逻辑地址分为同样大小的块,称为页(页内碎片
  • 逻辑地址结构:页表项+页内偏移
  • 页表:为每个进程创建一张,记录页面在内存中对应物理块的数据结构,一般放在内存中
  • 存储分块表:也称为帧表,记录内存中各物理块使用情况及未分配物理块总数(位示图,空闲存储块链)
  • 存储空间的分配与回收
    页面分配:计算进程所需页面数,然后在请求表中登记进程号、请求页面数等。如存储分块表中有足够的空闲块可供进程使用,则在系统中取得页表始址,并在页表中登记页号及其对应的物理块号。否则无法分配。
    页面回收:将存储分块表中相应的物理块改为未分配,或将回收块加入到空闲存储块链中,并释放页表,修改请求表中的页表始址及状态。

硬件支持

  • 页表寄存器:存放页表在内存中的起始地址和页表的长度,未执行时放在PCB中
  • 分页地址变换
分页地址变换

设页面大小为1K字节,作业的0、1、2页分别存放在第2、3、8块中。则逻辑地址2500的页号及页内地址为:2500/1024=2(页号);2500 %1024=452(页内地址);
查页表可知第2页对应的物理块号为8;
将块号8与页内地址452拼接得到物理地址为:8×1024+452=8644。

  • 具有快表的分页地址变换
    地址变换机构自动将页号与快表中的所有页号进行并行比较,若其中有与此匹配的页号,则取出该页对应的块号,与页内地址拼接形成物理地址。
    若页号不在快表中,则再到主存页表中取出物理块号,与页内地址拼接形成物理地址。
    同时还应将这次所查到的页表项存入快表中,若快表已满,则必须按某种原则淘汰出一个表项以腾出位置。
具有快表的分页地址变换

存储保护

  • 地址越界保护:页表长度与逻辑地址中的页号比较
  • 存取控制保护:在页表中增加保护位,与帧关联

共享页

  • 使多个进程页表相指向同一个物理块
  • 如果代码是可重入代码(纯代码),则可以共享
共享页

页表结构

  • 分级页表
  • 哈西页表
  • 反向页表

分级页表

两级页表:power(2,20)

对64位地址不合适

64位分级页表

哈西页表

反向页表

分段

  • 考虑程序段的逻辑完整性
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容