内存管理

一、内存管理

1.内存管理概念

-程序装入与链接;逻辑地址与物理地址空间;内存保护

2.交换与覆盖

3.连续分配管理方式

4.非连续分配管理方式

-分页管理方式;分段管理方式;段页式管理方式

一、内存管理概念

存储器包括内存(主存)和外存(磁盘)

-存储器的功能是保存数据,存储器的发展方向是高速、大容量和小体积

现在一般的存储结构:“寄存器(register)-缓存(cache)-内存(primary storage)-外存(secondary storage)”结构(涉及部分组成原理问题,等以后复习到了再完善下

缓存

-Data Cache

-TLB(Translation Lookaside Buffer)

内存:DRAM,SDRAM等

外存:软盘、硬盘、光盘、磁带等

内存管理的功能有

内存空间的分配与回收:由OS完成主存储器空间发分配和管理

地址转换:提供地址变换功能,把逻辑地址转换成相应的物理地址

内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存

存储保护:保证各作业在各自存储空间允许,互不干扰

物理地址

-也叫内存地址、绝对地址、实地址

-把内存分成很多个大小相等的存储单元,每个单元给一个编号,就是物理地址

物理地址可以直接寻址

逻辑地址

-相对地址、虚地址

-用户程序经编译后形成目标代码,目标代码通常采用相对地址的形式,首地址为0其余指令中的地址都是相对首地址在编程(例如指针所代表的地址,就是一个逻辑地址,我们在程序里可以根据指针的地址做很多内存操作,但是其并不代表真实的物理地址,需要访问内存的时候要先转化为物理地址,然后访问)

不能用逻辑地址在内存中读取信息

地址映射:把逻辑地址转化为物理地址的方法

程序的装入和链接

程序要运行必须为之创建进程,二创建进程的第一件事就是分配内存

通常要经过编译(compile)-链接(link)-装入(load)这三个步骤

编译:有编译程序将源代码编译称若干个目标模块

链接:有链接程序将编译后形成的一组目标模块以及所需的库函数链接在一起,形成一个完整的装入模块

装入:将装入模块装入内存中

举一个例子吧:要把公鸡装冰箱,一共分几步(肯定不是那三步了)先把公鸡各部位分割,例如分割成鸡胸肉、鸡腿、鸡翅、鸡爪等,然后把不同的部位用不同的标签链接起来,最后根据需要放到适合的冰柜,有些适合冷藏的放冷藏,有些适合冰冻的放冰冻。

装入分三种

绝对装入方式:事先确定了程序将驻留的绝对地址(物理地址=逻辑地址,古老的方式)

可重定位装入方式:又称静态重定位,类似于连续数组,必须事先请求所有的地址空间才能装入,连续存储

动态运行时装入:又称动态重定,类似链表,可以非连续存储

链接分三种

静态链接:事先确定了各目标模块及其所需的库函数,以后不再拆开

装入时动态链接:在装入内存时,边装边链接

运行时动态链接:程序需要用到时,才进行链接(便于修改更新,便于模块共享)

内存保护

1.界地址保护:上下界保护和地址检查机制(若访问的地址不在分配的地址上下界内,则出错)

2.基址、限长寄存器和动态地址转换机构:告诉你开始地址和长度,在这个范围以内可以访问,超出就出错

3.存储键保护:通过保护键匹配来判断存储访问方式是否合法

二、交换与覆盖

覆盖主要用于早期操作系统中的单一连续管理技术,现在以及不再使用。覆盖打破了必须将一个程序的全部信息装入内存后才能运行的限制,在一定成都西解决了小内存运行大程序的矛盾。

交换:把内存中暂时用不到的程序或数据调出到外存上,以便腾出足够的内存空间,再吧已具备运行条件的进程调入内存。

如果对换是以真个进程为单位,则称为整体对换或进程对换(现在也不用了)

如果是以页或段为单位进行的,则称页面对换或分段对换又称部分对换

三、连续分配管理方式

1.单一连续分配(只能用于单用户单任务的OS)

把内存分为系统区和用户区,系统区仅供OS使用,通常在低地址部分;用户区供用户使用。

2.固定分区分配

把空间划分为若干个固定大小的区域,每个分区中只装入一道作业

划分方法

大小相等划分:划分的平均大小太大浪费、太小不够用

大小不等划分:划分为大中小搭配的分区

3.动态分区分配

根据进程的实际需要,动态地为之分配内存空间

-首次适应算法First Fit:从链首开始查找,找到一个大小可满足的空闲分区就使用

-循环首次适应算法Next Fit:从上一次找到的空闲分区 的下一个空闲区开始找

-最佳适应算法Best Fit:找一个最合适给它

-最差适应算法Worse Fit:找一个最大的给它

首次适应被认为是最好最快的,其次是循环,最差的最佳(每次分配后剩下小碎片,难再分,不得不经常压缩内存,反而浪费CPU)

碎片

内部碎片:固定分区产生

外部碎片:动态分区产生

我觉得可以这样理解,一个100平米的房间,我们做5个隔断,每个隔断里面的空闲就叫内部碎片,如果我们不做隔断,几个人共享这个房子,每个人把自己的东西放在自己的地方,这个里面的空闲地方就叫外部碎片。

四、非连续分配管理方式


分页存储管理

页面(Page):进程中的块(将一个进程的逻辑地址空间分成若干个大小相等的片,并加以编号,从0开始编制页号)。

页面大小通常是2的幂,通常是512B~8KB(出题喜欢出4KB)

页框(Page Frame):内存中的块。

外存以同样的单位进行划分也直接称为块(Block)。

地址结构

页表:为了便于在内存中找到进程的每个页面所对应的物理块,系统为每个进程建立一张页表,记录页面在内存中对应的物理块号,页表一般存放在内容中。

实际的数据结构中没有页号,只是一个存储块号的线性表,页号也就是数组下标而已。

表目也称页描述字。

若已知逻辑空间地址为A,页面大小为L,则页号P和页内地址d可按下式求(必须是10进制)

P=A/L

d=A%L

例如,逻辑空间地址是2170,页面大小是1KB,则页号为2,页内地址为122

(涉及进制转换问题,需要之后做题,遇到具体的题目具体分析)

内存分配表:系统建立一张内存分配表来记录内存中的物理块的分配情况。

由于物理块大小是固定的,所有最简单的办法是用一张位示图来构成内存分配表。

用01来表示拿些块被占用了,那些块没有被占用

地址变换机制:实现从逻辑地址到物理地址的转换,将逻辑地址中的页号转为内存地址中的块号,通过页表来完成。

逻辑地址分为页号和页内地址两部分,物理地址也一样,其中页内地址也就是所谓的偏移量,在逻辑地址和物理地址中的数值都是一样的。

然后我们要解决的就是页号之间的转换,先把页号放到页表寄存器中,若越界,则中断,反之,带入页表中,找到相应物理地址,就OK了。

具有快表的地址变换机制:由于页表是存放在内存中的,因此每次CPU存取一个数据要访问两次内存,太慢了。为了提高地址变换速度,在地址变换机制中增设一个具有并行查询能力的高速缓冲寄存器,又称”快表“(差点打成快播,汗)或联想寄存器(TLB)

两级和多级页表:因为现代操作系统的内存大小非常大,所以用一个页表存放程序的负担比较大,为此,我们引入了两级页表。

具体方法有

-采用离散分配的方式来离散安放页表(两级或多级页表)

-只将当前需要的部分页表调入内存,其余页表仍驻留在磁盘上,需要再调(虚拟内存)

两级页表:将页表分页,并离散地将各个页面分布存放在不同的物理块中,同样要为离散分配的页表在建立一张页表,称为外层页表,每个页表项中记录了页表页面的物理块号。

多级页表:为了方便查询,顶级页表最多只能有一个。

基本分段存储管理

与分页不同,分段并不给出固定的长度,而是获得段首地址和段长度,用这两个来表示所占用的空间。

段表

地址变换机制

最终的起始物理地址=基址+位移量

把段号放入控制寄存器,若越界则中断,反之带入段表,求得其段长和基址,由基址和位移量得出其最终的起始物理地址。

分页和分段的主要区别:分页是OS干的,分段更好的满足了用户的需要。分页是一个一维的结构,分段是二维。页的大小固定且由系统觉得,段的长度不确定,取决于用户所编写的程序。分页无外部碎片,分段有。分页提高内存利用率,分段便于信息保护和共享,方便用户使用。

段页式管理方式


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

推荐阅读更多精彩内容

  • 前段时间看了进程管理,觉得对编程简直大有裨益,至少对于多线程编程方面,对系统的进程管理有了非常深刻的理解,看来还是...
    KevinCool阅读 1,159评论 0 1
  • >计算机系统中有几类存储设备:cache、内存、外存。cache的存取速度最高,可以和CPU匹配,因此其代价最高,...
    一生信仰阅读 1,139评论 0 0
  • 操作系统对内存的管理 没有内存抽象的年代 在早些的操作系统中,并没有引入内存抽象的概念。程序直接访问和操作的都是物...
    Mr槑阅读 16,699评论 3 24
  • 内存管理 objectsto provide a detailed description of various ...
    woodsouthmmm阅读 575评论 0 0
  • 不要触摸我的脸 我正在敷着一张暗黑的膜 微笑的涟漪会裂开伤痕 不要触摸我的胸口 攀爬过的理想瘦骨嶙峋 弯弓搭箭的刺...
    李唐的小诗阅读 157评论 0 2