日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

上下文保存 中断_Linux性能优化(CPU篇)(5)——CPU的上下文切换有几种类型?什么是进程上下文切换?...

發(fā)布時(shí)間:2024/9/19 linux 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 上下文保存 中断_Linux性能优化(CPU篇)(5)——CPU的上下文切换有几种类型?什么是进程上下文切换?... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上一篇中講了stress用來(lái)模擬常見(jiàn)壓力測(cè)試的選項(xiàng):

RobotCode俱樂(lè)部:《Linux性能優(yōu)化實(shí)戰(zhàn)》之CPU性能篇(四)?zhuanlan.zhihu.com

這一篇的主題是:CPU上下文切換 之 進(jìn)程上下文切換。

那么什么是 CPU上下文切換。簡(jiǎn)而言之,就是一個(gè)進(jìn)程放棄對(duì)CPU的占用,讓出其使用權(quán),給其進(jìn)程使用,此間發(fā)生的對(duì)當(dāng)前進(jìn)程的執(zhí)行狀態(tài)與現(xiàn)場(chǎng)保護(hù),從而可以加載新的進(jìn)程,這個(gè)過(guò)程就是CPU上下文切換。

那么CPU的上下文切換可以分為幾種類型?

根據(jù)場(chǎng)景不同,可以分為3種類型:

  • 進(jìn)程上下文切換
  • 線程上下文切換
  • 中斷上下文切換
  • 那么這幾種切換,哪種對(duì)CPU的平均負(fù)載影響最大?首先需要明白這幾種切換時(shí),CPU都干了些什么事。

    進(jìn)程上下文切換

    Linux按照特權(quán)等級(jí),把進(jìn)程的運(yùn)行空間分為內(nèi)核空間與用戶空間。內(nèi)核空間具有最高權(quán)限,可以直接訪問(wèn)所有資源;用戶空間只能訪問(wèn)受限資源,要想訪問(wèn)其他不能直接訪問(wèn)的資源需要通過(guò)系統(tǒng)調(diào)用的方式陷入內(nèi)核中,此時(shí)相當(dāng)于內(nèi)核代替其執(zhí)行一些資源的訪問(wèn)。(這里有個(gè)問(wèn)題,普通進(jìn)程通過(guò)系統(tǒng)調(diào)用就能訪問(wèn)之前自己對(duì)受限的資源,那 普通進(jìn)程和 內(nèi)核 好像沒(méi)有區(qū)別了?后面會(huì)寫這個(gè)疑問(wèn))

    這里要引入的問(wèn)題是 一次系統(tǒng)調(diào)用 引起幾次CPU上下文切換?

    在系統(tǒng)調(diào)用前,為了執(zhí)行內(nèi)核態(tài)的代碼,需要先將用戶態(tài)的 運(yùn)行環(huán)境保存起來(lái),CPU調(diào)入內(nèi)核態(tài)代碼,此時(shí)發(fā)生一次CPU上下文切換。之后,系統(tǒng)調(diào)用執(zhí)行完后,又要返回到用戶態(tài),此時(shí)又要此前保存的用戶態(tài)運(yùn)行環(huán)境重新調(diào)入CPU,再次執(zhí)行,又發(fā)生了一次CPU上下文切換。

    還有個(gè)問(wèn)題,進(jìn)程上下文切換 和 系統(tǒng)調(diào)用的上下文切換 是什么區(qū)別?

    進(jìn)程上下文切換,是指從一個(gè)進(jìn)程切換到另一個(gè)進(jìn)程運(yùn)行,而系統(tǒng)調(diào)用過(guò)程中一直是同一個(gè)進(jìn)程在運(yùn)行,不會(huì)涉及虛擬內(nèi)存等進(jìn)程用戶態(tài)的資源。系統(tǒng)調(diào)用過(guò)程一般稱之為 特權(quán)模式切換,而不是CPU上下文切換,但是系統(tǒng)調(diào)用的過(guò)程中 CPU的上下文切換是無(wú)法避免的!

    所以進(jìn)程的上下文切換就比系統(tǒng)調(diào)用多了一步,保存當(dāng)前進(jìn)程的內(nèi)核狀態(tài)和CPU寄存器之前,需要先把該進(jìn)程的虛擬內(nèi)存、棧等保存下來(lái);而加載了下一進(jìn)程的內(nèi)核態(tài)后,還要刷新進(jìn)程的虛擬內(nèi)存和用戶棧。

    Linux通過(guò)TLB管理虛擬內(nèi)存到物理內(nèi)存的映射關(guān)系,當(dāng)虛擬內(nèi)存更新后,TLB也需要刷新,內(nèi)存訪問(wèn)會(huì)隨之變慢,特別是在多處理器系統(tǒng)上,緩存是被多個(gè)處理器共享的,刷新緩存不僅會(huì)影響當(dāng)前處理器的進(jìn)程,也會(huì)影響共享緩存的其他處理器的進(jìn)程。

    那么什么時(shí)候會(huì)發(fā)生進(jìn)程上下文切換?

  • Linux為了保證每個(gè)進(jìn)程被公平調(diào)度,CPU時(shí)間被劃分為一段段時(shí)間片,這時(shí)時(shí)間片再被輪流分配給各個(gè)進(jìn)程,當(dāng)某個(gè)進(jìn)程的時(shí)間片耗盡了,就會(huì)被系統(tǒng)掛起,切換到其他進(jìn)程;
  • 在系統(tǒng)資源不足時(shí),需要等待資源滿足后才可以運(yùn)行,這個(gè)時(shí)候進(jìn)程會(huì)被掛起,由系統(tǒng)調(diào)度其他進(jìn)程運(yùn)行;
  • 當(dāng)進(jìn)程通過(guò)睡眠函數(shù)sleep這樣的方法將自己主動(dòng)掛起,自然也會(huì)重新調(diào)度;
  • 當(dāng)有優(yōu)先級(jí)更高的進(jìn)程運(yùn)行時(shí),為了保證高優(yōu)先級(jí)進(jìn)程的運(yùn)行,當(dāng)前進(jìn)程會(huì)被掛起,由高優(yōu)先級(jí)進(jìn)程來(lái)運(yùn)行;
  • 發(fā)生硬件中斷時(shí),CPU上的進(jìn)程會(huì)被中斷掛起,轉(zhuǎn)而執(zhí)行內(nèi)核中的中斷服務(wù)程序。
  • 這一篇先碼這么多,下一篇討論 線程上下文切換。

    歡迎訂閱倪老師課程,有更多真實(shí)案例分享

    總結(jié)

    以上是生活随笔為你收集整理的上下文保存 中断_Linux性能优化(CPU篇)(5)——CPU的上下文切换有几种类型?什么是进程上下文切换?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。