最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux進(jìn)程的優(yōu)先級&&進(jìn)程切換方式

 更新時間:2025年07月11日 09:59:03   作者:清源妙木真菌  
本文概述進(jìn)程優(yōu)先級與調(diào)度算法,涵蓋優(yōu)先級調(diào)整方法(nice、renice命令)及Linux 2.6 O(1)調(diào)度器,通過運行隊列、task_struct結(jié)構(gòu)和位圖優(yōu)化進(jìn)程調(diào)度效率

前言

本文主要介紹了進(jìn)程的優(yōu)先級及其調(diào)度算法:

一、進(jìn)程優(yōu)先級

我們計算機里面一般只有一個cpu用來處理進(jìn)程數(shù)據(jù),所以對于進(jìn)程獲得CPU的使用權(quán)需要一種重要調(diào)度指標(biāo),而進(jìn)程優(yōu)先級就是這種指標(biāo),它用來決定一個進(jìn)程能夠優(yōu)先獲得CPU時間、內(nèi)存等系統(tǒng)資源。

1.1 基本概念

  • cpu資源分配的先后順序,就是指進(jìn)程的優(yōu)先權(quán)(priority)。
  • 優(yōu)先權(quán)?的進(jìn)程有優(yōu)先執(zhí)?權(quán)利。配置進(jìn)程優(yōu)先權(quán)對多任務(wù)環(huán)境的linux很有?,可以改善系統(tǒng)性能。
  • 還可以把進(jìn)程運?到指定的CPU上,這樣?來,把不重要的進(jìn)程安排到某個CPU,可能會改善系統(tǒng)整體性能。

1.2 查看系統(tǒng)進(jìn)程

在linux或者unix系統(tǒng)中,?ps ?l 命令則會類似輸出以下?個內(nèi)容:

  • ps -l命令用于顯示當(dāng)前終端上的所有進(jìn)程的詳細(xì)信息。
  • ps -al命令則更加全面,它顯示了系統(tǒng)中所有用戶的所有進(jìn)程(包括其他用戶的進(jìn)程)的詳細(xì)信息。與ps -l相比,ps -al的輸出包含了更多進(jìn)程的信息,并且不受當(dāng)前終端的限制。

我們很容易注意到其中的?個重要信息,有下:

  • UID : 代表執(zhí)?者的?份
  • PID : 代表這個進(jìn)程的代號
  • PPID :代表這個進(jìn)程是由哪個進(jìn)程發(fā)展衍??來的,亦即?進(jìn)程的代號
  • PRI :代表這個進(jìn)程可被執(zhí)?的優(yōu)先級,其值越?越早被執(zhí)?默認(rèn)為80
  • NI :代表這個進(jìn)程的nice值

1.3 PRI和NI

PRI也還是?較好理解的,即進(jìn)程的優(yōu)先級,或者通俗點說就是程序被CPU執(zhí)?的先后順序,此值越?進(jìn)程的優(yōu)先級別越?

那NI呢?就是我們所要說的nice值了,其表?進(jìn)程可被執(zhí)?的優(yōu)先級的修正數(shù)值

PRI值越?越快被執(zhí)?,那么加?nice值后,將會使得PRI變?yōu)椋篜RI(new)=PRI(oldest)+nice(這意味著我們修改進(jìn)程優(yōu)先級的時候,無論中間的PRI怎么改變,都會會以最開始的PRI值作為基準(zhǔn)值去改變)

這樣,當(dāng)nice值為負(fù)值的時候,那么該程序?qū)?yōu)先級值將變?,即其優(yōu)先級會變?,則其越快被執(zhí)?

所以,調(diào)整進(jìn)程優(yōu)先級,在Linux下,就是調(diào)整進(jìn)程nice值

nice其取值范圍是-20?19,?共40個級別。(當(dāng)我們調(diào)整的nice值超過這個區(qū)間的時候,會以區(qū)間里面的最低或最高值作為nice值)

需要強調(diào)?點的是,進(jìn)程的nice值不是進(jìn)程的優(yōu)先級,他們不是?個概念,但是進(jìn)程nice值會影響到進(jìn)程的優(yōu)先級變化??梢岳斫鈔ice值是進(jìn)程優(yōu)先級的修正數(shù)據(jù)

1.4 調(diào)整優(yōu)先級

雖然一般情況下我們是不需要調(diào)整優(yōu)先級的,不過我們?nèi)匀恍枰私馊绾握{(diào)整優(yōu)先級。

使用下面的命令都需要管理者的身份。

1.4.1 top命令

top命令更改已存在進(jìn)程的nice:

  • top
  • 進(jìn)?top后按“r”?>輸?進(jìn)程PID?>輸?nice值
  • 按”q“退出,及修改完成

1.4.2 nice命令

nice命令用于在啟動一個新進(jìn)程時指定其優(yōu)先級,即進(jìn)程的“nice值”。Nice值是一個整數(shù),范圍從-20(最高優(yōu)先級)到19(最低優(yōu)先級),默認(rèn)情況下,大多數(shù)進(jìn)程的nice值為0。

語法:

  • nice [選項] [nice值] 命令 [參數(shù)]

參數(shù):

  • -n 或 --adjustment:指定nice值的增量或減量。
  • -h 或 --help:顯示幫助信息。
  • -V 或 --version:顯示版本信息。

1.4.3 renice命令

renice命令用于修改已經(jīng)運行的進(jìn)程的優(yōu)先級。

語法:

  • renice [選項] 優(yōu)先級 進(jìn)程ID

選項:

  • -n:指定要改變的優(yōu)先級值,取值范圍為-20到19。
  • -g:指定要調(diào)整優(yōu)先級的進(jìn)程組ID。
  • -u:指定要調(diào)整優(yōu)先級的用戶名。
  • -p:指定要調(diào)整優(yōu)先級的進(jìn)程ID(默認(rèn))。
  • -h 或 --help:顯示幫助信息。
  • -V 或 --version:顯示版本信息。

二、進(jìn)程切換

2.1 補充概念

競爭性:系 統(tǒng)進(jìn)程數(shù)?眾多,?CPU資源只有少量,甚?1個,所以進(jìn)程之間是具有競爭屬性的。為了?效完成任務(wù),更合理競爭相關(guān)資源,便具有了優(yōu)先級

獨?性: 多進(jìn)程運?,需要獨享各種資源,多進(jìn)程運?期間互不?擾

并?: 多個進(jìn)程在多個CPU下分別,同時進(jìn)?運?,這稱之為并?

并發(fā): 多個進(jìn)程在?個CPU下采?進(jìn)程切換的?式,在?段時間之內(nèi),讓多個進(jìn)程都得以推進(jìn),稱之為并發(fā)

2.2 進(jìn)程的運行和切換步驟(重要)

在進(jìn)程運行的過程中會有個時間片的概念,是操作系統(tǒng)進(jìn)行進(jìn)程調(diào)度時分配給每個進(jìn)程的一段固定時間。這么做一部分上是為了防止某個進(jìn)程卡死的情況,例如某個進(jìn)程調(diào)度的時候代碼內(nèi)部有個while(1)函數(shù)導(dǎo)致一直運行。及時的切換到運行隊列里其它進(jìn)程是很有必要的

時間片內(nèi),進(jìn)程可以執(zhí)行其代碼、訪問內(nèi)存和進(jìn)行輸入輸出操作。當(dāng)進(jìn)程的時間片用完時,操作系統(tǒng)會暫停該進(jìn)程的執(zhí)行,并將其保存到某種狀態(tài)(通常是通過進(jìn)程控制塊PCB),然后切換到另一個進(jìn)程的時間片。

切換步驟:

  • 一個時間片結(jié)束的進(jìn)程但是還沒被cpu執(zhí)行完其內(nèi)部的所有代碼數(shù)據(jù),從cpu內(nèi)被剝離下來
  • 此時進(jìn)程內(nèi)臨時運行的數(shù)據(jù)(比如執(zhí)行到代碼的哪一行了,其中變量的一些數(shù)據(jù)等)會被保存下來(通常是保存到進(jìn)程的私有堆棧,也就是保存在task_struct本身,及task_struct里面會定義一個或多個變量或指針來存儲自己寄存器里面的信息),及cpu內(nèi)寄存器里面的內(nèi)容(當(dāng)前進(jìn)程的上下文數(shù)據(jù))會被保存到某個指定的地方
  • 這樣子寄存器就可以處理新的進(jìn)程的數(shù)據(jù)了,而舊的進(jìn)程可以重新鏈入運行隊列
  • 當(dāng)恢復(fù)到這個進(jìn)程的時候,就會把前一次本進(jìn)程被中止時的中間數(shù)據(jù)再恢復(fù)到cpu寄存器里面去

二、Linux2.6內(nèi)核進(jìn)程O(1)調(diào)度隊列(重要)

操作系統(tǒng)是如何根據(jù)優(yōu)先級來開展的調(diào)度呢? 

一個cpu一個運行隊列

其中queue的類型為struct task_struct隊列中的[0-99]為實時優(yōu)先級我們不做考慮,而[100-139]則是我們進(jìn)程的優(yōu)先級序列。

2.1 基本過程

在Linux2.6內(nèi)核中,每個CPU都擁有一個獨立的運行隊列(run_queue)。

運行隊列用于管理和調(diào)度該CPU上的所有可運行進(jìn)程。

task_struct結(jié)構(gòu)體:

  • 在Linux內(nèi)核中,每個進(jìn)程都有一個對應(yīng)的task_struct結(jié)構(gòu)體,用于存儲該進(jìn)程的所有信息。
  • 它會被鏈入運行隊列中,在運行隊列中,task_struct結(jié)構(gòu)體通過指針數(shù)組來維護(hù)不同優(yōu)先級的進(jìn)程隊列。
  • 其下的run 對應(yīng)上面active ,wait對應(yīng)expired ,running對應(yīng)活躍進(jìn)程,waiting對應(yīng)過期進(jìn)程

這是一個類似哈希鏈地址法的指針數(shù)組,遍歷這個指針數(shù)組從上到下,從左到右就完成了對進(jìn)程的優(yōu)先級的調(diào)度!?。?/p>

除此之外我們在running下設(shè)計了個waiting,這么做的目的是

當(dāng)我們遍歷這個指針數(shù)組的時候,可能會有新的task_struct插入進(jìn)來,或者一個進(jìn)程時間片結(jié)束后進(jìn)程還沒被cpu處理完,那么此時就會進(jìn)入到waiting里面,當(dāng)running這個指針數(shù)組遍歷完的時候,利用位圖(bitmap)判斷指針數(shù)據(jù)這個隊列是否為空,然后只需要交換上面圖片中的run和wait兩者指向指針的地址,就能繼續(xù)調(diào)度未處理完數(shù)據(jù)或者新的task_struct了!

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 系統(tǒng)講解Apache Kafka消息管理與異常處理的最佳實踐

    系統(tǒng)講解Apache Kafka消息管理與異常處理的最佳實踐

    Apache Kafka 作為分布式流處理平臺的核心組件,廣泛應(yīng)用于實時數(shù)據(jù)管道、日志聚合和事件驅(qū)動架構(gòu),下面我們就來系統(tǒng)講解 Kafka 消息管理與異常處理的最佳實踐吧
    2025-04-04
  • centos8使用Apache httpd2.4.37安裝web服務(wù)器的步驟詳解

    centos8使用Apache httpd2.4.37安裝web服務(wù)器的步驟詳解

    這篇文章主要介紹了centos8使用Apache httpd2.4.37安裝web服務(wù)器的步驟詳解,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Linux地址空間的轉(zhuǎn)換以及線程的理解和使用過程

    Linux地址空間的轉(zhuǎn)換以及線程的理解和使用過程

    文章解析了線程與進(jìn)程的關(guān)系,指出線程是進(jìn)程內(nèi)的執(zhí)行分支,Linux通過復(fù)用PCB實現(xiàn)輕量化管理,并詳細(xì)說明了頁表分級機制(如兩級頁表)與4KB頁框的內(nèi)存映射原理,同時對比線程的優(yōu)缺點,強調(diào)其資源高效性與共享風(fēng)險
    2025-07-07
  • linux系統(tǒng)下如何掛載NTFS移動硬盤

    linux系統(tǒng)下如何掛載NTFS移動硬盤

    用命令行掛載移動硬盤是Linux的基本操作之一,雖然目前有些Linux系統(tǒng)能自動加載移動硬盤,但有些時候(比如使用Ubuntu Server或其它Linux系統(tǒng)的時候)仍然需要手動操作,下面這篇文章主要介紹了linux系統(tǒng)下如何掛載NTFS移動硬盤,需要的朋友可以參考借鑒。
    2017-01-01
  • Windows10安裝linux子系統(tǒng)的兩種方式(圖文詳解)

    Windows10安裝linux子系統(tǒng)的兩種方式(圖文詳解)

    這篇文章主要介紹了Windows10安裝linux子系統(tǒng)的兩種方式,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Git pull命令與fetch命令的區(qū)別

    Git pull命令與fetch命令的區(qū)別

    這篇文章主要介紹了Git pull命令與fetch命令的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Ubuntu cron日志開啟與查看的實現(xiàn)步驟

    Ubuntu cron日志開啟與查看的實現(xiàn)步驟

    這篇文章主要介紹了Ubuntu cron日志開啟與查看的實現(xiàn)步驟的相關(guān)資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • Linux進(jìn)程信號的發(fā)送和保存方法

    Linux進(jìn)程信號的發(fā)送和保存方法

    從信號產(chǎn)生到信號保存,中間經(jīng)歷了很多,當(dāng)操作系統(tǒng)準(zhǔn)備對信號進(jìn)行處理時,還需要判斷時機是否 “合適”,在絕大多數(shù)情況下,只有在 “合適” 的時機才能處理信號,即調(diào)用信號的執(zhí)行動作,本文將給大家介紹Linux進(jìn)程信號的發(fā)送和保存方法,需要的朋友可以參考下
    2025-04-04
  • centos 6.X升級ffmpeg包步驟詳解

    centos 6.X升級ffmpeg包步驟詳解

    眾所周知FFmpeg是一個開源免費跨平臺的視頻和音頻流方案,屬于自由軟件,采用LGPL或GPL許可證(依據(jù)你選擇的組件)。之前公司已經(jīng)安裝了ffmpeg包,但因為時間較久,所以最近打算升級下,所以這篇文章就記錄了在centos 6.X升級ffmpeg包的詳細(xì)步驟,下面來一起看看吧。
    2016-11-11
  • Linux下wget命令詳細(xì)介紹

    Linux下wget命令詳細(xì)介紹

    本文詳細(xì)講解了Linux下wget命令的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評論

扎兰屯市| 颍上县| 都兰县| 福海县| 肥乡县| 岳池县| 扬中市| 宾阳县| 罗甸县| 开封县| 罗源县| 顺昌县| 华亭县| 类乌齐县| 长垣县| 荣成市| 海兴县| 南澳县| 中超| 军事| 翼城县| 北安市| 宜黄县| 新竹县| 双鸭山市| 赫章县| 常德市| 上杭县| 收藏| 长葛市| 文成县| 厦门市| 西盟| 大城县| 平陆县| 富锦市| 枣强县| 禄丰县| 义马市| 两当县| 辽中县|