wordpress怎么掙錢常見的系統(tǒng)優(yōu)化軟件
目錄
一、進程優(yōu)先級
二、Linux調(diào)度與切換
1.背景
2.進程切換
一、進程優(yōu)先級
? ? ? ? 背景:在計算機中,軟硬件資源是有限的,而進程想要訪問某一種資源,就得通過排隊來保證訪問資源的過程是有條不紊的。
? ? ? ? Linux下對優(yōu)先級的定義。執(zhí)行命令ps -la得到以下打印結(jié)果。
[euto@VM-4-13-centos 24921]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 29067 28781 0 80 0 - 1054 hrtime pts/1 00:00:00 myprocess
1 S 1001 29068 29067 0 80 0 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 29078 28979 0 80 0 - 38332 - pts/2 00:00:00 ps
- UID:代表執(zhí)行者的身份
- PRI:priority的縮寫,代表這個進程的優(yōu)先級,Linux下優(yōu)先級就是一個整型變量,默認值為80,取值范圍為
,值越小,優(yōu)先級越高。
- NI:nice的縮寫,用來代表相對默認值的增量。
? ? ? ? Linux下進程的優(yōu)先級可以人為手動修改,但是需要我們手動修改優(yōu)先級的場景幾乎沒有。
? ? ? ? 下面演示如何修改優(yōu)先級,首先可執(zhí)行程序myprocess已經(jīng)被運行了起來,執(zhí)行ps -la查看。
[euto@VM-4-13-centos 24921]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 2310 28781 0 80 0 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 2330 28979 0 80 0 - 38332 - pts/2 00:00:00 ps
? ? ? ? 執(zhí)行top命令進入任務管理器。
? ? ? ? 進入任務管理器后,輸入r。
? ? ? ? 得到一行提示,大致意思是“輸入要重新設置nice值的PID”。
PID to renice [default pid = 5375]
? ? ? ? 當前要修改優(yōu)先級的程序myprocess的PID為2310,于是輸入2310。
? ? ? ? 彈出一行提示,大致意思是“輸入新的nice值”,我們暫時輸入10。
Renice PID 2310 to value
? ? ? ? 退出任務管理器后,再執(zhí)行ps -la命令查看。
[euto@VM-4-13-centos 24921]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 2310 28781 0 90 10 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 7772 28979 0 80 0 - 38332 - pts/2 00:00:00 ps
? ? ? ? 我們發(fā)現(xiàn)myprocess的PRI值由80變成了90,而NI值由0變成了10。
????????因此,可以總結(jié)出來,Linux下修改優(yōu)先級不能直接修改,而是通過加減某一個量來修正。
????????NI值是用來表示當前PRI值相對默認PRI值的增量,由于PRI的范圍是,默認PRI值是80,故NI值的取值范圍是
。
? ? ? ? PRI = 默認PRI(80)+ NI。
- NI可以取范圍外的值嗎,如果可以,PRI會被修改為多少?
? ? ? ? 在top中修改NI值的時候,輸入100。
? ? ? ? 執(zhí)行ps -la查看結(jié)果。
[euto@VM-4-13-centos 24921]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 2310 28781 0 99 19 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 13253 28979 0 80 0 - 38332 - pts/2 00:00:00 ps
? ? ? ? 可以總結(jié)出來,修改的NI值會被操作系統(tǒng)做檢測,如果超出范圍則修正到范圍之內(nèi)。
? ? ? ? 在上面結(jié)果的基礎(chǔ)上,將NI值設置為-20,預期結(jié)果應該是99-20=79。
? ? ? ? ?執(zhí)行結(jié)果如下。
[euto@VM-4-13-centos ~]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1001 16994 16006 0 60 -20 - 1054 hrtime pts/1 00:00:00 myprocess
0 R 1001 18523 16091 0 80 0 - 38332 - pts/2 00:00:00 ps
? ? ? ? 這里我中斷進程后,重新啟動了程序,所以PID發(fā)生了變化,但是前提條件是一樣的,不難看出來,NI值變成了-20,說明NI值是覆蓋原來的值,但是PRI并不是我們預期的79,而是60。原因是每次調(diào)整優(yōu)先級的NI值,都是在默認的PRI值80上做加減。
- 為什么要讓優(yōu)先級的修改受限?
? ? ? ? 操作系統(tǒng)中,存在很多必要的常規(guī)進程,如果進程的優(yōu)先級可以無限大,必然會造成多數(shù)用戶進程的優(yōu)先級比常規(guī)進程的優(yōu)先級高,導致常規(guī)進程獲取資源的優(yōu)先度下降,造成系統(tǒng)卡頓。
? ? ? ? 而把一個進程獲取資源優(yōu)先度不高的情況稱為進程饑餓。?
二、Linux調(diào)度與切換
1.背景
- CPU在執(zhí)行一個進程的時候,是直接一次性把代碼跑完嗎?
? ? ? ? 不是,現(xiàn)代操作系統(tǒng)設計的CPU執(zhí)行代碼,都是基于時間片輪轉(zhuǎn)執(zhí)行的。假設時間片大小是1ms,那么一個進程在CPU上執(zhí)行1ms后,CPU會馬上開始執(zhí)行另外一個進程。
- 競爭性:系統(tǒng)進程數(shù)目眾多,而CPU資源少量,甚至只有一個,所以進程之間是具有競爭性的,為了高效完成任務,合理競爭相關(guān)資源,便有了優(yōu)先級。而為了保證優(yōu)先級,便設計了調(diào)度器基于時間片輪轉(zhuǎn)執(zhí)行每一個進程。
- 獨立性:進程之間具備獨立性,多個進程運行期間互不影響,這種不影響指的是一個進程不影響另一個進程的執(zhí)行。
- 并行:多個進程在多個CPU下,同時運行,稱為并行。
- 并發(fā):多個進程在一個CPU下,通過高頻進程切換的方式,讓多個進程都得以推進運行,稱為并發(fā)。
? ? ? ? 如今多數(shù)人的個人電腦都只有一個CPU,因此多個進程之間是并發(fā)運行,如果把時間精確到CPU的一個時間單元上,那么CPU在這個時間單元上執(zhí)行的指令是確定的只有一條,而用戶感知到的是我們的電腦可以打游戲的同時聽音樂,原因就在于我們的CPU非???/span>!!!(多核其實就是CPU內(nèi)部有一個控制器,多個運算器)
2.進程切換
? ? ? ? CPU有一個運行隊列,CPU要輪轉(zhuǎn)切換多個進程。
- CPU內(nèi)部有大量寄存器,這些寄存器的種類不一。
- 進程A正在CPU上被執(zhí)行時,該時間片內(nèi),寄存器上會產(chǎn)生許多臨時數(shù)據(jù),這些臨時數(shù)據(jù)是和當前的進程A相關(guān)的,這些大量臨時數(shù)據(jù)稱為進程的硬件上下文。
- 時間片結(jié)束,CPU要執(zhí)行下一個進程B,在此之前,要把寄存器的數(shù)據(jù)拷貝到進程A的PCB內(nèi)部(也有部分數(shù)據(jù)拷貝到了其他地方),這個過程稱為保護上下文。
- CPU開始執(zhí)行進程B,那么就有兩種情況,如果進程B是首次被調(diào)度,那么進程B直接開始執(zhí)行,在執(zhí)行期間所產(chǎn)生大量臨時數(shù)據(jù)直接覆蓋寄存器原來的數(shù)據(jù)。如果進程B是非首次被調(diào)度,那么進程B會先把PCB保存的數(shù)據(jù)恢復到寄存器中,然后開始執(zhí)行。這個過程稱為恢復上下文。
? ? ? ? CPU的寄存器只有一套,但是寄存器要處理的數(shù)據(jù)有多套,這些大量臨時數(shù)據(jù)不屬于寄存器,而是屬于進程!!!