漫谈操作系统11 -- 上下文切换

本文探讨了操作系统中的上下文切换,解释了为何操作系统通常通过汇编实现这一过程,以及上下文切换如何涉及寄存器保存和恢复。上下文切换对性能的影响以及在不同处理器架构上的优化,如ARM架构的TLB优化,以提高内存访问效率。同时强调减少上下文切换和中断以提升程序效率,以DPDK的高速网络协议栈为例,说明了在某些场景下如何避免上下文切换和中断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

中间有些个人的私事中断了一段时间这个系列的博文,总体来说还是不甚满意,后面应该会对博文的结构进行调整,并且添加更加详细的内容,目前的状态有点太概括和笼统,虽然就我自己的认识来说操作系统的逻辑本身并不复杂,复杂的是其实现的细节,就像一句老化魔鬼都在细节当中, 所以操作系统和典型的作业系统是相反的两个方向,操作系统从大的逻辑上来讲实际上很简单,抽象硬件并分时复用硬件,而很多大型的业务系统完全没有办法这么简单的概括,比如云计算的系统,LTE通信系统,甚至ERP/CRM这类的信息管理系统都在逻辑业务上复杂无比,但是很多情况下它们并不需要复杂的编码,而只是实现业务逻辑就能满足需求了。


言归正传,下面接着讲上下文切换。 本来没有准备讲解上下文切换的,因为对于了解操作系统来说,当你走读代码到上下文切换的时候,一般你只需要知道当前的任务在这个位置就停止运行了,如果此任务重新的到执行的时间片的时候,它就会从切换的代码位置然后再接着继续执行。(简单来说就像什么都没发生过一样)

而上下文切换的代码一般都很短,而由于其性能强相关,并且需要一个个操作寄存器,所以其一般由汇编语言来进行实现,所以读这部分的代码需要熟悉对应的处理器体系结构,然后清楚对于当前体系结构的处理器需要保存的寄存器上下文有哪些,然后你就看到其汇编代码只是根据这个寄存器列表把当前运行的线程的寄存器数据一个个的复制到线程的上下文缓冲中,然后把需要被切换到的线程的上下文缓冲中的内容一个个的复制到物理寄存器之上。 这里面有一个小的需要注意的点,最后赋值的寄存器是PC指针,其指向线程要运行的下一条指令,在完成其他寄存器切换之前是不能先切换PC指针寄存器的。


使用下面的命令可以查看Linux系统中对主动上下文切换和被

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值