ファイルシステムの導入


説明:本文の内容は、主にWBから来ている.YANGの1冊の本、本名《writeos-1.0-2-weekly》、原文を読むことを提案して、リンクを提供しますhttp://download.csdn.net/detail/mishifangxiangdefeng/5869801
一、なぜファイルシステムを導入するのか
問:ファイルシステムはそんなに大きくて、何行のアセンブリで完成できますか.
答え:説明する必要があるのは、本文はオペレーティングシステムにファイルシステムを導入するのではなく、オペレーティングシステムにファイルシステムを導入するのは膨大な仕事であり、ここの数行のアセンブリで完成できるものではない.
本稿では,システムが存在するフロッピーディスクにファイルシステムを導入することを指す.現在のFDは、システム起動ディスクにすぎません.ファイルシステムを導入したフロッピーディスクは、システムを起動するだけでなく、モバイルデバイスのようにlinuxにマウントされ、ファイル管理でフロッピーディスクを使用することもできます.
 
問:私たちがしなければならないのはシステムディスクである以上、なぜ私たちはフロッピーディスクをlinuxにマウントし、中にファイルを置くのですか.
答:現在の起動システムのブートディスクは、512バイトのコンテンツのみをメモリにロードできます.余分な512バイトのコンテンツをロードする場合は、自分でコードを書いてloadに行きます.
第一歩:フロッピーディスクシステムディスクを作成するときは、内容をフロッピーディスクに載せます.
手順2:FDシステムディスクを起動するときに、ロードする内容を探します.
ステップ3:コンテンツをメモリにロードします.
明らかに、私たちはこれらの内容をファイルの形式で保存、管理、読み取りすることができます.
 
問:ファイルシステムを導入すると、オペレーティングシステムが512バイトのサイズの制限を突破することができますが、512バイトのサイズの制限を突破するには、必ずファイルシステムを導入しなければなりませんか?
答え:いいえ.例えば「30日間自作オペレーティングシステム」では、内容を順番にフロッピーディスクに保存し、使うときも最初から最後まで順番に読みます.
順番に保存する利点:方法が簡単で、ファイルシステムを導入する必要がなく、使用時にダウンロードするファイルを探す必要もありません.
順序付けの欠点:拡張性が悪く、管理できない.例えば、真ん中にいくつかの内容を加えると、後の内容のオフセットが変わります.
利害を考慮するか、ファイルシステムを導入するか.
 
問:システムディスク上のファイルシステムをどのように利用し、512バイトのサイズの制限を突破するか
回答:
アセンブリFDプロセス:
引入文件系统_第1张图片
システム起動プロセス:
(1)システムが第1セクタをメモリに自動的にロードする
(2)コードに従って、フロッピーディスクからloadを見つける.bin
(3)コードに従ってloadをロードする.binからメモリへ
(4)コードに従って、制御権をloadに移行する.bin
 
これらの仕事は具体的にどうしますか.この文書では、どのような作業が完了しますか?
「ファイルシステムの導入」:FAT 12を使用してフロッピーディスクをフォーマットし、フロッピーディスクがシステム起動ディスクだけでなく、ファイル管理にも使用できるようにする
「ファイルシステムの使用」:FAT 12ファイルシステムを備えたフロッピーディスクからファイルを検索し、ファイルをコンテンツにロードする
『テストファイルシステム』(1)テストコードを書き、テストコードを実行可能ファイルにし、フロッピーディスクに書き込む.(2)システムを起動したら、実行可能ファイルをメモリに見つけてロードします.(3)制御権がテストコードに移る
二、どのようなファイルシステムを導入するか
本明細書では、図に示すように、FAT 12ファイルシステムFATファイルシステム記憶構造を実現する.
(1)FAT 1とFAT 2は、ファイルテーブル項目を格納し、各項目のサイズは12 ibtであり、固定サイズのファイル「クラスタ」を指す.1つのファイルに複数のファイルクラスタが含まれている場合、テーブル・アイテムの内容はファイルの次のクラスタ番号です.(2)ファイル名に基づいてファイルの最初のクラスタを検索するルートディレクトリ.(3)データ領域.(4)記憶領域割り当ての単位はクラスタであり、1つのクラスタに1つ以上のセクタを含めることができる.本明細書では、クラスタにセクタが含まれます.
三、どのようにファイルシステムを導入するか
ファイルシステムの導入とは、FAT 12ファイルシステムを用いてフロッピーディスクをフォーマットする方法の第1のステップである.そこで、まずFAT 12ファイルシステムの「フォーマット」を見てみましょう.
引入文件系统_第2张图片
引入文件系统_第3张图片
BPB(BIOS Parameter Block)と呼ばれるデータ構造です.セクタ0に記入するには、正しく記入し、フォーマットの作業は基本的に完了します.(1)修正コード
.code16

/*start*/
.text
	jmp LABEL_START				/*Start to boot*/
	nop							/*nop required*/

/*=========================================================================================
Name:FAT12 file system
Time:Chapter 2.2
Revision:2
Reason:          512  ,          512  ,      。         。                        ,  512     
Method:                            。
MeMo:
	FAT         ,           ,    0        。             BPB(BIOS Parameter Block)     ,              ,           
	       BPB       
=========================================================================================*/
/*Floppy header of FAT12*/
BS_OEMName:			.ascii	"windmiss"		/*OEM String, 8 bytes required*/
BPB_BytsPerSec:		.2byte	512				/*Bytes per sector*/
BPB_SecPerCluse:	.byte	1				/*Sector per clue*/
BPB_ResvdSecCnt:	.2byte	1				/*Reversed sector count*/
BPB_NumFATs:		.byte	2				/*Number of FATs*/
BPB_RootEntCnt:		.2byte	224				/*Root entries count*/
BPB_TotSec16:		.2byte	2880			/*Total sector number*/
BPB_Media:			.byte	0xf0			/*Media descriptor*/
BPB_FATSz16:		.2byte	9				/*FAT size(sectors)*/
BPB_SecPerTrk:		.2byte	18				/*Sector per track*/
BPB_NumHeads:		.2byte	2				/*Number of magnetic heads*/
BPB_HiddSec:		.4byte	0				/*Number of hidden sectors*/
BPB_TotSec32:		.4byte	0				/*If TotSec16 equal 0, this works*/
BS_DrvNum:			.byte	0				/*Driver number of interrupt 13*/
BS_Reserved1:		.byte	0				/*Reversed*/
BS_BootSig:			.byte	0x29			/*Boot signal*/
BS_VolID:			.4byte	0				/*Volume ID*/
BS_VolLab:			.ascii	"Solrex 0.01"	/*Volume label, 11 bytes required*/
BS_FileSysType:		.ascii	"FAT12   "		/*File system type, 8 bytes required*/

LABEL_START:
/*Initial registers, including ds, es, ss*/
	mov		%cs,	%ax
    mov     %ax,	%ds
    mov     %ax,	%es
	call	DispStr
	jmp		.

/*=====================================================================
  Routine: DispStr
  Action: Display a	string, string index stored in %dh
*/
DispStr:
    mov     $MessageLength, %ax
    mov     %ax,		%bp			       #ES:BP = address of string
	mov		$MessageLength, %cx				/*String length*/
	mov		$0x1301,	%ax					/*ah = 0x13, al = 0x01(W)*/
    mov     $0x00c,		%bx				    #page number = BH=0, word color = BL = 0x07h
    mov     $0,			%dl					/*Start row and column*/
    int     $0x10						    #10h is interrupt number
    ret

/*=====================================================================
  String table
*/
.set					MessageLength,	16
BootMessage:			.ascii	"Hello, OS world"	/*index 0*/

.org 510                        #fill 0 in first 510 BYTE
.word 0xaa55                    #end with 0xaa55,             0xaa55             

(2)    Make.
makefileは修正しなくてもいいです.makeでいいです.
この点、makeはコンパイルとリンクをしただけで、最後に実行可能なファイルを作成したのかよく分かりません.Imgですが、実行ファイルが実行されていないのに、なぜ効果があるのでしょうか.
四、効果
 
フォーマットされていないboot.imgフロッピーディスク用mount-o loop boot.img mountdir/がディレクトリにマウントされると、システムがエラーを報告します.フォーマットしてから、mountすれば、成功します.
今すぐimg mountをlinux上に置くと、他の実行可能なファイルをbootに置くことができます.imgが当たった
p.s.makeの時のwarningはどうやって取り除くか分からない
引入文件系统_第4张图片