欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

我們計(jì)算機(jī)里面一般只有一個(gè)cpu用來(lái)處理進(jìn)程數(shù)據(jù),所以對(duì)于進(jìn)程獲得CPU的使用權(quán)需要一種重要調(diào)度指標(biāo),而進(jìn)程優(yōu)先級(jí)就是這種指標(biāo),它用來(lái)決定一個(gè)進(jìn)程能夠優(yōu)先獲得CPU時(shí)間、內(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)對(duì)多任務(wù)環(huán)境的linux很有?,可以改善系統(tǒng)性能。
  • 還可以把進(jìn)程運(yùn)?到指定的CPU上,這樣?來(lái),把不重要的進(jìn)程安排到某個(gè)CPU,可能會(huì)改善系統(tǒng)整體性能。

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

在linux或者unix系統(tǒng)中,?ps ?l 命令則會(huì)類似輸出以下?個(gè)內(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)前終端的限制。

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

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

1.3 PRI和NI

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

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

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

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

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

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

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

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

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

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

1.4.1 top命令

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

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

1.4.2 nice命令

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

語(yǔ)法:

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

參數(shù):

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

1.4.3 renice命令

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

語(yǔ)法:

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

選項(xiàng):

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

二、進(jìn)程切換

2.1 補(bǔ)充概念

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

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

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

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

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

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

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

切換步驟:

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

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

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

一個(gè)cpu一個(gè)運(yùn)行隊(duì)列

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

2.1 基本過(guò)程

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

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

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

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

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

除此之外我們?cè)趓unning下設(shè)計(jì)了個(gè)waiting,這么做的目的是

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

總結(jié)

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

相關(guān)文章

  • Linux平臺(tái)和Windows平臺(tái)互傳文件的實(shí)現(xiàn)方法

    Linux平臺(tái)和Windows平臺(tái)互傳文件的實(shí)現(xiàn)方法

    本文講述了在Linux主機(jī)與windows主機(jī)之間如何互傳文件的方法,因?yàn)橛袝r(shí)linux主機(jī)中的一些文件可能會(huì)在windows環(huán)境下用到,所以文章給大家介紹的非常詳細(xì),感興趣的朋友可以參考下
    2024-05-05
  • 關(guān)于進(jìn)程間通信的Linux小程序

    關(guān)于進(jìn)程間通信的Linux小程序

    這篇文章主要為大家詳細(xì)介紹了一個(gè)關(guān)于進(jìn)程間通信的Linux小程序,主要利用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通信,使用管道實(shí)現(xiàn)進(jìn)程間競(jìng)爭(zhēng)關(guān)系,感興趣的朋友可以參考一下
    2016-05-05
  • Linux配置遠(yuǎn)程SSH無(wú)密碼登錄

    Linux配置遠(yuǎn)程SSH無(wú)密碼登錄

    這篇文章主要為大家詳細(xì)介紹了Linux配置遠(yuǎn)程SSH無(wú)密碼登錄的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Linux下如何查看版本信息的方法步驟

    Linux下如何查看版本信息的方法步驟

    這篇文章主要介紹了Linux下如何查看版本信息的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Linux設(shè)置虛擬內(nèi)存的教學(xué)與實(shí)戰(zhàn)教程

    Linux設(shè)置虛擬內(nèi)存的教學(xué)與實(shí)戰(zhàn)教程

    這篇文章主要給大家介紹了關(guān)于Linux設(shè)置虛擬內(nèi)存教學(xué)與實(shí)戰(zhàn)的相關(guān)資料,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 詳解在Ubuntu下搭建FTP服務(wù)器

    詳解在Ubuntu下搭建FTP服務(wù)器

    這篇文章主要介紹了詳解在Ubuntu下搭建FTP服務(wù)器,,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • Linux下獨(dú)立添加PHP擴(kuò)展模塊mbstring的方法

    Linux下獨(dú)立添加PHP擴(kuò)展模塊mbstring的方法

    Linux下獨(dú)立添加PHP擴(kuò)展模塊mbstring的方法,需要的朋友可以參考下。
    2010-05-05
  • Linux系統(tǒng)的文件傳輸方法

    Linux系統(tǒng)的文件傳輸方法

    這篇文章主要介紹了Linux系統(tǒng)的文件傳輸方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • VSCode連接實(shí)驗(yàn)室服務(wù)器Xshell,Xftp向服務(wù)器傳輸文件的方法(win10)

    VSCode連接實(shí)驗(yàn)室服務(wù)器Xshell,Xftp向服務(wù)器傳輸文件的方法(win10)

    這篇文章主要介紹了VSCode連接實(shí)驗(yàn)室服務(wù)器,Xshell,Xftp向服務(wù)器傳輸文件(win10),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • 在centos 7中安裝配置k8s集群的步驟詳解

    在centos 7中安裝配置k8s集群的步驟詳解

    這篇文章主要給大家介紹了關(guān)于在centos 7中安裝配置k8s集群的步驟,文中通過(guò)示例代碼將步驟介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)下吧。
    2017-09-09

最新評(píng)論