基本情報技術者 ~ソフトウェア[1]~



f:id:potato_head0809:20210116010233p:plain




こんにちは!ポテトヘッド(@potato_head0809)です!



今回はソフトウェアについて触れていこうと思います!



ソフトウェアとは何かわかりますでしょうか。



聞いたことはあると思います!



簡単に言ってしまうと、「OS」のことです。



OSは聞いたことがありますよね?



今回はこのようなソフトウェアにはどのような役割があるのか、



どのような種類があるのかについて学んでいきましょう!



OSの役割



まずはOSの役割について見ていきましょう!



以下の図を見てください。



f:id:potato_head0809:20200912144157p:plain




コンピュータは様々なハードウェアと連携して動作しています。



ハードディスクには作成したファイルが保存され、



メモリには編集中のデータが保持されているんです。



あとは、キーボードで文字が入力され、マウスでカーソルが動くなど...。



当たり前のように使っているコンピュータですが、そもそもの話、



何かがコンピュータをコンピュータとして使えるようにしなくてはいけません。



その役割を担っているのが、今回学んでいこうとしているOSです!



基本ソフトウェアとも呼ばれています。



ソフトウェアの分類



では、ここでソフトウェアを役割ごとに分類してみます。



文章をだらだらと書いても分かりにくいと思いますので



まずは以下の図を見てください。



f:id:potato_head0809:20200912145036p:plain




ソフトウェアを大きく分けると二種類に分類できます。



「応用ソフトウェア」と「基本ソフトウェア」です。



応用ソフトウェアとは、ワープロなどのアプリケーションソフトのことです。



そして、システムソフトウェアには、



ミドルウェア」と「基本ソフトウェア」が含まれます。



ミドルウェアとは、データベースの管理ソフトウェアや、



開発を支援するソフトウェアのことを言います。



ある特定の用途に特化していて、



基本ソフトウェアと応用ソフトウェアの間で役割を果たします。



一方、基本ソフトウェアは先ほど説明したように、



OSや各種サービスのことを言います。



基本ソフトウェアのプログラム



基本ソフトウェアは、3つのプログラムに分類できます。




「制御プログラム」

「言語処理プログラム(言語プロセッサ)」

「サービスプログラム」



これら3つに分類されます。



では図を見てください。



f:id:potato_head0809:20200912233048p:plain




ひとつひとつ説明していきます。



まずはOSの中核となっている「制御プログラム」です。



制御プログラムは、ハードウェアを管理し、応用ソフトウェアやミドルウェアから



コンピュータが効率的に利用できるように働くソフトウェアです。



制御プログラムのことを「カーネル」と言います。



カーネルは2つに分類することが出来ます。




マイクロカーネル

メモリ管理やプロセス管理などに機能を限定したカーネル


モノリシックカーネル

多くの機能を備えたカーネル



 制御プログラムは上の図でもあるように、



ジョブやタスク、データの管理をします。



次に言語処理プログラムについてですが、



言語処理プログラムとは、プログラミング言語で書かれたプログラムを



コンピュータが理解できるように翻訳するプログラムのことを言います。



最後にサービスプログラムについてですが、



簡単に説明すると、コンピュータの機能を補う補助的なプログラムです。



狭義のOS・広義のOS



先ほどから述べているように、「OS=基本ソフトウェア」は



広義で考えた場合です。



一方、狭義の意味でのOSとは、



「基本ソフトウェアの中の制御プログラム=OS」という考え方になります。



図で示すと以下のようになります。



f:id:potato_head0809:20200912234320p:plain




代表的なOS



OSには聞いたことのあるWindowsMacOSなど



様々なものがあります。



f:id:potato_head0809:20200912234434p:plain




それではいくつか紹介します。




Windows


現在最も使われているMicrosoft社のOS。

GUI(マウスなどのポインティングデバイス)を使って

画面を操作しコンピュータに命令を与える。




「MaxOS」


Apple社のOS。

GUIを実装したOSの先駆け。




MS-DOS


Windowsの普及以前によく使われていたMicrosoft社のOS。

CUI(コマンドを入力)といった方法でコンピュータに命令を与える。




UNIX


サーバなどでよく使用されるOS。

多くのユーザが同時に利用できるように考えられている。




Linux


UNIX互換のOS。

オープンソースのソフトウェアで、

無償で利用できるもの。



GUI



以下の図はWindowsの画面をイメージしたものです。



f:id:potato_head0809:20200913000234p:plain




このOSではGUIという画面にアイコンやボタンを配置し、



それを視覚的に操作して命令を与えています。



普段我々がコンピュータを操作している方法はGUIです。





ここではOSとアプリケーションとの接点部分について見ていきます。



OSは自身が管理することでハードウェアの違いや入出力をすべてブラックボックス化します。



つまりアプリケーション側が直接それらを意識することはありません。



では、アプリケーションはどのようにして、ハードウェアを使うのでしょうか。



それは、「OSに指示を出してハードウェアを使います」。



OSはハードウェアの利用も含めて、自身が持つ各機能を



アプリケーションから呼び出せる仕組みを持っています。



このために準備されたインターフェースを「API」と言います。



では、APIを利用するとどんな良いことがあるのでしょうか。



以下の図で示します。



f:id:potato_head0809:20200913001111p:plain




一言で言うと、「便利」だということです。



まとめ



今回の内容は以上になります。



基本ソフトウェアは3つに分類でき、システムソフトウェアは2つに分類でき...



というようにややこしい部分が幾つかありましたね。



それぞれがどんな役割を担っているのかを



イメージできればコンピュータの仕組みが



理解できたみたいで楽しいですね!!



次回は制御プログラムについて説明した際に



出てきたジョブ管理について触れていきたいと思います。



最後までご覧いただきありがとうございました。



次回もお願い致します!



次回の記事はこちらから!

 

potato-head0809.hatenablog.com

 

基本情報技術者 ~ソフトウェア[2]~



f:id:potato_head0809:20210116010233p:plain




こんにちは!ポテトヘッド(@potato_head0809)です!



前回はOSについて全体的に触れていきました。



前回の記事を見ていない方はこちらからご覧になってください!



 

potato-head0809.hatenablog.com

 



今回はOSの中核である制御プログラムで少し触れた、



「ジョブ管理」について触れていこうと思います!



f:id:potato_head0809:20200915073246p:plain



では、早速始めましょう!



ジョブ管理



ジョブとは、例えば自分がして欲しいと思う処理があったとします。



その内容をジョブ制御言語(JCL)で記述した指示書を作成し、



コンピュータに投入します。



この一連の流れが「ジョブ」ということになります。



文章だけでは分かりづらいと思いますので、



以下の図を見てください。



f:id:potato_head0809:20200915073148p:plain




コンピュータに投入されたとき、カーネルが働いています。



ジョブの順番を管理したり、CPUに割り当てたりしています。



f:id:potato_head0809:20200915074147p:plain



利用者から見た仕事の単位が「ジョブ」です。



ジョブを効率良く処理できるように、OSは実行スケジューラを管理します。



ジョブ管理の流れ



では、ジョブ管理の流れについて見ていきましょう。



ジョブ管理はカーネルが持つ機能の一つです。



この機能で利用者との間を橋渡しする管理プログラムがあります。



それは、「マスタスケジューラ」というものです。



f:id:potato_head0809:20200915073830p:plain




このマスタスケジューラは、ジョブの実行をジョブスケジューラに依頼します。



マスタスケジューラ自身は実行状態の監視に努めて、



必要に応じて各種メッセージを利用者に届けます。



続いては、依頼を受け取ったジョブスケジューラについて見ていきましょう。



以下の流れでジョブを実行しています。



f:id:potato_head0809:20200915075058p:plain




「リーダ」は依頼されたジョブを入力してジョブ待ち行列に登録し、



「イニシエータ」は優先度の高いジョブを持ってきて、



ジョブステップに分解します。



「ターミネータ」は実行を終えたジョブに割り当てられていた



ハードウェア資源を解放して、ジョブの結果を出力待ち行列に登録します。



「ライタ」は優先度の高いものから順にジョブ結果を出力します。



スプーリング



CPUと入出力装置では、処理速度に大きな差があります。



当然、CPUの方が早いです。



そこで、CPUが待たされなくて良いようにする解決法として、



入出力データを一旦高速な磁気ディスクに蓄える方法があります。



例えば、印刷したいデータを磁気ディスクに書き出したらCPUはすぐに



次の処理に移っていきます。これで、待ち時間は削減できます。



このような、低速の装置とのデータのやりとりを高速な磁気ディスクに



蓄えて、処理効率を高める方法を「スプーリング」と言います。



先ほどの説明を図で説明しているので、ご覧になってください。



f:id:potato_head0809:20200915081521p:plain




このスプーリングを利用することで、CPUの待ち時間を



削減することができるので単位時間あたりに処理できる仕事量を増やすことができます。



単位時間あたりに処理できる仕事量のことを「スループット」と言います。



まとめ



今回は以上になります。



ジョブがどのような流れで行われているのか、



それを効率的に行うには、



そういったものを見ていきました。



次回は今回と同様に制御プログラムで触れた、



「タスク管理」について触れていこうと思います。



最後までご覧いただきありがとうございました。



次回もお願いします!

基本情報技術者 ~ソフトウェア[3]~



f:id:potato_head0809:20210116010233p:plain




こんにちは!ポテトヘッド(@potato_head0809)です!



今回はソフトウェアに関することについて学んでいこうと思います。



これまでソフトウェアの基本や、ジョブ管理について学びました。



〜ソフトウェアの基本〜

potato-head0809.hatenablog.com



〜ジョブ管理〜

potato-head0809.hatenablog.com



今回は「タスク管理」について学んでいきましょう。



タスク管理



f:id:potato_head0809:20201203121707p:plain




コンピュータから見た仕事の単位が「タスク」です。



一方、利用者から見た仕事の単位は「ジョブ」です。



ジョブ管理で触れましたが、ジョブがジョブステップに分解され、



実行準備が整うとタスクが生成されます。



タスクの状態



タスクが生成されるとき、タスクにはいくつかの状態があります。



f:id:potato_head0809:20201203122659p:plain




タスクは生成されたあとにすぐ実行されるということではありません。



それぞれのタスクの状態は以下のような図になっています。



f:id:potato_head0809:20201203122925p:plain




もっと分かりやすく示すと、以下のようになります。



f:id:potato_head0809:20201203123121p:plain




また、注意点としては「待機状態」にいるタスクは、



いきなり「実行状態」になることはできず、一度「実行可能状態」に行かなくてはいけません。



f:id:potato_head0809:20201203123334p:plain




ディスパッチャ



ディスパッチャはどんなことをしてくれるのか...。



それは、実行可能状態で順番待ちをしているタスクに



CPUの使用権を割り当てる管理プログラムの役割をしています。



f:id:potato_head0809:20201203213744p:plain




では次に「どのタスクにCPUの使用権を与えるか」が重要になるので、



どのようにして実行の順序を決めているのかを見ていきましょう。



タスクの実行順序を定めることを「タイムスケジューリング」といいます。



代表的な3つの方式を見ていきます。



到着順方式



f:id:potato_head0809:20201203214239p:plain




実行可能状態になったタスクの順にCPUの使用権を与えます。



優先順方式(プライオリティ順)



f:id:potato_head0809:20201203214621p:plain




タスクに優先度を設定し、その優先度に従ってCPUの使用権を与えます。





f:id:potato_head0809:20201203214855p:plain




一定時間ごとにCPUの使用権が変わります。



時間が全てです。





これらのように様々な手法を使ってディスパッチャは



タスクにCPUの使用権を与えています。



マルチプログラミング



さて、ここまでタスク管理について見てきましたが、



タスク管理の役割として、一番大切なこと... それは「CPUの有効活用」です。



CPUが使われていない時間を無くそうというのが目標です。



CPU側からすれば困ったものですね。休ませてもらえませんから...。





さて、話を戻しますが、以下のようなプログラムがあるとします。



f:id:potato_head0809:20201203215616p:plain




このプログラムは処理の開始から終了まで120ミリ秒かかります。



灰色の部分がCPUが使われていない時間になります。



この時間をどうにかして無くそうとして効率性を求めていきます。



「マルチプログラミング」とは複数のプログラムを見かけ上、同時に実行することで



CPUの休み時間を減らしてCPUの効率性を求めます。



例えば、以下のような2つのタスクがあるとします。



f:id:potato_head0809:20201203220041p:plain




ここでもう少し細かく設定すると、プログラムAの方が優先度が高く、



お互いの入出力処理は競合しないものとします。



まずはどんな流れになるのかを示した図を見てください。



それから説明していきます。



f:id:potato_head0809:20201203221754p:plain




まずは優先度の高いプログラムA(上)。



続いて、プログラムB(下)。



CPUが動いていないところにプログラムBのCPU処理を入れています。



個々の処理は被ってはいませんが、AとBで綺麗に効率化を図っています。



普通に実行していると240ミリ秒かかるタスクが、



このように当てはめていくことで130ミリ秒で終了できます。



全体的に見ても短縮できていますが、CPUの動いていない時間も



2つで160ミリ秒ありましたが、これにより50ミリ秒まで短縮できています。



何も2つのタスクだけということは必要ありません。



これより多くのタスクを入れていっても短縮できます。



これこそがマルチプログラミングの効果です。



さいごに。



今回はタスク管理について学びました。



タスク管理はCPUをいかに休ませないかを重要視しています。



今回も最後までご覧頂きありがとうございました!



宜しければツイッター(@potato_head0809)のフォローをお願い致します!



次回も宜しくお願い致します!

基本情報技術者 ~ソフトウェア[4]~



f:id:potato_head0809:20210116010233p:plain




こんにちは!ポテトヘッド(@potato_head0809)です!



これまでソフトウェアについて色々学んできました。



〜ソフトウェアとは〜

potato-head0809.hatenablog.com



〜ジョブ管理〜

potato-head0809.hatenablog.com

 



〜タスク管理〜

potato-head0809.hatenablog.com



今回は実記憶管理について学んでいこうと思います。



では早速始めていきましょう!



実記憶管理



主記憶装置の空間は限られています。



それを効率よく使えるようにするのが実記憶装置の役割になります。



現在使われているプログラム内臓方式のコンピュータではプログラムを実行するときに



主記憶装置にロードしてから実行するので実記憶管理の役割が重要になってきます。



f:id:potato_head0809:20201206220301p:plain




実記憶管理には2つの方式があります。



「固定区画方式」と「可変区画方式」です。



固定区画方式



固定区画方式はさらに、「単一区画方式」と「多重区画方式」に分けられます。



単一区画方式



f:id:potato_head0809:20201206220632p:plain




単一区画方式では1つのプログラムしかロードすることができません。



よって、これまで学んできたマルチプログラミングには使えません。



多重区画方式



f:id:potato_head0809:20201206220808p:plain




図のようにあらかじめ決めたサイズに分割しておきます。



それにより、複数のプログラムをロードすることができます。



しかし問題点もあり、主記憶装置に読み込むとき、



必ずちょうど良いサイズのプログラムで一杯になることはないです。



その読み込んだ後に区画内で空いたスペースは使用することができません。



f:id:potato_head0809:20201206221209p:plain




主記憶の利用効率はあまりよくありません...。



可変区画方式



では「固定区画方式」とは異なる「可変区画方式」について見ていきましょう。



可変区画方式の特徴としては、あらかじめ区画を分割するサイズを決めるのではなく、



プログラムをロードするタイミングで必要なサイズに区切ります。



f:id:potato_head0809:20201206221902p:plain




これにより、区画内に無駄なスペースが生じません。



固定区画方式よりも主記憶の利用効率が良いことになります。





さて、これまで主記憶装置にロードする際の



区画について見てきましたが、便利な可変区画方式であっても



問題は無いということではありません。



フラグメンテーションという現象が起きてしまいます。



なぜなら、主記憶内にあるプログラムは必ずしも順番に実行されるわけではありません。



f:id:potato_head0809:20201206222345p:plain




順番に実行されないので当然上の図のような構図になってしまいます。



ここでフラグメンテーションという現象が起きてしまいます。



f:id:potato_head0809:20201206222516p:plain




ロードしたいプログラムの容量分は主記憶装置に空きがあるはずなのに



フラグメンテーションの影響でロードできないということになります。



では、どうすれば良いのか...。



そこでメモリコンパクションという機能です。



簡単に説明すると、バラバラになったプログラムを綺麗に整頓してくれます。



f:id:potato_head0809:20201206222728p:plain




そうすることで、先ほどは読み込めなかったプログラムが



整頓することで読み込めるようになります。



さいごに。



今回は実記憶管理について見ていきましたが、



オーバーレイ方式やスワッピング方式などもあります。



それらについては今後、説明できればと思います。



今回も最後までご覧頂きありがとうございました!



宜しければツイッター(@potato_head0809)のフォローをお願い致します!



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

基本情報技術者 ~メモリ[1]~



f:id:potato_head0809:20210116010233p:plain




こんにちは!ポテトヘッド(@potato_head0809)です!



はじめに。



今回から基本情報技術者シリーズ「メモリ」について



触れていきたいと思います!



パソコンを使っている人に限らず、



「メモリ」という言葉を聞いたことのない方は



いないと思います!



メモリについての説明を可能な限り



分かりやすく図も使いながら説明していこうと思います!



基本情報技術者の試験に役立てば幸いです。



では、早速始めていきましょう!



メモリの分類



メモリを分類すると以下の図のようになります。



まずは、以下の図を見て、だいたいの内容を把握してください。



f:id:potato_head0809:20200824115937p:plain




大きく分類すると、「RAM」と「ROM」に分類されます。



それぞれの特徴について見ていきましょう。



「RAM」


電源を切ると中身が消えてしまう。(揮発性)

読み書きが両方可能。



「ROM」


電源を切っても中身が消えない。(不揮発性)

読み出しのみ可能。



「RAM」「ROM」の特徴は以上のような感じです。



これらの特徴はおさえておきましょう。



メモリはコンピュータの動作に必要なデータを記憶する装置です。



もし、主記憶装置としてのメモリがないと、どうなるでしょうか。



CPUがデータを読み出すことが出来ません。



通常では、このような用途には「RAM」が使用されます。



ちなみにRAMは何の略かと言うと、



「Random Access Memory」です。



上の図でも見たように、RAMは読み書きが自由に出来ますが、



電源を消すと、中身は消えてしまい残りません。



この性質を揮発性と言います。



続いては「ROM」について説明します。



ROMは決められた動作を行うだけの特定用途向けコンピュータのような場合に用います。



例えば、家電製品のような場合です。



ROMは基本的には読み出しのみ可能でしたよね?



そのため、動作に必要なプログラムやデータは予めメモリ内に



書き込まれた状態で工場から出荷されます。



もちろん、この時書き込まれた内容は電源を消したとしても消えることはありません。



洗濯機も電源を切れば動かなくなるなんてことはないですよね?



このような性質を不揮発性と言います。



続いては、RAMとROMをさらに分類したものについて触れていきましょう。



RAMの様々な種類



RAMとは、簡単に言うと「ランダムに読み書きできるメモリ」です。



このRAMを大きく2つの種類に分類されます。



1つ目は、主記憶装置に使われるDRAM



2つ目は、キャッシュメモリに使われるSRAM



これら2つに分類されます。



ではそれぞれについて特徴を見ていきましょう!



まずはDRAMについて図で説明します。



以下の図を見てください。



f:id:potato_head0809:20200824182531p:plain




続いてはSRAMについて見ていきます。



以下の図を見てください。



f:id:potato_head0809:20200824182700p:plain




それぞれの特徴について理解は出来ましたでしょうか。



それぞれに良いところ、悪いところがありますね。



フリップフロップ回路については今は完璧に



覚える必要はないと思います。



それよりも、RAMには「DRAM」と「SRAM」に分類され、



それぞれに特徴があるということを覚えておきましょう。



RAMともう一つのメモリを覚えていますか?笑



続いてはそのもう一つのメモリの話について触れていきます!



ちなみに正解はROMです。笑



ROMの様々な種類



ROMとはどんなものだったか覚えていますか?



RAMが読み書き可能だったのに対して、



ROMは読み出しのみが可能なメモリのことでしたね!



ただ、これは基本的にはという話であって、



専用の機器を使用すると記憶内容の消去と書き込みができるPROMなどが存在します。



デジタルカメラで使用されているメモリーカードはこの1種だそうです。



これをフラッシュメモリと呼びます。



では図を使ってそれぞれ見ていきましょう。



まずは最初に見た図をもう一度見て全体像を把握してください。



f:id:potato_head0809:20200824115937p:plain




では、ROMをさらに詳しく見ていきます。



以下の図を見てください!



f:id:potato_head0809:20200824184139p:plain




説明は図で記載してある通りです。



まとめ



今回はメモリの全体像について触れました。



今回はメモリを2つに分類しましたね?



ここでもう一度おさらいです。



その2つとは「RAM」と「ROM」です。



読み書きが両方可能か、読み出すのみかなどの特徴がありましたね。



次回は主記憶装置(メモリ)と高速化手法について触れます。



最後までご覧いただきありがとうございました!



次回の記事はこちらから!

 

potato-head0809.hatenablog.com

 

基本情報技術者 ~メモリ[2]~



f:id:potato_head0809:20210116010233p:plain




こんにちは!ポテトヘッド(@potato_head0809)です!



前回はメモリの全体像について触れました。



まだご覧になっていないという方は以下から



ぜひご覧になってください!



 

potato-head0809.hatenablog.com



では、早速今回の内容に入っていきたいと思います!



主記憶装置と高速化の為の手法



まずは以下の図を見てください。



f:id:potato_head0809:20200825184340p:plain




上記の画像ではCPUのレジスタとメモリとハードディスクの



関係性について書かれています。



ここに書かれてある通り、大きな速度差が存在します。



CPUはメモリへの読み書きが発生すると待たされることがあり、



メモリはハードディスクへの読み書きが発生すると待たされる



といったような感じです。



そこで、「すべてを高速にしてしまおう!」と思うかもしれませんが、



高速なものは高価になり、かつ小容量です。



何だか残念ですね〜。



そこで、今回の大事な内容に入ります。



ここで扱う手法には「キャッシュ」というものがあります。



それはどんなものかを簡単に説明すると...。



   

「キャッシュ」


   

装置間の速度ギャップを緩和させる為に用いる手法。


キャッシュメモリ

レジスタとメモリの間に設けるキャッシュ


「ディスクキャッシュ」

メモリとハードディスクの間に設けるキャッシュ





CPUはコンピュータの動作に必要なデータやプログラムを



メモリ(主記憶装置)との間でやりとりします。



しかし、先ほどのCPUやメモリとの関係性を書いた図のように



メモリはCPUに比べて遅いものです。



その為、読み書きの為にCPUがメモリへアクセスすると、



待ち時間ばかり発生してしまうということはイメージできるでしょうか。



速度差を無くしたいためには工夫が必要になります。



そこで、メモリとCPUの間に、より高速にやりとりできるメモリを置きます。



それこそが、「キャッシュメモリ」というものです。



以下の図を見てください。



f:id:potato_head0809:20200825214520p:plain




このようにCPUの中にはキャッシュメモリが入っているのです。



そして処理の高速化が図られています。



そしてそして、キャッシュというものは1つだけとは限りません。



1次キャッシュ、2次キャッシュというように、いくつか設置出来ます。



もう少し、詳しく見ていきましょう。



CPUに内蔵できる容量は小さいものになります。



そこで、「それよりは低速だが、容量を大きく持てるメモリ」を



CPUの外側にキャッシュとして増設した場合、キャッシュの効果に期待できます。



この時に用いられるのが「SRAM」です!



f:id:potato_head0809:20200825215319p:plain




これまで説明したキャッシュメモリの同じ役割を



主記憶装置と磁気ディスク装置の間で担うのがディスクキャッシュです。



ディスクキャッシュは専用に半導体メモリを搭載したり、



主記憶装置の一部を借りて実装します。



以下の図を見てイメージしてください。



f:id:potato_head0809:20200825215640p:plain




主記憶装置へ書き込む方法



キャッシュメモリは読み出しだけで使われるわけではありません。



書き込みでも使われます。



書き込みの場合、書いて終わりというわけにはいきません。



更新した内容を主記憶装置にも反映させなくてはいけません。



f:id:potato_head0809:20200825220010p:plain




主記憶装置を書き換える方式は2つあります。



「ライトスルー方式」と「ライトバック方式」です。



図で説明しますので、見てみてください!



f:id:potato_head0809:20200825220132p:plain




図で見たように、主記憶装置への書き込み内容を



反映させるタイミングで方式が変わります。



同時に反映させるか、必要な時に反映させるか。



です。



ヒット確率と実効アクセス時間



CPUがデータを探すとき、キャッシュメモリがあれば



高速化が図れるという話をしてきました。



しかし、キャッシュメモリは容量が小さいですよね。



なので、目的とするデータが必ずしもそこに入っているとは限りません。



そこで次のような考え方があります。



f:id:potato_head0809:20200825220619p:plain




つまり、「80%の確率でキャッシュの中身がヒットしてくれる」場合、



「主記憶装置に読み込みにいかなければいけない確率が20%」



というような感じです。



キャッシュメモリを利用したコンピュータの平均的なアクセス時間のことを



実効アクセス時間と言います。



この実効アクセス時間はヒット率を使用して以下のように求められます。



f:id:potato_head0809:20200825220955p:plain




メモリインタリーブ



高速化についてこれまでも触れましたが、



もう少し主記憶装置へのアクセスの高速化について見ていきましょう。



キャッシュメモリ以外に「メモリインタリーブ」というものがあります。



メモリインタリーブとは...。



   

「メモリインタリーブ」

   
   

主記憶装置の中を複数の区画(バンク)に分割



まずは図で見ていきましょう。



f:id:potato_head0809:20200825221454p:plain




主記憶装置の番地は、図のように



区画を横断するように割り当てられています。



そのため、複数のバンクにアクセスすると



連続した番地のデータを一気に読み出せるのです。



f:id:potato_head0809:20200825221649p:plain




ここで注意が必要なのは、ランダムアクセスなど



連続しないデータを扱いたいときには向かないということです。



まとめ



今回でメモリについての内容は終了です。



どうだったでしょうか。



まずはメモリについて全体像をイメージし、



今回の記事では高速化について触れました。



似たような名前がたくさん出てきたので



難しかったかもしれません。



実際に私もまだ完璧には理解していません。笑



しかし、仕組みが分かれば面白いと感じることができると思います!



次回も基本情報技術者の試験について記事を書きたいと思っています。



ぜひ次回も役に立てて頂ければ幸いです。



最後までご覧いただきありがとうございました!

Java 「開発するまでの順序」



f:id:potato_head0809:20210116012706p:plain




こんにちは!ポテトヘッド(@potato_head0809)です!



今回はJavaで開発をするために、Eclipseでの順序について説明します。



はじめに。



まずは、Eclipseをインストールしていることを前提とします。



もし実行時にうまくいかない場合などは、



バージョンによることが原因かもしれません。



まずは一度Eclipseを開いてバージョンの設定を



行ってみてください。



こちらの記事で参考にしてみてください。



 

potato-head0809.hatenablog.com



私はバージョンの設定を行うことで



エラーが解消され、実行できるようになりました。



それでは、本題に入っていきましょう!!



プロジェクトの作成



はじめにプロジェクトを作成します。



まず、Eclipseを起動したら画面左側の



「パッケージ・エクスプローラー」でメニューを開きます。



そうすると以下のようなメニューが出るので、



「新規」→「Javaプロジェクト」の順でクリックしてください。



f:id:potato_head0809:20200727004900p:plain




すると、以下のような画面が出てきます。



まずは、上のプロジェクト名の場所で名前を決めます。



(ここでは「test」としていますが、なんでも大丈夫です。)



次に、下の「完了」をクリックします。



f:id:potato_head0809:20200727005146p:plain



最後に以下のような画面が出てくるので、



赤枠で囲まれている「module-info.javaのファイルを作成」の



チェックマークを外します。



(多分、そのままでも大丈夫ですが私の場合エラーになりました。)



f:id:potato_head0809:20200727005429p:plain



これでプロジェクトの作成は終了です!



パッケージの作成



プロジェクトを作成した後は、パッケージの作成です。



まずは先程作成したプロジェクトの上にカーソルを持っていき、



右クリックしてメニューを開きます。



メニューが開いたら、



「新規」→「パッケージ」の順にクリックしてください。



f:id:potato_head0809:20200727010038p:plain



すると、以下のような画面が出てくるので



任意のパッケージ名を付けてください。



(ここでは「sample」としています。)



そして、右下の「完了」をクリックします。



f:id:potato_head0809:20200727010256p:plain



これでパッケージの作成は完了です。



次で最後になります。



クラスの作成



まずは、先程作ったパッケージの上で右クリック。



すると先程と同様のメニューが出てくるので



今度は「新規」→「クラス」の順にクリックします。



f:id:potato_head0809:20200727071741p:plain




すると、以下のような画面が出てきます。



まずは任意のクラス名を付けましょう!



(ここでは「Hello1」としています。)



次に「どのメソッド・スタブを作成しますか?」という箇所で、



「public static void main(String[] args)」にチェックをします。



そして、「完了」をクリックしましょう!



f:id:potato_head0809:20200727072343p:plain




どうでしょうか。以下のようにクラスが作成されているでしょうか。



f:id:potato_head0809:20200727072439p:plain




これで、Javaで開発できるようになりました。



さいごに。



私は普段VSCodepythonを使ったりしているので、



今後、VSCodeJavaを使えるようにしていきたいと思っています。



最後までご覧いただきありがとうございました。



Twitter@potato_head0809)のフォローもお願いします!