コンピュータの動きとプログラミングについて

このQ&Aのポイント
  • コンピュータの動きとプログラミングについて質問させてください。文字の入力や論理演算などは裏でトランジスタなどを駆使した回路に電気が流れモニターに表示されるという仕組みかと思うのですが、それだと予めこの入力が来た時にはこの回路を通るようにと物理的に組み立てておく必要があるかと思っています。
  • 一方で、プログラミングは文字を書き込むだけで(物理的に組み替えたりせずに)「○○したときに、××する」という予めの指示を与えることができます。この「文字を書き込むだけ」というのと「物理的に組み替えたりせず」にコンピュータに指示(電気の流れ・回路を制御)できることが不思議でなりません。ここらへんの仕組みについて教えて頂けると幸いです。
  • コンピュータの動きとプログラミングについて質問させてほしいです。文字の入力や論理演算などは、裏でトランジスタなどを駆使した回路に電気が流れることでモニターに表示されると考えています。しかし、この場合、予め入力があった時に回路を通るように物理的に組み立てなければならないのか疑問です。一方、プログラミングでは文字を書き込むだけでコンピュータに指示できます。この違いについて詳しく教えてほしいです。
回答を見る
  • ベストアンサー

コンピュータの動きとプログラミングについて

コンピュータの動きとプログラミングについて質問させてください。 文字の入力や論理演算などは裏でトランジスタなどを駆使した回路に電気が流れモニターに表示される(もっと複雑だとは思うのですが…) という仕組みかと思うのですが、 それだと予めこの入力が来た時にはこの回路を通るようにと物理的に組み立てておく必要があるかと思っています。 一方で、プログラミングは文字を書き込むだけで(物理的に組み替えたりせずに)「○○したときに、××する」という予めの指示を与えることができます。 この「文字を書き込むだけ」というのと「物理的に組み替えたりせず」にコンピュータに指示(電気の流れ・回路を制御)できることが不思議でなりません。 ここらへんの仕組みについて教えて頂けると幸いです。 ど素人のイメージなので間違っているところ分かりづらいところあるかもしれませんがご容赦ください。 何卒宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kzr260v2
  • ベストアンサー率48% (788/1619)
回答No.6

コンピューターの基本動作に必須なものは、 ・命令やデータを読み取る回路 ・命令を実行する回路 ・命令の結果によって分岐する回路(命令を読み取る位置を変える) このあたりです。命令の種類毎に回路は必要ですが、それほど多くはないのです。低レベルの命令だからです。 他にも ・一時的に情報を保存できる領域にアクセスする回路 これがアクセスできる先に領域が沢山あると、プログラムができることが増えます。 ほかにも、 ・外部からの入力を得るための回路 ・外部に出力するための回路 これが必須ですが、CPUがそのものを持っているのではなく、それらにアクセスする低レベルの回路を持っていることが多いです。 こんな感じで、CPUには多数の回路があらかじめ組み込まれています。プログラミングとはこの低レベル命令の並びの工夫だったり、外部からの入力から動作を変えたり、CPUまわりの回路に工夫がありそれと連携、ということになっている訳です。 ※ ここからは、現在のCPUとプログラミングの事情です。現在のプログラミングでも低レベルの命令を使用することは可能ですが、メリットはあまりありません。理由はOSの存在です。ほとんどの場合、プログラムはOS上で動作するものしか作れません。あえてハードウェアに直接アクセスできない状況にして、システム全体の動作安定性を目指しているからです。 そんな状況に合うように、プログラミングは「OSの機能とやり取りする共通プログラム群(ライブラリ)」を使いこなすことが主な技術となります。 ※ 低レベルの命令を組み合わせてプログラミングした場合、ちょっとのことをやるだけでも、沢山のプログラム行数が必要になります。また多勢のプログラマーが開発に参加するようになっていますから、コードを共有する意味でも低レベル命令のプログラミングは合理的ではありません。また良くある話として「プログラマーは以前作った自分のプログラムがすぐに理解できない」ということもあります。なるべく理解しやすく作りやすい環境にするため、C言語やC++やC#やJAVAといった高級言語が開発されました。高級言語で記述されたプログラムコードを言語毎に用意されている変換プログラム(コンパイラ)により、低レベル命令に置き換えられてCPUが実行できるコードになります。 ※ もし、どうしても低レベル命令を使ったプログラミングをしてみたいなら、8ビットCPUを使った「マイクロコンピューターボード」で経験することは可能です。雑誌「トランジスタ技術」や「トラ技コンピューター」には、そのようなボードを使った記事が載っていたり、ボードの購入もできたりするようです。しかし、経験したとしても、現状の一般的なプログラミングとかけ離れていますから、知識や技術を活用するとしたら「組み込みプログラミング」系や「OSレベルで動作するプログラミング」方面になってしまいがちです。大切なお仕事ですが、現場に入らないと、実用的な学習や技術獲得はしにくいようです。 ※ ディープラーニングやマシンラーニングといったAIも、実はプログラミング技術のひとつです。プログラマーの記述は必要ないか、ごく少なくなっていて、必要なのは大量の学習用データです。これらAIの注目された原因は「大量の適切なデータで学習されたとき、素晴らしい精度が実現した」からです。 しかし、残念ながら所詮プログラムです。学習できてない事象の際は、ひどく精度が下がります。例えば、AI自動運転中に道路作業員が「停止」の看板を掲げて停止を促しても、AIは停止できません。また画像を作成AIが、馬にまたがる宇宙飛行士の画像は作成できても、宇宙飛行士にまたがる馬の画像は作成できません。 けっこう省略した箇所もありますので、詳細レベルだと良くない説明もあるかもしれませんが、大枠ではご要望を満たすよう頑張りました。 分かりづらかったり、参考にならなかったらごめんなさい。

gohandaiski
質問者

お礼

ご丁寧な回答ありがとうございます! 不勉強な自分でもある程度理解できました! やっぱり実際にプログラムをいじってみるのが一番ですかね 勉強します!

その他の回答 (6)

  • FattyBear
  • ベストアンサー率32% (1213/3697)
回答No.7

""人間の分かるコードで一旦書いてそれが機械語(命令できる状態の文字や数字の羅列)に変換されて伝わるという流れになりますでしょうか…""   少し違います。 人間が理解(考えやすい)言葉で書かれたプログラムをコンパイラーという機械語に翻訳するソフトを使い、見かけ、タダの1と0の二進数に変換(文字は全く含みません)してコンピューターに覚え込ませて動作させるということです。 あと、CPUの動作する機能(命令)は非常に単純ですがこれらを組み合わせて複雑な動作をさせます。 プログラムを組む際に使う言葉をプログラム言語と言いより人間の言葉にちかい高級言語(例えばC言語)、より機械語に近い低級言語(例えばアセンブリ言語)などがあります。CPUの動作を理解するのには低級言語でのプログラムをつくってみると良くわかります。 それぞれの言語には組まれるプログラムにより向き不向きがあり、必ずしも低級言語が高級言語より(すべてに)劣るわけではありません。

gohandaiski
質問者

お礼

追記へのご回答ありがとうございます! 実際にプログラミングを経験した方が良さそうですね… 色々勉強してみます!

  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.5

> この「文字を書き込むだけ」というのと「物理的に組み替えたりせず」にコンピュータに指示(電気の流れ・回路を制御)できることが不思議でなりません。 「メモリーの内容を参照して、その指示通りに動作する」ように、物理的に組み立てられてます(LSI内部の素子や配線がそのように作られている)。

  • FattyBear
  • ベストアンサー率32% (1213/3697)
回答No.4

コンピューターのハード部分には入出力ポートという信号を出し入れ する端子があります。そのポートにはアドレスが宛てられており、 指定のポートに信号の出し入れを行えます。 プログラムの中に命令の文字や数字(アドレスなど)が書き込まれて おり○○したときにアドレス○○○○の出力ポートの〇bit目をONせよ という様にプログラムで制御ができます。

gohandaiski
質問者

お礼

ご回答ありがとうございます! おぼろげながら機械語と人間の言語があるというのは認識しています。人間の分かるコードで一旦書いてそれが機械語(命令できる状態の文字や数字の羅列)に変換されて伝わるという流れになりますでしょうか…

回答No.3

大昔は計算内容(例えば大砲の着弾点の計算方法)を 変更するたびに 真空管の並びや配線をやり直していたけど ノイマン型コンピューターっていうのが 発明されて 計算内容を外部記録装置から呼び出してできるようになったっていうやつですね。 ノイマン型コンピューター とか ストアドプログラム方式 で検索してみるとヒントになると思います。

gohandaiski
質問者

お礼

ありがとうございます! やっぱり昔は物理的な組み換えもやっていたのですね! キーワード参考にもう少し調べてみます!

  • t_ohta
  • ベストアンサー率38% (5076/13259)
回答No.2

↓ こちらの本をお勧めします 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がプログラムで動作できるのか理解が深まると思います。

gohandaiski
質問者

お礼

ご回答ありがとうございます! 読みやすそうで結構みっちり内容詰まってますね…! 見てみます!

  • webuser
  • ベストアンサー率33% (372/1120)
回答No.1

コンピュータの処理は処理装置内のレジスタというところに送られますが 命令によって役割が決まっている専用レジスタ 特定の役割が割り当てられておらずプログラムの都合で様々な用途に使い回せる汎用レジスタ というのがあり それでやりくりしています。

gohandaiski
質問者

お礼

早速のご回答ありがとうございます! レジスタ…聞いたことあります。ちょっと調べてみます…!

関連するQ&A

  • パソコンの仕組みについて

    以前似たような質問をさせて頂いたものです。PC初心者でイメージベースで語っており、用語も間違って使用しているかもしれません。 ご容赦ください。 プログラミング(というよりかパソコンの仕組み)についてなのですが、文字を入力するだけでどうして色々な制御や計算など(果てはゲームの仕組み)ができるのかが気になっています。 例えばソフト上の追加や修正でその都度パソコンの中の基盤を取り換えるとか物理的な作業をしなくても文字の入力(プログラミング?)だけで出来るのが不思議だという具合です。 信号電気が指定の回路を通って文字などフォントが作られると解釈しているので、プログラミングで回路の切り替えを行っているのかなと素人ながら考えているのですがどうやって切り替えているのかというところに興味を持っています。 もし、ここらへんの初心者にも分かるような本がありましたらそちらもご教授頂けますと幸いです。(電気信号と言ってますが別に電気に長けているわけではありません) 長文・駄文申し訳ないですがご回答お待ちしております。

  • コンピューターについての質問です。。。

    コンピューターについて述べた文のうち、適切で『ないもの』はどれでしょうか?  (1)ソフトウェアを入れ替えることで、様々な用途に利用可能である  (2)電子回路を含むハードウェアと、用途に応じたソフトウェアからな  る  (3)制御・演算・記憶・入力・出力の機能を持つ  (4)制御機能を持つという点で、一般的な電卓とは異なる  (5)させたい仕事の手順を厳密に記述しなくても、コンピューターは適  切に解釈して、仕事を行うことができる (1)~(5)のうち、正解はどれでしょうか? 何となく(1)、(2)、(3)は違う(適切である)感じはするのですが・・・ 回答よろしくお願いします!

  • コンピュータの構成

    コンピュータの構成で、入力装置→主記憶装置→出力装置といった順に制御装置や演算装置を介さずデータが流れる場合があるのですが、これは例えばキーボードで文字を入力してディスプレイに文字が出力した場合と同じなのでしょうか。

  • 「演算」「回路」の基本的なしくみが分かりません。

    私の仕事はコンピュータ関係ではありませんが、今仕事で基本的なコンピュータのおおもとを知りたい状況になっております。基本情報技術者の勉強を数年前していましたが、やみくもに覚えていただけで理解できていなかったので質問させてください。レベルが低すぎて申し訳ありませんが、よろしくお願いいたします。 質問 ●論理演算はAND回路やOR回路などありますが、各種HPや解説書にかいてあるのはその「考え方」ですよね? それとも実際にLSIとかの中でそのように電圧が流れるように線がつながっているのでしょうか? 例えば、http://kids.casio.jp/hatena/hatena2.htmlこのような解説をみると、デジタルの概念は理解できてもその「オン」「オフ」が実際コンピュータの中ではどのようになされているのか、しくみが理解できないのです。 ●また、この仕組みというのはLSI、トランジスタ、真空管のどの場合でも物理的に同じでしょうか?

  • コンピュータの5大装置について

    コンピュータの5大装置(入力装置、出力装置、記憶装置、制御装置、演算装置)を人間の体に例えるとどうなるんですか?記憶装置が何にあたるのかわからないです。教えてください。

  • 論理回路と実際の回路

    最近コンピュータの原理にふと興味を持って、いろいろと調べていました。 二進法や論理回路は理解できたのですが、それを実際の回路で表現する、という段階で立ち止まってしまいました。 乾電池と二個のスイッチと豆電球が直列につながっていてand回路、スイッチが並列だとor回路、というイメージはよくわかるのですが、本に書いてある「ダイオードとトランジスタを使った論理回路の図」などを見ても、どの部分が入力に相当してどの部分が出力に相当するのかがよくわかりません。(電子回路の図で書いてある論理回路を組み合わせるときにはどことどこをつなぐことになるのでしょう) そもそも「電気が流れる」ことが入力を意味するのだと思いますが、論理回路の図はそれぞれ線一本だけで入出力が表されています。入力部分にスイッチがつながっているとしたら、反対側の極はどこにつながっているのでしょうか。反対側がないとそもそも電気が流れること自体ができないと思うのですが・・・。(それとも論理回路の記号はただアルゴリズムを表現するためだけのものなのでしょうか) 電子回路についてはほとんど素人なので、何か回路の概念を根本的に取り違えている節でもあるような気もします。質問で図を示せないのでよくわからない文になってしまったかもしれませんが、ご教授いただければ幸いです。

  • コンピューターの仕事とは?

    素人の素朴な疑問です。 一般に力学的な仕事って、エネルギー保存則を満たしますよね。 コンピューターが行う「仕事」って、物理的に見ると、どのように捉えればいいのでしょうか? コンピューターが行う演算なり処理という面で言うと、消費電力とそれで行える処理能力は比例するわけでもなく、半導体プロセスが進歩すれば、少ない消費電力で、より大きな仕事をすることができるようになります。 物理的な観点で見れば、コンピューターは、単に電気を熱に変える仕事をしているだけだ、という見方もできそうです。 でも、実際には、コンピューターは、人間から見て色々な「仕事」を成し遂げてくれます。 この「仕事」って、どのように捉えたらいいのでしょうか?

  • 電子回路の間違っているところを教えてください

    PICで車のバッテリーの電圧をAD変換で検知してPWMで自動で充電ON OFFする回路を作っているのですが充電のON OFFがどうもうまくいってくれません・・・ PIC自体の制御はうまくいっているようなのですが、ACアダプターを接続すると常にトランジスタのコレクタの部分に電気が流れてしまいます。確認したところPNPトランジスタのベースはしっかりPICで制御されていました・・・それなのに、常に電気が流れてしまうのは何ででしょうか?・・・やはり回路がどこかおかしいのでしょうか? それともトランジスタの細かな仕組みを理解できていないからでしょうか?(エミッタからベースに電気が流れるとエミッタからコレクタに電気が流れる事やベース電流の計算方法などは判ります)ちなみに使っているトランジスタは下記の「TIP147T」になります。 http://www.datasheetcatalog.org/datasheet/stmicroelectronics/4135.pdf いままで、単純な回路は独学でいくつか作成してきたのですが、今回のような電源が2個の回路は初めてで、電気の知識も乏しくさっぱり判らなくなってしまいました。 どなたか詳しいかた、今回の質問についての回路のおかしいところ、部品を変えた方がいいところなど教えてください。よろしくおねがいします。

  • アプリ職人やハッカーについて

    コンピュータのしくみやネットワークのしくみを本で読んだが プログラミングができるようになりません。 c言語などでhello worldなどの文字を出力できるくらいのレベルで システムを制御するという感じがつかめないというより プログラミングができるようになるのにどんなことをしているのか?

  • コンピュータの動作原理について教えて下さい。

    コンピュータの五大機能(入力,出力,記憶,演算,制御)に基づいて、コンピュータの動作原理を「プログラムの制御の流れ」と「データの流れ」という観点から説明したいのですが、これらの「流れ」というものがどうもよく分かりません。 「五大機能」と検索にかけると色々結果が出てくるのですが、制御の流れ・データの流れは単に図で書いてあるだけで、それだけでは理解できません。コンピュータの動作原理について詳しい方、五大機能に基づいて「プログラムの制御の流れ」と「データの流れ」がどうなっているのか教えていただけませんか? ゼミで発表したいのですが、一人ではなかなか難しくて困っています。ご回答宜しくお願い致します。

専門家に質問してみよう