《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > Linux 組調(diào)度

Linux 組調(diào)度

2022-07-14
作者:songsong001
來源:Linux內(nèi)核那些事
關(guān)鍵詞: Linux組調(diào)度

  Linux組調(diào)度是什么?Linux組調(diào)度原理圖你知道嗎?Linux組調(diào)度是如何實現(xiàn)的?


在介紹 組調(diào)度 前,我們先來重溫下什么是 進程調(diào)度。

  本文基于 Linux-2.6.26 版本

  什么是進程調(diào)度

  一般來說,在操作系統(tǒng)中會運行多個進程(幾個到幾千個不等),但一臺計算機的 CPU 資源是有限的,如 8 核的 CPU 只能同時運行 8 個進程。那么當(dāng)進程數(shù)大于 CPU 核心數(shù)時,操作系統(tǒng)是如何同時運行這些進程的呢?

  這里就涉及 進程調(diào)度 問題。

  操作系統(tǒng)運行進程的時候,是按 時間片 來運行的。時間片 是指一段很短的時間段(如20毫秒),操作系統(tǒng)會為每個進程分配一些時間片。當(dāng)進程的時間片用完后,操作系統(tǒng)將會把當(dāng)前運行的進程切換出去,然后從進程隊列中選擇一個合適的進程運行,這就是所謂的 進程調(diào)度。如下圖所示:

  微信圖片_20220714151053.png

  什么是組調(diào)度

  一般來說,操作系統(tǒng)調(diào)度的實體是 進程,也就是說按進程作為單位來調(diào)度。但如果按進程作為調(diào)度實體,就會出現(xiàn)以下情況:

  Linux 是一個支持多用戶的操作系統(tǒng),如果 A 用戶運行了 10 個進程,而 B 用戶只運行了 2 個進程,那么就會出現(xiàn) A 用戶使用的 CPU 時間是 B 用戶的 5 倍。如果 A 用戶和 B 用戶都是花同樣的錢來買的虛擬主機,那么對 B 用戶來說是非常不公平的。

  為了解決這個問題,Linux 實現(xiàn)了 組調(diào)度 這個功能。那么什么是 組調(diào)度 呢?

  組調(diào)度 的實質(zhì)是:調(diào)度時候不再以進程作為調(diào)度實體,而是以 進程組 作為調(diào)度實體。比如上面的例子,可以把 A 用戶運行的進程劃分為 進程組A,而 B 用戶運行的進程劃分為 進程組B。

  調(diào)度的時候,進程組A 和 進程組B 分配到相同的可運行 時間片,如 進程組A 和 進程組B 各分配到 100 毫秒的可運行時間片。由于 進程組A 有 10 個進程,所以每個進程分配到的可運行時間片為 10 毫秒。而 進程組B 只有 2 個進程,所以每個進程分配到的可運行時間片為 50 毫秒。

  下圖是 組調(diào)度 的原理:

  微信圖片_20220714151117.png

  如上圖所示,當(dāng)內(nèi)核進行調(diào)度時,首先以 進程組 作為調(diào)度實體。當(dāng)選擇出最優(yōu)的 進程組 后,再從 進程組 中選擇出最優(yōu)的進程進行運行,而被切換出來的進程將會放置回原來的 進程組。

  由于 組調(diào)度 是建立在 cgroup 機制之上的,而 cgroup 又是基于 虛擬文件系統(tǒng),所以 進程組 是以樹結(jié)構(gòu)存在的。也就是說,進程組 除了可以包含進程,還可以包含進程組。如下圖所示:

  cgroup 相關(guān)的知識點可以參考文章:《cgroup介紹》 和 《cgroup實現(xiàn)原理》

  微信截圖_20220714151151.png

  Linux 在調(diào)度的時候,首先會根據(jù) 完全公平調(diào)度算法 從根進程組中篩選出一個最優(yōu)的進程或者進程組進行調(diào)度。

  如果篩選出來的是進程,那么可以直接把當(dāng)前運行的進程切換到篩選出來的進程運行即可。

  如果篩選出來的是進程組,那么就繼續(xù)根據(jù) 完全公平調(diào)度算法 從進程組中篩選出一個最優(yōu)的進程或者進程組進行調(diào)度(重復(fù)進行第一步操作),如此類推。

  組調(diào)度實現(xiàn)

  接下來,我們將介紹 組調(diào)度 是如何實現(xiàn)的。在分析之前,為了對 完全公平調(diào)度算法 有個大體了解,建議先看看這篇文章:《Linux完全公平調(diào)度算法 》

  1. 進程組

  在 Linux 內(nèi)核中,使用 task_group 結(jié)構(gòu)表示一個進程組。其定義如下:

微信截圖_20220714151255.png

  下面介紹一下 task_group 結(jié)構(gòu)各個字段的作用:

  se:完全公平調(diào)度算法 是以 sched_entity 結(jié)構(gòu)作為調(diào)度實體(也就是說運行隊列中的元素都是 sched_entity 結(jié)構(gòu)),而 sched_entity 結(jié)構(gòu)既能代表一個進程,也能代表一個進程組。這個字段主要作用是,將進程組放置到運行隊列中進行調(diào)度。由于進程組中的進程可能會在不同的 CPU 上運行,所以這里為每個 CPU 分配一個 sched_entity 結(jié)構(gòu)。

  cfs_rq:完全公平調(diào)度算法 的運行隊列。完全公平調(diào)度算法 在調(diào)度時是通過 cfs_rq 結(jié)構(gòu)完成的,cfs_rq 結(jié)構(gòu)使用一棵紅黑樹將需要調(diào)度的進程或者進程組組織起來,然后選擇最左端的節(jié)點作為要運行的進程或進程組,詳情可以參考文章:《Linux完全公平調(diào)度算法》。由于進程組可能在不同的 CPU 上調(diào)度,所以進程組也為每個 CPU 分配一個運行隊列。

  shares:進程組的權(quán)重,用于計算當(dāng)前進程組的可運行時間片。

  parent、siblings、children:用于將系統(tǒng)中所有的進程組組成一棵親屬關(guān)系樹。

  task_group、sched_entity 和 cfs_rq 這三個結(jié)構(gòu)的關(guān)系如下圖所示:

  微信圖片_20220714151325.png

  從上圖可以看出,每個進程組都為每個 CPU 分配一個可運行隊列,可運行隊列中保存著可運行的進程和進程組。Linux 調(diào)度的時候,就是從上而下(從根進程組開始)地篩選出最優(yōu)的進程進行運行。

  2. 調(diào)度過程

  當(dāng) Linux 需要進行進程調(diào)度時,會調(diào)用 schedule() 函數(shù)來完成,其實現(xiàn)如下(經(jīng)精簡后):

微信截圖_20220714151407.png

  schedule() 函數(shù)會調(diào)用 pick_next_task() 函數(shù)來篩選最優(yōu)的可運行進程,我們來看看 pick_next_task() 函數(shù)的實現(xiàn)過程:

  微信截圖_20220714151428.png

  

  從 pick_next_task() 函數(shù)的實現(xiàn)來看,其最終會調(diào)用 完全公平調(diào)度算法 的 pick_next_task() 方法來完成篩選工作,我們來看看這個方法的實現(xiàn):

 微信截圖_20220714151542.png

  我們來分析下 pick_next_task_fair() 函數(shù)到流程:

  從根進程組中篩選出最優(yōu)的可運行實體(進程或進程組)。

  如果篩選出來的實體是進程,那么直接返回這個進程。

  如果篩選出來的實體是進程組,那么將會繼續(xù)對這個進程組中的可運行隊列進行篩選,直至篩選出一個可運行的進程。

  怎么區(qū)分 sched_entity 實體是進程或者進程組?sched_entity 結(jié)構(gòu)中有個 my_q 的字段,當(dāng)這個字段設(shè)置為 NULL 時,說明這個實體是一個進程。如果這個字段指向一個可運行隊列時,說明這個實體是一個進程組。



 更多信息可以來這里獲取==>>電子技術(shù)應(yīng)用-AET<<

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。

相關(guān)內(nèi)容

亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲午夜视频在线观看| 亚洲国产精品黑人久久久 | 精品不卡一区| 国产亚洲精品资源在线26u| 国产精品入口麻豆原神| 国产精品区一区二区三| 国产精品久久久久91| 欧美视频在线观看视频极品| 欧美日韩美女| 欧美三级午夜理伦三级中文幕| 欧美日韩国产区一| 欧美日韩亚洲免费| 欧美视频日韩| 国产精品国产自产拍高清av| 国产精品久久久久久久9999| 国产精品久久久久婷婷| 国产精品国产三级国产专播品爱网| 欧美婷婷在线| 国产精品日韩在线观看| 国产日韩精品一区二区| 国产亚洲一区二区精品| 精品福利免费观看| 亚洲国产精品高清久久久| 91久久久久| 夜夜嗨av色一区二区不卡| 国产精品99久久久久久有的能看 | 在线亚洲+欧美+日本专区| 久久国内精品视频| 狠狠干狠狠久久| 一区二区三区黄色| 国产女人精品视频| 国产一区二区无遮挡| 韩国亚洲精品| 91久久国产精品91久久性色| 日韩网站在线观看| 亚洲免费在线视频| 欧美一区高清| 亚洲精品久久久久中文字幕欢迎你 | 在线一区亚洲| 亚洲欧美日韩成人高清在线一区| 午夜精品久久久久久久男人的天堂| 久久精品av麻豆的观看方式| 蜜桃av综合| 欧美午夜不卡在线观看免费 | 精品电影一区| 亚洲精品网站在线播放gif| 一区二区三区精品视频在线观看| 亚洲男人的天堂在线aⅴ视频| 久久激情网站| 宅男66日本亚洲欧美视频| 欧美一区免费视频| 免费国产一区二区| 国产精品高精视频免费| 国产自产在线视频一区| 亚洲精品视频二区| 午夜精品久久久久久久久| 亚洲国产一区二区视频| 亚洲一卡二卡三卡四卡五卡| 久久精品亚洲国产奇米99| 欧美激情一区二区三区成人| 国产精品三级视频| 亚洲第一黄网| 亚洲男人影院| 99国产精品国产精品久久| 久久福利毛片| 欧美日韩精品国产| 国模精品娜娜一二三区| 亚洲最快最全在线视频| 久久国产欧美精品| 亚洲系列中文字幕| 久久香蕉精品| 国产精品萝li| 亚洲日本成人女熟在线观看| 午夜在线a亚洲v天堂网2018| 亚洲视频在线观看一区| 麻豆精品在线观看| 国产精品视频yy9099| 亚洲人妖在线| 国产午夜精品视频免费不卡69堂| 亚洲伦理网站| 久久国产精品免费一区| 欧美精品在线视频观看| 国产一区美女| 亚洲欧美国内爽妇网| 夜夜夜久久久| 男人天堂欧美日韩| 国产一区二区精品丝袜| 一区二区三区精品在线 | 欧美一区二区三区久久精品| 欧美久久综合| 伊人久久大香线| 午夜在线播放视频欧美| 亚洲一区二区在线免费观看视频| 欧美 日韩 国产精品免费观看| 国产免费观看久久黄| 在线综合视频| 一区二区成人精品| 欧美成va人片在线观看| 国产一区二区按摩在线观看| 亚洲一区欧美激情| 亚洲中字在线| 国产精品国产一区二区| 亚洲免费成人| 亚洲精品婷婷| 你懂的视频欧美| 一区二区三区在线观看欧美| 篠田优中文在线播放第一区| 亚洲欧美色婷婷| 欧美午夜无遮挡| 9色精品在线| 亚洲天堂av综合网| 欧美日韩第一区| 亚洲精品人人| 99re8这里有精品热视频免费| 欧美成人中文字幕在线| 在线观看中文字幕亚洲| 亚洲国产日韩在线| 免费日韩精品中文字幕视频在线| 国内欧美视频一区二区| 久久国产精品99久久久久久老狼| 久久精品国产免费看久久精品| 国产乱码精品| 欧美尤物巨大精品爽| 久久久久网址| 黄色成人小视频| 亚洲国产精品一区二区久| 久久综合一区| 亚洲国产日韩欧美| 夜夜嗨av一区二区三区网站四季av| 欧美激情影院| 日韩午夜黄色| 亚洲欧美日韩国产| 国产精品午夜国产小视频| 午夜精品久久久久久久| 久久人人爽人人爽爽久久| 一区免费观看视频| 亚洲三级视频| 欧美日韩综合| 亚洲伊人久久综合| 久久久久国产免费免费| 黄网动漫久久久| 日韩视频在线观看免费| 欧美日韩免费观看中文| 亚洲综合二区| 美女视频一区免费观看| 最新日韩av| 亚洲欧美国产日韩天堂区| 国产视频精品va久久久久久| 亚洲国产成人91精品| 欧美第十八页| 亚洲天堂av高清| 久久日韩精品| 亚洲九九九在线观看| 亚洲欧洲99久久| 红桃视频国产一区| 一本色道久久综合亚洲91| 国产精品福利在线| 久久精品国产在热久久| 欧美日本高清视频| 亚洲欧美中文日韩在线| 女主播福利一区| 亚洲少妇在线| 久久综合影视| 亚洲少妇诱惑| 免费成人毛片| 亚洲天堂成人在线观看| 久久一区视频| 中日韩在线视频| 久久视频在线视频| 日韩一区二区福利| 久久久久久噜噜噜久久久精品| 最新亚洲电影| 久久高清福利视频| 亚洲日本国产| 久久精品人人做人人爽| 亚洲日本久久| 久久精品视频在线观看| 日韩视频在线免费观看| 久久久女女女女999久久| 亚洲开发第一视频在线播放| 久久久久久久91| 一区二区精品国产| 久久综合狠狠| 亚洲一区亚洲| 欧美日本在线视频| 亚洲电影免费在线观看| 国产精品国产三级国产aⅴ入口| 亚洲国产清纯| 国产精品天天摸av网| 99re6热在线精品视频播放速度| 国产亚洲精品综合一区91| 宅男噜噜噜66国产日韩在线观看| 韩国在线视频一区| 午夜精品理论片| 亚洲三级网站| 久久影院午夜片一区| 亚洲欧美日韩国产一区| 欧美日韩国产色视频| 亚洲国产婷婷| 国内成人自拍视频|