重定向至此，关于""的其它含义参见。
**上下文交換**（英語：），又稱**環境切換**，電腦術語，是一個儲存和重建CPU的狀態（上下文），因此令多個进程（process）可以分享單一CPU資源的計算過程。要交換CPU上的进程時，必須先行儲存目前进程的狀態，再將欲執行的进程之狀態讀回CPU中。

开销
--

上下文切换通常是计算密集型的，操作系统中的许多设计都是针对上下文切换的优化。在进程间切换需要消耗一定的时间进行相关的管理工作——包括寄存器和内存映射的保存与读取、更新各种内部的表等等。处理器或者操作系统不同，上下文切换时所涉及的内容也不尽相同。比如在Linux内核中，上下文切换需要涉及寄存器（register）、栈指针（stack pointer）、程序计数器（program counter）的切换，但和地址空间的切换无关（虽然进程在进行上下文切换时也需要做地址空间的切换）。用户态线程之间也会发生类似的上下文切换，但这样的切换非常轻量。

交換时机
----

有三種可能的情況會發生上下文交換，分別為：

### 多工

最常見的，在一些排程（scheduling）算法內，其中行程有時候需要暫時離開CPU，讓另一個行程進來CPU運作。在先佔式多工系統中，每一個行程都將輪流執行不定長度的時間，這些時間段落稱為时间片。如果行程並非自願讓出CPU(例如執行I/O操作時，行程就需放棄CPU使用權)，當時限到時，系統將產生一個定時中斷，作業系統將排定由其它的行程來執行。此機制用以確保CPU不致被較依賴處理器運算的行程壟斷。若無定時中斷，除非行程自願讓出CPU，否則該行程將持續執行。對於擁有較多I/O指令的行程，往往執行不了多久，便需要讓出CPU；而較依賴處理器的行程相對而言I/O操作較少，反而能一直持續使用CPU，便形成了壟斷現象。

### 中斷處理

在接受到中斷（Interrupt）的時候，CPU必須要進行上下文交換。

### 用戶态或者内核态的交換

當用戶態和内核态交換發生的時候，並不需要進行上下文交換；並且用戶態和kernel mode的交換本身並不是一個上下文交換。不過，根據作業系統的不同，有時候會在此時進行一次上下文交換的步驟。

上下文交換：具體步驟
----------

在一次交換中，第一個行程的狀態要被紀錄在某個地方，這樣當排程器（scheduler）要回到這個行程時，才可以重建這個行程並且繼續運算。

這裡所謂「行程的狀態」，包含了這個行程使用的所有暫存器（register），特別是程式計數器；加上所有作業系統可能需要的特定資料。這些資料一般以名為行程控制表（process control block，PCB）的資料結構儲存起來。

上下文交換：由軟體或硬體實現
--------------

上下文交換主要由軟體實現或由硬體實現。部分中央處理器，比如Intel 80386或同系列更高階的處理器，就具備支持上下文交換的硬體設計。

參考資料
----

1. ↑  Silberschatz, Abraham; Peter Baer Galvin, Greg Gagne.  7. John Wiley & Sons (Asia) Pte Ltd. ISBN 0-4717-2595-1.  引文使用过时参数`coauthors` (帮助)
2. ↑  *IA-64 Linux Kernel: Design and Implementation*, 4.7 Switching Address Spaces （页面存档备份，存于）
3. ↑  *Operating Systems*, 5.6 The Context Switch, p. 118 （页面存档备份，存于）
4. ↑ .  [2010-02-05]. （原始内容存档于2010-02-18）.

外部連結
----

* Context Switching（页面存档备份，存于） - at OSDev.org
* Context Switch Definition - by The Linux Information Project (LINFO)
* Context Switches - from the Microsoft Developer Network (MSDN)

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
操作系统 |
| --- |
|  |
| 概述 | 
* 宣传（英语：）
* 比较（英语：）
* 鑑識软件工程（英语：）
* 历史
* 爱好者开发（英语：）
* 列表
* 年表
* 份额

 |
|  |
| 内核 | 

|  |  |
| --- | --- |
| 系统结构 | 
* Exokernel
* 混合
* 微內核
* 整塊性核心
* 尾闾内核（英语：）
* 单一内核

 |
|  |
| 组件 | 
* 驱动程序
* 可載入核心模組
* 微內核
* 使用者空間

 |

 |
|  |
| 行程管理 | 

|  |  |
| --- | --- |
| 概念 | 
* 上下文交換
* 中斷
* 行程間通訊
* 行程
* 行程控制表
* 实时操作系统
* 线程
* 分時系統

 |
|  |
| 调度算法 | 
* 多任务处理
* 固定优先级抢占（英语：）
* 多级反馈队列（英语：）
* 抢占式多任务处理
* 循環制
* 短进程优先

 |

 |
|  |
| 記憶體管理和資源保护 | 
* 总线错误
* 一般保护错误
* 記憶體保護
* 分頁
* 分级保护域
* 記憶體區段錯誤
* 虚拟内存

 |
|  |
| 存储访问和文件系统 | 
* 啟動程式
* 碎片整理（英语：）
* 设备文件（英语：）
* 文件属性
* Inode
* 日志
* 分区
* 虛擬檔案系統
* 虚拟磁带库（英语：）

 |
|  |
| 操作系统列表 | 
* AmigaOS
* Android
* BeOS
* BSD
* ChromeOS
* CP/M
* DOS
* GNU
* Haiku
* 鸿蒙
* Illumos
* iOS
* Linux
* Macintosh
	+ Classic Mac OS
	+ MacOS
* MINIX
* MorphOS（英语：）
* MUSIC/SP（英语：）
* NOS（英语：）
* NGB TVOS
* OpenVMS
* ORVYL（英语：）
* OS/2
* OSv（英语：）
* Pick（英语：）
* QNX
* ReactOS
* RISC OS
* RSTS/E（英语：）
* RSX-11
* RT-11（英语：）
* Solaris
* TOPS-10/TOPS-20（英语：）
* TPF（英语：）
* tvOS
* UNIX
* UOS
* Visi On（英语：）
* VM/CMS（英语：）
* VS/9（英语：）
* Microsoft Windows
* Xinu（英语：）
* z/OS
* watchOS

 |
|  |
| 其他概念 | 
* 应用程序接口（API）
* 计算机网络
* 硬體抽象層（HAL）
* Live CD
* Live USB
* 殼層（OS Shell）
	+ 命令行界面（CLI）
	+ 图形用户界面（GUI）
	+ TUI（英语：）
	+ VUI（英语：）
* 预启动执行环境

 |

 |