您的位置:首页 > 理论基础

回过头再看 计算机体系结构1----CPU上下文切换

2016-09-28 09:36 246 查看
按:

学习新的东西往往第一遍晦涩难懂,但是忽然等你学多了回头看,就豁然开朗。所以学习要多次复盘review,把体系知识图构建起来。

[参考资料]
《深入理解计算机系统》
《现代操作系统》
云栖社区  /  并发编程网ifeve.com

什么是上下文切换 ?
传统的计算机都是批处理,而现代的计算机都是采用多任务处理。多任务系统往往需要同时(并发)执行多道作业.作业数往往大于机器的CPU数, 然而一颗CPU同时只能执行一项任务, 如何让用户感觉这些任务正在同时进行呢?

操作系统的设计者巧妙地利用了时间片轮转的方式, CPU给每个任务都服务一定的时间, 然后把当前任务的状态保存下来, 再加载下一任务的状态后, 继续服务下一任务. …… 
  任务的状态保存及再加载, 这段过程就叫做上下文切换。在上下文切换过程中,CPU会停止处理当前运行的程序,并保存当前程序运行的具体位置以便之后继续运行。打个比方,上下文切换有点像我们同时阅读几本书,在来回切换书本的同时我们需要记住每本书当前读到的页码。在程序中,上下文切换过程中的“页码”信息是保存在进程控制块(PCB)中的。PCB还经常被称作“切换桢”(switchframe)。“页码”信息会一直保存到CPU的内存中,直到他们被再次使用。

什么时候会发生上下文切换?
在三种情况下可能会发生上下文切换:中断处理,多任务处理,用户态切换。
在中断处理中,其他程序”打断”了当前正在运行的程序。当CPU接收到中断请求时,会在正在运行的程序和发起中断请求的程序之间进行一次上下文切换。在多任务处理中,CPU会在不同程序之间来回切换,每个程序都有相应的处理时间片,CPU在两个时间片的间隔中进行上下文切换。

     [引申]
对于一些操作系统,当进行用户态切换时也会进行一次上下文切换,虽然这不是必须的。操作系统或者计算机硬件都支持上下文切换。一些现代操作系统通过系统本身来控制上下文切换,整个切换过程中并不依赖于硬件的支持,这样做可以让操作系统保存更多的上下文切换信息

上下文切换会带来直接和间接两种因素影响程序性能的消耗
时间片轮转的方式使多个任务在同一颗CPU上执行变成了可能, 但同时也带来了保存现场和加载现场的直接消耗。
直接消耗包括: CPU寄存器需要保存和加载, 系统调度器的代码需要执行, TLB实例需要重新加载, CPU 的pipeline需要刷掉;
间接消耗包括:多核的cache之间得共享数据, 间接消耗对于程序的影响要看线程工作区操作数据的大小

性能
多处理对CPU的利用率提高了,但是个单独的程序来说性能不好,因为无法独自CPU获得最大资源。所以既要兼顾CPU性能还要注意某类应用的场景需求。比如实时应用就不能被切换下去吧。他必须时刻占有CPU保证执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  操作系统 计算机