トップページ⇒tech
32コメント11KB

システムコールって何?

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
何? どの関数がシステムコール?
0002デフォルトの名無しさんNGNG
http://www.ascii.co.jp/ghelp/37/003749.html
0003デフォルトの名無しさん NGNG
OSはなんですか?関数ってことは言語はCでいいのかな?
0004マジレスさんNGNG
>>1
OSで、あらかじめ用意されている関数たちだぁ〜ねぇ〜
移植性に乏しいから、あんまし使わない方が良いけど、痒い所に手が届くから便利。
0005デフォルトの名無しさんNGNG
UNIX系OSなら、man 2がシステムコール、man 3がライブラリ。
0006デフォルトの名無しさんNGNG
man ko は?
0007デフォルトの名無しさんNGNG
>>6
あのさー、その手のネタ思いついてうれしいんだろうけどさ、
得意げに発言しないでくれる?はげしく既出だし。
0008デフォルトの名無しさんNGNG
man co
ならアリなんだけどね。
0009デフォルトの名無しさんNGNG
UNIXならwrite、fork、socket、他多数。
Windowsだと直接呼ぶのは禁止じゃない?
0010デフォルトの名無しさんNGNG
システムコール=OSのAPIだろ?
0011デフォルトの名無しさんNGNG
システム部門の人を他の部署が呼び出す事です。
0012みのもんたNGNG
>>10
………正解っ
0013デフォルトの名無しさんNGNG
>>10
細かい定義だと違うと思いますよ。Windowsの場合、
システムコールとライブラリコールの区別がないので。

Windowsでは、カーネルモードに直接スイッチする形で
システムコールの呼び出しはできないという意味です。

一般的なUNIXでもCライブラリが割り込み命令をラップ
したライブラリ中にある関数として実装されてますが、
ほとんどの場合、それ以上のことはしません。
0014デフォルトの名無しさんNGNG
WindowsのCreatXXXっていうカーネルオブジェクト取得関数も
ラッピングされているのかな?
やっぱりそうだよね?>13
0015デフォルトの名無しさんNGNG
>>14
「CreatXXX」って、なんかUNIXっぽい名前だな
0016デフォルトの名無しさんNGNG
Windows NT/2000 系 (x86) だと、カーネルモードへの移行にはソフ
トウェア割り込み int 2E が使われています。NTDLL.DLL, GDI32.DLL,
KERNEL32.DLL, USER32.DLL を逆アセンブルして int 2E で検索する
と、だいたい分かります。

いずれにせよ Native API (UNIX のシステムコールに相当、カーネル
モードへのエントリポイント)は基本的に undocumented で、一般の
アプリケーションから呼ぶことは推奨されていません。
0017デフォルトの名無しさんNGNG
>10 >12

それってさ、シェルスクリプト=バッチファイルだろ
って言っているみたいでかっこわるいぞ

知らん人に説明するとにに…みたいな物って言い方ならいいけど
0018デフォルトの名無しさんNGNG
>9
>UNIXならwrite、fork、socket、他多数。
>Windowsだと直接呼ぶのは禁止じゃない?

禁止じゃないよ
あんまり呼ばないでねみたいなことMSは言ってるけど
forkはwinにないから使わないけど他のやつは移植考えたら
つかっちゃうなー
0019デフォルトの名無しさんNGNG
POSIX
0020デフォルトの名無しさんNGNG
forkあるよ。
0021デフォルトの名無しさんNGNG
>>18
ん、なんか微妙に話がずれてる気が。

Win32 だと _write() はライブラリ関数として実装されています。
MSVCRT.DLL の _write() は、内部で Win32 API の WriteFile()
を呼んでる。

この手の「UNIX だとシステムコールだが、Win32 だとライブラリ関
数」というのは、別にアプリケーションから呼んでも問題ないです。

まずいのは Win32 のカーネルへのエントリポイントを直接呼び出す
こと。たとえば Win32 API の OpenMutex() をスキップして、直接
Native API の NtOpenMutant() を呼び出す、とかね。

>>20
POSIX サブシステムに入ってる fork() のこと?
0022デフォルトの名無しさんNGNG
>>4同意
OSとおんなじCPUの特権レベルで動くってのがミソ。
IO、プロセス管理、メモリ管理に関係するような関数。
0023デフォルトの名無しさんNGNG
システムコール
主にCPUに、割り込みを掛け、OS(DOS)を通さずに、
直接I/O(システムorハードetc)とデータをやり取りする事。
x86系のCPUだと、「INT xxh」命令を使う事によって実現。
かなり、かゆいところまで、手が届き、
システム(ハード)の性能を、かなり発揮できるが、その反面、
システムが変わると、関わっているコードを全て作り直す必要あり。

ファンクションコール(DOSのみの言い方?)
システムコールの1部?
主に、CPUに割り込みをかけ、OSを通して、I/Oとデータをやり取りする。
M$-DOSだと、「INT 21h」命令を使う事によって実現。
OSを通すため、システムに依存する事なく、システムが変わっても、
同じコードを書き直す事なく使う事が出来る。(出来ない場合もある)
速度的にも、ほとんどシステムコールと変わらないが、
かゆいところに、手が届かない事が、しばしばある。

DOSの役割
ファンクションコールをサポートし、多くのコードの環境依存を少なくする事。

OSの役割
それ(DOS)に加え、人間が、それを直感的、かつ、扱い易くする事。

使っても良いと言われているシステムコールは、
OSレベルでサポートしてない、もしくは、それでは遅すぎる場合等に、
DOSレベル(人間にあまり優しくない命令の(ファンクションコール))を使って、
データをやり取りする関数で、使っては駄目と言われているのは、
システムに依存している(システムコール)を使っている関数です。

って、分かり辛いかな…。(^^;
0024デフォルトの名無しさんNGNG
>>23
なんで今更DOSの話持ち出すかなぁ(^^;
002510NGNG
>>17
>>1 さんの尋ねているレベルに合わせて答えただけなんですけどね・・・
0026デフォルトの名無しさんNGNG
>>23
DOSとOSを分けてることが意味不明
DOSで言うのなら、INT21hがシステムコールだし。
0027デフォルトの名無しさんNGNG
>>23
ネタじゃなければ尊敬する
0028デフォルトの名無しさんNGNG
>>15
UNIXというよりX窓的なのでわ…
UNIX勢は大文字嫌いだとか聞いたけど(笑)

>>21
Winにおいてfork()って、やっぱりそれを使うと
窓アプリのインスタンスがいきなり2つに分身
したりするんでしょうか?(笑)

>>22
特権レベルっすか。今更だけど古典MacOSは
たしかアプリも全部同じレベルで動く
(のでメモリ保護とかがスカ)とか聞いた記憶が。
特権云々は、OSの機能の一環として保護機能を提供
してるようなOSについて言える話なのでは?

>>23
その説明って、SHELLの役割の説明と被ってる。
0029デフォルトの名無しさんNGNG
NTのPOSIX サブシステムってどうやれば使えるんですか?
0030デフォルトの名無しさんNGNG
>>29
VC++ だったら、コンパイル時に cl に /link /SUBSYSTEM:POSIX オ
プションを渡せば良い。エントリポイントが __PosixProcessStartup
になるので注意。

あと NT の POSIX サブシステムは機能が不足しすぎていて、実用には
なりません。POSIX サブシステムを使うを Win32 サブシステムの機能
は全く使えないし。
0031デフォルトの名無しさんNGNG
>かなり、かゆいところまで、手が届き、

痛いところまで手が届くんで
用心しとけ。
0032デフォルトの名無しさんNGNG
>>28
>>15 のUNIXっぽいってのは、CreateじゃなくてCreatなところに
突っ込んでいるんだと思います。
■ このスレッドは過去ログ倉庫に格納されています