虚拟内存的概念、特点以及虚拟内存的完成

传统存储治理方法的特点

上一节所评论辩论的各类内存治理战略多是为了同时将多个过程保管在内存中以便许可多道程序设计。它们都具有以下两个配合的特点:

1) 一次性

功课必需一次性全体装入内存后,方能开端运转。这会招致两种状况发作:

  • 看成业很大,不克不及全体被装入内存时,将使该功课无法运转;
  • 当少量功课请求运转时,因为内存缺乏以包容一切功课,只能使多数功课先运转,招致多道程序度的降低。

2) 驻留性

功课被装入内存后,就不断驻留在内存中,其任何局部都不会被换出,直至功课运转完毕。运转中的过程,会因等候I/O而被壅塞,能够处于临时等候形态。
由以上剖析可知,很多在程序运转中不必或临时不必的程序(数据)占领了少量的内存空间,而一些需求运转的功课又无法装入运转,显然糜费了珍贵的内存资本。

部分性道理

要真正了解虚拟内存技巧的思惟,起首必需理解盘算机中有名的部分性道理。有名的 Bill Joy (SUN公司CEO)说过:”在研讨所的时分,我常常开顽笑地说高速缓存是盘算机迷信中独一主要的思惟。现实上,髙速缓存技巧的确极大地影响了盘算机零碎的设计。“快表、 页高速缓存以及虚拟内存技巧从狭义上讲,多是属于高速缓存技巧。这个技巧所依附的道理就是部分性道理。部分性道理既实用于程序构造,也实用于数据构造(更远地讲,Dijkstra 有名的关于“goto语句无害”的论文也是出于对程序部分性道理的深入看法和了解)。
部分性道理表示在以下两个方面:

  • 工夫部分性:假如程序中的某条指令一旦履行,不久今后该指令能够再次履行;假如某数据被拜访过,不久今后该数据能够再次被拜访。发生工夫部分性的典型缘由,是因为在程序中存在着少量的轮回操作。
  • 空间部分性:一旦程序拜访了某个存储单位,在不久之后,其左近的存储单位也将被拜访,即程序在一段工夫内所拜访的地址,能够集中在必定的规模以内,这是由于指令平日是次序寄存、次序履行的,数据也普通是以向量、数组、表等方式簇聚存储的。

工夫部分性是经过快要来运用的指令和数据保管到高速缓存存储器中,并运用高速缓存的条理构造完成。空间部分性平日是运用较大的高速缓存,并将预取机制集成到高速缓存掌握逻辑中完成。虚拟内存技巧实践上就是树立了 “内存一外存”的两级存储器的构造,应用部分性道理完成髙速缓存。

虚拟存储器的界说和特点

基于部分性道理,在程序装入时,可以将程序的一局部装入内存,而将其他局部留在外存,就可以启动程序履行。在程序履行进程中,当所拜访的信息不在内存时,由操作零碎将所需求的局部调入内存,然后持续履行程序。另一方面,操作零碎将内存中临时不运用的内容换出到外存上,从而腾出空间寄存将要调入内存的信息。如许,零碎仿佛为用户供给了一个比实践内存大得多的存储器,称为虚拟存储器。
之所以将其称为虚拟存储器,是由于这种存储器实践上并不存在,只是因为零碎供给了局部装入、恳求调入和置换功用后(对用户完整通明),给用户的觉得是仿佛存在一个比实践物理内存大得多的存储器。虚拟存储器的巨细由盘算机的地址构造决议,并非是内存和外存的复杂相加。虚拟存储器有以下三个次要特点:

  • 屡次性,是指无需在功课运转时一次性地全体装入内存,而是许可被分红屡次调入内存运转。
  • 对调性,是指无需在功课运转时不断常驻内存,而是许可在功课的运转进程中,停止换进和换出。
  • 虚拟性,是指从逻辑上扩大内存的容量,运用户所看到的内存容量,弘远于实践的内存容量。

虚拟内存技巧的完成

虚拟内存中,许可将一个功课分屡次调入内存。釆用延续分派方法时,会使相当一局部内存空间都处于临时或“永世”的闲暇形态,形成内存资本的严重糜费,并且也无法从逻辑上扩展内存容量。因而,虚拟内存的实需求树立在团圆分派的内存治理方法的根底上。虚拟内存的完成有以下三种方法:

  • 恳求分页存储治理。
  • 恳求分段存储治理。
  • 恳求段页式存储治理。

不论哪一种方法,都需求有必定的硬件支撑。普通需求的支撑有以下几个方面:

  • 必定容量的内存和外存。
  • 页表机制(或段表机制),作为次要的数据构造。
  • 中缀机构,当用户程序要拜访的局部尚未调入内存,则发生中缀。
  • 地址变换机构,逻辑地址到物理地址的变换。
时间: 2024-10-06 01:24:05

虚拟内存的概念、特点以及虚拟内存的完成的相关文章

内存和硬盘、硬盘缓存和虚拟内存的概念

1.硬盘:用来存储数据的计算机配件.是非易失性储存器.平时电脑里的C盘.D盘.E盘,都是指硬盘. 所以就算你关了机,里面的数据也不会丢.其外观是一个方形的盒子,里面有盘片(像光盘一样),还有读写盘片的磁头. 2.内存:由于硬盘速度比较慢,CPU如果运行程序的时候,所有数据都直接从硬盘中读写,会非常影响效率.所以CPU会将运行软件时要用的数据一次性从硬盘调用到运行速度很快的内存,然后再CPU再与内存进行数据交换.内存是易失性存储器,只要你断了电,内存中的数据就没有了.内存本身是一块集成电路板,上面

什么是内存(二):虚拟内存

通过上一篇文章的扯淡,我们应该已经明白了存储器的层次结构,技术细节很复杂,但是思想却不难理解,因为就是很简单的缓存思想.那么本文我们开始讨论关于内存的另一个话题.虚拟内存.其实思想也是很容易理解的. 我不知道有多少人听过虚拟内存这个概念,但是虚拟内存是计算机系统最重要的概念之一,并且它成功的主要原因就是它一直在沉默的,自动的工作,换句话说,我们这些做应用的程序员根本不需要干涉它的工作过程,但是一个没追求的码农不是好的搬砖民工,所以作为一个有理想有抱负的程序员,我们还是要去理解虚拟内存,甚至可以这

第三章:存储器管理

内存管理: 存储管理的功能: ·内存空间的分配与回收,包括内存的分配和共享 ·地址转换 ·内存空间的扩充 ·存储保护   程序的装入: ·静态重定位 ·动态重定位   程序的链接: ·静态链接 ·装入时动态链接 ·运行时动态链接   逻辑地址空间:   物理地址空间:   内存保护: ·存储键保护 ·上下限保护   静态式连续分配管理方式: ·固定式分区存储管理:内存均等划分 ·可变式分区存储管理:按一定比例划分内存 动态式分配管理: 用多少分多少,时间长了会产生很多碎片   分配算法: ·首次

计算机操作系统学习笔记_8_内存管理 --虚拟内存管理

td p { margin-bottom: 0cm; }h2.western { font-family: "Liberation Sans",sans-serif; font-size: 16pt; }h2.cjk { font-family: "微软雅黑"; font-size: 16pt; }h2.ctl { font-family: "AR PL UMing CN"; font-size: 16pt; }h1 { margin-botto

辛星浅谈Redis中的虚拟内存

和大多数NoSQL一样,Redis也是使用的KV的数据存储模型,为了提高读写效率,Redis也是将KV保存在内存中,但是这样做会带来一些问题. 如果 内存足够大,那么把所有的数据都加载到内存中固然是最好的选择,那么查询操作都直接操作内存,自然是很快.但是实际情况中却更多的是只有部分数据才能加载到内存中,那么这个时候就提出来一个虚拟内存的概念. Redis中的虚拟内存和Linux中的虚拟内存不是一回事,但是其思想是一致的,就是把暂时不常用的数据从内存交换到磁盘中,从而可以把宝贵的内存腾出来用于其他

虚拟内存

额外i知识点:windows指针:near 16位  far32  huge综合.是历史遗留问题,如何让16位机扩展到链接32位机内存. 虚拟内存:概念 一个内存不能访问另一个程序的地址指向的空间. 一个程序区访问其它程序的内存空间,会导致崩溃.所以,一般都将内存直接交给系统进行管理,由系统分配给不同的程序不同的进程,此时程序中提供的就是逻辑地址,与实际上的物理地址相关联,这个过程称之为内存映射. 虚拟地址与物理地址映射的时候,会分配一个至少一个内存页的空间.

linux vmstat(虚拟内存统计)

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控.他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析.vmstat 工具提供了一种低开销的系统性能观察方式.因为 vmstat 本身就是低开销工具,在非常高负荷的服务器上,你需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat 输出结果.在学习vmstat命令前,我们先了解一下Linux系统中关于物理内存和虚拟内存相关信息. 物理内

虚拟内存机制

1.为什么要有虚拟内存在早期的计算机中,是没有虚拟内存的概念的.我们要运行一个程序,会把程序全部装入内存,然后运行.当运行多个程序时,经常会出现以下问题:1)进程地址空间不隔离,没有权限保护.由于程序都是直接访问物理内存,所以一个进程可以修改其他进程的内存数据,甚至修改内核地址空间中的数据.2)内存使用效率低当内存空间不足时,要将其他程序暂时拷贝到硬盘,然后将新的程序装入内存运行.由于大量的数据装入装出,内存使用效率会十分低下.3)程序运行的地址不确定因为内存地址是随机分配的,所以程序运行的地址

对Linux 虚拟内存和物理内存的理解以及Linux下怎样增加虚拟内存

首先,让我们看下linux虚拟内存: 第一层理解 1.         每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构 2.       一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内存空间的分配情况,哪些地址有数据,哪些地址无数据,哪些可读,哪些可写,都可以通过这个链表记录 3.       每个进程已经分配的内存