基本ソフトウェア

OSの仕事

ソフトウェアの分類

  • 応用ソフトウェア … ワープロや表計算ソフトなどの各種アプリケーションソフト
  • システムソフトウェア
    • ミドルウェア …  データベース管理ソフトウェアや各種開発支援用ソフトウェア
    • 基本ソフトウェア … OSや言語プロセッサ、各種サービスプログラムなど

基本ソフトウェア

  • 基本ソフトウェア
    • 制御プログラム … ハードウェアを管理して、応用ソフトウェアやミドルウェアから、コンピューターが効率的に利用できるようにするためのプログラム。このプログラムのことをカーネルと呼ぶ。カーネルにはメモリ管理やプロセス管理などに機能を限定したマイクロカーネルと多くの機能を網羅したモノリシックカーネルがある
    • 言語処理プログラム … C言語やJAVAなどのプログラミング言語で書かれたプログラム。コンピューターが理解できる機械語に翻訳するプログラム
    • サービスプログラム … コンピューターの機能を補う、補助的なプログラムのことでユーティリティと呼ばれる。

代表的なOS

Windows マイクロソフト社のOS。GUIといったマウスなどのポインティングディバイスを使って画面を操作することでコンピューターに命令を伝える
Mac OS アップル社製のOS。グラフィックデザインなどクリエイティブ方面でよく利用されている
MS-DOS Windows普及前のマイクロソフト社のOS。CUIを使っていてキーボードで文字コードのコマンドを入力する
UNIX サーバーなどに使われていることが多いOS。
Linux UNIX互換のOS。オープンソースのソフトウェア。

OSによる操作性の向上

GUI … グラフィカエルなユーザーインターフェース。

API

API:自身が持つ各種機能をアプリケーションから呼び出せる仕組み

ソフトウェアによる自動化

RPA(robotic process automation)

ジョブ管理

ジョブ:利用者から見た仕事の単位

ジョブ管理の流れ

ジョブ管理はカーネルが持つ機能の1つ。

マスタスケジューラ

利用者からの指示を受け付けたり、ジョブの実行状態を報告したりする

ジョブスケジューラ

マスタスケジューラから受けたジョブの依頼を次の順序で実行していく

  1. リーダ:依頼されたジョブを入力して、ジョブ待ち行列に登録する
  2. イニシエータ:優先度の高いジョブを持ってきて、ジョブステップに分解する
  3. ターミネータ:実行を終えたジョブに割り当てられていたハードウェア資産を解放して、ジョブの結果を出力待ち行列に登録する
  4. ライタ:優先度の高いものから順に、ジョブ結果を出力する

スプーリング

低速な装置とのデータのやり取りを、高速な磁気ディスクを介して行う事で処理効率を高める方法

タスク管理

タスク:コンピューターから見た仕事の単位。コンピューターが実行中のプログラムですと識別する仕事の単位。プロセスとも言う。

タスクの状態遷移

  • 実行可能状態(READY)
  • 実行状態(RUN)
  • 待機状態(WAIT)

各状態を行ったり来たりする

  • ”実行可能状態”で待機中にCPUの使用権が回ってきたら、実行状態に入りタスクを実行。しかし、より優先度の高いタスクが来たら、実行可能状態に戻る
  • ”実行状態”に入出力処理が発生したら、”待機状態”になり終わるのを待つ
  • ”待機状態”で待っているうちに入出力処理が終わったら、実行可能状態でCPUの順番待ち

ディスパッチャとタスクスケジューリング

実行可能状態で順番待ちしているタスクにCPUの使用権を割り当てるのはディスパッチャという管理プログラムの役割

「どのタスクに使用権を割り当てるのか」を決めるためには、タスクの実行順序を定める必要があり、これをタスクスケジューリングと呼ぶ。そのタスクスケジューリングの方式は次の3つが代表的

到着順方式

実行可能状態になったタスク順に、CPUの使用権を割り当てる方式。優先度の概念がないので、途中でCPU使用権が奪われることがない。(ノンプリエンプション

優先順方式

タスクのそれぞれに優先度を設定し、優先度が高いモノから順に実行していく方式。実行の途中で優先度の高いプログラムにCPU使用権を奪われることがある(プリエンプション

ラウンドロビン方式

CPU使用権を一定時間ごとに切り替える方式。

マルチプログラミング

タスク管理の役割はCPUの有効活用尽きる。マルチプログラミングは、複数のプログラムを見かけ上同時に実行して見せることで、遊休時間を減らし、CPUの利用効率を高めようとするもの

割り込み処理

実行中のタスクを中断して、別の処理に切り替え、そちらが終わるとまた元のタスクに復帰する…という処理のことを割り込み処理と呼ぶ。

割り込み処理には実行中のプログラムが原因で生じる内部割込みとプログラムの外の要因で生じる外部割込みに分かれる。

  • 内部割込み
    • プログラム割込み … ゼロによる除算や桁あふれ、仮想記憶において存在しないページへのアクセスが生じたり、書き込みできない主記憶装置に書き込もうとした場合に生じる割込み
    • SVC割り込み … 入出力処理を要求するなど、カーネル呼び出し命令が実行された時に生じる割込み
  • 外部割込み
    • 入出力割込み … 入出力装置の動作完了時や中断時に生じる割込み
    • 機械チェック割込み … 電源の異常や主記憶装置の障害など、ハードウェアの異常発見時に生じる割込み
    • コンソール割込み … オペレーターによる介入が行われた時に生じる割込み
    • タイマ割込み … 既定の時間を過ぎた時に生じる割込み

実記憶管理

実記憶管理:限られた主記憶空間を効率よく使えるようプログラムを割り当てる

主な方式

固定区画方式

主記憶を固定長の区画(パーティション)を設けて、そこにプログラムを読込む管理方式。

  • 単一区画方式:全体を唯一の区画とする
  • 多重区画方式:複数の区画に分ける

単純な仕組みなので記憶管理は簡単で済むが、空白が生じ、そこを有効活用できないため、主記憶の利用効率はあまりよくない

可変区画方式

プログラムをロードするタイミングで必要なサイズに区切る管理方式。プログラムが必要とする大きさで区画を作り、そこにプログラムをロードする。

フラグメンテーションとメモリコンパクション

必ずしも詰め込んだ順番にプログラムが終了するとは限りません。そのため、主記憶の空き容量自体がプログラムの実行に足るサイズであったとしても、それを連続した状態で確保できないという事態が生じてきます。→フラグメンテーション(断片化)

このフラグメンテーションを解消するために、主記憶内のプログラムを再配置して細切れの空き容量を連続した一つの容量に置き換える操作が必要になります。→メモリコンパクションもしくはガーベジコレクションと呼ぶ

オーバーレイ方式

主記憶容量よりもプログラムサイズが大きい場合、そのプログラムの実行を可能とする方式。

プログラムをセグメントという単位に分割しておき、必要なセグメントだけを主記憶上にロードして実行する手法。

スワッピング方式

マルチプログラミング環境下では、優先度の高いプログラムによる割込みが発生し、現在主記憶上にあるプログラムをいったん中断させるということが起きます。

そのサイン、優先度の低いプログラムが使っていた主記憶領域をいったん補助記憶装置に退避させることで空き容量を作ります。(スワップアウト)

そして、補助記憶装置に退避させていたプログラムの使用権が与えられた時には再び主記憶装置に戻して処理を行います。(スワップイン)

このような処理をスワッピングと呼びます。

再配置可能プログラムとプログラムの4つの性質

再配置可能プログラム:主記憶上のどこに配置しても問題なく実行できるプログラム

プログラムの4つの性質

  • 再配置可能 … 主記憶上のどこに配置しても実行することができる性質
  • 再使用可能 … 主記憶上にロードされて処理を終えたプログラムを再ロードすることなく、繰り返し実行できる
  • 再入可能 … 再ロードすることなく繰り返し実行できる再使用可能プログラムにおいて、複数のタスクから読みだしても、互いに干渉することなく実行できる性質を持つもの
  • 再帰的 … 実行中に自分自身を呼び出すことができるという性質を持つもの

仮想記憶管理

仮想記憶:主記憶や補助記憶の存在を隠蔽することで広大なメモリ空間を自由に扱えるようにするもの

なぜ自由なのか

主記憶装置を主なデータ置き場として活用しているが、本来は主記憶装置の容量の上限の縛りを受ける。しかし、補助記憶装置も主記憶装置の一部であるかのように見せかけることで、主記憶装置として実際の主記憶装置の容量よりも多く使えるようになる。

その仕組み

仮想記憶領域には区切りがあり、それぞれに番号が振られている。その番号は、動的アドレス変換機構によって、実際の保管場所と紐づけされている。

例)仮想領域0001 → 動的アドレス変換機構によるとそれは補助記憶の0011のこと → 補助記憶の0011を読みに行く

ページング方式

実装方式には次の2つがある。

  • ページング方式:仮想アドレスを固定長の領域に区切って管理する方式
  • セグメント方式:可変長の領域に区切って管理する方式

主にページング方式が採用される。

管理方法

プログラムを”ページ”という単位に分割して管理する。ただし、プログラムには色々な機能があるので、いつもすべてを必要とするわけではない。

そこで、デマンドページングという「実行に必要なページだけを実記憶に読み込ませる」方式が主流になっている。

 

仮想記憶と実記憶の対応付けはページテーブルという表によって管理されている。この表によって、下層ページ番号が実記憶上のどのページと結びついているのかを確認できる。

目的のページが実記憶上のどこにあるのか書かれているので、必要な時にはそこを読みに行く。あればそのまま使うが、なければ補助記憶から引っ張ってくる。

ページインしようとしたらすでに実記憶がいっぱいだった…って時はいずれかのページを補助記憶に追い出して空きをつくる。

(補助記憶→実記憶をページイン、実記憶から補助記憶へ追い出すことをページアウトという)

実記憶の容量が少ないとページの置き換え頻度が増えてシステムの処理効率が極端に低下する。この現象をスラッシングという。

ページ置き換えアルゴリズム

  • FIFO方式 … 最初にページインしたページを追い出し対象にする
  • LIFO方式 … 最後にページインしたページを追い出し対象にする
  • LRU方式 … もっとも長い時間参照されていないページを追い出し対象にする
  • LFU方式 … もっとも参照回数の少ないページを追い出し対象にする
ページングとスワッピング

ページングとスワッピング、同じような事をしているように見えるのに呼称が違うということは、どこかが違うということ?どこ?と感じるかもしれない。

広義のスワッピングでは違いがありませんが、狭義では次のような違いがあります。

  • スワッピング … プロセス単位での領域の出し入れ
  • ページング … ページ単位での領域の出し入れ
タイトルとURLをコピーしました