<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                6.6.1 Linux進程管理介紹[^①] 1. Linux進程調度優先級和調度策略 調度優先級和調度策略是操作系統中一個很重要的概念。簡而言之,它是系統中CPU資源的管理和控制手段。如何理解?此處進行簡單介紹。讀者可自行閱讀操作系統方面的書籍以加深理解。 - 相對于在OS上運行的應用進程個數來說,CPU的資源非常有限。 - 調度優先級是OS分配CPU資源給應用進程時(即調度應用進程運行)需要參考的一個指標。一般而言,優先級高的進程將更有機會得到CPU資源。 調度策略用于描述OS調度模塊分配CPU給應用進程所遵循的規則,即當將CPU控制權交給調度模塊時,系統如何選擇下一個要運行的進程。此處不能僅考慮各進程的調度優先級,因為存在多個進程具有相同調度優先級的情況。在這種情況下,一個需要考慮的重要因素是,每個進程所分配的時間片及它們的使用情況. * * * * * **提示**:可簡單認為,調度優先級及調度策略二者一起影響了系統分配CPU資源給應用進程。注意,此處的措詞為“影響”,而非“控制”。因為對于用戶空間可以調用的API來說,如果二者能控制CPU資源分配,那么該系統的安全性會大打折扣。 * * * * * Linux提供了兩個API用于設置調度優先級及調度策略。先來看設置調度優先級的函數setpriority,其原型如下: int setpriority(int which, int who, int prio); 其中: - which和who參數聯合使用。當which為PRIO_PROGRESS時,who代表一個進程;當which為PRIO_PGROUP時,who代表一個進程組;當which為PRIO_USER時,who代表一個uid。 - 第三個參數prio用于設置應用進程的nicer值,可取范圍從-20到19。Linux kernel用nicer值來描述進程的調度優先級,該值越大,表明該進程越友(nice),其被調度運行的幾率越低。 下面來看設置調度策略的函數sched_setscheduler,其原型如下: ~~~ int sched_setscheduler(pid_t pid, int policy,conststruct sched_param *param); ~~~ 其中: - 第一個參數為進程id。 - 第二個參數為調度策略。目前Android支持三種調度策略:SCHED_OTHER,標準round-robin分時共享策略(也就是默認的策略);SCHED_BATCH,針對具有batch風格(批處理)進程的調度策略;SCHED_IDLE,針對優先級非常低的適合在后臺運行的進程。除此之外,Linux還支持實時(Real-time)調度策略,包括SCHED_FIFO,先入先出調度策略;SCHED_RR,:round-robin調度策略,也就是循環調度。 - param參數中最重要的是該結構體中的sched_priority變量。針對Android中的三種非實時調度策略,該值必須為NULL。 以上介紹了調度優先級和調度策略的概念。建議讀者做個小實驗來測試調動優先級及調動策略的作用,步驟如下: - 掛載SD卡到PC機并往向其中復制一些媒體文件,然后重新掛載SD卡到手機。該操作就能觸發MediaScanner掃描新增的這些媒體文件。 - 利用top命令查看CPU使用率,會發現進程com.process.media(即MediaScanner所在的進程)占用CPU較高(可達70%以上),原因是該進程會掃描媒體文件,該工作將利用較多的CPU資源。 - 此時,如果啟動另一個進程,然后做一些操作,會發現MediaScanner所在進程的CPU利用率會降下來(例如下降到30%~40%),這表明系統將CPU資源更多地分給了用戶正在操作的這個進程。 出現這種現象的原因是,MediaScannerSerivce的掃描線程將調度優先級設置為11,而默認的調度優先級為0。 相比而言,MediaScannerService優先級真的很高。 2. 關于Linux進程oom_adj的介紹 從Linux kernel 2.6.11開始,內核提供了進程的OOM控制機制,目的是當系統出現內存不足(out of memory,簡稱OOM)的情況時,Kernel可根據進程的oom_adj來選擇并殺死一些進程,以回收內存。簡而言之,oom_adj可標示Linux進程內存資源的優先級,其可取范圍從-16到15,另外有一個特殊值-17用于禁止系統在OOM情況下殺死該進程。和nicer值一樣,oom_adj的值越高,那么在OOM情況下,該進程越有可能被殺掉。每個進程的oom_adj初值為0。 Linux沒有提供單獨的API用于設置進程的oom_adj。目前的做法就是向/proc/進程id/oom_adj文件中寫入對應的oom_adj值,通過這種方式就能調節進程的oom_adj了。 另外,有必要簡單介紹一下Android為Linux Kernel新增的lowmemorykiller(以后簡稱LMK)模塊的工作方式:LMK的職責是根據當前內存大小去殺死對應oom_adj及以上的進程以回收內存。這里有兩個關鍵參數:為LMK設置不同的內存閾值及oom_adj,它們分別由/sys/module/lowmemorykiller/parameters/minfree和/sys/module/lowmemorykiller/parameters/adj控制。 * * * * * **注意**:這兩個參數的典型設置為: minfree,2048,3072,4096,6144,7168,8192 用于描述不同級別的內存閾值,單位為KB。 adj,0,1,2,4,7,15 用于描述對應內存閾值的oom_adj值。 表示當剩余內存為2048KB時,LMK將殺死oom_adj大于等于0的進程。 * * * * * 網絡上有一些關于Android手機內存優化的方法,其中一種就利用了LMK的工作原理。 >[info] **提示**:lowmemorykiller的代碼在kernel/drivers/staging/android/lowmemorykiller.c中,感興趣的讀者可嘗試自行閱讀。 [^①]:更為詳細的知識請閱讀 http://blog.csdn.net/innost/article/details/6940136。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看