こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

コンピュータ初心者の疑問 CPUについて

こんにちは。
早速ですが質問です。
CPUについてなのですが、私は、これの機能は0と1を処理してるだけで、性能の差は処理の速さだけだと思っています。
しかし、知り合いに、CPUの種類によって処理できるもの、できないものがあると聞いて、頭の中のイメージが湧かなくなってしまいました。
エンジニアの方々がCPUに入力される膨大な信号パターンをどう処理するか設定しているということでしょうか?新しい入力パターンが出る度に設定してるなんて非現実的?っぽいことをしているのでしょうか?
また、0と1の処理以外にしている処理がありましたら教えて下さい。
また、CPUが直に信号のやり取りをしているのはOSですか?メモリですか?
多分コンピュータ構造の概念から間違ってるかもしれないので、どうか正しい情報を教えて下さい。

投稿日時 - 2017-09-22 15:11:43

QNo.9377486

困ってます

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

初心者に分かりやすく言うと、クオーツ時計で例えているのをよく見かけるかと思います。

CPUは、時計で言う所のクオーツです。要するに、振動しているだけでしかありません。今主流のクオーツ時計の1秒は32,768Hzです。

で、その振動数を計測して、「今1秒経った」と計算しているのが、PCで言う所のマザーボードでありBIOS(今はUEFIが主流ですよね)と言うコンピュータープログラムです。

で、時計の場合「今1秒経った」と言う情報だけではダメですよね? 今の時間が分からなければ用をなしていません。良い時計だと、「何月何日何時何分何秒」という表示を液晶なりに表してと思います。

最終的に、人間誰しも分かる形で表す様に、BIOSで計測された数値を元にプログラム組んで、色々情報を液晶へ表す作業をするプログラムが、PCで言う所のOSです。

時計によっては、ストップウォッチがあったり、カウントダウンタイマーがあったりします。そう言う機能が、PCで言う所のアプリケーションとなりますね。

時計の場合、普遍的なのですが、PCの場合その1秒を他の計測にも使いたい、並行して計測したい、もっと早く1秒となって欲しい(言い方が変ですが、0と1の計測と言い換えて貰えると良いかもしれません)となってくると、CPUの構造を変えたり、1秒の定義を変えなければなりません。これが、マザーボードとCPUの特定のセットでないと使えないと言う理屈です。

クオーツ時計も今でこそ、32,768Hzが1秒と言うのが主流ですが、機械式では初期は1振動や2振動が1秒から最盛期では10振動が1秒と言う物も出てきました。クオーツでは、8,192Hzが1秒と言う時代がありました。

ですので、8,192Hzが1秒とカウントしているマザボとBIOSに、32,768Hzのモノを使うと「?」な感じになると思いませんか? 簡単にさらっと言うと、コンピューターと言うのはそう言う感じです。

OSはそう言う単純にカウントしているものを基準として作られているので、32bit用CPUと64bit用CPUの様にCPUの振動数などが違ってくると、そのまま上の情報全て狂ってくる(計算できない)のでそれぞれ対応した物を使わなければならないと言う話になってくるわけです。

投稿日時 - 2017-09-22 16:19:07

補足

回答ありがとうございます。
この説明から私は、CPU基準で周辺のソフトや機器の仕様が決まるの?
というイメージを持ちましたが、違いますか?
違うとしたら、コンピュータは何を基準に開発、発展するモノなのかを宜しければお教えいただけませんか?

投稿日時 - 2017-09-27 13:25:31

お礼

追加質問も合わせて、イメージがしやすい回答で助かりました。他の皆様も本当にありがとうございました。BAに非常に悩みましたが、周波数を例に説明して下さり、CPUが基準となっていることに気付けた事にとてもスッキリしましたので、こちらの投稿とさせて頂きました。

投稿日時 - 2017-10-03 18:35:38

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(12)

ANo.12

CPUでは『たし算』しか出来ません。
四則演算する為に『マイクロコード』が本体に搭載されてます。
マイクロコードは『機械語』で書かれています。
マイクロコードにはデータ転送機能のコードも有ります。
OS&アプリでは『コンパイラ』ツールを使い言語を機械語に変換します。
言語には直接変換する物と『中間言語』に変換する2種類有り、
BASICは後者で速度が遅いけど、使いやすいです。
*visualBASICはこれの後継

日本で最初に電卓を設計した会社が製造を依頼したのが、インテルで
『マイクロコード』と言う概念が提案されたのが、
今のパソコンCPUの始まり

*インテルのCPUは『ハード割込み』の関係でリアルタイム処理は
長らく困難でした。
対抗していた68CPUは『ソフトウエア割込み』でリアルタイム機器に使われてました。

投稿日時 - 2017-09-27 15:25:11

補足

回答ありがとうございます。
頭がバグりそうです。。。
これからマイクロコードの勉強します。

あの、アプリやOSを使用した際、コンパイル作業って自動で行われていると思っていいんでしょうか?
それともソフト開発等でしかされないものだからコンパイルは通常使用では発生しないものなのでしょうか?

割込みもこれから勉強します。現時点では全くわかりません。

宜しくお願いします。

投稿日時 - 2017-09-27 15:43:48

ANo.11

> 追加の質問になってしまうのですが、2進数になるタイミングはどこでしょうか?
> 他のサイトでコンパイラされた例を見ていると、0と1以外の文字も表記されています。
> 私は、コンパイルすると0と1の表記しかなくなると思っていたので、これもスッキリしたくなりました。

0と1の羅列では表示に膨大なスペースが必要ですし可読性が良くないので通常は16進数(0~9a~f)で人間に見せます。(見せ方の問題です)
なので、プログラムであれば基本的にはコンパイルした時点でマシン語と呼ばれるCPUが直接扱えるデータに変換されていて中身は0と1の羅列と同じですが、人間がみた時に少しでも見やすくする為に16進数で表示する場合が多いです。

CPUは0と1で動作してるとは言っても1ビット単位で処理していては効率が悪いので、最近のCPUであれば64ビットを一塊として扱います。(数年前までは32ビットが主流でしたが)
なので、32ビットなり64ビット単位で区切って見やすくする工夫をしているのです。
16進数を使って表すのは極々初期のCPUは4ビットが処理1回分のデータで、4ビットで表す事ができる 0000 ~ 1111 は10進数にすると 0 ~ 15 となり16進数を用いると 0 ~ f で表す事が出来るので、1桁で4ビットを表せる16進数が使われています。

投稿日時 - 2017-09-27 14:54:03

お礼

0と1で表示されないのですね。ちょっと見てみたかったですが、まぁ後にします。
的確な回答ありがとうございました。

投稿日時 - 2017-09-27 19:43:16

ANo.10

>この説明から私は、CPU基準で周辺のソフトや機器の仕様が決まるの?
>というイメージを持ちましたが、違いますか?


その通りですよ。家庭用マザーボードを例にすると、「Intel 100 Series Z170 Express チップセット」と言う規格の名称を聞いたことがあるかと思います。これが何を表しているかというと、IntelはCPUでお馴染みの会社ですよね? Intelが、対象となるCPUで使える規格のマザーボードの設計もしていると言う事です。その設計を元に、MSIやASUS、ASRock、GIGABYTEなどがオリジナルの機能を盛り込んだりしてマザーボードを製造・販売しています。逆に、Core i7-7700を採用したいなら、対象のチップセットを採用したマザーボードでなければなりません。

マザーボードとCPUの関係はソケット(差込口)だけではないのです。AMDは、Intelに比べて家庭向け市場は小さいですので、コスト(開発コスト、製造コストなど)の関係でCPUファミリーが違ってもソケットが同じであるシリーズがありますが、これもよくマザーボードの仕様を見なければソケット一緒でも起動しない物が存在していたりします。

逆説的に言うなら、Windows 10を動かしたいなら、それに対応するCPUとマザーボードを選択しなければなりません。Windows 10の仕様とシステム要件を見てもらえれば分かるように、どの様な条件下でもWindows 10は使えると言うことではないのです。家庭用PCでない分野、例えば無線LANもCPUがありメモリがありOSが搭載されているわけですが、その機器にWindows OSをインストールして使おうと思っても困難を極めます。やろうと思えば出来ない話ではない(世の中、Windows 95をApple Watchにインストールして起動することに成功させた猛者もいるので不可能な話でもない)でしょうが、一般人にはまず無理でしょう。

制約の多い組込系(カーナビなど)では、根幹部分が決まってからOSなりの仕様を決めていきます。正確には、製造したい商品のコンセプトがあるわけですが、そのコンセプトにそう形で総合的に判断する訳です。しかしながら、まず最初はCPUとマザーボードや各メモリ関係が決まらなければソフトウェアを開発できないので、それらを一番に決定する必要があります。


分かりやすく任天堂のファミコンを例に上げましょう。ファミコンに今流行のニンテンドースイッチのOSを書き込もうと思っても不可能なはずですし、ニンテンドースイッチのソフトをファミコンのカセットに書き込んでも、ファミコンは認識しないでしょう。ファミコンにはファミコンの仕様があり、その仕様にそったゲーム開発が必須です。ファミコンミニと言う物が発売されましたが、オリジナルのファミコンとは違う機械設計です。ですので、ファミコンミニで動く様にゲームソフトの中身を改変する作業(移植作業)が必要です。

最近ではプラットフォームフリーなゲーム(PS4でもXbox OneでもPCでも同タイトル販売)が増えてきていますが、PS4のソフトをPCでは起動できませんしその逆もまたしかりです。同タイトルであっても、プラットフォーム別の設計が必要となります。ですので、将来プレイステーション6だとか10だとか出てくるでしょうが、先走ってプレイステーション10で動くゲームソフトを作っても、プレイステーション10の仕様が想像と違っていれば動きません。逆に言うならプレイステーション10の仕様に沿ったゲーム開発が必要となるのです。

投稿日時 - 2017-09-27 14:41:57

お礼

ありがとうございます。
モヤモヤの1つが解消されました。
実際の製品で説明して下さり、とてもわかり易かったです。

投稿日時 - 2017-09-27 18:28:22

ANo.9

 No.6 teppou です。補足コメントに回答します。
 >は、CPU単体のことであり、マザーボード等との組合せや相性の話ではないという認識であっておりますか?
 >上記の回答者様は、マザーボード等は、CPUのビット数等の情報が設定されているので、CPUはコンピュータなら何にでも使えるわけでないと仰られているので、気になりました。
 私の回答は、ほとんど CPU 単体についてですが、マザーボードとの関係は以下のようになります。
 マザーボードは基本的には CPU ごとに設計します。
 同一メーカー(例えばインテル)の CPU であれば、ある範囲で差し替えができますし、別ボードを設計するにしても変更点は少なくて済みます
 メーカーもそのように設計してシリーズ化しています。
 同一メーカーであれ別メーカーであれ、設計コンセプトの違う CPU であれば、マザーボードは全く別設計になります。
 こういうサイトで質問を繰り返すより下記のような本を読んでみてはいかがでしょうか。
 http://www.shuwasystem.co.jp/products/7980html/0858.html

投稿日時 - 2017-09-27 14:25:15

お礼

ありがとうございます。
お手を煩わせてしまい申し訳ございません。
時間をみつけて本屋さんへ行こうと思います。
ご協力に感謝します!

投稿日時 - 2017-09-27 15:12:03

ANo.8

まず、CPUとしては、0と1で扱われていること自体には変わりありません。

ただし、ビット数というのがあります。
このビット数とは、同時に扱う0と1の数です。
小型のものなら4ビット、昔のパソコンは8ビット、現在のものだと64ビットと一度に扱う0と1の数が違うわけです。

この0と1の組み合わせのものは、データだけでなく、CPUの処理命令もあるわけです。
64ビットの0と1で書かれた命令のコマンドを、32ビットで読み込んで動かす事はできません。(そもそも読めません。)
また、64ビット幅用のデータを32ビットで読み込むこともできないわけです。

なので、ビット数が大きなもの用に作られた命令プログラムは、下のビット数のCPUでは動かないわけです。


>CPUが直に信号のやり取りをしているのはOSですか?メモリですか?

OSというのは、部品の名前ではありません。
CPUが動作するためのプログラムのことを指します。
このプログラムは、CPUのアドレス空間状に展開されるものです。

よく勘違いされているのですが、CPUから見て、メモリだのHDDだのというのは、実は全く関係ありません。
CPUからは、すべてアドレスの先に、データを置いたりそこから受け取る。と言う考え方しかありません。
それがCPUからの見た目になります。
なのでROMは、書き込みができないだけで、あとは全てRAMと同じような扱いでしかありません。

外部アクセスなどは、そこへ書いておくと、勝手に書き込まれると言うもの、
そこを読みに行くと、外からのデータが置かれているので読み取る。と言うだけのものが、CPUから見た、ものになります。


ただ、最近のCPUは、高集積化され、CPUだけでなく、キャッシュメモリーを搭載していたり、グラフィックチプやオーディオチップなども搭載していたりと、復号化されているものもありますので、純粋なCPUとは言えなくなっているものが多いですけどね。

投稿日時 - 2017-09-22 18:38:56

補足

CPU目線の説明ありがとうございます。
ちょっとイメージできた気がします。

CPUがどう制御しているかでなく、OSに出された命令をせっせこ処理している感じでしょうか?

投稿日時 - 2017-09-27 13:59:21

ANo.7

聞く人それぞれの説明方法があるので、色々違うことを説明されると迷っちゃいますね。
私は別の角度から説明してみます。 

処理速度もCPUによって違いますが、他にも色々違っていることがあります。だから世の中には種類が多いし、時代と共に製造技術も上がって、過去にはできなかったものもできるようになってくるので、毎年のように新製品がでます。

大きな違いは以下のようなところです。端的に箇条書きにしてみます。

(1)0(信号なし)や1(信号あり)を何桁一度に処理できるかによって、4bit-CPU、8bit-CPU、16bit-CPU、32bit-CPUなどがあります。私がコンピューターに携わった最初の頃は4bit-CPUでしたが、現主流は64bit-CPUです。

(2)信号を処理したり計算したりするために、内部にレジスターとゆう、メモリーを持っていますが、その数がCPUの種類で違います。

(3)パソコンには時計の機能がありますが、どんな時間のかかる計算などをしている時でも時計は止められません。1/1000秒単位で時間がきたら、今の処理を瞬間的に中断して時計を加算してからまた、処理の続きをします。その動作を「割り込み処理」と言いますが、それがいくつできるかの数も違います。

(4)計算以外の入出力制御(インターフェース)の処理数なども違います。

それらの違いで処理速度も違うし、やれること、やれないこと、得意なこと、不得意なことなども違ってきます。

CPUは、上述のように計算や0/1などの信号処理をすれためのレジスターやメモリーを持っているだけなので、なにもできません。どのメモリーやレジスターにどんな信号を読み込んで、どのように動かして計算したりインターフェースの制御をするのかを決めているのがプログラムです。
そのプログラムの一番基本的なプログラムのことを「OS=Operating Syrtem」と言いますが、OSも年々技術が上がってバージョンアップされています。

投稿日時 - 2017-09-22 17:59:58

ANo.6

 >私は、これの機能は0と1を処理してるだけで、性能の差は処理の速さだけだと思っています。
 基本的にはその通りなのですが、処理速度を上げながら消費電力を抑える(発熱を抑える)ということを実現しようとすると、ハードの工夫が必要になってきます。
 周辺 LSI を CPU に組み込んだりとか、命令セットをシンプルにするか複雑にするかとか
 初心者には、分かりにくいかもしれませんがサイトを貼っておきます。
 知らない言葉はリンクをたどって何度も読んでみてください。
 
 CISCとRISC
 http://ednjapan.com/edn/articles/1404/07/news001.html
 その他いろいろ CPU の設計コンセプトがあります。
 下記サイトも読んでみてください。
 マイクロアーキテクチャ
 https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3
 Coreマイクロアーキテクチャ
 https://ja.wikipedia.org/wiki/Core%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3
 >CPUの種類によって処理できるもの、できないものがあると聞いて、
 これは CPU 以外のハードとの兼ね合いもありますが、CPU そのものに出来ること出来ないことは通常はないはずです。
 ただプログラミングが非常にめんどうになると言ったことはあるかもしれません。
 

投稿日時 - 2017-09-22 17:45:58

補足

回答ありがとうございます。
最後の部分
「これは CPU 以外のハードとの兼ね合いもありますが、CPU そのものに出来ること出来ないことは通常はないはずです。
 ただプログラミングが非常にめんどうになると言ったことはあるかもしれません。」
は、CPU単体のことであり、マザーボード等との組合せや相性の話ではないという認識であっておりますか?
上記の回答者様は、マザーボード等は、CPUのビット数等の情報が設定されているので、CPUはコンピュータなら何にでも使えるわけでないと仰られているので、気になりました。
いかがでしょうか。宜しくお願いします。

投稿日時 - 2017-09-27 13:39:58

ANo.5

CPUは電気のOn/Offで計算をするので、基本的には 0 と 1 を処理するだけです。

では 0 と 1 でどんな処理をするのかと言う事になります。
極々単純なのは足し算と引き算と言う事になります。
この足し算や引き算を命令と呼びます。
足し算と引き算の命令しかないCPUで掛け算や割り算をしようとすると、足し算と引き算をひたすら繰り返すプログラムが必要になり時間が掛かります。
そこでCPUに掛け算や割り算を直接処理できる命令を追加すると、1回の処理で掛け算や割り算ができるようになります。
このようにして、CPUは1つの命令でで処理できる計算手法を増やす事で高性能化させて来ました。
命令の種類はCPUによって異なるので、1つの命令で処理できる機能はCPUによって異なるという事になります。
1つの命令で処理できない機能はプログラムで他の命令の組合せに置き換えて時間を掛けて処理する事になります。

CPUに入力される信号パターンをどう処理するかを指定するのがプログラムです。
しかし、処理内容が複雑になり、CPUの命令の種類が複雑化する中で全ての処理をCPUの命令で直接プログラムするのは不可能なので、プログラミング言語と呼ばれる人間が分かりやすい書式でプログラムを書き、それをコンパイラやインタプリタと呼ばれるプログラミング言語のコードからCPUの命令に置き換えるソフトウェアを使ってCPUが処理できる形に変換しています。
CPUメーカーはCPUの種類(ある程度グループ化された種類)毎にコンパイラを提供しているので、通常はそれらを使います。

CPUが直接信号のやりとりをするのはメモリです。
OSはメモリ上に存在するデータとしてCPUは認識します。

投稿日時 - 2017-09-22 16:37:10

補足

回答ありがとうございます。
追加の質問になってしまうのですが、2進数になるタイミングはどこでしょうか?
他のサイトでコンパイラされた例を見ていると、0と1以外の文字も表記されています。
私は、コンパイルすると0と1の表記しかなくなると思っていたので、これもスッキリしたくなりました。
どうか、教えて下さい。

投稿日時 - 2017-09-27 13:30:52

ANo.3

これまで実用化されているコンピューターに使われているCPUは0と1を処理しているだけです。それだけで基本的にはどんな問題でも(時間をかければ)解けると言われています。それに対して、最近では量子コンピューターと言う、これまでのコンピューターとは全く方式が違うものがでてきて実用化が進んでいます。

まず、従来のCPUについて。通常CPU(Central Processing Unit: 中央演算装置)と言うと、パソコンなどでメインで使われる頭脳。それに対して、数学的な計算に特化したFPU(Floating Point Processing Unit: 浮動小数点演算装置)や、画像処理、描画に特化したGPU (Graphic Processing Unit: 画像処理装置)などもあり、それぞれCPUの中に組み込まれたりしてパソコン、スマホなどで使われています。計算の種類の得意不得意の違いだけで、考え方は1と0の組み合わせで処理をしていくので、膨大な時間さえかければCPUでもFPUやGPUと同じことはできます。人間で言えば、大学で一般教養を学んだ人と、芸術を学んだ人と数学を学んだ人でそれぞれ専門性、得手不得手が違うと言うのと似ています。そのことをCPUの種類によって処理できることとできないことがあると言う言い方をしたとしたら、事実上正しいと言えます。いくら元の仕組みが同じとは言え、一般教養しかやっていない(CPU)に、いきなり展覧会に出すような画をかけ(GPU)と言っても、高度な数学の算術を解けと言っても(FPU)、不可能と言って良いと思います。
ただ、人間の仕組みが同じように、CPU, GPU, FPUの元の理論は同じです。

それを覆すのが量子コンピューター。何が違うかと言うと、0, 1だけじゃなくていっぺんに複数の値を取り扱うことができます。例えば、ある人が、東京、名古屋、京都、大阪、福岡、札幌のどこにいるかと言う回答を出す課題があったとして、これまでのコンピューターだと、まず東京にいるかどうか調べていなければ名古屋... と計算していきます。それに対して量子コンピューターは、それぞれの都市にある人がいる可能性を一般に想定して、一気に京都にいるとか答えを出します。まだ実用化と途上とは言え、完成すると従来型に比べてとてつもなく高速です。またプログラミングも従来型とは全く考え方が異なります。そのことを、種類によってできることできないことがあると言うとすれば、やはりそれも正しいし、でも圧倒的な性能の違いと言う事もできます。

投稿日時 - 2017-09-22 15:47:46

ANo.2

0と1というのはデジタル処理の最小単位で「ビット」と呼びます。

そしてCPUではビット単位で処理していたのでは効率的ではないため8ビットとか16ビットという単位でまとめて処理します。
これが「8ビットCPU」とか「32ビットCPU」と呼ばれる主な理由。

一般的ではありませんが「データサイズ」とか「データ幅」とも呼ばれることもあり、この幅が広いほど一度に処理できる情報が多いということで処理速度も高くなります。
※同じアーキテクチャで同じ動作速度の場合。

外見的にはCPUについている沢山の「足」のなかにデータのビットを受け渡しするための足があるのですが、それが8本とか32本とか64本になるわけです。
わかりやすく4ビットCPUのIntel 4004のピン配置図をみてください。
https://ja.wikipedia.org/wiki/Intel_4004


CPUの種類によって処理できるできないというのは、話の流れがわからないので違っているかもしれませんが、アーキテクチャの違いで実行形式のプログラムが実行できないという意味かもしれません。

CPUにはCPU独自の命令があり、IntelのCPUはx86系と呼ばれるアーキテクチャを採用しています。
これに対しPowerPCというCPUもあります。
x86とPowerPCは互換性がないため、x86用のソフトウェアはPowerPCを採用したパソコンでは動かせません。

もっとこ品ポン的なところを言うとCISC系とRISC系と言うものがあります。
https://ja.wikipedia.org/wiki/CISC
https://ja.wikipedia.org/wiki/RISC


以上が「基礎」になります。

投稿日時 - 2017-09-22 15:36:51

お礼

回答ありがとうございます。
それぞれのCPUがどう処理するかが違うのですかね?
これが基礎なんですね。世界って広いですね。。。笑
ありがとうございました。

投稿日時 - 2017-09-27 13:20:19

ANo.1

0と1の処理以外にしている処理はありません。
また、CPUが直に信号のやり取りをしているのはOSもメモリもです。

投稿日時 - 2017-09-22 15:26:43