操作系统:内存管理(概念)

对于计算机系统而言,操作系统充当着基石的作用,它是连接计算机底层硬件与上层应用软件的桥梁,控制其他程序的运行,并且管理系统相关资源,同时提供配套的系统软件支持。对于专业的程序员而言,掌握一定的操作系统知识比不可少,因为不管面对的是底层嵌入式开发,还是上层的云计算开发,都需要使用到一定的操作系统相关知识。

  • 内存管理有哪几种方式
  • 分段和分页的区别是什么
  • 什么是虚拟内存
  • 什么是内存碎片什么是内碎片什么是外碎片
  • 虚拟地址逻辑地址线性地址物理地址有什么区别
  • Cache替换算法有哪些

内存管理有哪几种方式

常见的内存管理方式有块式管理、页式管理、段式和段页式管理。

(1)块式管理:把主存分为一大块一大块的,当所需的程序片段不在主存时就分配一块主存空间,把程序片段load入主存,就算所需的程序片段只有几个字节也只能把这一块分配给它。这样会造成很大的浪费,平均浪费了50%的内存空间,但是易于管理。

(2)页式管理:把主存分为一页一页的,每一页的空间要比一块一块的空间小很多,这种方法的空间利用率要比块式管理高很多

(3)段式管理:把主存分为一段一段的,每一段的空间又要比一页一页的空间小很多,这种方法在空间利用率上又比页式管理高得多,但是也有另外一个缺点。一个程序片段可能会被分为几十段,这样很多时间就会被浪费在计算每一段的物理地址上。

(4)段页式管理:结合了段式管理和页式管理的优点。把主存先分成若干段,每个段又分成若干页。段页式管理每取一护具,要访问3次内存。

分段和分页的区别是什么

页是信息的物理单位,分页是为了实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。

段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进程编辑时,根据信息的性质来划分。

分页的作业地址空间是一维的,即单一的线性空间,程序员只需利用一个记忆符,即可表示一地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。

什么是虚拟内存

虚拟内存简称虚存,是计算机系统内存管理的一种技术。它是相对于物理内存而言的,可以理解为“假的”内存。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),允许程序员编写并允许比实际系统拥有的内存大得多的程序,这使得许多大型软件项目能够在具有有限内存资源的系统上实现。而实际上,它通常被分割成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。虚存比实存有以下好处:

(1) 扩大地址空间。无论段式虚存,还是页式虚存,或是段页式虚存,寻址空间都比实存大。

(2)内存保护。每个进程运行在各自的虚拟内存地址空间,互相不能干扰对方。另外,虚存还对特定的内存地址提供写保护,可以防止代码或数据被恶意篡改

(3)公平分配内存。采用了虚存之后,每个进程都相当于有太阳大小的虚存空间。

(4)当进程需要通信时,可采用虚存共享的方式实现。

不过,使用虚存也是有代价的,主要表现在以下几个方面:

(1)虚存的管理需要建立很多数据结构,这些数据结构要占用额外的内存

(2)虚拟地址到物理地址的转换,增加了指令的执行时间

(3)页面的换入换出需要磁盘I/O,这是很耗时间的。

(4)如果一页中只有一部分数据,会很浪费内存。

什么是内存碎片?什么是内碎片?什么是外碎片?

内存碎片是由于多次进行内存分配造成的,当进行内存分配时,内存格式一般为:(用户使用段)(空白段)(用户使用段),当空白段很小的时候可能不能提供给用户足够需要的空间,可能夹在中间的空白段的大小为5,而用户需要的内存大小为6,这样会产生很多的间隙造成使用效率的下降,这些很小的空隙叫碎片。

内碎片:分配给程序的存储空间没有用完,有一部分是程序不使用,但其他程序也没法用的空间。内碎片是处于区域内部或页面内部的存储块,占有这些区域或页面的进程并不使用这个存储块,而在进程占有这块存储块时,系统无法利用它,直到进程释放它,或进程结束时,系统才有可能利用这个存储块。。

由于空间太小,小到无法给任何程序分配(不属于任何进程)的存储空间是外碎片。外部碎片是处于任何已分配区域或页面外部的空闲存储块,这些存储块的综合可以满足当前申请的长度要求,但是由于它们的地址不连续或其他原因,使得系统无法满足当前申请。

内碎片和外碎片是一对矛盾体,一种特定的内存分配算法,很难同时解决好内碎片和外碎片问题,只能根据应用特点进行取舍。。。

虚拟地址、逻辑地址、线性地址、物理地址有什么区别

虚拟地址是指由程序产生的由段选择符合段内偏移地址组成的地址。这两部分组成的地址并没有直接访问物理内存,而是要通过分段地址的变换处理后才会对应到相应的物理内存地址。

逻辑地址指由程序产生的段内偏移地址。有时直接把逻辑地址当成虚拟地址,两者并没有明确的界限。。

线性地址是指虚拟地址到物理地址变换之间的中间层,是处理器可寻址的内存空间(称为线性地址空间)中的地址。程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段基址就生成了一个线性地址。如果启用了分页机制,那么线性地址可以再经过变换产生物理地址。若没有采用分页机制,那么线性地址就是物理地址。

物理地址是指限制CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果。

虚拟地址到物理地址的转化方法是与体系结构相关的,一般有分段与分页两种方式。以x86CPU为例,分段分页都是支持的。内存管理单元负责从虚拟地址到物理地址的转化。逻辑地址是段标识+段内偏移量的形式,MMU(Memory Management Unit内存管理单元)通过查询段表,可以把逻辑地址转化为线性地址。如果CPU没有开启分页功能,那么线性地址就是物理地址;如果CPU开启了分页功能,MMU还需要查询页表来将线性地质转化为物理地址:逻辑地址(段表)-》线性地址(页表)-》物理地址。

映射是一种多对一的关系,即不同的逻辑地址可以映射到同一个线性地址上;不同的线性地址也可以映射到同一个物理地址上。而且,同一个线性地址在发生换页以后,也可能被重新装载到另外一个物理地址上,所以这种多对一的映射关系也会随时间发生变化。。

Cache替换算法有哪些

数据可以存放在CPU或者是内存中。CPU处理快,但是容量小;内存容量大,但是转交给CPU处理的速度慢。为此需要Cache(缓存)来做一个折中。最有可能的数据先从内存调入Cache,CPU再从Cache读取数据,这样会快许多。然而,Cache中所存放的数据不是100%有用的。CPU从Cache总读取到有用的数据称为“命中”。

Cache替换算法有随机算法、FIFO算法、LRU算法、LFU算法和OPT算法。

(1)随机算法(RAND)。随机算法就是用随机数发生器产生一个要替换的块号,将该块替换出去,此算法简单、易于实现,而且它不考虑Cache块过去、现在及将来的使用情况。但是由于没有利用上层存储器使用的“历史信息”、没有根据访存的局部性原理,故不能提高Cache的命中率,命中率较低。

(2)先进先出(FIFO)算法。先进先出(First In First Out,FIFO)算法是将最先进入Cache的信息块替换出去。FIFO算法按调入Cache的先后决定淘汰的顺序,选择最早调入Cache的字块进行替换,它不需要记录各字块的使用情况,比较容易实现,系统开销小,其缺点是可能会把一些需要经常使用的程序可(如循环程序)也作为最早进入Cache的块替换掉,而且没有根据访存的局部性原理,故不能提高Cache的命中率。因为最早调入的信息可能以后还要用到,或者经常要用到,如循环程序。此法简单、方便,利用了主存的“历史信息”,但并不能说最先进入的就不经常使用,其缺点是不能正确反映程序局部性原理,命中率不高,可能出现一种异常现象。

(3)近期最少使用(LRU)算法。近期最少使用(Least Recently Used,LRU)算法是将近期最少使用的Cache中的信息块替换出去。该算法较先进先出算法要好一些,但此法也不能保证过去不常用将来也不常用。

LRU算法是依据各块使用的情况,总是选择那个最近最少使用的块被替换。这种方法虽然比较好地反映了程序局部性规律,但是这种替换方法需要随时记录Cache中各块的使用情况,以便确定哪个块是近期最少使用的块。LRU算法相对合理,但实现起来比较复杂,系统开销较大。通常需要对每一块设置一个称为计数器的硬件或软件模块,用以记录其被使用的情况。

实现LRU策略的方法有很多种。简单介绍计数器法、寄存器栈法及硬件逻辑比较对法的设计思路。

计数器法:缓存的每一块都设置一个计数器。计数器的操作规则如下:

  • 被调入或者被替换的块,其计数器清0,而其他的计数器则加1
  • 当访问命中时,所有块的计数值与命中块的计数值要进行比较,如果计数值小于命中块的计数值,则该块的计数值加”1”;如果块的计数值大于命中块的计数值,则数值不变。最后将命中块的计数器清为“0”
  • 需要替换时,则选择计数值最大的块被替换。

(4)最优替换算法(OPT算法)。使用最优替换算法(OPTimal replacement Algorithm)时必须先执行一次程序,统计Cache的替换情况。有了这样的先验信息,在第二次执行该程序时便可以用最有效的方式来替换,以达到最优的目的。

前面介绍的几种页面替换算法主要是以主存储器中页面调度情况的历史信息为依据的,它假设将来主存储器中的页面调度情况与过去一段时间内主存储器中的页面调度情况是相同的,显然,这种假设不总是正确的。最好的算法应该是选择将来最久不被访问的页面作为被替换的页面,这种替换算法的命中率一定是最高的,它就是最优替换算法。

要实现OPT算法,唯一的办法是让程序先执行一遍,记录下实际的页地址流情况。根据这个页地址流才能找出当前要被替换的页面。显然,这样做是不现实的。因此,OPT算法只是一种理想化的算法,然而它也是一种很有用的算法。实际上,经常把这种算法用来作为评价其他页面替换算法好坏的标准。在其他条件相同的情况下,哪一种页面替换算法的命中率与OPT算法最接近,那么它就是一种比较好的页面替换算法。

(5)最少使用算法(LFU算法 Least Frequently Used Algorithm)。选择最少访问的页面作为被替换的页面。显然,这是一种合理的算法,因为到目前为止最少使用的页面,很可能是将来最少访问的页面。该算法既充分利用了主存中页面调度情况的历史信息,又正确反映了程序的局部性。但是,这种算法实现起来非常困难,它要为每个页面设置一个很长的计数器,并且要选择一个固定的时钟为每个计数器定时计数。在选择被替换页面时,要从所有计数器中找出一个计数器值最大的计数器。

时间: 2024-10-10 15:27:19

操作系统:内存管理(概念)的相关文章

操作系统---内存管理

一.内存管理概念 1. 存储管理的功能 (1) 内存空间的分配与回收 , 包括内存的分配和共享. (2) 地址转换 : 内存管理配合硬件进行地址转换 , 把逻辑地址转换成物理地址. (3) 内存空间的扩充 : 借助于虚拟存储器或交换覆盖技术来达到扩充内存容量的目的. (4) 内存保护和共享 : 为了避免相互干扰和破坏 , 必须提供保护功能. (5) 虚地址 2. 地址重定位 [程序的装入]   在多道程序设计系统中,可用的内存空间通常被多个进程共享.通常情况下,程序员并不能事先知道在某个程序执行

操作系统 内存管理机制

参考和查阅了一下他人的资料,整理下 虚拟内存.物理内存.Swap分区.页面置换机制等基础知识 虚拟地址空间 与 物理地址空间的关系 虚拟地址由操作系统维护,由MMU可以进行转换,扩大了内存空间分页管理. 大多数使用虚拟存储器的系统都使用一种称为分页(paging)机制. 虚拟地址空间划分成称为页(page)的单位,而相应的物理地址空间也被进行划分,单位是页帧(frame),一个在磁盘,一个在内存,页和页桢的大小必须相同.在32位地址的机器,它的虚拟地址范围从0~0xFFFFFFFF(4G),而这

操作系统内存管理——分区、页式、段式管理

计算存储的层次结构: 当前技术没有能够提供这样的存储器,因此大部分的计算机都有一个存储器层次结构,即少量的非常快速.昂贵.易变的高速缓存(cache):若干兆字节的中等速度.中等价格.易变的主存储器(RAM):数百兆或数千兆的低速.廉价.不易变的磁盘.这些资源的合理使用与否直接关系着系统的效率. 1. 内存管理方法 内存管理主要包括虚地址.地址变换.内存分配和回收.内存扩充.内存共享和保护等功能. 2. 连续分配存储管理方式 连续分配是指为一个用户程序分配连续的内存空间.连续分配有单一连续存储管

嵌入式操作系统内存管理有哪几种,各有何特性

嵌入式系统所用到的内存管理机制主要有以下两种: 1.虚拟内存管理机制: 有一些嵌入式处理器提供了MMU,在MMU具备内存地址映射和寻址功能,它使操作系统的内存管理更加方便.如果存在MMU ,操作系统会使用它完成从虚拟地址到物理地址的转换, 所有的应用程序只需要使用虚拟地址寻址数据. 这种使用虚拟地址寻址整个系统的主存和辅存的方式在现代操作系统中被称为虚拟内存.MMU 便是实现虚拟内存的必要条件.虚拟内存的管理方法使系统既可以运行体积比物理内存还要大的应用程序,也可以实现“按需调页”策略,既满足了

操作系统内存管理、Cache调度策略学习

目录 0. 引言 1. 内存管理的概念 2. 内存覆盖与内存交换 3. 内存连续分配管理方式 4. 内存非连续分配管理方式 5. 虚拟内存的概念.特征及其实现 6. 请求分页管理方式实现虚拟内存 7. 页面置换算法 8. 页面分配策略 9. 页面抖动和工作集 0. 引言 在安全攻防产品的研发中,我们会大量用到cache的机制.在学习和使用cache缓存的时候,经常会遇到cache的更新和替换的问题,如何有效对cache进行清理.替换,同时要保证cache在清理后还要保持较高的命中率.通过对比我们

操作系统--内存管理方式

“碎片的内存”描述一个系统中所有不可用的空闲内存.这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用.这一问题通常都会发生,原因在于空闲内存以小而不连续方式出现在不同的位置.由于分 配方法决定内存碎片是否是一个问题,因此内存分配器在保证空闲资源可用性方面扮演着重要的角色. internal fragmentation:when memory allocated to a process is larger than requested memory, the differe

操作系统内存管理之 内部碎片vs外部碎片

外部碎片:因为行程持续地被载入与置换,使得可用的记忆体空间被分割成许多不连续的区块.虽然记忆体所剩空间总和足够让新行程执行,却因为空间不连续,导致程式无法载入执行. 内部碎片:发生在以固定长度分割区来进行配置的记忆体中当一个程式载入到固定大小的分割区时,假如程式小于分割区,则剩余的空间将无法被使用,称为内部碎片.利用聚集或分页可以消除外部碎片. "碎片的内存"描述一个系统中所有不可用的空闲内存.这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用.这一问题通常都会发

操作系统 内存管理(一)

1. 内存管理方法 内存管理主要包括虚地址.地址变换.内存分配和回收.内存扩充.内存共享和保护等功能. 2. 连续分配存储管理方式 连续分配是指为一个用户程序分配连续的内存空间.连续分配有单一连续存储管理和分区式储管理两种方式. 2.1 单一连续存储管理 在这种管理方式中,内存被分为两个区域:系统区和用户区.应用程序装入到用户区,可使用用户区全部空间.其特点是,最简单,适用于单用户.单任务的操作系统.CP/M和 DOS 2.0以下就是采用此种方式.这种方式的最大优点就是易于管理.但也存在着一些问

Linux操作系统 内存管理、用户操作和文件操作

内存管理.用户操作和文件操作 预备知识: 1.Linux系统的内存分为物理内存和虚拟内存.物理内存是指安装在计算机当中的主存储器:虚拟内存是一段虚拟的逻辑上连续的储存空间,虚拟内存是由多个内存碎片组成,只有正在使用的虚拟内存被存放在内存上,对于暂时不使用的虚拟内存空间其实是储存在外存中.虚拟内存空间地址和实际的物理内存空间地址存在某种逻辑上的关系,如果虚拟内存空间地址的内容将被使用,通过逻辑关系可以计算出此部分内容对应的实际物理内存空间,然后将内容加载到内存中.虚拟内存在一定程度上独立于物理内存

操作系统内存管理之 分页与虚存(页表、页框、内存)

一 页面与页表 1 页面 分页存储管理是将作业的逻辑地址划分为一系列同等大小的部分,称为页.并为各页加以编号,每个作业的页的编号都是从0开始的.与之类似,把可用的物理内存也划分为同样大小的连续的部分,称为块或页框.同样为块也进行标号,从0#开始.在为进程分配内存空间时,以页为单位,每个内存中的块存放一页用户作业.只要内存中有足够多的块,这些块可以相邻也可以不相邻,就可以存放整个作业了. 页面的大小对于内存利用和系统开销来说非常重要,页面太大,在作业的最后一页必然会剩余较大不能利用的空间--内碎片