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

cane 2021-11-27 原文


操作系统–内存管理方式

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

 

internal fragmentation:when memory allocated to a process is larger than requested memory, 

the difference between these two numbers is internal fragmentation.

 

external fragmentation:External fragments exists when total memory space exists to satisfy a request,

but it is not continous. storage is broken into little pieces. 

 

在内存管理中,内部碎片是已经被分配出去的的内存空间大于请求所需的内存空间。

外部碎片是指还没有分配出去,但是由于大小太小而无法分配给申请空间的新进程的内存空间空闲块。

 

固定分区存在内部碎片,可变式分区分配会存在外部碎片;

页式虚拟存储系统存在内部碎片;段式虚拟存储系统,存在外部碎片

 

为了有效的利用内存,使内存产生更少的碎片,要对内存分页,内存以页为单位来使用,最后一页往往装不满,于是形成了内部碎片。

为了共享要分段,在段的换入换出时形成外部碎片,比如5K的段换出后,有一个4k的段进来放到原来5k的地方,于是形成1k的外部碎片。

 

———————————————————————————————————

存储器是个宝贵但却有限的资源。一流的操作系统,需要能够有效地管理及利用存储器。

内存为程序分配空间有四种分配方式:

1、连续分配方式

2、基本分页存储管理方式

3、基本分段存储管理方式

4、段页式存储管理方式

 

连续分配方式

首先讲连续分配方式。连续分配方式出现的时间比较早,曾广泛应用于20世纪60~70年代的OS中,但是它至今仍然在内存管理方式中占有一席之地,原因在于它实现起来比较方便,所需的硬件支持最少。连续分配方式又可细分为四种:单一连续分配、固定分区分配、动态分区分配和动态重定位分区分配。

 

其中固定分区分配方式,因为分区固定,所以缺乏灵活性,即当程序太小时,会造成内存空间的浪费;程序太大时,一个分区又不足以容纳,致使程序无法运行。但尽管如此,当一台计算机去控制多个相同对象的时候,由于这些对象内存大小相同,所以完全可以采用这种内存管理方式,而且是最高效的。这里我们可以看出存储器管理机制的多面性:即没有那种存储器管理机制是完全没有用的,在适合的场合下,一种被认为最不合理的分配方案却可能称为最高效的分配方案。一切都要从实际问题出发,进行设计。

 

为了解决固定分区分配方式的缺乏灵活性,出现了动态分配方式。动态分配方式采用一些寻表的方式,查找能符合程序需要的空闲内存分区。但代价是增加了系统运行的开销,而且内存空闲表本身是一个文件,必然会占用一部分宝贵的内存资源,而且有些算法还会增加内存碎片。

 

可重定位分区分配通过对程序实现成定位,从而可以将内存块进行搬移,将小块拼成大块,将小空闲“紧凑”成大空闲,腾出较大的内存以容纳新的程序进程。

 

基本分页存储管理方式

连续分配方式会形成许多“碎片”,虽然可以通过“紧凑”方式将许多碎片拼接成可用的大块空间,但须为之付出很大开销。所以提出了“离散分配方式”的想法。如果离散分配的基本单位是页,则称为分页管理方式;如果离散分配的基本单位是段,则称为分段管理方式。

 

分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框(frame),也同样为它们加以编号,如0#块、1#块等等。在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片”。

 

在分页系统中,允许将进程的各个页离散地存储在内存不同的物理块中,但系统应能保证进程的正确运行,即能在内存中找到每个页面所对应的物理块。为此,系统又为每个进程建立了一张页面映像表,简称页表。在进程地址空间内的所有页,依次在页表中有一页表项,其中记录了相应页在内存中对应的物理块号。在配置了页表后,进程执行时,通过查找该表,即可找到每页在内存中的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射。

 

为了能够将用户地址空间中的逻辑地址,变换为内存空间中的物理地址,在系统中必须设置地址变换机构。地址变换任务是借助于页表来完成的。

页表的功能可由一组专门的寄存器来实现。由于寄存器成本较高,且大多数现代计算机的页表又很大,使页表项总数可达几千甚至几十万个,显然这些页表项不可能都用寄存器来实现,因此,页表大多驻留在内存中。因为一个进程可以通过它的PCB来时时保存自己的状态,等到CPU要处理它的时候才将PCB交给寄存器,所以,系统中虽然可以运行多个进程,但也只需要一个页表寄存器就可以了。

 

由于页表是存放在内存中的,这使得CPU在每存取一个数据时,都要两次访问内存。为了提高地址变换速度,在地址变化机构中增设了一个具有并行查询能力的告诉缓冲寄存器,又称为“联想寄存器”(Associative Lookaside Buffer)。

 

在单级页表的基础上,为了适应非常大的逻辑地址空间,出现了两级和多级页表,但是,他们的原理和单级页表是一样的,只不过为了适应地址变换层次的增加,需要在地址变换机构中增设外层的页表寄存器。

 

基本分段存储管理方式

分段存储管理方式的目的,主要是为了满足用户(程序员)在编程和使用上多方面的要求,其中有些要求是其他几种存储管理方式所难以满足的。因此,这种存储管理方式已成为当今所有存储管理方式的基础。

 

(1)方便编程;

(2)信息共享:分页系统中的“页”只是存放信息的物理单位(块),并无完整的意义,不便于实现共享;然而段却是信息的逻辑单位。由此可知,为了实现段的共享,希望存储器管理能与用户程序分段的组织方式相适应。

(3)信息保护;

(4)动态增长;

(5)动态链接。

 

分段管理方式和分页管理方式在实现思路上是很相似的,只不过他们的基本单位不同。分段有段表,也有地址变换机构,为了提高检索速度,同样增设联想寄存器。所以有些具体细节在这个不再赘述。

 

分页和分段的主要区别:

1、两者相似之处:两者都采用离散分配方式,且都要通过地址映射机构来实现地址变换。

2、两者不同之处:

(1)页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要而不是      用户的需要。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。

(2)页的大小固定且由系统决定,而段的长度却不固定。

(3)分页的作业地址空间是一维的,即单一的线性地址空间;而分段的作业地址空间则是二维的。

 

段页式存储管理方式

前面所介绍的分页和分段存储管理方式都各有优缺点。分页系统能有效地提高内存利用率,而分段系统则能很好地满足用户需求。我们希望能够把两者的优点结合,于是出现了段页式存储管理方式。

 

段页式系统的基本原理,是分段和分页原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。在段页式系统中,地址结构由段号、段内页号和页内地址三部分所组成。

 

和前两种存储管理方式相同,段页式存储管理方式同样需要增设联想寄存器。

 

离散分配方式基于将一个进程直接分散地分配到许多不相邻的分区中的思想,分为分页式存储管理,分段存储管理和段页式存储管理. 分页式存储管理旨在提高内存利用率,满足系统管理的需要,分段式存储管理则旨在满足用户(程序员)的需要,在实现共享和保护方面优于分页式存储管理,而段页式存储管理则是将两者结合起来,取长补短,即具有分段系统便于实现,可共享,易于保护,可动态链接等优点,又能像分页系统那样很好的解决外部碎片的问题,以及为各个分段可离散分配内存等问题,显然是一种比较有效的存储管理方式。

发表于
2014-09-14 23:59 
canexjtuzju 
阅读(447
评论(0
编辑 
收藏 
举报

 

版权声明:本文为cane原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/cane/p/3972010.html

操作系统--内存管理方式 - canexjtuzju的更多相关文章

  1. 敏捷史话(六):也许这个人能拯救你的代码 —— Robert C. Martin

    Robert C. Martin(即Bob 大叔),作为极限编程的支持者,他不仅通过演讲、出版《代码整洁之道》 […]...

  2. win7下利用ftp实现华为路由器的配置文件上传和下载 – 鸿雁中队

    win7下利用ftp实现华为路由器的配置文件上传和下载 win7下利用ftp实现华为路由器的配置文件上传和下载 […]...

  3. MySQL–将MySQL数据导入到SQL Server – 笑东风

    MySQL–将MySQL数据导入到SQL Server 随着时代的进步,社会的发展,各种技术层出不 […]...

  4. PC端体验效果最佳epub阅读器——iRead爱读书 – imsoft

    PC端体验效果最佳epub阅读器——iRead爱读书     官网:http://www.ireadhome. […]...

  5. 不识之字何其多也 – drswinghead

    不识之字何其多也 最近看《大秦帝国》一书,遇到许多不认识的字啊,且记之以自勉强。 酽 嚭 pǐ ㄆㄧˇ 大。 […]...

  6. 程序员求职之道(《程序员面试笔试宝典》)之面试笔试技巧? – anyuan9

    程序员求职之道(《程序员面试笔试宝典》)之面试笔试技巧? 目录(?)[-] 不打无准备之仗 如何获取求职信息 […]...

  7. Spring AOP 源码分析 – 筛选合适的通知器

    1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析。本文是 Spring AOP 源 […]...

  8. 说说什么是OA系统 – 冬刻忆

    说说什么是OA系统   OA系统     办公自动化(OA)是面向组织的日常运作和管理,员工及管理者使用频率最 […]...

随机推荐

  1. Java石头剪刀布小游戏

    package com.neusoft.test; import java.awt.BorderLayout; […]...

  2. apache: 503 – awildfish

    apache: 503 Any connection over Max, will get a 503 Ser […]...

  3. 什么是软件开发?

      有人问我:“什么是软件开发?”。回答这个问题前,我们需要先理解什么是软件。 一、软件定义   关于软件,有 […]...

  4. 【halcon教程资料】全网汇总如何快速、高效率学习机器视觉从入门到精通

    我以八年的视觉工程师开发的工作经验告诉你,你不要再因为学习halcon发愁了,我接触过很多学习halcon的小 […]...

  5. Netty源码分析一

    Unix网络 I/O 模型     我们都知道,为了操作系统的安全性考虑,进程是无法直接操作I/O设备的,其必 […]...

  6. 虚拟内存不足 虚拟内存怎么设置最好

    虚拟内存设置就行了,不必重装系统,2G的内存建议你虚拟内存初始大小与最大值都设置为3070MB,设置相同数值可 […]...

  7. 紫鸟超级浏览器-SeleniumAPI通信

    超级浏览器Webdriver自动化开发 一、概述 通过Webdriver实现对超级浏览器内的店铺进行,自动化控 […]...

  8. vue&Angular&React的优缺点 – H海涛

    一、Vue.js:      其实Vue.js不是一个框架,因为它只聚焦视图层,是一个构建数据驱动的Web界面 […]...

展开目录

目录导航