コンピューターはどのように機能しますか?


40

私は何年もの間コンピューターのオタクです。私はかなりの数の言語でプログラミングでき、それらを構築することもできます。先日、私は仲間と座って、コンピューターが実際に電気を取り込んでそれを処理する方法を尋ねましたが、私たちはそれを理解できませんでした。

つまり、コンピューターはどのように一定の電気の流れを取り、それを1と0に変えてから、実際にそれらの1と0で何かをして、15秒間点灯させるのですか?

私はゲート(AND、OR、NOR、NAND、NOT)とダイオード抵抗器トランジスタについて少し理解していますが、これは本当の素人の言葉で説明するのに最適な場所だと思いました!

誰かが私を正しい方向に向けたり、簡単な説明をしてもらえますか?


8
「バクテリアはどのように機能するのか?」と尋ねることもできます。これは非常に広範な質問です。単純なプロセッサアーキテクチャ(MIPSなど。クラスでこれを教えられた)を見て、そこから上下に作業することをお勧めします。途中で直面する質問は、おそらくこれよりもStack Exchangeにはるかに適しています。
ラファエル

3
私はバクテリアがどのように機能するかを知っています、そのコンピュータは私が笑わない
クリスチャン

14
エルフ。小さな魔法のエルフ。
JeffE


1
コンピューターが実際に最低レベルでどのように機能するかを学ぶ最良の方法は、FPGA上で、またはナンドゲートから手動で単純なマイクロコントローラーを設計することです。「コンピュータアーキテクチャ」クラスでそれをやったことがあり、本当に目を見張るものでした。すべてを最小限に抑え、追加、ビット操作、条件付きジャンプを備えた4ビットコントローラーを設計すれば、それほど難しくありません。または、より単純な、単純化されたチューリングマシンを実装するハードウェア。ええと、この突起は私にアイデアを与えました:チューリングマシンがどのように機能するかを学びます。それはあなたに良い洞察を与えます。
-vsz

回答:


47

これは簡単な答えを持たない広範な質問です。これは、銅線に沿って電子が揺らぐことから、FirefoxでWebサイトをレンダリングするまでの道のりです。下から上に概要を説明し、適切な調査対象を示します。

エンコード番号

基本的な動機は、算術演算を行う場合のように、物事を計算することです¹。最初に確認することは、数値の表現方法です。10進数または3進数を使用する多くのアプローチがあり、8進数システムでさえも考えていますが、最終的には2進数が勝ちました。これで、2つの値を扱うデバイスを作成する必要があることがわかりました。それらをとと呼びましょう。101

バイナリで数値をエンコードする方法は複数あることに注意してください。最初のプロセッサを構築した後、特定の方法で物事を行うことの利点を認識します。一般的な例は、2の補数IEEEのfloatです。手始めに、単純な自然数に制限してください。

ゲイツ

バイナリエンコーディングを使用するとします。小学校での加算をどのように学んだかを考え、2進数についても同じことを書き留めてください。結局のところ、ブール代数の構成要素はすでに存在しています。論理ゲートを使用して基本的な加算器(およびその他の算術関数)を簡単に構築できます。

このようなゲートを構築する方法は、コンピューターサイエンスの範囲外です。電気工学は、チューブトランジスタなどを使用した複数のソリューションを提供しています。これに関する質問については、電気工学スタック交換向かいます。

時計と状態

すべてのゲートが同等に高速であるわけではなく、計算のすべての部分に同じ数のゲートがあるわけではありません。したがって、個々の操作が互いに追い越さないように特別な注意を払う必要があります。グローバルクロックを使用すると便利です。与えられたゲートのネットワークの結果は、サイクルの終了時の出力ワイヤの状態です(ゲートが個々の最終状態に向かってカスケードしている間に大きく変化する可能性があります)。

つまり、1つのサイクルの結果は、次のサイクルが始まるまで保存する必要がある場合があります(ループを配線する場合など)。さまざまな効果を得るために使用できる基本的な要素がいくつかあり、それらはすべてゲートから構築されます。いくつかはフリップフロップと呼ばれます。これらはまた、必要な数のクロックサイクルの数値を格納するレジスタ、要素を構築するためにも使用されます。

アーキテクチャとコマンド

これで、無数のデザインを選択できます。プロセッサはどのような算術演算を提供しますか?コマンドはどのように見えますか?初期の形式が他の設計と比較して簡単なMIPSアーキテクチャを調べることは教育的かもしれません。計画を見てください:

MIPSシングルステージ
http://ube.ege.edu.tr/~erciyes/CENG311からのオリジナル

基本的には、コマンド、レジスタのセット、ALU、およびコントロールの取得と分解です。コマンドは、どのALU演算を、どのオペランド(保持されているレジスタの数)で実行するか、プログラムカウンタ²の操作方法、またはメモリから/にロード/ストアするレジスタ³をエンコードします³。

さらなる考慮事項

これで、メモリを構築する方法とコマンドを供給する方法を理解したと仮定して、現代的な意味で動作するプロセッサができました。現代のマシンに向かう途中で、多くの選択を行わなければなりません。ここに幾つかあります:

代替案

上記は、歴史がどうなったかによって大きく影響されます。心の異なる別の世界では、コンピューターの動作が異なる場合があります。実際、計算モデルはたくさんありますが、それらの多くは、多くの場合、実際のマシンの抽象化として役立つという利点があります。有効にするためのある方法私たちの脳の仕事、模倣しようとする試みもあり、神経コンピューティングを、より一般的に利用するために問題解決や自然の中で観察された情報記憶戦略、最も顕著にDNA量子コンピューティングは。

ですから、おそらく(願わくば)上記の情報は、50年または100年後のすべての古代史です。


  1. 今日私たちがコンピューターで行っているすべての素晴らしいことは、プロセッサーが1つずつ実行する多くの小さな算術タスクに分けられます。
  2. モデルでプログラムが制御フローを操作できる場合、これはプロセッサが次の命令を取得するメモリアドレスになります。また、テープなどの固定された命令セットのみを読み取るマシンを想像することもできます。実際、初期の実装はそれを行いました。ジャンプなしはループなしを意味しました。プログラムは、データに応じて完全に展開/展開された一連の命令でした。明らかに、複数の入力データに同じプログラムを使用できる方がより強力です。
  3. メモリがあると仮定します。プロセッサは正常に機能しますが、一度に処理できるのは非常に多くの値のみです。初期のコンピューターはテープからすべてのデータを読み取り、レジスターに保管していました。私たちが今日知っているように、メモリはなく、書き込み可能な永続ストレージはありませんでした。

うわー!それは拍手に値する。それは素晴らしい読み物でした。共有していただきありがとうございます。確かに何かを学びました。それを読んだ後、私が知りたいのは、電気を物理的に制御する方法の観点から、電気工学の基礎であると思います。今日は少し後で同じグループに同じ質問を投稿します。ありがとうございました!
クリスチャン

1
「機械と話す」部分を含めるべきだと思いました。つまり、人間が効率的に作業できる言語を設計し、それを(コンパイラを使用して)指定した命令セットに変換できます。これらはコンピューターサイエンスの中心的なトピックですが、私の答えの素材はほとんどコンピューターエンジニアリングです。
ラファエル

それは簡単な答えではないと思います。ある日、マザーボードや携帯電話のようなものを構築するコンピューターエンジニアに、基本がどのように機能するかを支払います。つまり、コンピューターが実際に5秒間ライトを計算またはオンにしてからオフにする方法です。スイッチとコンデンサに関係があると思います。
クリスチャン14

@Christianお金を節約したい場合は、トランジスターを含むEE実験ボックス(子供用のものなど)の購入を検討してください。通常、照明の切り替えや小さな加算器の構築が含まれます。(再び、電気工学の人々はおそらくもっと知っているでしょう。)
ラファエル

25

全体像はかなり複雑です。電圧の上に高レベルの抽象化を集合的に実装する多くのレイヤーが互いに積み重ねられています。特に過去50年間でコンピューターのハードウェアとソフトウェアが劇的に進化したことを考えると、すべてがどのように組み合わされるかについての簡単な説明はありません。

すべてがどのように組み立てられているかを知りたい場合は、NANDゲートから始まり、コンパイラーとオペレーティングシステムの上にTetrisの実用的な実装を徐々に構築する本、The Elements of Computing Systemsをご覧ください。あなたも構築します。コンピューターの各部分は前のものに基づいて構築されているため、すべてがどのように機能するかを確認できます。


それは完璧な出発点のように聞こえます。そこから始まります。ありがとうございました:)
クリスチャン

2
Charles PetzoldによるCODEを読むこともお勧めします。
イバコス

7

ポッドキャストのセキュリティが今!基本原理から始めて、コンピューターの動作に関するシリーズを行いました。

  • 233-コンピューターを設計しましょう(パート1)
  • 235-機械語
  • 237-インダイレクション:ポインターの力(技術的にはシリーズの一部ではありません)
  • 239 -スタック、レジスタ&再帰
  • 241-ハードウェア割り込み
  • 247 - 「マルチ」-verse
  • 250-オペレーティングシステム
  • 252 -RISCyビジネス
  • 254-スピードのために行うこと

数字のギャップは、他のすべてのエピソードがリスナーフィードバックエピソードであるため、それらも視聴したい場合があるためです。また、241から247の間に、CAにルート証明書の提供を強いる国に関する当時のニュース速報により、SSLに関するいくつかのエピソードを行いました。

EPも。248は犬を殺さない「ポータブルドッグキラー」ですが、スティーブが子供の頃に自分で作ったソニックビームの武器で、隣の犬にフェンスを駆け抜けて歩道の人々を攻撃しないように教えます。 。


面白い!共有していただきありがとうございます。あとで見てみます。
クリスチャン

4

コンピュータがで(私たちはその後、1と0と解釈)エネルギー勾配を操作することによって動作し、一貫した定義された方法。コンピューターを定義するのは一貫性であり、異なるプロセッサーを分離するのは定義です。

また、2つの論理ゲート(OR、およびAND)だけで、汎用コンピューターを構築するのに十分なビルディングブロックについて学習します。Danny HillisとTinkertoyコンピューターも参照してください。


つまり、常に勝利という特に事実TinkerToy、程度のintersting読み取りでした(!science20.com/brain_candyfeed_your_mind/...
クリスチャン

しかし、コンピューターがどのように「考えている」か、つまり、前に与えられた次の答えを見つけるためにすべての組み合わせとメカニズムを与えることによって、私は良い洞察を私に与えますが、実際にコンピューターを構築する方法の私の元の質問には答えません。基本的なビット(トランジスタ、抵抗器、コンデンサ、ゲートなど)を購入するために地元の電気ハードウェアストア(すべてが揃っている)に行き、それらを構成して、非常に基本的なコンピューターが必要な場合、どうすればよいでしょうか?結局のところ、最初のコンピューターはビットとワイヤーを備えた倉庫のサイズだったので、それは可能でなければなりません!
クリスチャン

@クリスチャン:ハハ、オーケー、基本的なメモリストレージ用にいくつかの基本的な論理ゲート(AND / OR / NOT)を作成し、2つの4ビット数を追加できる場合があります。

いくつかのフリップフロップがあります!実際には2つのペア。
クリスチャン

3

コンピューターは大規模な同期論理システムです。つまり、

  • 0/1
  • コヒーレンスを確保するために、すべての信号が個別の瞬間にサンプリングされるように(非常に高速な)クロックで動作します。

0/1

コンピューターに電力が供給されている限り(RAM、膨大な量)、情報を保持するための特殊な回路を備えています。バイナリ算術を実行するための特殊な回路があります(実際には、ビットはグループで処理されます-通常は8の倍数で-集合的に整数を表します)。また、整数以外のメモリアドレスに基づいた特別なルーティング機能を備えています。

最後になりましたが、最近のコンピューターにはRAMに格納されたプログラムもあります。RAMは、整数としてコード化された命令のリストで、順次実行されます。

あなたのシナリオでは、経過時間がRAMのどこかに保存され、プログラムが指示する実装を考えることができます

  • 経過時間値を取得し、
  • 加算器でインクリメントし、
  • コンパレータで事前に定義された遅延と比較します。
  • 不等式(つまり「ループ」)の場合は、開始プログラムアドレスに戻ります。
  • それ以外の場合は、RAMではなく外部スイッチに送られる特別な信号を設定します。

これらのすべての要素は現在高度に洗練されており、この非常に簡単な概要のすべての文は説明のに値することに注意してください。


-1

遅延機能を実行したり、バイナリデータを10進数データまたは信号強度に変換するには、いくつかの方法があります。値「15」を入力すると、コンピューターは画面に数値15のビットマップイメージを表示します。これは実際にはバイナリ値であり、現時点ではキーボードのバイナリコードもCPUに送信されます。データを解析し、コードをALU(算術論理ユニット)処理ユニットに変換して、DACチップへのパルスに変換します。アナログ信号は現在、フリップフロップ回路の周波数(khzからhzまでの周波数)を制御しています。これで、周波数出力がRAMに送られ、CPUがRAMを読み取って、データが「1111」の場合に一致させます。それで4秒です。


これがどのように質問に答えるかはわかりません。
ユヴァルフィルマス

コンピューターの点滅が15秒間どのようにつながったかを尋ねたことがわかります。また、コンピューターがループで使用する2番目の値を作成する方法を説明します。
Lan ...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.