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