An empty bottle

しがないメンヘラエンジニアの日記。

コンピュータ構成要素~プロセッサと割り込み~

まえがき

今回は基本情報より、応用情報に寄った記事になります。

というのも、後述の専用レジスタの用途や説明は基本情報の方が多く語られるためです。それ専用の記事はまた別にまとめます。

CPUの構成

コンピュータの構成要素には、プロセッサ(処理装置、CPU)、記憶装置(メモリ)、補助記憶装置、入出力装置があります。

今回は、プロセッサの中身について説明したいと思います。

CPUの構成や高速化の技術、ここらの進歩も目覚ましいですもんね。BTOで構成を選んでいると、CPUの高速化を図る塗料なんてのもあるくらいで驚きです。

ここで言う「プロセッサ」はCPUや処理装置の総称ですが、CPUに置き換えていただいても問題ありません。

プロセッサとは

コンピュータを買うときに考えなければならないCPUの性能ですが、果たしてその「性能」とは何を指しているのでしょうか。

プロセッサとは、コンピュータの演算・制御を行う装置で、コンピュータ全体の司令塔の役割を担います。そりゃ、お金もかかりますね。

プロセッサの中には、レジスタと呼ばれるCPUが処理を実行するために一時的にデータを格納しておくための小容量で高速なメモリ装置があり、そこにデータを一時保存し、レジスタが保持しているデータを足したり、移動させたりなどなど行うんですね。

そのレジスタには多くの種類がありますが、大別すると汎用レジスタという用途を問わずいろんな一時置き場として使われるレジスタ専用レジスタという用途が決まったレジスタがあります。

専用レジスタが汎用レジスタの中に保存された値を用いて、デコーダと呼ばれる中継装置に司令を出し、デコーダが各種制御装置に命令を出します。

割り込み

さて、そんなCPUの作業は止まることなく制御装置に指示を出したりプログラムを作動させていますが、割り込みという「停止を余儀なくされる場合」があります。

これも大別すると2種類あり、プログラムに依って引き起こされる割り込みである内部割り込みと、入力待ちや印刷待ちなど、プログラムが待機せざるを得ないプログラム外に起因する外部割り込みがあります。

割り込みに関してはFE,APともに頻出で「この割り込みの中で外部割り込みはどれだ?」のような出題がされます。

細かく分類したものを以下にまとめますね。

外部割り込み

割込の種類 原因例 概要
機械チェック割込 処理装置の誤動作、電源・電圧異常、メモリ障害、NMI 機械の異常で、ブルースクリーンレベルの異常割り込み。
入出力割込 入出力完了、入出力装置の状態変化(プリンターの印紙切れ、電源OFF) 一般的な待機ですね。印刷ボタンを押した後はプログラムはすることありません。
外部信号割込 外部信号(測定器からの信号)など 赤外線検知など、常に何か監視している状態のプログラムが、異物混入などの例外を発生した場合に発生しますね。
タイマ割込 所定時間・所定時刻経過 待機許容時間をオーバーした場合に発生する、タイムオーバーの割込

NMI:Non - Maskable Interrupt(制御不可能な割り込み)

内部割り込み

割込の種類 原因例 概要
プログラム割込 オーバーフロー、0除算、Exceptionなど プログラム内で起こるエラー。テスト中に見つかるバグによるエラーはだいたいこれ。
制御プログラム呼び出し割込 入出力操作要求、タスク切換え、スーパバイザコール など 他の装置に依頼を出し、完了するまで待機する状態

スーパバイザコール:一般的なプログラムがOSの機能を使用するため、OS制御プログラム(スーパバイザ)を呼び出すこと。

PSW

割り込まれると、プログラムの状態は一旦保存され、再開に向けて待機します。

割込前のプログラムの状態や、現在発生している割込は、PSW (Program Status Word):プログラム状態語 としてスタックされ、状態保持がされます。

今回は以上です。

次回は、高速化について、です!

基礎理論~待ち行列~

概要

今回は 待ち行列 について。

私も当初苦手で「公式覚えるの…?」とか思っていましたが、用途や背景を知ると理解が深まります。

待ち行列とは

その名の通り、「行列にて待つ」度合いの色々を表します。よく例として挙げられるのはレジやATMでしょうか。

例えば、「混み具合」「レジがさばき終わるまでの時間」「ATMで自分の順番が回ってくるまでの時間」など、様々な計算に用いられます。

今回はレジを例として使用していきます。

ケンドール記法

既に待ち行列を学ばれた方なら分かるかもしれませんが FEやAPでは M/M/1 モデル というものを採用します。

というよりも、M/M/1モデル以外は採用されないような気がします。

あらゆる参考書も、本ページも、M/M/1モデル前提で話します。

さて、この ○/○/○ のかたちをケンドール記法と言います。

  • 1つ目の○:サービス発生頻度・・・どの頻度でレジにお客さんが並ぶか
  • 2つ目の○:サービス時間・・・レジで会計開始から終了までの時間
  • 3つ目の○:サービス窓口・・・レジの数

という意味があります。

ここで、「M」というのは簡単に言うとランダムという意味です。

つまり、M/M/1モデルは レジに並ぶお客さんもランダム、会計に係る時間もランダム、レジは1つの場合 を前提した計算です。

分布

ここでは、分布の名前が2種類出てきます。分布は、 発生頻度 のようなニュアンスでおぼえていてくれた良いです。

この分布とは、レジにお客さんがどの程度の頻度で来るかな、などの「ばらつき」を示します。このばらつきの種類が2種類あるんですね。

ポアソン分布

レジに人が並ぶ場合を考えてみると、一人のお客さんもいれば、団体客、また0人の場合もあります。

この0もありうる分布をポアソン分布といいます。

指数分布

これはレジにてお客さんをさばく時間ですね。商品が多く長く掛かる人もいれば、一品で簡単に終わる人もいます。でも、 0はない んですよね。

この0はない分布が指数分布です。

出てくるギリシャ文字(コラム)

別にギリシャ文字でなくても良いのでしょうが、昔から待ち行列では

ギリシャ文字 読み方 意味
ρ ロー 混み具合
μ ミュー サービス率
λ ラムダ 到着率

使い方、意味などは後述しますが、「こんなの使うのか…」と知っておくと良いでしょう。

サービス率

サービス率、とは言いますが、これは「サービスを行う時間」やその指数です。

1時間あたりのサービス数 を表し、「平均サービス」といいます。

逆数は 1件あたりの時間 を表し「平均サービス時間」といいます。Tsという記号があります。

この平均サービス率を「μ」と書きます。

{\displaystyle
μ=1/Ts
}

{\displaystyle
Ts = 1/μ
}

ですね。

到着率

レジに到着する頻度を指します。

1時間あたりの到着サービス数 (1時間あたりに何人お客さんが来店するのか) を表し、「平均到着」といいます。

逆数は 1件あたりの時間 を表し「平均到着時間」といいます。Taという記号があります。

この平均到着率を「λ」と書きます。なんだかトボトボ入店してくる人に見えます。イメージ戦法。

{\displaystyle
λ=1/Ta
}

{\displaystyle
Ta = 1/λ
}

ですね。

利用率

これは、来店する客と、レジにて会計中の人の比率です。

{\displaystyle
λ > μ
}

ならば、会計中の人より来店してる人が多いので「さばききれてない状態」を表します。

この混み具合を「平均利用率」といい「ρ」で表します。公式は以下。

{\displaystyle
ρ = λ / μ
}

待ち時間

この混み具合がわかると次に、「現在何人待っているか」という人数が把握できます。

{\displaystyle
ρ / (1 - ρ)
}

です。

また、1件あたりのサービス時間は Ts でしたよね。μの逆数。

なので、合計で待つ時間を Tw とすると、

{\displaystyle
Tw = (ρ / (1 - ρ)) * Ts
}

おわり

公式ばかりと思うかもしれませんが、根本的な用途は「待っている人数や時間、頻度などを求める学問」です。

以上です!

基礎理論~PERT図~

今回のテーマ

プロジェクト管理技法の1つで、日程管理に用いられる PERT について。

参考図

f:id:cresta522:20190704200525p:plain
PERT

コンナノ。

PERT図って?

図の味方を説明します。

AやらBやら書かれていますが、これらは「作業の名前」と「それにかかる日数」を指します。

作業Aは、開始から終了まで5日かかり、作業Bは作業終了までに10日かかります。

次に、この矢印の意味ですが、前提作業を指します。

  • 作業Fは作業Bが終わっていないと作業開始ができない。
  • 作業Hは作業G,D,E...とすべてが終わっていないと開始できない

といったことが読み取れます。

さて、一番最初の○がすべてのスタートで、一番右の○がすべてのゴール。

これで何が分かるんでしょうね。

読み取れること(最も早く開始できる日程)

作業Cの前提に、作業A,作業Bがあるが、Aは5日かかり、Bは10日掛かるのでCに着手開始することができるのはプロジェクト開始から10日後である。

この「最も早く開始できる日程」を最早結合点時刻という。

このように、次々と 最早結合点時刻を求められるようになるのも必要なスキルである。

以下に、この図から読み取れる最早結合点時刻を挙げる。

  • Aは5日、Bは10日掛かるため、Cの着手開始は10日後
  • FはBの完了後開始できるため、10日後。
  • Gは、Cが20日掛かるため30日後。
  • Dは、C同様10日後。
  • Hは、F,Eの終了が20日後、Dの終了が40日後、Gの終了が50日後なので、最も早く前提作業が終わり、開始できるのは50日後。

作業Hは10日掛かるため、このプロジェクトは早くとも60日掛かることがわかりました。

読み取れること(最も遅く開始できる日程)

最も遅く開始する日ってなんだろう?とお思いかもしれませんが、

「ここまでに開始してくれればプロジェクト終了には間に合うよ」という余裕をもった日程のことです。

最早結合点時刻はスタートからゴールまで計算しましたが、今度はゴールからスタートまで追うことで、余裕日数を求めます。

個人的にはこの逆算が難しいかなって思ってましたが、言葉で説明すると簡単で

  • このプロジェクトには最短60日掛かる
  • Hは50日目までには開始していないといけない
  • すなわち、作業F、Eは50日目までに終わっていないと行けない。
  • とすると、作業Fは少なくとも40日めまでには開始していないと行けない

とわかってきます。

今回求めた最も遅く開始できる日程を 最遅結合点時刻 といいます。

クリティカルパス

さて、ここまで最早と最遅を求めてきましたが、

この日数が同じになる作業というのが存在します。それらは「開始及び終了日がずれたらPJに影響が出る」ことを指すため、重要視されます。

この、 最早結合点時刻 と 最遅結合点時刻 が等しい作業を結んだ線クリティカルパスと言います。

今回を例に取ると、B→C→G→Hがクリティカルパスとなり、重要視しなければならない作業ということになります。

計算は要練習です。

頻出ですので慣れましょう。

以上!

基礎理論~エンディアン~

こんばんは、本日二度目の記事です。

雨が強くなり早々に切り上げます。

今回はコラム的な意味合いで エンディアン についてご紹介。地味にFEだと求められる知識です。

物資の運搬(データの運搬)

例えば、Amazonから大量に10箱届いたら、「これはここ、これはこっち」と分けますよね。

玄関にどかどかと積まれるのも大変ですし、積み方も様々です。

コンピュータにおけるデータの保存や転送も同じように「方法」があるんです。その方法をエンディアンといいます。

エンディアン

2バイト以上の数値データを転送、記録する順番のことです。

これは結果のみ見せたほうが早いですね。

転送は、1バイトずつ行われるのが通常です。00000001で一区切り、11101100でまた一区切り、と。

今回は例として、16進数の 1234ABCD を転送してみます。皆さんは是非2進数に変換してみてください。

1バイト = 8bit = 16進数の2桁 ずつ転送しますが、そこに違いが現れます。

それは、「最上位バイトから転送するのか、最下位バイトから転送するのか」。

前者をビッグエンディアン,後者をトルエンディアンと言います。

具体的にどうなるかというと、

ビッグエンディアン

0 1 2 3
12 34 AB CD

トルエンディアン

0 1 2 3
CD AB 12 34

です。あくまで8bitずつというところに注意しましょう。

余談

当初、メールなどのデータ転送にも「リトルエンディアンで送るよ!」というのを明記しないと行けなかったんですよね。

でないと、12345678円、と送りたかったのに78563412円と送られてくることになってしまいますからね。

今は、統一されています。

基礎理論~誤差~

誤差って何だ

皆さんが知っている誤差、というのは「実際のものと異なる」という認識でしょう。

例えば、私に注がれたジュースとあなたのジュースが違う!的な。

今回は、コンピュータの世界での「誤差」を紹介します。

なぜ誤差が生まれるのか?

コンピュータの世界では、数字や文字などは一定量の桁が確保されます。

なぜ?どこに確保されるの?という話はまた別記事で。

今回は、 数値は有限なんだ という前提のもとお話します。

さて、有限ということは、その桁数を超過してしまったらどうなるのでしょうか。無視されます。スルーされます。なかったコトにされます。

この超過分を「誤差」と言います。誤差には他にも種類があり、特にFEでは説明できる必要があります。

絶対誤差

これが一番シンプルな「誤差」です。

真値 (本当の値)と、有限桁数からはみ出したために真値とずれた観測値との誤差のことです。

例えば、小数点が0桁、すなわち整数のみの桁があります。(PG経験者は整数型の変数と於いてください。)

これに、1234.5という数値を入れます。小数を入れるため、最後の「0.5」が省かれてしまいますね。

この場合の真値は1234.5、測定値は1234.0、0.5が消えてしまったので誤差は「0.5」になります。

意外とシンプル。

相対誤差

相対誤差は、絶対誤差と相対誤差の比率のこと。

なので、

{ \displaystyle
絶対誤差/真値 = 0.5 / 1234.5 = 5/12345  =  1/2469
}

となります。

誤差の発生原因とその種類

丸め誤差

これは一番覚えやすいですね。

四捨五入です。

四捨五入すると末尾の数値が四捨五入する前と当然変化します。

四捨五入する(=丸める)事によって生じるので、丸め誤差と言われます。

桁落ち

ここでは、有効桁数の重要性も感じられます。

例えば、「0.0043」という数値。

この数値にとって重要なもの、有効なものは「43」であり、この桁数(今回でいうと2桁)を有効桁数といいます。

さて、桁落ちとは、この有効桁数が「落ちてしまう」ことを指します。

例えば

{ \displaystyle
356.3622 - 356.3579
}

有効桁数が7桁 - 7桁 です。この答えこそ先程の「0.0043」です。

有効桁数が7桁から2桁に落ちました。これが「桁落ち」です。

要因

値の近い数値同士の減算

情報落ち

次は「情報が落ちてしまう」誤差です。どういうことでしょうか。

例えば、「小数点以下の有効桁数が4桁」の数値から「小数点以下の有効桁数が8桁」の数値を引いた場合の答えが

小数点以下の有効桁数が4桁しか許容しない場合 に生じます。

{ \displaystyle
356.3622 - 0.00000015 = 356.36219985
}

ですが!

小数点以下の有効桁数が4桁しか許容しない ため、答えは { \displaystyle
356.3622 - 0.00000015 = 356.3621
}

となってしまい、正しい答えと異なってしまうんです。

要因

桁の大きい数と、極端に桁の小さい数の加減算。

打切り誤差

これは一言。

有効桁数がとんでもなく大きい数の計算の途中で打ち切ることによって生じる、正確な値との誤差。

出題されること

誤差の発生原因や、回避策が問われます。主に、丸め誤差や桁落ちは頻出です。なんでこの誤差が生まれるのか?知っておきましょう。

以上!今回は誤差についてでした。

基礎理論~誤差~

誤差って何だ

皆さんが知っている誤差、というのは「実際のものと異なる」という認識でしょう。

例えば、私に注がれたジュースとあなたのジュースが違う!的な。

今回は、コンピュータの世界での「誤差」を紹介します。

なぜ誤差が生まれるのか?

コンピュータの世界では、数字や文字などは一定量の桁が確保されます。

なぜ?どこに確保されるの?という話はまた別記事で。

今回は、 数値は有限なんだ という前提のもとお話します。

さて、有限ということは、その桁数を超過してしまったらどうなるのでしょうか。無視されます。スルーされます。なかったコトにされます。

この超過分を「誤差」と言います。誤差には他にも種類があり、特にFEでは説明できる必要があります。

絶対誤差

これが一番シンプルな「誤差」です。

真値 (本当の値)と、有限桁数からはみ出したために真値とずれた観測値との誤差のことです。

例えば、小数点が0桁、すなわち整数のみの桁があります。(PG経験者は整数型の変数と於いてください。)

これに、1234.5という数値を入れます。小数を入れるため、最後の「0.5」が省かれてしまいますね。

この場合の真値は1234.5、測定値は1234.0、0.5が消えてしまったので誤差は「0.5」になります。

意外とシンプル。

相対誤差

相対誤差は、絶対誤差と相対誤差の比率のこと。

なので、

{ \displaystyle
絶対誤差/真値 = 0.5 / 1234.5 = 5/12345  =  1/2469
}

となります。

誤差の発生原因とその種類

丸め誤差

これは一番覚えやすいですね。

四捨五入です。

四捨五入すると末尾の数値が四捨五入する前と当然変化します。

四捨五入する(=丸める)事によって生じるので、丸め誤差と言われます。

桁落ち

ここでは、有効桁数の重要性も感じられます。

例えば、「0.0043」という数値。

この数値にとって重要なもの、有効なものは「43」であり、この桁数(今回でいうと2桁)を有効桁数といいます。

さて、桁落ちとは、この有効桁数が「落ちてしまう」ことを指します。

例えば

{ \displaystyle
356.3622 - 356.3579
}

有効桁数が7桁 - 7桁 です。この答えこそ先程の「0.0043」です。

有効桁数が7桁から2桁に落ちました。これが「桁落ち」です。

要因

値の近い数値同士の減算

情報落ち

次は「情報が落ちてしまう」誤差です。どういうことでしょうか。

例えば、「小数点以下の有効桁数が4桁」の数値から「小数点以下の有効桁数が8桁」の数値を引いた場合の答えが

小数点以下の有効桁数が4桁しか許容しない場合 に生じます。

{ \displaystyle
356.3622 - 0.00000015 = 356.36219985
}

ですが!

小数点以下の有効桁数が4桁しか許容しない ため、答えは { \displaystyle
356.3622 - 0.00000015 = 356.3621
}

となってしまい、正しい答えと異なってしまうんです。

要因

桁の大きい数と、極端に桁の小さい数の加減算。

打切り誤差

これは一言。

有効桁数がとんでもなく大きい数の計算の途中で打ち切ることによって生じる、正確な値との誤差。

出題されること

誤差の発生原因や、回避策が問われます。主に、丸め誤差や桁落ちは頻出です。なんでこの誤差が生まれるのか?知っておきましょう。

以上!今回は誤差についてでした。

基礎理論~浮動小数点数~

2進数での小数

小数って、10進数だと「1.24」のようなものですね、当たり前です。

さて、2進数だと?という話です。

固定小数点

例えば2進数の「101.01」(10進数でいう5.25)を8ビットの固定小数点数で表現するときに、4桁目の後を小数点の場所と決めると、次のようになります。

0101.0100

小数点の位置が固定されているため、固定小数点数といいます。

ですが、これはあまり出題しません。

浮動小数

これが本題。

IEEE754

これは知っておきたい IEEE IEEEは、標準化機構。ITのみならず、様々な事柄を標準化する機構です。

このIEEEは、決まりごとに番号がつきますが、その中で、浮動小数点数に関する規定を IEEE754 といいます。

表現方法

IEEE754では、小数を32bitで表されます。

左から1bit、8bit、23bitと分割されます。

符号部 指数部 仮数
1bit 8bit 23bit
別名:S 別名:E 別名:M

符号部

プラスの小数なら0、マイナスの小数なら1です。

指数部

これは、正規化を行います。正規化については以下説明します。

0.375(10進数) -> 0.011(2進数) -> 0.11 * 2^-1 (正規化)

小数点以下を1から始まるようにすることを正規化といいます。具体的には、累乗で位置を調整するんです。

IEEE754では、この指数(今回の場合 -1 )に 127を足します。->126

この127をバイアス値と言います。バイアス値を足した8bitを指数部とします。

よって、「01111110」が指数部です。

仮数

0.375(10進数) -> 0.011(2進数) -> 0.11 * 2^-1 (正規化)

正規化後の 0.11 の小数点以下部分を仮数部と言います。

つまり、「11」を23bitにした「11000000000000000000000」が仮数部です。

符号部 指数部 仮数
1bit 8bit 23bit
別名:S 別名:E 別名:M
0 01111110 11000000000000000000000

次回

誤差について