- ベストアンサー
コンピュータの動きとプログラミングについて
- コンピュータの動きとプログラミングについて質問させてください。文字の入力や論理演算などは裏でトランジスタなどを駆使した回路に電気が流れモニターに表示されるという仕組みかと思うのですが、それだと予めこの入力が来た時にはこの回路を通るようにと物理的に組み立てておく必要があるかと思っています。
- 一方で、プログラミングは文字を書き込むだけで(物理的に組み替えたりせずに)「○○したときに、××する」という予めの指示を与えることができます。この「文字を書き込むだけ」というのと「物理的に組み替えたりせず」にコンピュータに指示(電気の流れ・回路を制御)できることが不思議でなりません。ここらへんの仕組みについて教えて頂けると幸いです。
- コンピュータの動きとプログラミングについて質問させてほしいです。文字の入力や論理演算などは、裏でトランジスタなどを駆使した回路に電気が流れることでモニターに表示されると考えています。しかし、この場合、予め入力があった時に回路を通るように物理的に組み立てなければならないのか疑問です。一方、プログラミングでは文字を書き込むだけでコンピュータに指示できます。この違いについて詳しく教えてほしいです。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
コンピューターの基本動作に必須なものは、 ・命令やデータを読み取る回路 ・命令を実行する回路 ・命令の結果によって分岐する回路(命令を読み取る位置を変える) このあたりです。命令の種類毎に回路は必要ですが、それほど多くはないのです。低レベルの命令だからです。 他にも ・一時的に情報を保存できる領域にアクセスする回路 これがアクセスできる先に領域が沢山あると、プログラムができることが増えます。 ほかにも、 ・外部からの入力を得るための回路 ・外部に出力するための回路 これが必須ですが、CPUがそのものを持っているのではなく、それらにアクセスする低レベルの回路を持っていることが多いです。 こんな感じで、CPUには多数の回路があらかじめ組み込まれています。プログラミングとはこの低レベル命令の並びの工夫だったり、外部からの入力から動作を変えたり、CPUまわりの回路に工夫がありそれと連携、ということになっている訳です。 ※ ここからは、現在のCPUとプログラミングの事情です。現在のプログラミングでも低レベルの命令を使用することは可能ですが、メリットはあまりありません。理由はOSの存在です。ほとんどの場合、プログラムはOS上で動作するものしか作れません。あえてハードウェアに直接アクセスできない状況にして、システム全体の動作安定性を目指しているからです。 そんな状況に合うように、プログラミングは「OSの機能とやり取りする共通プログラム群(ライブラリ)」を使いこなすことが主な技術となります。 ※ 低レベルの命令を組み合わせてプログラミングした場合、ちょっとのことをやるだけでも、沢山のプログラム行数が必要になります。また多勢のプログラマーが開発に参加するようになっていますから、コードを共有する意味でも低レベル命令のプログラミングは合理的ではありません。また良くある話として「プログラマーは以前作った自分のプログラムがすぐに理解できない」ということもあります。なるべく理解しやすく作りやすい環境にするため、C言語やC++やC#やJAVAといった高級言語が開発されました。高級言語で記述されたプログラムコードを言語毎に用意されている変換プログラム(コンパイラ)により、低レベル命令に置き換えられてCPUが実行できるコードになります。 ※ もし、どうしても低レベル命令を使ったプログラミングをしてみたいなら、8ビットCPUを使った「マイクロコンピューターボード」で経験することは可能です。雑誌「トランジスタ技術」や「トラ技コンピューター」には、そのようなボードを使った記事が載っていたり、ボードの購入もできたりするようです。しかし、経験したとしても、現状の一般的なプログラミングとかけ離れていますから、知識や技術を活用するとしたら「組み込みプログラミング」系や「OSレベルで動作するプログラミング」方面になってしまいがちです。大切なお仕事ですが、現場に入らないと、実用的な学習や技術獲得はしにくいようです。 ※ ディープラーニングやマシンラーニングといったAIも、実はプログラミング技術のひとつです。プログラマーの記述は必要ないか、ごく少なくなっていて、必要なのは大量の学習用データです。これらAIの注目された原因は「大量の適切なデータで学習されたとき、素晴らしい精度が実現した」からです。 しかし、残念ながら所詮プログラムです。学習できてない事象の際は、ひどく精度が下がります。例えば、AI自動運転中に道路作業員が「停止」の看板を掲げて停止を促しても、AIは停止できません。また画像を作成AIが、馬にまたがる宇宙飛行士の画像は作成できても、宇宙飛行士にまたがる馬の画像は作成できません。 けっこう省略した箇所もありますので、詳細レベルだと良くない説明もあるかもしれませんが、大枠ではご要望を満たすよう頑張りました。 分かりづらかったり、参考にならなかったらごめんなさい。
その他の回答 (6)
- FattyBear
- ベストアンサー率33% (1530/4610)
""人間の分かるコードで一旦書いてそれが機械語(命令できる状態の文字や数字の羅列)に変換されて伝わるという流れになりますでしょうか…"" 少し違います。 人間が理解(考えやすい)言葉で書かれたプログラムをコンパイラーという機械語に翻訳するソフトを使い、見かけ、タダの1と0の二進数に変換(文字は全く含みません)してコンピューターに覚え込ませて動作させるということです。 あと、CPUの動作する機能(命令)は非常に単純ですがこれらを組み合わせて複雑な動作をさせます。 プログラムを組む際に使う言葉をプログラム言語と言いより人間の言葉にちかい高級言語(例えばC言語)、より機械語に近い低級言語(例えばアセンブリ言語)などがあります。CPUの動作を理解するのには低級言語でのプログラムをつくってみると良くわかります。 それぞれの言語には組まれるプログラムにより向き不向きがあり、必ずしも低級言語が高級言語より(すべてに)劣るわけではありません。
お礼
追記へのご回答ありがとうございます! 実際にプログラミングを経験した方が良さそうですね… 色々勉強してみます!
- notnot
- ベストアンサー率47% (4900/10358)
> この「文字を書き込むだけ」というのと「物理的に組み替えたりせず」にコンピュータに指示(電気の流れ・回路を制御)できることが不思議でなりません。 「メモリーの内容を参照して、その指示通りに動作する」ように、物理的に組み立てられてます(LSI内部の素子や配線がそのように作られている)。
- FattyBear
- ベストアンサー率33% (1530/4610)
コンピューターのハード部分には入出力ポートという信号を出し入れ する端子があります。そのポートにはアドレスが宛てられており、 指定のポートに信号の出し入れを行えます。 プログラムの中に命令の文字や数字(アドレスなど)が書き込まれて おり○○したときにアドレス○○○○の出力ポートの〇bit目をONせよ という様にプログラムで制御ができます。
お礼
ご回答ありがとうございます! おぼろげながら機械語と人間の言語があるというのは認識しています。人間の分かるコードで一旦書いてそれが機械語(命令できる状態の文字や数字の羅列)に変換されて伝わるという流れになりますでしょうか…
- superside0
- ベストアンサー率64% (461/711)
大昔は計算内容(例えば大砲の着弾点の計算方法)を 変更するたびに 真空管の並びや配線をやり直していたけど ノイマン型コンピューターっていうのが 発明されて 計算内容を外部記録装置から呼び出してできるようになったっていうやつですね。 ノイマン型コンピューター とか ストアドプログラム方式 で検索してみるとヒントになると思います。
お礼
ありがとうございます! やっぱり昔は物理的な組み換えもやっていたのですね! キーワード参考にもう少し調べてみます!
- t_ohta
- ベストアンサー率38% (5238/13705)
↓ こちらの本をお勧めします https://www.amazon.co.jp/CPU%E3%81%AE%E5%89%B5%E3%82%8A%E3%81%8B%E3%81%9F-%E6%B8%A1%E6%B3%A2-%E9%83%81-ebook/dp/B08639XM13/ref=tmm_kin_swatch_0?_encoding=UTF8&qid=1678692689&sr=1-1 なぜCPUがプログラムで動作できるのか理解が深まると思います。
お礼
ご回答ありがとうございます! 読みやすそうで結構みっちり内容詰まってますね…! 見てみます!
- webuser
- ベストアンサー率33% (372/1120)
コンピュータの処理は処理装置内のレジスタというところに送られますが 命令によって役割が決まっている専用レジスタ 特定の役割が割り当てられておらずプログラムの都合で様々な用途に使い回せる汎用レジスタ というのがあり それでやりくりしています。
お礼
早速のご回答ありがとうございます! レジスタ…聞いたことあります。ちょっと調べてみます…!
お礼
ご丁寧な回答ありがとうございます! 不勉強な自分でもある程度理解できました! やっぱり実際にプログラムをいじってみるのが一番ですかね 勉強します!