機械硬碟與固態硬碟的適用場景

来源:https://www.cnblogs.com/shanml/archive/2023/04/09/17299498.html
-Advertisement-
Play Games

之前一直以為固態硬碟各方面都比機械硬碟性能高,所以首選固態硬碟,直到看了極客時間-深入淺出電腦組成原理中硬碟相關章節的內容,才發現固態硬碟原來是有缺點的,所以這裡來做一個總結。 機械硬碟(HDD) 機械硬碟由以下幾個部分組成: 盤面:盤面(碟片)上有一層磁性塗層,數據就是存儲在這個磁性的塗層上,一 ...


之前一直以為固態硬碟各方面都比機械硬碟性能高,所以首選固態硬碟,直到看了極客時間-深入淺出電腦組成原理中硬碟相關章節的內容,才發現固態硬碟原來是有缺點的,所以這裡來做一個總結。

機械硬碟(HDD)

機械硬碟由以下幾個部分組成:

盤面:盤面(碟片)上有一層磁性塗層,數據就是存儲在這個磁性的塗層上,一個盤面在正反兩面都有磁性塗層。盤面中央有一個可以旋轉的主軸,主軸可以使碟片以固定的旋轉速率進行旋轉,我們看到磁碟標註的每分鐘多少轉(RPM , Revolution Per Minute)指的就是這個旋轉速率,比如7200轉,表示一分鐘可以旋轉7200下:

(註:圖片來自極客時間-深入淺出電腦組成原理)

一個盤面又可以劃為多個扇區和多個磁軌。
磁軌:一個碟片可以劃分為多個同心圓,每一個圓環就叫做磁軌,可以理解為是碟片上的圓形環道:

扇區:每個磁軌又可以分為一個個扇區,也就是磁軌上的一個弧段:

柱面:上下平行的一個個盤面的相同扇區組成的部分,稱作一個柱面。
image
(註:圖片來自極客時間-深入淺出電腦組成原理)

磁頭:用於從盤面讀取數據傳輸到匯流排,一個盤面有正反兩面,正反兩面都會有一個磁頭。

傳動臂(懸臂):與磁頭相連接,通過沿著半徑軸前後移動傳動臂,可以將磁頭定位到每一個磁軌上,讀取存儲的數據。

磁碟是由一個或者多個平行疊放在一起的碟片組成的,將它們封裝在一個密封的包裝內,整個裝置稱為磁碟驅動器,也就是我們常說的磁碟。

磁碟以扇區為大小進行數據讀寫,數據讀寫的耗時主要有以下幾部分:

  1. 尋道時間:首先傳動臂需要將磁頭定位到包含目標扇區的磁軌上,移動傳動臂所需的時間稱為尋道時間,它依賴於磁頭當前所在的位置以及傳動臂在盤面上移動的速度。
  2. 旋轉時間:將磁頭定位到目標扇區所在的磁軌後,需要等待目標扇區的第一個位旋轉到磁頭下,它依賴於磁碟的旋轉速率。

從數據讀取步驟當中可以看出,如果我們將數據進行順序存放,儘可能將數據放在同一個扇區或者是一個柱面,這樣只需旋轉一次盤面,進行一次尋道,即可讀取出內容,這也是順序讀寫比隨機讀寫性能高的原因。

固態硬碟(SSD)

固態硬碟是一種基於快閃記憶體的存儲技術,由半導體存儲器構成,沒有移動的部件,不需要像機械硬碟一樣進行尋道,所以在順序寫以及隨機寫的性能上相比機械硬碟都要高,但是它的耐用性缺比較差,接下來就看下SSD硬碟的耐用性為何差。

固態硬碟是有多個裸片疊在一起的:


(註:圖片來自極客時間-深入淺出電腦組成原理)

一張裸片上可以放多個平面(Plane),一個平面上又會劃分為多個塊(Block),一個塊的大小通常在幾百KB到幾MB,一個塊里會劃分為多個頁(Page),一個頁的大小通常是4KB:

(註:圖片來自極客時間-深入淺出電腦組成原理)

SSD硬碟寫入的基本單位為頁,按頁進行數據寫入,但是它不能像機械硬碟一樣直接通過覆蓋進行寫入,如果某一頁已經寫入過數據,需要被擦除後才可以重新寫入數據,而且SSD硬碟是按塊進行擦除的,也就是說如果某個頁的數據被刪掉還不能直接對頁進行擦除,需要等待這個頁所在的塊整個被擦除才可以重新寫入數據,而每一個塊的擦除次數是有限的,當達到一定的擦除次數容易損壞。

舉個例子

假設白色代表這個頁未寫入過數據,綠色代表這個頁寫入了有效數據,紅色代表之前寫入了有效數據後來數據被刪除:

  1. 首先在某些空白頁內寫入了一些數據,寫入數據的頁變為綠色:

  2. 刪除一部分數據,由於SSD需要按塊擦除,所以某個塊內的頁如果既有有效數據又有刪除數據,被刪除的那部分數據會先標記為刪除狀態此時數據並未真正刪除:

  3. 當某個塊內的所有頁都被標記為已刪除,此時這個塊就可以被擦除,這個塊內的頁就恢覆成了白色:

  4. 假如刪除的數據不連續,分散在各個塊內,由於紅色的頁在被擦除之前不能寫入數據,所以這些紅色的頁看起來類似磁碟碎片,既不能清理又不能寫入數據,到達一定程度時可能沒有合適的空白頁進行數據寫入,所以這時候需要做一次類似於磁碟碎片整理的工作,找一個紅色頁最多的塊,將裡面綠色頁的數據移動到另外一個塊中,然後將整個紅色頁所在的塊進行擦除:

總結

機械硬碟可能更適合於寫多(順序寫)讀少的場景,固態硬碟更適合於讀多寫少的場景,不過也不能一概而論,最終還是要根據實際的應用場景來定。

參考

【極客時間-徐文浩】深入淺出電腦組成原理

《深入理解電腦系統》


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Echarts的Map學習記錄 Map介紹 Echarts 中的地圖(Map)是一種可視化展示地理數據的圖表類型,可以用來展示各地區的地理位置、熱力分佈、人口密度、經濟發展水平等各種地理數據。地圖圖表可以被分為兩類:常規地圖和熱力圖。其中,常規地圖可以展示不同區域的地理位置和大小,熱力圖可以用來展示 ...
  • vue2.7 源碼中,nextTick並沒有直接使用某個 API ,而是採用了優雅降級的方案去實現非同步更新。我們額外維護了一個 callbacks,用於存儲 nextTick 回調 ...
  • 前言 前面我們簡單的瞭解了 vue 初始化時的一些大概的流程,這裡我們擴展下 Vue 的 patch。 內容 這一塊主要圍繞 vue 中的__patch__進行剖析。 __patch__ Vue.prototype.__patch__的方法位於scr/platforms/web/runtime/in ...
  • 沒有引入坐標系之前,在繪製圖形時,也有一個隱含的坐標系,它和屏幕的像素相關。 比如,我們之前示例中的各個圖形,屏幕的中心就是坐標原點([0, 0]), 橫軸坐標的範圍大概是 [-3.5, 3.5],縱軸的坐標範圍大概是 [-4, 4],這個範圍與設置的視頻解析度有關,解析度設置的越高的話,坐標範圍越 ...
  • 添加修飾 我們的房地產模塊現在從商業角度來看是有意義的。我們創建了特定的視圖,添加了幾個操作按鈕和約束。然而,我們的用戶界面仍然有點粗糙。我們希望為列表視圖添加一些顏色,並使一些欄位和按鈕有條件地消失。例如,當房產已出售或取消時,“已售出”和“取消”按鈕應消失,因為此時不再允許更改狀態。 參考: 文 ...
  • cargo、crates.io 本章內容 通過 release profile 來自定義構建 在https://crates.io/上發佈庫 通過 workspaces 組織大工程 從 https://crates.io/來安裝庫 使用自定義命令擴展 cargo 一、通過 release profi ...
  • 今天在學習springMVC的json數據綁定時,需要使用到jquery發送ajax請求。但是當我通過是<script>標簽引入了jquery.js。 但是當我訪問該jsp的時候就是不顯示頁面的內容 我一直以為時SpringMVC的servelt攔截器攔截了靜態資源,但是我過濾了靜態資源還是不顯示。 ...
  • 概念 異常處理的概念起源於早期的編程語言,如 LISP、PL/I 和 CLU。這些編程語言首次引入了異常處理機制,以便在程式執行過程中檢測和處理錯誤情況。異常處理機制隨後在 Ada、Modula-3、C++、Python、Java 等編程語言中得到了廣泛採用和發展。在 Java 中,異常處理是提供一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...