zoukankan      html  css  js  c++  java
  • 操作系统第四章 存储器管理

    一、连续分配方式

    1.单一连续分配

    内存在此方式下分为系统区和用户区,系统区仅提供给操作系统使用,通常在低地址部分;用户区是为用户提供的除系统外的内存空间。这种方式无需进行内存保护。这种方式的优点是简单、无外部碎片,可以采用覆盖技术,不需要额外的技术支持。缺点是只能用于单用户、单任务的操作系统中,有内部碎片,存储器的利用率极低。

    2.固定分区分配

    固定分区分配在划分分区时,有两种不同的方法:
    l 分区大小相等:用于利用一台计算机去控制多个相同对象的场合。
    l 分区大小不等:划分为含有多个较小的分区、适量的中等分区及少量的大分区。

      为了便于内存分配,通常将分区按大小排队,并为之建立一张分区使用表,其中个表项包括每个分区的起始地址、大小及状态。当有用户程序要装入时,便检索该表,已找到合适的分区给与分配并将其状态置为“已分配“。未找到合适分区则拒绝为该用户程序分配内存。  

      这种分区方式存在两个问题:一个程序可能太大而放不进任何一个分区中,这是用户不得不使用覆盖技术来使用内存空间;二是主存利用率低,当程序小于固定分区大小时,也占用了一个完整的内存分区空间,这样分区内部有空间浪费。这种现象成为内部碎片

    3.动态分区分配

      在进程装入内存时,根据进程的大小动态的建立分区,并使分区的大小正好适合进程的需要。

      动态分区在开始分配时是很好的,但是之后会导致内存中出现许多小的内存块。随着时间的推移,内存中会产生越来越多的碎片,内存的利用率随之下降。这种现象称之为外部碎片现象,指在所有分区外的存储空间会变成越来越多的碎片,这与固定分区中的内部碎片正好相对。克服外部碎片可以通过紧凑技术来解决。

    动态分区的分配策略,考虑以下几种算法:

    1)首次适应算法:空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。

    2)最佳适应算法:空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。

    3)最坏适应算法:有称最大适应算法,空闲分区以容量递减次序链接。找到第一个能满足要求的空闲分区,也就是挑选最大的分区。

    4)临近适应算法:又称循环首次适应算法,由首次适应算法演变而成。不同之处是分配内存时从此查找结束的位置开始继续查找。

    以上内存分区管理方法有一共同特点,即用户进程在主存中都是连续存放的。

    二、非连续分配管理方式

    固定分区会产生内部碎片,动态分区会产生外部碎片,两种技术对内存的利用率都比较低。我们希望内存的使用能尽量避免碎片的产生,这就引出了分页思想:把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位。每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。

    1.基本分页存储管理方式

    分页管理方式是从计算机的角度考虑设计的,以提高内存的利用率,提升计算机的性能,且分页通过硬件机制实现,对用户完全透明;而分段管理方式的提出则考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长及动态链接等多方面的需要。

    为了能将用户地址空间中的逻辑地址变换为内存空间中的物理地址,在系统中必须设置地址变换机构。该机构的基本任务是实现从逻辑地址到物理地址的转换。

    1.1基本的地址变换机构

     1.2 具有块表的地址变换机构

    分页系统中,CPU每次要存取一个数据,都要两次访问内存(访问页表、访问实际物理地址)。为提高地址变换速度,增设一个具有并行查询能力的特殊高速缓冲存储器,称为“联想存储器”或“快表”,存放当前访问的页表项。

    1.3 基本地址变换例子

    页式虚拟存储系统的逻辑地址是由页号和页内地址两部分组成,地址变换过程如图7-3所示。假定页面的大小为4K,图7-3中所示的十进制逻辑地址8203经过地址变换后,形成的物理地址a应为十进制。

     页号: 8203/4096 = 2;页内偏移:8203%4096= 11;物理地址:物理块号*页面大小+ 页内偏移= 28683

    2.基本分段存储管理方式

      页面是主存物理空间中划分出来的等长的固定区域。分页方式的优点是页长固定,因而便于构造页表、易于管理,且不存在外碎片。但分页方式的缺点是页长与程序的逻辑大小不相关。例如,某个时刻一个子程序可能有一部分在主存中,另一部分则在辅存中。这不利于编程时的独立性,并给换入换出处理、存储保护和存储共享等操作造成麻烦。  

      另一种划分可寻址的存储空间的方法称为分段。段是按照程序的自然分界划分的长度可以动态改变的区域。通常,程序员把子程序、操作数和常数等不同类型的数据划分到不同的段中,并且每个程序可以有多个相同类型的段。

    将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。

      在页式系统中,逻辑地址的页号和页内偏移量对用户是透明的;但在段式系统中,段号和段内偏移量必须由用户显示提供,在高级程序设计语言中,这个工作由编译程序完成。

      整个作业的地址空间由于是分成多个段,因而是二维的,亦即,其逻辑地址由段号(段名)和段内地址所组成。

    2.1 地址变换机构

     

     图4-18:物理地址 = 8 * 1024 + 100 = 8292

    3.段页式

    页式存储管理能有效的提高内存利用率,而分段存储管理能反应程序的逻辑结构并有利于段的共享。如果将这两种存储管理方法结合起来,就形成了段页式存储管理方式。

    4.分段和分页的主要区别:

    5. 优缺点的比较

    参考:https://www.cnblogs.com/-citywall123/p/12395586.html

    参考:https://blog.csdn.net/u014590757/article/details/80449199

    5.1 连续内存分配

    优点:设计简单,直接寻址,效率高

    缺点:内存利用率最低

    5.2 非连续分配

    1)分页式

    优点:内存空间利用率高,不会产生外部碎片,只会有少量的页内碎片。

    缺点:不方便按照逻辑模块实现信息的共享和保护。

    2)分段式

    优点:很方便按照逻辑模块实现信息的共享和保护。

    缺点:如果段长很大,为其分配很大的连续空间,会很不方便。另外,段式管理会产生外部碎片。

     (为了有效的利用内存,使内存产生bai更少的碎片,要对内存分页,内存以页为单位来使用,最后一页往往装不满,于是形成了内部碎片。为了共享要分段,在段的换入换出时形成外部碎片,比如5K的段换出后,有一个4k的段进来放到原来5k的地方,于是形成1k的外部碎片。)

  • 相关阅读:
    Ftp、Ftps与Sftp之间的区别
    Previous Workflow Versions in Nintex Workflow
    Span<T>
    .NET Core 2.0及.NET Standard 2.0 Description
    Announcing Windows Template Studio in UWP
    安装.Net Standard 2.0, Impressive
    SQL 给视图赋权限
    Visual Studio for Mac中的ASP.NET Core
    How the Microsoft Bot Framework Changed Where My Friends and I Eat: Part 1
    用于Azure功能的Visual Studio 2017工具
  • 原文地址:https://www.cnblogs.com/jingpeng77/p/13543779.html
Copyright © 2011-2022 走看看