网站建设试用,wordpress备案显示,wordpress explode,做服装网站对于linux来说#xff0c;本身就是一个多任务运行的操作系统#xff0c;运行远大于CPU核心数的程序#xff0c;从用户视角来看是并发执行#xff0c;而在CPU视角看其实是将不同的CPU时间片进行分割#xff0c;每个程序执行一下#xff0c;就切换到别的程序执行。那么这个…对于linux来说本身就是一个多任务运行的操作系统运行远大于CPU核心数的程序从用户视角来看是并发执行而在CPU视角看其实是将不同的CPU时间片进行分割每个程序执行一下就切换到别的程序执行。那么这个CPU上下文是什么。 我们知道对于CPU来说有寄存器和程序计数器前者是CPU内置的高速缓存存储数据的后者是标识当前程序执行到哪里。 比如我们执行某个程序那么寄存器此时就保存着当前程序执行的数据以及当前程序将要执行的下一条指令这个就是CPU执行所依赖的环境也被称为上下文。
而上下文切换其实就是将当前程序执行的数据进行保存加载新的执行的程序的数据和指令。
那么切换上下文除了进程和线程两种方式还有别的方式嘛中断调用其实也会触发切换。
进程上下文切换
linux按照特权等级进程运行的空间分为内核空间和用户空间ring0和ring3 内核空间说白了就是可以执行所有操作和访问所有资源而应用空间只能访问受限资源和执行指令。 进程在用户空间运行时被称为用户态在内核空间运行时被称为内核态。 比如读取一个文件需要先从用户态切换到内核态内核态调用read、write、close函数最后在切换回用户态。 而这里就需要在系统调用前保存用户态的栈、空间数据等然后切换到内核态中执行内核态最后将现场还原。1次系统调用发生了两次上下文切换。
进程上下文切换是指从一个进程切换到另一个进程运行。而系统调用过程中一直是同一个进程在运行。
系统调用过程通常称为特权模式切换而不是上下文切换 所以进程上下文切换其实需要先保存进程1的上下文然后在加载进程2的上下文而系统调用是比进程上下文切换少一步。 进程在什么时候回发生切换其实主要依赖于进程的调度算法一般是按照优先级和最长时间等待。频繁的上下文切换其实就会消耗CPU的执行时间。
线程上下文切换
线程与进程最大的区别在于线程是调度的基本单位而进程则是资源拥有的基本单位 所以进程内的虚拟内存、全局变量对于同一个进程内的线程来说是共享的但是线程也有自己的私有数据栈和寄存器等。
前后两个线程属于不同的进程那么等价于进程上下文切换。前后两个线程同属于一个进程虚拟内存是共享的所以不动但是需要切换线程的私有数据、寄存器等不共享数据。
所以进程内的线程切换要比进程间切换的消耗更少的资源也是多线程替代进程的优势。
中断上下文切换
为了快速响应硬件的事件中断处理会打算进程的正常执行和调度。需要保存之前的状态和恢复现场。 中断上下文切换不会打算用户态进程只需要包含内核态中断服务程序执行所必须的状态CPU寄存器、内核堆栈、硬件中断参数等。 对于同一个CPU来说中断处理比进程有更好的优先级。
小结
本篇我们讲述的了CPU上下文切换的理论主要是进程、线程、中断上下文切换。如果上下文切换过多会导致整体系统性能下降。 cpu上下文切换就好比一个人有好多朋友要拜访有的朋友房子大进程进进出出里三层外三层有的朋友住帐篷线程就拉开帐篷聊聊天有的朋友就隔着窗户说两句话打个照面路过中断