Linuxはプロセッサ周辺のハードウェアとどのように通信しますか?

Linuxはプロセッサ周辺のハードウェアとどのように通信しますか?

私の質問は、管理自体ではなくUnix / Linux開発に関連しています。

私の考えでは、管理者ではなくUnix / Linuxの下位レベルのシステムプログラマーをターゲットにしたようです。カーネルの開発を始めたり、Linuxシステムの開発を理解したりするのに役立ちます。

Linuxがハードウェア周辺機器やモジュールと対話する方法を学び始めるには、どのような具体的な情報が必要ですか?バスアーキテクチャやコントローラと通信する方法など。

また、Linuxは現在、ほとんどの環境で仮想マシンで実行されていることに言及したいと思います。したがって、OSが以下で見るのは私が意味するものです。

参考資料や勉強を始める方法が必要です。

私は基本的なx86命令を理解していますが、私の質問はプロセッサ自体を囲むメモリとバスコントローラについてです。私は現代の並列プログラミング環境のプログラマモデルに言及しています。

答え1

仕組みは、アーキテクチャ/マシンによって大きく異なります。 Linux(カーネル)は、起動時に(そして挿入されたデバイスが表示または消えたとき)、使用可能なデバイスと接続をマッピングするツリーを作成します。情報のソースは基本ハードウェアによって異なります。

同じシステムで実行されている他のオペレーティングシステムにはこれを行う独自の方法があり、その目的が移植性に優れている場合は同様の方法を使用できます。

Original PC(またはエミュレータ)などのツールを使用すると、さまざまな機能にアクセスできます。安定デバイス、特定の状況でのアクセス安定(またはほぼ)方法。一部のUnicesにシステムオブジェクトコードを提供することを嬉しく思います。非常に興味深い。

答え2

z80プロトボードのようなものを購入し、シリアルポートから物を取り出すか、dosを使用してシミュレートされたibm PCを実行し、DOS irqsを使用して同じことを実行します。

メモリマップされたテキスト表示を持つ古いZ80システムでは、少なくともテキストも簡単に表示できました。

次の言語を使用してこのようなことを行うことができます(簡単、やや難しい、または実用的ではありません)。アセンブラ、Pascal、Ada、C(なぜC ++なのか)、BASIC、および他の多くの言語を使用すると、多くの作業が必要です。

かなりの量のメモリをサポートできるかなり現代的なプロセッサの場合は、C/Assembler/Ada(Pascalを考えてみましょう)でプログラミングしたい場合は、このプロセッサフ​​ァミリにはかなり単純なメモリアーキテクチャがあるので、これを言います。

Grubのソースコードをチェックしてください!

起動時にプログラムがロードされる方法(ブートローダー)に興味がある場合や、Space Invaders(ベアメタルで実行されるSpace Invadersのレプリカ)などの汚れたゲームをチェックしてください。

仮想マシンで grub-invader を起動できます幼虫侵入者を見る

関連情報