上下文交换

上下文交换(context switch),又称环境切换,电脑术语,是一个储存和重建CPU的状态 (内文),因此令多个进程(process)可以分享单一CPU资源的计算过程。要交换CPU上的进程时,必需先行储存目前进程的状态,再将欲执行的进程之状态读回CPU中。

何时交换?

有三种可能的情况会发生上下文交换,分别为:

多工

最常见的,在一些排程(scheduling)算法内,其中行程有时候需要暂时离开CPU,让另一个行程进来CPU运作。在先占式多工系统中,每一个行程都将轮流执行不定长度的时间,这些时间段落称为时间片。如果行程并非自愿让出CPU(例如执行I/O操作时,行程就需放弃CPU使用权),当时限到时,系统将产生一个定时中断,操作系统将排定由其它的行程来执行。此机制用以确保CPU不致被较依赖处理器运算的行程垄断。若无定时中断,除非行程自愿让出CPU,否则该行程将持续执行。对于拥有较多I/O指令的行程,往往执行不了多久,便需要让出CPU;而较依赖处理器的行程相对而言I/O操作较少,反而能一直持续使用CPU,便形成了垄断现象。此即Convoy效应。

中断处理

在接受到中断(Interrupt)的时候,CPU必须要进行上下文交换。

用户态或者内核态的交换

当用户态和内核态交换发生的时候,并不需要进行上下文交换;并且用户态和kernel mode的交换本身并不是一个上下文交换。不过,根据操作系统的不同,有时候会在此时进行一次上下文交换的步骤。

上下文交换:具体步骤

在一次交换中,第一个行程的状态要被纪录在某个地方,这样当排程器(scheduler)要回到这个行程时,才可以重建这个行程并且继续运算。

这里所谓“行程的状态”,包含了这个行程使用的所有暂存器(register),特别是程式计数器;加上所有操作系统可能需要的特定资料。这些资料一般以名为行程控制表(process control block,PCB)的数据结构储存起来。

上下文交换:由软件或硬件实现

上下文交换可分为主要由软件实现或由硬件实现。部分中央处理器,比如Intel 80386或同系列更高阶的处理器,就具备支持上下文交换的硬件设计。

我们的公共号

wuguiyunwei.com

时间: 2024-10-05 13:22:11

上下文交换的相关文章

Oracle 11g数据库详解(2015-1-18更新)

Oracle 11g数据库详解 整理者:高压锅 QQ:280604597 Email:[email protected] 大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的 1   简介 数据库操作主要有以下几步: 1.  启动.停止数据库 2.  连接.断开数据库 3.  创建.修改.删除数据库用户 4.  表空间 5.  新建.修改.删除表 6.  查询.插入.修改.删除表数据 7.  新建.修改.删除视图 8.  新建.修改.删除存储过程 9.  新建.修改.删除触发

ASP.NET中常用的优化性能的方法

1. 数据库访问性能优化  数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响.系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求. 连接池的大小是有限的,如果在连接池达到最大限度后仍要求创建连接,必然大大影响性能.因此,在建立数据库连接后只有在真正需要操作时才打开连接,使用完

Android中获取CPU负载和进程cpu时间

android系统中有一个ProcessStats类,我们可以使用它来获取系统的负载情况及进程时间. 实现原理是读取/proc目录下的.linux系统运行时,内核会去更新 /proc目录下的文件,将PID的运行情况写入相应的文件中.我们主要关注以下文件 1. /proc/stat 该文件包含了从系统启动开始累积到当前时刻的CPU活动信息. 看下我手机的情况,如下 cat /proc/stat cpu  14869 5121 19794 156065 3114 0 26 0 0 0 cpu0 10

Node.js入门:异步IO

异步IO 在操作系统中,程序运行的空间分为内核空间和用户空间.我们常常提起的异步I/O,其实质是用户空间中的程序不用依赖内核空间中的I/O操作实际完成,即可进行后续任务. 同步IO的并行模式 多线程单进程    多线程的设计之处就是为了在共享的程序空间中,实现并行处理任务,从而达到充分利用CPU的效果.多线程的缺点在于执行时上下文交换的开销较大,和状态同步(锁)的问题.同样它也使得程序的编写和调用复杂化. 单线程多进程 为了避免多线程造成的使用不便问题,有的语言选择了单线程保持调用简单化,采用启

性能量化之cpu

系统现在很慢"似乎是对系统的性能最常用的抱怨了,但究竟慢到什么程度,如何来界定慢,可能需要对性能进行量化,对于OS来说,大致主要分为cpu,内存,磁盘,网络等组件,对这些维度的性能量化,不但可以更准确的定位到系统的瓶颈,更是做容量评估的基础.下面先看看cpu. Cpu的性能主要跟缓存,主频,指令集,工艺,流水线等相关因素有关. 当前微处理器的设计上主要分为精简指令集(RISC),复杂指令集(CISC),所以对于不同的cpu来说,如果使用的指令集不同,单纯的从时钟频率来判断频率高的就相应的性能就高

linux系统性能优化及瓶颈分析

一.用vmstat分析系统I/O情况 [[email protected] ~]# vmstat -n 3       (每一个3秒刷新一次) procs-----------memory--------------------swap--- ---io---- --system---- ------cpu-------- r   b    swpd   free       buff       cache       si   so   bi    bo   in      cs      

sar性能测试工具

yum install sysstat ============================================= 六,sar -n命令是查看网络信息和流通速度. ============================================= sar -n { DEV | EDEV | NFS | NFSD | SOCK | ALL } sar 提供六种不同的语法选项来显示网络信息.-n选项使用6个不同的开关:DEV | EDEV | NFS | NFSD | SOC

Java NIO4:Socket通道

Socket通道 上文讲述了通道.文件通道,这篇文章来讲述一下Socket通道,Socket通道与文件通道有着不一样的特征,分三点说: 1.NIO的Socket通道类可以运行于非阻塞模式并且是可选择的,这两个性能可以激活大程序(如网络服务器和中间件组件)巨大的可伸缩性和灵活性,因此,再也没有为每个Socket连接使用一个线程的必要了.这一特性避免了管理大量线程所需的上下文交换总开销,借助NIO类,一个或几个线程就可以管理成百上千的活动Socket连接了并且只有很少甚至没有性能损失 2.全部Soc

sar命令

sar可以显示出文件的读写情况.系统调用的使用情况.磁盘I/O.CPU使用率.内存使用率.进程活动及IPC等 用法: sar [options] [-A] [-o file] t [n] 常用参数: -A 列出所有的项目使用情况 -u 列出cpu的使用情况 -v 输出inode.文件和其他内核表的统计信息 -d:输出每一个块设备的活动信息 -r:输出内存和交换空间的统计信息 -b:显示I/O和传送速率的统计信息 -R:输出内存页面的统计信息 -w:输出系统交换活动信息 默认监控:sar 5 5