當前位置:首頁 » 操作系統 » linux進程時間

linux進程時間

發布時間: 2023-01-05 22:50:46

① 如何查看系統運行時間 linux

可以在終端執行top命令,如下圖即顯示linux的運行時間
(紅圈裡的位置,我的電腦運行了7小時57分).

② Linux - 進程調度

進程調度演算法也稱 CPU 調度演算法,畢竟進程是由 CPU 調度的。

當 CPU 空閑時,操作系統就選擇內存中的某個「就緒狀態」的進程,並給其分配 CPU。

什麼時候會發生 CPU 調度呢?通常有以下情況:

其中發生在 1 和 4 兩種情況下的調度稱為「非搶占式調度」,2 和 3 兩種情況下發生的調度稱為「搶占式調度」。

非搶占式的意思就是,當進程正在運行時,它就會一直運行,直到該進程完成或發生某個事件而被阻塞時,才會把 CPU 讓給其他進程。

而搶占式調度,顧名思義就是進程正在運行的時候,可以被打斷,使其把 CPU 讓給其他進程。那搶占的原則一般有三種,分別是時間片原則、優先權原則、短作業優先原則。

你可能會好奇為什麼第 3 種情況也會發生 CPU 調度呢?假設有一個進程是處於等待狀態的,但是它的優先順序比較高,如果該進程等待的事件發生了,它就會轉到就緒狀態,一旦它轉到就緒狀態,如果我們的調度演算法是以優先順序來進行調度的,那麼它就會立馬搶占正在運行的進程,所以這個時候就會發生 CPU 調度。

那第 2 種狀態通常是時間片到的情況,因為時間片到了就會發生中斷,於是就會搶占正在運行的進程,從而佔用 CPU。

調度演算法影響的是等待時間(進程在就緒隊列中等待調度的時間總和),而不能影響進程真在使用 CPU 的時間和 I/O 時間。

最簡單的一個調度演算法,就是非搶占式的先來先服務(First Come First Severd, FCFS)演算法了。

顧名思義,先來後到,每次從就緒隊列選擇最先進入隊列的進程,然後一直運行,直到進程退出或被阻塞,才會繼續從隊列中選擇第一個進程接著運行。

這似乎很公平,但是當一個長作業先運行了,那麼後面的短作業等待的時間就會很長,不利於短作業。

FCFS 對長作業有利,適用於 CPU 繁忙型作業的系統,而不適用於 I/O 繁忙型作業的系統。

最短作業優先(Shortest Job First, SJF)調度演算法同樣也是顧名思義,它會優先選擇運行時間最短的進程來運行,這有助於提高系統的吞吐量。

這顯然對長作業不利,很容易造成一種極端現象。

比如,一個長作業在就緒隊列等待運行,而這個就緒隊列有非常多的短作業,那麼就會使得長作業不斷的往後推,周轉時間變長,致使長作業長期不會被運行。

前面的「先來先服務調度演算法」和「最短作業優先調度演算法」都沒有很好的權衡短作業和長作業。

那麼,高響應比優先 (Highest Response Ratio Next, HRRN)調度演算法主要是權衡了短作業和長作業。

每次進行進程調度時,先計算「響應比優先順序」,然後把「響應比優先順序」最高的進程投入運行,「響應比優先順序」的計算公式:

從上面的公式,可以發現:

最古老、最簡單、最公平且使用最廣的演算法就是時間片輪轉(Round Robin, RR)調度演算法。

每個進程被分配一個時間段,稱為時間片(Quantum),即允許該進程在該時間段中運行。

另外,時間片的長度就是一個很關鍵的點:

通常時間片設為 20ms~50ms 通常是一個比較合理的折中值。

前面的「時間片輪轉演算法」做了個假設,即讓所有的進程同等重要,也不偏袒誰,大家的運行時間都一樣。

但是,對於多用戶計算機系統就有不同的看法了,它們希望調度是有優先順序的,即希望調度程序能從就緒隊列中選擇最高優先順序的進程進行運行,這稱為最高優先順序(Highest Priority First,HPF)調度演算法。

進程的優先順序可以分為,靜態優先順序或動態優先順序:

該演算法也有兩種處理優先順序高的方法,非搶占式和搶占式:

但是依然有缺點,可能會導致低優先順序的進程永遠不會運行。

多級反饋隊列(Multilevel Feedback Queue)調度演算法是「時間片輪轉演算法」和「最高優先順序演算法」的綜合和發展。

顧名思義:

工作原理:

設置了多個隊列,賦予每個隊列不同的優先順序,每個隊列優先順序從高到低,同時優先順序越高時間片越短;

新的進程會被放入到第一級隊列的末尾,按先來先服務的原則排隊等待被調度,如果在第一級隊列規定的時間片沒運行完成,則將其轉入到第二級隊列的末尾,以此類推,直至完成;

當較高優先順序的隊列為空,才調度較低優先順序的隊列中的進程運行。如果進程運行時,有新進程進入較高優先順序的隊列,則停止當前運行的進程並將其移入到原隊列末尾,接著讓較高優先順序的進程運行;

可以發現,對於短作業可能可以在第一級隊列很快被處理完。對於長作業,如果在第一級隊列處理不完,可以移入下次隊列等待被執行,雖然等待的時間變長了,但是運行時間也會更長了,所以該演算法很好的兼顧了長短作業,同時有較好的響應時間。

整體架構如下,即調度策略是模塊化設計的,調度器根據不同的進程依次遍歷不同的調度策略,找到進程對應的調度策略,調度的結果即為選出一個可運行的進程指針,並將其加入到進程可運行隊列中。

以一棵紅黑樹管理所有需要調度的進程,
紅黑樹,左邊節點小於右邊節點的值,運行到目前為止vruntime最小的進程,同時考慮了CPU/IO和nice,總是找vruntime最小的線程調度。
vruntime = pruntime/weight × 1024;
vruntime是虛擬運行時間,pruntime是物理運行時間,weight權重由nice值決定(nice越低權重越高),則運行時間少、nice值低的的線程vruntime小,將得到優先調度。這是一個隨運行而動態變化的過程。

③ LINUX下怎麼看一個進程一共運行了多少時間

終端使用 time命令,比如 time ls,可以顯示ls命令執行的時間。
或者使用top 命令,裡面有進程對應的運行時間。

④ linux下的一個進程在一天內的運行時間

用一個shell腳本在後台監控。假設軟體模塊的進程名為 proc1

#!/bin/sh
isStart=0
while true
do
ps -aux | grep proc1 >/dev/null 2>&1
if [ $? -ne 0 ]; then
isStart=1
hour=`date +%H`
min=`date +%M`
sec=`date +%S`
else
if [ $isStart -eq 1 ]; then
isStart=0
hourEnd=`date +%H`
minEnd=`date +%M`
secEnd=`date +%S`
fi
fi
sleep 1
done

⑤ Linux 進程管理之進程調度與切換

我們知道,進程運行需要各種各樣的系統資源,如內存、文件、列印機和最

寶貴的 CPU 等,所以說,調度的實質就是資源的分配。系統通過不同的調度演算法(Scheling Algorithm)來實現這種資源的分配。通常來說,選擇什麼樣的調度演算法取決於資源分配的策略(Scheling Policy)。

有關調度相關的結構保存在 task_struct 中,如下:

active_mm 是為內核線程而引入的,因為內核線程沒有自己的地址空間,為了讓內核線程與普通進程具有統一的上下文切換方式,當內核線程進行上下文切換時,讓切換進來的線程的 active_mm 指向剛被調度出去的進程的 active_mm(如果進程的mm 域不為空,則其 active_mm 域與 mm 域相同)。

在 linux 2.6 中 sched_class 表示該進程所屬的調度器類有3種:

進程的調度策略有5種,用戶可以調用調度器里不同的調度策略:

在每個 CPU 中都有一個自身的運行隊列 rq,每個活動進程只出現在一個運行隊列中,在多個 CPU 上同時運行一個進程是不可能的。

運行隊列是使用如下結構實現的:

tast 作為調度實體加入到 CPU 中的調度隊列中。

系統中所有的運行隊列都在 runqueues 數組中,該數組的每個元素分別對應於系統中的一個 CPU。在單處理器系統中,由於只需要一個就緒隊列,因此數組只有一個元素。

內核也定義了一下便利的宏,其含義很明顯。

Linux、c/c++伺服器開發篇-------我們來聊聊進程的那些事

Linux內核 進程間通信組件的實現

學習地址:C/C++Linux伺服器開發/後台架構師【零聲教育】-學習視頻教程-騰訊課堂

需要C/C++ Linux伺服器架構師學習資料加qun812855908獲取(資料包括 C/C++,Linux,golang技術,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協程,DPDK,ffmpeg 等),免費分享

在分析調度流程之前,我們先來看在什麼情況下要執行調度程序,我們把這種情況叫做調度時機。

Linux 調度時機主要有。

時機1,進程要調用 sleep() 或 exit() 等函數進行狀態轉換,這些函數會主動調用調度程序進行進程調度。

時機2,由於進程的時間片是由時鍾中斷來更新的,因此,這種情況和時機4 是一樣的。

時機3,當設備驅動程序執行長而重復的任務時,直接調用調度程序。在每次反復循環中,驅動程序都檢查 need_resched 的值,如果必要,則調用調度程序 schele() 主動放棄 CPU。

時機4 , 如前所述, 不管是從中斷、異常還是系統調用返回, 最終都調用 ret_from_sys_call(),由這個函數進行調度標志的檢測,如果必要,則調用調用調度程序。那麼,為什麼從系統調用返回時要調用調度程序呢?這當然是從效率考慮。從系統調用返回意味著要離開內核態而返回到用戶態,而狀態的轉換要花費一定的時間,因此,在返回到用戶態前,系統把在內核態該處理的事全部做完。

Linux 的調度程序是一個叫 Schele() 的函數,這個函數來決定是否要進行進程的切換,如果要切換的話,切換到哪個進程等。

從代碼分析來看,Schele 主要完成了2個功能:

進程上下文切換包括進程的地址空間的切換和執行環境的切換。

對於 switch_mm 處理,關鍵的一步就是它將新進程頁面目錄的起始物理地址裝入到寄存器 CR3 中。CR3 寄存器總是指向當前進程的頁面目錄。

switch_to 把寄存器中的值比如esp等存放到進程thread結構中,保存現場一邊後續恢復,同時調用 __switch_to 完成了堆棧的切換。

在進程的 task_struct 結構中有個重要的成分 thread,它本身是一個數據結構 thread_struct, 裡面記錄著進程在切換時的(系統空間)堆棧指針,取指令地址(也就是「返回地址」)等關鍵性的信息。

關於__switch_to 的工作就是處理 TSS (任務狀態段)。

TSS 全稱task state segment,是指在操作系統進程管理的過程中,任務(進程)切換時的任務現場信息。

linux 為每一個 CPU 提供一個 TSS 段,並且在 TR 寄存器中保存該段。

linux 中之所以為每一個 CPU 提供一個 TSS 段,而不是為每個進程提供一個TSS 段,主要原因是 TR 寄存器永遠指向它,在任務切換的適合不必切換 TR 寄存器,從而減小開銷。

在從用戶態切換到內核態時,可以通過獲取 TSS 段中的 esp0 來獲取當前進程的內核棧 棧頂指針,從而可以保存用戶態的 cs,esp,eip 等上下文。

TSS 在任務切換過程中起著重要作用,通過它實現任務的掛起和恢復。所謂任務切換是指,掛起當前正在執行的任務,恢復或啟動另一任務的執行。

在任務切換過程中,首先,處理器中各寄存器的當前值被自動保存到 TR(任務寄存器)所指定的任務的 TSS 中;然後,下一任務的 TSS 被裝入 TR;最後,從 TR 所指定的 TSS 中取出各寄存器的值送到處理器的各寄存器中。由此可見,通過在 TSS 中保存任務現場各寄存器狀態的完整映象,實現任務的切換。

因此,__switch_to 核心內容就是將 TSS 中的內核空間(0級)堆棧指針換成 next->esp0。這是因為 CPU 在穿越中斷門或者陷阱門時要根據新的運行級別從TSS中取得進程在系統空間的堆棧指針。

thread_struct.esp0 指向進程的系統空間堆棧的頂端。當一個進程被調度運行時,內核會將這個變數寫入 TSS 的 esp0 欄位,表示這個進程進入0級運行時其堆棧的位置。換句話說,進程的 thread_struct 結構中的 esp0 保存著其系統空間堆棧指針。當進程穿過中斷門、陷阱門或者調用門進入系統空間時,處理器會從這里恢復期系統空間棧。

由於棧中變數的訪問依賴的是段、頁、和 esp、ebp 等這些寄存器,所以當段、頁、寄存器切換完以後,棧中的變數就可以被訪問了。

因此 switch_to 完成了進程堆棧的切換,由於被切進的進程各個寄存器的信息已完成切換,因此 next 進程得以執行指令運行。

由於 A 進程在調用 switch_to 完成了與 B 進程堆棧的切換,也即是寄存器中的值都是 B 的,所以 A 進程在 switch_to 執行完後,A停止運行,B開始運行,當過一段時間又把 A 進程切進去後,A 開始從switch_to 後面的代碼開始執行。

schele 的調用流程如下:





⑥ Linux 下怎樣查看進程運行時間

查看Linux 進程命令 ps -aux 或者ps -ef linux 進程很多 如果需要查找某一個進程可以使用 管道和grep命令Linux下常用命令 grep 匹配字元 ps 查詢Linux進程

⑦ Linux下如何查看進程准確啟動時間

使用
ps命令
,命令執行參數及運行結果如下:
#ps
-A
-opid,stime,etime,args
結果:
root:src#
ps
-A
-opid,stime,etime,args
PID
STIME
ELAPSED
COMMAND
1
09:21
08:56:14
init
[3]
2
09:21
08:56:14
[migration/0]
3
09:21
08:56:14
[ksoftirqd/0]
4
09:21
08:56:14
[watchdog/0]
5
09:21
08:56:14
[events/0]
6
09:21
08:56:14
[khelper]
7
09:21
08:56:14
[kthread]
10
09:21
08:56:14
[kblockd/0]
11
09:21
08:56:14
[kacpid]
47
09:21
08:56:14
[cqueue/0]
說明:PID指的是進程ID號,STIME即啟動時間,ELAPSED
即運行時間。

⑧ Linux:怎麼查看一個進程的詳細的啟動時間

linux系統下查看進程打開文件在/proc下,對應每個進程有一個以進程號命名的目錄,該目錄下有一個fd目錄,該目錄下面的每個文件是一個符號連接,其文件名對應該進程佔用的一個文件描述符,而連接指向的內容表示文件描述符對應的實際文件,有多少個文件描述符表示該進程打開了多少文件。另外Linux默認的進程打開文件上限是1024個,可以通過ulimit -n查看。很多系統上限可以通過修改/etc/security/limits.conf文件改變,這個文件有詳細的注釋,對如何修改做了說明。如果希望把所有用戶的進程打開文件上限改為65536,可以加入下面兩行* soft nofile 65535* hard nofile 65535還可以只真對某個用戶或某個組做修改,具體方法參見文件注釋。修改後需要重新啟動系統才能生效。學習linux基本命令,推薦《linux就該這么學》!

⑨ Linux 進程調度

Linux的調度策略區分實時進程和普通進程,實時進程的調度策略是SCHED_FIFO和SCHED_RR,普通的,非實時進程的調度策略是SCHED_NORMAL(SCHED_OTHER)。

實時調度策略被實時調度器管理,普通調度策略被完全公平調度器來管理。實時進程的優先順序要高於普通進程(nice越小優先順序越高)。

SCHED_FIFO實現了一種簡單的先入先出的調度演算法,它不使用時間片,但支持搶占,只有優先順序更高的SCHED_FIFO或者SCHED_RR進程才能搶占它,否則它會一直執行下去,低優先順序的進程不能搶占它,直到它受阻塞或自己主動釋放處理器。

SCHED_RR是帶有時間片的一種實時輪流調度演算法,當SCHED_RR進程耗盡它的時間片時,同一優先順序的其它實時進程被輪流調度,時間片只用來重新調用同一優先順序的進程,低優先順序的進程決不能搶佔SCHED_RR任務,即使它的時間片耗盡。SCHED_RR是帶時間片的SCHED_FIFO。

Linux的實時調度演算法提供了一種軟實時工作方式,軟實時的含義是盡力調度進程,盡力使進程在它的限定時間到來前運行,但內核不保證總能滿足這些進程的要求,相反,硬實時系統保證在一定的條件下,可以滿足任何調度的要求。

SCHED_NORMAL使用完全公平調度演算法(CFS),之前的演算法直接將nice值對應時間片的長度,而在CFS中,nice值只作為進程獲取處理器運行比的權重,每個進程都有一個權重,nice優先順序越高,權重越大,表示應該運行更長的時間。Linux的實現中,每個進程都有一個vruntime欄位,vruntime是經過量化的進程運行時間,也就是實際運行時間除以權重,所以每個量化後的vruntime應該相等,這就體現了公平性。

CFS當然也支持搶占,但與實時調度演算法不同,實時調度演算法是根據優先順序進行搶占,CFS是根據vruntime進行搶占,vruntime小就擁有優先被運行的權利。

為了計算時間片,CFS演算法需要為完美多任務中的無限小調度周期設定近似值,這個近似值也稱作目標延遲,指每個可運行進程在目標延遲內都會調度一次,如果進程數量太多,則時間粒度太小,所以約定時間片的默認最小粒度是1ms。

進程可以分為I/O消耗型和處理器消耗型,這兩種進程的調度策略應該不同,I/O消耗型應該更加實時,給對端的感覺是響應很快,同時它一般又不會消耗太多的處理器,因而I/O消耗型需要調度頻繁。相對來說,處理器消耗型不需要特別實時,應該盡量降低它的調度頻度,延長其運行時間。

參考: linux內核分析——CFS(完全公平調度演算法) - 一路向北你好 - 博客園

熱點內容
資料庫課程設計案例 發布:2025-05-11 08:15:33 瀏覽:50
為什麼安卓不能通過藍牙傳東西 發布:2025-05-11 08:15:27 瀏覽:716
tomcat下載linux 發布:2025-05-11 07:47:06 瀏覽:791
phpcookie設置時間 發布:2025-05-11 07:36:15 瀏覽:110
固態硬碟需要緩存嗎 發布:2025-05-11 07:29:09 瀏覽:605
松江換門密碼鎖哪裡有 發布:2025-05-11 07:23:21 瀏覽:326
自動配置代理什麼意思 發布:2025-05-11 07:16:51 瀏覽:993
notepad編寫php 發布:2025-05-11 07:10:50 瀏覽:865
茄子快傳的文件夾 發布:2025-05-11 07:04:30 瀏覽:734
手機指紋密碼如何更換 發布:2025-05-11 07:02:22 瀏覽:123