[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:20389] Re: OS-Versionとプログラムの互換性



こじま@ちょっと言葉が足らなかったようなので,,

From: KOJIMA Mitsuhiro <kojima@linet.gr.jp>
Subject: [plamo:20385] Re: OS-Versionとプログラムの互換性
Date: Mon, 25 Aug 2003 17:06:21 +0900 (JST)

> > 残った疑問(1)は,
> > libcのLinuxシステムにおける階層的な位置付けです。
> > 一般的な階層を,
> > [1] [(layer) user space:   application program]
> > [2] [(layer) kernel space: kernel, kernel_module] (irq processを含む)
> > [3] [(layer) hardware ]
> > としたときに Libcは,[1],と[2] のどちらに位置付けられるのでしょうか?
> 
> [1] でせう.UNIX 系 OS の場合,カーネルスペース(カーネルモード)はカー
> ネルにしか許されていない領域で,libc 自身も含めて libc 等を経由したユー
> ザプロセス(shell も含む)には触れることはできません.

もちろん,ユーザプロセスからもメモリの割り当てやファイルの入出力のよう
なカーネルが管轄している機能を使う必要が発生しますが,そのような場合は
カーネルが提供しているシステムコールやデバイスファイルを経由してカーネ
ルにリクエストを送って必要な処理をしてもらうことになります.

libc が提供している各種ライブラリ関数は,atoi() のように libc の内部で
閉じているものもありますが,fopen() や calloc() のように最終的にはカー
ネルの提供しているシステムコール(open,brk)を使うものの,アプリケーショ
ンに対してより使い易く,移植性が高いインターフェイスを提供しているので,
そちらを使えば直接システムコールを叩くよりは簡単にプログラムが組めるで
せう.

# システムコールを直接叩くようなプログラムは Linux でしか動かないけど,
# libc のライブラリ関数を使うプログラムは Linux 以外の UNIX 系 OS でも
# 動く可能性が高い.

> # 厳密に言うと ioperm() みたいなシステムコールがあるので,ちょっと微妙
> # なところもあるが > Linux

ちゃんと調べたわけではないけど,あらかじめ用意されているシステムコール
では足りない場合,カーネルモジュールを使ってカーネルに必要な機能を追加
することになるんでしょうね.

--------
こじま

References
[plamo:20251] Re: OS-Versionとプログラムの互換性, KOJIMA Mitsuhiro
[plamo:20383] Re: OS-Versionとプログラムの互換性, H.Shiozaki
[plamo:20385] Re: OS-Versionとプログラムの互換性, KOJIMA Mitsuhiro

[検索ページ] [メール一覧]
Plamo ML 公開システム