人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile


「プログラムはなぜ動くのか」という本を読んでいて、CPUとメモリの関係についてなんとなく理解ができたのですが、コンピュータの動作する流れについて、わかったようでわからないままです。

この本のおかげで、プログラマが書いたプログラムはマシン語に翻訳されてメモリ上に配置されて、それをCPUが上から順に、場合によっては番地を飛ばしたりしながら演算していくのだと理解しました。この本ではメモリの仕組みについてしっかり書かれていたので、データがメモリ上でどうやって表現されているのかということなどについてはよくわかりました。

しかし、それでもコンピュータがやっていることがよくわかりません。

私がキーボードの「A」を押したとき、コンピュータの内部では何が起きているのでしょうか?目で見えるのは、小指がキーボードの「A」の部分を押し込み、ほぼ同時にスクリーンに期待していた「あ」が表示される光景です。小指が「A」を押し込んでからスクリーンに「あ」が表示されるまでのこの間に、何が起きているのでしょうか?

●質問者: 匿名質問者
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● 匿名回答1号

OSは内部にBIOS(basic I/O system:基本入出力体系)をコントロールするプログラム群を持っています。利用頻度の高い処理をOS側で用意する事によって、プログラム作成者が細かなプログラムを作成する負担から開放されるからです。そうしたOS側によって用意されている制御ルーチンのうち、キー入力を担当しているルーチンを呼び出す事で、現在リアルタイムで押下されているキー、そのアスキーコードを入手する事が可能となっています。

あなたはなぜキーボードを押そうと思ったのでしょう?。キー入力で変化が起こるプログラムを動かしているからです。

プログラムが起動している間、そのプログラムはキーデータを繰り返し要求し続けている、いわばキーボードを監視し続けているわけで、何かキーが押された時だけ画面に反映するというアクションを起こしている、という事になります。つまり、何もキーが押されていない状況下でもプログラムは無駄に動き続けているという事。処理を停止させるまでプログラムは止まりませんので。


匿名回答2号さんのコメント
「割り込み」も知らないのか。 無限ループで監視するなんて、VBしか知らないやつがやることだよ。

匿名回答5号さんのコメント
イベント・ドリブン 昔は監視してたな〜・・・・

匿名回答6号さんのコメント
まあ今でもキーボードの中にちっちゃなコンピュータが入っていてそいつは常時キーをスキャンしてると思いますが。電力がシビアな携帯機器なら別かもしれませんが。

匿名回答2号さんのコメント
スキャンなんてしないよ。 キーボードはマトリックスになってるんだ。 キーが押されると縦横の信号が変わる。 これが始まりで、いろいろあって割り込みが発生する。

匿名回答6号さんのコメント
最近はそうなんですね。20年以上前の記憶で話してました。マトリックスにしておいて、列の信号線を順番にLにしていって行の信号線を読むってやつをワンチップマイコンで。

匿名回答2号さんのコメント
いや、昔もそうでしょう。 縦横スキャンするのに何クロック使うか分からないけど、それより短いタイミングでON/OFFされたら読みそこなっちまう。 せめて、横1word、縦1byte で 2クロックで読みこんでキーを判断という感じでは。 ワンチップだと入力のbit数が少ないから、回路で16進に変換して1wordに納めて inp で読み込み、だったと思います。

2 ● 匿名回答3号

CPU に、「割り込み処理」という機能があります。

割り込み (コンピュータ) - Wikipedia

CPU がメモリから読み出した命令を実行している最中に「割り込み」が発生すると、あらかじめ設定しておいた処理を実行する、という機能があります。

キーボードに限らず、CPU から見て外部からの入力を受け付けるような処理の場合に、この割り込み処理が使われます。PC の BIOS などのファームウェアや OS が、初期化処理をする時に、割り込み処理の内容をあらかじめメモリ上に配置し、「この番号の割り込みが発生したら、○○番地へ飛ぶ」みたいな設定をしておきます。

割り込みにはもう一つ、プログラムが意図的に割り込みを発生させるものもあり、実際、そのための命令が CPU に用意されています。その昔、MS-DOS というパソコン向けの簡素な OS があったのですが、アプリケーションから MS-DOS が用意している機能(例えば、ディスク上のファイルの読み書き)を呼び出す時に、この割り込み命令を使っていました。


3 ● 匿名回答4号

実装によって違うと思いますので一例として読んでいただければ。
あと厳密な用語がよく分かんないので詳しい人のフォロー待ちで。

細かい部分は次の回答者よろしく。


4 ● 匿名回答5号

できるようになっているのです。

せっかくの向学心に水をさすようですが、物事は構造的に捉えることが肝要です。
構造的に捉えることで、理解するに消費する時間を節約できます。
ある部分がどうしてもわからない。できるようには考えられないと思った時にだけ、理解を深めましょう。

あなたが、今回の質問内容の回答がなければ、目的が達せないというのであれば他の方の回答に委ねます。


5 ● 匿名回答7号

小指が「A」を押し込んでからスクリーンに「あ」が表示されるまでのこの間に、何が起きているのでしょうか?

これが簡単そうに見えて果てしなく長い道のりなのです。
昔ならスパコンが必要なんじゃないかという程の計算を行っています。

それをCPUが上から順に、場合によっては番地を飛ばしたりしながら演算していくのだと理解しました。

基本はそうですが、今の、特にパソコンに使うようなCPUは命令がかなり増えていたりします。
整数演算だけでなく浮動小数点演算や、それを複数のメモリに対して一度に行う命令、
また、単なる演算だけでなく、指定したメモリ領域へのアクセスを許可/禁止したり、使用できる命令を制限したりする特権関係なども複雑になってます。

CPUだけでなく周辺も複雑になってます。
画面表示関係ではGPUというCPUのように(特性は違うが)演算出来るチップが使われていて、CPUとGPUが協調して画面表示が行われていますし、キーボードも昔からあるPS/2のほかUSBもあります。

さらにソフトウェアも複雑になってます。
単純に一つのプログラムで読み書きしているわけではなく、アプリケーションとOSがあり、OSもドライバや仮想ドライバ、カーネル、DLLなどのようなものがあり、入出力や割り込み処理のほか、タスクスイッチやメモリ管理、権限管理もあります。

単純にキーボードが押されたといってもキーボードの種類(日本語・英語とか、Dvorak配列や親指シフトとか)により変わってくることもある。それをかな漢字変換するのか、それはどれ(MS-IMEとかATOKとか)なのか。どのアプリケーション・ウィンドウに渡すのか。
ほかにもユーザー補助のシステムとか。
OSは設定や他の状態を参照(たとえばメモリのここが幾らの値ならとか、あそこからあそこの範囲にこれこれの値が何番目にあるから云々とか)しながら、必要なモジュールを順次呼び出し(それに伴いタスクや権限を切り替え)ます。
結果、どのアプリケーションのどの位置に表示するか、現在の状態(カーソルの位置とかaltキーが押された後かとか)から、アドレスXの値にYを掛けZを足して……とかやってウィンドウのどの位置にいくらの大きさの何のフォントで何を表示するとか決めて、決まり(APIとかABIとか言います)にしたがって、この値はメモリに配置してそのアドレスをスタックに積んで……とかやってDLLなどに表示をお願いして、それを受けてOSがフォントデータをキャッシュやディスクから探して、ベクトルデータを演算したりアンチエイリアスかけたり、またはGPUに渡すためにアドレスをドライバに通知したりDMA使うためにIO命令だしたり。

ほかにもスクリーンセーバーが動いていないかどうかとか、ディスクからファイルを読みだすならウィルスチェックのソフトが動くとか、キャッシュのメモリを割り当てるとか。

といった事を一気に学ぼうと思っても大変なので、MS-DOSのプログラミングあたりから学んでいくとわかりやすい気がします。

ちなみに皆さんが書いてるのは入出力(IO)ですね。

データがメモリ上でどうやって表現されているのかということなどについてはよくわかりました。

とあるからでしょう。
IOについては通常のIOのほか、VRAMで出てるんですがメモリマップドIOとかDMA転送とかいくつかあり、IOを支えてるのがハードウェア割り込みです。
#ほかに権限違反とかでソフトウェア割り込みがあります。


匿名回答7号さんのコメント
>> もっと原始的なコンピュータについて知りたいです。それについて書かれた本などがあれば教えていただけないでしょうか? << http://www.amazon.co.jp/dp/4789831655 コンピュータというか、それを構成するハードウェアの話です。 今のPCに使われているチップセットもこれらが発展に発展を重ねたものといえます。 あと、コンピュータの具体的な動作を知りたければ存在するコンピュータ自体を知るのが一番な気がするので、その候補と解説本的なものをググって見ました。 TK-80 http://www.st.rim.or.jp/~nkomatsu/evakit/TK80.html ハードウェアは小さく単純です。有名なので情報も多いと思います。 実際に扱った事はないですが、ハードウェアが単純だとソフトウェアが複雑というかトリッキーになりがちなので、その辺の心配はあります。 あと、PCとは違いすぎるというのもあります。 http://www.amazon.co.jp/dp/4756134017 どこかで安く手に入るなら良いのですが。 PC-9801シリーズ 国産PCです。なので情報も多いです。実ハードの入手も(それなりの価格がしますが)可能と思います。 http://www.webtech.co.jp/company/doc/undocumented_mem/index.html 解説は割り込みやIOなどが分かってる前提です。 http://www.amazon.co.jp/dp/4871484238 テクニカルデータブックは本当にデータブックなので解説はほとんどありません。 そのかわり詳細です。 実機をいじれるとおもしろいし、わかりやすいとは思いますが、なかなか大変ですのでエミュレータとか使うと良いでしょう。 http://homepage3.nifty.com/takeda-toshiya/common/index.html http://retropc.net/yui/np2.html http://worholicanada.mydns.jp/pc98/00101.html OSはFreeDOSが良いのではないでしょうか。 http://dosmania.blog.fc2.com/blog-entry-76.html http://mwlab.net/2011/11/pc-98-emu-hdd-image.html nasmというアセンブラが使えるようです。 http://www.freedos.org/software/?prog=nasm PC/AT互換機 これまでの国産機と違いどうしても英語情報が多くなりますが、情報もソフトウェアも多く、なにより目の前のそれが実機とも言えます。 #mac使ってたらすいません http://www.amazon.co.jp/dp/4816318313 http://www.amazon.co.jp/dp/4789834964 書籍の方はやっぱり少ない様で、取り合えず見つけたのをあげた感じです。 ソフトウェアは先のFreeDOSもいいですが、DOSBoxも良いのではないでしょうか。 http://ja.wikipedia.org/wiki/DOSBox nasmも使えるようです。 http://www7b.biglobe.ne.jp/~makandat/NASM.html と、まあ、ほとんどアセンブラ入門って感じになりますが、CPUとメモリというハードウェアから広げていくとそうなるのかなと思います。 #と書いてから、逆にハードウェアから離れてOSのプロセス管理やメモリ管理なんかに行くのもありな気がした #最終的には「電子計算機概論」みたいな話になってしまうかも

1-5件表示/6件
4.前の5件|次5件6.
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ