国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文解讀Linux進程凍結技術

454398 ? 來源:蝸窩科技 ? 作者:itrocker ? 2020-09-30 15:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 什么是進程凍結

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

2 為什么需要凍結技術

假設沒有凍結技術,進程可以在任意可調度的點暫停,而且直到cpu_down才會暫停并遷移。這會給系統帶來很多問題:

(1)有可能破壞文件系統。在系統創(chuàng)建hibernate image到cpu down之間,如果有進程還在修改文件系統的內容,這將會導致系統恢復之后無法完全恢復文件系統;

(2)有可能導致創(chuàng)建hibernation image失敗。創(chuàng)建hibernation image需要足夠的內存空間,但是在這期間如果還有進程在申請內存,就可能導致創(chuàng)建失??;

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

(4)有可能導致進程感知系統休眠。系統休眠的理想狀態(tài)是所有任務對休眠過程無感知,睡醒之后全部自動恢復工作,但是有些進程,比如某個進程需要所有cpu online才能正常工作,如果進程不凍結,那么在休眠過程中將會工作異常。

3 代碼實現框架

凍結的對象是內核中可以被調度執(zhí)行的實體,包括用戶進程、內核線程和work_queue。用戶進程默認是可以被凍結的,借用信號處理機制實現;內核線程和work_queue默認是不能被凍結的,少數內核線程和work_queue在創(chuàng)建時指定了freezable標志,這些任務需要對freeze狀態(tài)進行判斷,當系統進入freezing時,主動暫停運行。

kernel threads可以通過調用kthread_freezable_should_stop來判斷freezing狀態(tài),并主動調用__refrigerator進入凍結;work_queue通過判斷max_active屬性,如果max_active=0,則不能入隊新的work,所有work延后執(zhí)行。

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

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

任務主動調用try_to_freeze的代碼如下:

static inline bool try_to_freeze_unsafe(void)

{

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

return false;

return __refrigerator(false); //主動進入凍結

}

static inline bool freezing(struct task_struct *p)

{

if (likely(!atomic_read(&system_freezing_cnt))) //系統總體進入freezing

return false;

return freezing_slow_path(p);

}

bool freezing_slow_path(struct task_struct *p)

{

if (p-》flags & PF_NOFREEZE) //當前進程是否允許凍結

return false;

if (pm_nosig_freezing || cgroup_freezing(p)) //系統凍結kernel threads

return true;

if (pm_freezing && ?。╬-》flags & PF_KTHREAD)) //系統凍結用戶進程

return true;

return false;

}

進入凍結狀態(tài)直到恢復的主要函數:bool __refrigerator(bool check_kthr_stop)

{

。..

for (;;) {

set_current_state(TASK_UNINTERRUPTIBLE); //設置進程為UNINTERRUPTIBLE狀態(tài)

spin_lock_irq(&freezer_lock);

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

if (!freezing(current) ||

(check_kthr_stop && kthread_should_stop())) //判斷系統是否還處于凍結

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

spin_unlock_irq(&freezer_lock);

if (?。╟urrent-》flags & PF_FROZEN)) //如果已取消凍結,跳出循環(huán),恢復執(zhí)行

break;

was_frozen = true;

schedule();

}

。..。..

}

4 參考文獻

(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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    4

    文章

    1467

    瀏覽量

    42873
  • Linux
    +關注

    關注

    88

    文章

    11759

    瀏覽量

    219013
  • 進程
    +關注

    關注

    0

    文章

    211

    瀏覽量

    14533
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    飛凌嵌入式ElfBoard-進程之什么是進程

    Linux系統中,有些基本命令能夠查看到進程的信息。例如ps、top、pgrep、pstree等;這些命令為用戶提供了查看和管理Linux進程信息的多種功能。通過合理使用這些命令,用
    發(fā)表于 03-02 08:49

    Linux進程管理不用愁!這6個工具幫你搞定90%場景

    Linux 系統中,進程是資源分配的基本單位,無論是服務器運維、程序調試還是日常使用,掌握進程管理工具都是必備技能。今天就帶大家梳理 6 個最常用的進程管理工具,從查看
    的頭像 發(fā)表于 02-04 16:23 ?1478次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>進程</b>管理不用愁!這6個工具幫你搞定90%場景

    Linux進程樹分析工具pstree詳解與實戰(zhàn)指南(另視角優(yōu)化Linux系統)

    Linux 系統開發(fā)與運維中,理解進程的運行狀態(tài)和相互關系是排查問題、優(yōu)化性能的基礎。pstree 作為款輕量高效的進程樹可視化工具,能直觀展示系統中所有
    的頭像 發(fā)表于 02-04 16:21 ?719次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>進程</b>樹分析工具pstree詳解與實戰(zhàn)指南(另<b class='flag-5'>一</b>視角優(yōu)化<b class='flag-5'>Linux</b>系統)

    深入Linux內核:進程調度的核心邏輯與實現細節(jié)

    Linux系統中,進程調度就像位精明的“CPU管理員”——它決定著哪個進程能優(yōu)先使用CPU,多久切換
    的頭像 發(fā)表于 12-24 07:05 ?4302次閱讀
    深入<b class='flag-5'>Linux</b>內核:<b class='flag-5'>進程</b>調度的核心邏輯與實現細節(jié)

    解析Linux進程、線程和協程

    影響其他進程,進程之間是高度隔離的。Linux中,進程進程標識符(PID)唯標識。
    發(fā)表于 12-22 11:00

    電壓放大器在人工凍結粉砂物理力學特性與聲學參數研究中的應用

    實驗名稱: 含鹽人工凍土的聲學特性研究 研究方向: 人工凍結法是利用人工制冷技術使地層中的水結冰形成凍土,隔絕地下水與地下工程的聯系,在凍結壁的保護下進行地下工程施工。通常采用凍結管中
    的頭像 發(fā)表于 12-16 11:55 ?203次閱讀
    電壓放大器在人工<b class='flag-5'>凍結</b>粉砂物理力學特性與聲學參數研究中的應用

    Linux進程間通信(IPC)全解析:從管道到?Socket,篇講透

    ,Inter-Process Communication) 。 今天我們就來系統梳理?Linux?中最常用的?6?種?IPC?方式,從原理到實例,從流程到適用場景,幫你徹底搞懂進程間如何?“對話”。 、管道
    的頭像 發(fā)表于 11-14 21:38 ?1.3w次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>進程</b>間通信(IPC)全解析:從管道到?Socket,<b class='flag-5'>一</b>篇講透

    【HZ-T536開發(fā)板免費體驗】—— linux 進程創(chuàng)建

    Linux進程通信方式有這幾種: 1。管道 2。信號量 3。消息隊列 4。共享內存 在本帖子中,我會講解fork(),exit()系統調用的實踐。通過應用編程來實現系統調用。 1,進程創(chuàng)建 打開
    發(fā)表于 09-01 20:49

    掌握Linux命令

    作為名運維工程師,熟練掌握Linux命令是基本功中的基本功。無論是日常工作中的系統維護,還是面試時的技術考核,Linux命令都是繞不開的核心技能。本文將從實戰(zhàn)角度出發(fā),系統梳理運維工
    的頭像 發(fā)表于 07-22 15:23 ?612次閱讀

    Linux系統,撐起整個芯片設計平臺?CFA團隊教你如何搭好EDA智算平臺的技術底座

    ; ?Debian 系 :如 Ubuntu、Mint,更適合桌面應用和研發(fā)環(huán)境; ?高級玩家 :Gentoo、Arch Linux……適合喜歡DIY的技術極客。 如果你需要的是個服務器系統,而且已經厭煩了各種
    發(fā)表于 05-07 14:44

    Linux后臺進程管理詳解

    當我們在終端或控制臺工作時,可能不希望由于運行個作業(yè)而占住了屏幕,因為可能還有更重要的事情要做,比如閱讀電子郵件。對于密集訪問磁盤的進程,我們更希望它能夠在每天的非負荷高峰時間段運行(例如凌晨)。為了使這些進程能夠在后臺運行,
    的頭像 發(fā)表于 04-25 11:04 ?1008次閱讀
    <b class='flag-5'>Linux</b>后臺<b class='flag-5'>進程</b>管理詳解

    華為創(chuàng)新技術加速汽車電動化進程

    新能源車擁有安全、舒適的操控體驗”、“讓有路的地方就有高質量充電,讓新能源車充電像加油樣便捷”,華為數字能源堅持以技術產品為核心,質量優(yōu)先,通過車上車下協同發(fā)展,加速汽車電動化進程。
    的頭像 發(fā)表于 04-24 14:08 ?863次閱讀

    Linux系統進程管理入門指南

    Linux 系統中,進程是正在運行的程序的實例。理解進程的管理、查看和控制對于系統管理員和開發(fā)者來說非常重要
    的頭像 發(fā)表于 04-22 14:34 ?1138次閱讀
    <b class='flag-5'>Linux</b>系統<b class='flag-5'>進程</b>管理入門指南

    Linux進程狀態(tài)詳解

    進程狀態(tài)是task_struct內的個整數;進行:進程在調度隊列中,進程的狀態(tài)都是running,阻塞:等待某種設備或者資源就緒。進程
    的頭像 發(fā)表于 04-01 09:46 ?1162次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>進程</b>狀態(tài)詳解

    進程、線程、協程傻傻分不清?帶你徹底扒光它們的\"底褲\"!

    各位程序員朋友(和假裝懂技術的同事):如果你在面試時被問到:\"請用奶茶店類比進程、線程和協程\",而你回答:\"進程是老板,線程是員工,協程是兼職...\"
    發(fā)表于 03-26 09:27