为什么进程切换比线程切换代价大,效率低?【TLB:页表缓存/快表】

news2024/12/24 21:30:38

参考:

  • 计组复习:cache,虚拟内存,页表与TLB
  • 小林coding - 为什么要有虚拟内存?

一、为什么进程切换比线程切换代价大,效率更低?

首先,先给出标题的答案(关键在于进程切换涉及到TLB的失效及更新,线程不涉及):

因为,每次进程切换时,都会涉及页表的切换,不过切换页表这个操作本身是不太耗费时间的。但是在切换之后,TLB(页表缓存/快表)就失效了,所以在进行地址转化时就需要重新去查找页表,这就造成了程序运行的效率低下。
而同一个进程的线程之间是共用一个页表的,所以线程之间的切换是不需要切换页表的,因此线程切换不存在上述代价大,效率低的问题。

其次,再来了解下几个基本概念:

  • 虚拟内存技术:提供一种虚拟地址到实际物理地址的映射,将连续的虚拟地址暴露给程序,而实际上他们在物理内存(比如内存条)上面是不连续的。
    虚拟内存能够很好的帮助程序员避免麻烦的内存管理与冲突等问题,并且将内存作为模块化独立出来。
  • 虚拟内存地址:程序所使用的内存地址(Virtual Memory Address)。
  • 物理内存地址:实际存在硬件里面的空间地址叫(Physical Memory Address)。

二、内存分页与页表

  • 内存分页:是把整个虚拟内存和物理内存空间切成一段段固定大小的尺寸。这样一个连续并且尺寸固定的内存空间叫做(Page)。
    在 Linux 下,页是访问内存的最小单位,每一页大小为 4KB

  • 页表:记录【进程 虚拟地址】与【内存 物理地址】的映射关系。
    每个进程都拥有自己的虚拟地址空间,也拥有一个页表。
    在这里插入图片描述
    如果程序要访问虚拟地址时,由操作系统转换成不同的物理地址,这样不同的进程在运行时,写入的是不同的物理地址,这样就不会冲突了。

页表是存储在内存里的,而CPU芯片中的 内存管理单元 (MMU)就负责将虚拟内存地址转换成物理地址的工作。

而当进程访问的虚拟地址在页表中查不到时,系统会产生一个缺页异常,进入系统内核空间分配物理内存、更新进程页表,最后再返回用户空间,恢复进程的运行。

页表使用虚拟地址的页号作为索引,以找到实际物理存储器中的页号,即:key = 虚拟地址的页号, val = 实际物理存储器中的页号。索引的过程如下图:
在这里插入图片描述

首先引入 cache 高速缓存,来缓解高速的 cpu 和较低速的内存之间的拖带关系(cpu 速度远快于内存,那么每次读取数据都需要等待内存就绪)。

三、TLB(页表缓存/快表)

大家都知道, 计算机中的cpu的处理速度是要远快于内存操作的,那么每次cpu要读取数据时都需要等待内存就绪才行,这在一定程度上限制了cpu的执行效率。

于是计算机科学家们根据局部性原理,就在 CPU 芯片中加入了一个专门存放程序最常访问页表项的 Cache 高速缓存,这个 Cache 就是 TLB(Translation Lookaside Buffer) ,通常称为 页表缓存转址旁路缓存快表等,可以极大提高地址转换速度,加速对于页表的访问。

  • 理解:TLB可以看作是一种硬件的哈希表,来快速查找 高速cache 中是否存在特定地址的数据,而其中应用到的内存淘汰策略则是常被提到的LRU内存淘汰策略。

  • 作用:可以加速页表读取,极大提高虚拟地址到物理地址的转换速度。

  • 过程:那么对于一次存取,就会有分 3 种的情况:

    • TLB hit:命中缓存直接访问内存取数据
    • TLB miss:未命中缓存,但是在内存中有对应页 → 【要再去页表中找地址】
    • TLB miss:同时内存中没有对应页,发生缺页 → 【要向磁盘要数据,同时更新 TLB 和 页表】

总之,就是先查找 TLB,如果缺失,那么查找页表;还缺就是发生缺页了,需要通过磁盘加载所需数据到物理内存中。如果查找 TLB 命中,那么根据 TLB 获取物理地址,然后查找数据 cache,后续就算普通的 cache 查找了。

加入 TLB 之后,虚拟地址到物理地址的完整地址映射长这样:
在这里插入图片描述

最后,附上一张关于 TLB 的总流程图:
在这里插入图片描述

最后再补充一点:
对于一个内存地址是如何转换为实际的物理内存地址的呢? 其实分为 3 个步骤:

  • 把虚拟内存地址切分成页号偏移量
  • 根据页号,从页表里面查询对应的物理页号
  • 直接拿物理页号加上前面的偏移量,就得到了实际的物理内存地址

四、总结

  • 为什么进程切换比线程切换代价大,效率低?
    • 关键在于进程切换涉及到TLB的失效及更新,线程不涉及
  • 内存分页会把整个虚拟内存和物理内存空间切成一段段尺寸固定大小的在 Linux 下,页是访问内存的最小单位,占 4KB。
  • 页表记录【虚拟地址空间】与【物理地址空间】的映射关系。
  • 为了加速页表的读取,出现了一种存放 程序最常访问页表项的 Cache 高速缓存,称之为TLB,可以极大提高虚拟地址到物理地址的转换速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CleanMyMac X2023最新版安装图文详解

对于刚刚入手苹果Mac设备的用户来说,什么软件好用、怎样设置能够获得最佳的使用体验等这些问题都需要一步一步摸索,但其实,从懵懂到熟练使用OS X系统的过程是非常有趣的。日前,有网友分享了自己认为在OS X系统下非常好用的软件&am…

免费查题接口系统调用

免费查题接口系统调用 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台(点…

Spring——Bean注入几种方式(放入容器)

Bean注入几种方式1.XML方式注入set方式注入构造方法注入2.注解方式注入ComponentComponentScanConfigurationBeanComponentScanImport3.实现ImportBeanDefinitionRegistrar接口4.实现FactoryBean5.实现BeanDefinitionRegistryPostProcessor1.XML方式注入 在现在这个Springboot…

jsp课程资源网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 课程资源网站系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用…

怎么用docker将项目打包成镜像并导出给别人适用 (dockerfile)

前提 你得安装docker,没有安装的可以看看这篇文章 编写dockerfile 这个位置最好和我一样,不然后面打包成镜像可能出问题(找不到jar包) FROM openjdk:8-jdk-slim MAINTAINER JacksonNing COPY /target/iec104-1.0.0-SNAPSHOT.j…

这次把怎么做好一个PPT讲清-演讲篇

《商务演讲与汇报》 一、目标:演讲必须有清晰的目标 演讲:影响他人发生积极的**“改变”** 注意,目标就要设定的影响听众在听完你的演讲后发生积极的改变; 例:5月初向领导做月度工作汇报→→让领导在5月第一周例会…

QGradient(渐变填充)

QGradient(渐变填充) QGradient和QBrush一起使用来指定渐变填充。 Qt支持的填充: 线性渐变(linear gradient),在起点和终点之间插值颜色辐射渐变(radial gradient),在焦点和围绕它的圆的端点之…

2019上半年-2019下半年软件设计师上午题错题总结

2019上半年 30.以下关于极限编程(XP)的最佳实践的叙述中,不正确的是(C )。 A.只处理当前的需求,使设计保持简单 B.编写完程序之后编写测试代码 C.可以按日甚至按小时为客户提供可运行的版本 D.系统最…

【附源码】Python计算机毕业设计水库洪水预报调度系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,我…

linux进阶-构建deb软件安装包

Linux软件包的组成:源码包和二进制包。 文件类型保存目录普通程序/usr/binroot权限程序/usr/sbin程序配置文件/etc日志文件/var/log文档文件/usr/share/doc 源码包优点:开源免费、自由裁剪、修改源代码。 源码包缺点:安装步骤繁琐、编译时间…

【信号处理】卡尔曼滤波(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

区块链解决方案-最新全套文件

区块链解决方案-最新全套文件一、建设背景区块链的五大场景1、合同存证2、产品防伪溯源3、供应链金融4、住房租赁5、贸易金融业务二、建设架构三、建设方案四、获取 - 区块链全套最新解决方案合集一、建设背景 区块链的五大场景 1、合同存证 传统的合同存证存在着被篡改、删…

【AcWing19】【LeetCode】DFS - 46/47/39/77/216/17

文章目录代码随想录在B站的视频讲得比AcWing好模板题1:排列数字模板题2:n皇后方法一方法二LeetCode 46. 全排列LeetCode 47. 全排列 II (重复元素)LeetCode 39. 组合总和LeetCode 77. 组合LeetCode 216. 组合总和 IIILeetCode 17.…

黑马点评--分布式锁

黑马点评–分布式锁 基本原理与不同实现方式对比: 什么是分布式锁: ​ 分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心是实现多进程之间互斥,而满足这一点的方式有很多,常见的有三种…

Leetcode799. 香槟塔

文章目录题目链接题目大意解题思路代码(C)递推递归题目链接 点我 (^_^) 题目大意 解题思路 一开始看到这个 poured 范围这么大,以为是可以直接推出数学公式,但推了半天没推出来。 然后发现,直接从顶部开始模拟即可,某个row 下的…

HIve数仓新零售项目DWB层的构建

HIve数仓新零售项目 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kaf…

October 2019 Twice SQL Injection

目录 首先,尝试一下回显位的个数 第二步获取数据库名称 第三步,获得表名 第四步,获得列名 最后获取flag 总结 :二次注入,首先我们需要锁定是哪里哪个文本框存在二次注入,以这道题为例,首先…

计算机视觉算法——基于Transformer的语义分割(SETR / Segmenter / SegFormer)

计算机视觉算法——基于Transformer的语义分割(SETR / Segmenter / SegFormer)1. SETR1.1 网络结构及特点1.1.1 Decoder1.2 实验2. Segmenter2.1 网络结构及特点2.1.1 Decoder2.2 实验3. SegFormer3.1 网络结构及特点3.1.1 Overlap Patch Merging3.1.2 E…

CMSC5713-IT项目管理之八、敏捷项目管理Agile Project Management

文章目录8.1. Traditional SDLC8.2. Agile Methodologies8.3. Scrum8.3.1. Roles8.3.2. User Story8.3.3. Product Backlog8.3.4. Release Backlog8.3.5. Sprint Backlog8.3.6. Estimation8.3.7. Burning-down Chart8.3.8. Planning Meetings8.3.8.1. Daily Scrum Meeting8.3.8…

stm32f334timer15-17

stm32f334timer15-17介绍TIM15主要功能TIM16-17主要功能TIM15/TIM16/TIM17功能描述时基单位预分频器描述计数器模式递增计数模式重复计数器时钟选择捕获/比较频道输入捕获模式PWM输入模式(仅适用于TIM15)强制输出模式输出比较模式组合PWM模式&#xff08…