关于进程和线程的上下文

何为“上下文”

所谓“上下文”,指的是:当前进(线)程的状态信息

对于线程而言,包括程序计数器,寄存器状态,栈空间的指针等(这几个就不过多解释了)

对于进程而言,是在线程的上下文的基础上加上各个进程自己的虚拟地址空间和虚拟内存空间映射的页表

何为“上下文切换”

上下文切换是一种 将 CPU 资源从一个进程分配给另一个进程的机制。CPU从一个线程转到另一个线程时,操作系统需要先存储当前线程的上下文状态,再读入另一个线程的上下文状态,以便下一次恢复执行该线程时能够正确地恢复运行。

上下文切换的流程

进程切换分两步:

① 切换页表以使用新的地址空间,一旦去切换上下文,处理器中所有已经缓存的内存地址一瞬间都作废了。

② 切换内核栈和硬件上下文。

对于线程切换,第1步是不需要做的,第2步是进程和线程切换都要做的。

何为虚拟地址空间和页表

每个进程处于安全性的原因,不能直接操作物理内存,所以在运行时都有自己的虚拟内存地址空间,这个空间是由操作系统提供的,它包括了进程需要访问的所有内存地址。

虚拟内存地址空间需要通过页表查找转换成物理内存地址,那么当进程切换后页表也要进行切换。

虚拟内存地址空间需要通过页表查找转换成物理内存地址是一个很耗时间的操作。因此引入了TLB的概念。

TLB是存储在CPU上的。当程序访问某个虚拟地址时,CPU首先检查TLB以查找虚拟地址到物理地址的映射。如果TLB中存在相应的映射,CPU就可以直接从中获取物理地址而无需访问内存。但如果TLB中没有找到相应的映射,CPU就会触发一个TLB未命中(TLB miss)的情况,此时需要从内存中获取对应的映射信息。

当进程切换后页表也要进行切换,页表切换后CPU中的TLB就失效了,失效导致映射的命中率降低,那么虚拟地址转换为物理地址就会变慢,表现出来的就是程序运行会变慢。线程切换则不会导致TLB失效,因为线程无需切换地址空间。

“上下文”在哪里被保存和恢复

在进程或线程进行上下文切换时,其上下文通常被保存在存储在物理内存中,具体是在内核空间内存的数据结构:进程控制块(PCB)或线程控制块(TCB)中。这样做既保证了信息的安全,也便于操作系统管理进程(线程)的状态。在恢复上下文时,操作系统从该线程的TCB或PCB中读取之前保存的上下文信息,恢复所有上下文信息。以便正确地恢复运行。

上下文切换带来的问题:

过多的线程并行执行会导致CPU资源的争抢,产生频繁的上下文的保存和加载导致CPU资源的浪费,常常表现为高并发执行时,接口响应速度延长。

所以合理控制上下文切换次数,可以提高多线程应用的运行效率。但线程并不是越多越好。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
进程上下文是指在一个进程执行期间,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容的总和。它包括用户级上下文和系统级上下文。用户级上下文包括用户的程序块、数据块、运行时的堆和用户栈等组成的用户空间信息。而系统级上下文包括进程标识信息、进程现场信息、进程控制信息(包含进程表、页表、打开文件表等)和系统内核栈等组成的内核空间信息。 线上下文进程上下文类似,但是线程之间共享同一进程的地址空间,所以在切换线上下文时,不需要切换地址空间,只需要切换线程的寄存器状态即可。一次线上下文切换发生在一个进程内的不同线程之间。 中断上下文是发生在CPU响应硬件中断时,保存当前正在执行的上下文,然后切换到中断处理程序的上下文。中断上下文保存了中断前的进程上下文信息,以及中断处理程序执行所需要的寄存器和堆栈等。 中断上下文的切换是由硬件自动完成的,它会保存当前正在执行的进程线程的上下文,切换到中断服务程序的上下文,等中断处理完成后再切换回原来的上下文。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Linux:上下文进程上下文和中断上下文概念,上下文切换](https://blog.csdn.net/W546556/article/details/126300300)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [系统调用,上下文切换(cpu上下文进程上下文线上下文,中断上下文进程切换,线程切换)](https://blog.csdn.net/aa541850383/article/details/125363264)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值