精华内容
下载资源
问答
  • 进程的切换时需要进行保护现场 进程开销比线程的原因 进程切换的方式 进程的切换方式

    1.进程的保护现场:系统要保留有关被切换进程的足够信息,以便以后切换回该进程时,顺利恢复该进程的执行。在系统保留了CPU现场之后,调度程序选择一个新的处于就绪状态的进程、并装配该进程的上下文,使CPU的控制权掌握在被选中进程手中。
    (1)具体操作:
    n保存处理器的上下文,包括程序计数器和其它寄存器
    n用新状态和其它相关信息更新正在运行进程的PCB
    n把原来的进程移至合适的队列-就绪、阻塞
    n选择另一个要执行的进程
    n更新被选中进程的PCB
    n从被选中进程中重装入CPU 上下文

    2.线程的切换:一个处理器都只会执行一条线程中的指令,为了让线程切换后能恢复到正确的执行位置,每条线程都有一个独立的程序计数器,进行线程上下文切换时记录程序计数器、CPU寄存器状态(记录有挂起变量的值)等数据即可。

    3.进程和线程的切换比较:
    (1)进程切换方式:切换虚拟地址空间,切换内核栈和硬件上下文
    (2)线程切换方式:切换内核栈和硬件上下文
    (3)虚拟地址空间的切换:切换页表,以使用新的地址空间,虚拟内存和物理内存会进行一一对应数据存放,页表(虚拟内存)可以将虚拟地址转换为物理内存地址,从而能够通过页表查找到虚拟地址空间的中的某一数据在物理内存的具体位置。
    (4)页表切换的开销:通常使用TLB Cache来进行缓存常用的地址映射,用来加速页表查找,当进程切换后,页表页要进行切换,页表切换后TLB就会失效,Cache失效导致查找命中率降低,也就是虚拟地址转换为物理地址就会变慢,程序中其他进程的执行就变慢,表现出来程序运行会慢

    进程开销比线程大的原因

    进程切换的方式

    进程的切换方式

    线程切换与进程切换以及开销

    线程的上下文切换
    进程的调度机制

    展开全文
  • 为什么线程切换开销大

    千次阅读 2020-12-22 17:01:49
    为了使上层应用能够访问到这些资源,内核必须上层应用提供访问的接口:即系统调用。 系统调用是操作系统的最小功能单位,每个系统调用都会实现一个简单的操作。在应用程序中可以调用所需的系统调用来完成任

    1. Unix/Linux的体系架构

    从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件,它控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源、存储资源、I/O资源等。为了使上层应用能够访问到这些资源,内核必须为上层应用提供访问的接口:即系统调用。

    系统调用是操作系统的最小功能单位,每个系统调用都会实现一个简单的操作。在应用程序中可以调用所需的系统调用来完成任务,但是对于复杂的任务,需要频繁地调用大量的系统调用,这势必会增加程序员的负担。库函数正是为了将程序员从复杂的细节中解脱出来而提出的一种有效方法。它实现对系统调用的封装,将简单的业务逻辑接口呈现给用户,方便用户调用。这样的一种组成方式极大增强了程序设计的灵活性,对于简单的操作,我们可以直接调用系统调用来访问资源,对于复杂操作,我们借助于库函数来实现。

    2. 用户态和内核态

    内核态和用户态的概念,是操作系统为了有效实现CPU的权限分级和数据隔离而提出的。因为系统的资源是有限的,如果用户都去随意地访问和使用这些资源,会造成冲突和混乱。为了使得程序在系统上正常运行,Unix/Linux对不同的操作赋予不同的权限等级,Linux操作系统中主要采用了0和3两个特权级,分别对应内核态和用户态。运行于用户态的进程可以执行的操作和访问的资源都会受到极大的限制,而运行在内核态的进程则可以执行任何操作并且在资源的使用上没有限制。在用户态运行的程序,在运行过程中,一些操作需要内核的权限才能执行,这是就会涉及到一个从用户态切换到内核态的过程。

    3. 线程切换的开销

    我们都知道,线程切换会带来开销,如果频繁进行线程切换,所造成的开销是相当可观的。那么为什么线程切换会有开销呢,有哪些开销呢?这里涉及几个概念:CPU上下文切换、线程上下文切换、特权模式切换(内核态和用户态的互相转换)。

    CPU上下文切换

    在多任务操作系统中,对于一个CPU而言,它并不是一直为一个任务服务直到任务结束的,而是在不同的任务之间切换,使得多个任务轮流使用CPU。而在每个任务运行前,CPU都需要知道任务从哪里加载、此时的状态、从哪里开始运行,也就是说,需要系统事先帮它设置好CPU寄存器程序计数器,这些内容就是CPU上下文

    稍微详细描述一下,CPU上下文切换可以认为是内核在 CPU 上对于进程(包括线程)进行以下的活动:(1)挂起一个进程,将这个进程的CPU 上下文存储于内存中的某处,(2)在内存中检索下一个进程的上下文并将其在 CPU 的寄存器中恢复,(3)跳转到程序计数器所指向的位置(即跳转到进程被中断时的代码行),以恢复该进程。

    CPU上下文切换的分为几个不同的场景:进程上下文切换,线程上下文切换,中断上下文切换

    线程上下文切换

    当从一个线程切换到另一个线程时,不仅会发生线程上下文切换,还会发生特权模式切换。

    首先,既然是线程切换,那么一定涉及线程状态的保存和恢复,包括寄存器、栈等私有数据。另外,线程的调度是需要内核级别的权限的(操作CPU和内存),也就是说线程的调度工作是在内核态完成的,因此会有一个从用户态到内核态的切换。而且,不管是线程本身的切换还是特权模式的切换,都要进行CPU的上下文切换。本质上都是从“一段程序”切换到了“另一段程序”,都要设置相应的CPU上下文。要明确一个问题,那就是内核也是有代码的,只是这些代码的机密性比较高,我们用户态无法访问。(要理清这几个概念的关系)

    总结来说,线程切换过程包括:线程上下文的保存和恢复,用户态和内核态的转换,CPU上下文的切换,这些工作都需要CPU去完成,是一笔不小的开销

    参考文章

    linux体系架构

    CPU上下文切换详解

    深入理解CPU上下文切换

    Linux | 用户态和内核态的切换耗费时间的原因

    怎样去理解Linux用户态和内核态?

    写给Java程序员看的,CPU 上下文切换、用户态、内核态、进程与线程上下文切换(转)

    展开全文
  • 为什么用多线程或多进程? 程序的部分耗时在等待IO上,瓶颈不在CPU上时,可以提高CPU利用率 需要集中快速处理大量数据,并且不受先后顺序影响 评论区还可补充ing 线程和线程 线程的实现可以分为两类: 用户级...

    码字不易,转载请附原链,搬砖繁忙回复不及时见谅,技术交流请加QQ群:909211071

    前言

    为什么用多线程或多进程?

    1. 程序的大部分耗时在等待IO上,瓶颈不在CPU上时,可以提高CPU利用率
    2. 需要集中快速处理大量数据,并且不受先后顺序影响
    3. 评论区还可补充ing

    线程和线程

    线程的实现可以分为两类:

    • 用户级线程:不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,在语言层面利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。不需要用户态/内核态切换,速度快,操作系统内核不知道多线程的存在,因此一个线 程阻塞将使得整个进程(包括它的所有线程)阻塞。由于这里的处理器时间片分配是以进程为基本单位,所以每个线程执行的时间相对减少
    • 内核线线程:又称为内核支持的线程或轻量级进程,所以需要切换到内核态。

    进程切换都需要内核态转换

    为什么进程切换比线程切换开销大?

           逻辑地址:操作系统在页表中记录了逻辑地址到物理内存地址的映射关系,有了页表就可以将逻辑地址转换为物理内存地址了。每个进程都有自己的逻辑地址,进程内的所有线程共享进程的逻辑地址。

           进程切换与线程切换的最主要区别:进程切换涉及到虚拟地址空间的切换而线程切换则不会。因为每个进程都有自己的虚拟地址空间,而线程是共享所在进程的虚拟地址空间的,因此同一个进程中的线程进行线程切换时不涉及虚拟地址空间的转换。把虚拟地址转换为物理地址需要查找页表,页表查找是一个很慢的过程,因此通常使用TLB(Translation Lookaside Buffer)来缓存页地址,用来加速页表查找。当进程切换后页表也要进行切换,页表切换后TLB就失效了,那么虚拟地址转换为物理地址就会变慢,表现出来的就是程序运行会变慢,而线程切换则不会导致TLB失效,因为线程线程无需切换地址空间,因此我们通常说线程切换要比较进程切换块,原因就在这里。

    展开全文
  • 为什么切换线程比切换进程开销

    千次阅读 2019-03-29 08:16:00
    首先要明白进程什么:  关于进程的定义有很多,一个经典的定义是一个执行中程序的实例,进程是程序的动态表现。 一个程序进行起来后,会使用很多资源,比如使用寄存器,内存,文件等。每当切换进程时,必须要...

    首先要明白进程是什么:

      关于进程的定义有很多,一个经典的定义是一个执行中程序的实例,进程是程序的动态表现。  一个程序进行起来后,会使用很多资源,比如使用寄存器,内存,文件等。每当切换进程时,必须要考虑保存当前进程的状态。状态包括存放在内存中的程序的代码和数据,它的栈、通用目的寄存器的内容、程序计数器、环境变量以及打开的文件描述符的集合,这个状态叫做上下文(Context)。可见,想要切换进程,保存的状态还不少。

    其次就要了解线程是什么:

      线程存在于进程中,一个进程可以有一个或多个线程。线程是运行在进程上下文中的逻辑流,简单说,线程可以理解为一个方法(Java)或函数(C),这个线程可以独立完成一项任务。同样线程有自己的上下文,包括唯一的整数线程ID, 栈、栈指针、程序计数器、通用目的寄存器和条件码。可以理解为线程上下文是进程上下文的子集

     

    由于保存线程的上下文明显比进程的上下文小,因此系统切换线程时,必然开销更小。

     

    内容来自CSAPP chapter 8 & 12

      

    转载于:https://www.cnblogs.com/yvkm/p/10619001.html

    展开全文
  • 进程切换比线程切换开销大是因为进程切换时要切页表,而且往往伴随着页调度,因为进程的数据段代码段要换出去,以便把将要执行的进程的内容换进来。本来进程的内容就是线程的超集。而且线程只需要保存线程的上下
  • 进程/线程切换究竟需要多少开销

    千次阅读 2020-11-29 08:00:00
    进程是我们开发同学非常熟悉的概念,我们可能也听说过进程上下文切换开销。那么今天让我们来思考一个问题,究竟一次进程上下文切换会吃掉多少CPU时间呢?线程据说比进程轻量,它的上下文切换会比进...
  • 为什么创建进程的成本很高? 这样的问题确实不好回答,除非你真正理解了进程和线程的原理,否则很容易掉入面试大坑。本讲,我将带你一起探究问题背后的原理,围绕面试题展开理论与实践知识的学习。通过本讲的学习,...
  • 线程切换与进程切换以及开销

    千次阅读 2019-07-26 17:42:45
    虚拟内存是操作系统每个进程提供的一种抽象,每个进程都有属于自己的、私有的、地址连续的虚拟内存,当然我们知道最终进程的数据及代码必然要放到物理内存上,那么必须有某种机制能记住虚拟地址空间中的某个数据...
  • 进程、线程上下文切换开销

    千次阅读 2020-09-10 11:21:07
    进程、线程上下文切换开销 虚拟内存与地址空间映射关系 虚拟内存是操作系统每个进程提供的一种抽象,每个进程都有属于自己的、私有的、地址连续的虚拟内存,当然我们知道最终进程的数据及代码必然要放到物理...
  • 线程调度为什么比进程调度更少开销? 最仅的面试遭遇了这样一个问题:进程为什么重,线程为什么轻?我回答了一条:进程切换开销要远大于线程。面试官让我详细分析:他们各...
  • 进程和线程切换开销

    千次阅读 2020-03-19 13:19:28
    进程切换开销 切换虚拟地址空间 切换CPU上下文 切换内核栈 线程切换开销 切换CPU上下文 切换内核栈 虚拟地址空间 每个进程都有自己的虚拟地址空间,进程内的所有线程共享进程的虚拟地址空间。 虚拟内存是...
  • 进程切换与线程切换的代价比较

    万次阅读 多人点赞 2018-05-30 17:18:45
    http://www.jb51.net/article/102004.htm进程切换分两步:1....切换的性能消耗:1、线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。这两...
  • 进程切换与线程切换的区别 为什么切换线程比切换进程开销小? 由于保存线程的上下文明显比进程的上下文小,因此系统切换线程时,必然开销更小。 而且进程涉及到虚拟空间,页表的切换
  • 进程和线程的区别(超详细)

    万次阅读 多人点赞 2019-10-03 21:57:46
    进程和线程 进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。 线程 进程中的一个执行任务(控制单元),负责...
  • 进程切换与模式切换

    2021-06-06 22:26:16
    进程切换与模式切换 进程切换 定义: 在某个时刻,操作系统中断一个正在运行的进程,将另一个进程置于运行模式,并将控制权交给后者 切换时机: 它可以发生在正在运行进程将控制权交给操作系统之后的任何时刻 切换的...
  • 某系统采用基于优先权的非抢占式进程调度策略,完成一次进程调度和进程切换的系统时间开销为 1μs。在 T 时刻就绪队列中有 3 个进程 P1、P2 和 P3,其在就绪队列中的等待时间、需要的 CPU 时间和优先权,如下表所示...
  • 进程切换分两步: 1.切换页目录以使用新的地址空间 2.切换内核栈和硬件上下文 ...对于linux来说,线程和进程...以上就是小编大家带来的linux线程切换和进程切换的方法全部内容了,希望大家多多支持脚本之家~
  • 锁开销和上下文切换开销

    千次阅读 2017-07-07 10:21:47
    一、互斥锁的开销主要在内核态与用户态的切换:  申请锁时,从用户态进入内核态,申请到后从内核态返回用户态(两次切换);没有申请到时阻塞睡眠在内核态。使用完资源后释放锁,从用户态进入内核态,唤醒阻塞等待...
  • 进程和线程的区别

    千次阅读 2018-12-21 15:19:18
    进程和线程的区别 进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;或者更专业化来说:进程是指程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的...
  • Java面试题大全(2020版)

    万次阅读 多人点赞 2019-11-26 11:59:06
    发现网上很多Java面试题都没有答案,所以花了很长时间搜集...1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environ...
  • 进程切换和线程切换

    千次阅读 2019-08-11 09:52:12
    这种行为被称为进程切换(process switch)、任务切换(task switch)或上下文切换(content switch)。 原文 :https://www.cnblogs.com/kkshaq/p/4547725.html 进程切换分两步: 1.切换页目录以使用新的地址...
  • 先说结论:协程切换比线程切换快主要有两点: (1)协程切换完全在用户空间进行,线程切换涉及特权模式切换,需要在内核空间完成; (2)协程切换相比线程切换做的事情更少。 协程切换 协程切换只涉及基本的CPU...
  • 线程切换进程

    千次阅读 2020-11-30 17:53:57
    我们都知道线程切换的开销进程切换开销小,那么小在什么地方?切换的过程是怎样的? 无论是在多核还是单核系统中,一个CPU看上去都像是在并发的执行多个进程,这是通过处理器在进程间切换来实现的。 操作系统...
  • linux线程切换和进程切换的方法

    千次阅读 2019-06-08 02:35:00
    进程切换和线程切换在效率上略有不同,相比之下进程切换耗费资源较,效率要差一些,原因可以参考下面这篇文章 原文链接:https://www.jb51.net/article/102004.htm 进程切换分两步: 1.切换页目录以使用新的地址...
  • 时间系统、进程的调度与切换

    千次阅读 多人点赞 2013-09-16 19:13:24
    部分PC 机中有两个时钟源,他们分别叫做RTC 和OS(操作系统)时钟。RTC(Real Time Clock,实时时钟)也叫做CMOS 时钟,它是PC 主机板上的一块芯片(或者叫做时钟电路),它靠电池供电,即使系统断电,也可以维持...
  • 进程切换分析(2):TLB处理

    千次阅读 2017-02-09 21:08:12
    进程切换是一个复杂的过程,本文不准备详细描述整个进程切换的方方面面,而是关注进程切换中一个小小的知识点:TLB的处理。为了能够讲清楚这个问题,我们在第二章描述在单CPU场景下一些和TLB相关的细节,第三章推进...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 95,120
精华内容 38,048
关键字:

为什么进程切换开销大