スポンサードリンク
こんにちは、ももやまです。
今回はオペレーティングシステムにおける割り込み(特に外部割込み・内部割込みの違いについて)、およびバッファについてまとめていきたいと思います。
前回の計算機システム(Part16)の記事はこちら!
目次
スポンサードリンク
1.割込みとは
例えば皆さんが「今まさに仲良しの友達と遊んでいる(or 好きな恋人とデートしている)状態」を想像してください。
そのときに、「母親(or 父親)が危篤なので病院にすぐ来てください!」と電話があったとします。
すると、多くの人は「遊んでいる or デートしている」のを中断して親の様子を確認するために病院に駆け込みますよね。
このように、より優先度の高い用事などが入るなどの理由で、今行っているタスク・行動を中断して別のタスクを処理することを割込みと呼びます。
プログラムの割り込みも人間と同じように、より優先度の高いプログラムなどが来たとき、今行っているプログラムを中断し、別のプログラムの処理を行う操作のことを表します。
スポンサードリンク
2.特権モード・非特権モード
割込みの説明をする前に特権モード・非特権モードの説明をしておきましょう。
OSの中心となる部分(核)は、様々なアプリケーションを動作するためにも必要な重要な部分です。
もし、プログラムがOSの核に制限なしにアクセスできるようにすると、ユーザーのミスなどにより、OSの核にあるメモリの値などが書き換わってしまうかもしれませんね。
そのようなことがあると、予期しない動作をするかもしれません。最悪PCが起動しなくなります。
そのため、必要なとき以外は他のプログラム、特にOSの中心部分には勝手にアクセスできないように制限をかける必要がありますね。
そこでUnix上では、
- OSの中心部分にアクセスできる特別なモード:特権モード
(カーネルモードとも呼ばれます。) - OSの中心部分にアクセスできない一般者向けのモード:非特権モード
(ユーザーモードとも呼ばれます。)
の2つのモードが用意されています。
システムコール、割り込みなどでOSの中心部分にアクセスするときだけ特権モードにし、それ以外のときは非特権モードにすることでユーザーが誤ってOSの中心を壊してしまうことを防ぎます。
スポンサードリンク
3.割込みのステップ
割込みは以下の5つのステップで処理されます。
割込みが起こると必ず特権モードに変化することを忘れないようにしましょう。
- 割込みの発生、特権モードへ移行
- プログラムカウンタ・レジスタを退避
- 割込み処理の開始番地の決定
- 割込み処理を実行
- 退避したプログラムカウンタ・レジスタをもとし、非特権モードへ
なお、割り込み後は、割り込み前に行っていた処理を引き続き行います。
4.割り込みの種類(外部割込み・内部割込み)
割込みは、実行中のプログラムが原因で発生する内部割込みと、プログラム以外の原因で発生する外部割込みに分けることができます。
(1) 内部割込み
内部割込みが発生する原因を大きく分けると2つに分けることができます。
(a) プログラム割込み
プログラムで下のような操作を行うと割込みが発生します。
- 演算結果の桁あふれ(オーバーフロー)
- 0除算
- メモリ保護違反(例:テキスト領域への書き込み)
- ページフォルト
- 特権命令違反
(b) システムコール割込み
プログラム側がOSの機能を呼び出すことをシステムコールと呼びます。
システムコールが発生した場合でも割込みがおこります。
※システムコールについてはこちら(うさぎでもわかる計算機システム Part13)の記事にまとめているので詳しく知りたい人はぜひお読みください。
(2) 外部割込み
外部割込みが発生する原因として、主に下の4つが挙げられます。
- 入出力割込み
(入出力装置の動作終了 or 誤動作時のとき) - 機械チェック割込み
(ハードウェア(CPUなど)の誤動作・バッテリー切れなどの電源異常のとき) - タイマ割込み
(指定時間経過時やタイムアウトのとき) - リスタート割込み
(リスタート(再起動)時の割込み)
4つともプログラムが原因の割込みではないことがわかりますね。
内部割込み:プログラムが原因で発生する割り込み
★具体例★
- 演算結果の桁あふれ(オーバーフロー)
- 0除算
- メモリ保護法違反
- ページフォルト
- 特権命令違反
外部割込み:プログラム以外の原因で発生する割り込み
★具体例★
- 入出力割込み
- 機械チェック割込み
- タイマ割込み
- リスタート割込み(再起動時など)
- システムコール
5.バッファ
ここからは少し話を変えてバッファのお話をしていきましょう。
(1) バッファとは
バッファ(buffer)は、日本語で「緩衝するもの」という意味を持ちます。
最近はビジネス用語としても使われることがありますね*1。
コンピューターの世界では、バッファは入力と出力のデータを一時的に保持するために用いられる記憶領域のことを表します。
また、バッファを用いて実際にデータを一時的に保持して効率を上げることをバッファリングと呼びます。
バッファリングのわかりやすい例を1つ紹介しましょう。
通信速度が遅いときにYouTubeで動画を見ると、動画の途中で再生が止まってしまうことがありますよね。
そのときに、あらかじめ少しデータをバッファリングしておくことで、最後まで再生がストップすることなく動画を見ることができますね。
(2) バッファの3つの使い道
コンピューター上で、バッファは多く分けて3通りの使い方を行われます。
では1つずつ紹介していきましょう。
その1 入出力装置(周辺機器)とメモリのアクセスの差を埋める
メモリに比べて、入出力装置はCPUへのアクセス速度が遅いです。
そのため、アクセス速度が遅い入出力装置を待っている間、CPUが使用中になり、処理効率(スループット)が悪くなってしまいます。
そこで、バッファを用意し、バッファと入出力装置の間でデータのやり取りを行うことで、CPUが入出力装置の遅いアクセスを待つことなく、他の処理が行えるようになるため、処理速度を上げることができます。
その2 入出力のデータの大きさの差を埋める
プログラムが入出力する単位*2は、補助記憶装置の入出力する単位に比べて小さいです。
そのため、補助記憶装置側がプログラムの処理限界を超えてデータを送ってしまい、データをロストしてしまう可能性がありますよね。
そこで、プログラム(入出力単位が小さい側)の処理限界のデータが来た際には、一旦バッファにデータをおいておくことで、データのロストを防ぐことができます。
その3 キャッシュとして用いる
同じデータを複数回使う場合に、一旦データをアクセス速度の早いメモリ(バッファ領域)に保存しておくことで、2回目以降のアクセス速度を向上します。
6.練習問題(基本情報などの問題)
では、基本情報の過去問を使って実際に練習してみましょう。
練習1
割込み処理の流れを示す次の記述中の [ ] に入る処理はどれか。
[基本情報技術者平成14年秋期 午前問18]- ユーザモードから特権モードへの移行
- [ ]
- 割込み処理ルーチンの開始番地の決定
- 割込み処理ルーチンの実行
ア:CCW(Channel Command Word)の読出し
イ:オペランドの読出し
ウ:資源の割当て
エ:レジスタ類の退避
練習2
割込み発生時のプロセッサの処理手順はどれか。
[基本情報技術者平成24年秋期 午前問9]- プログラムレジスタ(プログラムカウンタ)などの退避
- ユーザモードから特権モードへの移行
- 割込み処理ルーチンの開始番地の設定
- 割込み処理ルーチンの実行
ア:1→3→4→2
イ:1→4→2→3
ウ:2→1→3→4
エ:2→3→4→1
練習3
外部割込みに分類されるものはどれか。
[基本情報技術者平成29年秋期 午前問10]ア:インターバルタイマによって,指定時間経過時に生じる割込み
イ:演算結果のオーバフローやゼロによる除算で生じる割込み
ウ:仮想記憶管理において,存在しないページへのアクセスによって生じる割込み
エ:ソフトウェア割込み命令の実行によって生じる割込み
練習4
内部割込みに分類されるものはどれか。
[基本情報技術者平成22年秋期 午前問11]ア:商用電源の瞬時停電などの電源異常による割込み
イ:ゼロで除算を実行したことによる割込み
ウ:入出力が完了したことによる割込み
エ:メモリパリティエラーが発生したことによる割込み
練習5
入出力管理におけるバッファの機能として、適切なものはどれか。
[基本情報技術者平成28年春期 午前問17]ア:入出力装置が利用可能になったことを,入出力装置が処理装置に伝える。
イ:入出力装置と処理装置との間に特別な記憶域を設け,処理速度の違いを緩和する。
ウ:入出力装置と処理装置との間のデータ交換に階層を設けることによって,入出力装置固有の仕様を意識せずに利用できる。
エ:入出力装置をファイルと同じように取り扱えるようにする。
練習6
符号化速度が192kビット/秒の音声データ2.4Mバイトを、通信速度が128kビット/秒のネットワークを用いてダウンロードしながら途切れることなく再生するためには、再生開始前のデータのバッファリング時間として最低何秒間が必要か。
[基本情報技術者平成26年秋期 午前問31]ア:50
イ:100
ウ:150
エ:200
ヒント:この問題の符号化速度は、1秒当たりの音声データの量を表している。
7.練習問題の答え
解答1
解答:エ
割込み開始前の処理の過程に「レジスタ類の退避」が抜けていますね。
なので答えはエです。
解答2
解答:ウ
まず、特権モードに移行します。移行しないと何もできませんよね。
なので選択肢のアとイが消えます。
つぎにレジスタやプログラムカウンタなどを退避させますね。
ここで答えがウになります。
あとは開始番地を設定し、実際に割込みを行います。
よって答えはウとなります。
また、今回は聞かれていませんが、割込み実行後は非特権モードに戻ります。
解答3
解答:ア
ア:タイマ割込みなのでプログラムとは関係ない割込み、よって外部割込みなのでこれが答え。
イ:オーバフローや0除算はプログラムと関係があるので内部割込み。
ウ:存在しないメモリにアクセスしたときに発生する割込みは内部割込み。
エ:ソフトウェア(つまりプログラム)による割込みなので内部割込み。
解答4
解答:イ
ア:電源異常はプログラムには関係ないので外部割込み。
イ:0除算による割込みはプログラムに関係あるので内部割込み。よってこれが答え。
ウ:入出力に関する割り込みは外部割込み。
エ:これも外部割込み。
解答5
解答:イ
処理装置と比べて速度が遅い入出力装置を待っていると、CPUの待機時間が増えてしまい、他の処理に使えなくなってしまう。
そのため、入出力装置と処理装置との間に特別な記憶域(バッファ)を設けることにより、処理時間の違いを緩和することができる。(答えはイ)
解答6
解答:ア
まずは符号化速度、通信速度をKB単位に直します。
ビットからKBなので、\( 1/8 \) をすればいいですね。すると、
符号化速度:24KB/秒
通信速度:16KB/秒
となります。
(ビット, KB, MBなどの単位変換がもしあやふやな人はこちらの記事で復習しましょう。)
また、音声データは2.4MBなので、音声データの長さは\[
2.4 \times 1000 \div 24 = 100
\]となり、100秒であることがわかります。
しかし、2.4MBデータを読み込むには、\[
2.4 \times 1000 \div 16
\]となり、題意の通信速度(16KB/秒)だと150秒かかってしまいます。
なので、50秒分の差が出てしまいますね。
ですので、あらかじめ50秒分だけデータをバッファリングしておく必要があります。
よって答えはアとなります。
8.さいごに
今回はコンピュータの世界における割り込み、およびバッファについて説明しました。
次回はプロセスに関するお話をしていきたいと思います。
関連広告・スポンサードリンク