亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

您現在的位置是:首頁 > 技術閱讀 >  Linux 進程管理之調度和進程切換知識點

Linux 進程管理之調度和進程切換知識點

時間:2024-02-12

什么是調度?按照某種調度算法,從進程的ready隊列中選擇進程給CPU。

為什么要調度?為了最大限度的利用CPU。

調度相關結構體

task_struct

我們先把task_struct中和調度相關的結構拎出來:

struct task_struct {
 ......
 
 /*
 *調度類。用 sched_class 對調度器進行抽象 
 *Stop調度器:stop_sched_class
 *Deadline調度器:dl_sched_class
 *RT調度器:rt_sched_class
 *CFS調度器:cfs_sched_class
 *IDLE-Task調度器:idle_sched_class
 */
 const struct sched_class *sched_class;
 //CFS調度實體
 struct sched_entity  se;
 //RT調度實體
 struct sched_rt_entity  rt;
 
 ......
 
 #ifdef CONFIG_CGROUP_SCHED
 //任務組(在每個CPU上都會維護一個CFS調度實體、CFS運行隊列; RT調度實體,RT運行隊列)
 struct task_group  *sched_task_group;
 #endif
 //DL調度實體
 struct sched_dl_entity  dl;
 
 ......
 
 /*
 *進程的調度策略,有6種。
 *限期進程調度策略:SCHED_DEADLINE。DL調度器
 *實時進程調度策略:SCHED_FIFO,SCHED_RR。RT調度器
 *普通進程調度策略:SCHED_NORMAL,SCHED_BATCH,SCHED_IDLE。CFS調度器
 */
 unsigned int   policy;
 
 ......
}
  • struct sched_class 對調度器進行抽象,一共分為5類
  1. Stop調度器:優先級最高的調度類,可以搶占其他所有進程,不能被其他進程搶占;
  2. Deadline調度器:使用紅黑樹,把進程按照絕對截止期限進行排序,選擇最小進程進行調度運行;
  3. RT調度器:為每個優先級維護一個隊列;
  4. CFS調度器:采用完全公平調度算法,引入虛擬運行時間概念;
  5. IDLE-Task調度器:每個CPU都會有一個idle線程,當沒有其他進程可以調度時,調度運行idle線程;
  • unsigned int policy 進程的調度策略有6種,用戶可以調用調度器里的不同調度策略:
  1. SCHED_DEADLINE:使task選擇Deadline調度器來調度運行
  2. SCHED_RR:時間片輪轉,進程用完時間片后加入優先級對應運行隊列的尾部,把CPU讓給同優先級的其他進程;
  3. SCHED_FIFO:先進先出調度沒有時間片,沒有更高優先級的情況下,只能等待主動讓出CPU;
  4. SCHED_NORMAL:使task選擇CFS調度器來調度運行;
  5. SCHED_BATCH:批量處理,使task選擇CFS調度器來調度運行;
  6. SCHED_IDLE:使task以最低優先級選擇CFS調度器來調度運行;
  • struct sched_entity se;采用CFS算法調度的普通非實時進程的調度實體
  • struct sched_rt_entity rt;采用Roound-Robin或者FIFO算法調度的實時調度實體
  • struct sched_dl_entity dl;  采用EDF算法調度的實時調度實體

分配給CPU的task,作為調度實體加入到運行隊列中

runqueue 運行隊列

struct rq {
 ......
 
 //三個調度隊列:CFS調度,RT調度,DL調度
 struct cfs_rq cfs;
 struct rt_rq rt;
 struct dl_rq dl;
 
 ......
 
 //idle指向空閑內核線程, stop指向遷移內核線程
 struct task_struct *curr, *idle, *stop;
 ......
}

三個調度隊列:

  • struct cfs_rq cfs;  CFS調度隊列
  • struct rt_rq rt;  RT調度隊列
  • struct dl_rq dl;  DL調度隊列

每個CPU都有一個運行隊列,每個運行隊列中有三個調度隊列,task作為調度實體加入到各自的調度隊列中。

調度流程

調度的本質就是選擇下一個進程來運行,調度的過程分為兩步:

  • 1. 設置調度標記

為CPU上正在運行的進程thread_info結構體里的flags成員設置TIF_NEED_RESCHED。

那么,什么時候設置TIF_NEED_RESCHED呢 ?

  1. scheduler_tick 時鐘中斷
  2. wake_up_process 喚醒進程的時候
  3. do_fork 創建新進程的時候
  4. smp_send_reschedule 負載均衡的時候
  5. set_user_nice 修改進程nice值的時候

以上情況下都會通過 resched_curr 來設置進程thread_info結構體里的flags成員為TIF_NEED_RESCHED。以 scheduler_tick 和 wake_up_process 為例:

關于是否需要設置TIF_NEED_RESCHED的依據涉及到具體的調度算法,等我們講到具體調度器時再詳細講。

  • 2. 執行調度

kernel判斷當前進程標記是否為TIF_NEED_RESCHED,是的話調用 schedule 函數切換上下文,kernel空間是可以關搶占的,user空間是無法關搶占的。搶占可分為內核態搶占和用戶態搶占

  1. 用戶態搶占

ret_to_user是系統調用,異常觸發,中斷處理完成后都會調用的函數。


  1. 內核態搶占

進程切換上下文 context_switch

通過上面我們知道執行調度的時候發生在 _schedule 函數里。

重點是其中的兩個函數,一個是選擇需要切換任務的 pick_next_task,另外一個是完成進程上下文切換 context_switch。

關于選擇task的策略涉及到不同的調度類,等我們講到具體調度器的時候再展開,這里重點講下上下文切換的函數 context_switch,進程上下文切換主要涉及到兩部分主要過程:進程地址空間切換和處理器狀態切換:

  • 進程的地址空間切換

將下一個進程的pgd虛擬地址轉化為物理地址存放在ttbr0_el1中(這是用戶空間的頁表基址寄存器),當訪問用戶空間地址的時候mmu會通過這個寄存器來做遍歷頁表獲得物理地址。完成了這一步,也就完成了進程的地址空間切換,確切的說是進程的虛擬地址空間切換。

  • 寄存器狀態切換

其中x19-x28是arm64 架構規定需要調用保存的寄存器,可以看到處理器狀態切換的時候將前一個進程(prev)的x19-x28,fp,sp,pc保存到了進程描述符的cpu_contex中,然后將即將執行的進程(next)描述符的cpu_contex的x19-x28,fp,sp,pc恢復到相應寄存器中,而且將next進程的進程描述符task_struct地址存放在sp_el0中,用于通過current找到當前進程,這樣就完成了處理器的狀態切換。

亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品免费| 欧美色偷偷大香| 在线观看91精品国产入口| 国内外成人免费激情在线视频| 国产亚洲在线| 国产主播一区二区三区| 亚洲人成高清| 亚洲精品在线观| 亚洲网站在线播放| 在线观看视频一区| 亚洲第一在线视频| 国产精品一区二区久激情瑜伽| 国产日韩专区在线| 国产欧美日本一区二区三区| 亚洲午夜激情免费视频| 一本在线高清不卡dvd| 亚洲国产婷婷| 久久高清免费观看| 久久午夜羞羞影院免费观看| 欧美淫片网站| 久久精品综合网| 裸体一区二区三区| 欧美1区视频| 欧美日韩精品欧美日韩精品| 久热成人在线视频| 欧美xart系列在线观看| 美国成人直播| 欧美www视频| 欧美母乳在线| 欧美日韩一区二区三区免费看| 欧美午夜欧美| 国产精品免费一区二区三区观看| 国产精品扒开腿做爽爽爽视频| 国产精品国产成人国产三级| 国产亚洲女人久久久久毛片| 黄色综合网站| 亚洲精品三级| 久久国产精品久久久久久电车| 久久婷婷蜜乳一本欲蜜臀| 欧美国产免费| 国产免费成人在线视频| 欧美在线资源| 欧美精品一二三| 欧美伦理91i| 一本久道综合久久精品| 亚洲五月婷婷| 欧美亚洲日本国产| 麻豆精品在线观看| 欧美午夜精品久久久久久久 | 亚洲人成久久| 9色精品在线| 欧美一区日本一区韩国一区| 欧美成人午夜免费视在线看片| 欧美视频一二三区| 韩日午夜在线资源一区二区| 一区二区三区高清视频在线观看| 欧美影院在线| 欧美日韩一区二区国产| 欧美国产精品久久| 欧美日韩国产一中文字不卡| 国产精品成人在线| 亚洲大片在线| 国产精品女人网站| 亚洲麻豆av| 亚洲一区二区精品在线| 亚洲小说春色综合另类电影| 午夜在线精品偷拍| 农村妇女精品| 欧美乱大交xxxxx| 欧美亚一区二区| 国产亚洲欧美另类一区二区三区| 亚洲高清免费| 亚洲毛片在线观看| 亚洲性人人天天夜夜摸| 欧美在线观看一区| 欧美成人精品一区二区三区| 欧美激情综合色| 欧美日韩一区在线观看视频| 亚洲欧美在线看| 欧美视频网站| 一区二区三区高清视频在线观看 | 国产精品家教| 91久久久久久国产精品| 亚洲国产日韩欧美| 欧美影院成年免费版| 欧美大片第1页| 国模吧视频一区| 91久久精品久久国产性色也91| 久久疯狂做爰流白浆xx| 国产一区二区三区的电影| 亚洲色图在线视频| 欧美在线观看天堂一区二区三区 | 欧美国产高清| 狠狠色噜噜狠狠色综合久 | 国产视频一区在线观看一区免费| 一区二区三区四区国产| 欧美日韩中文字幕综合视频| 最新中文字幕一区二区三区| 免费成人av在线看| 亚洲国产小视频| 欧美乱大交xxxxx| 在线一区免费观看| 欧美日韩亚洲成人| 午夜免费在线观看精品视频| 国产精品久久999| 性久久久久久久久| 国产一区二区三区日韩欧美| 99精品国产福利在线观看免费 | 国产欧美日韩精品一区| 国产亚洲精品久久久久动| 亚洲高清久久久| 欧美国产日韩一区二区| 欧美成人免费视频| 在线日韩视频| 卡一卡二国产精品| 亚洲六月丁香色婷婷综合久久| 欧美日韩亚洲一区三区| 蜜桃伊人久久| 亚洲美女一区| 国产农村妇女毛片精品久久麻豆| 久久av一区二区三区| 亚洲精品久久7777| 国产精品人人做人人爽| 欧美高清在线| 欧美在线啊v一区| 亚洲精品一二| 狠狠色伊人亚洲综合网站色| 欧美人与性动交cc0o| 性欧美长视频| 亚洲狼人综合| 尤妮丝一区二区裸体视频| 欧美国产三级| 久久九九免费视频| 欧美影院午夜播放| 中文日韩电影网站| 亚洲日本免费| 亚洲国产日韩在线一区模特| 国产伦精品一区二区三区高清| 久久久人人人| 久久大逼视频| 亚洲午夜电影在线观看| 怡红院精品视频在线观看极品| 国产精品久久久久久五月尺| 欧美精品一区在线发布| 久久婷婷麻豆| 久久久久久久久伊人| 久久夜色精品国产欧美乱极品| 亚洲欧美日韩第一区| 在线亚洲欧美专区二区| 一区二区av在线| 亚洲精品国精品久久99热一 | 国内精品久久久| 国产精品高清网站| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 宅男精品导航| 亚洲精品偷拍| 亚洲美女诱惑| 99在线|亚洲一区二区| 国产精品免费aⅴ片在线观看| 欧美激情成人在线视频| 亚洲系列中文字幕| 亚洲高清资源| 欧美日韩一区二区免费在线观看 | 欧美在线视频导航| 亚洲一区在线免费| 日韩视频专区| 亚洲精品国精品久久99热| 在线观看日韩av电影| 国产伦一区二区三区色一情| 国产真实久久| 亚洲黄色免费网站| 日韩视频精品在线| 中文亚洲字幕| 欧美一级视频免费在线观看| 久久国产福利| 欧美激情精品久久久| 国产精品久久久免费| 国产欧美在线播放| 在线精品一区二区| 亚洲精品网址在线观看| 亚洲欧美日韩精品久久久久| 久久aⅴ国产紧身牛仔裤| 久热这里只精品99re8久| 欧美精品在线观看播放| 国产精品女人久久久久久| 国产午夜精品视频| 亚洲精品久久久久久一区二区 | 欧美日韩在线一区二区| 亚洲欧美激情诱惑| 西西裸体人体做爰大胆久久久| 亚洲一区久久| 麻豆精品视频在线观看视频| 欧美日韩久久精品| 欧美午夜欧美| 亚洲成人在线视频播放| 亚洲你懂的在线视频| 欧美超级免费视 在线| 国产精品美女午夜av| 日韩视频一区二区| 久久成人18免费网站|