硬盤基本知識(一)

總體來說,硬盤結構包括:盤片、磁頭、盤片主軸、控制電機、磁頭控制器、數據轉換器、接口、緩存等幾個部份。所有的盤片(一般硬盤里有多個盤片,盤片之間平行)都固定在一個主軸上。在每個盤片的存儲面上都有一個磁頭,磁頭與盤片之間的距離很小(所以劇烈震動容易損壞),磁頭連在一個磁頭控制器上,統一控制各個磁頭的運動。磁頭沿盤片的半徑方向動作,而盤片則按照指定方向高速旋轉,這樣磁頭就可以到達盤片上的任意位置了。

先上幾張美圖:

基本的結構就是這樣子的,至于硬盤是如何進行讀寫的,必須要知道磁盤盤片是如何劃分的?否則你只知道磁頭在盤片上動來動去。

盤片上涉及的基本概念

整個硬盤上一般有很多的盤片組成,每個盤片如同切西瓜一樣被“切”成一塊一塊的扇面,同時沿著半徑的方向被劃分成了很多同心圓,就是傳說中的磁道,每條磁道被扇面切成很多的扇形區域叫做扇區(扇區是從磁盤讀出和寫入信息的最小單位,通常大小為512字節),不同盤片上的同半徑磁道組成了柱面,這些都是磁盤物理上的概念,知道便可。有了這些概念,我幫便可以計算磁盤的容量:

磁頭數 × 磁道(柱面)數 × 每道扇區數 × 每扇區字節數

l 磁頭(head)數:每個盤片一般有上下兩面,分別對應1個磁頭,共2個磁頭;

l 磁道(track)數:磁道是從盤片外圈往內圈編號0磁道,1磁道...,靠近主軸的同心圓用于停靠磁頭,不存儲數據;

l 柱面(cylinder)數:同磁道數量;

l 扇區(sector)數:每個磁道都別切分成很多扇形區域,每道的扇區數量相同;

l 圓盤(platter)數:就是盤片的數量。

硬盤上的數據定位

每個扇區可存儲128×2的N次方(N=0.1.2.3)字節的數據(一般為512B),扇區為數據存儲的最小單元,從上圖可知,外圈的扇區面積比內圈大,為何存儲的數據量相同,這是因為內外圈使用的磁物質密度不同,但現在的硬盤已經采用內外圈同密度物質來存儲數據了,以減少類似“大面積小數據”的浪費情況。(此時的內外磁道的扇區數量將不同,具體細節省略)

有了扇區(sector),有了柱面(cylinder),有了磁頭(head),顯然可以定位數據了,這就是數據定位(尋址)方式之一,CHS(也稱3D),對早期的磁盤(上圖所示)非常有效,知道用哪個磁頭,讀取哪個柱面上的第幾扇區就OK了。CHS模式支持的硬盤容量有限,用8bit來存儲磁頭地址,用10bit來存儲柱面地址,用6bit來存儲扇區地址,而一個扇區共有512Byte,這樣使用CHS尋址一塊硬盤最大容量為256 1024 63 * 512B = 8064 MB(1MB = 1048576B)(若按1MB=1000000B來算就是8.4GB)

但現在很多硬盤采用同密度盤片,意味著內外磁道上的扇區數量不同,扇區數量增加,容量增加,3D很難定位尋址,新的尋址模式:LBA(Logical Block Addressing)。在LBA地址中,地址不再表示實際硬盤的實際物理地址(柱面、磁頭和扇區)。LBA編址方式將CHS這種三維尋址方式轉變為一維的線性尋址,它把硬盤所有的物理扇區的C/H/S編號通過一定的規則轉變為一線性的編號,系統效率得到大大提高,避免了煩瑣的磁頭/柱面/扇區的尋址方式。在訪問硬盤時,由硬盤控制器再將這種邏輯地址轉換為實際硬盤的物理地址。

LBA下的編號,扇區編號是從0開始。

邏輯扇區號LBA的公式:

LBA(邏輯扇區號)=磁頭數 × 每磁道扇區數 × 當前所在柱面號 + 每磁道扇區數 × 當前所在磁頭號 + 當前所在扇區號 – 1

例如:CHS=0/0/1,則根據公式LBA=255 × 63 × 0 + 63 × 0 + 1 – 1= 0

也就是說物理0柱面0磁頭1扇區,是邏輯0扇區。

轉載于:https://blog.51cto.com/13281431/2175385

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282126.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282126.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282126.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL - 存儲過程

一、概述 存儲過程可以理解為一段 SQL 語句的集合(相當于 PHP 中的一個函數方法,去實現業務邏輯),它們被事先編譯好并且存儲在數據庫中。 調用存儲過程與直接執行 SQL 語句的效果是相同的,但是存儲過程的一個好處是處理…

白話聊應用架構

產業互聯網時代,數字化轉型(數字化演化歷史)已成為一種趨勢,各行各業都投入到數字化轉型的浪潮中來。節后有個客戶項目參與者問我架構方面的事情,我想來想去對于非IT人來說,可能應用架構是最容易理解&#…

python大數_python處理大數字的方法

本文實例講述了python處理大數字的方法。分享給大家供大家參考。具體實現方法如下:def getFactorial(n):"""returns the factorial of n"""if n 0:return 1else:k n * getFactorial(n-1)return kfor k in range(1, 70):print "…

數據庫分庫分表、讀寫分離的原理和實現,以及使用場景

2019獨角獸企業重金招聘Python工程師標準>>> 為什么要分庫分表和讀寫分離? 類似淘寶網這樣的網站,海量數據的存儲和訪問成為了系統設計的瓶頸問題,日益增長的業務數據,無疑對數據庫造成了相當大的負載,同時…

談談一些有趣的CSS題目(十六)-- 奇妙的 background-clip: text

開本系列,談談一些有趣的 CSS 題目,題目類型天馬行空,想到什么說什么,不僅為了拓寬一下解決問題的思路,更涉及一些容易忽視的 CSS 細節。 解題不考慮兼容性,題目天馬行空,想到什么說什么&#x…

第五周軟件工程作業-每周例行報告

一、PSP T名稱C內容ST開始時間ED結束時間中斷時間/min實際時間/minScrum會議第一次Scrum會議10月13日11:3010月13日12:10040第二次Scrum會議10月14日15:3010月14日15:55025第三次Scrum會議10月15日13:3010月15日14:05035第四次Scrum會議10月16日11:3010月16日13:00090第五次Scr…

MySQL - 觸發器

一、概述 Mysql 允許通過觸發器、存儲過程、函數的形式來存儲代碼。 觸發器可以讓你在執行 Insert、Update、Delete的時候,執行一些特定的操作。可以在Mysql中指定是在Sql語句執行之前觸發還是執行后觸發。 二、使用觸發器需要注意的點 對每一個表的每一個事件&a…

Docker Desktop 可以直接啟用Kubernetes 1.25 了

作為目前事實上的容器編排系統標準,K8s 無疑是現代云原生應用的基石,很多同學入門可能直接就被卡到第一關,從哪去弄個 K8s 的環境, Docker Desktop 自帶了Kubernetes 服務,但是在過往的經驗中就是用梯子也安裝不了&…

截取url的host_java正則表達式獲取url的host示例

java正則表達式獲取url的host示例 復制代碼 代碼如下: public static String getHost(String url){if(url==null||url.trim().equals("")){return ""; } String host = ""; Pattern p = Pattern.compile("(?<=//|)((\\w)+\\.)+\\w+&qu…

MySQL - 視圖

一、概述 Mysql 5.0 版本后開始引入視圖。視圖本身是一個虛擬表&#xff0c;不存放任何數據。在使用 sql 語句訪問視圖的時候&#xff0c;他返回的數據都是在查詢過程中從其他表動態生成的。 二、使用視圖   1、創建視圖 CREATE VIEW comic_view as SELECT comic_id,name,pe…

Linux環境下壓縮與解壓命令大全

tar命令 解包&#xff1a;tar zxvf FileName.tar 打包&#xff1a;tar czvf FileName.tar DirName gz命令 解壓1&#xff1a;gunzip FileName.gz 解壓2&#xff1a;gzip -d FileName.gz 壓縮&#xff1a;gzip FileName .tar.gz 和 .tgz 解壓&#xff1a;tar zxvf FileName.tar.…

Centos 磁盤管理及配額管理

實驗內容&#xff1a;一.添加兩塊硬盤&#xff0c;使用LVM做成VG01組&#xff0c;在該VG中新建兩個LV。二.將這兩個LV格式化為ext4/xfs&#xff0c;開機自動掛載到系統mnt1,mnt2目錄下。三.lv02開啟磁盤配額功能&#xff0c;用來進行用戶與組分配額的實驗。四.在系統里添加用戶…

OnionArch - 采用DDD+CQRS+.Net 7.0實現的洋蔥架構

博主最近失業在家&#xff0c;找工作之余&#xff0c;看了一些關于洋蔥&#xff08;整潔&#xff09;架構的資料和項目&#xff0c;有感而發&#xff0c;自己動手寫了個洋蔥架構解決方案&#xff0c;起名叫OnionArch。基于最新的.Net 7.0 RC1, 數據庫采用PostgreSQL, 目前實現了…

spark寫出分布式的訓練算法_利用 Spark 和 scikit-learn 將你的模型訓練加快 100 倍...

在 Ibotta&#xff0c;我們訓練了許多機器學習模型。這些模型為我們的推薦系統、搜索引擎、定價優化引擎、數據質量等提供動力。它們在與我們的移動應用程序交互時為數百萬用戶做出預測。當我們使用 Spark 進行數據處理時&#xff0c;我們首選的機器學習框架是 scikit-learn。隨…

理解LinkedHashMap

1. LinkedHashMap概述&#xff1a;LinkedHashMap是HashMap的一個子類&#xff0c;它保留插入的順序&#xff0c;如果需要輸出的順序和輸入時的相同&#xff0c;那么就選用LinkedHashMap。LinkedHashMap是Map接口的哈希表和鏈接列表實現&#xff0c;具有可預知的迭代順序。此實現…

MySQL - 鎖

一、什么是鎖 鎖是數據庫系統區別于文件系統的一個關鍵特性。鎖機制用于管理對共享資源的并發訪問。 二、MySQL 不同存儲引擎支持的鎖機制 存儲引擎支持的鎖類型Myisam表鎖Innodb行鎖、表鎖Memory表鎖BDB頁鎖、表鎖表鎖&#xff1a;直接鎖住的是一個表&#xff0c;開銷小&…

數據庫時區那些事兒 - MySQL的時區處理

原文地址 當JVM時區和數據庫時區不一致的時候&#xff0c;會發生什么&#xff1f;這個問題也許你從來沒有注意過&#xff0c;但是當把Java程序容器化的時候&#xff0c;問題就浮現出來了&#xff0c;因為目前幾乎所有的Docker Image的時區都是UTC。本文探究了MySQL及其JDBC驅動…

java_函數的重載

函數的重載&#xff08;Overload&#xff09;概念&#xff1a;在同一個類中&#xff0c;允許存在一個以上的同名函數&#xff0c;只要他們的參數個數或者參數類型不同即可。函數功能一樣&#xff0c;僅僅是參與運算的未知內同不同時&#xff0c;可以定義多函數&#xff0c;卻使…

全新升級的AOP框架Dora.Interception[2]: 基于約定的攔截器定義方式

Dora.Interception&#xff08;github地址&#xff0c;覺得不錯不妨給一顆星&#xff09;有別于其他AOP框架的最大的一個特點就是采用針對“約定”的攔截器定義方式。如果我們為攔截器定義了一個接口或者基類&#xff0c;那么攔截方法將失去任意注冊依賴服務的靈活性。除此之外…

redis watch使用場景_redis不得不會的事務玩法

我們都知道redis追求的是簡單&#xff0c;快速&#xff0c;高效&#xff0c;在這種情況下也就拒絕了支持window平臺&#xff0c;學sqlserver的時候&#xff0c;我們知道事務還算是個比較復雜的東西&#xff0c;所以這吊毛要是照搬到redis中去&#xff0c;理所當然redis就不是那…