Bたーんぶろぐ

プログラマがそんなにテックでないことを書きます。

コンピュータの構成、使ってる分にはあまり意識しないところ。

応用情報の勉強も順調に進み、第1章が終わり第2章に突入。

第2章はコンピュータの構成です。

章立てはこんな感じ。

  1. プロセッサアーキテクチャ
  2. メモリアーキテクチャ ←いまここ
  3. 補助記憶装置と入出力アーキテクチャ

ということで、これだけ見てもなんのこっちゃらサッパリ。

要するに、コンピュータの根幹を担うCPUだとかメモリ、記憶装置なんかの種類や構成についてです。

 

アルゴリズムの話から一気に世界観が変わります。

だいぶハードっぽい話です。

 

現在第2章の半分くらいまで終わってます。

あまり馴染みのないCPU周りのことを扱ったところをまとめてみます。

 

プロセッサアーキテクチャ

CPUについて

割り込み処理

割込みとは、現在実行中のプログラムを中断して、割込みの原因となった要因に対応した処理を実行すること。処理が終わると元のプログラムが中断点から再開される。

割込みには外部割込み(実行しているプログラムと無関係な割込み)と内部割込み(実行しているプログラムの動作に起因)がある。

割込みには優先順位が付けられ制御され、割込みを意図的に禁止したり発生させたりすることができる。また、これらの情報はPSW(プログラム状態語)に格納される。

CPUの高速化方式

CPUの高速化への開発アプローチについてです。てか、こんなの勉強させて何がしたいんだ?

アプローチは主にCISCRISCの2種類ある。

CISC

CPUに複雑な命令(マイクロプログラム)を組み込むことで、複雑になりつつも高速化を図る手法。

RISC

命令は簡単で基本的なもののみに制限する一方、各命令自体の実行時間を向上させることにより高速化を図る。結線論理が用いられている。

 

パイプライン制御

 CPU内部で複数の命令をオーバーラップさせて実行することで、見かけ上の実行速度を向上させる。命令実行過程を基本操作(ステージ)に分け、1ステージずつずらして実行すれば大幅な高速化が可能になる。

スーパースカラ方式

パイプラインを複数もち、命令を同時並行で進める仕組みである。

 

マルチプロセッサ

複数のCPUが分担して処理を行うシステム構成のこと。

M.Flynn分類

フリンさんが考えたコンピュータアーキテクチャの分類。

  • SISD:ノイマン型コンピュータ
  • SIMD:1命令で複数のデータを処理
  • MISD:単一データを複数命令で処理
  • MIMD:複数データを複数で処理
密結合マルチプロセッサ:TCMP

各プロセッサが主記憶装置やOSなどを共有し、互いに同期を取りながら処理を進めていくシステム構成。

疎結合マルチプロセッサ:LCMP

複数のコンピューらをLANやWANで接続したシステム構成

 

マルチプロセッサ方式の並列処理には、プロセッサの数と処理能力の間にボトルネックが存在する。その原因としては、各プロセッサからの主記憶装置への使用要求の競合の発生、データベースへ同時にアクセスすることによるロックの発生などが挙げられる。

 

 

 以上が大体のまとめです。

 

やはり、どれも普通にPC使ってる分には全く意識しないことばっかり。高速化方式に至っては、もはや開発思想ではないでしょうか?

でも、一方でマルチプロセッサのあたりは、並列化プログラミングでは意識することになるかもしれないです。(やったことはないですが)

そして、この範囲、結構本番で出題されると苦手なんですよね。基本情報の時からここの問題は落としているイメージ。最後のマルチプロセッサのボトルネックの原因とか間違えた記憶があります。

今回まとめたのが効いて、今回は落とさないようにしたい。けど、やっぱりまとめるだけじゃなく過去問演習も必要だよね。

 

さて、応用情報の勉強も軌道に乗ってきました。

そろそろ、他の勉強にも手を付けたくなってくる頃です。(飽きっぽい?)

とりあえず「アルゴリズムとデータ構造」は先述として、残りは「LPIC level1」と「Ruby」「Java」をかけるようにすること。

この中だとLPICかな?応用情報と同じモチベーションで出来そうだし。

でも、そろそろコードも書いてみたいので、Javaあたりもやりたいです。

そんなわけで、今後の計画についてもそろそろまとめたいと思います。

考え中。