日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CHS和LBA逻辑块地址

發布時間:2024/1/18 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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寄存器0x1F3lba地址的低8位
LBA mid寄存器0x1F4lba地址的中8位
LBA high寄存器0x1F5lba地址的高8位
device寄存器0x1F6lba地址的前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逻辑块地址的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。