Download presentation
Presentation is loading. Please wait.
Published byStewart Carroll Modified 約 5 年前
1
担当:青木義満 yaoki@sic.shibaura-it.ac.jp
情報工学科 3年生対象 専門科目 システムプログラミング 第6回 システムプログラミング概要 プロセスの生成 担当:青木義満
2
システムプログラミングへの準備 システムコールとは? システムコールの仕組み,働きの理解
3
システムコールの役割 システムコール ライブラリ関数の行き着く先 例 printf関数 → writeシステムコールを呼び出し
画面に文字を表示 HDDにデータを書き込み ネットワークにデータを伝送 etc…..
4
Unixシステムの構成
5
1.カーネル層 メモリに常駐しているプログラム,ハードウェアとの接点,システム層以上の上位層をハードウェアに依存しない独立したものとする役割
ハードウェアを抽象化して統一的に扱える機構を提供 システム資源の管理 メモリ,入出力,ファイル,プログラム
6
2.システム層 Unixが動くのに最低限必要となるプロセス,ディレクトリ,ファイルから構成 あらかじめ用意されているソフトウェア群
シェル(CLI), GUIもここに属する
7
3.ユーティリティ層 ユーザにより,必要に応じて導入されるソフトウェア群 ソフトウェア開発用コマンド,テキスト文書作成,データ処理 等
8
4.ユーザ層 下位のユーティリティ,システム又はカーネル層の機能を用いて実現されるアプリケーションプログラムやシェルスクリプト
利用者自身の作成したプログラム,フリーソフトなど
9
カーネル+システム層まで カーネル層からユーティリティ層まで → オペレーティングシステム(OS) カーネル最小化の傾向へ
→ システムソフトウェア カーネル層からユーティリティ層まで → オペレーティングシステム(OS) カーネル最小化の傾向へ カーネル内のほとんどの機能をプロセスとして実現,カーネルから追い出し カーネルを軽くする カーネライズド・カーネル(核化したカーネル)
10
システムコールの役割 システム層以上のソフトウェアがカーネル層の機能を呼び出す
カーネルが管理しているシステムのリソース(資源)をアクセスする手段 システムコール関数 write()の例 write自身が機能提供するわけではなく,単にカーネルを呼び出している 呼ばれたカーネル内で対応する処理を実行,結果をwrite()に返す システム層以上のソフトウェアとカーネル層との情報伝達手段 カーネル層の機能を呼び出して結果を得る カーネル層と上位層との間でデータ交換を行う機能を提供
11
システムコールの仕組み 例)ファイルからのデータ読み出し 2つの実行モード ユーザプログラムから直接ファイルアクセスしない
システムコールに対応するカーネル層のプログラム 2つの実行モード ユーザプログラム自身のコードの実行 ユーザモード 2.カーネル層のプログラムコードの実行 カーネルモード
12
ユーザモードとカーネルモード カーネルモード ユーザモード 割り込みなどの例外が発生したときに制御が移るモード。
ユーザ,ユーティリティ,システム層のプログラム 直接,あるいは間接的にライブラリ関数を用いてシステムコールを呼ぶと,システムコール関数内で実行モードをカーネルモードに変更する命令を発令(trap命令:ソフトウェア割り込み)
13
システムコールの実行過程 OSがシステムコールに番号を割当て,これによりシステムコールを識別 手順
システムコール関数内で自分自身に割り当てられた番号をCPU毎に規定されている方法に従ってカーネル層に渡す カーネル層では,受け取ったシステムコール番号をインデックスとし,切り替え表を検索,実行
15
図3.2
16
システムコールの種類と機能 機能 ファイルの入出力 端末入出力 プロセスの生成と実行 シグナル処理 プロセス間通信
17
システムプログラミング プロセスの生成
18
システムコールの種類と機能 機能 ファイルの入出力 端末入出力 プロセスの生成と実行 シグナル処理 プロセス間通信
19
プロセスとは? 「プログラム」:実行形式ファイル プログラムを実行するには? いわゆる「プログラム」のみでは実行不可能!
ユーザプログラムは直接or間接的にシステムコールを呼ぶ → カーネル内関数が必要 CPUやメモリ,ディスクなど,ハードウェア資源を割り当ててもらう必要 いわゆる「プログラム」のみでは実行不可能!
20
プロセスとは? 「プロセス」 プロセスモデル =プログラム+ソフトウェア資源+ハードウェア資源 (プログラムを実行する環境)
=プロセッサ+実行環境(イメージ)から構成 プロセスモデル P:プロセッサ I:イメージ P I P I P I 初期状態 終了状態 ※プロセッサと作用するイメージの行動状態が時間的に変移
21
ユーザリングとカーネルリング 1つのプロセス 「リング切り替え」が起こる2事象 ユーザプロセス⇔カーネルプロセス
両者の切り替え(リング切り替え) 「リング切り替え」が起こる2事象 システムコール及び内部割込み からなるトラップ命令の呼び出しと復帰 ユーザプロセスでの割り込み (インタラプト,タイマーやハードウェア)
22
プロセスの木構造 UNIXプロセス プロセスの区別 fork()システムコールにより生成 親プロセスと子プロセス
親から生成された子プロセスは親の分身 exec()システムコールにより,別のプロセスへ変身 プロセスの区別 カーネルは各プロセスをプロセスID(PID)により識別
23
プロセスの生成と変身
24
プロセスの木構造 プロセス0:カーネルプロセス プロセス1:init システム起動時に生成される特別なプロセス
プロセス1をfork()で生成後,スケジューラとなる プロセス1:init システムにおけるすべてのプロセスの先祖 initから始まるプロセス生成の繰り返しにより,プロセスの木構造を形成
25
実際のUNIXプロセス木
26
プロセスの状態 生成プロセスの生涯 定められた規則に従い,5つの状態を遷移 実行状態:現在CPUで実行中の状態
休眠状態:入出力の終了待ちなどで実行を継続できない状態 生成状態:fork()システムコールにより生成された状態 ゾンビ状態:exit()システムコールにより終了した状態
27
プロセスの状態遷移図 入力待ちにより実行状態→休眠状態へ CPU占有時間経過による実行状態→実行可能状態への遷移 他のプロセスへ実行権を譲る
多重プログラミング機能の実現 CPU占有時間経過による実行状態→実行可能状態への遷移 OSのTSS(Time Sharing System)機能の実現
28
プロセスの管理 プロセスIDとプロセスグループID プロセスID プロセスグループID プロセスを一意に識別するための番号
共通のプロセスを先祖に持つ複数のプロセスを親族とし,プロセスグループとして管理 例) ログインシェル → ウインドウを開く → コマンドを実行 ・・・・・
29
プロセスの優先度 実行可能状態にあるプロセスに対して優先度を定義 スケジューラにより,優先度の高い順に選択されて実行 カーネル
プロセス優先度を自律的制御で刻々と変化 プロセス実行の機会均等を実現 優先度を変更するシステムコール nice()
30
端末上で動いているプロセスを表示してみよう
ps コマンドでプロセスを表示 様々なオプション ps –ef でプロセスを表示してみる
31
子プロセスの生成 int 親プロセスの分身が子プロセスとして生成(PID)は異なる Fork()終了後,全く同じプロセスが平行して実行
32
親プロセスと子プロセスの切り分け forkの戻り値 0: 子プロセスに返される。子プロセスの動作を記述
1以上:子プロセスのプロセスIDが親プロセスに返される。親プロセスの動作を記述 -1: 親プロセスに返される。エラー処理 execシステムコールにより, 他プロセスに変身!
34
子プロセス生成後,親プロセスはwait()を呼んで子プロセスの終了を待つ
子プロセスの終了ステータス情報を得るため,引数statusをアドレス渡し 子プロセスの終了ステータス情報が,statusの指すintの領域の下位16ビットに格納 ステータス情報でわかること ・子プロセスが終了したのか,停止したのか ・子プロセスが終了した場合の終了の原因
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.