第 6 章 ソフトウェア
OS は資源の管理人。この章では次の 13 個の知識点を、解説・インタラクティブ教材・練習問題で学びます。
ソフトウェアの構成と OS
ソフトウェアは 基本ソフトウェア(OS)・ミドルウェア・応用ソフトウェア の 3 層。OS の中核はカーネル。利用者と OS をつなぐのが GUI、アプリケーションと OS をつなぐのが API。OS はジョブ・タスク管理、記憶管理、ファイル管理を行う。
ジョブとタスク・スプーリング
ジョブは人から見た仕事の単位、タスクは OS から見た単位(ジョブを細かく分けたもの)。ジョブは入力待ち行列に並び、処理後は出力待ち行列へ。低速なプリンタなどへの出力は、いったん磁気ディスクに書いて CPU は次へ進む(スプーリング)ので、スループット(単位時間あたりの仕事量)が上がる。
タスクの状態遷移
タスクは 実行可能状態(CPU の割当て待ち)・実行状態(CPU を使って処理中)・待機状態(入出力の終了待ち) を行き来する。実行可能 → 実行 はディスパッチャによるディスパッチ、実行 → 待機 は入出力要求、待機 → 実行可能 は入出力完了、実行 → 実行可能 は横取り・時間切れ。待機から直接実行にはならない。
スケジューリング
CPU を割り当てるルールがスケジューリング。到着順(実行可能になった順)・優先度順(優先度の高い順)・ラウンドロビン(一定時間ごとに交代)。実行中のタスクを途中で止めて切り替えるのがプリエンプティブ、止めずに任せるのがノンプリエンプティブ。
マルチプログラミング
あるタスクが入出力を待っている間(CPU が空いている間)に、別のタスクに CPU を割り当てて、見かけ上複数の処理を同時に進めるのがマルチプログラミング(マルチタスク)。CPU の遊休時間を減らして効率を上げる。
割込み処理
割込みは、実行中のタスクを中断して別の処理を行うしくみ。原因が実行中のプログラムにある内部割込み(プログラム割込み・SVC割込み)と、プログラムの外にある外部割込み(機械チェック・タイマ・コンソール・入出力)がある。
実記憶管理
主記憶への読込み方:固定区画方式(決まった大きさの区画、無駄が出る)・可変区画方式(必要な大きさだけ、ただし解放を繰り返すと空きが散らばる=フラグメンテーション → メモリコンパクションで詰める)。大きなプログラムは オーバーレイ、優先処理のための一時退避は スワッピング。解放漏れの メモリリーク はガーベジコレクションで回収。
仮想記憶とページング
仮想記憶は、主記憶と補助記憶を組み合わせて、実際より大きな記憶空間があるように見せるしくみ。仮想アドレスは動的アドレス変換機構(DAT)で実アドレスに変換する。ページング方式ではページ単位で管理し、主記憶にないページを参照するとページフォールト → ページイン(必要ならページアウト)。ページの出し入れが多発して性能が落ちるのがスラッシング。
ページ置換えアルゴリズム
主記憶が満杯のときにどのページを追い出すか。FIFO(最初にページインしたもの)・LIFO(最後にページインしたもの)・LRU(最も長い間参照されていないもの)・LFU(参照回数が最も少ないもの)。参照列に沿って枠の中身を表に書けば、追い出すページやページフォールト回数が求まる。
ファイル管理(ディレクトリとパス)
ファイルはディレクトリ(フォルダ)の木構造で管理する。一番上がルートディレクトリ、今いる場所がカレントディレクトリ、その 1 つ上が親ディレクトリ、中にあるのがサブディレクトリ、ログイン直後の場所がホームディレクトリ。絶対パスはルートから、相対パスはカレントから目的までの経路(「.」=カレント、「..」=親)。
マルチメディア(圧縮とファイル形式)
可逆圧縮は完全に元に戻せる、非可逆圧縮は完全には戻せないが圧縮率が高い。画像:BMP(無圧縮)・GIF(256 色・可逆)・PNG(フルカラー可・可逆)・JPEG(フルカラー・非可逆・国際標準)。動画:MPEG(非可逆・国際標準)。
CG 技術と VR / AR / MR / XR・メタバース
CG(コンピュータグラフィックス)の技術:アンチエイリアシング(ギザギザを滑らかに)・テクスチャマッピング(模様を貼る)・モーフィング(中間の変化を作る)・レイトレーシング(光の反射をリアルに)・クリッピング(はみ出しを切る)・シェーディング(陰影で立体感)。VR=仮想空間に入り込む、AR=現実に情報を重ねる、MR(複合現実)=現実空間に仮想物を重ね操作できる、XR=それらの総称、メタバース=アバターで活動する 3 次元仮想空間。
新シラバス用語(ステージング環境・DevOps・MLOps)
ステージング環境=本番環境にできるだけ似せて作った、リリース前の最終テスト用の環境。DevOps=開発(Development)チームと運用(Operations)チームが密接に連携して、柔軟かつスピーディに開発・運用する手法。MLOps=機械学習チーム・開発チーム・運用チームが連携して、機械学習のライフサイクル全体を効率化する手法。