CHS和LBA逻辑块地址
CHS
什么是CHS尋址
很久以前, 硬盤的容量還非常小的時候,人們采用與軟盤類似的結構生產硬盤。也就是硬盤盤片的每一條磁道都具有相同的扇區數。由此產生了所謂的CSH 3D參數 (Disk Geometry)。即磁頭數(Heads),柱面數(Cylinders),扇區數(Sectors),以及相應CHS尋址方式。
CHS尋址模式將硬盤劃分為磁頭(Heads)、柱面(Cylinder)、扇區(Sector)。
磁頭(Heads):每張磁片的正反兩面各有一個磁頭,一個磁頭對應一張磁片的一個面。因此,用第幾磁 頭就可以表示數據在哪個磁面。
柱面(Cylinder):所有磁片中半徑相同的同心磁道構成“柱面",意思是這一系列的磁道垂直疊在一起,就形成一個柱面的形狀。簡單地理解,柱面數=磁道數。
扇區(Sector):將磁道劃分為若干個小的區段,就是扇區。雖然很小,但實際是一個扇子的形狀,故稱為扇區。每個扇區的容量為512字節。
下面的圖可能能更好的幫助理解:
CHS尋址的最大容量
?
CHS尋址方式的容量由CHS三個參數決定:
1.磁頭數最大為255 (用 8 個二進制位存儲)。從0開始編號。
2.柱面數最大為1023(用 10 個二進制位存儲)。從0開始編號。
3.扇區數最大數 63(用 6個二進制位存儲)。從1始編號。
所以CHS尋址方式的最大尋址范圍為:
255 * 1023 * 63 * 512 / 1048576 = 7.837 GB ( 1M =1048576 Bytes )
或硬盤廠商常用的單位:
255 * 1023 * 63 * 512 / 1000000 = 8.414 GB ( 1M =1000000 Bytes )
為什么引入LBA概念?
首先,由于INT13的限制,三維地址C/H/S的最大值只能為1024/16/63,容量最大只能到1024X16X63 Byte=528482304 Byte=504 M。其次,在系統管理文件時記錄繁瑣的C/H/S也很吃力,效率較低,使用邏輯扇區后,可在硬盤讀寫操作時脫離柱面,磁頭等硬件參數的制約。
在LBA模式下,系統把所有的物理扇區都按照某種方式或規則看做是一線性編號的扇區,即從0到某個最大值方式排列,并連成一條線,把LBA作為一個整體來對待,而不再是具體到實際的C/H/S值,這樣只用一個序數就能確定一個唯一的物理扇區,這就是線性地址的由來,顯然線性地址是物理扇區的邏輯地址。
LBA簡介
磁盤讀取發展
IO操作讀取硬盤的三種方式:
-  
chs方式 :小于8G (8064MB)
 -  
LBA28方式:小于137GB
 -  
LBA48方式:小于144,000,000 GB
 
LBA方式訪問使用了data寄存器,LBA寄存器(總共3個),device寄存器,command寄存器來完成的。
LBA28和LBA48方式:
 LBA28方式使用28位來描述一個扇區地址,最大支持128GB的硬磁盤容量。
LBA28的寄存器
| data寄存器 | 0x1F0 | 已經讀取或寫入的數據,大小為兩個字節(16位數據) 每次讀取1個word,反復循環,直到讀完所有數據  | 
| features寄存器 | 0x1F1 | 讀取時的錯誤信息 寫入時的額外參數  | 
| sector count寄存器 | 0x1F2 | 指定讀取或寫入的扇區數 | 
| LBA low寄存器 | 0x1F3 | lba地址的低8位 | 
| LBA mid寄存器 | 0x1F4 | lba地址的中8位 | 
| LBA high寄存器 | 0x1F5 | lba地址的高8位 | 
| device寄存器 | 0x1F6 | lba地址的前4位(占用device寄存器的低4位) 主盤值為0(占用device寄存器的第5位) 第6位值為1 LBA模式為1,CHS模式為0(占用device寄存器的第7位) 第8位值為1  | 
| command寄存器 | 0x1F7 | 讀取,寫入的命令,返回磁盤狀態? 1 讀取扇區:0x20?寫入扇區:0x30? 磁盤識別:0xEC  | 
IDE通道1,讀寫0x1f0-0x1f7號端口
IDE通道2,讀寫0x170-0x17f號端口
CHS方式:
寫0x1f1: 0
寫0x1f2: 要讀的扇區數
寫0x1f3: 扇區號W
寫0x1f4: 柱面的低8位
寫0x1f5: 柱面的高8位
寫0x1f6: 7~5位,101,第4位0表示主盤,1表示從盤,3~0位,磁頭號
寫0x1f7: 0x20為讀, 0x30為寫
讀0x1f7: 第4位為0表示讀寫完成,否則要一直循環等待
讀0x1f0: 每次讀取1個word,反復循環,直到讀完所有數據
24-bit LBA方式:
寫0x1f1: 0
寫0x1f2: 要讀的扇區數
寫0x1f3: LBA參數的0~7位
寫0x1f4: LBA參數的8~15位
寫0x1f5: LBA參數的16~23位
寫0x1f6: 7~5位,111,第4位0表示主盤,1表示從盤,3~0位,LBA參數的24~27位
寫0x1f7: 0x20為讀, 0x30為寫
讀0x1f7: 第4位為0表示讀寫完成,否則要一直循環等待
讀0x1f0: 每次讀取1個word,反復循環,直到讀完所有數據
48-bit LBA方式:
寫兩次0x1f1端口: 0
寫兩次0x1f2端口: 第一次要讀的扇區數的高8位,第二次低8位
寫0x1f3: LBA參數的24~31位
寫0x1f3: LBA參數的0~7位
寫0x1f4: LBA參數的32~39位
寫0x1f4: LBA參數的8~15位
寫0x1f5: LBA參數的40~47位
寫0x1f5: LBA參數的16~23位
寫0x1f6: 7~5位,010,第4位0表示主盤,1表示從盤,3~0位,0
寫0x1f7: 0x24為讀, 0x34為寫
LBA和CHS的的對應關系
雖然LBA和CHS的兩種定位方式不同,但其實兩者間還是有一個轉換關系的。
首先要了解線性地址的編碼規則:把第一柱面(0柱面)第一磁頭(0面)第一扇區(1扇區)編為邏輯“0”扇區。。。。。。直到第一柱面(0柱面)第一磁頭(0面)的第63扇區(63扇區),將其編為第“63”扇區,這樣編碼。
(1)從C/H/S到LBA
???????用C表示當前柱面號,H表示當前磁頭號,S表示當前扇區號,CS表示起始柱面號,HS表示起始磁頭號,SS表示起始扇區號,PS表示每磁道有多少個扇區,PH表示每柱面有多少個磁道,計算公式如下:
???????LBA?=?( C – CS ) * PH * PS + ( H – HS ) * PS + ( S – SS )
???????例如:
???????C/H/S=0/01?則?LBA = 0
???????C/H/S=0/0/63?則?LBA = 62
C/H/S=0/1/1?則?LBA = 63
C/H/S=0/5/1?則?LBA = 315
C/H/S=100/0/1?則?LBA = 1606500
C/H/S=100/1/1?則?LBA = 1606563
C/H/S=139/52/48?則?LBA = 2236358
C/H/S=220/156/18則?LBA = 3544145
(2)從LBA到C/H/S
???????變量命名依然同上,則計算公式如下
???????C = LBA?DIV?( PH * PS ) + CS
???????H =?(?LBA?DIV?PS?) MOD PH + HS
???????S = LBA?MOD?PS + SS
???????如果不運行MOD運算符,只用DIV運算符,則:
???????C = LBA?DIV?( PH * PS ) + CS
???????H = LBA?DIV?PS – ( C – CS ) * PH + HS
???????S = LBA – ( C – CS ) * PH * PS – H – HS)* PS + SS
???????例如:
???????LBA=0?則?C/H/S = 0/0/1
???????LBA=62?則?C/H/S = 0/0/63
???????LBA=63?則?C/H/S =?0/1/1
???????LBA=315?則?C/H/S =?0/5/1
???????LBA=1606500?則?C/H/S = 100/0/1
???????LBA=2236358?則?C/H/S = 139/52/48
???????LBA=3544145?則?C/H/S = 220/156/18
總結
以上是生活随笔為你收集整理的CHS和LBA逻辑块地址的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: :last-of-type | CSS属
 - 下一篇: 沟通:多技能、学习能力、泛化能力的重要性