
一部のレガシー コンピューター/コントローラーにはファイル システムが搭載されていませんが、これはこれらのデバイスにオペレーティング システムが搭載されていないためでしょうか? これらのデバイスにファイルを保存できない場合、工場出荷時の制御ロジック/プログラムやその他のデータをデバイスに保存するにはどうすればよいでしょうか?
答え1
ファイルシステムは基本的に、ファイルをメモリに保存する方法です。
ハードディスク、フラッシュ ドライブ、光ディスク、メモリ カードなどのメモリ デバイスには、固定数のバイトを保存できます。空の消去された 48 バイトのメモリには、次のデータが含まれます。
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
さて、2つのテキストファイルがあるとします
- 最初のものはご挨拶.txtという単語が含まれています
Hello
。 - もう一つはユーザー名.txtという単語が含まれています
gronostaj
。
ファイルは以下を使用してエンコードされますアスキーしたがって、各文字は 1 バイトに対応します。ASCII を使用してエンコードすると、ファイルのバイトは次のようになります。
名前
47 72 65 65 74 69 6e 67 73 2e 74 78 74
コンテンツ
48 65 6c 6c 6f
名前
55 73 65 72 6e 61 6d 65 2e 74 78 74
コンテンツ
67 72 6f 6e 6f 73 74 61 6a
(私はそのウェブサイトの表の 2 列目の 16 進数値を使用しています。)
最初のファイルの内容を次のようにメモリに格納できます。
48 65 6c 6c 6f 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
ただし、いくつか問題もあります。
- メモリに 2 番目のファイルを配置したい場合はどうすればよいでしょうか? 1 つのファイルがどこで終了し、もう 1 つのファイルが始まるのかをどうやって知ることができますか?
- ファイルには名前が付いていますが、これをどのように保存すればよいでしょうか?
これらの問題を解決するために、簡単なファイルシステムを発明することができます。ファイル名とその内容をインターリーブし、すべてのファイル名の後にそのファイルの内容が続き、それらをゼロバイトで区切るとします。2 つの連続したゼロバイトは、「これ以上ファイルがない」ことを意味します。
47 72 65 65 74 69 6e 67 <- first 8 bytes of name 1
73 2e 74 78 74 00 48 65 <- next 5 bytes of name 1, then 00, then 2 bytes of content 1
6c 6c 6f 00 55 73 65 72 <- next 3 bytes of content 1, then 00, then 4 bytes of name 2
6e 61 6d 65 2e 74 78 74 <- next 8 bytes of name 2
00 67 72 6f 6e 6f 73 74 <- 00, then 7 bytes of content 2
61 6a 00 00 00 00 00 00 <- 2 bytes of content 2, then 00 00, so no more files
または、ASCII エンコードなしで同じもの: (このようにメモリに保存することはできません。これは読みやすさのためだけです)
G r e e t i n g
s . t x t 00 H e
l l o 00 U s e r
n a m e . t x t
00 g r o n o s t
a j 00 00 00 00 00 00
実際のファイルシステムでは次のようになります。
- ファイルの作成日と変更日、属性、権限、メタデータなどを保存します
- 何らかの目次が含まれているため、ファイルが見つかるまでディスク全体をスキャンしなくても、ほぼ即座にファイルにアクセスできます。
- サポートディレクトリ
00
バイトを含むファイルとファイル名をサポートします- ある程度の失敗から回復できる
- 後続のファイルを移動せずにファイルの長さを変更できるようにサポート
しかし、その考えは理解できます。
さて、オペレーティング システムです。ほとんどのコンピューターのオペレーティング システムはファイルで構成されているため、オペレーティング システムを格納するためのファイル システムが必要です。ただし、永続的なファイルで動作する必要がなく、ファイルに格納されないモノリシック OS を作成することもできます。フリーRTOSは一例です。ファイルシステムとオペレーティング システムは通常は密接に結合されていますが、実際には互いがなくても存在できます。
「モノリシック」とは「単一のバイナリコード」を意味します。いわゆるブロブ: 名前、作成日、その他のプロパティを持たないバイトのシーケンス。結局のところ、CPU は命令のシーケンスを処理するだけです。CPU はファイルのメタデータやファイルシステムを気にせず、実行するタスクを入力するだけです。これらの命令をバイトとして表現できる場合は、BLOB で十分です。
また、BLOB はファイルシステムがなくてもメモリに簡単に保存できます。実際、最初の例では、ファイル 1 の内容をメモリに格納するだけでこれを実行しました。
これであなたの質問への回答が得られたと思います!
答え2
BIOS、オペレーティングシステム、ファイルシステムはそれぞれ異なる独立した要素であり、オペレーティングシステムはデバイスの読み取り専用メモリに存在する可能性があります。したがって、メッセージは同じではありません。しかし、オペレーティング システムの役割は 1 つ、プログラムとハードウェア間のインターフェイスになることです。デバイスにオペレーティング システムがない場合、デバイス上で実行されているプログラムがオペレーティング システムになります。
ファイルシステムがないか、パーティション/ファイルシステムが壊れているか不完全であると報告されている場合、システムにオペレーティングシステムがない可能性があります。しかし、
... 大容量記憶装置が誤って構成されている可能性があります。より具体的には、BIOS が使用するように構成されているヘッドとトラックの数が、デバイスが使用するようにフォーマットされているヘッドとトラックの数と一致していない可能性があります。その場合、ブートストラップは完全なファイル割り当てシステムをロードできません。システムのバッテリーが切れてセットアップ情報が失われていませんか。そうであれば、BIOS 設定をフォーマットに正しく一致させることで、システムを回復できます...
BIOS はハードウェアへの基本的なインターフェイスです。オペレーティング システムはプログラムが使用するインターフェイスで、標準化されているため、プログラムは特定のハードウェアが使用されているかどうかを気にする必要がありません。ファイル システムは、大容量ストレージ デバイスにアクセスするための標準データ テーブルです。
BIOS は、まずドライバー インターフェイス デバイスの読み取り専用メモリからロードされ、アクセス用の割り込みポイントを設定します。Int 13 は、大容量ストレージ デバイスのアクセス ポイントです。
https://en.wikipedia.org/wiki/INT_13H...その後、BIOS はデバイスのトラック 0、セクター 0 からパーティション テーブルとブートストラップ ルーチンをロードします。http://www.ntfs.com/fat-partition-sector.htm
パーティション テーブルにはハード ドライブの容量がすべて記載されており、マシン アドレス パーティション テーブル + 3E 16 進数 (リバース エンジニアリングを正しく思い出せば、マシン上の 0000:063E 16 進数) のブートストラップ ルーチンは通常、オペレーティング システムと、より高度なドライバーをロードします。
コンピュータの OS に大容量ストレージのサポートがない場合でも、この BIOS のサポートに接続して、大容量ストレージ デバイスに基づいてシステムの拡張機能を構築できます。ただし、OS は BIOS への要求を連続的に保つために割り込みをオン/オフにする場合があることに注意してください。
BIOS 自体はマルチスレッド操作を処理できません。具体的には、ハード ドライブに特定の場所で読み取りまたは書き込みの準備をするように指示するために、BIOS への呼び出しが行われます。その後、読み取り書き込み操作は BIOS への 2 回目の呼び出しで実行されます。1 つのプログラムがデータ読み取りの準備をしている間に別のプログラムがデータを書き込もうとすると、データが上書きされてしまうため、より高度なオペレーティング システムが必要です。
プログラムがデータを上書きしたり、他のプログラムがハードドライブや BIOS を使用できないようにしたりすることなく大容量ストレージデバイスを使用するには、ファイル システムが必要です。
8080 の時代に Altair Basic で使用されていたオペレーティング システムは非常にミニマリスト的でした。ファイルの保存を開始するヘッドとトラックを指定して、ハード ドライブにファイルを保存できました。ファイル システムは使用されておらず、ユーザーは、ファイルが保存されたヘッドとトラックの番号を自分で覚えておく必要がありました。
ディスク オペレーティング システムとしては大したことはありませんが、動作しました。キーボードを読み取り、情報をディスプレイに送信するルーチンも最小限でした。
答え3
ここで取り上げるべき点が 2 つあると思います。
- 一部のシステムにはファイルシステムがありませんが、それは OS がないことを意味しますか?
- ファイルシステムがない場合(または読み取り専用の場合)設定はどこに保存できますか?
ベアメタル
一部のシステムにはオペレーティング システムがありません。アプリケーションは 1 つしかなく、そのアプリケーション ソフトウェアがハードウェアと直接インターフェイスします。これは、複雑さが低い小型のマイクロコントローラ システムでよく見られます。このシナリオでは、ソフトウェアは通常特注品となり、開発チームがドライバーと抽象化を最初から作成するか、ベンダー コードを使用して設計目標を実現します。
そうは言っても、このようなシステムは5月ファイルシステムをサポートする。脂肪ログを保存し、ファームウェアの更新を機能的に提供するためによく使用されます。
多くの場合、構成はファイルシステムを使用せずにフォーマットされ、生の不揮発性ストレージに直接書き込まれます。
組み込みシステム - スケジューラ
レベルが上がると、システムはやや大きくなり、複雑さも増します。この時点で、リアルタイムオペレーティングシステム(RTOS)は、すべてがリアルタイム要件を備えているわけではありませんが、特定の機能セットで設計されています。これらのシステムは、「タスク実行がスケジュールされているタスクのみ実行できます。通常、他の任意のタスクは実行できません。これらのシステムでは、ベンダーまたはコミュニティが作成したコードを使用して、ファイルシステム、ネットワークなどを簡単にサポートするのが一般的です。
構成は、生のストレージに書き込まれるか、ファイルシステム内のファイルとして保存されます。
組み込みシステム
現在、組み込みシステムはさらに大規模になっています。複雑さが増し、このレベルでは、システム構成とアプリケーション/ソフトウェアを整理するためにファイルシステムに依存しています。現在では、任意のアプリケーションを実行できるようになり、カーネルにはさまざまなハードウェア用の大量のドライバーが付属しています。
ここで私たちが見ているのはリナックス、QNX、"Windows Embedded コンパクト」などなど…
ソフトウェアは通常、のためにシステムを、次のようなプロジェクトに呼びかけるビジーボックス多くの機能を提供するために、次のようなプロジェクトを使用していますビルドルートそしてヨクトさまざまなアプリケーションを構築し、イメージを生成します。
構成はファイルに書き込まれる可能性が高くなりますが、これらのシステムは通常カスタム ハードウェア上で実行されるため、開発者が以前のように生のストレージを使用することを妨げるものは何もありません。
ファイルシステムは必須ですが、書き込み可能ではない可能性があり、純粋に「メモリ内" - サイズが制限されており、再起動時にすべての変更 (RW の場合) が失われます。
フルユーザー/サーバーシステム
ここで取り上げるのは、ウィンドウ システム、読み取り/書き込みファイルシステム (通常は大容量ディスク上)、任意のコード実行が多数実行され、構成がファイルとして確実に保存されるデスクトップ PC です。これは皆さんがよくご存知のタイプのシステムです。ここで説明している用語では、サーバーは一般にデスクトップ PC と非常によく似ています。
Linuxの世界では、これは「分布通常、何らかのパッケージ管理形式が見つかるので、アプリケーションのインストール/アンインストールは、ダウンロードと解凍(ジェンツー)。
ここではLinuxを見ています。ウィンドウズ、Windows サーバーなどなど
上で、小規模なシステムでは通常、構成が生の不揮発性ストレージに保存されると述べました。これは、保存する内容を決定し、データを照合し、それをストレージに書き込むことによって行われます。
たとえば、次のような単純な構成を保存したいとします。
- フランジは正確な
52458
回転ステップを持っています - フランジは
5547
、05:00
- フランジは陽電子に回転する必要が
49885
ある18:00
数字はすべて 16 ビットの整数に収まるので、それを使ってステップを表します。時間については、RTC との互換性を高めるために BCD で保存することにしました。
以下のデータがあります:
- 52458 -->
0xCCEA
- 5547 -->
0x15AB
- 05:00 -->
0x0500
- 49885 -->
0xC2DD
- 18:00 -->
0x1800
これらの値は照合され、10 バイトとしてストレージに書き込まれます。
0x00000000 CC EA 15 AB 05 00 C2 DD 18 00
アプリケーションはこれを解釈する方法を知っているので、サポートは必要ありません。サポートとは、名前 (例: ファイルシステムとファイル名) でストレージ領域を検索し、構成の理解を人間と共有することを指します (例:翻訳/テキスト/ヤム/トムル)。