作為一個程式設計師,記憶體和磁碟的這些事情,你不得不知道啊!!!

ithuangqing發表於2020-02-07

截止目前,我已經分享瞭如下幾篇文章:

一個程式在計算機中是如何執行的?超級乾貨!!!

作為一個程式設計師,CPU的這些硬核知識你必須會!

作為一個程式設計師,記憶體的這些硬核知識你必須懂!

這些知識可以說是我們之前都不太重視的基礎知識,可能大家在上大學的時候都學習過了,但是嘞,當時由於老師講解的沒那麼有趣,又加上這些知識本身就比較枯燥,所以嘞,大家當初幾乎等於沒學。

再說啦,學習這些,也看不出來有什麼用啊!

我現在告訴你,這些知識很有用,尤其對於作為程式設計師的你,這些是讓你寫程式碼的過程中讓你不僅知其然,還知其所以然的知識,瞭解了這些,對你的程式設計只有大大的好處。

以上三篇文章可謂都是乾貨中的乾貨,看了一定讓你功力大增?

今天再來分享一下關於記憶體和磁碟的有關重要知識,如此一來,CPU,記憶體和磁碟 這比較重要的幾個貨,我們就都有所瞭解了。

關於磁碟,你瞭解多少?

可能大夥聽到的比較多的是硬碟,畢竟這是我們每天使用電腦接觸比較多的一個概念,再加上現在買電腦基本上從之前的機械硬碟都過渡到了現在的固態硬碟。

所以大家對硬碟這個名詞不陌生,相對的,對磁碟的概念似乎就有點陌生了

啥是磁碟

首先記住,磁碟是個總的,也就是說磁碟包括硬碟,那麼還要知道磁碟是幹嘛的,磁碟最主要的功能就是儲存電腦裡面的資訊,但是磁碟又有一些分類,不過我們首先要知道,在計算機中,儲存資訊的有這麼兩類:

第一:內部儲存器

這個就是我們說的記憶體了,是由記憶體條提供記憶體空間,特點是儲存資訊速度快,但是容量不大,而且很重要的一點就是隻要一斷電,裡面什麼玩意兒都沒有了,斷電就會丟失所有的資訊。

第二:外部儲存器
這個主要就是磁碟了,對就是磁碟,可不是硬碟,也不是記憶體,對於外部儲存器也就是磁碟而言,它有這麼些特性,首先就是不像記憶體那樣一斷電就丟失所有的資訊,儲存的資料不會受到斷電的影響,但是它的速度相比記憶體那就慢的多了。

到了現在起碼知道在計算機中儲存資訊有兩類儲存器,一是內部儲存器,而是外部儲存器也就是磁碟,下面我們再來說說磁碟,其實磁碟也有分類

磁碟的簡單分類

一是:硬碟
這個我們就比較熟悉了,就是我們電腦中的c盤啊d盤啊,這裡再說一點,還記得之前說的這些其實就是硬碟空間的分割槽嘛,要記住c盤是主分割槽,是安裝作業系統的,其他盤可以叫做擴充套件盤,所以c盤也叫做系統盤,不過他們都屬於硬碟,而硬碟又是屬於磁碟的,這個關係要理清

二是:軟盤
好了到這裡你就要知道磁碟是分為硬碟和軟盤的,硬碟可能我們還比較清楚,這個軟盤估計很多人沒有太多概念,先來看張軟盤的圖片吧:

在這裡插入圖片描述
估計看到圖片有些人就會覺得有那麼點熟悉了,這就是軟盤了,那麼該如何解釋這個軟盤呢?其實你完全可以把軟盤理解之前之前的u盤,只不過在出現了真正的u盤之後,這個軟盤慢慢就都淡出了市場,要知道沒有u盤的時候,軟盤是很受歡迎的。不過科技總歸是在進步的嘛!

知道啥是磁碟快取不

提到磁碟快取,應該有不少人會想到CPU快取,CPU快取主要是為了解決速度匹配問題,因為CPU快記憶體慢,為了縮小速度差距帶來的問題引入了快取,這裡的快慢主要針對的是對於資料的讀取。

那啥是磁碟快取呢?

會不會有人覺得磁碟快取在磁碟裡?其實不是,磁碟快取不是在磁碟中,而是在記憶體中。

對了,我覺得這裡非常有必要說下,我們這裡說的磁碟,一般就是指的我們們電腦上的硬碟,Windows電腦中的什麼C盤,D盤這些,我們的大部分資料資訊也都是儲存在這上面的。

其實磁碟快取和CPU快取的機制差不多。

磁碟快取是把從磁碟中讀取到的資料儲存到記憶體中,下次讀取該資料的餓時候不會再從磁碟中去讀取,而是直接從記憶體中讀取

快取好像經常聽說

作為一個程式設計師,你一定會經常聽說快取這個概念的,因為快取在很多方面起到了很重要的作用,因為它的存在解決了很多問題,那啥是快取啊。

快取英文是cache,是不是很熟悉,我們現在提到快取覺得它應該是一種技術,實現某種功能或者解決某個問題的一種方式,但是在最開始,快取似乎並不是這樣的。

還記得之前說的RAM嗎?記憶體也即是主存的意思,然後還有DRAM(動態隨機存取儲存器)和SRAM(靜態隨機存取儲存器),之前的快取其實是一種SRAM。

但是嘞,現在的快取概念被擴充套件了,現在的快取更代表一塊資料,比如我這麼這裡說的磁碟快取,其實就是把磁碟中的部分資料儲存到記憶體中,那麼儲存到記憶體中的這塊資料其實就是快取,下次如果要從磁碟中讀取資料會先從記憶體這裡的磁碟快取中讀取,看看是不是有自己需要的資料,畢竟從記憶體中讀取資料要比從磁碟中讀取快太多了。

快取概念的擴充

所以啊,對於現在的快取,不僅CPU和記憶體之間有CPU快取,在記憶體和磁碟之間也存在我們這次說的磁碟快取,甚至在硬碟和網路之間也存在快取,比如網路內容快取。

這裡舉個例子吧,比如我們上網瀏覽一張圖片,第一次瀏覽載入該圖片的時候其實是比較慢得,但是我們下次再次開啟該網的這個圖片,速度就會快很多,那是因為這張圖片資料儲存在了我們的硬碟上,再次讀取是直接從我們的硬碟上讀取,而不是從伺服器上拉取了。

所以啊,看了那麼多,其實快取這玩意就是把低速裝置的資料儲存在高速裝置上,需要的時候直接從高速裝置上將其讀取。

不讀入記憶體就無法執行?

這是咋回事,相信看了我之前幾篇分析CPU和記憶體的文章就知道我這裡說的什麼意思了,CPU被設計成只能從記憶體中讀取資料來執行相關程式,而記憶體中的資料是哪裡來的呢?

我們平常寫的程式啥的都是儲存在本地硬碟中,好吧,是磁碟,我們上面說的磁碟,但是你得知道磁碟和硬碟他們之間啥關係啊。

要想這個程式被執行,那麼首先需要把這段程式資料載入進記憶體,只有進了記憶體才能被CPU讀取執行啊,也就是這麼個圖:

在這裡插入圖片描述
簡單來說,就這麼個情況。

虛擬記憶體很有料

虛擬機器記憶體這塊包含的知識點我個人覺得挺複雜的,可以單獨拿出來講一講了,不過在這裡不打算鋪開來將,其實大部分時候,我們還真沒有必要一下就把這些知識弄得很深深透。

啥是虛擬記憶體

不是不可,只是目前不是很有必要,我們只需要只能一些就差不多了。

那麼對於虛擬記憶體來說,我們首先要搞清楚,什麼是虛擬機器記憶體?

有個概念是這麼說的:

虛擬機器記憶體是把磁碟的一部分作為假想的記憶體來使用

聽起來有點魔幻,不是那麼好理解,不直觀,首先虛擬記憶體肯定不是真的記憶體,雖然不是真的是虛擬的,但是人家也叫記憶體,所以,虛擬記憶體能夠起到記憶體的一些作用,啥意思嘞?

我們知道,程式需要載入進記憶體供CPU讀取執行,如果記憶體空間不夠,如何執行大記憶體程式呢?

比如說現在記憶體空間僅剩10M,但是現在有個大小20M的程式需要執行,在沒有虛擬記憶體的情況下,這個程式是無法被執行的,但是有了虛擬記憶體就可以,虛擬記憶體通過特定技術把磁碟中的一部分容量作為記憶體來使用,也就是說會把這個20M大小的程式的部分資料存放在磁碟中的這塊虛擬記憶體中,然後在真正的記憶體中也存放部分這個程式的資料,在執行這個程式的時候,如果所需要的資料沒有在記憶體中,而是在磁碟中的虛擬記憶體中,那麼就會發生資料交換,把虛擬記憶體中需要現在用到的資料與記憶體中這段程式暫時不用的資料進行交換,以此來保證程式的正常執行。

這,就是虛擬記憶體了。

其實吧,關於虛擬記憶體還有很多可以說的,但是,還是之前那句話,沒必要非得現在把它們全部搞定,只瞭解那些必要的知識,這才是所謂的高效學習。

好啦,關於這次的記憶體和磁碟的一些知識點,我們就介紹到這裡了。

感謝閱讀

大學的時候選擇了自學Java,工作了發現吃了計算機基礎不好的虧,學歷不行這是沒辦法的事,只能後天彌補,於是在編碼之外開啟了自己的逆襲之路,不斷的學習Java核心知識,深入的研習計算機基礎知識,所有心得全部書寫成文,整理成有目錄的PDF,持續原創,PDF在公眾號持續更新,如果你也不甘平庸,那就與我一起在編碼之外,不斷成長吧!

其實這裡不僅有技術,更有那些技術之外的東西,比如,如何做一個精緻的程式設計師,而不是“屌絲”,程式設計師本身就是高貴的一種存在啊,難道不是嗎?

非常歡迎你的加入,未來的日子,編碼之外,有你有我,一起做一個人不傻,錢很多,活得久的快樂的程式設計師吧!

回覆關鍵字“PDF”,獲取技術文章合集,已整理好,帶有目錄,歡迎一起交流技術!

另外回覆“慶哥”,看慶哥給你準備的驚喜大禮包,只給首次關注的你哦!

任何問題,可以加慶哥微信:H653836923,另外,我有個交流群,我會***不定期在群裡分享學習資源,不定時福利***,感興趣的可以說下我邀請你!

對了,如果你是個Java小白的話,也可以加我微信,我相信你在學習的過程中一定遇到不少問題,或許我可以幫助你,畢竟我也是過來人了!
在這裡插入圖片描述

感謝各位大大的閱讀?

相關文章