読むだけでいい基本情報技術者試験対策6:命令の実行過程その1
今回からは、CPUとメモリがどのように命令を実行していくのかを見ていきます。ハードウェアの勉強の核心はここにあるので、このへんはよく勉強しておくべきでしょう。
コンピュータには大きく5つの装置がありそれは、制御装置、演算装置、記憶装置、入力装置、出力装置です。後者2つ、入力装置と出力装置はその前の3つの装置によって処理された情報を「単に入力する・出力する」だけの装置で、処理そのものに関与していません、つまりオマケみたいなもんです。(重要な部品ですが。)
そこで、CPUと記憶装置との間のやり取り、つまりプログラム(命令)を実行していく過程に絞って考えていくことで処理の過程がスッキリ見えてきます。
まず、命令が記憶装置とCPUの中をどのように行き来しているのかを考えてみましょう。これは命令実行サイクルと呼ばれるもので、次の6段階に分かれています。
①まず、命令を受けるところから始まります。これは命令取得または命令フェッチと呼ばれるものです。命令は命令レジスタで示されます。この命令レジスタは中身が命令部とアドレス部(オペラント部)という2つの区画に分かれています。この2つの区画が合わさって命令文、即ち命令レジスタを構成しています。命令アドレスレジスタは実行すべき命令のアドレスを保持する役割を持っています。
②次に、命令レジスタの命令部を取り出してデコード(解読)を行います。コンピュータが命令を理解する過程です。
③一方、命令レジスタのアドレス部も処理されます。アドレス部はアドレスレジスタに送られます。アドレスレジスタは実行に必要なデータのアドレスや、実行結果を格納するアドレスをメインメモリに指示します。これは実行アドレス計算と呼ばれる過程です。
④③で演算に必要な情報を入れておくアドレスを計算したため、これを演算装置に送ります。これはオペラント取得といいます。
⑤演算結果が③で計算した演算結果を格納しておくアドレスをもとに、再びメインメモリに格納されます。
流れを図式化すると
という感じですね。
さて、少し前にレジスタの説明をしたとき、まだ種類があると言いましたが、その説明をここでしていきます。
復習も兼ねて、命令レジスタは主記憶から取り出された命令を格納するものでしたね。この流れを掴んだ跡なら簡単に理解できると思います。そして命令アドレスレジスタは実行する命令のアドレスを保持しておくところでしたね。プログラムカウンタとも言います。
インデックスレジスタ(指標レジスタ)とは、アドレス指定に用いるアドレスの値を修飾するための増分値を保持するレジスタです。
ベースレジスタ(基底レジスタ)とは、アドレス指定に用いるアドレスの値に加えられる基準のアドレス値を保持するレジスタです。
アキュムレータとは、非演算数と演算結果を保持するレジスタです。累算器ともいいます。
凡庸レジスタとは様々な用途に使用されるレジスタです。特定の機能は持っていません。
ここで様々なレジスタが出てきましたが、全部ここで理解する必要はありません。次回の説明を読めば理解できます。
今回はここまでです。次回は命令の実行時のアドレスをどう指定するかという話をしていきます。
このサイトも参考にしました。
【命令実行サイクル】プロセッサが本当にやっていること | かながわグローバルIT研究所
読むだけでいい基本情報技術者試験対策5:クロック周波数
今回はクロック周波数について学んでいきます。
この話はCPUに限ったことではなく、コンピュータの全体に関わることです。
まず、クロック周波数が存在する目的から考えていきましょう。
コンピュータは前々回で学んだように、様々な装置が存在しています。もしそれぞれの装置が制御装置が意図したタイミングではなく、それぞれの処理が終わったタイミングでバラバラに機能したらどうなるでしょうか。メモリは読み取れず、ほかの処理済みの情報なども交錯して混沌としていくでしょうね。これは人体が脳の意思ではなく、それぞれの臓器がそれぞれの役割をただ果たしているだけの状態を考えればよいでしょう。もし大腸と胃の消化のタイミングがズレてしまったら、消化が途中で止まって大変なことになりますね。
このようなことを防ぐため、人体、もといコンピュータは内部で全部の装置の動作のタイミングを揃える必要があるのです。
この際に使用されるタイミング。これがクロック信号と呼ばれるものです。
クロック信号とは、コンピュータ内部で一定の間隔で電圧が高圧と低圧を繰り返す信号です。この信号に従って装置が足並みを揃えています。いわばコンピュータの鼓動ですね。そして、このクロック信号が1秒間に何回繰り返されるかをクロック周波数といいます。この単位はGHz(10^9回/s)です。
基本的には、このクロック周波数が高いほどコンピュータの命令実行速度や処理能力は向上します。しかし、コンピュータの性能はメモリの性能やHDDなど、様々な変数影響してくるため、クロック周波数で一意的に定まるものではありません。この点は注意しておきましょう。頭の回転が早いからって必ずしも「頭がいい」わけではないですよね。記憶力や洞察力も重要です。
今回はここまでです。次回からはCPUとメモリの話になります。
読むだけでいい基本情報技術者試験対策4:CPUの機能
今回はCPUの機能について勉強していきます。
前回の復習ですが、CPUには制御装置・演算装置としての機能がありました。
制御装置は記憶装置からプログラムを読み取り、それぞれの装置に指示を出していく役割で、演算装置は四則演算や論理演算を行うというものでした。
ところでCPUの制御装置、演算装置そのものは単なる回路であり、演算結果を覚えておくことができません。演算しつつもその結果をそのまんま忘れていては機能が成立しませんね。ですのでCPUの中にはCPU専用の、ちょっとしか覚えられないけど、めっちゃ処理が速い記憶回路が存在します。これをレジスタと呼びます。
CPUはあくまで情報の処理がメインなので、記憶すべき量は多くなくてよいのです。処理が終わればあとは記憶装置へ情報を飛ばしていきます。しかし、処理すべきことは大量にあるので速度性が問われるのです。
そしてこのレジスタには幾つかの種類があります。
この他にも幾つか種類がありますが、とりあえずここではこの2つだけ紹介しておきます。残りはもう少し後に勉強しないと訳が分かんなくなってしまうためです。
ここで、アドレスという概念が出てきたため、これについても説明が必要ですね。
アドレスというのはプログラムやデータが記憶装置のどこにあるのかを教えてくれるものです。日本語に直すと、「住所」です。一緒んとこにしときたいやつです。
CPUがどこからプログラムやデータを持ってきてきて、その結果をどこに送るかで様々なアドレスが存在します。
詳しくはここでどうぞ
今回はここまでにしておきます。次回はクロック周波数について学んでいきます。
読むだけでいい基本情報技術者試験対策3:コンピューターの5つの装置
今回はハードウェアのことについて学んでいきます。
コンピューターは動画を見たり、文章を書いたり、計算をしたり、様々なことをできますが、大きく分ければたった5つの装置からなっています。
- 演算装置
- 制御装置
- 記憶装置
- 入力装置
- 出力装置
です。
上の3つは人体になぞらえれば脳に当たる機能で、入力装置は5感で、出力装置は手足といったところでしょうか。
上の機能のうち、最初の2つ。演算装置と制御装置はCPU(Center Proccesing Unit)という装置の中で動作しています。
それぞれの機能を簡単に説明していきます。
制御装置 → 記憶装置からプログラムを読み込んでデコード(解読)し、それぞれの装置に指示を出していきます。
演算装置 → 論理演算や四則演算(これも論理演算で実装されています)を行う装置です。
記憶装置 → データやプログラムを保持します。
入力装置 → コンピューターの外部からプログラムやデータを読み込んでいきます。
出力装置 → コンピューターの内部で処理したデータを外部に書き出す装置です。
これらの装置がどのように機能するのか見ていきましょう。
1 まず、制御装置が記憶装置からプログラムを読み込み、デコードします。
2 次に、制御装置が、プログラムが入力を求めるものなら入力装置へ、出力をするものなら出力装置へ、演算を必要とするなら演算装置へ、またはその組み合わせで各装置に指示を出していきます。
3 そして、入力結果、あるいは演算結果が記憶装置に格納されます。
4 最後に、必要に応じて結果を出力装置へ送り、表示させます。
1のときに「制御装置から記憶装置からプログラムを読み込む」ありますね。このように、実行するプログラムを予め主記憶装置(メインメモリ)に読み込んでおくことをプログラム内蔵方式、またはプログラム格納方式、はたまたストアドプログラム方式といいます。この方式は、ハードウェアの仕様を変えることなく、プログラムを変更するだけで様々な処理が可能になるというメリットがあります。
今回はここまでです。次回はこれらの5つの装置の中のCPUについて詳しく見ていきます。
読むだけでいい基本情報技術者試験対策
こんにちは、meisekimu_botと申します。
基本情報技術者試験を受けようと考えているので、私が勉強してきた内容なるべくわかりやすい形で文章にして、備忘録として残していこうと思っています。
私はとある地方大学の学部2年で、経済学を勉強しています。特にIT系の知識はなく、この試験を通して1から築き上げていくつもりです。
このブログは第一に自分のためですが、書くにあたってのコンセプトは「読むだけでいい」という点です。主には情報系の体系的な知識がほしいけど、机に向かって勉強するほどのモチベが無い、、でも読むだけなら行けるかな、、 と感じる人向けです。
ですので、なるべく理解に負荷がかからないよう、わかりやすく、適宜具体例や実践例を入れて説明しています。
また、基本情報技術者試験を受けるにあたって必要なトピックをできるだけ細切れにして扱っていきます。この点もより知識の整理がしやすくなると思います。逆に言えば、ノートにとって勉強するなら文章量が多すぎてあまり向かないかもしれません。
全内容を一読した後、本格的な勉強に望めば、ゼロ知識から始めるよりも相当スムーズに行けるはずです。「あそこで一回見たな…」と思えれば、その内容を殆ど完全に覚えてなかったとしても理解が倍くらいの速さで異なってきます。中高の勉強を、大人になると当時では考えられないスピードで復習できるのと同じです。
それでは今後とも宜しくお願い致します。
追記
本ブログは以下の書籍を参考に書いています。
また、特に参考にしたサイトはそれぞれのエントリーで載せています。
読むだけでいい基本情報技術者試験対策2:指数計算と文字コード
前回、情報量の表現方法としてビットやギガ(G)という単位を学びました。ここで指数が出てきたため、高校数学の指数計算に関して一度復習をしておきましょう。
指数法則は以下の通りです。
- x^s × x^t = x^s+t
- x^s ÷ x^t = x^s-t
- (x^s)^t = x^st
- x^0 = 1
- x^-s = 1/x^s
- x^1/s = s√x(xのs乗根)
例えば(めんどくさいかもしれませんが、数学に自信がない人はちゃんと数式を追ってみると理解が深まると思います)
2^2 × 2^3 =2×2 + 2×2×2 = 4 × 8 = 32 = 2^5 成り立っていますね。
2^8 ÷ 2^4 = 22222222 ÷ 2222 = 256 ÷ 16 = 16 = 2^8-4 = 2^4 成り立っていますね。
(2^2)^2 = (2×2)(2×2) = 4 × 4 = 16 = 2^2+2 = 2^4 成り立っています。
残りはこういう定義と覚えるしかないですね。
次に文字コードについて説明します。
文字化けという現象を体験したことはあるでしょうか。これが起こるのは情報の変換の方法が違うからなのです。
コンピューターの中ではすべてが2進数で表現されますが、これをアルファベットや日本語に置き換えるとき、一定のルールに従って変換します。これが文字コードです。しかし、何らかのミスであるコードで変換すべきところを別の文字コードで変換してしまうときがあります。これだと変換ルールが違うので文字化けが発生してしまいます。
文字コードには大きく以下の4種類があります。
まずASCⅡコード。英数字と特殊文字($&%などのように言語学的な「文字」と定義されないもの)しか表現できません。
次にソフトJISコード。英数字特殊文字に加えて漢字やかなも入力可能。winやマックはこれです。
次にEUCコード。これも使えるのはソフトJISと一緒ですが、UNIXやLinuxで使用されてます。
最後にUNICODE。これは世界中の文字を表現できるようにする文字コードです。UTF-8というものを聞いたことがあるかもしれません。これはUNICODEにおける符号化方式の一つです。
試しに文字化けを起こしてみましょう。
今は便利な時代で文字化けなんて一種のバグですら再現できるサイトがあるんですね…
シフトJISコードで
「私は言いました。"Shall we dance?"」
と入力し、これをUTF-8でデコードしてみます。すると
「"???͌????܂????B"Shall we dance?"」と見事に文字化けしています。
英文の部分だけが共通のプロトコルなのか、ここだけが原型をとどめています。
やってみたい人はここでどうぞ
参考文献
読むだけでいい基本情報技術者試験対策1:情報の表し方
今回はコンピューター内部での情報の表現の仕方について勉強したことを書いていきます。
コンピューターの中では論理演算、つまり0と1のみで情報を表現しているというのは有名な事実です。0ならoffを表し、1ならonを表すわけです。つまり、0という数字1つでoffという一つの状態(情報)を表現できるわけです。ですので、この0か1が1つだけある状態を、情報量の最小単位として1ビットと定義します。1ビットなら2通り(0,1)、2ビットなら4通り(00,01,10,11)なので、必然的にxビットで表現できる情報量は2のx乗通りになりますね。
この1ビットを8こ集めたものを1バイトと定義します。1バイトで表現できる情報量は2^8通りになります。
私達が日々体験しているように、コンピューターが扱う情報の量は膨大なものです。従ってビットやバイトではとんでもない桁数になって理解不能なので、一定の桁数で単位を定義することにしましょう。
10^3バイト、つまり、1000バイトなら1k(キロ)バイトというように10^n+3づつ増やしていくとこのようになり
ます。
- 1KB=10^3B
- 1MB=10^6B
- 1GB=10^9B
- 1TB=10^12B
となります。例えばこの画像は(私が大学でレポートを作成する際に作成した図です)
プロパティを見てみると「75.7 KB (77,521 バイト)」と書いてあります。
実際に75.7×10^3を計算してみると…
75.7×10^3=75700 と若干のズレがあります。
これ、実は1KBというのは正確には1024Bだからなんですね。ですのでこの点を修正してみると、
1024×75.7=77516.8と大体近似していることが分かります。
これは何故かと言うと、1000という数字を出すためには2^10ビット必要だからなのです。コンピューターの中では2進数を使用しています。そのため10進法よりも桁数の上がり方が激しいです。10進法でいう1000を表現するには2進法で1000000000という数字になり、これは10桁になります。ですので必要な情報量は2^10となり、
2^10=1024 と1024に等しくなるのですね。
この説明に関しては以下のウェブサイトが詳しいです。
逆に小さい値を表すときに使う単位もあります。これは時間を表現するときによく使われるものです。コンピューターの処理速度は年々加速してますよね(winxpの頃は起動に10分とか平気でかかってました)。ですので1秒の整数倍として以下のように定義されています。
- 1m=10^-3秒(0.001秒)
- 1μ=10^-6秒(0.000001秒)
- 1n=10^-9秒
- 1p=10^-12秒