スポンサーリンク
OS

【OS】構造

OSサービス

OSが提供する機能を紹介します、

ユーザーインターフェース

現在は、多くのシステムにCUIとGUI両方のインタフェースが含まれている。ユーザーはUIを使ってコンピュータシステムを操作したりプログラムの実行を制御する。

GUI (Graphics User Interface) クリックなどで実行を制御する

CLI (Command-Line Interface) コマンドで実行を制御する

プログラムの実行

プログラムをメモリにロードし、その後プログラムを実行し、正常または異常のいずれかで実行を終了する

I/O操作

実行中のプログラムにはI/Oが必要な場合がある。

ファイルシステムの操作

ファイルとディレクトリの読み取りと書き込み、 作成と削除、検索、ファイル情報の一覧表示、権限管理が必要です。

通信

同じコンピューター上で、またはネットワー クを介してコンピューター間で情報を交換できます。

エラー検出

OSは、発生する可能性のあるエラーを常に把握す る必要があります。
→CPUおよびメモリハードウェア、I/Oデバイス。ユーザープログラムで発生する必要になる。そして、エラーの種類ごとに、OSは適切なアクションを実行して、コンピューティングを確保する必要がある。

リソースの割り当て

複数のユーザーまたは複数のジョブが同時に実行されている場合、リソースを各ユーザーに割り当てる必要がある。

ロギング

どのユーザーがどの程度のコンピュータリソースを使用しているかを追跡する。

保護とセキュリティー

マルチユーザーまたはネットワーク化され たコンピューターシステムに保存されている情報の所有者は、そ の情報の使用を制御したい場合があります。並行プロセスは互い に干渉してはなりません。

システムコール

OSが提供するサービスへのプログラミングインターフェース(通常C,C++で記述されている)

システムコールを直接するのではなく、高レベルのAPIを介してプログラムによってほとんどアクセスする。

最も一般的な3つのAPIは、Windows用のWin32 API、POSIXベース のシステム用のPOSIX API(UNIX、Linux、およびMac OS Xのほぼ すべてのバージョンを含む)、およびJava仮想マシン(JVM)用の Java APIです。

システムコールの種類

プロセス制御

プロセスの作成、プロセスの終了
終了、中止
ロード、実行
プロセス属性の取得、プロセス属性の設定
時間を待つ
待機イベント、信号イベント
メモリの割り当てと解放
エラーの場合メモリをダンプ
バグを判断するためのデバッガー 、シングルステップ 実行 プロセス間の共有データへのアクセスを管理するための ロック

ファイル管理

ファイルを作成、ファイルを削除
ファイルを開く、閉じる
読み取り、書き込み、再配置
ファイル属性の取得と設定

端末管理

リクエストデバイス、リリースデバイス
読み取り、書き込み、再配置
デバイス属性の取得、デバイス属性の設定
デバイスを論理的に接続または切断する

情報のメンテナンス

時刻または日付の取得、時刻または日付の設定
システムデータの取得、システムデータの設定
プロセス、ファイル、またはデバイスの属性の取得と設定

通信

通信接続の作成、削除
モデルをホスト名またはプロセス名に渡すメッセージの場合、メ ッセージを送信、受信
共有メモリモデルは、メモリ領域を作成してアクセスします
転送ステータス情報
リモートデバイスの接続と切断

保護

リソースへのアクセスを制御する
許可を取得および設定する
ユーザーアクセスを許可および拒否する

システムサービス

システムプログラムは、プログラムの開発と実行に便利な環境を提供します.

ファイル管理

ファイルおよびディレクトリの作成、削除、コピー、名 前変更、印刷、ダンプ、リスト、および一般的な操作

時々ファイルに保存されるステータス情報

システムに情報を要求する人もいます-日付、時刻、利用可能な メモリ量、ディスク容量、ユーザー数 その他は、詳細なパフォーマンス、ログ、およびデバッグ情報を 提供します

ファイル変更

ファイルを作成および変更するためのテキストエディター ファイルの内容を検索したり、テキストの変換を実行したりする ための特別なコマンド

プログラミング言語のサポート

コンパイラー、アセンブラー、デバッ ガー、およびインタープリターが提供される場合があります

プログラムのロードと実行

絶対ローダー、再配置可能ローダー、リン ケージエディター、オーバーレイローダー、高レベルおよび機械語の デバッグシステム

通信

プロセス、ユーザー、およびコンピューターシステム間の仮想接 続を作成するメカニズムを提供します

バックグラウンドサービス

端末の起動時にバックグラウンド起動する。
カーネルコンテキストではなくユーザーコンテキストで実行する
デーモン、サービス、サブシステムがある

アプリケーションプログラム

ユーザーによって実行される(コマンドラインやマウスクリックや指でタッチするなど)システムに関係しない。そして、通常OSの一部とはみなされない。

 

リンカーとローダー

リンカー

リンカはオブジェクトコード中から呼び出されるコードが収録された他のオブジェクトファイルやライブラリファイルなどを連結あるいは参照し、実行時に適切に呼び出せるよう繋ぎこみ再配置可能なオブジェクトファイルにしておく

再配置可能なオブジェクトファイル

各命令語内の番地が未決定な形式のオブジェクトファイルのこと

ローダー

コンピュータプログラムの種類や機能の一つで、データやプログラムを外部記憶装置やネットワーク上の別のコンピュータなどから読み込むもの

アプリケーションがOSに依存する理由

OSに依存する理由

1つのシステムでコンパイルされたアプリケーションは、他のOSでは実行できない。
→それぞれのOSは、独自のシステムコールを提供するため

複数のOSで実行するための方法

Python、Rubyで実装する。Python、Rubyはインタプリタ言語なので逐次翻訳をする。

標準言語(C言語など)を使用して、それぞれのOSで個別にコンパイルして実行する。

実行中のアプリ(Javaなど)を含むVM(Virtual  machine)を含む言語で記述されたアプリケーションで実行する。

OSの設計と実装

設計

異なるOSの内部構造は大きく異なる場合がある。

ユーザーの目標とシステムの目標

・ユーザーの目標
→使いやすく信頼性が高く安全で高速

・システムの目標
→設計、実装、保守が簡単で柔軟性、信頼性、エラーのない効率的

実装

様々な言語の混合によって実装される

OSの構造

シンプルな構造

MS-DOS

MicroSoft Disk Operating Systemの略で全てキーボードで操作する。

引用元:http://www002.upp.so-net.ne.jp/jsrc/pc-98/dos/dos2.html

モノリシック構造(昔のUNIXシステム構造)

昔のUNIXはハードウェアの機能に制限があり、UNIXのOSでは、構造が制限されていた。以下の2つの要素から構成されている。

システムプログラム

 

モノリシックカーネル

デバイスドライバなども含めてモノシリック(一枚岩)なカーネル。

・メリット

・デメリット
カーネルサイズが大きくなる
拡張性に乏しい
メンテナンス性が悪い

マイクロカーネル:モノリシックカーネルとは反対に、デバイスドライバなどをユーザーレベルまで落としカーネルの安定性やセキュリティを上げたモノ。OSの中核部分であるソフトウェア群(カーネル)に必要最小限の機能だけを搭載することで、小型化と処理の高速化を図る手法のこと

・メリット
マイクロカーネルの拡張が簡単になる
OSを新しいアーキテクチャーに簡単に移植できる
信頼性が高い(コードがカーネルモードで実行されない)

・デメリット
ユーザー空間からカーネル空間への通信のパフォーマンス

 

 

 

現在のシステム構造

UNIX

Layer 5: ユーザープログラム
Layer 4: 入出力装置のバッファリング
Layer 3: オペレータコンソールデバイスドライバー
Layer 2: メモリ管理
Layer 1: CPUスケジューリング
Layer 0: ハードウェア

Linux(モノシリック+モジュラー設計)

階層化アプローチ

オペレーティングシステムはいくつかのレイヤー(レベル)に分割さ れ、各レイヤーは下位レイヤーの上に構築されます。 最下層(レイヤ ー0)はハードウェアです。 最上位(レイヤーN)はユーザーインター フェイスです。

 

LKMを用いたOS

オペレーティングシステム (OS) の動作中のカーネルを拡張するコードを含むオブジェクトファイル。

 

OSのデバック

デバックとは、エラーを見つけて修正することです。

OSは、エラー情報を含むログファイルを生成する

アプリケーションの障害によりコアダンプファイルが生成される場合がある

OSの障害により、カーネルメモリを含むクラッシュダンプファイルが生成される場合がある。

トレース

システムコールの呼び出しに関連するステップなど、特定のイベントのデータを収集する

トレースのためのツール

strace

プロセスによって呼び出されたシステムコールをトレースする

gdb

ソースレベルのデバッガー

perf

Linuxパフォーマンスツールのコレクション

tcpdump

ネットワークパケットを収集する

デバックのツールまとめ

ブライアン・カーニハンの名言:デバックはコーディングよりも2倍難しい。したがって、あなたが可能なかぎり賢くコードを書くとしたら、定義からしてあなたはそれをデバックするほど賢くない。

 

スポンサーリンク