拨开云雾学习之虚拟内存
我不得不强调一个观点,在计算机的世界里,内存是由电平组成的,它只会根据外界来记录电平的变化。除此之外,内存什么用处都没有了。而cpu呢,它也是只会加减乘除逻辑运算而已。而这些所谓的加减与或运算当真cpu懂得吗?no no no! cpu什么都不懂,它只是展现了数字电路里与,或,非的门的特性罢了。还记得黑客帝国里,先知oracle经常说的那句话吗,“oh,no,i dont down!” 她什么都不知道。cpu与内存都是遵循一定的物理规则各司其职。对于那些非常繁杂的操作系统,应用程序了,cpu和内存一概不知。
起初,物理内存好端端的,为什么要引入虚拟内存的,百度百科里说因为RAM有时候会吃紧,需要调用硬盘来充当内存。我觉得有些欠妥。硬盘充当不了内存的。程序指令数据要想被cpu处理只能丢在内存里。 首先,人性是贪婪的,总是在不停榨取计算机的资源。我们总想尽可能多的将应用程序放到内存里。内存是有限的,住不了过多的进程。但是cpu的计算能力在那摆着,这些进程明显是不够cpu塞牙缝的。然后我们把目光集中到了进程,看看进程有没有什么可榨取的地方? 进程是由代码数据组成的,在计算机里,有个大名鼎鼎的局部性定律。就是说进程里的资源总是有一部分在使用,其它的都保持沉默,这些保持沉默的代码和数据,就跟俗话里说的 占着茅坑不拉屎的人 一个道理。 我们是不是可以设想把这些不怎么用到的指令数据,倒腾出内存,为新的进程腾出空间呢。虽然这样有些冒险,但是为了让内存资源得到充分使用,可以一试。
进程要分成两部分,一部分在内存里,一部分在硬盘里。可以说进程应该多分成几块,这样便于管理,也便于内存与硬盘交换的,总不能每次交换都交换很大的一块吧,那样会慢死。于是索性就将整个内存都分成大小相等合适的块,这就是分页管理,当然分页管理的作用不止于此。
万事万物,我们想控制它,就要能够描述它。进程也是如此,我们想让进程里被经常访问到的资源常驻内存,而不经常用的丢在硬盘里,想达到这样的一个目的,你起码要知道进程的每页的地址吧。我们用地址来管理一个进程。但是进程一部分在内存,一部分在硬盘,地址不统一,如果就这样子,进程的资源由于内存和硬盘的交换,地址随时改变,资源是一种信息,信息所表达的内容是固定的。而这个固定的事物A被分配了一个经常变的名字,你下次再去找A,怎么去找呢,是不是很麻烦。由此,我们可以将固定的事物和固定的地址结合起来。虚拟存储器就能够为进程提供不变的线性的地址。当系统没有命中的时候,会请求资源,通过虚拟存储器的线性空间来找到对应的页面,将其地址翻译成物理地址即可。
虚拟存储器的作用远不止于此,它在将线性地址翻译到物理地址的过程中,顺便保护着操作系统所盘踞的区域不被侵犯。
按需页面调度和独立的虚拟地址空间间的结合,对系统中存储器的使用和管理造成了深远的影响。此句出自 深入理解计算机系统。
还要强调一句话,自始至终,内存,cpu都在各司其职,它们根本就不懂得这些条条框框的术语。操作系统,在它们眼里也只是一串的0和1而已。
拨开云雾学习之虚拟内存相关推荐
- 拨开云雾学习之处理器初探
很早很早以前,人们就希望能发明一种自动工作的装置.而处理器的目的也是如此.我们要设计出这样一种能自动工作的装置需要遵循什么原则呢? 在我看来,自动化就是一系列安排好的步骤顺序执行来完成一件事. 这里提 ...
- 拨开云雾学习之计算机漫游
我们首先要确定一个真理:在内存的眼里,只有信息,只有0和1,别的它什么都不认识. 信息在内存中的表现就是0和1,也就是电平的状态了,除此之外,别无其他. 内存不知道这些信息代表了什么,它就像一个被控制 ...
- 内存寻址系列讲座-拨开云雾初见端倪
关于内存寻址,内容庞杂,我们分六讲对其进行初步讲解http://www.kerneltravel.net/007.htm: 第一讲:简述x86寻址演变 第二讲:IA32寄存器简介 ...
- 拨开云雾:破除大数据的四大常见误区
文章讲的是拨开云雾:破除大数据的四大常见误区,大数据概念自诞生以来,与之相关的争论之声就不绝于耳.如今似乎每一家软件供应商.咨询服务企业以及意见领袖都在以自己的理解为其进行"正确" ...
- 操作系统学习笔记-虚拟内存
虚拟内存是什么呢?举个例子,在学习c语言的时候我们尝试输出过一个指针的地址,其实这里打印出来的地址就是虚拟地址,也就是说我们好像从未真正的了解过计算机,从未见过他的真实地址在内存的映射,如果你对它有兴 ...
- 拨开深度学习部署迷雾,还看 OpenVINO™推理引擎
<沉默的真相>.<隐秘的角落>,这些热门的悬疑推理大戏,都来自爱奇艺的"迷雾剧场".然而,很多人可能不知道:"迷雾"成功的背后,离不开另 ...
- 程序员如何拨开云雾拿到高薪
初入这个行业的Java程序员是迷茫的,处在金字塔的最底端,拿可怜的薪水,无休止的加班,被"高薪"和"码农"的代名词交替映射着,亦步亦趋的行进着,什么职业规划都是 ...
- Go 性能优化实战—拨开云雾,指点 Go 性能的迷津
学习常见的调优工具,了解如何诊断实践中的性能问题,并针对这些问题进行优化. 课程目标 理解如何写出更符合计算机架构的高性能代码: 能够正确编写 benchmark 对 library 进行优化: 能够 ...
- 拨开云雾synchronized使用五种方式介绍
锁的范围越小,对代码执行效率的影响最小.最好的方式就是不加锁,并发编程不一定都是非线程安全的,只有多线程共享同一实例变量才有可能会出现线程安全问题.非线程安全问题才需要加锁进行同步. 1.synchr ...
最新文章
- STM32固件库的安装与介绍
- python super 理解(一)
- 基于Angular创建后台数据模拟(译)
- GridView 移除模板列
- nginx(三)反向代理和负载均衡
- ASP.NET MVC Url中参数过长引发的问题
- Linux下安装配置PHP环境(下)---PHP
- Mybatis-学习笔记(9)Mybatis3+spring4+springMVC
- Android系统Google TTS 语音数据包安装步骤
- bootstrap-table初始数据,页面一直显示“正在努力加载数据中,请稍后“
- 计算机审计方法模板,计算机审计上机实验报告模板.doc
- 基于Windows2003实现网关-网关虚拟专用网络
- windows10共享移动热点(或说 电脑开WIFI),让手机连接共享的移动热点WIFI
- 前端 Leader 是如何带领团队和建设团队文化的
- STEAM上的一款电路模拟神器 — CRUMB Circuit Simulator
- STL(五)之智能指针剖析
- 计算机网络层包括哪些设备,网络层的设备有哪些
- Java 后端开发实践 - 项目模板(16 步)
- 我在阿里三年的运营经都在这儿了
- PyQt5教程(二):日期与时间
热门文章
- 地图之间经纬度转换靠谱吗
- linux18.04安装显卡驱动,Ubuntu18.04安装nvidia显卡驱动
- java 主动抛出 段错误_分段错误的原因?
- V3商家支付到零钱+商家支付到零钱状态查询(100免密PHP版)
- 山东春考计算机专业本科学校排名,山东春考大学本科排名及名单
- Deep Knowledge Tracing with Transformers论文阅读
- 评“最惨创业者”:伪装的道德,轻松绑架了契约精神
- 【JavaScript】
- 众数和中位数-华为OD
- 会员流失预测模型+会员特征分析模型+营销响应预测模型