進程調度

来源:https://www.cnblogs.com/linhaostudy/archive/2018/09/01/9568894.html
-Advertisement-
Play Games

優先順序 欄位 | 描述 | static_prio | 用於保存靜態優先順序,可以通過nice系統調用來進行修改 rt_priority | 用於保存實時優先順序 normal_prio | 它的值取決於靜態優先順序和調度策略 prio | 用於保存動態優先順序 實時優先順序範圍是0到MAX_RT_PRIO ...


優先順序

int prio, static_prio, normal_prio;
unsigned int rt_priority;
欄位 描述
static_prio 用於保存靜態優先順序,可以通過nice系統調用來進行修改
rt_priority 用於保存實時優先順序
normal_prio 它的值取決於靜態優先順序和調度策略
prio 用於保存動態優先順序

實時優先順序範圍是0到MAX_RT_PRIO-1(即99),而普通進程的靜態優先順序範圍是從MAX_RT_PRIO到MAX_PRIO-1(即100到139)。值越大靜態優先順序越低。

/*  http://lxr.free-electrons.com/source/include/linux/sched/prio.h#L21  */
#define MAX_USER_RT_PRIO    100
#define MAX_RT_PRIO     MAX_USER_RT_PRIO

/* http://lxr.free-electrons.com/source/include/linux/sched/prio.h#L24  */
#define MAX_PRIO        (MAX_RT_PRIO + 40)
#define DEFAULT_PRIO        (MAX_RT_PRIO + 20)

調度策略相關欄位

/*  http://lxr.free-electrons.com/source/include/linux/sched.h?v=4.5#L1426  */
unsigned int policy;

/*  http://lxr.free-electrons.com/source/include/linux/sched.h?v=4.5#L1409  */

const struct sched_class *sched_class;
struct sched_entity se;
struct sched_rt_entity rt;


cpumask_t cpus_allowed;
欄位 描述
policy 調度策略
sched_class 調度類
se 普通進程的調用實體,每個進程都有其中之一的實體
rt 實時進程的調用實體,每個進程都有其中之一的實體
cpus_allowed 用於控制進程可以在哪裡處理器上運行

調度策略

policy表示進程的調度策略,目前主要有以下五種:

/*
* Scheduling policies
*/
#define SCHED_NORMAL            0
#define SCHED_FIFO              1
#define SCHED_RR                2
#define SCHED_BATCH             3
/* SCHED_ISO: reserved but not implemented yet */
#define SCHED_IDLE              5
#define SCHED_DEADLINE          6
欄位 描述 所在調度器類
SCHED_NORMAL (也叫SCHED_OTHER)用於普通進程,通過CFS調度器實現。SCHED_BATCH用於非交互的處理器消耗型進程。SCHED_IDLE是在系統負載很低時使用 CFS
SCHED_BATCH SCHED_NORMAL普通進程策略的分化版本。採用分時策略,根據動態優先順序(可用nice()API設置),分配 CPU 運算資源。註意:這類進程比上述兩類實時進程優先順序低,換言之,在有實時進程存在時,實時進程優先調度。但針對吞吐量優化
SCHED_IDLE 優先順序最低,在系統空閑時才跑這類進程(如利用閑散電腦資源跑地外文明搜索,蛋白質結構分析等任務,是此調度策略的適用者) CFS
SCHED_FIFO 先入先出調度演算法(實時調度策略),相同優先順序的任務先到先服務,高優先順序的任務可以搶占低優先順序的任務 RT
SCHED_RR 輪流調度演算法(實時調度策略),後 者提供 Roound-Robin 語義,採用時間片,相同優先順序的任務當用完時間片會被放到隊列尾部,以保證公平性,同樣,高優先順序的任務可以搶占低優先順序的任務。不同要求的實時任務可以根據需要用sched_setscheduler()API 設置策略 RT
SCHED_DEADLINE 新支持的實時進程調度策略,針對突髮型計算,且對延遲和完成時間高度敏感的任務適用。基於Earliest Deadline First (EDF) 調度演算法

調度類

sched_class結構體表示調度類,目前內核中有實現以下四種:

extern const struct sched_class stop_sched_class;
extern const struct sched_class dl_sched_class;
extern const struct sched_class rt_sched_class;
extern const struct sched_class fair_sched_class;
extern const struct sched_class idle_sched_class;
調度器類 描述
idle_sched_class 每個cup的第一個pid=0線程:swapper,是一個靜態線程。調度類屬於:idel_sched_class,所以在ps裡面是看不到的。一般運行在開機過程和cpu異常的時候做dump
stop_sched_class 優先順序最高的線程,會中斷所有其他線程,且不會被其他任務打斷。作用:1.發生在cpu_stop_cpu_callback 進行cpu之間任務migration;2.HOTPLUG_CPU的情況下關閉任務。
rt_sched_class RT,作用:實時線程
fair_sched_class CFS(公平),作用:一般常規線程

目前系統中,Scheduling Class的優先順序順序為StopTask > RealTime > Fair > IdleTask

開發者可以根據己的設計需求,來把所屬的Task配置到不同的Scheduling Class中.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 項目中經常使用需要根據搜索條件查詢數據,然後用卡片來展示數據。用卡片展示數據時,界面的寬度發生變化,希望顯示的卡片數量也跟隨變化。WrapPanel雖然也可以實現這個功能,但是將多餘的部分都留在行尾,十分不美觀,最好是能夠將多餘的寬度平分在每個ListBoxItem之間,比較美觀,也符合項目需求。如 ...
  • 公司項目有個需求,UI界面支持動態平均分割界面,想了想便想到用ListBox來實現,用UniformGrid作為ListBox的ItemsPanelTemplate,通過動態改變UniformGrid的Columns屬性,可以動態分割界面。具體實現如下所示: 對應的ViewModel層代碼: 軟體運 ...
  • 1. 概述... 2 2. ServerSuperIO.Core跨平臺開發環境... 2 3. ServerSuperIO.Core特點... 2 4. ServerSuperIO.Core與ServerSuperIO區別... 2 5. 嵌入式應用... 2 6. 上位機應用... 2 7. 雲服 ...
  • 在使用WPF開發的時候就不免會遇到需要兩個視窗間進行傳值操作,當然多視窗間傳值的方法有很多種,本文介紹的是使用委托實現多視窗間的傳值。 在上代碼之前呢,先簡單介紹一下什麼是C#中的委托(如果只想瞭解如何傳值可以略過這部分)在網路上有很多對於委托的介紹和講解,經過我的學習和總結加上了一點我自己的理解, ...
  • 一.數據類型 值類型 引用類型 數組 類(自定義類) 字元串 介面 Object 委托 指針類型 官方給出的說明 在指針類型中的 * 之前指定的類型被稱為“referrent 類型”。 以下任一類型均可為 referrent 類型: 任何整型類型:sbyte、byte、short、ushort、in ...
  • 2018-08-30 直接調用瀏覽器的列印方法 1、列印按鈕 <a href="#" target="_self" onclick="printme()">列印</a> 2、js 2、js //列印 function printme() { $.messager.confirm('確認', '確認打 ...
  • Hadoop 中文編碼相關問題 -- mapreduce程式處理GBK編碼數據並輸出GBK編碼數據 Hadoop 中文編碼相關問題 -- mapreduce程式處理GBK編碼數據並輸出GBK編碼數據 Hadoop 中文編碼相關問題 -- mapreduce程式處理GBK編碼數據並輸出GBK編碼數據 ...
  • 作者:依樂祝 原文地址:https://www.cnblogs.com/yilezhu/p/9557375.html 簡單的說Ocelot是一個用.NET Core實現並且開源的API網關技術。 可能你又要問了,什麼是API網關技術呢?Ocelot又有什麼特別呢?我們又該如何集成到我們的asp.ne ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...