在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文解讀Linux進(jìn)程凍結(jié)技術(shù)

454398 ? 來(lái)源:蝸窩科技 ? 作者:itrocker ? 2020-09-30 15:26 ? 次閱讀

1 什么是進(jìn)程凍結(jié)

進(jìn)程凍結(jié)技術(shù)(freezing of tasks)是指在系統(tǒng)hibernate或者suspend的時(shí)候,將用戶進(jìn)程和部分內(nèi)核線程置于“可控”的暫停狀態(tài)。

2 為什么需要凍結(jié)技術(shù)

假設(shè)沒(méi)有凍結(jié)技術(shù),進(jìn)程可以在任意可調(diào)度的點(diǎn)暫停,而且直到cpu_down才會(huì)暫停并遷移。這會(huì)給系統(tǒng)帶來(lái)很多問(wèn)題:

(1)有可能破壞文件系統(tǒng)。在系統(tǒng)創(chuàng)建hibernate image到cpu down之間,如果有進(jìn)程還在修改文件系統(tǒng)的內(nèi)容,這將會(huì)導(dǎo)致系統(tǒng)恢復(fù)之后無(wú)法完全恢復(fù)文件系統(tǒng);

(2)有可能導(dǎo)致創(chuàng)建hibernation image失敗。創(chuàng)建hibernation image需要足夠的內(nèi)存空間,但是在這期間如果還有進(jìn)程在申請(qǐng)內(nèi)存,就可能導(dǎo)致創(chuàng)建失敗;

(3)有可能干擾設(shè)備的suspend和resume。在cpu down之前,device suspend期間,如果進(jìn)程還在訪問(wèn)設(shè)備,尤其是訪問(wèn)競(jìng)爭(zhēng)資源,就有可能引起設(shè)備suspend異常;

(4)有可能導(dǎo)致進(jìn)程感知系統(tǒng)休眠。系統(tǒng)休眠的理想狀態(tài)是所有任務(wù)對(duì)休眠過(guò)程無(wú)感知,睡醒之后全部自動(dòng)恢復(fù)工作,但是有些進(jìn)程,比如某個(gè)進(jìn)程需要所有cpu online才能正常工作,如果進(jìn)程不凍結(jié),那么在休眠過(guò)程中將會(huì)工作異常。

3 代碼實(shí)現(xiàn)框架

凍結(jié)的對(duì)象是內(nèi)核中可以被調(diào)度執(zhí)行的實(shí)體,包括用戶進(jìn)程、內(nèi)核線程和work_queue。用戶進(jìn)程默認(rèn)是可以被凍結(jié)的,借用信號(hào)處理機(jī)制實(shí)現(xiàn);內(nèi)核線程和work_queue默認(rèn)是不能被凍結(jié)的,少數(shù)內(nèi)核線程和work_queue在創(chuàng)建時(shí)指定了freezable標(biāo)志,這些任務(wù)需要對(duì)freeze狀態(tài)進(jìn)行判斷,當(dāng)系統(tǒng)進(jìn)入freezing時(shí),主動(dòng)暫停運(yùn)行。

kernel threads可以通過(guò)調(diào)用kthread_freezable_should_stop來(lái)判斷freezing狀態(tài),并主動(dòng)調(diào)用__refrigerator進(jìn)入凍結(jié);work_queue通過(guò)判斷max_active屬性,如果max_active=0,則不能入隊(duì)新的work,所有work延后執(zhí)行。

標(biāo)記系統(tǒng)freeze狀態(tài)的有三個(gè)重要的全局變量:pm_freezing、system_freezing_cnt和pm_nosig_freezing,如果全為0,表示系統(tǒng)未進(jìn)入凍結(jié);system_freezing_cnt》0表示系統(tǒng)進(jìn)入凍結(jié),pm_freezing=true表示凍結(jié)用戶進(jìn)程,pm_nosig_freezing=true表示凍結(jié)內(nèi)核線程和workqueue。它們會(huì)在freeze_processes和freeze_kernel_threads中置位,在thaw_processes和thaw_kernel_threads中清零。

fake_signal_wake_up函數(shù)巧妙的利用了信號(hào)處理機(jī)制,只設(shè)置任務(wù)的TIF_SIGPENDING位,但不傳遞任何信號(hào),然后喚醒任務(wù);這樣任務(wù)在返回用戶態(tài)時(shí)會(huì)進(jìn)入信號(hào)處理流程,檢查系統(tǒng)的freeze狀態(tài),并做相應(yīng)處理。

任務(wù)主動(dòng)調(diào)用try_to_freeze的代碼如下:

static inline bool try_to_freeze_unsafe(void)

{

if (likely(!freezing(current))) //檢查系統(tǒng)是否處于freezing狀態(tài)

return false;

return __refrigerator(false); //主動(dòng)進(jìn)入凍結(jié)

}

static inline bool freezing(struct task_struct *p)

{

if (likely(!atomic_read(&system_freezing_cnt))) //系統(tǒng)總體進(jìn)入freezing

return false;

return freezing_slow_path(p);

}

bool freezing_slow_path(struct task_struct *p)

{

if (p-》flags & PF_NOFREEZE) //當(dāng)前進(jìn)程是否允許凍結(jié)

return false;

if (pm_nosig_freezing || cgroup_freezing(p)) //系統(tǒng)凍結(jié)kernel threads

return true;

if (pm_freezing && !(p-》flags & PF_KTHREAD)) //系統(tǒng)凍結(jié)用戶進(jìn)程

return true;

return false;

}

進(jìn)入凍結(jié)狀態(tài)直到恢復(fù)的主要函數(shù):bool __refrigerator(bool check_kthr_stop)

{

。..

for (;;) {

set_current_state(TASK_UNINTERRUPTIBLE); //設(shè)置進(jìn)程為UNINTERRUPTIBLE狀態(tài)

spin_lock_irq(&freezer_lock);

current-》flags |= PF_FROZEN; //設(shè)置已凍結(jié)狀態(tài)

if (!freezing(current) ||

(check_kthr_stop && kthread_should_stop())) //判斷系統(tǒng)是否還處于凍結(jié)

current-》flags &= ~PF_FROZEN; //如果系統(tǒng)已解凍,則取消凍結(jié)狀態(tài)

spin_unlock_irq(&freezer_lock);

if (!(current-》flags & PF_FROZEN)) //如果已取消凍結(jié),跳出循環(huán),恢復(fù)執(zhí)行

break;

was_frozen = true;

schedule();

}

。..。..

}

4 參考文獻(xiàn)

(1) http://www.wowotech.net/linux_kenrel/suspend_and_resume.html

(2) http://www.wowotech.net/linux_kenrel/std_str_func.html

(3) kenrel document: freezing-of-tasks.txt
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1376

    瀏覽量

    40316
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11315

    瀏覽量

    209812
  • 進(jìn)程
    +關(guān)注

    關(guān)注

    0

    文章

    203

    瀏覽量

    13965
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    福田卡汽車新能源技術(shù)戰(zhàn)略解讀

    近日,以“讓每公里更美好”為主題的福田卡汽車技術(shù)戰(zhàn)略暨全新產(chǎn)品發(fā)布會(huì)在福田汽車X實(shí)驗(yàn)室舉行。行業(yè)領(lǐng)導(dǎo)、戰(zhàn)略合作伙伴及廣大媒體等300余名嘉賓出席本次活動(dòng)。會(huì)上,福田卡汽車詳細(xì)
    的頭像 發(fā)表于 12-23 15:43 ?240次閱讀

    深入解析Linux程序與進(jìn)程

    什么是程序 組計(jì)算機(jī)能識(shí)別和執(zhí)行的指令,用于指導(dǎo)計(jì)算機(jī)執(zhí)行特定任務(wù)或解決特定問(wèn)題。程序通常由代碼、數(shù)據(jù)和資源文件組成,涉及語(yǔ)法、算法和數(shù)據(jù)結(jié)構(gòu)。為二進(jìn)制文件 什么是進(jìn)程個(gè)具有獨(dú)立功能的程序
    的頭像 發(fā)表于 12-18 11:01 ?103次閱讀
    深入解析<b class='flag-5'>Linux</b>程序與<b class='flag-5'>進(jìn)程</b>

    深入Linux進(jìn)程管理:提升效率與穩(wěn)定性的關(guān)鍵方法

    目錄 Linux進(jìn)程管理 8.1 IO負(fù)載 8.2 實(shí)時(shí)進(jìn)程監(jiān)控 5.1 作業(yè)與會(huì)話 5.2 作業(yè)分類 4.1 ps 4.2pstree 4.3pgrep 4.4pidof 4.5 vmstat
    的頭像 發(fā)表于 11-22 11:05 ?280次閱讀
    深入<b class='flag-5'>Linux</b><b class='flag-5'>進(jìn)程</b>管理:提升效率與穩(wěn)定性的關(guān)鍵方法

    解讀Linux 5種IO模型

    見(jiàn)的IO模型。 當(dāng)發(fā)起個(gè)IO操作時(shí),比如讀取數(shù)據(jù),系統(tǒng)會(huì)調(diào)用read()函數(shù)。如果請(qǐng)求的數(shù)據(jù)沒(méi)有準(zhǔn)備好,此時(shí)進(jìn)程會(huì)被掛起(blocked),進(jìn)入等待狀態(tài)。直到數(shù)據(jù)準(zhǔn)備好,而且復(fù)制到應(yīng)用進(jìn)程的緩沖區(qū),這時(shí)候才會(huì)返回。 從調(diào)用到返
    的頭像 發(fā)表于 11-09 11:12 ?343次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>解讀</b><b class='flag-5'>Linux</b> 5種IO模型

    搞懂Linux進(jìn)程的睡眠和喚醒

    、常見(jiàn)的進(jìn)程狀態(tài)與理解 在操作系統(tǒng)內(nèi)部,有專門(mén)用來(lái)管理進(jìn)程的結(jié)構(gòu)體,叫做struct task_struct,也稱作進(jìn)程控制塊(PCB),主要包含描述
    發(fā)表于 11-04 15:15

    Linux網(wǎng)絡(luò)基礎(chǔ)知識(shí)總結(jié)

    同 CPU、內(nèi)存以及 I/O 樣,網(wǎng)絡(luò)也是 Linux 系統(tǒng)最核心的功能。 網(wǎng)絡(luò)是種把不同計(jì)算機(jī)或網(wǎng)絡(luò)設(shè)備連接到起的技術(shù),它本質(zhì)上是
    的頭像 發(fā)表于 10-28 10:42 ?269次閱讀
    <b class='flag-5'>Linux</b>網(wǎng)絡(luò)基礎(chǔ)知識(shí)總結(jié)

    Linux用戶身份與進(jìn)程權(quán)限詳解

    在學(xué)習(xí) Linux 系統(tǒng)權(quán)限相關(guān)的主題時(shí),我們首先關(guān)注的基本都是文件的 ugo 權(quán)限。ugo 權(quán)限信息是文件的屬性,它指明了用戶與文件之間的關(guān)系。但是真正操作文件的卻是進(jìn)程,也就是說(shuō)用戶所擁有的文件
    的頭像 發(fā)表于 10-23 11:41 ?385次閱讀
    <b class='flag-5'>Linux</b>用戶身份與<b class='flag-5'>進(jìn)程</b>權(quán)限詳解

    深入探討Linux進(jìn)程調(diào)度器

    Linux操作系統(tǒng)作為個(gè)開(kāi)源且廣泛應(yīng)用的操作系統(tǒng),其內(nèi)核設(shè)計(jì)包含了許多核心功能,而進(jìn)程調(diào)度器(Scheduler)就是其中個(gè)至關(guān)重要的模塊。進(jìn)程
    的頭像 發(fā)表于 08-13 13:36 ?959次閱讀
    深入探討<b class='flag-5'>Linux</b>的<b class='flag-5'>進(jìn)程</b>調(diào)度器

    解讀MIPI A-PHY與車載Serdes芯片技術(shù)與測(cè)試

    期,《汽車芯片標(biāo)準(zhǔn)體系建設(shè)指南》技術(shù)解讀與功率芯片測(cè)量概覽中,我們給大家介紹了工信部印發(fā)的《汽車芯片標(biāo)準(zhǔn)體系建設(shè)指南》涉及到的重點(diǎn)芯片與測(cè)試領(lǐng)域解讀,本期繼續(xù)給大家做延展,我們
    的頭像 發(fā)表于 07-24 10:14 ?2929次閱讀
    <b class='flag-5'>解讀</b>MIPI A-PHY與車載Serdes芯片<b class='flag-5'>技術(shù)</b>與測(cè)試

    【古瑞瓦特光伏逆變器品牌】讀懂PCS儲(chǔ)能變流器

    【古瑞瓦特光伏逆變器品牌】讀懂PCS儲(chǔ)能變流器 在加快實(shí)現(xiàn)雙碳目標(biāo)和構(gòu)建新型電力系統(tǒng)的進(jìn)程中,儲(chǔ)能技術(shù)正逐步成為支撐新型電力系統(tǒng)穩(wěn)定運(yùn)行、優(yōu)化資源配置的關(guān)鍵
    的頭像 發(fā)表于 06-14 16:39 ?1353次閱讀
    【古瑞瓦特光伏逆變器品牌】<b class='flag-5'>一</b><b class='flag-5'>文</b>讀懂PCS儲(chǔ)能變流器

    百度首席技術(shù)官王海峰解讀心大模型的關(guān)鍵技術(shù)和最新進(jìn)展

    4月16日,以“創(chuàng)造未來(lái)”為主題的Create 2024百度AI開(kāi)發(fā)者大會(huì)在深圳國(guó)際會(huì)展中心成功舉辦。百度首席技術(shù)官王海峰以“技術(shù)筑基,星河璀璨”為題,發(fā)表演講,解讀了智能體、代碼、多模型等多項(xiàng)
    的頭像 發(fā)表于 04-18 09:20 ?709次閱讀
    百度首席<b class='flag-5'>技術(shù)</b>官王海峰<b class='flag-5'>解讀</b><b class='flag-5'>文</b>心大模型的關(guān)鍵<b class='flag-5'>技術(shù)</b>和最新進(jìn)展

    linux下查詢進(jìn)程占用的內(nèi)存方法有哪些?

    linux下查詢進(jìn)程占用的內(nèi)存方法
    發(fā)表于 04-08 06:03

    EMC技術(shù):基礎(chǔ)概念到應(yīng)用的解讀?|深圳比創(chuàng)達(dá)電子.

    EMC技術(shù):基礎(chǔ)概念到應(yīng)用的解讀?|深圳比創(chuàng)達(dá)電子電磁兼容性(Electromagnetic Compatibility,簡(jiǎn)稱EMC)作為項(xiàng)重要的技術(shù)領(lǐng)域,在現(xiàn)代電子設(shè)備中扮演著至關(guān)
    發(fā)表于 03-11 11:59

    EMC技術(shù):基礎(chǔ)概念到應(yīng)用的解讀

    EMC技術(shù):基礎(chǔ)概念到應(yīng)用的解讀?|深圳比創(chuàng)達(dá)電子
    的頭像 發(fā)表于 03-11 11:55 ?604次閱讀
    EMC<b class='flag-5'>技術(shù)</b>:基礎(chǔ)概念到應(yīng)用的<b class='flag-5'>解讀</b>?

    淺談Linux進(jìn)程

    進(jìn)程和程序的區(qū)別: 進(jìn)程是動(dòng)態(tài)的,程序是靜態(tài)的 進(jìn)程的創(chuàng)建(fork()函數(shù)) int main(){ pid_t pid; pid=fork(); if(pid?????>0
    的頭像 發(fā)表于 01-28 15:54 ?266次閱讀
    淺談<b class='flag-5'>Linux</b>的<b class='flag-5'>進(jìn)程</b>
    主站蜘蛛池模板: 日韩特黄特色大片免费视频| www.亚洲天堂| 色女人在线| 色老头影视| 日本天堂影院在线播放| 日本黄色站| 六月色婷婷| 高清毛片一区二区三区| 亚洲高清在线视频| 欧美黄色影院| 国产精品久久久久久久牛牛| 亚洲jizzjizz中国妇女| 亚洲网站在线观看| 亚洲综合色一区二区三区小说| 性爽爽| 大尺度免费高清在线观看视频| 国产一区二区高清| 在线看片福利| 日本人视频-jlzz jlzz jlzz| 国产三及| 六月婷婷网| 国产单男| 天天爱天天做色综合| a看片| 欧美在线区| 男男小说高h| 婷婷六| 嫩草影院久久国产精品| 国产精品女仆装在线播放| 香蕉操| 欧美激情啪啪| 在线看片地址| 免费在线播放毛片| 巨尻在线观看| 午夜影院免费观看视频| 午夜影院入口| 国产亚洲精品美女久久久| 亚洲网站免费观看| 网址色| 国产色爽女小说免费看| 欧美特黄特色aaa大片免费看|