进程、线程上下文切换的开销

虚拟内存与地址空间映射关系

虚拟内存是操作系统为每个进程提供的一种抽象,每个进程都有属于自己的、私有的、地址连续的虚拟内存,当然我们知道最终进程的数据及代码必然要放到物理内存上,那么必须有某种机制能记住虚拟地址空间中的某个数据被放到了哪个物理内存地址上,这就是所谓的地址空间映射,也就是虚拟内存地址与物理内存地址的映射关系,那么操作系统是如何记住这种映射关系的呢,答案就是页表,页表中记录了虚拟内存地址到物理内存地址的映射关系。有了页表就可以将虚拟地址转换为物理内存地址了,这种机制就是虚拟内存。

进程上下文切换与线程上下文切换的对比

进程切换

切换虚拟地址空间,切换内核栈和硬件上下文

线程切换

切换内核栈和硬件上下文

进程与线程的区别?

(1)进程有自己的独立地址空间,线程没有

(2)进程是资源分配的最小单位,线程是CPU调度的最小单位

(3)进程和线程通信方式不同(线程之间的通信比较方便。同一进程下的线程共享数据(比如全局变量,静态变量),通过这些数据来通信不仅快捷而且方便,当然如何处理好这些访问的同步与互斥正是编写多线程程序的难点。而进程之间的通信只能通过进程通信的方式进行。)

(4)进程上下文切换开销大,线程开销小

(5)一个进程挂掉了不会影响其他进程,而线程挂掉了会影响其他线程

(6)对进程操作一般开销都比较大,对线程开销就小了

为什么进程上下文切换比线程上下文切换代价高?

进程切换分两步:

1.切换页目录以使用新的地址空间

2.切换内核栈硬件上下文

对于linux来说,线程和进程的最大区别就在于地址空间,对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的。

切换的性能消耗:

1、线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。这两种上下文切换的处理都是通过操作系统内核来完成的。内核的这种切换过程伴随的最显著的性能损耗是将寄存器中的内容切换出。

2、另外一个隐藏的损耗是上下文的切换会扰乱处理器的缓存机制。简单的说,一旦去切换上下文,处理器中所有已经缓存的内存地址一瞬间都作废了。还有一个显著的区别是当你改变虚拟内存空间的时候,处理的页表缓冲(processor's Translation Lookaside Buffer (TLB))被全部刷新,这将导致内存的访问在一段时间内相当的低效。但是在线程的切换中,不会出现这个问题。

切换开销

最显著的性能损耗是将保存寄存器中的内容

CPU高速缓存失效

页表查找是一个很慢的过程,因此通常使用Cache来缓存常用的地址映射,这样可以加速页表查找,这个cache就是TLB.当进程切换后页表也要进行切换,页表切换后TLB就失效了,cache失效导致命中率降低,那么虚拟地址转换为物理地址就会变慢,表现出来的就是程序运行会变慢

如何避免

 

  • 11
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CPU时间片指的是在多任务操作系统中,将CPU的执行时间划分成多个时间片段,每个进程线程在一个时间片段内独占CPU的执行权,当时间片用完后,操作系统会将CPU的执行权转交给其他进程线程,以此来实现多任务并发执行的功能。 当操作系统将CPU执行权从一个进程线程切换到另一个进程线程时,需要进行上下文或状态切换。上下文或状态切换是指将当前进程线程的执行状态保存到内存中,并将下一个进程线程的执行状态从内存中恢复到CPU中,以便其继续执行。上下文切换的具体步骤包括保存当前进程线程的寄存器状态、内存映像以及其他相关信息,然后将这些信息写入内存,并恢复下一个进程线程的寄存器状态、内存映像以及其他相关信息到CPU中。 上下文或状态切换开销指的是在进行进程线程切换时所需要的时间和资源消耗。由于上下文或状态切换需要保存和恢复大量的进程线程执行状态,因此会产生较大的时间和资源消耗。这种消耗会对系统的性能和响应时间产生负面影响,尤其是在高负载和多任务并发执行的情况下,会降低系统的执行效率。 另外,频繁的上下文或状态切换也会导致CPU缓存失效,从而增加了访问内存的开销,进一步降低了系统的性能。因此,在设计和实现多任务操作系统时,需要考虑到上下文或状态切换开销的影响,并采取相应的优化措施,以提高系统的性能和响应时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值