硬盤比內存速度快嗎,一、Linux的存儲——內存、虛擬內存、硬盤等

 2023-10-27 阅读 25 评论 0

摘要:一、Linux的存儲——內存、虛擬內存、硬盤 Linux 內存機制以及CPU、內存、硬盤的關系、物理內存以及虛擬內存的關系_low5252的博客-CSDN博客_linux 磁盤和內存 Linux 內存與磁盤_萬水千山走過的博客-CSDN博客_linux內存和硬盤區別 CPU CPU即中央處理器,是英語“Central

一、Linux的存儲——內存、虛擬內存、硬盤

Linux 內存機制以及CPU、內存、硬盤的關系、物理內存以及虛擬內存的關系_low5252的博客-CSDN博客_linux 磁盤和內存

Linux 內存與磁盤_萬水千山走過的博客-CSDN博客_linux內存和硬盤區別

CPU

CPU即中央處理器,是英語“Central Processing Unit”的縮寫。CPU從內存或
緩存中取出指令,放入指令寄存器,并對指令譯碼分解成一系列的微操作,然后發出各種控制命令,執行微操作系列,從而完成一條指令的執行。

存儲器

  • 內部存儲器:內存——存儲速度快,斷電后內容丟失
  • 外部存儲器:主要是磁盤——存儲速度相對較慢,斷電后信息不會丟失

內存與磁盤區別:

1、內存是一種高速,造價昂貴的存儲設備;而磁盤速度較慢、造價低廉。

2、內存屬于內部存儲設備,磁盤屬于外部存儲設備。

硬盤比內存速度快嗎?3、內存是通過電流來實現存儲;磁盤是通過磁記錄來實現存儲。所以電腦斷電后,內存中的數據會丟失,而磁盤中的數據可以長久保留。

?

內存(物理內存MEM)

CPU并不能直接調用存儲在硬盤上的系統、程序和數據,必須首先將硬盤的有關內容存儲在內存中,這樣才能被CPU讀取運行。內存是程序與CPU進行溝通的橋梁。計算機中所有程序的 運行都是在內存中進行的。其作用是存放CPU中的運算數據,以及與硬盤等外部存儲設備交換的數據。只要計算機 在運行中CPU就會把需要運算的數據調到內存中進行運 算,當運算完成后CPU再將結果傳送出來,內存的運行也決定了計算機的穩定運行。

因而,內存(即物理內存,是相對于硬盤這個“外存”而言)作為硬盤和CPU的“中轉站”,對電腦運行速度有較大影響。

磁盤

磁盤(disk)是指利用磁記錄技術存儲數據的[存儲器]存儲器。

磁盤是計算機主要的存儲介質,可以存儲大量的二進制數據,并且斷電后也能保持數據不丟失。磁盤是一個塊設備,可以劃分為不同的分區;在分區之上再創建文件系統,掛載到某個目錄,之后才可以在這個目錄中讀寫文件。

ssd設置虛擬內存。磁盤(外部存儲器)又分為幾類:

  • 一類是硬盤:容量比較大,在機箱里面負責儲存數據,存取速度較軟盤更快。硬盤有:
    • 固態硬盤(SSD 盤,新式硬盤)
    • 機械硬盤(HDD 傳統硬盤)
    • 混合硬盤(HHD 一塊基于傳統機械硬盤誕生出來的新硬盤)
  • 一類是軟盤:軟盤的容量小,用來搬運數據,一般放在機箱外面
  • 一類是光盤:
  • 一類是U盤:

? 計算機上有個特殊的地方叫做軟盤驅動器,要用軟盤的時候就把它放進這個地方,不用的時候可以很方便地拿出來帶走。打個比方說,計算機像一個工廠,硬盤就是倉庫,可以放很多東西,但是倉庫是不能隨便搬走的;軟盤呢,就是卡車,裝的東西雖然不多,但是搬運起來很方便。

**存取速度:**內存 > 硬盤 > 軟盤

虛擬內存(SWAP)

? 當運行數據超出物理內存容納限度的時候,部分數據就會自行“溢出”,這時系統就會將硬盤上的部分空間模擬成內存——虛擬內存,并將暫時不運行的程序或不使用的數據存放到這部分空間之中,等待需要的時候方便及時調用。

? 虛擬內存是指使用磁盤當作RAM的擴展,這樣可用的內存的大小就相應地增大了。內核會將暫時不用的內存塊的內容寫到硬盤上(虛擬內存中),這樣一來,這塊內存就可用于其它目的。當需要用到原始的內容時,它們被重新讀入內存。這些操作對用戶來說是完全透明的;Linux下運行的程序只是看到有大量的內存可供使用而并沒有注意到時不時它們的一部分是駐留在硬盤上的。當然,讀寫硬盤要比直接使用真實內存慢得多(要慢數千倍),所以程序就不會象一直在內存中運行的那樣快。用作虛擬內存的硬盤部分被稱為交換空間(Swap Space)

內存和虛擬內存

? 內存在計算機中的作用很大,電腦中所有運行的程序都需要經過內存來執行,如果執行的程序很大或很多,就會導致內存消耗更大。為了解決這個問題,可以使用虛擬內存技術,即拿出一部分硬盤空間來充當內存使用,當內存占用完時,電腦就會自動調用硬盤來充當內存,以緩解內存的緊張。比如說當電腦要讀取一個比物理內存還要大的文件時,就要用到虛擬內存,文件被內存讀取之后就會先儲存到虛擬內存,等待內存把文件全部儲存到虛擬內存之后,就把虛擬內里儲存的文件釋放到原來的目錄里了。

linux內存機制

物理內存和虛擬內存,? Linux支持虛擬內存(Virtual Mmemory),虛擬內存是指使用磁盤當作RAM的擴展,這樣可用的內存的大小就相應地增大了。內核會將暫時不用的內存塊的內容寫到硬盤上(虛擬內存中),這樣一來,這塊內存就可用于其它目的。當需要用到原始的內容時,它們被重新讀入內存。這些操作對用戶來說是完全透明的;Linux下運行的程序只是看到有大量的內存可供使用而并沒有注意到時不時它們的一部分是駐留在硬盤上的。當然,讀寫硬盤要比直接使用真實內存慢得多(要慢數千倍),所以程序就不會象一直在內存中運行的那樣快。用作虛擬內存的硬盤部分被稱為交換空間(Swap Space)

? 一般,在交換空間中的頁面首先被換入內存;如果此時沒有足夠的物理內存來容納它們又將被交換出來(到其他的交換空間中)。如果沒有足夠的虛擬內存來容納所有這些頁面,Linux就會波動而不正常;但經過一段較長的時間Linux會恢復,但此時系統已不可用了。

? 有時,盡管有許多的空閑內存,仍然會有許多的交換空間正被使用。這種情況是有可能發生的,例如如果在某一時刻有進行交換的必要,但后來一個占用很多物理內存的大進程結束并釋放內存時。被交換出的數據并不會自動地交換進內存,除非有這個需要時。此時物理內存會在一段時間內保持空閑狀態。對此并沒有什么可擔心的,但是知道了是怎么一回事,也就無所謂了。許多操作系統使用了虛擬內存的方法。因為它們僅在運行時才需要交換空間,以解決不會在同一時間使用交換空間,因此,除了當前正在運行的操作系統的交換空間,其它的就是一種浪費。所以讓它們共享一個交換空間將會更有效率。

注意:如果會有幾個人同時使用這個系統,他們都將消耗內存。然而,如果兩個人同時運行一個程序,內存消耗的總量并不是翻倍,因為代碼頁以及共享的庫只存在一份。Linux系統常常動不動就使用交換空間,以保持盡可能多的空閑物理內存。即使并沒有什么事情需要內存,Linux也會交換出暫時不用的內存頁面。這可以避免等待交換所需的時間:當磁盤閑著,就可以提前做好交換。可以將交換空間分散在幾個硬盤之上。針對相關磁盤的速度以及對磁盤的訪問模式,這樣做可以提高性能。與訪問物理內存相比,磁盤的讀寫是很慢的。另外,在相應較短的時間內多次讀磁盤同樣的部分也是常有的事。例如,某人也許首先閱讀了一段E-mail消息,然后為了答復又將這段消息讀入編輯器中,然后又在將這個消息拷貝到文件夾中時,使得郵件程序又一次讀入它。或者考慮一下在一個有著許多用戶的系統中 ls命令會被使用多少次。通過將信息從磁盤上僅讀入一次并將其存于內存中,除了第一次讀以外,可以加快所有其它讀的速度。這叫作磁盤緩沖(Disk Buffering),被用作此目的的內存稱為高速緩沖(Buffer Cache)。但是,由于內存是一種有限而又不充足的資源,高速緩沖不可能做的很大(它不可能包容要用到的所有數據)。當緩沖充滿了數據時,其中最長時間不用的數據將被舍棄以騰出內存空間用于新的數據。對寫磁盤操作來說磁盤緩沖技術同樣有效。一方面,被寫入磁盤的數據常常會很快地又被讀出(例如,原代碼文件被保存到一個文件中,又被編譯器讀入),所以將要被寫的數據放入緩沖中是個好主意。另一方面,通過將數據放入緩沖中,而不是將其立刻寫入磁盤,程序可以加快運行的速度。以后,寫的操作可以在后臺完成,而不會拖延程序的執行。

? 大多數操作系統都有高速緩沖(盡管可能稱呼不同),但是并不是都遵守上面的原理。有些是直接寫(Write-Through):數據將被立刻寫入磁盤(當然,數據也被放入緩存中)。如果寫操作是在以后做的,那么該緩存被稱為后臺寫(Write-Back)。后臺寫比直接寫更有效,但也容易出錯:如果機器崩潰,或者突然掉電,緩沖中改變過的數據就被丟失了。如果仍未被寫入的數據含有重要的薄記信息,這甚至可能意味著文件系統(如果有的話)已不完整。
? 針對以上的原因,出現了很多的日志文件系統,數據在緩沖區修改后,同時會被文件系統記錄修改信息,這樣即使此時系統掉電,系統重啟后會首先從日志記錄中恢復數據,保證數據不丟失。當然這些問題不再本文的敘述范圍。由于上述原因,在使用適當的關閉過程之前,絕對不要關掉電源,Sync命令傾空(Flushes)緩沖,也即,強迫所有未被寫的數據寫入磁盤,可用以確定所有的寫操作都已完成。在傳統的UNIX系統中,有一個叫做update的程序運行于后臺,每隔30秒做一次sync操作,因此通常無需手工使用sync命令了。Linux另外有一個后臺程序,Bdflush,這個程序執行更頻繁的但不是全面的同步操作,以避免有時sync的大量磁盤I/O操作所帶來的磁盤的突然凍結。在Linux中,Bdflush是由update啟動的。通常沒有理由來擔心此事,但如果由于某些原因bdflush進程死掉了,內核會對此作出警告,此時你就要手工地啟動它了(/sbin/update)。

緩存(Cache)——實際并不是緩沖文件的,而是緩沖塊的,是磁盤I/O操作的最小單元(在Linux中,它們通常是1KB)。這樣,目錄、超級塊、其它文件系統的薄記數據以及非文件系統的磁盤數據都可以被緩沖了。緩沖的效力主要是由它的大小決定的。緩沖太小的話等于沒用。它只能容納一點數據,因此在被重用時,所有緩沖的數據都將被傾空。實際的大小依賴于數據讀寫的頻次、相同數據被訪問的頻率。只有用實驗的方法才能知道。如果緩存有固定的大小,那么緩存太大了也不好,因為這會使得空閑的內存太小而導致進行交換操作(這同樣是慢的)。為了最有效地使用實際內存,Linux自動地使用所有空閑的內存作為高速緩沖,當程序需要更多的內存時,它也會自動地減小緩沖的大小。這就是一般情況下Linux內存的一般機制,真正的Linux內存的運行機制遠遠比這個復雜。

跟 Windows 完全不同的 Linux 內存機制

虛擬內存在哪。在 Linux 中經常發現空閑內存很少,似乎所有的內存都被系統占用了,表面感覺是內存不夠用了,其實不然。這是 Linux 內存管理的一個優秀特性,在這方面,區別于 Windows 的內存管理。主要特點是,無論物理內存有多大,Linux 都將其充份利用,將一些程序調用過的硬盤數據讀入內存,利用內存讀寫的高速特性來提高 Linux 系統的數據訪問性能。而 Windows 是只在需要內存時,才為應用程序分配內存,并不能充分利用大容量的內存空間。換句話說,每增加一些物理內存,Linux 都將能充分利用起來,發揮了硬件投資帶來的好處,而 Windows 只將其做為擺設,即使增加 8GB 甚至更大。

Linux 的這一特性,主要是利用空閑的物理內存,劃分出一部份空間,做為 cache 和 buffers ,以此提高數據訪問性能。

**頁高速緩存(cache)**是 Linux內核實現的一種主要磁盤緩存。它主要用來減少對磁盤的I/O操作。具體地講,是通過把磁盤中的數據緩存到物理內存中,把對磁盤的訪問變為對物理 內存的訪問。

磁盤高速緩存的價值在于兩個方面:

訪問磁盤的速度要遠遠低于訪問內存的速度,因此,從內存訪問數據比從磁盤訪問速度更快;
數據一旦被訪 問,就很有可能在短期內再次被訪問到。
綜上所述,一般不需要太關注Linux的內存占用情況,如果SWAP占用率很高的話一般可能就是內存不夠用了。

Swap配置對性能的影響

分配太多的Swap空間會浪費磁盤空間,而Swap空間太少,則系統會發生錯誤。如果系統的物理內存用光了,系統就會跑得很慢,但仍能運行;如果Swap空間用光了,那么系統就會發生錯誤。例如,Web服務器能根據不同的請求數量衍生出多個服務進程(或線程),如果Swap空間用完,則服務進程無法啟動,通常會出現“application is out of memory”的錯誤,嚴重時會造成服務進程的死鎖。因此Swap空間的分配是很重要的。

內存屬于硬盤的一個存儲區域。通常情況下,Swap空間應大于或等于物理內存的大小,最小不應小于64M,通常Swap空間的大小應是物理內存的2-2.5倍。但根據不同的應用,應有不同的配置:如果是小的桌面系統,則只需要較小的Swap空間,而大的服務器系統則視情況不同需要不同大小的Swap空間。特別是數據庫服務器和Web服務器,隨著訪問量的增加,對Swap空間的要求也會增加,一般來說對于4G以下的物理內存,配置2倍的swap,4G以上配置1倍。

另外,Swap分區的數量對性能也有很大的影響。因為Swap交換的操作是磁盤IO的操作如果有多個Swap交換區,Swap空間的分配會以輪流的方式操作于所有的Swap,這樣會大大均衡IO的負載,加快Swap交換的速度。如果只有一個交換區,所有的交換操作會使交換區變得很忙,使系統大多數時間處于等待狀態,效率很低。用性能監視工具就會發現,此時的CPU并不很忙,而系統卻慢。這說明,瓶頸在IO上,依靠提高CPU的速度是解決不了問題的。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/166313.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息