我不得不强调一个观点,在计算机的世界里,内存是由电平组成的,它只会根据外界来记录电平的变化。除此之外,内存什么用处都没有了。而cpu呢,它也是只会加减乘除逻辑运算而已。而这些所谓的加减与或运算当真cpu懂得吗?no no no! cpu什么都不懂,它只是展现了数字电路里与,或,非的门的特性罢了。还记得黑客帝国里,先知oracle经常说的那句话吗,“oh,no,i dont down!”  她什么都不知道。cpu与内存都是遵循一定的物理规则各司其职。对于那些非常繁杂的操作系统,应用程序了,cpu和内存一概不知。

起初,物理内存好端端的,为什么要引入虚拟内存的,百度百科里说因为RAM有时候会吃紧,需要调用硬盘来充当内存。我觉得有些欠妥。硬盘充当不了内存的。程序指令数据要想被cpu处理只能丢在内存里。 首先,人性是贪婪的,总是在不停榨取计算机的资源。我们总想尽可能多的将应用程序放到内存里。内存是有限的,住不了过多的进程。但是cpu的计算能力在那摆着,这些进程明显是不够cpu塞牙缝的。然后我们把目光集中到了进程,看看进程有没有什么可榨取的地方? 进程是由代码数据组成的,在计算机里,有个大名鼎鼎的局部性定律。就是说进程里的资源总是有一部分在使用,其它的都保持沉默,这些保持沉默的代码和数据,就跟俗话里说的 占着茅坑不拉屎的人 一个道理。 我们是不是可以设想把这些不怎么用到的指令数据,倒腾出内存,为新的进程腾出空间呢。虽然这样有些冒险,但是为了让内存资源得到充分使用,可以一试。

进程要分成两部分,一部分在内存里,一部分在硬盘里。可以说进程应该多分成几块,这样便于管理,也便于内存与硬盘交换的,总不能每次交换都交换很大的一块吧,那样会慢死。于是索性就将整个内存都分成大小相等合适的块,这就是分页管理,当然分页管理的作用不止于此。

万事万物,我们想控制它,就要能够描述它。进程也是如此,我们想让进程里被经常访问到的资源常驻内存,而不经常用的丢在硬盘里,想达到这样的一个目的,你起码要知道进程的每页的地址吧。我们用地址来管理一个进程。但是进程一部分在内存,一部分在硬盘,地址不统一,如果就这样子,进程的资源由于内存和硬盘的交换,地址随时改变,资源是一种信息,信息所表达的内容是固定的。而这个固定的事物A被分配了一个经常变的名字,你下次再去找A,怎么去找呢,是不是很麻烦。由此,我们可以将固定的事物和固定的地址结合起来。虚拟存储器就能够为进程提供不变的线性的地址。当系统没有命中的时候,会请求资源,通过虚拟存储器的线性空间来找到对应的页面,将其地址翻译成物理地址即可。

虚拟存储器的作用远不止于此,它在将线性地址翻译到物理地址的过程中,顺便保护着操作系统所盘踞的区域不被侵犯。

按需页面调度和独立的虚拟地址空间间的结合,对系统中存储器的使用和管理造成了深远的影响。此句出自 深入理解计算机系统。

还要强调一句话,自始至终,内存,cpu都在各司其职,它们根本就不懂得这些条条框框的术语。操作系统,在它们眼里也只是一串的0和1而已。

拨开云雾学习之虚拟内存相关推荐

  1. 拨开云雾学习之处理器初探

    很早很早以前,人们就希望能发明一种自动工作的装置.而处理器的目的也是如此.我们要设计出这样一种能自动工作的装置需要遵循什么原则呢? 在我看来,自动化就是一系列安排好的步骤顺序执行来完成一件事. 这里提 ...

  2. 拨开云雾学习之计算机漫游

    我们首先要确定一个真理:在内存的眼里,只有信息,只有0和1,别的它什么都不认识. 信息在内存中的表现就是0和1,也就是电平的状态了,除此之外,别无其他. 内存不知道这些信息代表了什么,它就像一个被控制 ...

  3. 内存寻址系列讲座-拨开云雾初见端倪

    关于内存寻址,内容庞杂,我们分六讲对其进行初步讲解http://www.kerneltravel.net/007.htm: 第一讲:简述x86寻址演变       第二讲:IA32寄存器简介     ...

  4. 拨开云雾:破除大数据的四大常见误区

    文章讲的是拨开云雾:破除大数据的四大常见误区,大数据概念自诞生以来,与之相关的争论之声就不绝于耳.如今似乎每一家软件供应商.咨询服务企业以及意见领袖都在以自己的理解为其进行"正确" ...

  5. 操作系统学习笔记-虚拟内存

    虚拟内存是什么呢?举个例子,在学习c语言的时候我们尝试输出过一个指针的地址,其实这里打印出来的地址就是虚拟地址,也就是说我们好像从未真正的了解过计算机,从未见过他的真实地址在内存的映射,如果你对它有兴 ...

  6. 拨开深度学习部署迷雾,还看 OpenVINO™推理引擎

    <沉默的真相>.<隐秘的角落>,这些热门的悬疑推理大戏,都来自爱奇艺的"迷雾剧场".然而,很多人可能不知道:"迷雾"成功的背后,离不开另 ...

  7. 程序员如何拨开云雾拿到高薪

    初入这个行业的Java程序员是迷茫的,处在金字塔的最底端,拿可怜的薪水,无休止的加班,被"高薪"和"码农"的代名词交替映射着,亦步亦趋的行进着,什么职业规划都是 ...

  8. Go 性能优化实战—拨开云雾,指点 Go 性能的迷津

    学习常见的调优工具,了解如何诊断实践中的性能问题,并针对这些问题进行优化. 课程目标 理解如何写出更符合计算机架构的高性能代码: 能够正确编写 benchmark 对 library 进行优化: 能够 ...

  9. 拨开云雾synchronized使用五种方式介绍

    锁的范围越小,对代码执行效率的影响最小.最好的方式就是不加锁,并发编程不一定都是非线程安全的,只有多线程共享同一实例变量才有可能会出现线程安全问题.非线程安全问题才需要加锁进行同步. 1.synchr ...

最新文章

  1. STM32固件库的安装与介绍
  2. python super 理解(一)
  3. 基于Angular创建后台数据模拟(译)
  4. GridView 移除模板列
  5. nginx(三)反向代理和负载均衡
  6. ASP.NET MVC Url中参数过长引发的问题
  7. Linux下安装配置PHP环境(下)---PHP
  8. Mybatis-学习笔记(9)Mybatis3+spring4+springMVC
  9. Android系统Google TTS 语音数据包安装步骤
  10. bootstrap-table初始数据,页面一直显示“正在努力加载数据中,请稍后“
  11. 计算机审计方法模板,计算机审计上机实验报告模板.doc
  12. 基于Windows2003实现网关-网关虚拟专用网络
  13. windows10共享移动热点(或说 电脑开WIFI),让手机连接共享的移动热点WIFI
  14. 前端 Leader 是如何带领团队和建设团队文化的
  15. STEAM上的一款电路模拟神器 — CRUMB Circuit Simulator
  16. STL(五)之智能指针剖析
  17. 计算机网络层包括哪些设备,网络层的设备有哪些
  18. Java 后端开发实践 - 项目模板(16 步)
  19. 我在阿里三年的运营经都在这儿了
  20. PyQt5教程(二):日期与时间

热门文章

  1. 地图之间经纬度转换靠谱吗
  2. linux18.04安装显卡驱动,Ubuntu18.04安装nvidia显卡驱动
  3. java 主动抛出 段错误_分段错误的原因?
  4. V3商家支付到零钱+商家支付到零钱状态查询(100免密PHP版)
  5. 山东春考计算机专业本科学校排名,山东春考大学本科排名及名单
  6. Deep Knowledge Tracing with Transformers论文阅读
  7. 评“最惨创业者”:伪装的道德,轻松绑架了契约精神
  8. 【JavaScript】
  9. 众数和中位数-华为OD
  10. 会员流失预测模型+会员特征分析模型+营销响应预测模型