OSの機能なのにシステムコール呼び出しが遅い理由
OSの機能は速いと習ったのですが
システムコールは遅いとも聞きました
矛盾しているようですが間違いじゃないですか? 一日に何百、何千と立てられるスレッド。
その中には良スレもあれば、糞スレもありますがこのスレはまさに後者でしょう。
>>1がどんな思いを込めて、このような糞スレを立ててしまったのか私たちには知る由もありません。
ただ一つわかってほしいのは、決して>>1に悪気があったわけではないということです。
どうか皆さん、糞スレを立ててしまった>>1を許してあげてください。
いつの日か>>1が、この失敗を糧に良スレを立てられるようになるといいですね。 >>1
カラオケ部屋で時間近くになると鳴るやつあるじゃん
延長するかとか答えないと先に進めないよね
あんな感じでアイドルタイムが発生するんだよ >>1
>OSの機能は速いと習ったのですが
誰に?OSの機能って何?速いって何と比べて?なんで習った人に聞かないの? >>4
OSの機能というのはUnixコマンドのことです 普通のCの関数なんか、中でシステムコール読んでるだけなんだから、
システムコール直接呼ぶほうが速いだろ?
なんで遅いと思うの? たとえばシステムコールでディレクトリ読んだほうがlsで読んだ時より遅い気がするってこと?
気のせいじゃない。
あるいはよっぽどアホな呼び方をしてるとか lsはOSの機能だから速いのに
システムコールは遅いっていうのが
意味がわからないんです システムコールでファイル一覧取得と、
lsでファイル一覧取得
コード書いて時間計測してみたら? そりゃCPUが特権モードとかに変わるから単純な関数コールというわけには行かずコンテキストの保存、復帰が伴って遅くなるわね。
その上パイプラインストールするしキャッシュミスもする。 >>11
計測するまでもなくlsだってシステムコールを
呼び出してるんだから遅くなるに決まってるだろ >>13
それがわかってないスレ主にいっとるんだが?
日本語読めないなら引っ込んでろ DOS時代のファイラーならディレクトリ直読み書き換えなんて当たり前だったな こんな事でも15も伸びるのか、、
システムコールでスレッド作れば遅いけど、コンテキストスイッチなどせずに時分割処理を協調的に書けば、それそのものが発生しない。
またメモリ確保などはlibc/mallocなどを通してOSのシステムコールを最終的に呼び出す。
これはOS管理外のメモリなんて存在しないため通常であれば、標準ライブラリが内包しているシステムコールなので速さはシステムコールだけで要求を満たすなら、それで言うまでもない。
しかし、あらかじめメモリプールでドカッと確保して、要求に応じてメモリーマネージメントをするような言語の場合はシステムコールをそもそも何回も呼び出さないため、メモリの配分(≒確保)は速い。
(ただしメモリーの解放処理・再利用に掛かるコストなどは別問題)
またシステムコールで特権命令を使用する場合はCPUにおけるリングプロテクションはOSをクラッシュさせたりすることが無いように何重にも状態のチェックが行われる。
ファイルシステムなどはデバイスドライバにより異なるが、VFS制御をいれるよりもブロックデバイスを直接読み取りしたほうが速い場合もある。
つまりシステムコールは速いのではなく、多くの人が見て優秀な人が書き、何回も呼び出されるため琢磨されて無駄の無いコードで書かれるが、
OSとしての機能を成立させるために、排他制御や複数プロセス・スレッドの切り替え制御、特権制御などを行うため、実行コストは重い。
OSの機能だから速いのではなく、OSの作成者のような同じ技量の人が、”排他処理などを省いて同等の機能を書けたら”その方が速いのである ちょっと待って
lsとかはOSのコマンドだって知ってる?
OSのコマンドはアプリと違ってOSに近い所で動くから速いんだよ
OSの仕組みを勉強した方がいい
アプリ
↓
言語
↓
シェル(ここより下がOS)
↓
カーネル
↓
ハードウェア
こういう流れになってる。
アプリはOSから離れてるから遅いけど
OSのコマンドはOSに近いから速い シェルのパイプもOSの機能だから
パイプを使うとネットワーク通信よりも遥かに
高速に通信できるという特徴がある >>17
昔のMSDOSと違ってUNIXではlsなんかも外部コマンドなんだよ
最近は違うのかもしれんけど
独立したソースがあると思う そうかcshとかbashとかで別々に実装するのは非効率だから
lsコマンドとかは外部になってると思うよ
cdみたいなのとかシェル固有の機能はシェルに入ってるだろうけど >>17
デタラメを教えたらダメ
lsのソースを見ればわかるように
他のプログラムと全く同じで
OSシステムコールを行なう普通のC標準ライブラリを使っている
つまり全てのコマンド/アプリは対等 >>18
シェル自体もOSから見たら単なるアプリの一つにすぎない
シェルのパイプも他のアプリと全く同様に標準入出力切り替えや子プロセス起動などのシステムコールを行なうC標準ライブラリを使っているだけ
当然シェルでやっても自作のアプリでやっても速度は同じ >>24
んだな。
仮にシェルがOSと不可分なら特定のOSに複数のシェルが動作可能ってことの説明がつきにくい。
あくまでOSのシステムコールを使いやすくCLIでラッビングしてるアプリケーションがシェル。 >>10-11
ファイル情報の取得にかかる時間 <<<<< 越えられない壁 <<<<< 表示にかかる時間 だからlsのソース見てみりゃいいって
普通にシステムコール使ってるだけ そう。だからOSのコマンドであるlsは
システムコールを使ってるから速いんだよ OSの定義に広義狭義があるけど、俺にはそもそも「lsがOSのコマンド」に違和感。 シェルの機能はcdとかだろ
lsは独立したプログラム システムコールもカーネル領域とユーザー領域がある
前者は大抵プロセスやドライバを跨ぐような機能の呼び出しだから遅い そりゃ普通こんなスレはスルーだし
よっぽど暇じゃなきゃこないよ togetterでもユニケージが言ってることのおかしさがまとめられてるね
これが「超高速開発手法」です。です!
https://togetter.com/li/960555
>「超高速開発手法については、例えば、Linux のオペレーティングシステム(OS)に直接命令を出す「シェルスクリプト」などが挙げられる。」
なぞ理論w シェルスクリプトでビッグデータ処理~ユニケージ開発手法とは~
https://enterprisezine.jp/article/detail/4579
當仲 寛哲[著]
↑USB研究所の社長 >>39
素人相手に小難しい単語並べて煙に巻くコンサルの手本のような記事だなw >>31
shellの機能は
echo *
じゃないか シェルスクリプティングを自分等の開発した独自な手法、とか言ってる時点でヤバい会社だと分かる >>42
POSIX原理主義「我々が考えた完璧な理論」
というのもある
実態は単に別の人達が作ったPOSIX、に準拠しろと言ってるだけ
w3cに準拠すれば互換性が高くなる
これを我々は「w3c原理主義と名付けた」
我らの理論は完璧だ! 何に対して遅いのか
秒間呼び出し回数はどの程度なのか
自作システムコールでも作って評価したことがあるのか ユニケージのアーキテクチャ
https://unicage.eu/technology/architecture/
ユニケージはユーザースペースではなくOSの一部として動いている証拠
だから速いんだよ >>47
>ユニケージは大福帳方式です。
爆笑してしまった
だ大福帳方式ってあんた… >>44
w3cのほうが良かったけどな。
Google主導のLiving standardは、HTMLを危険なものとしたうえで、「Googleが安全性を検証します」という方式になってしまった。
「Pタグをリストにする」なんてことも可能となってしまったので、もはやタグから意味を知ることはできない。
まあ、自分も仕事上は他社にキャッチアップされないようにハードルを上げることはよくやってるけど。
不思議なのは、虐げられるものほど、Googleを崇拝してることだな。 >>49
Pタグをリストにすることなんて出来ませんよ
Pの見た目は自由に変更できるのでLIを使わない限りリストになりません
逆にタグからじゃないと意味がわからなくなってしまったんですが? なんか>>49ってPOSIX原理主義者っぽいな
偉そうな感じで自分が理解できてないとバレるような
的はずれなことを堂々と言ってしまうところがw cのfwriteを使った方がキャッシュが効いてwrite何回も呼ぶよりも早い、というような話とごっちゃになってるんじゃない