程式切換(上下文切換)
多工作業系統是怎麼實現執行遠大於CPU 數量的任務個數的?當然,這些任務實際上並不是真的在同時執行,而是因為系統通過時間片分片演算法,在很短的時間內,將CPU 輪流分配給它們,造成多工同時執行的錯覺。
為了控制程式的執行,核心必須有能力掛起正在CPU 上執行的程式,並恢復以前掛起的某個程式的執行。這種行為被稱為程式切換。
什麼叫上下文?
在每個任務執行前,CPU 都需要知道任務從哪裡載入、又從哪裡開始執行,也就是說,需要系統事先幫它設定好CPU 暫存器和程式計數器(Program Counter),這個叫做CPU 的上下文。
而這些儲存下來的上下文,會儲存在系統核心中,並在任務重新排程執行時再次載入進來。這樣就能保證任務原來的狀態不受影響,讓任務看起來還是連續執行。
在切換上下文的時候,需要完成一系列的工作,這是一個很消耗資源的操作。
相關文章
- goroutine 上下文切換Go
- goroutine上下文切換機制Go
- 結合中斷上下文切換和程式上下文切換分析Linux核心的一般執行過程Linux
- Linux CPU 上下文切換的故障排查Linux
- 小程式標籤切換
- 棧切換
- 微信小程式-uniapp-切換tab時資料列表如何切換?微信小程式APP
- 小程式切換主題配色
- Linux 效能優化之 CPU 篇 ----- 上下文切換Linux優化
- 切換UNDO(zt)
- ubuntu切換源Ubuntu
- Git分支切換Git
- 切換java版本Java
- 切換 PHP 版本PHP
- 小程式標籤頁切換效果
- DG的切換操作
- DATAGUARD失敗切換
- cd 切換目錄
- valet 切換 PHP 版本PHP
- cd:切換目錄
- IP地址切換工具
- jq切換皮膚
- (九)主題切換
- centos 切換 jdk 版本CentOSJDK
- linux zsh 切換 bashLinux
- GCC 多版本切換GC
- Redis主從切換Redis
- DATAGUARD強行切換
- iOS 切換鍵盤iOS
- jdk 多版本切換JDK
- 多螢幕切換
- lnmp 切換PHP版本LNMPPHP
- Mac切換Python版本MacPython
- uniapp 滑動切換APP
- 啃碎併發(三):Java執行緒上下文切換Java執行緒
- 程式設計師被打斷:中斷和上下文切換的真正代價程式設計師
- MySQL Orchestrator自動導換+VIP切換MySql
- 系統呼叫,上下文切換及中斷概念的彙總