内存为程序分配空间的四种分配方式
存储器是个宝贵但却有限的资源。一流的操作系统,需要能够有效地管理及利用存储器。
内存为程序分配空间有四种分配方式:
1、连续分配方式
2、基本分页存储管理方式
3、基本分段存储管理方式
4、段页式存储管理方式 连续分配方式
首先讲连续分配方式。 连续分配方式 出现的时间比较早,曾广泛应用于20世纪60~70年代的OS中,但是它至今仍然在内存管理方式中占有一席之地,原因在于它 实现起来比较方便,所需的硬件支持最少 。连续分配方式又可细分为四种: 单一连续分配、固定分区分配、动态分区分配和动态重定位分区分配 。
其中固定分区的分配方式,因为分区固定,所以缺乏灵活性,即 当程序太小时,会造成内存空间的浪费( 内部碎片 );程序太大时,一个分区又不足以容纳,致使程序无法运行(外部碎片 )。但尽管如此,当一台计算机去控制多个相同对象的时候,由于这些对象内存大小相同,所以完全可以采用这种内存管理方式,而且是最高效的。这里我们可以看出存储器管理机制的多面性:没有那种存储器管理机制是完全没有用的,在适合的场合下,一种被认为最不合理的分配方案却可能称为最高效的分配方案。一切都要从实际问题出发,进行设计。
为了解决固定分区分配方式的缺乏灵活性,出现了 动态分配方式 。动态分配方式采用一些 寻表(Eg: 空闲链表 )的方式,查找能符合程序需要的空闲内存分区。但代价是增加了系统运行的开销,而且内存空闲表本身是一个文件,必然会占用一部分宝贵的内存资源,而且有些算法还会增加内存碎片。
可重定位分区分配通过对程序实现成定位,从而可以将内存块进行搬移,将小块拼成大块,将小空闲"紧凑"成大空闲,腾出较大的内存以容纳新的程序进程。 基本分页存储管理方式
连续分配方式 会形成许多"碎片",虽然可以通过"紧凑"方式将许多碎片拼接成可用的大块空间,但须为之付出很大开销。所以提出了" 离散分配方式 "的想法。如果 离散分配的基本单位是页 ,则称为分页管理方式 ;如果离散分配的基本单位是段,则称为分段管理方式 。
分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框(frame),也同样为它们加以编号,如0#块、1#块等等。在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为" 页内碎片 "。
在分页系统中,允许将进程的各个页离散地存储在内存不同的物理块中(所以能实现离散分配方式) ,但系统应能保证进程的正确运行,即能在内存中找到每个页面所对应的物理块。为此,系统又为每个进程建立了一张页面映像表,简称页表 。在进程地址空间内的所有页,依次在页表中有一页表项,其中记录了相应页在内存中对应的物理块号。在配置了页表后,进程执行时,通过查找该表,即可找到每页在内存中的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射。
为了能够将用户地址空间中的 逻辑地址,变换为内存空间中的物理地址 ,在系统中必须设置 地址变换机构 。地址变换任务是借助于页表来完成的。
页表 的功能可由一组专门的寄存器来实现。由于寄存器成本较高,且大多数现代计算机的页表又很大,使页表项总数可达几千甚至几十万个,显然这些页表项不可能都用寄存器来实现,因此,页表大多驻留在内存中。因为一个进程可以通过它的PCB来时时保存自己的状态,等到CPU要处理它的时候才将PCB交给寄存器,所以,系统中虽然可以运行多个进程,但也只需要一个页表寄存器就可以了。
由于 页表是存放在内存中 的,这使得CPU在每存取一个数据时,都要两次访问内存 。为了提高地址变换速度,在地址变化机构中增设了一个具有并行查询能力的高速缓冲寄存器 ,又称为"联想寄存器"(Associative Lookaside Buffer)。
在单级页表的基础上,为了适应非常大的逻辑空间,出现了两级和多级页表,但是,他们的原理和单级页表是一样的,只不过为了适应地址变换层次的增加,需要在地址变换机构中增设外层的页表寄存器。 基本分段存储管理方式
分段存储管理方式 的目的,主要是为了满足用户(程序员)在编程和使用上多方面的要求,其中有些要求是其他几种存储管理方式所难以满足的。因此,这种存储管理方式已成为当今所有存储管理方式的基础。 (1)方便编程; (2) 信息共享 :分页系统中的"页"只是存放信息的物理单位(块),并无完整的意义,不便于实现共享;然而段位却是信息的逻辑单位。由此可知,为了实现段的共享,希望存储器管理能与用户程序分段的组织方式相适应。(3)信息保护; (4) 动态增长 ;(5) 动态链接 。
分段管理方式和分页管理方式在实现思路上是很相似的,只不过他们的基本单位不同。分段有 段表 ,也有地址变换机构 ,为了提高检索速度,同样增设联想寄存器(具有并行查询能力的高速缓冲寄存器) 。所以有些具体细节在这个不再赘述。
分页和分段的主要区别:
1、两者相似之处:两者 都采用离散分配方式,且都要通过地址映射机构来实现地址变换 。
2、两者的不同之处:
(1)页是信息的 物理单位 ,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要 而不是用户的需要。段则是信息的逻辑单位 ,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要 。
(2) 页的大小固定 且由系统决定,而段的长度却不固定 。
(3)分页的作业地址空间是 一维 的,即单一的线性地址空间;而分段的作业地址空间则是二维 的。段页式存储管理方式
前面所介绍的分页和分段存储管理方式都各有优缺点。 分页系统能有效地 提高内存利用率 ,而分段系统则能很好地满足用户需求 。我们希望能够把两者的优点结合,于是出现了段页式存储管理方式。
段页式系统的基本原理,是分段和分页原理的结合,即 先将用户程序分成若干个段,再把每个段分成若干个页 ,并为每一个段赋予一个段名。在段页式系统中,地址结构由段号、段内页号和页内地址三部分组成。
和前两种存储管理方式相同,段页式存储管理方式同样需要增设联想寄存器。
离散分配方式 基于将一个进程直接分散地分配到许多不相邻的分区中的思想,分为分页式存储管理,分段式存储管理和段页式存储管理. 分页式存储管理旨在提高内存利用率,满足系统管理的需要,分段式存储管理则旨在满足用户(程序员)的需要,在实现共享和保护方面优于分页式存储管理,而段页式存储管理则是将两者结合起来,取长补短,即具有分段系统便于实现,可共享,易于保护,可动态链接等优点,又能像分页系统那样很好的解决外部碎片的问题,以及为各个分段可离散分配内存等问题,显然是一种比较有效的存储管理方式。
更多Linux内核视频教程文档资料免费领取【内核】自行获取。
内核学习网站:
Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂
哈啰出行活跃用户量,行业第一哈啰日活跃用户数量,跃居出行APP第一在出行APP中,谁的活跃用户最多?答案是哈啰。近日,移动大数据服务商极光大数据发布2022年Q3移动互联网行业数据研究报告显示,哈啰App活跃
花粉用户新选择?华为或推出Mate40Pro官翻机,外观全新文云动分析早在去年的时候,华为官方就推出了二手机业务,成色有9成新和99新可选,购买的用户依然可以享受到一年的官方质保,电池也是全新的。而如今,有消息称华为或将推出官翻机业务,对产
李玟的绝情,扯下了中国好声音的遮羞布今年的中国好声音终于结束了,这季没有想象中的热闹,哪怕请来了从不参加综艺的刘德华,还是没在热度和话题上掀起什么浪花。在收官之夜,四位导师发布的动态也颇为耐人寻味。李克勤梁静茹发的动
特斯拉再度降价,中国车企能不能跟?我简直要被特斯拉逼疯了。这是一名特斯拉车主的真实反应。他在朋友圈中发文说前几天他还沉浸在拥有特斯拉的兴奋中,过了几天就像是吃了苍蝇一样难受。这位用户遭遇了什么呢?根据特斯拉10月二
美联储暴力加息的背后,是一场关于国际金融秩序的对决加息,加息,还是加息。自从今年三月以来,美联储一路加息,联邦基准利率一路从0附近一直上升到3,而且加息的幅度也一次比一次猛烈,但3显然不是美联储的终极目标,如果参考上世纪80年代美
成都楼市还在不断下探,投资客越多的区域,崩得越惨成都现阶段,不管表面上看挂牌价数据如何,但大家必须接受事实,真实成交价格就是在跌,而且短期内,趋势还会继续下探。我们分析在这期间,不同区域的降幅不同1跌幅最大的会是不限购的房产(如
知识科普读懂个人资产认识信用卡(上篇)提及信用卡(CreditCard),相信很多人都不陌生,脑海里马上就能想到卡面丰富可以透支超前消费消费有积分利息很高等等。确实,信用卡在当今社会已经是个见怪不怪的事物,很多人手里早
涨了就要卖,跌了就要买今天的行情明显是白酒上涨带来的逼空行情。一是周末白酒协会,以茅台五粮液洋河等多家白酒企业的共同发文,呼吁白酒不要下跌。二是长久以来的下跌,之前的医药已经反弹了,但是茅台还是继续下跌
凛冬已至,就连大型商超都撑不下去了头条创作挑战赛大家上一次逛超市是什么时候呢?我们都知道这几年日子都不太好过,我家门口的街上好几家店铺不到一年的时间已经换了三次店面了,而且还有不少关了就再也没开。不仅个人店面,就连
现代年轻人不负债就不正常,这种怪象是如何产生的?推荐语众所周知,过去一直以来我国都是最喜欢存钱的国家,储蓄率最高时甚至超过了50,虽然最近几年已有所下降,但储蓄率仍保持在45左右,这目前在全球发展中国家发达国家里边都是首屈一指的
宣城市宣城。宣城,地处安徽省东南部,毗邻苏浙,地近沪杭,古属吴越。总面积12340平方公里,2021年末常住人口248。7万人。作为G60科创走廊城市之一,宣城同时是长三角城市群成员,皖