理解緩存
操作系統的任務主要是合理地調配系統的各種資源,為各種程序的運行提供環境,它可以看作是硬件和應用軟件之間的一個媒介。其中對內存的管理是系統的最主要的職責,怎麼樣使有限的內存用在刀刃上,怎麼要保證系統本身所需的內存(以防止死機,在win2000和winxp裡這一點已經做的非常好了),怎樣克服各種硬件連接的瓶頸。
本文主要就這種硬件連接的瓶頸問題展開一些討論。大家知道計算機的主要硬件,硬盤,內存和處理器之間的速度是不一樣的,其中處理器的速度是非常快的,內存次之,而硬盤的速度是很慢的(相對於處理器來說),一件任務的處理要通過處理器給出的指令,把相關數據從硬盤裡調出來,到內存,在內存和處理器之間還會有許多數據的傳輸,內存本身不能處理數據,要通過處理器來處理,當他們一起工作的時候,由於處理器和內存工作得快,它們常在把事做完了沒事做了,要等硬盤,這樣就大大降低了系統的整體性能,不能發揮所有硬件的性能。為了解決這個問題,一個優秀的操作系統必然要有“緩存”來作為這些硬件之間的一個中間站,來緩和這種矛盾,從而一定程度上提高系統的性能,“緩存”處理的越好,系統的性能發揮的越好。所以研究“緩存”就有了它的意義。
看了上面的內容,以前對“緩存”沒有認識的朋友應該理解它了。理解之後馬上可以應用的地方就是在自購兼容機的時候。大家大可不必去追趕潮流,買什麼P4處理器,而應該買一個快一點的硬盤,比如買個7200轉的(或更快的),以減少瓶頸的矛盾。處理器嗎,買賽揚好了,一般是沒問題的,處理器大多數時候是閒著的,有時處理很多個大任務時可能會有些緊張,注意避免就可以了。
從某種角度講,內存本身是硬盤和處理器之間的一個緩存,它的作用是緩解硬盤和處理器之間的尖銳矛盾的。當它被作為一個固定的部件後,它本身也成了需要用緩存來緩解瓶頸的對象。它對處理器和硬盤夾在中間,是他們的必經之路,硬盤與處理器之間的關系成了硬盤與內存和內存與處理器之間的雙重關系。所以上面提到的瓶頸問題的處理歸結為對內存的優化,即怎樣處理好硬盤與內存之間的緩存很處理器與內存之間的緩存。
對於一個想了解操作系統的人來說,能夠理解“緩存”對對它做適當的優化是比不可少的一節課。另外再補充一下,緩存的概念是很廣泛的,這裡專指內存的緩存。
緩存的優化
操作系統本身已經有了很多優化措施,而我們只能在它的優化措施的基礎上根據我們的實際情況來優化。
1,最“著名”的緩存是頁面文件,這個倒不是緩解速度的,而是緩解容量的,在速度上,硬盤不如內存,但是容量上,內存是不可能跟硬盤比的,當你運行一個程序需要大量數據,占有大量內存時,內存就要被塞滿,怎麼辦呢?把那些暫時不用的放到硬盤裡去,因為處理器總是只調用處理一個任務所需的數據,其他的准備的數據(就是那些可能要用的,但暫時還不用的)可以先放一放,如果內存放不下,就只好放到硬盤了。但是這樣做是有代價的,當放到內存的數據重新要被使用時,你就得等很長時間等系統把在硬盤中得數據調上來。其實你可以感受到系統的這些動作,比如你打開IE或Office,第一次打開是很慢的,但是關閉後馬上再打開就快很多,這是因為這時數據還沒被系統“請”出內存,系統從內存中直接取得數據自然快了;另一個情況,當你開了一個photoshop這樣的大軟件,這時打開Office要比平時還慢一點,這是因為內存本來被photoshop占領著,要調入Office的數據到內存就必須把photoshop的數據“請”出內存,多了這個過程,打開自然要慢一些。
優化頁面文件,可以做一下幾條:
1)把頁面文件放到系統盤之外,這樣做主要是為了保持頁面文件的連續性,硬盤讀取數據是靠磁頭在磁性物質上“讀”得到數據的,頁面文件放在物理上的不同區域,磁頭就要跳來跳去,自然不利於效率。系統盤文件眾多,頁面文件幾乎肯定不連續。所以要把它移到其他盤。要提醒一點,當你移動好頁面文件後,要把原來的刪除掉,系統不會自動刪除。
2)如果有兩個硬盤,把頁面文件放在轉速快的那個,原因上面已講了很多遍了。
3)最大最小頁面文件的設置原則。有很多人建議將這兩個值設置成相等的,我不知道他們是那裡來的依據,其實這樣設置是不合理的。我們先要知道他們兩個值的意義。一般情況下,內存是不會真的“塞滿”,它會在內存儲量到達一定程度時自動將一部分暫時不用的數據放到硬盤,最小頁面文件是所說的“一定程度”的具體比例的決定因素,最小頁面文件大,比例就低,反之則相反;最大頁面文件是極限值,有時你開了很多程序,內存和最小頁面文件都滿了,就自動溢出到最大頁面文件。所以,將兩者設為一樣大是不合理的。最小頁面文件要小一些,這樣能夠在內存中盡可能存更多的數據,效率就高,最大頁面文件大一些,以免出現“全滿”的的情況。
4)winxp現在支持4G內存,哪怕你有5,6百M的內存,你都不需頁面文件了,這時可以把頁面文件禁掉。到注冊表編輯器HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession Manager Memory Management下,找到DisablePagingExecutive(禁用頁面文件)設其值為1。
5)在同上的注冊表編輯器位置上有個ClearPageFileAtShutdown(關機時清除頁面文件),這裡所說的“清除”頁面文件(即虛擬內存)並非是指從硬盤上完全刪除pagefile .sys這個文件,而是對其進行“清洗”和整理,從而為下次啟動Win2K更好地利用虛擬內存作好准備。這樣做還有利於安全,頁面文件上的殘留的數據是可以用特殊的工具讀到的,而這些數據你可能並不想讓人知道。這樣做的代價是關閉系統時間會加長。 將其值設為1即可。
6)學過C的朋友們應該對操作內存有個概念,一個任務完成後,要用free函數來釋放內存,但有很多軟件在設計的時候,並沒有在所有環節都這樣做,這會造成無用的數據占據內存,對這種情況可以使用一些內存優化軟件,讓這鐘軟件來完成釋放內存的動作。
2,下面介紹和優化一些不著名的緩存:
1)內存讀取硬盤數據要經過一個系統緩存(system cache),它的位置是在內存的特定區域,它是用來緩解硬盤與內存之間的速度不平衡的。它是以犧牲內存資源來換取從硬盤讀取數據時的速度的,有了這塊緩存,系統能從硬盤預讀所需的數據,減少系統等待的時間。如果你的內存很大,比如5,6百M,那麼你除了可以采取上面說的關閉頁面文件的方法外,還可以起用打的系統緩存。做法如下,進入注冊表編輯器:; HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession Manager Memory Management,找到LargeSystemCache(啟用大的系統緩存),將它的值設為1就可以了。
這樣設置了後,systemcache從4M增加到8M,再win2000和winxp中,這個值是動態的,如果內存不足,systemcache占據的空間可以自動相應調整。
2)處理器從內存讀取數據的緩存是什麼呢?是二級數據高級緩存(緩沖),同樣它也要在內存中占一個空間,所以最好是有了大內存之後再設置這個值。也需再注冊表裡設置,方法如下:進入 HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession Manager Memory Management ,找到 SecondLevelDataCache,默認為256,大內存設為512。
好了經過了上面的介紹,我想對朋友們來說最重要收獲的是加深了對緩存和操作系統的認識,至於優化的方法,我得承認一般的朋友是用不著去做的,當然“玩”一下也是很有意思的。