マエカワの備忘録的な何か

思い立ったが吉日

オペレーティングシステム 其の二 20170419

追試は無しだそうです

 

コンピュータアーキテクチャの復習

 メモリ

  ・揮発性:電源offでデータが飛ぶ。途中結果を一時的に入れておく。この講義でのメモリはこっちのことを指す

  ・不揮発性USBメモリなどの類。電源offでもデータが保存されている。

   →ハードディスクとして扱う

  アドレス指定で読み書きできるものを抽象メモリという

 

f:id:maekawa_yoshimiki_1119:20170420185501p:plain

図:メモリとCPUの簡略図

 ・汎用レジスタは計算の途中結果を保存しておくためのもの。

 ・プログラムはメモリに入っている。これをloadして演算し、その結果をstoreする。

 ・メモリには命令もデータも入っている

  →基本的にこの二つは違う領域に入っている。

 ・メモリは大容量低速、レジスタは小容量高速。データを格納しておくという点ではどちらも大差ない。

  →特殊なことに使う特殊レジスタなるものがある。

 

 プログラムカウンタ(PC)

  ・命令メモリのどこかを指している

  ・命令を実行すると自動で増加

  ・if分などでは、PCに値を代入する

 

 スタックポインタ(SP)

  ・メモリのデータを入れる領域を指す

   →push:SPを-1して、そのアドレスに値を代入

   →pop:値を取り出して、SPを+1する

    ※メモリ内では上に行くほどポインタが小さくなる

 

 関数呼び出し(PC、SPの応用)

  ①callの次のPCをSPに保存→関数へ移行

  ②関数の処理が終わり次第、PCにSPの値を代入

  ③callの次の命令が実行される

 

ここまでがコンピュータアーキテクチャの復習

 

CPUとI/Oデバイスの通信

 ・I/Oの中にもレジスタがある。これをCPUで読み書きすることで使えるようになる

 ・I/Oは通常複数のレジスタを持つ

  -制御(control):I/Oへの命令を入れる

  -状態(status):現在の状態

  -データ(data):入出力データ 


f:id:maekawa_yoshimiki_1119:20170420194129j:image

図:足し算機

 

 ・デバイスドライバ

  ・機能達成のためにレジスタを読み書きするためのソフトウェア

  ・I/Oデバイスによって機器との相性などいろいろ違うので、これをデバイスドライバが吸収する

   →OSは外部機器を一緒くたに扱いたい

 

 CPUとI/Oデバイスのやり取りの仕方には次の二種類がある

  ①I/Oポート:I/Oのレジスタに直接アクセスする専用命令がある

  ②メモリマップトI/O:メモリにアクセスする=I/Oデバイスレジスタにアクセスする(メモリとレジスタがリンクしている=マッピングされている)


f:id:maekawa_yoshimiki_1119:20170420194144j:image

図:メモリマップトI/Oのイメージ

 

割り込み

 ある処理を待っている間、じっと待つことは効率を考えると望ましくない(ビジーウェイト)

  ⇒待っている間に別の処理をしてしまう、これが割り込み

 前の足し算機の例を使うと、Sレジスタの値が1になるまでずっと待っているのは非効率。その間にできることをしてしまおうということ。

 

 割り込みの流れ

  ①IRQ(割り込み要求線)に電圧がかかる

  ②あらかじめ登録しておいた関数が実行される。この割り込みプログラムのことを割り込みハンドラと呼ぶ。

 

 ・ハンドラの登録のし直しができるようにIRQから割り込みベクタ(ハンドラが保存されているメモリのアドレスが書かれているメモリ)にアクセスし、ハンドラを実行するという二重構造をしている。このおかげで、ハンドラを複数個登録しておくことが可能


f:id:maekawa_yoshimiki_1119:20170420194200j:image

図:割り込みベクタ

 

 ・ハンドラをただ実行するだけではいけない。もともと実行していたプログラムの途中結果を保存(退避)し、ハンドラが実行し終わったところで復帰させる。

  ⇒関数呼び出しと同じようなことが退避、復帰システムでも適用されている


f:id:maekawa_yoshimiki_1119:20170420194215j:image

図:退避と復帰