
在引入LBA之前,為什麼CHS從 開始0,0,1
而不是從 開始0,0,0
?
答案1
不幸的是,這正是當時流行的 CHS 尋址方案的實現和採用方式。這被採納為 IBM 相容電腦在用於磁碟存取的 BIOS 中斷中的官方約定,解釋了為何該約定至今仍在使用。從ECMA-107 標準, 資訊交換磁碟盒的捲和文件結構(原文也提到了這一點ATA-1規範):
6.1.3 邏輯扇區號
磁碟區上的每個磁區應由邏輯磁區號來標識。 [...]邏輯磁區號應依升序分配,從 0 開始,從磁區 1、磁軌 00、第 0 面開始,繼續到磁軌 00、面 1(如果 FDC 雙面皆可錄製),然後到磁軌 01、面 0,依此類推。
此問題已在規範中解決一些硬碟,其中註意到給定的邏輯CHS地址不同於實體 CHS 地址地點。這將在希捷 ATA 介面參考手冊,其中包含這個有趣的敘述:
5.1 邏輯區塊尋址
[...] 驅動器上的磁區被假定為線性映射,LBA 0 為柱面 0/磁頭 0/磁區 1。
[...] 對於所有轉換模式,C=0、H=0、S=1 相當於 LBA=0。不可能為所有轉換模式下的所有邏輯區塊位址計算等效的 CHS,因為公式僅適用於一個方向。這是因為 CHS 位址無法存取邏輯區塊尋址可以存取的所有可能磁區的 1/256,因為 CHS 中沒有磁區 0。
因此,對於邏輯 CHS 尋址,儘管第一個柱面/磁頭索引從基於 0 的偏移量開始,並且第一個柱面/磁頭索引從基於 0 的偏移量開始,並且第一個部門索引開始於1(例如,最小可能的 CHS 位址是 0/0/1),這不會改變任何關於身體的該部門的位置。把它當作第一個身體的磁碟上的磁區稱為“磁區1”,佔用CHS 0/0/1。事實上,大多數程式語言中的「第一個」元素是從 0 開始的,因此邏輯的CHS 位址 0/0/1 處的磁區位址為零( 0x00
)。
這在邏輯上更有意義(即“第零”邏輯的地址為第一個身體的磁區),因為我們可以像任何其他記憶體裝置一樣對磁碟裝置進行定址(因為每個磁區都有一個唯一的線性位址將其對應到實體磁區),因此LBA 從零開始是有意義的。確實,如果我們將 CHS 位址 0/0/1 轉換為 LBA,所得的 LBA 將為0x00000000
(這就是為什麼在大多數 CHS 到 LBA 計算中從扇區索引中減去 1,以及為什麼在 LBA 到 CHS 計算中將 1 添加到索引中)。
答案2
我曾嘗試追溯歷史CHS以及「從 1 開始」扇區編號慘敗,這給磁碟驅動程式編寫者帶來了許多麻煩,並迅速引起了LBA。
CHS 的歷史可以追溯到個人電腦在軟碟上運行以及 BIOS 被發明的時代。這是什麼維基百科說:
BIOS(基本輸入/輸出系統)一詞由 Gary Kildall 發明,並於 1975 年首次出現在 CP/M 作業系統中,描述在啟動時載入的 CP/M 中與硬體直接連接的特定於機器的部分。
對CP/M BIOS的研究發現了該文檔 CP/M資訊檔案:BDOS系統調用,其中扇區號從零開始。結論是:最早的 CHS 模式實際上使用從零開始的磁區位址。
基於 1 的扇區位址是在第一個 IBP/PC 中首次引入的。該文件 INT 13 - 軟碟 BIOS 服務具體來說:
Most disk BIOS calls use the following parameter scheme:
AH = function request number
AL = number of sectors (1-128 dec.)
CH = cylinder number (0-1023 dec.)
CL = sector number (1-17 dec.) <--------!!!
DH = head number (0-15 dec.)
DL = drive number (0=A:, 1=2nd floppy, 80h=drive 0, 81h=drive 1)
DL = drive number (0=A:, 1=2nd floppy, 80h=C:, 81h=D:)
Note that some programming references use (0-3) as the
drive number which represents diskettes only.
ES:BX = address of user buffer
因此,IBM/PC 透過 BIOS 的實際實作將磁區編號從從零開始轉換為從一開始。
在 12 位被指派創建 IBM 個人電腦(型號 5150)的 IBM 工程師中,大衛·J·布拉德利為其 BIOS 開發了程式碼。因此,在所有其他細節中,他是決定磁碟中斷參數的人。我們也要感謝這個人和 Mel Hallerman 著名 的CTRL++ 。ALTDEL
所以答案對這個問題
為什麼 CHS 中扇區計數從 1 開始而不是從 0 開始是 :
因為 David J. Bradley 就是這樣編程 BIOS 的。
至於他為什麼這麼做,這個最好由他自己來回答。如果我必須猜測,我會說他留下了零扇區作為尋址扇區,驅動程式可以透過該扇區驗證磁頭是否處於正確的軌道上。
由於磁碟實際上是被設計成不需要這種機制的,而且工程師們還沒有準備好因為 BIOS 的原因而浪費一個扇區,因此零扇區從未存在過。此後,驅動程式編寫者需要對所有 BIOS 磁碟所呼叫的磁區位址減一和加一。
答案3
第一個軟碟規範是IBM在IBM 3740出現時制定的,並沒有提到為系統保留扇區。系統唯一保留的是磁軌00,它只儲存了“資料集標籤”,用於標識磁軌01 到76 中儲存的資訊類型。一個事實。
我們可以觀察到,當人類開始計算任何東西時,它不是從零開始,而是從一開始。例如,假設教室裡有 135 名學生。數起來是這樣的:一、二、三……一百三十四、一百三十五。
它的數字表示如下: 1, 2, 3, ... 134, 135 到目前為止我們都同意,對吧?
現在讓我們輸入不以 0 表示的數字。它看起來像這樣:001, 002, 003, ..., 015, 016, ..., 099, 100, ..., 133, 134, 135
這就是發生的情況CHS:0,0,1 - 0,0,2 - 0,0,3...
重要的是,Excel 工作表中的行或資料庫中的自動數字欄位以 1 開頭,而不是以 0 開頭,而且沒有人對此說過任何話。
David J. Bradley 是這樣安排 BIOS 的嗎?
是的,但他不在外面。
絕對沒有技術原因導致 SECTOR 0 不能使用,除非它因其他原因被保留並對使用者隱藏。原則上,所有指向它的東西都是自然編號的問題。
GA21-9152-2 檔案編號 3740-00,15
IBM 3740 資料輸入系統
第 12 頁
磁碟初始化
...每個磁碟包含兩個備用磁軌,用於取代任何不規則磁軌。此外,初始化功能還提供了一種改變磁碟上扇區位址序列的方法。通常,扇區的順序為數字順序 (1, 2, 3, ... 25,26)。
第24 頁
軟碟上的資料標籤
在初始化期間,資料集的資料集標籤以磁性方式記錄在軟碟的索引磁軌(磁軌00)上。該標籤的主要目的是顯示資料集在軟碟上的位置
那是在 1973 年。它在一張 8 吋軟碟上記錄資料。
絕對沒有技術原因。