打通Framework與Kernel-談?wù)勎覍M程管理的理解

Kernel:
Linux學(xué)習(xí)-進程管理與調(diào)度(一)-進程描述及其生命周期
Linux學(xué)習(xí)-進程管理與調(diào)度(二)-進程的創(chuàng)建與銷毀
Linux學(xué)習(xí)-進程管理與調(diào)度(三)-調(diào)度基礎(chǔ)
Linux學(xué)習(xí)-進程管理與調(diào)度(四)-負載均衡與實時性

Framework:
Android進程管理篇(一)-應(yīng)用進程啟動過程
Android進程管理篇(二)-進程查殺方式總結(jié)
Android進程管理篇(三)-進程adj算法
Android 進程管理篇(四)-cpu限制
Android 進程管理篇(五)-調(diào)度策略與優(yōu)先級
lowmemorykiller總結(jié)

這兩個系列的總結(jié),Android進程基本梳理完畢。下面來簡單總結(jié)下我對Android進程管理的理解:

在用戶空間會分所謂的進程線程,但是對于內(nèi)核看來,都是task_struct,線程只是資源共享的一種特殊進程罷了,所以這里我只說進程了。

一個應(yīng)用程序進程由zygote copy-on-write 地fork孵化,孵化出來的進程在user space封裝為ProcessRecord,而在kernel space同樣會有個task_struct與之一一對應(yīng)。

ProcessRecord會由AMS來統(tǒng)一管理,怎么管理?通過進程的生命周期以及內(nèi)部的四大組件生命周期來確定你的優(yōu)先級,而這個優(yōu)先級專門定義了一套adj類型來匹配。那么這個優(yōu)先級拿來干嘛?當(dāng)然就是做進程管理。

這里對應(yīng)進程管理的策略包括:內(nèi)存管理、cpu調(diào)度限制、調(diào)度策略以及優(yōu)先級管理。

  • 內(nèi)存管理:AMS為每個現(xiàn)存的進程計算好oomadj,在內(nèi)存低于min水線時,kswapd0會開始回收不活躍的文件頁以及匿名頁,回調(diào)shrink觸發(fā)lmk,而lmk會通過 選擇一個滿足minfree檔位并且rss內(nèi)存占用最大的進程kill掉,來釋放內(nèi)存緩解內(nèi)存壓力。當(dāng)然,這里也可以通過memory子系統(tǒng)來設(shè)置進程組,以及進程組的內(nèi)存上限等等來做管理。

  • CPU限制、調(diào)度策略以及優(yōu)先級管理:AMS調(diào)用android/osProcess相關(guān)方法(setProcessGroup/setThreadScheduler/setThreadPriority),JNI到Native對應(yīng)方法,最后通過調(diào)用libcutils.so/libutils.so執(zhí)行set_cpuset_policy/set_sched_policy/setpriority/sched_setscheduler等系統(tǒng)調(diào)用或者直接操作對應(yīng)cgroup文件節(jié)。通過cpu/cpuset/stune子系統(tǒng),控制進程獲得CPU可調(diào)度的范圍,調(diào)度的策略以及CPU執(zhí)行時間等,以達到對不同優(yōu)先級進程的控制??刂频淖罱K目的是達到響應(yīng)優(yōu)先于吞吐的調(diào)度目標(biāo),同時盡量保證相對最優(yōu)的負載均衡。

對于Android這種注重交互體驗的操作系統(tǒng)來說,要想保證使用app的交互體驗,站在系統(tǒng)資源的角度:一定是保證其進程生命周期更長,內(nèi)存更穩(wěn)定,獲得的CPU調(diào)度范圍更大,更容被處理效率更好的核執(zhí)行,獲得執(zhí)行的時間片更多等等方面去考慮。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

  • 作者: 強波 (阿里云OS平臺部-Cloud Engine)博客: http://qiangbo.space/...
    菜刀文閱讀 3,122評論 1 15
  • 又來到了一個老生常談的問題,應(yīng)用層軟件開發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個問題開始,來談?wù)劜?..
    tangsl閱讀 4,331評論 0 23
  • 一、task_struct Android的進程管理建立在Linux內(nèi)核的基礎(chǔ)上。Linux內(nèi)核通過一個被稱為進程...
    Android征途閱讀 2,092評論 0 2
  • 心有紅葉結(jié), 慕名訪香山。 秋風(fēng)憐碧葉, 未將層林染, 偶入紅葉區(qū)。 佳境呈眼前。 樹樹染秋色, 絕勝二月天。
    化繭成蝶_219a閱讀 170評論 0 0
  • 貝克漢姆辭去了隊長的職務(wù)——望著他遠去的背影,蒼涼之感油然而生。 我從來不是一個追星的人,但是隨著比賽的進程,我開...
    哥舒閱讀 241評論 0 0

友情鏈接更多精彩內(nèi)容