硬碟小資料

2021-09-29 00:09:59 字數 2058 閱讀 2533

今天我們來研究下硬碟。簡單敘述,我也不太知道的硬碟歷史,據說第一塊硬碟是2023年,很大,從那時候ibm就建立了硬碟的基本架構。

那些古老的硬碟架構我沒去了解過,不管那麼多。就說現在的機械硬碟。

結構如圖,不多說

磁頭

磁頭其實就是乙個電磁鐵,線圈+鐵芯,如圖:

原理

這裡我要多說的是這個磁碟的讀寫原理。

平常讀寫的時候,磁頭是不帶電的,這個時候磁頭切割磁感線產生感應電流,這一瞬間的電流方向就是乙個二進位制位,由此來讀取資料。

寫資料的時候磁頭帶電,使用電磁鐵感應磁粉,磁粉,注意是粉,很小的顆粒,被電磁鐵一感應就改變方向了,然後之後他就可以用這個磁場來發電了。發電其實就是感應出電流,讀資料用。

固態硬碟,這個東西是乙個高科技產品,是電子級別的東西。厲害得一批。

快閃儲存器快閃儲存器,全名快快閃儲存器儲器,flash memory,快閃儲存器有兩類,nor型與nand型,他們區別很大得。那固態硬碟使用得nand型。管他呢,反正我也不懂。快閃儲存器的最基本原理是隧道效應。

目前ssd所用的快閃儲存器主要是nand型別,早前還有一種叫做nor的快閃儲存器,最早是由intel在2023年開發出來的,曾經在手機記憶體中大行其道,而nand快閃儲存器則是東芝在2023年提出來的,兩種型別的快閃儲存器爭奪戰中最終由nand快閃儲存器勝出,intel不得不把nor快閃儲存器部分賣給美光轉而投身nand陣營,現在intel的快閃儲存器無論效能還是口碑都不輸東芝,甚至還能反超。

由於nor事實上是明日黃花,這裡也不需大幅描述它與nand的差異了,只要知道幾點就夠了:nor快閃儲存器是晶元內執行(execute in place),程式可以在快閃儲存器中直接執行而無需再入到系統記憶體中,而且可以位元組數(byte)為單位讀寫,但是擦除和寫入速度比較慢,容量密度低,反觀nand,儲存密度高,寫入和擦除速度更快,雖然寫入以page為單位,但是擦除必須以block為單位。

隧道效應

快閃儲存器讀寫上限

它的儲存原理是在柵氧化層中間弄一層懸浮的金屬(具體工藝有好多步),可以是薄膜也可以是孤立的奈米點。使用的時候你在柵上加高電壓,下方溝道裡的載流子(電子或空穴)就會因為量子隧穿效應穿過絕緣層進入浮柵,注意在這個過程中絕緣層有漏電或者其他一些電流,但那不是主要的(有的新型器件會採用非隧穿的電流來操作)。一旦電壓撤了,隧穿效應基本消失,於是浮柵裡那些電荷就駐留了,幾乎沒有通路可以跑出來。這層電荷會改變浮柵型場效電晶體的開啟電壓,換句話說,有沒有電荷可以通過加乙個讀電壓--大於無電荷時小於有電荷時的開啟電壓--來判斷,因為溝道電流在兩種情況下差很大,串聯個電阻上去就能讀到不同的電位。要把電荷從浮柵上弄出來就得反向加高壓,還是利用隧穿效應。如果你反覆寫-擦,非常薄的柵氧化層的絕緣性就會降低(晶格結構被反覆衝擊之類的各種電效應熱效應),漏電會越來越大,最後封不住電荷,也自然就讀不出來不同狀態--所謂失效。通常我們會用endurance表徵這個器件耐擦寫的能力。實驗室裡就是周期性地加上擦除寫入電壓,隔一陣測一下它能不能區分出兩個狀態(1和0的電位標準事先定好),直至它失效,這個擦寫次數就是endurance。我當苦逼菸酒僧的時候,基本上一禮拜得弄那麼三五次這樣的實驗,平均endurance都是幾百萬次,這是單個器件的,做成陣列以後總體上差不多,根據你寫的區塊頻繁與否會比單管有所差異。

總結下,就是說,隧道效應並不會損害勢壘,如果理想狀態下,這種器件是沒有擦寫上上限的,但是由於電子衝擊會產生電熱效應。這種熱效應其實會對這個絕緣材料產生破壞(?通俗一點)

然後還有使用高壓讓電子穿透絕緣材料,這個過程會對絕緣材料產生磨損,電子跑來跑去,怎麼說還是會有影響的,這個可以用腳趾頭想。

如果有錯,歡迎指出。

小資料取整

我有資料如下 id typeid num 0001 01 10.20 0001 02 10.40 0001 03 10.40 0002 01 20.00 0002 02 10.00 0003 03 20.50 0003 04 10.50 如何判斷將每個id 有小資料取整,要求是typeid最大的餘數...

python小資料池

name jerry print id name is 是什麼?又是什麼?是比較的兩邊的數值是否相等,而 is 是比較的兩邊的記憶體位址是否相等。python程式是由 塊構造的。塊是乙個python程式的文字,他是作為乙個單元執行的。塊 乙個模組,乙個函式,乙個類,乙個檔案等都是乙個 塊。pytho...

小資料池,字典

id 檢視記憶體位址 name alex name1 alex print id name 31302632 print id name1 31302632 is 檢視是不是乙個 通過記憶體位址 print name name1 檢視等號兩邊的值 def func pass 塊1 name alex...