線程上下文切換

線程上下文切換

巧妙地利用了時間片輪轉的方式, CPU 給每個任務都服務一定的時間,然后把當前任務的狀態保存下來,在加載下一任務的狀態后,繼續服務下一任務,任務的狀態保存及再加載, 這段過程就叫做上下文切換。時間片輪轉的方式使多個任務在同一顆 CPU 上執行變成了可能。

image-20231209210737919

進程

(有時候也稱做任務)是指一個程序運行的實例。在 Linux 系統中,線程就是能并行運行并且與他們的父進程(創建他們的進程)共享同一地址空間(一段內存區域)和其他資源的輕量級的進程。

上下文

是指某一時間點 CPU 寄存器和程序計數器的內容。

寄存器

是 CPU 內部的數量較少但是速度很快的內存(與之對應的是 CPU 外部相對較慢的 RAM 主內存)。寄存器通過對常用值(通常是運算的中間值)的快速訪問來提高計算機程序運行的速度。

程序計數器

是一個專用的寄存器,用于表明指令序列中 CPU 正在執行的位置,存的值為正在執行的指令的位置或者下一個將要被執行的指令的位置,具體依賴于特定的系統。

PCB-“切換楨”

上下文切換可以認為是內核(操作系統的核心)在 CPU 上對于進程(包括線程)進行切換,上下文切換過程中的信息是保存在進程控制塊(PCB, process control block)中的。PCB 還經常被稱作“切換楨”(switchframe)。信息會一直保存到 CPU 的內存中,直到他們被再次使用。

上下文切換的活動:
  1. 掛起一個進程,將這個進程在 CPU 中的狀態(上下文)存儲于內存中的某處。
  2. 在內存中檢索下一個進程的上下文并將其在 CPU 的寄存器中恢復。
  3. 跳轉到程序計數器所指向的位置(即跳轉到進程被中斷時的代碼行),以恢復該進程在程序中。
引起線程上下文切換的原因
  1. 當前執行任務的時間片用完之后,系統 CPU 正常調度下一個任務;
  2. 當前執行任務碰到 IO 阻塞,調度器將此任務掛起,繼續下一任務;
  3. 多個任務搶占鎖資源,當前任務沒有搶到鎖資源,被調度器掛起,繼續下一任務;
  4. 用戶代碼掛起當前任務,讓出 CPU 時間;
  5. 硬件中斷;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210119.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210119.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210119.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Determining Which Version of GDS is Installed

Determining Which Version of GDS is Installed To determine which version of GDS you have, run the following command: $ gdscheck.py -v Example output: GDS release version: 1.0.0.78 nvidia_fs version: 2.7 libcufile version: 2.4

冒泡排序和直接選擇排序(C/C++實現)

文章目錄 冒泡排序(交換排序)基本思想特性總結代碼實現 直接選擇排序基本思想特性總結代碼實現(優化,每次循環同時選擇最小和最大的數) 冒泡排序(交換排序) 基本思想 基本思想:所謂交換,就是根…

class065 A星、Floyd、Bellman-Ford與SPFA【算法】

class065 A星、Floyd、Bellman-Ford與SPFA【算法】 2023-12-9 19:27:02 算法講解065【必備】A星、Floyd、Bellman-Ford與SPFA code1 A*算法模版 // A*算法模版(對數器驗證) package class065;import java.util.PriorityQueue;// A*算法模版&#xff…

vue3+TypeScript全局事件總線mitt

在vue3中 $ on,$off 和 $once 實例方法已被移除,組件實例不再實現事件觸發接口,因此大家熟悉的EventBus便無法使用了。然而我們習慣了使用EventBus,對于這種情況我們可以使用Mitt庫 npm i mitt -S 首先要在全局掛載 mitt 在app…

兩年外包生涯做完,感覺自己廢了一半。。。。。

先說一下自己的情況,本科生,19年通過校招進入南京某軟件公司,干了接近2年的功能測試,今年年初,感覺自己不能夠在這樣下去了,長時間呆在一個舒適的環境會讓一個人墮落!而我已經在一個企業干了2年的功能測試&…

laravel的ORM 對象關系映射

Laravel 中的 ORM(Eloquent ORM)是 Laravel 框架內置的一種對象關系映射系統,用于在 PHP 應用中與數據庫進行交互。Eloquent 提供了一種優雅而直觀的語法,使得開發者可以使用面向對象的方式進行數據庫查詢和操作。 定義模型&…

結合ColorUI組件開發微信小程序

1.自定義組件生命周期函數: Component({data: {},attached() {console.log("自定義組件生命周期函數 attached--先執行");this.getPos();},ready() {console.log("ready生命周期函數---在attached之后執行")},methods: {getPos() {var that th…

數據結構:位圖、布隆過濾器以及海量數據面試題

位圖、布隆過濾器以及海量數據面試題 1.位圖1.1概念1.2實現1.3位圖應用 2.布隆過濾器2.1布隆過濾器的提出2.2布隆過濾器的概念2.3布隆過濾器的查找2.4布隆過濾器的實現2.5布隆過濾器的刪除2.6布隆過濾器的優點2.7布隆過濾器的缺點 3.海量數據面試題3.1哈希切分3.2位圖應用3.3布…

如何成為前1%的程序員

如果你想成為前1%的程序員,你必須遵循1%的程序員做什么,了解其他99%的人不做什么。在現代,我們有各種學習平臺,里面充滿了與編程相關的視頻、圖文以及其他資料。 舉例來說,我作為編程的初學者,去尋找路線圖…

IDEA2023找不到add framework support怎么解決

問題: 我的idea版本是2023.01,新版idea右鍵項目沒有Add Framework Support,help里面也找不到相關的。 從project structue的facets里面添加就行了,都是一樣的。 1.依舊是新建一個項目 2.file-->project structure--->facets 左上角加…

數據結構與程序的關系

在計算機科學中,數據結構和算法是兩個核心的概念。數據結構是程序的基礎,它組織和存儲數據的方式直接影響程序的設計、效率、可讀性以及程序的錯誤檢測和調試。本文將詳細討論數據結構如何影響程序,以及數據結構與算法的組合如何使程序更高效、可靠。 一、數據結構的選擇影…

Android studio如何安裝ai輔助工具

引言 在沒有翻墻的情況下,即單純在公司打工,經測試,大部分ai工具都是使用不了的(比如各種gpt,codeium,copilot),根本登錄不了賬號,但有一個國內的codegeex是可以使用的,在這里不對各…

tensorflow中張量tensor

在 TensorFlow 中,主要操作的對象是張量(tf.Tensor)。張量表示一個多維數組,可以執行各種操作以構建和修改計算圖。以下是一些常見的 TensorFlow 張量操作: 1. 創建張量: 使用 tf.constant 創建常量張量。…

Android app性能優化指南

Android應用性能優化指南 提高應用程序的性能以實現更流暢的用戶體驗和更高的可見度。 性能在任何應用程序的成功中發揮著重要的作用。為用戶提供流暢無縫的體驗應該是開發人員的重點。 應用程序大小 在用戶開始使用我們的應用程序之前,他們需要下載應用程序并將…

DTCC2023大會-DBdoctor-基于eBPF觀測數據庫-附所有PPT下載鏈接

DTCC2023大會-DBdoctor-基于eBPF觀測數據庫-附所有PPT下載鏈接 8月16日—18日,第14屆中國數據庫技術大會(DTCC-2023)在北京國際會議中心舉行。聚好看在大會上首次發布基于eBPF觀測數據庫性能的產品DBdoctor,受到了業界廣泛的關注。近期幾位業內同仁過來要大會的PPT…

2024考研數學二備考歷程

GoodNotesGoodNotes apphttps://share.goodnotes.com/s/bhsraJMZ6OJwuYJb3OWnzP

Python點云處理(二十)點云輪廓邊界提取——基于鄰域三角形距離算法

目錄 0 簡述1 點云輪廓提取原理2 點云輪廓提取應用3 算法步驟4 代碼實現5 結果展示0 簡述 點云輪廓提取/邊界提取,對于掃描物信息化提取、矢量化等都具有很重要的意義。掃描物體輪廓不僅包含位置和形狀信息,而且可作為一種先驗形狀信息推斷其結構以輔助三維模型重建,因此輪…

C/C++之輸入輸出

文章目錄 一.C語言的輸入輸出1.printfi. 輸出整數ii. 浮點數iii.字符 & 字符串 2.scanfi.整數ii.浮點數iii. 字符 & 字符串 3.特殊用法i. * 的應用ii. %n 的應用iii. %[] 的應用 二.C中的輸入輸出1.couti. 緩沖區(buffer)ii. cout之格式化輸出 2…

Proteus仿真--串口發送數據到2片8×8點陣屏滾動顯示

本文介紹2片88點陣屏滾動顯示設計(完整仿真源文件及代碼見文末鏈接) 仿真圖如下 仿真運行視頻 Proteus仿真--1602LCD顯示電話撥號鍵盤按鍵實驗(仿真文件程序) 附完整Proteus仿真資料代碼資料 鏈接:https://pan.baidu…

【python】函數的參數(實參,形參,*args和**kwargs)

一、實參和形參 實參: 函數執行的時候給函數傳遞的具體的值 形參: 在函數聲明時編寫的變量 函數執行時每個形參都要有值 # a,b為形參 def add(a, b):print(a b) # 3,4為實參 add(3, 4)二、實參 1.位置參數 按位置給形參傳遞數據 def add(a, b)…