進程調度

1、策略

  策略決定調度程序在何時讓什么進程運行。調度器的策略往往決定系統的整體印象,并且,還要負責優化使用處理器時間。

1.1 I/o消耗型和處理器消耗型。?

  進程可以被分為I/O消耗型和處理器消耗型。前者指進程的大部分時間用來提交I/O請求或者等待I/O請求。因此,這樣的進程經常處于可運行狀態,但通常都是運行短短的一會兒,I/O請求時最后總會阻塞。

1.2 進程優先級

  調度算法中最基本的一類就是基于優先級的調度。Linux內核提供了兩組獨立的優先級范圍。第一種是nice值,范圍從-20到+19,默認值是0,。nice的值越大優先級越低,nice值小的進程在nice直達的進城之前執行。第二個是實時優先級,其值是可配置的,默認情況下他的變化范圍是從0到99.任何實施進程的優先級度高于普通的進程。

1.3 時間片

1.4 進程搶占

?

1.5 調度策略的活動

2 Linux調度算法

設計新的調度算法是為了實現下列目標:

  • 充分實現O(1)調度,不管有多少進程,新的調度采用的每個算法都能在恒定時間內完成。
  • 全面實現SMP的可擴展性。每個村里起擁有自己的鎖和自己的可執行隊列。
  • 強化SMP的親和力,盡量將相關一組任務分配給一個CPU進行連續的執行。只有在需要平衡任務隊列的大小時才在CPU之間移動進程。
  • 加強交互性能。即使在系統處于相當負載的情況下,也能保證系統的相應,冰粒機調度交互式進程。
  • 保證公平,在合理設定的時間范圍內,沒有進程會處于饑餓狀態。同樣的,也沒有進程能夠顯示公平地得到大量的時間片。
  • 雖然最常見的優化情況是系統中只有1~2個可運行進程,但是優化也完全有能力擴展到具有多處理器且每個處理器上運行多個進程的系統中。

2.1 可執行隊列

  調度程序中最基本的數據結構是運行隊列。可執行隊列定義域kernel/sechd.c中,由runqueue表示。

struct runqueue{spinlock_t            lock;            /* 保護運行隊列的自旋鎖 */unsigned long         nr_running;       /* 可運行任務數目 */unsigned long         nr_switches;      /* 上下文切換數目 */unsigned long         expired_timestamp;   /* 隊列最后被換出時間 */unsigned long         nr_uninterruprible;   /*處于不可中斷睡眠狀態的任務數目 */unsigned long long    timestamp_last_tick;  /* 最后一個調度程序的節拍 */struct task_struct    *curr;          /* 當前運行任務 */struct task_struct    *idle;           /* 該處理器的空任務 */struct mm_struct      *prev_mm;         /*最后運行任務的mm_struct結構體 */struct prio_array     *active;         /* 活動優先級隊列 */struct prio_array     *expired;         /*超時優先級隊列 */struct prio_array     array[2];         /*實際優先級數組 */struct task_struct    *migration_thread;    /* 移出線程 */struct list_head      *migration_queue;     /*移出隊列 */atomic_t              nr_iowait;        /* 等待I/O操作的任務數量 */
};  

?

  由于可執行隊列是調度程序的核心數據結構體,所以有一組宏定義用于獲取與給定處理器或進程相關的可執行隊列。cpu_rq(processor)宏用于返回給定處理器可執行隊列的指針。this_rq()宏用來返回當前處理器的可執行隊列。最后,宏task_rq(task)返回給定任務多在的隊列指針。

  在對可執行隊列晉城操作以前,應該先鎖住它。因為每個可執行隊列唯一的對應一個處理器,所以很少出現一個處理器需要鎖其他處理器的可執行隊列的情況。在其擁有者讀取或改寫隊列成員的時候,可執行隊列包含的鎖用來放置隊列被其他代碼改動。鎖住額運行隊列的最常見情況發生在你想鎖住的運行隊列上恰巧有一個特定的任務在運行,此時需要用到task_rq_lock()和task_rq_unlock()

2.2 優先級數組

  每個運行隊列都有兩個優先級數組,一個活躍的和一個過期的。

2.3 重新計算時間片

  

?

轉載于:https://www.cnblogs.com/pingfandfy/p/5694389.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457558.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457558.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457558.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Django,Ajax,Vue實現文章評論功能

Django評論 評論復雜的地方在于需要實現點擊提交評論后評論內容需要立刻出現在下面,還要保持頁面位置不變,所以提交后不能整體刷新頁面,因為刷新以后頁面肯定在最上面,而評論一般都在最下面,所以要用到Ajax 整個過程用…

回歸分析什么時候取對數_冬蜜什么時候取,冬天取蜂蜜的方法

大家好,我現在分享的是,在冬天是在什么時候取蜜!冬天在我們南方,取蜜時間是十一月到十二月的時候,只要溫度達到15度以上,蜂蜜封蓋了就可以取蜜了,并且在冬天我們只能取一次,最晚取蜜…

Opencv與dlib聯合進行人臉關鍵點檢測與識別

前言 依賴庫:opencv 2.4.9 /dlib 19.0/libfacedetection 本篇不記錄如何配置,重點在實現上。使用libfacedetection實現人臉區域檢測,聯合dlib標記人臉特征點,最后使用opencv的FaceRecognizer實現人臉識別。 準備工作 1、配置好Op…

Category 的一些事

來源:伯樂在線 - Tsui YuenHong 鏈接:http://ios.jobbole.com/90422/ 點擊 → 申請加入伯樂在線專欄作者 新增實踐部分:偏方 Hook 進某些方法來添加功能 Category – 簡介 Category(類別)是 Objective-C 2.0 添加的新特…

python tfidf特征變換_機器學習的“萬能模板” - 數據分析

最后是文本變量。很遺憾Titanic數據集中沒有合適的文本變量。一般我們處理文本變量的方法是,合并所有的文本形成一個變量,然后調用Count Vectorizer或者TfidfVectorizer算法,將文本數據轉換成數字。大部分情況下,TfidfVectorizer比…

python實現哈希表

# python 實現哈希表class HashTable:"""哈希函數的構造解決沖突"""def __init__(self, source):self.source sourceself._index []self._val []self.table []self._mod 13def Output(self):print(self._index)print(self._val)def _create…

商品綜合評價排名

店內有很多產品,而且包含但不局限于以下指標:瀏覽量、訪客數、平均停留時長、詳情頁跳出率、下單轉化率、下單支付轉化率、支付轉化率、下單金額、下單商品件數、下單買家數、支付金額、支付商品件數、加購件數、訪客平均價值、收藏人數、客單價、搜索支…

ionic資源網站

http://ionichina.com/topic/570b1f4ecd63e4247a7cfcf3 http://doc.ionicmaterialdesign.com/#intro http://ionicmaterial.com/demo/ 10大materialhttp://www.open-open.com/news/view/192f93e轉載于:https://www.cnblogs.com/znsongshu/p/6079357.html

pytorch神經網絡因素預測_實戰:使用PyTorch構建神經網絡進行房價預測

微信公號:ilulaoshi / 個人網站:lulaoshi.info本文將學習一下如何使用PyTorch創建一個前饋神經網絡(或者叫做多層感知機,Multiple-Layer Perceptron,MLP),文中會使用PyTorch提供的自動求導功能,訓練一個神經…

SQL基本操作

SQL 操作 檢索數據 SELECT 檢索數據 -- 檢索單個列 SELECT 列名 FROM table_name;-- 檢索多個列 SELECT 列1, 列2 FROM table_name;-- 檢索所有列 SELECT * FROM table_name;-- 檢索不同的值 SELECT DISTINCT 列名 FROM table_name;限制檢索結果 -- SQL Server / Access SE…

git 忽略 部分文件夾_git提交忽略某些文件或文件夾

記得第一次用 github 提交代碼,node_modules 目錄死活傳不上去,哈哈哈,后來才知道在 .gitignore 文件里設置了忽略 node_modules 目錄上傳。是的, .gitignore 文件就是設置那些你不想用 git 一起上傳的文件和文件夾。比如剛接觸到…

Ajax實現原理詳解

Ajax:Asynchronous javascript and xml,實現了客戶端與服務器進行數據交流過程。使用技術的好處是:不用頁面刷新,并且在等待頁面傳輸數據的同時可以進行其他操作。 這就是異步調用的很好體現。首先得了解什么是異步和同步的概念。…

SpringJDBC解析3-回調函數(update為例)

PreparedStatementCallback作為一個接口,其中只有一個函數doInPrepatedStatement,這個函數是用于調用通用方法execute的時候無法處理的一些個性化處理方法,在update中的函數實現: protected int update(final PreparedStatementCr…

python上下文管理器

DAY 23. python上下文管理器 Python 的 with 語句支持通過上下文管理器所定義的運行時上下文這一概念。 此對象的實現使用了一對專門方法,允許用戶自定義類來定義運行時上下文,在語句體被執行前進入該上下文,并在語句執行完畢時退出該上下文&…

勾股定理python思路_趣叮咚編程數學揭秘:為什么勾股定理a+b=c?

我們都知道:三角形3個外角之和360度可是誰知道為什么等于360度呢?其實利用編程制作動圖演繹了解啦:那勾股定理abc又是為什么呢?還有很多有趣的數學公式都可以演繹:圓的面積公式、圓周長...通過動圖演繹原來晦澀難懂的定…

System.InvalidOperationException : 不應有 Response xmlns=''。

xml如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <Response version"2"><datacash_reference>4700203048783633</datacash_reference><information>Failed to identify the card scheme of the supp…

Navicat Premium連接SQL Server

Navicat Premium連接SQL Server 步驟&#xff1a; 激活SQL Server 服務配置SQL Server網絡配置連接SQL Server 激活SQLServer服務 直接搜索 計算機管理 點 服務和應用程序&#xff0c; 點 SQL Server配置管理器&#xff0c; 雙擊第一個SQL Server服務 不出意外的話&#xf…

mysql 單標遞歸_MySql8 WITH RECURSIVE遞歸查詢父子集的方法

背景開發過程中遇到類似評論的功能是&#xff0c;需要時用查詢所有評論的子集。不同數據庫中實現方式也不同&#xff0c;本文使用Mysql數據庫&#xff0c;版本為8.0Oracle數據庫中可使用START [Param] CONNECT BY PRIORMysql 中需要使用 WITH RECURSIVE需求找到name為張三的孩子…

processon完全裝逼指南

一、引言 作為一名IT從業者&#xff0c;不僅要有扎實的知識儲備&#xff0c;出色的業務能力&#xff0c;還需要具備一定的軟實力。軟實力體現在具體事務的處理能力&#xff0c;包括溝通&#xff0c;協作&#xff0c;團隊領導&#xff0c;問題的解決方案等&#xff0c;這些能力在…

mysql在空閑8小時之后會斷開連接(默認情況)

調試程序的過程發現&#xff0c;在mysql連接空閑一定時間&#xff08;默認8小時&#xff09;之后會斷開連接&#xff0c;需要重新連接&#xff0c;也引發我對重連機制的思考。轉載于:https://www.cnblogs.com/ppzbty/p/5707576.html