歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix資訊

高效敏捷Unix操作系統

在我們深入的學習Unix操作系統的過程中,請將注意力轉向有關多任務的問題。現代計算機,就像您的敏捷而高效的雇員,擁有非常高速的內存,這使得它們可以在內存中同時容納成百上千個單獨的程序。

內存中的程序通常有許多不同的名稱,包括線程、進程、守護進程、內核、庫、共享對象等等。如果您想了解這種看似雜亂的現象中的基礎規則,那麼拿起您的彎刀,劈開擋住去路的荊棘。您會發現內存中的程序都是具有共同特征的簡單二進制模式:它們擁有各自的運行上下文。為了簡單起見,在本文中將它們都稱為任務。

Unix操作系統的任務切換程序,也稱為調度程序,用來完成下列工作:

1. 將任務的上下文加載到中央處理器 (CPU) 寄存器。
2. 讓任務運行一小段時間。
3. 在加載下一個任務的上下文之前,保存該任務的上下文。

調度程序維護了大量的內部表以管理系統中每個運行任務的上下文。它還使用稱為運行隊列和睡眠隊列的一對隊列來對資源進行管理。運行隊列中的任務已經獲得它們所需的所有資源。睡眠隊列中的任務則等待獲得一個或多個資源。通常,調度程序確保系統以有序的並能作出快速響應的方式運行。

Unix操作系統所有的信息都保存在上下文中

運行任務的上下文由許多內容組成。當任務運行時,有一個稱為指令指針 (IP) 的CPU寄存器,它包含了當前正在執行的機器代碼指令的內存地址。當任務被換出時,任務切換程序必須保存這個IP寄存器的值,以便在該任務以後被再次換入時可以重新加載它。因此,當前IP值是任務上下文中的一部分。

組成任務上下文的另一個重要的值是堆棧指針 (SP)。堆棧是一個後進先出 (LIFO) 隊列,它保存了子例程的返回地址、數據項、指針等等。根據程序員的詳細設計,由操作這些數據項的指令來確定堆棧中每一項的具體含義。

IP 和 SP,加上組成運行任務上下文的所有其他重要 CPU 寄存器,這些都是任務切換程序用來切換上下文並運行不同任務的底層細節信息。任務切換程序還可以利用更高層次的細節信息。任務的優先級是這些更高層次細節信息之一。

Unix操作系統優先級

程序在創建時並不是平等的。有些對計算機本身的操作至關重要的程序必須比其他次要的程序具有更高的優先級。在Unix操作系統方案中,使用從 -20 到 +19 的一個可變數值來表示優先級,這個數值又稱為任務的nice 數值。具有最高優先級的程序,其nice 值最低,所以在Unix操作系統方案中,值-20 使得一項任務變得非常重要。與之相反,如果任務的nice 為 +19,則表示它是一個高尚的、無私的任務,允許所有其他任務比自己享有寶貴的CPU 時間的更大使用份額。

Unix操作系統提供了許多強大的工具,可以在任何時候查看計算機中正在運行的任務的細節,ps 命令可用來提供這些細節信息。啟動一個 xterm 並輸入下面的命令以查看程序的 nice:
$ ps -eo pid,state,nice,args | less -S

該命令所生成的輸出如下面:

  1. PID S  NI COMMAND  
  2. 1 S   0 init [5]  
  3. 2 S  19 [ksoftirqd/0]  
  4. 3 S -10 [events/0]  
  5. 4 S -10 [khelper]  
  6. 5 S -10 [kblockd/0]  
  7. 28 S   0 [kapmd]  
  8. 30 S   0 [pdflush]  
  9. 31 S   0 [pdflush]  
  10. 33 S -10 [aio/0]  
  11. 32 S   0 [kswapd0]  
  12. 138 S   0 [kseriod]  
  13. 176 S   0 [kjournald]  
  14. 1080 S   0 [kjournald]  
  15. 1081 S   0 [kjournald]  
  16. 1082 S   0 [kjournald]  
  17. 1564 S   0 /sbin/dhclient -1 -q -lf /var/lib/dhcp/dhclient-eth0...  
  18. 1610 S   0 syslogd -m 0  
  19. 1614 S   0 klogd -x  
  20. 1632 S   0 portmap  
  21. 1651 S   0 rpc.statd  
  22. 1729 S   0 /usr/sbin/sshd  
  23. 1744 S   0 xinetd -stayalive -reuse -pidfile /var/run/xinetd.pid  
  24. 1760 S   0 ntpd -U ntp  
  25. .  
  26. .  
  27. .  
  28. 2364 S   0 konsole  
  29. 2373 S   0 /bin/bash  
  30. 2563 R   0 ps -eo pid,state,nice,args 

在我的工作站上,共生成了84 行輸出。這表示當時ps 任務正在運行,它僅僅是那些爭用 CPU 上的運行時間的84 個不同任務的其中之一。現在來研究一下該命令中的部分內容,以便更好地理解Unix操作系統輸出的含義。-eo pid、state 和 nice args 開關告訴 ps 任務列出系統中每項運行任務的下列信息:

* 進程 ID (pid)
* 任務處於運行還是睡眠狀態 (state)
* Nice 數值 (nice)
* 調用任務時的參數 (args)
帶 -S 開關的 less 命令通過將列表中的每行限制為 xterm 的寬度,從而創建了一個整潔、漂亮的列表。

其中大部分任務的 nice 值為“0”,這使得它們處於優先級范圍的正中間。有少數運行任務的 nice 數值為 -10 或 19,這使得它們分別具有高的或低的優先級。同時,大多數任務處於睡眠狀態,這表明它們正等待著獲得某種資源。事實上,在我生成該列表時,只有 ps 命令在運行。大多數任務都是用來快速地完成它們所需執行的操作,然後退出或睡眠。

nice 和renice

nice 命令根據給定的nice 數值來執行其參數中指定的命令。而renice 命令則用來更改任務的nice 數值。Unix操作系統 計算機主要分為兩大類:工作站和服務器。需要對它們所運行的進程加以關注,以確保有限的資源不會被重復執行且對預定目標並不重要的任務浪費。

工作站

因為工作站可以用來完成各種各樣的任務,所以對於每個工作站的優化,沒有固定的規則。有些工作站用來進行編程、藝術圖形設計、繁重的數值計算和數據挖掘。在所有情況下,如果您能夠在完成所需活動的同時查看正在運行的進程,並對工作站進行相應的優化,那麼這將是很有幫助的。

例如,在程序員的工作站上,編譯和連接某些程序可能花費數小時。如果程序員想不惜一切代價地加速其執行過程,那麼可以使用超級用戶登錄,並按照如下命令啟動編譯任務:
$ su
Password:
# nice -n -15 make

參數 -n -15 將make 任務的nice 數值降低了15,這就大大提高了它的優先級,以至於您在屏幕上移動鼠標時能夠確切地感受到這一點。在大多數系統中,只有超級用戶帳戶才能夠對任務進行這種優先級的更改。盡管如此,對於運行長進程的工作站來說,這是值得的。

另一種進行工作站性能優化的重要方法是標識出您並不使用但卻有可能在工作站上運行的特性和功能。例如,Unix操作系統或者許多Linux系統都有一個稱為 /etc/cron.daily/slocate.cron 的文件,它每天都會運行磁盤密集型的 dbupdate 程序。這個程序允許您使用locate 命令來代替find命令,以執行查找文件的工作。如果您從來都不使用locate 命令,那麼您可以對 /etc/cron.daily/slocate.cron 文件進行編輯,以使dbupdate程序不以超級用戶的身份運行,啟動您最喜歡的編輯器,並且注釋其中的指令,如下所示。

/etc/cron.daily/slocate.cron 文件內容

  1. $ su  
  2. Password:  
  3. # cd /etc/cron.daily  
  4. # vi slocate.cron 

每行開始處的英鎊標記阻止了該命令的運行。

文件結果:

  1. #!/bin/sh  
  2. # renice +19 -p $$ >/dev/null 2>&1  
  3. # /usr/bin/updatedb -f "nfs,proc,devpts" -e "/tmp,/var/tmp,/usr/tmp,/afs,/net" 

請記住,這也是關於個人首選參數設置的問題。如果您的計算機屬於雇主,那麼我並不建議在沒有管理許可的情況下進行這樣的更改。畢竟,當您不在的時候,系統管理員可能打算使用locate 命令。

Unix操作系統服務器

與工作站不同,服務器通常具有明確定義的用途,因此更容易進行優化。Web 服務器的主要職責是接收和響應來自於Internet上的浏覽器請求。與之類似,文件服務器則必須迅速而准確地分發所請求的文件。在這兩種情況下,服務器不應該執行通常分配給工作站的那些任務。

如果Unix操作系統服務器專門用於某個主要功能,如 Web 服務器,那麼請對配置文件進行編輯以去掉任何其他的服務。通常,Web 服務器會運行 ftp、nfs、dhcp、dns 和其他非必需的守護進程。計算機所需共享的資源越少,那麼它對其主要任務的響應能力越高。作為回報,安全性也更高,因為可供攻擊的漏洞更少。

如果您對工作站和服務器上所運行的進程進行仔細地優化,包括設置適當的任務優先級以及移除浪費資源的任務,那麼您的Unix操作系統將繼續作為您稱職的和忠實的雇員。

Copyright © Linux教程網 All Rights Reserved