I/O・IRQ・メモリの役割
デバイスマネージャでグラフィックやサウンドやネットワークなどの、CPU以外の一般的なPCを構成する部品類の接続状況を見る事ができる。
これで各部品のプロパティを開くと、リソースというのがあり、どの部品も必ずI/O・IRQ・メモリの範囲の3種類の情報が表示される。
これが何かというお話。
I/Oとは正式にはI/Oポートと言い、インプット/アウトプット ポートの略だ。
その名の通り、CPUからの制御命令やデータは、ここを通して各部品(以下 デバイスと呼びます)とやり取りされる。
I/Oポートには16進数4桁で0000~FFFFまでの番号が割り振られており、当然ながら違うデバイスで同じ番号のI/Oポートが使用される事は無い。
IRQは日本語では割り込み要求などと訳される。
割り込みとは、これもその名の通りCPUの処理に割り込むために使われる。
なぜ割り込みが必要かと言うと、例えばキーボードやマウスからの入力信号が何かあっても、プログラムが前述のI/Oポートを読み取らない限りは、マウスカーソルも動かないし文字も出ない。
かといって、頻繁に新しい入力が無いかどうかをプログラムで確認していては、他の処理が遅くなってしまう。
そこで、新しい入力が発生した場合に、割り込み信号というのを発生させる事にした。
これもそれぞれのデバイスに違う番号の信号が割り当てられており、これが発生するとCPUはいま実行中のプログラムの処理を一時中断して、該当する番号の割り込みが発生した場合の処理が書かれているメモリアドレス(OSなどが起動時に設定する)へ飛んで処理を実行し、終わったら中断していたプログラムへ戻って実行を再開する。
こうすることで、キーボードやマウスの入力をプログラム側でいちいち確認しなくても良くなり、またより高速に反応ができるのだ。
メモリは一部のデバイス、グラフィックカードやサウンドデバイスなど大量のデータを扱うものにのみ設定される。
以前はこれらもI/Oポートを通してCPUがメモリからいちいちデータを送って居たが、コンピュータで扱う画像や音声の質が上がってデータ量が増えたために、それでは間に合わない、効率が悪くなった。
そのためにこれらのデバイスに搭載されている専用メモリを、パソコンに搭載されているメモリと同様に扱えるようにメモリアドレス(番地)の最初の方や、あるいは搭載メモリを超える番地をそれらのデバイス搭載メモリに割り当てて、直接読み書きできるようにしたのだ。
これによって、動画や3Dのグラフィック、あるいは音楽のデジタルデータなどを高速に大量にグラフィックやサウンドデバイスとやり取りできるようになり、より表示ドット数や色数、あるいは音声データならより細かくデジタル化されたリアルな音を、止まったり乱れたりせずに出せるようになったのだ。
基本的にこれらはOSからデバイスドライバを通して行われる処理なので、アプリケーションプログラムが直接この3種類にアクセスする事はない、というかWindowsの仕様上できない事になっている。
だからフル3Dのゲームを高速に動かそうと、どんなにがんばってゲームプログラムを作っても、間に必ずOSやドライバが入るので、その分遅くなってしまうのだ。
昔のパソコンや家庭用ゲーム機は、全てゲームのプログラムがこれらを直接操作・管理していた。
なのでその分難しく、プログラムだけでなく周辺デバイスの仕様も熟知していなければならないなど、特にゲームプログラマは高度な技術が要求された。
現在はパソコンはもちろん、プレイステーションなどのゲーム専用機もOSが搭載されているので、I/Oポートや割り込みが何なのかさえ知らなくても、画像を表示したりBGMを再生したりできてしまうのだ。
それらの中間処理は全てOSとデバイスドライバがやってくれるので。
単にグラフィックやサウンドのデータだけ作って、はいあとこれよろしくねってOSに渡せば良いだけなのだ。
入力も同じで、キーボードの何のキーが押されたら右へ進むとか左へ進むとか、ビームを撃つとかそういう処理だけを作ればよくて、キーボードやマウスからどんな入力があったのかは、OS側で調べて教えてくれるので、そこは一切作らなくて良いのだ。
そんなわけで「俺プログラマーやってんだwww」って奴でも、リソースの意味を知らなかったりする。
むしろ昔から自作機などでIRQの競合に四苦八苦した、プログラム知識0のパソコンオタクの方が詳しかったりする。
そして、そういう人ほどプログラマになった時に、他の専門卒とかのなんちゃってプログラマより一歩も二歩も進んだプログラムを作る事が多いという話です。
これで各部品のプロパティを開くと、リソースというのがあり、どの部品も必ずI/O・IRQ・メモリの範囲の3種類の情報が表示される。
これが何かというお話。
I/Oとは正式にはI/Oポートと言い、インプット/アウトプット ポートの略だ。
その名の通り、CPUからの制御命令やデータは、ここを通して各部品(以下 デバイスと呼びます)とやり取りされる。
I/Oポートには16進数4桁で0000~FFFFまでの番号が割り振られており、当然ながら違うデバイスで同じ番号のI/Oポートが使用される事は無い。
IRQは日本語では割り込み要求などと訳される。
割り込みとは、これもその名の通りCPUの処理に割り込むために使われる。
なぜ割り込みが必要かと言うと、例えばキーボードやマウスからの入力信号が何かあっても、プログラムが前述のI/Oポートを読み取らない限りは、マウスカーソルも動かないし文字も出ない。
かといって、頻繁に新しい入力が無いかどうかをプログラムで確認していては、他の処理が遅くなってしまう。
そこで、新しい入力が発生した場合に、割り込み信号というのを発生させる事にした。
これもそれぞれのデバイスに違う番号の信号が割り当てられており、これが発生するとCPUはいま実行中のプログラムの処理を一時中断して、該当する番号の割り込みが発生した場合の処理が書かれているメモリアドレス(OSなどが起動時に設定する)へ飛んで処理を実行し、終わったら中断していたプログラムへ戻って実行を再開する。
こうすることで、キーボードやマウスの入力をプログラム側でいちいち確認しなくても良くなり、またより高速に反応ができるのだ。
メモリは一部のデバイス、グラフィックカードやサウンドデバイスなど大量のデータを扱うものにのみ設定される。
以前はこれらもI/Oポートを通してCPUがメモリからいちいちデータを送って居たが、コンピュータで扱う画像や音声の質が上がってデータ量が増えたために、それでは間に合わない、効率が悪くなった。
そのためにこれらのデバイスに搭載されている専用メモリを、パソコンに搭載されているメモリと同様に扱えるようにメモリアドレス(番地)の最初の方や、あるいは搭載メモリを超える番地をそれらのデバイス搭載メモリに割り当てて、直接読み書きできるようにしたのだ。
これによって、動画や3Dのグラフィック、あるいは音楽のデジタルデータなどを高速に大量にグラフィックやサウンドデバイスとやり取りできるようになり、より表示ドット数や色数、あるいは音声データならより細かくデジタル化されたリアルな音を、止まったり乱れたりせずに出せるようになったのだ。
基本的にこれらはOSからデバイスドライバを通して行われる処理なので、アプリケーションプログラムが直接この3種類にアクセスする事はない、というかWindowsの仕様上できない事になっている。
だからフル3Dのゲームを高速に動かそうと、どんなにがんばってゲームプログラムを作っても、間に必ずOSやドライバが入るので、その分遅くなってしまうのだ。
昔のパソコンや家庭用ゲーム機は、全てゲームのプログラムがこれらを直接操作・管理していた。
なのでその分難しく、プログラムだけでなく周辺デバイスの仕様も熟知していなければならないなど、特にゲームプログラマは高度な技術が要求された。
現在はパソコンはもちろん、プレイステーションなどのゲーム専用機もOSが搭載されているので、I/Oポートや割り込みが何なのかさえ知らなくても、画像を表示したりBGMを再生したりできてしまうのだ。
それらの中間処理は全てOSとデバイスドライバがやってくれるので。
単にグラフィックやサウンドのデータだけ作って、はいあとこれよろしくねってOSに渡せば良いだけなのだ。
入力も同じで、キーボードの何のキーが押されたら右へ進むとか左へ進むとか、ビームを撃つとかそういう処理だけを作ればよくて、キーボードやマウスからどんな入力があったのかは、OS側で調べて教えてくれるので、そこは一切作らなくて良いのだ。
そんなわけで「俺プログラマーやってんだwww」って奴でも、リソースの意味を知らなかったりする。
むしろ昔から自作機などでIRQの競合に四苦八苦した、プログラム知識0のパソコンオタクの方が詳しかったりする。
そして、そういう人ほどプログラマになった時に、他の専門卒とかのなんちゃってプログラマより一歩も二歩も進んだプログラムを作る事が多いという話です。