TLB与内存寻址,内存读取,虚拟内存的相关原理
关于TLB与cache-CPU缓存的关系,TLB介于CPU与cache之间,是内存的管理单元,用于程序从逻辑地址访问实际内存地址的页表缓存。
当程序或cpu要读取数据,CPU会根据程序提供的逻辑地址的前20位映射码到TLB中查询,TLB中保存所有已运行程序的前20位逻辑地址的映射码,查到(命中)根据前20位映射码直接访问实际内存地址。查不到(不命中)CPU会到CPU缓存(cache)中查询,没有CPU会重新加载(实际内存)所有逻辑地址的映射码(一些程序停止响应后过一会又响应),后直接读取硬盘上数据,同时将逻辑地址映射信息保存回TLB(刷新TLB)。TLB归系统(OS)在内存中创建、管理,也算是一种缓存,软缓存。CPU cache是加快CPU与内存之间数据交换的缓存,归CPU管理,是一种硬件缓存。
当CPU访问程序时,内存读取速度很快,将CPU需要的数据块(实际内存地址)读取保存在内存中,内存空间有限,符合软件编写规则的程序都只能保存很小的数据块在内存中,并且内存中这些数据块只有被CPU全部处理完,内存才会加载下一个数据块。CPU要一点一点的处理这些内存中的数据块,当CPU处理完这个数据块需等待内存加载下一个数据块。(也可以说内存停止慢慢等CPU处理完。)这就造成了数据处理的停顿(虽然这点时间可能就是几毫秒),为了保持数据处理的连贯性、持续性,CPU
cache应运而生。内存中要处理或优先处理的数据块先被CPU cache加载,不再影响内存的运作,CPU优先从CPU
cache中加载处理数据。CPU
cache起了缓冲、缓存作用。(这只是CPU运行的大方向的理论,实际IU与AU对缓存还有不同的处理,并且像IU酷睿与新的I系列CPU在缓存、内置内存控制器等多有改进,但无论怎样这大方向的理论没变!同频率不同价的CPU多是砍CPU
cache大小或指令来区分,资金不是太紧张的同学还是选同频大缓存的CPU为好。同类型相比I3与I3,别拿I3与I5比。。。。)
如上,CPU、CPU
cache或内存都会分优先级来加载处理数据,一些暂时不用的数据,内存会自动卸载数据到虚拟内存中,同时映射地址供以后直接调用。没有启用虚拟内存,内存会直接卸载暂时不用的数据,用时再从硬盘上读取。大家注意到,直接以后从硬盘上读取还是卸载数据到虚拟内存中,好像都一样,都要从硬盘上读取。实际使用时是不一样的,调用虚拟内存,实际内存只要通过映射码直接读取。调用硬盘上数据有一个加载、选择需要数据块的时间(虽然这点时间可能还是几毫秒)。到此其实虚拟内存更像实际内存的缓存(但不是必须的),虚拟内存的作用更像TLB。所以偶一直建议大家启用虚拟内存。对于一些大容量内存的同学,也要尽量启用虚拟内存。不是关闭虚拟内存,系统就会运行更快。这是一个网路上流传甚广的歧义解读。
关闭虚拟内存让程序在实际内存中运行,需要几个前提条件,需要x64系统,只有x64系统才能更有效的管理、分配更多的内存地址。像一些x86系统开启或支持4G以上内存都是障眼法的过眼瘾,x86系统本身的内核出于稳定性的要求已经屏蔽了内存地址的扩展。(无论微软还是Linux都一样,不要听一些神人的通灵神释,如果Linux等x86内核本身支持Linux还出什么x64系统。)x86伺服器系统也是如此,只能看到更多的内存存在,(针对x86伺服器系统以前有几个专门优化的程序可以使用3g内存,现在基本已经绝种了)如我们都知道银行有许多毛爷爷,但你能把银行的钱拿来就用吗!第二个先决条件就是软件本身要支持、启用内存地址扩展,也就是x64位程序并编译到了可以启用更多的内存地址扩展,有些程序(偶就不说软件名了)只是包了x64皮的x86程序。。。。。
x86程序以Windows系统下为例为了最大兼容性先天就限制了内存地址的调用(“符合软件编写规则的程序都只能保存很小的数据块在内存中”),如xxx不能读、xxx不能写的报错就是内存地址不能供软件调用,x64程序内存地址还是有限制但通过内存地址扩展可使用更多内存,如PS
x64版软件可以使用128G以上内存容量。
内存无论有多大,都会在开机时被系统初始化,分配好数据空间(实际内存地址)。内存像一栋楼,楼中有许多房间,x86程序无论怎样只能住小房间,x64程序可以住大房间,像PS等x64程序可以包下整个单元。无论x86还是x64程序房间住满了可以将一些暂时不用的放到下房(或叫小仓房)虚拟内存中,如没有多出的只能先丢掉了
TLB与内存寻址,内存读取,虚拟内存的相关原理的更多相关文章
- Linux内核源码分析 day01——内存寻址
前言 Linux内核源码分析 Antz系统编写已经开始了内核部分了,在编写时同时也参考学习一点Linux内核知识. 自制Antz操作系统 一个自制的操作系统,Antz .半图形化半命令式系统,同时嵌入 ...
- 鸿蒙内核源码分析(内存汇编篇) | 谁是虚拟内存实现的基础 | 百篇博客分析OpenHarmony源码 | v14.14
百篇博客系列篇.本篇为: v14.xx 鸿蒙内核源码分析(内存汇编篇) | 谁是虚拟内存实现的基础 | 51.c.h .o 内存管理相关篇为: v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有 ...
- x64 结构体系下的内存寻址
欢迎转载,转载请注明出处:http://www.cnblogs.com/lanrenxinxin/p/4735027.html 在阅读NewBluePill源码的时候,看内存的那一块简直头疼,全是x6 ...
- Linux x86_64与i386区别之 —— 内存寻址
毫无疑问,不管是32位,还是64位处理器,所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是 存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途不 ...
- X64下MmIsAddressValid的逆向及内存寻址解析
标 题: [原创]X64下MmIsAddressValid的逆向及内存寻址解析 作 者: 普通朋友 时 间: 2015-10-21,20:03:52 链 接: http://bbs.pediy.com ...
- Linux内存寻址
我会尽力以最简洁清晰的思路来写这篇文章. 所谓内存寻址也就是从写在指令里的地址,转化为实际物理地址的过程.因为操作系统要兼顾许多东西,所以也就变得复杂. 逻辑地址 → 线性地址 → 物理地址 逻辑地址 ...
- Linux内存寻址之分页机制
在上一篇文章Linux内存寻址之分段机制中,我们了解逻辑地址通过分段机制转换为线性地址的过程.下面,我们就来看看更加重要和复杂的分页机制. 分页机制在段机制之后进行,以完成线性—物理地址的转换过程.段 ...
- Linux内存寻址之分段机制
前言 最近在学习Linux内核,读到<深入理解Linux内核>的内存寻址一章.原本以为自己对分段分页机制已经理解了,结果发现其实是一知半解.于是,查找了很多资料,最终理顺了内存寻址的知识. ...
- 如何打开Windows Server 2003 内存寻址扩展
本文介绍了如何在系统内存大于4G的情况下,让windows2003 Advanced Server支持大内存的方法: 由于Windows2003 32bit是32位操作系统,当服务器配备内存高达4G时 ...
随机推荐
- LaTeX 之 \label 的运用
LaTeX 之 \label 的运用 前言 大部分的LaTex教程里面都会提到 \label 的标记功能,而如果入门时就玩耍过WinEdt的同学在工具栏上点击各种环境的时候就会发现\label这个东东 ...
- 【Beanstalkd】Beanstalkd消息队列的安装与使用
一.Beanstalkd是什么? Beanstalkd是一个高性能,轻量级的分布式内存队列 二.Beanstalkd特性 1.支持优先级(支持任务插队)2.延迟(实现定时任务)3.持久化(定时把内存中 ...
- hibernate框架的核心对象和相关知识点
Hibernate架构下图提供了hibernate体系的高层视图: Hibernate全面解决方案: Hibernate核心APIConfiguration负责管理数据库的配置信息.数据库的配置信息包 ...
- Hibernate环境搭建+struts整合
说明:本文档,是和struts2+hibernate的整合示例. lib下还有struts2的jar包,本示例没有显示.struts2的搭建参考struts2的环境搭建 一下载hibernate的ja ...
- 每日一条 Git 命令:git merge remote master
每日一条 Git 命令:git merge remote master 当远程的分支更新后,需要将自己的代码与远程的分支合并就用以下这个命令合并. git merge remote master 如果 ...
- 转-Python自然语言处理入门
Python自然语言处理入门 原文链接:http://python.jobbole.com/85094/ 分享到:20 本文由 伯乐在线 - Ree Ray 翻译,renlytime 校稿.未经许 ...
- oracle查看和修改最大连接数
第一步,在cmd命令行,输入sqlplus 或者直接在plsql中打开command window 第二步,根据提示输入用户名与密码 1. 查看processes和sessions参数 1 2 3 4 ...
- 洛谷[P1002]过河卒
原题地址:https://www.luogu.org/problemnew/show/P1002 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点 ...
- 常用数据结构的功能及复杂度总结(OI)
不定长数组 维护一个序列 在末尾插入/删除均摊O(1) 任意位置插入O(n) 指定位置查询/修改O(1) 空间O(n) 链表 维护一个序列 定位到第i个位置O(n) 在任意位置(已定位到该位置)插入/ ...
- java web 程序---留言板
思路:一个form表单,用户提交留言 一个页面显示留言内容.用到Vector来存取信息并显示 cas.jsp <body> <form action="fei.jsp&qu ...