操作系统中有虚拟内存与物理内存的概念。
首先理解一下什么叫物理内存?什么叫虚拟内存?
物理内存是指由于安装内存条而获得的临时储存空间。主要作用是在计算机运行时为操作系统和各种程序提供临时储存。常见的物理内存规格有256M、512M、1G、2G等,当物理内存不足时,可以用虚拟内存代替。
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
在虚拟内存出现之前,程序寻址用的都是物理地址,因此程序能寻址的范围是有限的,具体程序可以寻址的范围有多大取决于CPU的地址线条数。比如在32位平台下,寻址的范围是2^32也就是4G,并且这是固定的,如果没有虚拟内存,且每次开启一个进程都分配出来4G的物理内存,就会出现很多问题:
为了解决上述问题,于是就出现了虚拟内存。
一个进程运行时会被分配4G的虚拟内存。 进程有了虚拟内存后,每个进程都认为自己拥有4G的内存空间,当然这只是每个进程认为的。但实际上,虚拟内存对应的实际物理内存,可能只对应的分配了一点点的物理内存,实际使用了多少内存,就会对应多少物理内存。
进程得到的这4G虚拟内存是一个连续的地址空间(这也只是进程认为),而实际上,它的数据是存储在多个物理内存碎片的,还有一部分存储在外部磁盘存储器上,在需要时将数据交换进物理内存。
进程开始要访问一个地址,它可能会经历下面的过程
页置换采用如下方法:如果没有空闲帧,那么就查找当前没有使用的帧,将其释放。
(1)查找所需页在磁盘上的位置
(2)查找一个空闲帧
a,如果有空闲帧,那么就使用它,
b,如果没有,使用页置换算法选择一个牺牲帧
c,将牺牲帧的内容写到磁盘上,改变页表和帧表
(3)将所需页读入空闲帧,改变页表和帧表
(4)重新启动程序。
常见的页置换算法:
(I)FIFO页置换
最先进入的页被置换。
需要注意的是FIFO页置换会有一种特殊现象——Belady异常:对有的页置换算法,页错误率可能随着所分配的帧数的增加而增加。FIFO可能就出现这种现象。
(II)最优页置换opt
置换最长时间不会使用的页,即能预知将来的情况。但是将来的情况我们无法预知,因此这种算法难以实现。
(III)LRU页置换(最近最少使用算法least-recently-used algorithm)
FIFO使用的是页调入内存的时间,OPT使用的是将来的时间。
LRU置换为每个页关联上上一次使用的时间,当必须置换一页时,LRU选择最长时间没有使用的页。
最优置换和LRU置换都没有Belady算法(证明略)
(IIII)近似LRU页置换
页表中的每一项都关联一个引用位,每当引用一个页时,相应的位就被置位。因此我们虽然不知道引用顺序,但是我们知道哪些页被引用,哪些未被引用。近似LRU算法又有一下三种方法:
(a)附加引用位算法
通过在规定时间间隔里记录引用位。
0000000,11111111,上述两个字节分别表示在8个周期内从未被引用和一直被引用的情况。因此值最小,就是应该置换的页。
(b)二次机会算法
这种算法只有引用位本身,没有历史位,因此只有一位。当要选择一个页时,检查引用位,如为0,直接置换,如为1,则给该页二次机会,同时清0,寻找下一个0位置,所以而二次机会算法的基本算法是FIFO算法。
(c)增强型二次机会算法
通过将引用为和修改位作为一对有序位来考虑。
(0,0)——最近未使用且未修改过
(0,1)——最近未使用但修改过
(1,0)——最近使用但为修改过
(1,1)——使用且修改过
(IIIII)基于计数器的页置换
为每一个页保留一个用于记录其引用次数的计数器,因而可以形成以下两种方案:
最不经常使用页置换算法(LFU)——置换出引用次数最小的页
最常使用页置换算法(MFU)——认为最小次数的页可能刚刚调入,且还没有使用。
(IIIIII)页缓冲算法
系统保留一个空闲帧缓冲池,当出现页错误时,会选择牺牲帧,但是牺牲帧写出之前,所需要的页就从缓冲池中读到空闲内存。这样加速了重启。
关于虚拟内存与物理内存的联系,下面这张图可以很直观的帮助我们理解。
先看一下虚拟内存的结构图:
以32位机为例,我们看到的进程虚拟存储器占用3G虚拟内存空间,内核虚拟存储器占用1G的虚拟内存空间
虚拟内存与物理内存的联系:
页表的工作原理:
当每个进程创建的时候,内核会为进程分配4G的虚拟内存,当进程还没有开始运行时,这只是一个内存布局。实际上并不立即就把虚拟内存对应位置的程序数据和代码(比如.text .data段)拷贝到物理内存中,只是建立好虚拟内存和磁盘文件之间的映射就好(叫做存储器映射)。这个时候数据和代码还是在磁盘上的。当运行到对应的程序时,进程去寻找页表,发现页表中地址没有存放在物理内存上,而是在磁盘上,于是发生缺页异常,于是将磁盘上的数据拷贝到物理内存中。
另外在进程运行过程中,要通过malloc来动态分配内存时,也只是分配了虚拟内存,即为这块虚拟内存对应的页表项做相应设置,当进程真正访问到此数据时,才引发缺页异常。
可以认为虚拟空间都被映射到了磁盘空间中(事实上也是按需要映射到磁盘空间上,通过mmap,mmap是用来建立虚拟空间和磁盘空间的映射关系的)
优点:
参考:https://blog.csdn.net/lvyibin890/article/details/82217193
文章浏览阅读716次。Shiro实现用户授权_@hasauthority shiro
文章浏览阅读7.1w次,点赞121次,收藏1.2k次。摘要:人脸检测与识别是机器视觉领域最热门的研究方向之一,本文详细介绍博主自主设计的一款基于深度学习的人脸识别与管理系统。博文给出人脸识别实现原理的同时,给出Python的人脸识别实现代码以及PyQt设计的UI界面。系统实现了集识别人脸、录入人脸、管理人脸在内的多项功能:包括通过选择人脸图片、视频、摄像头进行已录入人脸的实时识别;可通过图片和摄像头检测人脸并录入新的人脸;通过系统管理和更新人脸数据等功能,检测速度快、识别精度较高。博文提供了完整的Python代码和使用教程与完整代码资源。_python管理系统深度学习
文章浏览阅读42次。ShowServlet.javapackage it.ytu.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servl
文章浏览阅读2.4k次,点赞3次,收藏8次。项目需求是这样的:用户签订合同,并读取用户信息生成合同,将合同保存为png图片保存环境:windows(2012,linux要配置java环境,偷懒)+ apache(2.4.48) + php(7.1) + mysql(5.5.62)框架:tp5.0.24,网站目录在public下面,环境直接用宝塔塔建的,phpenv 本地测试了也可以,其他的没有测试第一步:向word写入用户信息1. 将 PhpOffice 整个文件夹复制到 extend 文件夹下(如下图)2. 接下来就是代码了,直接上:_php word转图片
文章浏览阅读391次。我们今天要和大家一起讨论的是Oracle备份,redo丢失和恢复的实际操作方案的实际应用,如果你对Oracle备份,redo丢失和恢复的实操感兴趣的话,以下的文章就会给你提供相关的知识,望你会有所收获。一、先阐述下测试环境系统数据库环境:window+Oracle10g R2+archive模式;模拟Redo文件丢失,数据库在正常关闭的情况发现Redo丢失了;二、测试(1)、倘若丢了一个或多个re..._oracle redolog 备份
文章浏览阅读93次。第九道、#204. 计数质数统计所有小于非负整数 n 的质数的数量。示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。1、暴力解法class Solution {public: int countPrimes(int n) { if (n<3) return 0; //当n小于三时,没有质数 int ans =1; //2是质数 ,所以初始化为1 for(int ._计数质数 哈希表leetcode c++
文章浏览阅读491次。1.故障检查信息***STOP 0x0000001E(0xC0000005,0xFDE38AF9,0x0000001,0x7E8B0EB4)KMODE_EXCEPTION_NOT_HANDLED ***其中错误的第一部分是停机码(Stop Code)也就是STOP 0x0000001E, 用于识别已发生错误的类型, 错误第二部分是被括号括起来的四个数字集, 表示随机的开发人员定义的参数(这_ox000021a
文章浏览阅读7.2k次,点赞5次,收藏20次。springboot注解@ComponentScan_springboot scan
文章浏览阅读4.7k次。(all content based on the coursera course nlp)--------------------------------------------------------------------------------------------------------这一周的主要课程是tagging problems首先是简单介绍了一下supervise_hidden markov models nlp
文章浏览阅读518次。<script src="js/mui.min.js"></script> <script type="text/javascript" src="js/mui.enterfocus.js" ></script> <script src="js/app.js">_mui input 身份证号码
文章浏览阅读1.7k次。作者:jikecheng,miaoxie,HarmonyOS内核技术专家HarmonyOS整体框架分为四个层级,如图1所示。从上到下,依次为:第一层是应用层,主要涵盖系统应用、Launcher、设置,以及三方应用。第二层是框架层,提供基础UI框架、用户程序框架以及能力模块框架。第三层是系统服务层,让HarmonyOS具有分布式流转负载的能力。大家看到的高速多设备协同能力就是由该层级提供。而承载整个操作系统,同时发挥芯片算力的基石就沉淀在第四层——内核层。宏观来说,内核的主要工作包含芯片资源管_hyperhold
文章浏览阅读584次。资源描述:第一章1 .电子数字计算机和电子模拟计算机的区别在哪里解电子数字计算机中处理的信息是在时间上离散的数字量,运算的过程是不连续的;电子模拟计算机中处理的信息是连续变化的物理量,运算的过程是连续的。2 .冯· 诺依曼计算机的特点是什么 其中最主要的一点是什么解冯· 诺依曼计算机的特点如下① 计算机(指硬件)应由运算器、存储器、控制器、输入设备和输出设备五大基本部件组成;② 计算机内部采用二进..._数字计算机处理的是在时间上和数值上