コンピューターはどのようにして画面上にテキストと GUI を表示するかを知るのでしょうか?

コンピューターはどのようにして画面上にテキストと GUI を表示するかを知るのでしょうか?

これは愚かで奇妙な質問かもしれませんが、答えが見つかるまでは眠れません。コンピューターはどのようにして画面にテキストと GUI を表示する方法を知るのでしょうか。私の記憶が間違っていなければ、x86 コンピューターのブート プロセスは次のようになります。

  • BIOSはCPUとその他のハードウェアを起動し、すべてが動作しているかどうかを確認します。
  • CPUはブートパーティションの最初の512バイトのコードを実行し、画面にブートローダメニューが表示されます。
  • 選択されたカーネルが実行される

私の質問は、カーネルが起動する前にオペレーティング システムがない場合、コンピューターは画面にテキストを表示する方法をどうやって知るのでしょうか。BIOS とブートローダーは、テキストと基本的な GUI を表示できます。これはどのように行われるのでしょうか。BIOS/ブートローダーは、CPU (GPU?) に、たとえば位置 (0,0) に青いピクセルを表示し、次に位置 (1,0) に白いピクセルを表示するように指示するのでしょうか。

2 番目の理論は、BIOS に、画面に印刷するための何らかの API を備えた基本的なディスプレイ ドライバーがあるというものです。ディスプレイ ドライバーから利用できる何らかの print() 関数はありますか?

私が見た限りでは、テキストを印刷するアセンブリ関数は各オペレーティング システムに固有のものであるため、CPU の命令セットを通じて直接利用できるものではありません。

質問の2番目は、KDEやGNOMEのようなデスクトップ環境はどのように機能するのかということです。Linux用のまったく新しいデスクトップ環境を作成したいとします。どこから始めればよいでしょうか。C/C++やその他の高水準言語には、n色位置 (x,y) のピクセル。デスクトップを表示するプログラムはどの言語で書かれていますか? デスクトップはピクセルごとに作成されますか? GTK や Qt などのライブラリはどのように機能しますか? いくつかの関数だけでウィンドウを表示できることはわかっていますが、それらの関数は実際にはどのように機能しますか?

質問が明確でなかったら申し訳ありません。英語は私の母国語ではありません。

答え1

基本的に、マザーボードには ROM (読み取り専用メモリ) チップがあり、必要な GUI を表示する方法を指示します。ソフトウェアがないと思われるかもしれませんが、実際にはソフトウェアはあります。メーカーからプリインストールされています。実際には、チップにハード ワイヤードされたソフトウェアであるため、これを「ファームウェア」と呼ぶ方が適切です。

グラフィカル デスクトップ環境については、特に特別なことはありません。他のプログラムと同じように画面に描画します。画面に描画するために必要なのは、グラフィックス処理を担当するチップ (通常は GPU または IGPU/APU) のアドレスを知ることだけです。通常のプログラムがこれを行う場合、この情報はオペレーティング システムから要求されると思います。そのため、独自のグラフィカル デスクトップ環境を作成する場合は、データを送信するアドレスを把握する必要があります。必要なアドレスは、使用している G/IG/APU のドライバーによって提供されるはずです。

答え2

2つの主要な部分:

  1. MBR がロードされた後、そのコードは Windows ブート マネージャー (Linux では GRUB) と呼ばれるブート コードの 2 番目のステージをロードします。このブート マネージャー/ローダーには、コード内に実装されたテキストおよびグラフィック機能があるか、テキスト出力に直接 BIOS アクセスを使用します。

  2. C、C++、Java、Basic などのプログラミング言語を使用して OS (Windows、Linux など) をロードすると、カーネルやライブラリに実装されている関数にアクセスして、画面に書き込んだり描画したりできるようになります。今日のすべてのプログラミング言語には、ユーザー コードの記述を大幅に簡素化する IDE (統合開発環境) があります。

関連情報