Operatig Systems カーネルとデバイスドライバ 2019-03 1
OS の構成要素 シェル ワープロ ブラウザ さまざまなソフトウェア ] ^ _ Z ` a b c d e ` f Y Z [ \ プロセス管理通信制御ファイルシステム メモリ管理割込み制御タイマ管理 デバイスドライバ 管理プログラム 基本ライブラリ デバイスドライバ CPU メモリ ストレージ さまざまなハードウェア 2
OS の開始処理 ( ブートシーケンス ) 電源オン I/O のチェックメモリチェックマシン初期化 初期化中 稼動状態 内蔵ブート ROM ディスクから IPL ( ローダ ) を読み込む IPL ( ローダ ) IPL がディスクから OS カーネルを読み込み, OS がスタート デバイスドライバやモジュールを構成 OS カーネル サービス 1 ユーザーからの入力を処理する シェル アプリ 1 OS カーネルは稼動し続ける サービス 2 アプリ 2 OS を補助するサービス 3
Widows のブートログ p Widows 7 まで PC 起動時に [F8] キーを押す ブートのログ作成を有効にする を選択して,Widows を起動 p Widows 8 コマンドプロンプトを起動 shutdow /r /o /t 0 と入力して,Widowsを再起動 p Widows 10 mscofig ( システム構成 ) というプログラムを検索し, 実行 ブート ブートログ を選択して,Widows を再起動 p C: Widows フォルダに tbtlog.txt というログが残る 最初に読み込まれている toskrl.exe がカーネル ( 約 8M バイト ) その後, 各種のデバイスドライバ等が読み込まれているのが分かる 4
カーネル p Kerel= 核 OS の中核 = いわゆる OS 本体 p OS の基本機能を提供 資源の管理システムの制御 p 例 ) Liux カーネル 実行時サイズ数メガバイトソースコード 2100 万行以上 https://www.kerel.org アプリケーションプログラム シェル カーネル p 例 ) Widows カーネル system32 toskrl.exe ソースコード 1700 万行以上?(Widows 全体では数千万行?) 5
カーネルの役割 (1) p プロセス管理 プロセス= 実行中のプログラムのことプロセスの生成 ( 起動 ) や消滅 ( 終了 ) の処理をする p プロセスのスケジューリング 複数のプロセスのCPUの利用時間の割り振りをするプロセスやカーネル自身に,CPU 使用権を順に割り当てる p プロセスの同期 / プロセス間通信 複数のプロセスが資源をめぐって競合するときに調整するプロセスとプロセスが通信するしくみを提供する p ファイルシステム HDD などの補助記憶 ( ストレージ ) に記録するデータを管理する 6
カーネルの役割 (2) p 記憶管理 ( メモリ管理 ) 主記憶 ( メインメモリ ) を管理し, プロセスごとに割り当てる入出力制御と連携して, 仮想記憶を実現する p 入出力制御 入出力機器 ( 外部ディスク, キーボード, 画面等 ) を制御するユーザに分かりやすいコンピュータの操作手段を用意する p タイマー管理 現在時刻の管理, 経過時間の監視 通知などを行う p 割り込み制御 ハードウェアからCPUへの 割り込み 通知機能を管理する入出力割込み, タイマ割込み, 演算割込みなどを処理する 7
OS の設計 ( アーキテクチャ ) p モノリシック ( 一枚岩 ) カーネル OS のカーネルを,1 つの巨大なプログラムとして開発する 冗長性を抑え, 実行速度が速いが, 内部は入り組んだ設計になる p マイクロカーネル カーネル本体は, できるだけ小さく最小限の機能にとどめる他の機能は, 別々の小さなプログラム ( サービス ) として開発する 拡張 改良が容易で運用性も高まるが, 実行速度が犠牲になる p 中間的な手法 モジュール化 : カーネルの機能をモジュール ( 部品 ) に分割しておき, OS 起動時の初期化段階で, モノリシックカーネルのように結合する デーモン / サービス : 通常のプログラムを常駐させることで,OSに機能を追加する (UNIX: daemo, Widows: service) 8
デバイスドライバ p デバイス = ハードウェア装置 ハードディスクコントローラ, ネットワークアダプタ (LAN), プリンタ, 内蔵時計, キーボード, マウス, ディスプレイなど OS 内部には, デバイスごとの制御方式を組み込まないといけない p デバイスドライバとは? デバイスを駆動 ( ドライブ ) するための専用のソフトウェア カーネルの中の各デバイス ( ハードウェア ) に依存した部分のこと p デバイスドライバのモジュール化 昔は, カーネル本体にそのコンピュータに接続されているデバイスを扱うプログラムが埋め込まれ, 変更には再コンパイルが必要だった 現在は, カーネルに着脱できる モジュール ( 部品 ) になっている 9
Widows の例 p Widows のサービス一覧 サービス ( 常駐しているプログラム ) の一覧を表示する Wi8まで : [ コントロールパネル ] [ 管理ツール ] [ サービス ] Wi10: [ スタートメニュー ] [Widows 管理ツール ] [ サービス ] p Widows のデバイスドライバ デバイスドライバの一覧を表示する Wi8 まで : [ コントロールパネル ] [ システム ] [ ハードウェア ] [ デバイスマネージャー ] Wi10: [ 設定 ]( 印 ) [ デバイス ] [ デバイスマネージャー ] 10
コンピュータハードウェア p 制御機能 / 演算機能 CPU( プロセッサ ) CPU p 記憶機能 主記憶 ( メモリ ) 補助記憶 (HDD 等 ) バス p 入力 / 出力機能 メモリ 入出力 各種周辺機器 I/Oとも呼ばれる デバイスドライバで制御 ストレージ (HDD 等 ) 11
デバイスドライバの動作方式 p デバイスとソフトウェアの関係 デバイス OS ソフトウェアデバイスドライバが動作するケースは以下の2つ p ソフトウェア側からの要求 ソフトウェアが,OSが提供するAPIを介して, デバイスを利用する例 ) ワープロソフトによるファイルの読み書きソフトウェア (API) カーネル ドライバ デバイス p デバイス側からの要求 デバイスが,OS に対応を要求し ( 割り込み ), 登録されたデバイスドライバまたはソフトウェアが処理する 例 ) ネットワークからのデータ着信, センサーからの割り込みデバイス ( 割り込み ) カーネル ドライバ / ソフトウェア 12
割り込み? p 割り込みとは ハードウェアなどから, 処理要求がCPUに通知されるしくみ ハードウェア的な仕組みとして実現されている ( 一種の電子回路 ) 通常のOSでは, 割り込みはOSのカーネルによって処理される p 外部割り込み ハードウェアの状態変化で発生する割り込み入出力割り込み : ディスクへの読み込み完了などタイマー割り込み : 設定時間の経過 p 内部割り込み ( 例外, トラップ ) CPU 内部の演算 処理等で発生する割り込みゼロ除算割り込み : ゼロによる割り算が発生 SVC 割り込み : 故意の割り込みでOSに制御を渡し,APIを実行 13
割り込みのしくみ アドレス A プログラム実行中 実行中のプログラム 割り込みベクターを見てアドレス B にジャンプ 割り込みハンドラ ( カーネル内 ) OS カーネル内に制御が移る アドレス B 割り込み処理 割り込み X 発生 元の処理に戻る 割り込みベクター ( メモリ内の割り込み一覧表 ) 続きから実行 割り込みの種類割り込みX 割り込みY 割り込みZ 割り込みハンドラアドレスB アドレスE アドレスF 14
演習課題 ( 後日提出 ) p 課題 3a HOS のブート過程 この課題の狙いは,OS の起動処理の理解である HOS を題材にして, 実際の OS のブート過程を見てみよう HOS は小規模な組み込み OS なので, 通常の OS と異なり, ユーザのプログラムは OS の関数として開発され,OS 本体に一体化される mai 関数では, まずカーネルを起動する関数 sta_hos が呼ばれ, 起動したカーネルからユーザの関数 ( タスク ) が実行される p 手順 hos-v4 sample wi sample.sl を開いて実行してみる 次に, ステップイン (F11 キー ) を押して実行を開始し, さらに F11 キーを連打するなどして,1 つずつ関数の処理内容を追いかける SampleIitialize に到達したら,OS 本体の起動は終わりである 実行された関数の順番を記録し, コメントから処理内容を考察する 15