磁盤那點事情


​ 本人只是在看到數據庫從磁盤讀取數據相關知識時,對磁盤(硬盤)讀取這塊比較感興趣,並進行了一定的知識延申;如果本文講解有誤,還請多多包含並給予指教,促使大家共同進步~

硬盤的組成

基本概念

​ 硬盤內部主要由磁盤盤片、磁頭控制器(傳動手臂)、磁頭和主軸組成,如下圖所示:

img

​ 主軸負責帶動盤片的高速旋轉,由此會產生氣流將磁頭浮起,磁頭和盤面保持一定的距離,負責從盤面上讀寫數據;傳動手臂則控制磁頭沿着盤面半徑方向進行移動。稍微抽象的圖如下所示:

img

  1. 盤片主軸

    所有的盤片都是固定在一個旋轉軸上,即盤片主軸;

  2. 磁盤盤片

    盤片之間是互相平行的,每個磁盤盤片有兩個盤面,每個面都有一個對應的讀寫磁頭;

  3. 磁頭

    負責從盤面上讀寫數據,依賴盤片的旋轉氣流浮在盤面上方;

  4. 磁頭控制器

    所有的磁頭是連接在一個磁頭控制器上,由磁頭控制器負責各個磁頭的運動;因此所有磁頭在任何時候都是重疊的,不過目前已經能夠實現多磁頭獨立運動;

  5. 磁道(邏輯組成)

    盤面上,以主軸爲圓心,半徑不同的同心圓爲磁道;

  6. 扇區(邏輯組成)

    以主軸爲圓心,按照一定角度可以將磁道劃分爲若干個弧段,每個弧段則稱爲扇區;

  7. 柱面(邏輯組成)

    磁盤通常是由重疊的一組盤片組成,每個盤面劃分爲數目相等的磁道,不同盤面的相同半徑會形成一個圓柱,稱之爲磁盤的柱面;

    可知,磁頭數=盤面數;柱面數=單個盤面的磁道數;

    那麼磁道和扇區數的關係呢?

磁道和扇區關係

對於舊式的磁盤,是依照角度進行劃分扇區,因此不同磁道的扇區數是一樣的。每個扇區所能容納的數據量是相同的,都是512字節,那麼,512字節的數據量會平均分配在扇區內。但是,對於越靠外的磁道,半徑越大,周長越長,扇區面積也越大,則數據密度也會越低。這樣分配顯然是浪費了外圍扇區的大面積,因此新的分配方式出現了。

​ 對於新式磁盤,則是按照扇區面積進行劃分,因此,外側的磁道擁有的扇區數也越多。

硬盤如何存儲信息

​ 硬盤盤片的表面實際上是凹凸不平的,凸起的地方被磁化,代表數字1,凹下的地方是沒有被磁化的,代表數字0;因此,硬盤可以用二進制(0和1)來存儲信息。

硬盤讀取相關參數

  1. 尋道時間:磁頭移動到數據所在磁道需要的時間,需要時間越短,IO操作越快,一般在10ms左右;
  2. 旋轉延遲:主軸將數據所在的扇區旋轉至磁頭下方需要的時間,旋轉延遲取決於磁盤轉速;
  3. 數據傳輸時間:數據從磁盤傳輸到內存的時間;

​ 爲提高磁盤傳輸效率,要儘量減少尋道時間和延遲時間。其中,尋道時間大於延遲時間。

磁盤工作

原理

​ 當硬盤不工作時,磁頭會停留在線速度最小的區域,該區域不存儲任何數據,稱之爲啓停區,啓停區外就是數據區;距離主軸最遠的磁道就是0磁道,硬盤數據的存放也是從最外層開始的。硬盤中有0磁道檢測器,用來完成硬盤的初始化定位。

​ 硬盤數據的讀寫是按照柱面進行的,即最先寫第一磁道的第一磁頭下的所有扇區,然後寫同個柱面的下一個磁道…只有當一個柱面寫滿後,纔會寫下個柱面;讀取也是按照相同的順序進行的,讀取數據時,會將邏輯地址轉換爲物理地址,通過移動磁頭到指定的柱面,等待要求的扇區移動到磁頭下面進行讀取。在等待扇區到來時,磁盤控制器讀取每個扇區的頭標,把這些頭標中的地址信息與期待檢出的磁頭和柱面做比較(尋道),從而找到對應的扇區。=====>之所是按照柱面的順序來讀寫而不是按照盤面順序,是因爲在柱面之間切換磁頭是電子切換,而盤面的磁頭移動是機械切換,電子切換的時間遠小於機械。

局部性原理 + 磁盤預讀

​ 爲了提高磁盤讀取的效率,需要儘量減少磁盤IO。因此,系統在從磁盤中讀取數據時,並不是嚴格的按需讀取,而是每次都會預讀一部分數據,即,磁盤會讀取當前需要的數據以及順序向後一定長度的數據,將這部分數據放入內存中。爲什麼這樣做呢?理論依據就是計算機科學中著名的局部性原理:當一個數據被用到時,其附近的數據也經常馬上被使用。

​ 磁盤順序讀取的效率很高,不需要尋道時間,只需要較少的旋轉時間;預讀的長度一般是頁的整數倍。頁是計算機管理存儲器的邏輯塊,操作系統將主存和磁盤存儲區分割爲連續的大小相等的塊,每個存儲塊分爲一頁(通常爲4k)。主存和磁盤以頁爲單爲交換數據。

​ 預讀又分爲同步和異步預讀:如果第二次請求沒有命中cache,即不在前次的預讀頁中,則表明文件訪問不是順序的,則系統繼續採用同步預讀的方式;如果所讀的頁面在cache中,則表明前次預讀命中,那麼操作系統會把預讀頁擴大一倍,此時預讀是異步過程,應用程序不用等預讀完成就可返回,後臺會慢慢讀頁面,這就是異步預讀。

爲什麼越來越慢

​ 磁盤優先將數據存在最外的磁道,即0磁道;當外層磁道寫滿後,只能存儲在內層的磁道。這個問題也就是演變爲爲什麼讀外層磁道的速度大於內層磁道?

​ 盤片以固定的角速度旋轉,半徑越大,線速度越大,那麼磁頭在單位時間內掃描的扇區也就越多啦,因此讀取速度也就越快了。

參考

硬盤讀寫原理

磁盤IO那些事

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章