オペレーティングシステム(OS)
Operating System とコンピューターシステム
プログラムとは
- 入力デバイス、ネットワークアダプタを介してコンピューターに何らかの処理を依頼する。
- メモリ上に存在する命令を読みだして CPU で実行し結果をメモリ上のデータを保持する領域に書き込む。
- メモリ上のデータを HDD や SSD などのストレージデバイスに書き込む、またはネットワークを介してべつのコンピュータに転送するまたは出力デバイスを介して人間に見せる。
- 1に戻る
このような処理を繰り返して user にとって意味のある1つの処理にまとめたものをプログラムと呼ぶ。
プログラムには大きく分けて3種類
アプリ ユーザーに直接、役立つ。
ミドルウェア(以下 mw) 多くのアプリに共有した処理をくくり出してアプリの実行をサポート。db、サーバーなど
OS ハードウェアを直接操作してアプリや mw の実行に必要な機能を提供する。linux など
オペレーティングシステムとは
OS が生まれる前はプログラムは手動でコンピューターに読み込まれていた。 コンピュータが速くなるにつれマニュアルでは追いつかなくなった。そのためコンピュータ自身に operate させるため生まれたのが OS である。
アプリケーションは任意のハードウェアに特化したものであった ハードウェアがアップデートされた場合、アプリケーションも逐一変更しなければならなかった。
OS はハードウェアとアプリケーションの間に入り演算装置やハードディスク装置などのハードウェアを効率よく利用するための基盤ソフトウェア。 つまりハードウェアを意識することなくアプリケーションが動かせるようになる。
コンピューター利用者やアプリケーションプログラムに対して共有的な機能を提供する。
OS の構成
仮想計算機部分
ハードウェアの仮想化を行い、基本的な機能を提供するコア・カーネルとも呼ばれる。 カーネルモードでのみ動かせる処理をまとめたプログラム
サービス提供サブシステム
より高度なサービスをアプリに提供するライブラリ
コンピューターシステムの概要
CPU のカーネルモードとユーザーモード
カーネルモード 通常のプロセスから実行できると困る処理を動かす時のモード プロセス管理システム、メモリ管理システム、プロセススケジューラなどを動かす時のモード
ユーザーモード 通常のプロセスを実行する時のモード
システムコール
カーネルが提供する機能を使うときに使う特殊な処理 プロセスはカーネルが提供する機能を使いたければシステムコールを発行しなければならない
アーキテクチャ依存のアセンブリ言語を書いて呼び出さないといけない
プロセス生成、削除 メモリ確保、解放 プロセス間通信 ネットワーク ファイルシステム操作 ファイル操作(デバイスアクセスなど)
OS の機能
システムコール呼び出し
OS はシステムコールを呼び出すためのラッパー関数を提供している
外部デバイスの操作
linux ではデバイスを操作する処理をデバイスドライバというプログラムにまとめてプロセスからデバイスにはデバイスドライバを介してアクセスするようにしている。カーネルモードでのみデバイスにアクセスできる
プロセス管理システム
カーネル内のプロセス生成、廃棄を担当するシステム
fork 関数() 同じプログラムを複数のプロセスに分けて処理するに用いる関数 web サーバーによる複数リクエストの受付など
execve()関数 全く別のプログラムを生成する場合に用いる関数
プロセススケジューラ
複数プロセスを同時に動作させているように見せるための機能 どのプロセスを論理 CPU 上で動かすのかのスケジューリングをしている CPU リソースはプロセススケジューラが管理している
論理 CPU 上でプロセスが切り替わることをコンテキストスイッチという。 *タイムスライス(個々のプロセスを適当な長さの時間で区切る際の時間のこと)が切れるといかなる状況でも実行される。
スループット 単位時間あたりの総仕事量。 完了したプロセスの数/経過時間
レイテンシ それぞれの処理開始から終了までの経過時間 処理終了時刻 ー 処理開始時刻
マルチコア CPU 環境では複数プロセスを同時に動かさないとスループットは上がらない コアが n 個あるから性能が n 倍になるのは最良ケース
メモリ管理システム
システムに搭載されている全メモリを管理する機能
メモリ管理システムには OOM killer という機能があり OOM 時に適当なプロセスを kill する機能
仮想記憶がない場合の単純なメモリ割り当て機能の場合、断片化、別用途のメモリにアクセスできる、マルチプロセスの扱いが困難という問題が起きる
プロセスから実際のメモリ、物理メモリにアクセスできる方法はない
仮想アドレスにないメモリにアクセスしようとするとページフォールトが起きてプロセスは通常強制終了する
記憶階層
記憶装置の階層のこと
メモリアクセスの平均所要時間はレジスタの計算時間に比べて非常に遅い そこでキャッシュメモリが存在する 通常は CPU 内にある
ファイルシステム
ストレージデバイス内のデータにアクセスするためのソフトウェア ファイルシステムがないと書き込む際にデータサイズとストレージアドレス内の場所を指定しなければならない 読み出す際はサイズと場所を覚えておかなければならない どこにどんなデータがあるか、どこが空き領域かを管理するのがファイルシステム
備考
OS の設計において重要な概念
抽象化
ここの具体的な機能や特性から重要ではない性質や表現を捨て去り共通した要素を取り出す OS では共通した機能だけを提供し、アプリケーションで具体的な機能が実現される。
仮想化
メモリなどの記憶装置や CPU などの演算装置の物理的な制限を排除するため論理的な実体を提供する。 OS では物理的な量の制約などを排除するためにハードウェアを仮想化し論理的な実体として計算機資源を提供する。
構造化
複雑な構造を整理し、単純な要素に分割した上で要素間の関係を明確にする。 構造化の代表例が階層化であり要素間が上下関係を持つように整理する。OSI 7層モデルなど
トレードオフ
ある要求を満たそうとすると他の要求が満たせなくなる状態
プロセッサ(演算処理装置)の構造
演算ユニット
数値的な足し算、割り算。XOR、AND 演算など
制御ユニット
全てのデータのやり取りの制御を行っている部分
レジスタ
プロセッサ内の高速化のメモリ。非常に高価なので容量が限られている
制御レジスタ
-
プログラムカウンタ 次に実行する命令のアドレスと示すレジスタ
-
プロセッサ・ステータス・レジスタ(PSW) プロセッサの状態を示すフラグを集めたレジスタ 例) キャリー(桁上がり)・オーバーフロー(数値の計算結果がその格納領域に収まる範囲を超えること)・割り込みなど
参考文献
Linux のしくみ 実験と図解で学ぶ OS とハードウェアの基礎知識」武内 覚 技術評論社 (ISBN: 477419607X)
オペレーティングシステム」大澤 範高 コロナ社(ISBN: 4339027073)