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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

3天內不再提示

一文解讀Linux進程凍結技術

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

掃碼添加小助手

加入工程師交流群

1 什么是進程凍結

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

2 為什么需要凍結技術

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

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

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

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

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

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

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

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

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

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

任務主動調用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); //主動進入凍結

}

static inline bool freezing(struct task_struct *p)

{

if (likely(!atomic_read(&system_freezing_cnt))) //系統(tǒng)總體進入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)) //系統(tǒng)凍結kernel threads

return true;

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

return true;

return false;

}

進入凍結狀態(tài)直到恢復的主要函數(shù):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())) //判斷系統(tǒng)是否還處于凍結

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

spin_unlock_irq(&freezer_lock);

if (!(current-》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ī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1416

    瀏覽量

    41482
  • Linux
    +關注

    關注

    87

    文章

    11517

    瀏覽量

    213990
  • 進程
    +關注

    關注

    0

    文章

    207

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    掌握Linux命令

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

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

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

    Linux后臺進程管理詳解

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

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

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

    Linux系統(tǒng)進程管理入門指南

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

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

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

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

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

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

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

    深入解析Linux程序與進程

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

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

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

    解讀Linux 5種IO模型

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

    搞懂Linux進程的睡眠和喚醒

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

    Linux網絡基礎知識總結

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

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

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

    深入探討Linux進程調度器

    Linux操作系統(tǒng)作為個開源且廣泛應用的操作系統(tǒng),其內核設計包含了許多核心功能,而進程調度器(Scheduler)就是其中個至關重要的模塊。進程
    的頭像 發(fā)表于 08-13 13:36 ?1306次閱讀
    深入探討<b class='flag-5'>Linux</b>的<b class='flag-5'>進程</b>調度器
    主站蜘蛛池模板: 老鸭窝毛片 | 美女被爽cao免费漫画 | 亚洲国产AV一区二区三区四区 | 国产精品欧美一区二区在线看 | 尤物久久99国产综合精品 | 国模丽丽啪啪一区二区 | 国产精品AV视频一二三区 | 草比比过程图 | 国产短视频精品区 | 国产成人精选免费视频 | 777久久人妻少妇嫩草AV | 美女的隐私蜜桃传媒免费看 | 四虎国产精品永久一区高清 | 寂寞夜晚看免费视频 | 在线自拍亚洲视频欧美 | 色综合精品无码一区二区三区 | 久久久久伊人 | 高清不卡伦理电影在线观看 | 一区二区三区国产亚洲网站 | 67194成网页发布在线观看 | 秋霞久久久久久一区二区 | 无码人妻99久久密AV | 美女脱三角裤 | 性夜a爽黄爽 | 最近中文字幕高清中文 | 最近更新2019中文字幕免费 | 中文字幕在线视频免费观看 | 在线观看亚洲 日韩 国产 | 涩涩爱涩涩电影网站 | 亚洲精品国产自在现线最新 | 最新无码专区在线视频 | 国产精品成人影院 | 国产精品在线手机视频 | 中字幕视频在线永久在线 | 御姐被吸奶 | 久久久精品久久久久特色影视 | 亚洲色爽视频在线观看 | a级销魂美女 | 一个人日本的视频免费完整版 | 影音先锋男人资源813. | 99久久久久精品国产免费麻豆 |

    電子發(fā)燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品