003 軟盤啟動原理

2021-07-27 15:27:53 字數 3237 閱讀 4839

軟盤,這東西雖然現在很罕見了,但是在20年前,軟盤是主要的外部儲存器,再早一點的時候還沒有硬碟,所有的資料都是存放在軟盤上的,當然也包括作業系統。我們之所以仍然選擇軟盤作為我們作業系統的啟動介質,是因為軟盤有著其特點和明顯的優勢。如果我說硬碟,你可能第一反應會問我多大的硬碟,因為硬碟的種類很多。但是軟盤就沒有這麼麻煩了,普及過的軟盤就只有兩種而已,而最常用的也是使用時間最長的,就是3.5英吋軟盤,它的大小恒為1440kb(注意寫成1.44mb是有歧義的,因為這裡的進製一般使用1000進製或者1024進製,而3.5英吋軟盤的大小是1,474,560byte,如果按照1024進製來算應該是1440kb或1.41mb,如果按照1000進製的話是1474kb或1.47mb,所以1.44mb的說話有點混亂了。)

既然是1440kb,那麼對它的內容限制也就比較容易和規整。乙個儲存介質,直接拿來用是非常不方便的。比如說,我們乙個u盤裡有64gb的東西,但是當你把u盤插上以後,就立刻可以看到u盤裡有多少檔案,剩餘空間有多少,這當然不可能是把u盤全部讀過一遍才知道的,這就說明,我們儲存介質應當是按照一定的方式來儲存檔案的,一定會在某一位置儲存了乙個檔案的訪問索引表,所以,只需要讀取這個索引表就可以很快地知道儲存介質中的資料儲存情況,也可以快速定位。當然不僅僅是這些,針對於軟盤來說,我們還需要儲存它的磁軌、磁頭、扇區的資訊。這些資訊都需要儲存空間,我們按照一定的組織邏輯來管理資料的過程,就稱為格式化,這也正是磁碟格式化後實際使用空間會小於原始空間的原因所在。

乙個軟盤,其實也就是乙個單磁碟的硬碟,它擁有80個柱面(0-79),2個磁頭(正反面,0-1),18個扇區(1-18),每個扇區有512位元組的儲存位置,所以,一張軟盤的大小就是80×2×18×512=1474560byte=1440kb。柱面的英文是cylindrical su***ce,簡寫為c,磁頭的英文是head,簡寫為h,扇區的英文是sector,簡寫為s,所以比如我們要表示45柱面1磁頭6扇區就應當記做c45-h1-s6。

根據bios的設計,如果bios被設定為軟盤啟動的話,計算機會去讀取軟盤中的資料,首先會讀取軟盤的前77個位元組,來判斷軟盤的型別,在fat12格式的軟盤中對前77個位元組是這樣規定的:

開始位址

結束位址

占用位元組

作用0x00

0x02

3程式的第一條指令

0x03

0x0a

8啟動區名稱

0x0b

0x0c

2每個扇區的位元組數

0x0d

0x0d

1每簇的扇區數

0x0e

0x0f

2fat起始位置

0x10

0x10

1fat的個數

0x11

0x12

2根目錄大小

0x13

0x14

2磁碟大小

0x15

0x15

1磁碟種類**

0x15

0x17

2fat長度

0x18

0x19

2每磁軌的扇區數

0x1a

0x1b

2磁頭數

0x1c

0x1f

4分割槽個數

0x20

0x23

4磁碟大小

0x24

0x26

3固定資料

0x27

0x271卷標

0x28

0x32

11磁碟名稱

0x33

0x3a

8格式名稱

0x3b

0x4c

18空行

所以只需要按照這種方式來填寫,計算機就會以fat12的形式來識別這張軟盤。然後,計算機會檢查這張軟盤的第510(0x1fe)和第511(0x1ff)這兩個位元組的資料,如果這兩個位元組的資料是0x55和0xaa的話(不為什麼,就是乙個標記,沒有什麼特殊含義),就把該軟盤的前512位元組作為啟動盤,然後執行0x0-0x2這三個位元組(也可能只有前兩個位元組)的機器指令。如果510和511位元組不是指定的資料的話,就會認為這張軟盤僅僅是資料盤而並非啟動盤,bios就會進行其他的動作(尋找其他啟動盤或者進入待機狀態)。所以,製作啟動盤的第一步,就是把前77個位元組按照規定寫好,並且把510和511號位置資料寫成55和aa,最後再在前3個位元組的位置寫上需要執行的命令(一般是乙個跳轉指令,然後執行其他位置的指令)就ok了。

這裡用到了乙個軟體bz,這是乙個十六進製制編輯器(或者叫二進位制編輯器),就是用來檢視和編輯乙個檔案的機器**的。當然了,要使用這個軟體就首先得有windows作業系統才行,在以前還沒有作業系統的時候,我們是不可能借助這樣的軟體的,那就必須用實際的燒錄機直接在軟盤上燒錄才行。然而今天我們只需要模擬這個過程就好了,所以我們只做乙個1440kb的img映象檔案來作為軟盤資料,用bz來書寫這個檔案就好了,然後我們使用vmware來載入這個img檔案,相當於在實體機上插入了對應的軟盤(虛擬技術真的很方便)。當然如果感興趣,也可以通過燒錄工具吧img檔案寫入軟盤。不過在這裡強調的是,把映象檔案寫入軟盤,和把映象檔案直接複製到軟盤,這是完全不同的操作。因為如果你是用複製檔案,那這個軟盤必須是格式化完成的,你的映象檔案就是乙個簡簡單單的檔案,它會被儲存在檔案區,還會在索引區生成檔案的索引(其實這根本不可能,因為你沒有辦法在1440kb的軟盤中複製乙個1440kb的檔案,根本拷貝不下),而並不是把軟盤按照我們映象檔案中的那種方式來書寫,這一點有很多朋友都一直搞不清楚。(照理說如果不使用軟體而是單純的使用燒錄機的話就不會出現這樣難理解的問題,就是因為有了現在這樣方便的工具,才讓我們理解底層實現的難度變得更高,所以針對這些問題來說,到底是多想點好呢還是少想點好呢?)不太放心,還是再解釋解釋吧。比如說,我現在想在軟盤中寫上「12345abcde」,那麼我就直接用燒錄機在軟盤上寫上「12345abcde」就可以了,這沒有任何問題。但是,什麼是映象檔案呢,就是這裡有乙個檔案,檔案裡的內容是"12345abcde000000000000000……",後面的那些0就是在實際軟盤上應該都寫成0,所以這個檔案就是軟盤裡實際應該有的情況,一共1440kb,使用軟體把img檔案載入到軟盤上的意思就是,參照img檔案的樣子,把軟盤也寫成「12345abcde00000000000……」這樣,但是如果你把這個檔案拷貝到軟盤裡(假設能考進去的話),軟盤裡實際的樣子應該是"******00000123.img0000012345abcde00000……zzzzzz",解釋一下,前面的***xx就表示軟盤格式化時寫入的檔案資訊,後面是檔案列表和索引,然後才是檔案內容,最後還有一些其他的資訊,所以,把檔案直接拷貝到軟盤中的話,軟盤中的實際情況並不是我們需要的那樣了。

至此,啟動盤就寫好了,接下來的工作就是要寫上一句合適的指令,然後執行ipl的內容,下次會說明img的具體寫法以及ipl的啟動。

HelloWorld啟動軟盤

實驗目的 寫乙個可以引導無系統電腦顯示 hello world 的程式 參考了部分內容 自己動手寫作業系統 實驗過程 1.首先準備如下工具 floppywriter exe 由 自己動手寫作業系統 作者開發用於寫映像檔案 代替 ultraedit 32 17.00.0 1025 官方簡體中文版 zi...

linux 下製作使用軟盤啟動映象

首先,生成空白軟盤映象 dd if dev zero of data.img bs 512 count 2880 當然也可以用bochs 自帶的工具bximge,先fd,點enter。使用 losetup 命令,將 data.img 作為 loop device 使用 sudo losetup de...

建立乙個啟動軟盤,並安裝GRUB

最近在試著寫乙個簡單的作業系統,打算在11週內寫完。會不定期的在這裡寫東西記錄一下。今天完成了引導程式和第乙個程序,這倒不是很難。反而製作啟動軟盤花費了不少的時間 所以才打算把製作方法寫在這裡。用dd命令建立乙個.img檔案,大小為1.44m.我建立的這個檔案的名字叫做floppy.img dd i...