精华内容
下载资源
问答
  • 后来人们引入了覆盖技术,用来解决”程序大小超过物理内存总和”的问题 覆盖技术的思想:就是将程序分为多个段(多个模块), 常用的段常驻内存,不常用的段的需要调入内存内存中分为一个固定区 和若干个覆盖区...

    首先,我们要先了解清楚的问题是,为什么会出现内存扩充?这个可以思考一下

    好,开始正文:

    覆盖技术:

    早起的计算机内存很小,比如IBM推出的第一台PC机最大只支持1MB大小的内存。因此经常会出现内存大小不够的情况。

    后来人们引入了覆盖技术,用来解决”程序大小超过物理内存总和”的问题

    覆盖技术的思想:就是将程序分为多个段(多个模块),

    常用的段常驻内存,不常用的段的需要调入内存。

    内存中分为一个固定区 和若干个覆盖区

    常用的段呢存储在固定区,调入后就不会再调出(除非结束运行)

    不常用的段放在覆盖区  需要用到的时候调入内存,用不到的时候调出内存

    从下图:

    以上面这张图为例,main方法是必须要使用到的,必然会存储在固定去,但是B 和C是两个分支,不可能同时执行,这个时候,就会把这两个程序存储在覆盖区域,

    执行谁的时候,就会把那一个调入内存,另一个调出内存。同理,下面的分支同上。

     

    必须由程序员声明覆盖结构,操作系统完成自动覆盖。缺点:对用户不透明,增加了用户变成负担。

    覆盖技术只用于早起的操作系统,现在的操作系统已经不在使用。

     

    交换技术:

    交换技术的设计思想:内存空间级转哪行的时候,系统将内存中某些进程暂时换出外存,把外村中某些已具备 运行条件的进程换入内存(进行在内存与磁盘间动态调度)

     

    暂时换出外村等待的进程状态为挂起状态(挂起态 suspend)

    挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态

    看一下进程状态转换图:

    每产生新的思想和新的方式的时候,肯定会有新问题的出现,那下面几个问题就是需要去思考的几个问题:

    1.应该在外存(磁盘)的什么位置保存被换出的进程?

    2.什么时候应该进行交换

    3.应该换入换出哪些进程?

     

    1.具有交换功能的操作系统中,通常会把磁盘分为两个区,一个是对换区,一个是文件去两部分。文件区呢主要来存储文件,主要追求存储空间的利用率,因此

    对文件区空间的管理采用离散分配方式。

    对换区空间只占磁盘空间的一小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响系统的整体速度,因此对换区空间的管理主要追求的事换入换出的速度,

    因此通常对换区采用连续分配方式。总之就是,对换区的I/O速度比文件区的更快。

    2.交换通常在许多进程运行且内存吃紧的时候进行的,而系统负荷降低就暂停。

    例如:在发现许多进程运行时经常发生缺页,就说明内存吃紧,此时可以换出一些进程;

    如果缺页率明显下降,就可以暂停换出、

    3.可优先换出阻塞进程,可换出优先级低的进程,为了防止优先级低的进程在被调入内存后很快又被换出,有的系统还会考虑进程在内存的驻留时间…

    Pcb会常驻内存,不会被换出外存,因为进程的换入换出等相关位置和状态都会存储在pcb中。

    展开全文
  • 深入理解内存(3):内存交换技术,虚拟内存 2013-01-15 21:14 1560人阅读 评论(0) 收藏 举报 分类: 3) C++(59) 1)IT Related(21) 版权声明:本文为博主原创文章,未经博主允许...

    深入理解内存(3):内存交换技术,虚拟内存

    1560人阅读 评论(0) 收藏 举报
    分类:

    我们知道当多进程在内存中共存时,如果内存足够大都够用,大家相安无事自然是最理想的事了.不过现实往往没那么美好.有些时候内存会满了,不够用了.此时必须将进程从内存移到硬盘中去.有空间时可能又会被移回内存来.专业点的说法叫 滚出(roll-out),滚进(roll-in).或者叫换出,换入.

     

    在进行换出,换入时你可能会想到两种方法

    (1)以进程为单位换出换进,这是最简单最容易想到的.但是显然不够灵活,因为一个进程所需的内存空间较大.所以这种交换技术现在用的不多

    (2)只交换进程的一部分. 通过页式或段式内存管理先把进程的虚拟地址空间划分为若干页面或段,这样交换时就可就交换页或段.

     

    页式存储管理

    所谓分页就是把进程的虚拟地址空间划分成大小均匀的一页页的(实际上就是一块块的,把进程切成几小块罢了),比如一页是1K,然后把物理内存也划分成一页页的.然后再把两者映射起来.如下图.哎发现有时说一堆话学不如一个图顶用,下面的图都是我们从别处拷来的,图片原地址http://www.doc88.com/p-982340562158.html

     

    当然这个映射关系的信息肯定要保存在哪.都保存在寄存器中.然后通过逻辑地址找物理地址的流程如下图

     

     

     

    段式存储管理

    分页时,就是不管三七二十一,都一刀切,把程序切成均匀的一页页的.但我们知道程序实际运转时是成为很多模块的,比如一个函数可能是一个模块.如果按程序的逻辑结构来分成更小的组成部分可能更合理.因为程序执行时也可以那样分成一个个小的单位去执行的嘛.这里我们把程序的更小单位叫作业

    不过分段存储管理其实跟分页管理大的思想理念是一样的,都是把程序分成更小的单位嘛,便于交换而已.只不过分段不是均匀分成固定大小的页,而是根据实际情况分在大小不均的段.此时由于段大小不一,所以除了知道每个段的开始地址还必须要有段表长度的信息.

     

    逻辑地址与物理地址转换如下图

     

     

     

    分页与分段结合

    分页与分段自然是各有好处.分段如果每段太大了自然不太好,那还不如干脆把整个程序交换出去得了,不用整得这么麻烦

    于是有人想着把这两种方法结合起来,叫段页式存储管理.你要以在一段内再使用分页技术

     

     

    虚拟内存

    我们以前讲了在32的windows上,每个程序运行时都会分配2G的虚拟地址空间.就算你调大的话也最多就3G.从这句话里我们可以延伸出这样一些结论.

    1.由于32的系统寻址空间只有4G,所以你整个大于4G的内存完全是浪费资源.系统只会用到其中的4G,多出来的根本不会去用.

    2.你可能想着每个进程都是2G的虚拟地址空间,那一个进程加载进内存岂不是会把内存塞满了啊.实际上不会的,因为一来嘛分配给你2G地址空间.你不一定用这么多,可能只用10M,这样加载到内存的时候只加载你实际用的.另外就是不会一次把所有进程需要的内存分配下来然后把程序加载进来,而只是加载暂时需要的程序代码或数据

    3.因为每个进程地址空间最大也只能整个3G出来.所以如果你的进程一跑时需要4G的地址空间才够用.那你的电脑肯定没法支持的.所以如果一些大型游戏需要内存特别多,你32的系统不管怎么整就玩不了.

     

    另外你就肯定会有疑问. 过去个几年我们买电脑时貌似内存很多都512M,1G就算多了.然后嘛基本是32的系统.那如果某个程序实际有用到1G内存咋整? 因为虽然说程序中分配时是用的虚拟地址空间,但如果你在那2G的虚拟地址空间中实际有用到1G,最后就要映射到实际内存中去的啊.而且你1G的内存地址可是不能出现重复.这样那512内存肯定不够用的.

    后面就出现了个虚拟内存的概念.就是划出一部分硬盘来当作内存用.当在虚拟内存空间中实际用到的内存大于物理内存时需要用到虚拟内存.在windows中可以在Advanced system settings那里面去设置虚拟内存的大小.不管如果是32位的话虚拟内存加上实际内存肯定也不能大于4G,不然多出来的那部分也是没有用处的.

    假如还是上面的例子,512M内存,然后有1G的进程.你于是可以弄个1G的虚拟内存.然后映射的时候,先在实际的内存中映射,可能除开系统需要的一部分外就剩下300了.于是就先映射这300的内存,剩下的再去虚拟内存中映射.

    反正你的用的时候只要发个逻辑地址过去.剩下的事就不用管,操作系统有个MMU(memory management unit),里面会有个页表.反正你输入逻辑地址它最终给你转换成物理内存地址或硬盘地址.

    至于具体细节比较麻烦的.大概思路是,进程一般会采取分页技术,分成大小一样的很多页,每页有编号.然后页表里面会把你每页对应内存中具体的一块内存.当超过那300的实际上就对应于虚拟内存中去了.(实际上就是硬盘上的一个swp文件),肯定也有标志信息表明这部分是在硬盘上. 于是当进程运行起来时,需要用到某个地址时就映射到虚拟内存中时就会出现所谓的缺页,那页不在内存中嘛,于是就需要去硬盘上把数据读进内存来,如果内存满了就需要置换出去一些页. 所以你设置了虚拟内存,最后如果真的会有用到,那你会看到硬盘转的很快,然后程序运行速度会变慢.硬盘的操作比内存慢很多

    展开全文
  • 主要介绍了linux swap交换内存扩容的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 内存覆盖和内存交换

    千次阅读 2018-07-12 15:32:32
    覆盖和交换技术是在多道程序环境下用来扩充内存的两种方法。覆盖技术主要用在早期的操作系统中,而交换技术则在现代操作系统中仍具有较强的生命力。1、内存覆盖(Overlay)在早期的计算机系统中,主存容量很小。虽然...

    覆盖交换技术是在多道程序环境下用来扩充内存的两种方法。

    覆盖技术主要用在早期的操作系统中,而交换技术则在现代操作系统中仍具有较强的生命力。

    1、内存覆盖(Overlay)

    在早期的计算机系统中,主存容量很小。虽然主存中仅存放一道用户程序,但是存储空间放不下用户进程的现象也经常发生。这一矛盾可以用覆盖技术来解决。覆盖的基本思想是:由于程序运行时并非任何时候都要访问程序及数据的各个部分(尤其是大程序), 因此可以把用户空间分成一个固定区若干个覆盖区。将经常活跃的部分放在固定区,其余部分按调用关系分段。首先将那些即将要访问的段放入覆盖区,其他段放在外存中,在需要调用前,系统再将其调入覆盖区,替换覆盖区中原有的段。

    ----  覆盖技术的实现是把程序划分为若干个功能上相对独立的程序段,按照其自身的逻辑结构使那些不会同时运行的程序段共享同一块内存区域。程序段先保存在磁盘上,当有关程序的前一部分执行结束后,把后续程序段调入内存,覆盖前面的程序段。

    ----  所谓覆盖,就是把一个大的程序划分为一系列覆盖,每个覆盖就是一个相对独立的程序单位,把程序执行时并不要求同时装入内存的覆盖组成一组,称为覆盖段一个覆盖段内的覆盖共享同一存储区域该区域成为覆盖区,它与覆盖段一一对应。显然,为了使一个覆盖区能为相应覆盖段中的每个覆盖在不同时刻共享,其大小应由覆盖段中的最大覆盖来确定。

    ---- 覆盖技术要求程序员必须把一个程序划分为不同的程序段,并规定好它们的执行和覆盖顺序,操作系统根据程序员提供的覆盖结构来完成程序段之间的覆盖。

    例如,一个用户程序由6个模块组成,下图给出了各个模块的调用关系,Main模块是一个独立的段,其调用A和B模块,A和B是互斥被调用的两个模块。在A模块执行过程中,调用C模块;而在B模块执行过程中,它可能调用D或E模块(D和E模块也是互斥被调用的)。为该用户程序建立的覆盖结构如下:Main模块是常驻段,其余部分组成两个覆盖段。

           

    由以上推理可知,A和B模块组成覆盖段1,C、D和E组成覆盖段2。为了实现真正覆盖,相应的覆盖区应为每个覆盖段中最大覆盖的大小。覆盖技术的特点是打破了必须将一个进程的全部信息装入主存后才能运行的限制,但当同时运行程序的代码量大于主存时仍不能运行。

    2、内存交换(Swapping)

    交换(对换)的基本思想是:

    ---- 把处于等待(阻塞)状态(或在CPU调度原则下被剥夺运行权利)的程序(进程)从内存移到辅存(外存),把内存空间腾出来,这一过程又叫换出。把准备好竞争CPU运行的程序从辅存移到内存,这一过程又称为换入中级调度(策略)就是釆用交换技术。

    1)对换的引入

    在多道程序环境下,一方面,在内存中的某些进程由于某事件尚未发生而被阻塞运行,但它却占用了大量的内存空间,甚至有时可能出现在内存中所有进程都被阻塞而迫使CPU停止下来等待的情况。另一方面,却又有着许多作业在外存等待,因无内存而不能进入内存运行的情况。显然这是对系统资源的一种严重浪费,使系统吞吐量下降,于是增设了对换(交换)设施。

    ----- 所谓“对换”,是指把内存中暂时不能运行的进程或者暂时不用的程序和数据调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程调入内存。

    ----- 如果对换是以整个进程为单位的,便称之为“整体对换”或“进程对换”。解决内存紧张的问题。

    ----- 如果对换是以“页“或”段“为单位进行的,则分别称之为”页面对换“或”分段对换“。为了实现进程对换,系统必须能实现3个方面的功能:对换空间的管理、进程的换出、进程的换入。

    2)对换空间的管理

    在具有对换功能的OS中,通常把外存分为文件区对换区。前者用于存放文件,后者用于存放从内存换出的进程。对换区采用的是连续分配的方式(考虑到对换的速度)。

    3)进程的换出与换入

    换出:每当一进程由于创建子进程而需要更多的内存空间,但又无足够的内存空间等情况发生时,系统应将某进程换出。系统首先选择处于阻塞状态优先级最低的进程作为换出进程,然后启动磁盘,将该进程的程序和数据传送到磁盘的对换区。若传送过程未出现错误,便可回收该进程所占用的内存空间,并对该进程的进程控制块做相应的修改。

    换入:把外存交换区中的数据和程序换到内存中。系统应定时的查看所有进程的状态,从中找出”就绪“状态但已换出的进程。将其中换出时间最久(换出到磁盘上)的进程作为换入进程,将之换入。直至已无可换入的进程或无可换出的进程为止。交换的特点是打破了一个程序一旦进入主存便一直运行到结束的限制,但运行的进程大小仍受实际主存的限制。

    ---- 与覆盖技术相比,交换不要求程序员给出程序段之间的覆盖结构,而且交换主要是在进程或作业之间进行;而覆盖则主要在同一个作业或进程中进行。另外,覆盖只能覆盖与覆盖程序段无关的程序段。

    展开全文
  • @覆盖交换技术以及虚拟内存的区别

    @覆盖交换技术以及虚拟内存的区别

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 交换技术

    千次阅读 2018-05-03 09:41:10
    如果计算机物理内存足够大,可以保存所有进程,那么之前提及的...a、交换技术,即把一个进程完整调入内存,使该进程运行一段时间,然后把它存回磁盘。空闲进程主要存储在磁盘上,所以当它们不运行时就不会占用内存...
  • Linux SWAP内存交换机制基本概念

    万次阅读 2017-04-10 21:36:30
    Linux SWAP内存交换机制基本概念tags: Linux源码Linux SWAP内存交换机制基本概念 摘要 前序知识 内存交换要做什么 硬件上给予的支持 下面假定场景更好的叙述 Linux中的实现 数据什么时候跑到磁盘上面去的 什么时候换...
  • 操作系统课堂笔记七-交换技术

    千次阅读 2019-03-08 03:25:50
    文章目录交换技术内存扩充技术覆盖技术 交换技术 为什么需要交换技术? 就是当我们内存不足以装载运行程序的时候, 或者剩余内存很小的时候, 怎么使得进程跑起来 内存扩充技术 内存紧缩技术 将碎片合并, 留出更...
  • Linux的内存回收和交换

    千次阅读 2019-07-18 08:01:02
    前言Linux的swap相关部分代码从2.6早期版本到现在的4.6版本在细节之处已经不少变化。本文讨论的swap基于Linux4.4内核代码。Linux内存管理是一套...
  • 虚拟存储技术和交换技术的区别

    千次阅读 多人点赞 2020-06-08 23:22:14
    虚拟存储技术和交换技术很像,乍一看都是换入换出,把暂时不需要用的数据换出内存,将需要用到的数据换入内存,从而实现逻辑上内存的扩充。二者之间的区别是,虚拟存储技术是在一个作业运行的过程中,将作业的数据...
  • 虚拟机内存交换学习个人记录

    千次阅读 2019-11-05 23:18:12
    最近在玩虚拟机,看到了VM15选项中设置内存不能过...我想了一下,这种东西应该前辈发表过吧,我在百度上一搜,发现不止虚拟机会发生内存交换,很多情况也会。但没有一篇搜索结果用的,抨击一波百度,明天Google一...
  • 虚拟内存交换空间

    千次阅读 2018-02-23 11:47:03
    交换内存交换空间是虚存使用的一部分物理硬盘。 虚存是操作系统为了更高效的使用物理内存提出的概念,应用程序操作的地址是虚存的地址(对应地址空间的概念),内核提供将虚存地址翻译为物理内存地址的功...
  • 本节主要讲覆盖技术和交换技术,虚拟存储技术在后续小节会详细展开。 实现内存空间扩充的技术 一、覆盖技术 用于解决“程序大小超过物理内存总和”的问题。 思想: 将程序分为多个段,常用的段常驻在内存,不...
  • 数据交换技术概述

    千次阅读 2018-07-29 21:49:21
    电路(线路)交换(Circuit Switching) 存储-转发(Store-and-forward) 概述 交换,即是集中和转接。 如果网络分布范围广,用户多,拓扑结构复杂。多个用户间的通信简单地采用点对点来直接连接,显然会导致...
  • 文章目录目录基于局部性原理实现的内-外存交换技术局部性原理Swap 交换分区 基于局部性原理实现的内-外存交换技术 虚拟存储器的实现思想就是将内存作为辅存的缓存,使得计算机系统拥有了 主存+辅存(交换空间) 大小...
  • 操作系统—覆盖,交换技术和虚拟存储技术的区别
  • 覆盖与交换技术是在多道程序环境下用来扩充内存的两种方法。 内存覆盖 早期的计算机系统中,主存容量很小,虽然主存中仅存放一道用户程序,但是存储空间放不下用户进程的现象也经常发生,这一矛盾可以用覆盖技术来...
  • 内存管理之覆盖与交换

    千次阅读 2018-04-01 11:22:45
    覆盖与交换覆盖 追根溯源——早期计算机系统内存容量小,虽然内存中只有一道用户程序,内存存储空间仍可能放不下。覆盖的基本思想是:程序运行时并非任何时候都要访问程序及数据的各个部分,因此可以把用户空间...
  • Java基础知识面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:11:27
    原理是什么Java语言哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类何不同?Java应用程序与小程序之间那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的...
  • 首先明白交换技术和覆盖技术是用来干嘛的? 相同点:都是为了内存扩张 ...交换技术:**内存紧张是时,把内存里的某些进程腾出内存空间,再换进某些进程。磁盘分为文件区和交换区。换出的进程放在...
  • 一、数据交换技术 是什么 数据交换技术是实现网络边缘的主机在大规模网络核心进行数据交换的基础 网络边缘:连接到网络的所有端设备(包含主机) 网络核心:交换节点(如路由器)及传输介质(通信链路)的集合,也称为...
  • 覆盖技术和交换技术

    千次阅读 2019-10-06 21:35:13
    如果程序太多,超过了内存的容量,可以采用自动的交换技术,把暂时不能执行的程序送到外存中 自动的虚拟存储技术 如果想在有限的容量的内存中,以更小的页粒度为单位装入更多更大的程序,可以采用自动的虚拟存储技术...
  • 3.1.3 操作系统覆盖技术与交换技术的思想

    千次阅读 多人点赞 2020-04-23 18:27:57
    文章目录0.思维导图1.覆盖技术3.交换技术 0.思维导图 1.覆盖技术 3.交换技术 回忆复习一下进程调度
  • 三种交换技术及其比较

    万次阅读 多人点赞 2016-02-23 11:27:34
    “电路交换”(Circuit Switching)又称为“线路交换”,是一种面向连接的服务。两台计算机通过通信子网进行数据电路交换之前,首先要在通信子网中建立一个实际的物理线路连接。最普通的电路交换例子是电话系统。...
  • Linux下物理内存和虚拟内存交换机制

    千次阅读 2016-03-17 22:29:39
    Linux下物理内存和虚拟内存交换机制   Vmstat是Virtual Memory Statistics虚拟内存统计缩写: 物理内存是计算机内存的大小,从物理内存中读写数据比硬盘中读写数据要快很多,而内存是有限的,所以就了物理内存和...
  • 操作系统笔记(五)覆盖和交换,虚拟内存

    万次阅读 多人点赞 2017-02-09 00:09:30
    5-3 交换技术 5-4,5 虚拟内存5-1 虚拟内存:起因内存越来越不够用,理想中的存储器是更大,更快,更便宜的非易失存储器。 为了有效管理物理内存,采用了分段,分页,也许在这个基础上可以达到更大更快的理想情况...
  • 利用C#语言以及内存映射技术,编写了一个程序,可以实现进程间数据共享。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 164,897
精华内容 65,958
关键字:

有内存交换技术