色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

一文解讀Linux進程凍結技術

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

1 什么是進程凍結

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

2 為什么需要凍結技術

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

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

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

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

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

3 代碼實現框架

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

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

標記系統freeze狀態的有三個重要的全局變量: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位,但不傳遞任何信號,然后喚醒任務;這樣任務在返回用戶態時會進入信號處理流程,檢查系統的freeze狀態,并做相應處理。

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

static inline bool try_to_freeze_unsafe(void)

{

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

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 && !(p-》flags & PF_KTHREAD)) //系統凍結用戶進程

return true;

return false;

}

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

{

。..

for (;;) {

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

spin_lock_irq(&freezer_lock);

current-》flags |= PF_FROZEN; //設置已凍結狀態

if (!freezing(current) ||

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

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

spin_unlock_irq(&freezer_lock);

if (!(current-》flags & PF_FROZEN)) //如果已取消凍結,跳出循環,恢復執行

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

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

    關注

    3

    文章

    1372

    瀏覽量

    40280
  • Linux
    +關注

    關注

    87

    文章

    11293

    瀏覽量

    209340
  • 進程
    +關注

    關注

    0

    文章

    203

    瀏覽量

    13960
收藏 人收藏

    評論

    相關推薦

    深入解析Linux程序與進程

    什么是程序 組計算機能識別和執行的指令,用于指導計算機執行特定任務或解決特定問題。程序通常由代碼、數據和資源文件組成,涉及語法、算法和數據結構。為二進制文件 什么是進程個具有獨立功能的程序
    的頭像 發表于 12-18 11:01 ?70次閱讀
    深入解析<b class='flag-5'>Linux</b>程序與<b class='flag-5'>進程</b>

    深入Linux進程管理:提升效率與穩定性的關鍵方法

    目錄 Linux進程管理 8.1 IO負載 8.2 實時進程監控 5.1 作業與會話 5.2 作業分類 4.1 ps 4.2pstree 4.3pgrep 4.4pidof 4.5 vmstat
    的頭像 發表于 11-22 11:05 ?206次閱讀
    深入<b class='flag-5'>Linux</b><b class='flag-5'>進程</b>管理:提升效率與穩定性的關鍵方法

    解讀Linux 5種IO模型

    見的IO模型。 當發起個IO操作時,比如讀取數據,系統會調用read()函數。如果請求的數據沒有準備好,此時進程會被掛起(blocked),進入等待狀態。直到數據準備好,而且復制到應用進程的緩沖區,這時候才會返回。 從調用到返
    的頭像 發表于 11-09 11:12 ?308次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>解讀</b><b class='flag-5'>Linux</b> 5種IO模型

    搞懂Linux進程的睡眠和喚醒

    、常見的進程狀態與理解 在操作系統內部,有專門用來管理進程的結構體,叫做struct task_struct,也稱作進程控制塊(PCB),主要包含描述
    發表于 11-04 15:15

    Linux網絡基礎知識總結

    同 CPU、內存以及 I/O 樣,網絡也是 Linux 系統最核心的功能。 網絡是種把不同計算機或網絡設備連接到起的技術,它本質上是
    的頭像 發表于 10-28 10:42 ?242次閱讀
    <b class='flag-5'>Linux</b>網絡基礎知識總結

    Linux用戶身份與進程權限詳解

    在學習 Linux 系統權限相關的主題時,我們首先關注的基本都是文件的 ugo 權限。ugo 權限信息是文件的屬性,它指明了用戶與文件之間的關系。但是真正操作文件的卻是進程,也就是說用戶所擁有的文件
    的頭像 發表于 10-23 11:41 ?336次閱讀
    <b class='flag-5'>Linux</b>用戶身份與<b class='flag-5'>進程</b>權限詳解

    深入探討Linux進程調度器

    Linux操作系統作為個開源且廣泛應用的操作系統,其內核設計包含了許多核心功能,而進程調度器(Scheduler)就是其中個至關重要的模塊。進程
    的頭像 發表于 08-13 13:36 ?940次閱讀
    深入探討<b class='flag-5'>Linux</b>的<b class='flag-5'>進程</b>調度器

    解讀MIPI A-PHY與車載Serdes芯片技術與測試

    期,《汽車芯片標準體系建設指南》技術解讀與功率芯片測量概覽中,我們給大家介紹了工信部印發的《汽車芯片標準體系建設指南》涉及到的重點芯片與測試領域解讀,本期繼續給大家做延展,我們
    的頭像 發表于 07-24 10:14 ?2773次閱讀
    <b class='flag-5'>解讀</b>MIPI A-PHY與車載Serdes芯片<b class='flag-5'>技術</b>與測試

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

    【古瑞瓦特光伏逆變器品牌】讀懂PCS儲能變流器 在加快實現雙碳目標和構建新型電力系統的進程中,儲能技術正逐步成為支撐新型電力系統穩定運行、優化資源配置的關鍵
    的頭像 發表于 06-14 16:39 ?1279次閱讀
    【古瑞瓦特光伏逆變器品牌】<b class='flag-5'>一</b><b class='flag-5'>文</b>讀懂PCS儲能變流器

    百度首席技術官王海峰解讀心大模型的關鍵技術和最新進展

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

    linux下查詢進程占用的內存方法有哪些?

    linux下查詢進程占用的內存方法
    發表于 04-08 06:03

    EMC技術:基礎概念到應用的解讀?|深圳比創達電子.

    EMC技術:基礎概念到應用的解讀?|深圳比創達電子電磁兼容性(Electromagnetic Compatibility,簡稱EMC)作為項重要的技術領域,在現代電子設備中扮演著至關
    發表于 03-11 11:59

    EMC技術:基礎概念到應用的解讀

    EMC技術:基礎概念到應用的解讀?|深圳比創達電子
    的頭像 發表于 03-11 11:55 ?575次閱讀
    EMC<b class='flag-5'>技術</b>:基礎概念到應用的<b class='flag-5'>解讀</b>?

    淺談Linux進程

    進程和程序的區別: 進程是動態的,程序是靜態的 進程的創建(fork()函數) int main(){ pid_t pid; pid=fork(); if(pid?????>0
    的頭像 發表于 01-28 15:54 ?257次閱讀
    淺談<b class='flag-5'>Linux</b>的<b class='flag-5'>進程</b>

    詳解Linux內核-信號的產生過程

    許多內核函數產生信號:它們完成信號處理的第階段,也就是更新個或多個進程描述符。
    的頭像 發表于 01-13 13:48 ?1304次閱讀
    主站蜘蛛池模板: 久久精品国产欧美成人| 久久精品热在线观看85| 亚洲乱亚洲乱妇在线观看| 禁漫H天堂免费A漫| 97资源总站(中文字幕)| 午夜免费小视频| 男人的天堂黄色片| 精品无码久久久久久动漫| 成年美女黄网站色app| 5G在线观看免费年龄确认| 亚洲裸舞 hd| 巨胸美乳中文在线观看| 最近中文字幕免费高清MV视频6| 小鸟酱喷水| 美女与男人对肌免费网站| c了瑜伽老师嗷嗷叫一节课视频| 琪琪婷婷五月色综合久久| 动漫在线观看免费肉肉| 4388成人| 最近日本免费观看MV免费| 亚洲综合色五月久久婷婷| 亚洲欧美中文日韩v在线| 亚洲精品美女久久777777| 四虎国产精品永久免费入口| 狠狠色色综合站| 国产伦精品一区二区三区免费观看 | 亚洲国产果果在线播放在线| 国产高清免费观看| 一二三四在线视频社区8| 浓毛BWBWBWBWBW日本| qvod电影在线观看| 一边捏奶头一边啪高潮会怎么样| 色99久久久久高潮综合影院| 国产揄拍国产精品| 国产精品久久久久久久久免费下载| 性xxx免费视频| 秘密教学26我们在做一次吧免费 | 大学生宿舍飞机china free| 青青草伊人| 国产精品一区二区AV交换| 双腿被绑成M型调教PLAY照片|