哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

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

454398 ? 來源:蝸窩科技 ? 作者: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è)沒有凍結(jié)技術(shù),進(jìn)程可以在任意可調(diào)度的點(diǎn)暫停,而且直到cpu_down才會(huì)暫停并遷移。這會(huì)給系統(tǒng)帶來很多問題:

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

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

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

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

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

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

kernel threads可以通過調(diào)用kthread_freezable_should_stop來判斷freezing狀態(tài),并主動(dòng)調(diào)用__refrigerator進(jìn)入凍結(jié);work_queue通過判斷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ù)巧妙的利用了信號處理機(jī)制,只設(shè)置任務(wù)的TIF_SIGPENDING位,但不傳遞任何信號,然后喚醒任務(wù);這樣任務(wù)在返回用戶態(tài)時(shí)會(huì)進(jìn)入信號處理流程,檢查系統(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 && ?。╬-》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 (?。╟urrent-》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)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    4

    文章

    1474

    瀏覽量

    43087
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11806

    瀏覽量

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

    關(guān)注

    0

    文章

    211

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    搞懂Linux權(quán)限體系

    Linux權(quán)限體系是運(yùn)維工作的基礎(chǔ)中的基礎(chǔ)。無論你管理的是單機(jī)還是集群,權(quán)限問題導(dǎo)致的故障占總故障量的相當(dāng)比例。本文從線運(yùn)維視角出發(fā),系統(tǒng)講解Linux權(quán)限模型的核心概念、常見場景、排障方法以及安全最佳實(shí)踐。閱讀本文后,你應(yīng)該
    的頭像 發(fā)表于 04-09 10:04 ?139次閱讀

    飛凌嵌入式ElfBoard-進(jìn)程進(jìn)程狀態(tài)

    Linux系統(tǒng)中,進(jìn)程狀態(tài)對于系統(tǒng)調(diào)度、資源分配和管理非常重要,因?yàn)樗硎玖?b class='flag-5'>進(jìn)程當(dāng)前的執(zhí)行狀況和資源使用情況。在Linux 系統(tǒng)中使用ps -aux 命令可觀察到
    發(fā)表于 03-27 09:12

    飛凌嵌入式ElfBoard-進(jìn)程的相關(guān)信息之父進(jìn)程和子進(jìn)程

    進(jìn)程在創(chuàng)建時(shí),創(chuàng)建進(jìn)程是新進(jìn)程的父進(jìn)程,新進(jìn)程是創(chuàng)建進(jìn)程的子
    發(fā)表于 03-12 17:12

    飛凌嵌入式ElfBoard-進(jìn)程之什么是進(jìn)程

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

    Linux進(jìn)程管理不用愁!這6個(gè)工具幫你搞定90%場景

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

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

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

    深入Linux內(nèi)核:進(jìn)程調(diào)度的核心邏輯與實(shí)現(xiàn)細(xì)節(jié)

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

    解析Linux進(jìn)程、線程和協(xié)程

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

    電壓放大器在人工凍結(jié)粉砂物理力學(xué)特性與聲學(xué)參數(shù)研究中的應(yīng)用

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

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

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

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

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

    掌握Linux命令

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

    Linux系統(tǒng),撐起整個(gè)芯片設(shè)計(jì)平臺(tái)?CFA團(tuán)隊(duì)教你如何搭好EDA智算平臺(tái)的技術(shù)底座

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

    Linux后臺(tái)進(jìn)程管理詳解

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

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

    Linux 系統(tǒng)中,進(jìn)程是正在運(yùn)行的程序的實(shí)例。理解進(jìn)程的管理、查看和控制對于系統(tǒng)管理員和開發(fā)者來說非常重要
    的頭像 發(fā)表于 04-22 14:34 ?1295次閱讀
    <b class='flag-5'>Linux</b>系統(tǒng)<b class='flag-5'>進(jìn)程</b>管理入門指南
    增城市| 赤壁市| 安远县| 增城市| 临沭县| 衢州市| 股票| 岑巩县| 沙洋县| 法库县| 绥德县| 雅江县| 徐州市| 类乌齐县| 阳江市| 新沂市| 武山县| 永修县| 尼勒克县| 高台县| 辉县市| 曲周县| 广宁县| 新乐市| 华容县| 张家口市| 兴安县| 方山县| 桃江县| 墨竹工卡县| 龙门县| 白银市| 长乐市| 冷水江市| 宽甸| 永春县| 饶平县| 施甸县| 温泉县| 翁牛特旗| 鱼台县|