オペレーティング システムのないマシンでプログラムを実行できるのでしょうか。
また、Linux のカーネルは C 言語で書かれており、ブート時にカーネルが実行されると聞いたので、コンパイルせずにコンピュータが言語を理解する方法を知りたいのですが?
オペレーティング システムのないマシンでプログラムを実行できるのでしょうか。
また、Linux のカーネルは C 言語で書かれており、ブート時にカーネルが実行されると聞いたので、コンパイルせずにコンピュータが言語を理解する方法を知りたいのですが?
要するに、はい。
Linuxは、ベアメタルマシン上で実行されるマシンコードのソフトウェアプログラムです。オペレーティングシステムなしでソフトウェアプログラムを実行することはできますが、プログラムは、コンピューター内のさまざまなハードウェアとさまざまな程度で通信するために使用されるすべてのコードを実装する必要があります。たとえば、ディスプレイへのデータの出力、キーボードからの入力の解釈などです。 /マウス/ネットワークカードなど(非常に低レベルのもののいくつかは、コンピューターコンポーネントのファームウェアによって実装されますが、残りはプログラムで実装する必要があります)。これにより、オペレーティングシステムなしで完全に実行されるものを作成するのは非常に時間がかかり、困難になります。
ウィキペディアから:
コンピュータに最初に電源を入れたとき、ROM または RAM にオペレーティング システムはありません。コンピュータは最初に、オペレーティング システムのプログラムとデータが RAM に読み込まれる不揮発性デバイスにアクセスするために必要な最小限のデータと共に、ROM に格納された小さなプログラムを実行する必要があります。この一連の RAM へのロードを開始する小さなプログラムは、ブートストラップ ローダー、ブートストラップ、またはブート ローダーとして知られています。この小さなブートローダ プログラムの唯一の仕事は、RAM から実行される他のデータとプログラムをロードすることです。
Linux カーネルはすでにコンパイルされて (通常は) ディスクに格納されているため、コンピューターは Linux カーネルを理解できます。ブートローダーは、プリコンパイルされたカーネルをメモリにロードするのに十分な機能をコンピューターに提供します。
コンピュータでプログラムを実行するためにオペレーティング システム全体をロードする必要はありません。コンパイルしたプログラムを開始するブートローダーを作成できます。プログラマーの作業を楽にするオペレーティング システム コールにはアクセスできません。
はい。現在、数 KB のメモリを搭載した小型のマイクロコントローラーで行われています。
プログラムは通常、C で記述され、他のコンピューターでコンパイルされ (クロスコンパイルと呼ばれます)、バイナリ データとしてコントローラーのフラッシュ メモリに読み込まれます。
Linux カーネルは C で書かれている可能性があります。それはまだマシンコードにコンパイルされています。そして、ブート中に実行されるのはこのマシンコードです
ブート中に実行されるソフトウェアを作成することもできます。このようにして、独自のカスタム OS を作成したり、OS なしで直接実行できる独自のカスタム ソフトウェアを作成したりできます。ただし、OS には多くの機能が備わっているため、自分で作成する必要があることに注意してください。ドライバーのサポート、ディスク IO ルーチン、ネットワークスタック、マルチタスク、メモリ管理などは、自分で行う必要があります。
最後に、ソフトウェアを実行するためにマシンを再起動する必要がある場合、人々はそれをあまり好まないと思います。だから、私は OS 向けに書いていきます... それはあなたとユーザーの生活を楽にします。
「ベア」マシンで実行されるソフトウェアではない場合、オペレーティング システムとは何ですか? ブードゥー?XD
1位:そうですね。いくつかのサイクルを焼くためだけにオペレーティングシステムは必要ありません。
ファイルやデータを読み込んだり保存したり、入出力を管理したい場合は、ある種の OS サポートが必要になるかもしれませんが、これは BIOS 機能を直接呼び出して実行することもできます: キーボードからキーを読み取り、何らかの画面または LED またはシリアル インターフェイスに書き込みます。複数のプログラムを実行したり、外部からの割り込みや競合するリソースなどに対処したい場合にのみ、OS がどうしても必要になります。
2 番目: カーネルは、ブート時に実行されるマシン コードにコンパイルされます。カーネルを実行するときに C は関係ありません。Cは、カーネルまたは「ベアメタル」の場合に実行する必要があるカーネルまたはプログラムの作成を支援するだけです。
32ビットより前のゲームコンソールを見てください. それらのほとんどすべてにブート コードがまったくなく、挿入されたカートリッジから直接ブートするだけでした。
理論的には、別のマシンで hex エディターを使用してブートローダーをビルドできます。