命令語からみるキャッシュとレジスタの違い!

 

こんにちは!

 

 

今回は、

機械語の命令について説明します。 

 

 

 

プログラムは複数の命令から出来ており、

 

難しいプログラムほど、たくさんの命令が

 

複雑に絡み合っています。

 

 

 

機械語を知っていると、

 

 

CPUの基本動作の

 

断然イメージが

 

しやすくなります!

 

 

 

 また、最後まで読んでいただければ、

 

キャッシュとレジスタの違い

 

がはっきりします!

 

 

 

f:id:network-123:20180228220210j:plain

 

 

では説明していきます! 

 

 

 

機械語の命令は、

 

 

命令部(オペコード

アドレス部(オペランド

 

 

に分かれます。

 

 

オペコードは命令の内容

オペランドデータがある場所

レジスタ番号やキャッシュ上のアドレス)

 

 

を示しています。

 

 

 

CPU が計算するには、

 

データがCPUの手元(レジスタ)に

存在する必要があります。

  

 

f:id:network-123:20180226193034p:plain

 

上の機械語の命令は、

"ADD"という足し算の命令です。

 

 

レジスタBとレジスタCを足し算して、

 

その結果をレジスタAに保存します。

 

 

 

 

命令部は、ADDになっていますが、

 

もしこれがSUBなら、

減算(引き算)になります。

 

もしこれがLOADという命令ならば、

下のようになります。 

 

 

f:id:network-123:20180226195814p:plain

データをキャッシュから、

レジスタまで転送するときに使われます。

 

 

 

 

ここで、あなたは

お気づきになられましたでしょうか?

 

 

 

 

ADD(足し算)をするには、

LOADをする必要があります。 

 

※キャッシュからレジスタにデータを転送させて、

手元(レジスタ)に置かないと計算できない

 

 

 

つまり、

 

α=β+γを行うには、

 

 

LOAD  β  B

LOAD  γ  C

ADD    α  β  γ

 

 

という命令を処理しなければなりません。

 

 

 

アドレスB(キャッシュ)にある

データをレジスタβに格納

 

アドレスC(キャッシュ)にある

データをレジスタγに格納

 

レジスタβとレジスタγに格納された

データを足してレジスタαに格納

 

 

という意味になります。

 

 

 

 

今回はここまでです。

 

読んでいただいてありがとうございました。

 

次回もよろしくお願いします。

 

 

 

CPUの動作!CPUは何をしている!?

 

こんにちは!

 

 

 

「結局CPUって、、、

 

何をしているの?」

 

 

 

というあなたの疑問にお答えします!

 

 

f:id:network-123:20180226182104j:plain

 

 

例えば、

 

 

「1+5をしろ!」

 

という命令を与えたとします。

 

 

 

すると、

 

 

確かにCPUは1+5をします!

 

 

 

しかしそれよりも、

 

 

結果に至るまでの過程

 

とても大切です!

 

 

 

 

この過程を知らなければ、

 

あなたは危険信号です

 

 

f:id:network-123:20180226183619p:plain

 

 

 CPUがどのように命令を処理しているかを

 

理解していれば、 

 

”パイプライン制御””も簡単に理解できます。

 

 

 

なぜなら、

 

 

パイプライン制御は、

 

 

CPUの動作に着目し、

 

CPUの命令処理性能を向上させるための技術

 

 

だからです。

 

 

 

あなたは、CPUの基本的な

 

動作を理解する必要があります。

 

 

 

 

 

まずCPUとは何か?

 

 

 

CPUハードウェアです。

 

目に見える物体で、電子回路です。

 

制御装置と演算装置で構成されています。 

 

 

 

私たちは、ソフトウェア(OS)を通して、

 

CPUに何らかの命令を与えます。

 

 

命令を与えられたCPUは

 

高速にその命令を処理します 

 

 

f:id:network-123:20180226183311j:plain

 

 

 

では実際に何を行っているのか?

 

 

CPUの動作は5ステップに分けれます!

 

 

1. 命令を取り出す(フェッチ)

プログラムカウンタの情報をもとに、

命令をキャッシュから命令レジスタに読み込む

 

 

※命令がキャッシュに存在しない場合は、

(メイン)メモリに存在する。

※この段階では、CPUは

まだどのような命令か分かってない。

 

 

2. プログラムカウンタ(PC)の更新

※プログラムカウンタとは、

命令の所在地(アドレス)を保存したもの。

 

これから処理をする命令を取り出しす。

次の命令を取り出せるようにするために、

プログラムカウンタを更新する。

 

 

3. 命令の解読(デコード)

解読するためのものをデコーダーという。

 

 

4. オペランドを読み込む

命令を実行するのに、

必要なデータ(オペランド)を

レジスタから 読み出す。

 

 

5. 命令の実行

 

 

以上がCPUの基本動作です。

 

 

 

※厳密には、命令の内容によって

処理の順番、処理にかかる時間などが異なる。

 

 

 

 

今回はここまでです。

 

読んでいただいてありがとうございました。

 

次回もよろしくお願いいたします。

 

 

 

アルゴリズムの正体!

 

こんにちは!

 

 

 

アルゴリズムって何?」

 

 

 

ってあなたは思ったことありませんか?

 

 

f:id:network-123:20180225104329j:plain

 

 

私は、初めて勉強したとき

 

「何かどっかで聞いたことあるような~」

 

 

って思っただけで、

 

よく分からなかったです。

 

 

 

 

しかし安心してください!

 

 

この記事を読み終えるころには、

 

 

あなたは、

 

 

「なんだそんなことかぁ」と

 

 

 

アルゴリズムの正体

 

 

 

分かってしまいます。

 

 

f:id:network-123:20180225104721j:plain

 

 

アルゴリズムは、

 

 

私たちも日常生活で

 

使っているものなのです!

 

 

 

 

では説明します!

 

 

 

 

まずアルゴリズムとは、

 

 

手順のことです。

  

厳密には、問題を解くための手順です。

 

 

 

 

コンピュータは

 

命令された通りにしか動きません。

  

 

 

また複数のことは同時に出来ず、

 

1つのことしか出来ません。

 

 

 

 

そこで、

 

コンピュータが動く順番をまとめたものが

 

アルゴリズムです!!!

 

 

 

 

 

例えば、

 

 

 

あなたは運転しているとします。

そして今、交差点にさしかかろうとしました。

 

 

 

あなたは、信号が青か赤か判断して、

赤ならば、車を止め、青に変わるのを待ちます。

 

 

 

そして青になったら、あなたは、

歩行者が横断歩道を渡り終えているか確認します。

渡り終えていれば、車を発進させるはずです。

 

 

 

 

この一連の流れを

 

 

 

フローチャート

(アルゴリズムを図に表したもの)

 

 

 

で表すと、このようになります。

 

 

f:id:network-123:20180225102737p:plain

 

 

 

このように、アルゴリズム

 

 

事細かに手順をまとめないといけません。

 

 

 

「簡単でしたでしょ?」

 

 

 

アルゴリズムについては以上です!

 

 

 

 

 

あなたはこの例以外に、

 

無意識にアルゴリズム

 

日常生活で使っています。

 

 

 

他にどんなアルゴリズム

 

あるか考えてみてくださいね!

 

 

 

 

 

今回はここまでです。

 

読んでいただいてありがとうございました。

 

次回もよろしくお願いします。

 

 

 

データ構造!リストと配列の違い!

 

こんにちは!

 

 

 

今回は、データ構造のお話(その2)です

 

"リスト"の説明をします!

 

 

 

 

 

配列とリストの違い

しっかりマスターして、

 

 

 

午後問題の問8を

 

解くための知識を

 

身につけましょう!

 

 

f:id:network-123:20180221210058j:plain

 

 

では前回の確認です。

 

 

 

配列は

 

同じ種類(型)のデータの集まり

 

でしたよね?

 

 

 

 

では、リストとは何でしょうか?

 

 

 

 

リストとは、

 

データとポインタの集まりです。

 

 

 

 

データは異なる種類でも大丈夫です。

 

 

ポインタとは、

データを格納した箱の

アドレス(メモリ上の住所)を格納する箱のこと。

 

 

f:id:network-123:20180221202318p:plain

 

 

 

次にリストの特徴を説明します!

 

 

 

リストは配列と違って添え字がないため、

データのアクセスに時間がかかります。

 

 

 

どういうことかというと、

 

 

例えば、

 

 

5番目のデータにアクセスしようとした場合、

 

 

配列の場合だと、

"[5]"のように直接アクセス出来るのに対し、

 

 

 

リストの場合だと、

先頭から順にポインタを

たどっていく必要があります。

 

 

 

 

時間かかりますよね?

 

f:id:network-123:20180221210044j:plain

 

しかし、リストにも利点があります!

 

 

新しく箱(要素)を追加しようとした場合、

 

 

最後のポインタに、

新しい箱のアドレスを格納するだけで済みます。

 

 

容易に箱の追加が可能なのです!

 

 

 

配列の場合はそうはいきません。

出来なくはないですが、めんどくさいです。

 

 

 

 

 

 

 

最後に、

 

 

リストは配列と違って

物理的に連続になっていません。

 

 

※ ”物理的に連続ではない” とは、

実際に連続して箱がメモリ上に確保されないこと

 

 

 

論理的に連続になっているだけです。

 

 

 

 

 

以上でリストの話は終わりです。

 

読んでいただいてありがとうございました。

 

次回もよろしくお願いします。

 

 

 

データ構造!基本は配列!

 

こんにちは! 

 

 

前回は、

クロック周波数=テンポ

ということをお話しました。

 

 

  

さて今回は、

データの構造のお話(その1)です! 

 

f:id:network-123:20180221010953p:plain

 

 

この知識は

 

午後問題の問8

解くために必須です!!

 

 

 

 

逆にこの知識を知らないと、

 

あなたは

絶対に解けません!!

 

 

 

問8は苦手とする人が多いので、

 

 

ここをしっかり理解すれば、

 

 

あなたは合格に一歩近づけます!

 

 

 

 

 

しっかりついてきてくださいね!

 

 

 

 

 

コンピュータは、大量のデータを扱います 

 

f:id:network-123:20180221011234j:plain

 

 

 

ほとんどのデータは、

 

 

1つの独立したデータではなく、

 

何らか互いに関連性があり、

まとまったデータです。

 

 

 

 

また、データには種類(型)があります!

 

 

文字なのか、数値なのか

数値でも整数なのか、小数点付きなのか

 

 

 

 

 

 

例えば、

 

顧客全員の名前

100人の生徒の国語の点

北海道の1月の気温 の推移

 

 

 

 

 

 

つまり何を言いたいのか?

 

 

 

 

メモリ上にデータを

どのように配置、記憶させるか

データ構造という)によって、

 

 

データを処理する時間などが

変わってきます。

 

 

 

 

 

では実際にどのようなデータ構造があるのか ?

 

 

 

今回は、配列というデータ構造を説明します。

 

  

配列とは

同じ種類のデータの集まりです。 

 

 

配列のイメージはこのようになります。 

 

f:id:network-123:20180221002403p:plain

 

どのようなデータの集まりか

識別するために名前を付けます。

 

 

 

 

 

 

今回は、100人の生徒の

国語の点数を配列に格納したので、

 

 

 

 

"score[100]"と名付けました。

 

 

 

 

添え字の "[100]" は、

用意する箱(要素)の数です

 

 

score[0]~[99]は

その添え字の生徒の点数を表します。 

 

 

 

添え字のスタートは1ではなく、

0からなので注意してください!

 

 

 

 

例えば、出席番号が10番の生徒の点数は、

score[9]に記憶されている数値になります。

 

 

 

 

 

最後に、配列の特徴を説明します!

 

 

 

 

配列はイメージ(上の図)の通り、

物理的に連続してメモリ上に用意されます。

 

 

 

また添え字の値を特定することで、

扱うデータを直接指定できるため

データへのアクセスが速い

 

 

 

要素を後から追加で用意しようとする場合は大変

(最初に決めた要素の数を後から変更するのは難しい)

 

 

 

 

 

次回の"リスト"の説明も

読んでいただければ、

今回の内容はもっと理解が深まります。

 

 

 

 

 

今回はここまでです。

読んでいただいてありがとうございました。

次回もよろしくお願いします。

 

 

 

クロック周波数=テンポ!

 

こんにちは!

 

前回、

今あなたが、勉強しているパーツは何か?

意識するということをお話しました。 

 

 

 

今回は予告通り、

 

クロック周波数のお話をします!

 

 

 

  

このクロック周波数を知ってないと

 

 

あなたは

 

 

 

CPUに関する計算問題を

解けません!

 

 

 

 

 

CPU(プロセッサ)は、

 

”コンピュータの頭脳”

 

って聞いたことありますよね?

 

 

 

f:id:network-123:20180218225746j:plain

 

 

 

このCPU内では、

たくさんの回路が動作しています。

 

 

 

これらの回路が「我先に!」と

周りを無視して、

それぞれが勝手に単独行動を始めると、

コンピュータの誤作動の原因になります。

 

 

 

そこで

 

 

 

みんなでタイミングを合わせて

一斉に動く必要があります。 

 

 

 

このタイミングつまり

テンポのことをクロックと言い、

 

 

 

 

そして、

 

 

(1秒間に)どのくらいのテンポか?”

 

 

を表すのが

 

 

 

クロック周波数です! 

単位は Hz(ヘルツ)

 

 f:id:network-123:20180218233047p:plain

 

ちなみに、

 

 

CPUは1つの命令を処理するのに、 

 

1~複数のクロック必要とします。

 (命令の内容によって異なる)

 

 

つまり、

 

 

クロック周波数が大きいほど

 

CPUは高速に動作します!

 

 

 

 

 

以上です!

 

クロック周波数の概念

分かっていただけたでしょうか?

 

 

 

 

 

 

あと、実際どれくらいの周波数なのか?

 

 

  

あのiPhoneXで使われているCPUの

 

クロック周波数は2.4GHzです。

 

 

f:id:network-123:20180219012304j:plain

 

 

2.4GHzというのは、

 

1秒間24億のクロックを発生させます。

 

 

iPhone8もiPhoneXと同じCPUなので、 

2.4GHzです。

 

 

 

 

では、とっても簡単な問題を

用意したので取り組んでみて下さい!

 

 

 

問)

クロック周波数が2.0GHzのCPUがある。

このCPUが、4クロック必要とする命令を

1秒間に何回実行できるか?

 

 

 

 

 

 

 

 

 

答)

2.0[GHz] ÷ 4 = 5億 

よって、5億回実行できる

 

 

 

 

 

 今回はここまでです。

読んでいただいてありがとうございました。

次回もよろしくお願いします。

 

 

 

コンピュータは分解して考える!

 

こんにちは!

 

基本情報の 

コンピュータ分野(テクノロジ系)を

勉強するときには、コツがあります

 

 

 

これを意識するだけで、

 

 

 

 

 

あなたの理解スピード

 

 

f:id:network-123:20180218103908j:plain

 

 

 

 

全然違います。

 

 

 

 

 

応答時間スループットの違いは何?!

 

 

 

キャッシュ、メモリ、レジスタ

似たような言葉があってややこしい、、、

 

 

 

 

 

 

 

「あーもう、

わけ分かんない!!」

 

 

 

 

 

と、あなたはイライラする必要もなくなります

 

 

f:id:network-123:20180218104038j:plain

 

 

 

そして、 

 

 

 

合格に一歩近づけます!!!

 

 

 

 

 

 

では何か?

 

 

 

 

コンピュータを

パーツごとに分けて考る! 

 

 

 

 

 

「そんだけ?」

 

 

 

と思ったあなた、最後まで読んでください!

 

 

 

まずコンピュータは、

 

f:id:network-123:20180215131315p:plain

 

制御装置

演算装置

記憶装置

出力装置

入力装置

 

の5つの装置で構成されています。

 

 

 ※制御装置と演算装置は、

CPU(プロセッサ)として一体化している。

厳密には記憶装置の一部もCPUに含まれる。

 

 

 

 

では、なぜこれを意識することが大事なのか?

 

 

 

例えば、

 

 

 

(メイン)メモリとキャッシュは、

 

 

同じ記憶するためのもの(記憶装置)です。

 

 

 

しかし、違いがあります。

 

 

 

それは

 

 

 

CPUの内部にあるか外部にあるかです。

 

 

 

キャッシュはCPUの内部にあり、

メモリはCPUの外部にあります。

 

 

 

 コンピュータの頭脳であるCPUは

処理速度が大切なため、

 

 

 

データの読み書き速度は、

 

 

CPUにより近い場所にある

キャッシュの方が速く、

 

CPUから遠い場所にある

メモリ の方が遅い

 

 

回路で出来ています。

 

 

 

 ※現在の技術では、

データの読み書きが速いものを作ろうとすると、

記憶できる量は少なくなってしまう。

 

 

 

 

つまり!

 

 

確かに、”記憶装置”という点は同じです。

 

 

しかし、

 

 

CPUとの関係性をみれば、

その違いが、はっきりしますよね?

 

 

 

 

レジスタもキャッシュと同様に

CPU内部にあります。

 

 

しかし、

 

 

レジスタは記憶装置だと思いわれがちですが、

 

演算装置に分類されます。

 

 

確かにレジスタは一時的に記憶するのですが、

あくまで計算途中の結果を保存する目的です。

 

 

 

キャッシュは、

 

データの読み書き速度の高速化が目的です。

 

 

 

 

 

このように、

 

 

 

 

今あなたは

 

のパーツ

勉強しているか!?

(装置間の関係や、その装置の目的など) 

 

 

  

 

 

を念頭に置いておくだけで、

 

 

 

あなたの勉強効率はアップします

 

 

 

あなたも勉強するときに、

 

”パーツ”

 

を意識して、勉強してください!

 

 

 

 

今回はここまでです。

 

読んでいただいてありがとうございました。

 

次回もよろしくお願いします!