LBA邏輯塊位址

2022-08-27 17:57:15 字數 1792 閱讀 2547

磁碟讀取發展

io操作讀取硬碟的三種方式:

lba方式訪問使用了data暫存器,lba暫存器(總共3個),device暫存器,command暫存器來完成的。

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的兩種定位方式不同,但其實兩者間還是有乙個轉換關係的。

bio sector的計算與塊裝置lba

在構造nvme cmd命令的時候,使用了request的引數 sector,data len來設定nvme命令的lba,len值。request的引數 sector,data len是怎麼得到的呢?在造請求的函式 blk mq make request,通常由submit bio呼叫 中,如果新bi...

LBA線性位址概念及其與CHS位址關係

lba,全稱logic block address 即扇區的邏輯塊位址 為什麼引入 lba概念?首先,由於int13的限制,三維位址c h s的最大值只能為1024 16 63,容量最大只能到1024x16x63 byte 528482304 byte 504 m。其次,在系統管理檔案時記錄繁瑣的c...

邏輯位址與實體地址

邏輯位址 logical address 是指由程式產生的與段相關的偏移位址部分。例如,你在進行c語言指標程式設計中,可以讀取指標變數本身值 操作 實際上這個值就是邏輯位址,它是相對於你當前程序資料段的位址,不和絕對實體地址相干。只有在intel實模式下,邏輯位址才和實體地址相等 因為實模式沒有分段...