タグ

システムコールに関するakaneharaのブックマーク (15)

  • WSL その24 - システムコールとは(前編)・LinuxカーネルのシステムコールとWindows NTカーネルのシステムコール

    akanehara
    akanehara 2019/01/07
    [ABI] [マーシャリング]
  • Linuxのシステムコール再実行について - Qiita

    また、シグナルを受信した際、プロセスは、エラー終了するかシステムコールをもう一度行うように指定できます。 これは、処理がユーザ空間に戻る際に、実行ポインタを「カーネルへ処理を移す命令」に戻すことによって実現されています。 ちょうど書くネタに困っていたこともあり(!)、今のLinux実装を調べてまとめました。 なお、調査対象およびコードを引用したLinuxのバージョンは4.18.11です。また、アーキテクチャはx86です。 システムコールから戻る箇所 システムコールを実行するメインとなる処理は以下の関数です。 #ifdef CONFIG_X86_64 __visible void do_syscall_64(unsigned long nr, struct pt_regs *regs) { struct thread_info *ti; enter_from_user_mode(); loc

    Linuxのシステムコール再実行について - Qiita
  • read(2) vs mmap(2) の迷信

    この記事は、シェルスクリプトの記事よりも前に読んだような気がする。同じくらい古い記事だけれど、ちょっと書いてみる。記事への反論はいくつか検索すると見つかって、たぶんみんな知っていることなのだと思うけれど、まとまって書かれている文章はないみたい。 tl;dr read(2) と mmap(2) の性能差に絶対的な回答はない。どちらか一方が常に高速だと主張している文章は、根拠が証拠とともに明確に書かれていない限り信用しないほうが良い。 メモリコピーのコストが高かった時代と、L1キャッシュが巨大になってメモリコピーのコストが低くなった時代と、SMPが一般的になってメモリのマッピング処理のコストが高くなった時代とで、この性能差は頻繁に入れ替わっている。少なくともスループットとレイテンシを分けないで分析できるものではない。 まず当該記事には技術的な間違いがいくつかある。 「mmap()はユーザランド

  • よく使う strace のオプション - ablog

    Linuxstrace を使ってシステムコールのトレースを調べる時によく使うオプションをメモ。 特にお気に入りのオプションは -T、-c、-ff & -o です。 書式 システムコールを詳細に追う tt: 行頭にタイムスタンプを出力(マイクロ秒) T: 行末にシステムコール内での所要時間を出力(マイクロ秒) ff: 子プロセスのシステムコールもトレースし、-o との併用でプロセス(スレッド)毎に別ファイルに出力 o: 指定したファイル名に出力。-ff と併用すると、ファイル名. に出力 s: 出力文字数を指定。デフォルト32文字。read/write システムコールなどで読み書きした内容を全て確認したい場合は、大きくする。 p: プロセスIDを指定。 $ strace -Ttt -ff -s 1500000 -o <ログ出力先ファイル名> -p <PID> もしくは $ strace

    よく使う strace のオプション - ablog
  • https://img.atwiki.jp/darkomeme/attach/11/1/libc.pdf

  • mkdirシステムコールの変遷 - Plan9日記

    先週の@magoroku15さんのustで、システムコール番号の歴史が参照され、V7にはmkdirシステムコールがなくて、mknodとlinkを使っていたんだよねという話題が出てきた。それに触発され、mkdirについて調べてみたところ、試行錯誤の痕がいろいろ見られ面白かったのでまとめてみた。 まず、V7のmkdir.cを読むと、mknodでinodeを作り*1、自分(".")と親("..")にlinkを張っているのがわかる。mknodはinodeは作るがファイルの中身はからっぽで、ディレクトリとしては正しいフォーマットではない。最低限自分と親ディレクトリへの参照が必要だからだ。そこで、linkを使う。UNIXファイルシステムのディレクトリエントリの構造については説明不要だよね。 mkdir(d) char *d; { char pname[128], dname[128]; registe

    mkdirシステムコールの変遷 - Plan9日記
  • Man page of SELECT_TUT

    Section: Linux Programmer's Manual (2) Updated: 2020-04-11 Index JM Home Page roff page 名前 select, pselect - 同期 I/O の多重化 書式 select(2) 参照。 説明 システムコール select() や pselect() を使うと、効率的に複数のファイルディスクリプターを監視し、 そのファイルディスクリプターのいずれかが 「ready (準備ができた)」状態、つまり I/O (入出力) が可能になっているかや、 ファイルディスクリプターのいずれかが 「例外状態 (exceptional condition)」が発生したか、を調べることができる。 This page provides background and tutorial information on the use

  • システムコールの特性を知る pipe(2)編

    これまで数回にわたって紹介してきたmmap(2)に続き、今度はpipe(2)による処理の高速化について考察していく。やりとりするデータのサイズを工夫することで、うまく効率化を図ることができる(編集部) システムコールの特性を知ろう UNIX系OSにおける基機能にパイプがある。シェルでは|で表現され、コマンドの標準出力を次のコマンドの標準入力に結びつける処理をする。 実際に使われるシステムコールはpipe(2)で、pipe(2)で生成されたファイルディスクリプタに対してwrite(2)およびread(2)でデータの読み書きを行う仕組みになっている。 これまで数回にわたって、mmap(2)を使うことで処理の高速化が実現できることを示してきたが、read(2)/write(2)を使っても、やりとりするデータのサイズを工夫することで、処理速度の改善を図ることができる。ここではOSの提供するいくつ

    システムコールの特性を知る pipe(2)編
  • C言語execメモ(Hishidama's C "exec" Memo)

    S-JIS[2012-11-17] exec系関数 execは、C言語で別プログラムを実行(execute)する関数。 概要 exec系の関数は、別プログラムを実行する。 「exec」という関数そのものは無くて、execl・execv・execvp等のいくつかのバリエーションがある。 exec系関数によって別プログラムを実行すると、制御はそのプログラムへ移行し、自プログラムへは戻ってこない。(execの実行に失敗した場合だけ戻ってくる) 自分の処理を続行したい場合はfork()と組み合わせて使用する。 →forkと組み合わせる例 別プロセスを実行する方法は、execの他にもsystem(シェルの機能を使ってコマンドを実行する)やpopen(パイプで通信可)等がある。 execの種類 execl(exec「L」)は引数が可変長引数になっていて、execv(exec「v」)は引数が配列になって

  • softwaretechnique.jp

    This domain may be for sale!

    softwaretechnique.jp
  • 大きなテキストファイルをawkで処理するときにcatで投げ込むと速い理由 - ablog

    以下、長々と書いてますが、結論は ”私の環境で”大きなテキストファイルをawkで処理するときにcatで投げ込むと速い理由 - ablogに書いてます はじめに awk file より cat file|awk のほうが速いという以下のブログエントリが興味深いので調べてみました。 ちなみに cat file|awk が速くなる環境は稀で、巷では awk file のほうが速い環境のほうが多いようで、どちらが速いかは環境依存です。 [root@localhost sample]# cat command1 awk '$5 ~ /((26|27|28|29|30)\/Jun|(01|02|03)\/Jul)/{ print }' sample.txt > result1.txt (中略) [root@localhost sample]# time sh command1 real 0m53.92

    大きなテキストファイルをawkで処理するときにcatで投げ込むと速い理由 - ablog
  • 第11回「 strace ノススメ」 | NTTデータ先端技術株式会社

    Tweet 今回は、プログラムが期待通りに動作しない場合に、特定のプロセスの挙動を追いかけるための手順について紹介します。 プロセスの挙動を追いかける方法にはいろいろあります。例えば、スクリプト言語で記述されたプログラムの挙動を追いかける場合、デバッグのための print 命令を挿入することもあるでしょう。でも、プログラムの種類によらずに挙動を追いかける場合、原則としてカーネルが提供する機能を使います。例えば strace コマンドを用いてシステムコールの呼び出し履歴を取得したり、 ltrace コマンドを用いてライブラリ関数の呼び出し履歴を取得したりします。また、対象となるプロセスが不明な場合には全プロセスを対象にするために System Call Auditing を使って履歴を取得したり、 SystemTap を使って任意の箇所で履歴を取得したりすることもあります。 今回は stra

    第11回「 strace ノススメ」 | NTTデータ先端技術株式会社
  • Linux システムコールのブロック・ノンブロックまとめ

    はじめに Linux にはブロックするシステムコールとノンブロックなシステムコールがあります。さて、システムコールが「ブロックする」とはどういうことでしょうか。よく、ブロックするシステムコールとは「処理が完了するまでプロセスの動作が中断され待たされること」という説明を見ますが、より詳細に、どういう処理の場合に待たされるのか、整理してみましょう。 「ブロックする」とは Linux において、システムコールがブロックするとは、「プロセスが、システムコール呼び出しの延長で待状態(TASK_INTERRUPTIBLE or TASK_UNINTERRUPTIBLE) に遷移し、CPU時間を消費せずにあるイベントが完了するのを待つようになる」、ことを指します。ブロックするシステムコールのうち代表的なものと、完了待ち対象イベントをまとめると、以下のようになります。 システムコール待ち対象イベント re

  • サーバプログラム

    (1)のソケット生成ではsocket()システムコールを使ってソケットを 生成します。socket()を呼び出すときは、その引数にはTCP通信に利 用するプロトコルの種類を与えます。ここでプロトコルの種類とはインターネッ ト用のものであることや、TCPやUDPの種別も含まれます。また、socket() の返値はソケット番号という整数値を返します。これは各ソケットの識別 子となります。 socket()を実行した段階ではソケットが作られただけであり、ポー ト番号などは未確定です。そこで、(2)ではbind()システムコールを 使い、(1)で生成したソケットにポート番号など割り当てます。 TCP通信のサーバ側はクライアントから通信接続を待つ側になります。このた め、通信接続を待つための準備作業が必要になります。これには(3)の listen()システムコールを利用します。 ここで準備が整いまし

  • システムコールについてどれくらいご存じですか?

    システムコールについてどれくらいご存じですか?:知ってトクするシステムコール(1)(1/2 ページ) 「システムコール」と聞いて、どういう印象を受けますか? 「難しくて、自分では手に負えない」とか「使う必要を感じない」という方は多いでしょう。しかし、コンピュータを使う人ならどんな人でも、システムコールについて知っておくといろいろトクをするんですよ。(編集部) システムコール? 聞いたことはあるけど…… 企業情報システムや、Webアプリケーション、携帯機器向けアプリケーション、あるいはちょっとしたツールの作成など、なんらかの形でソフトウェア開発に携わったことのある方なら、一度は、「システムコール」という言葉を耳にしたことがあるはずだ。しかし、先に挙げたような分野のアプリケーション開発現場で、明示的にシステムコールを利用する開発者は多くない。 システムコールは、低レベルのプログラミングやカーネ

    システムコールについてどれくらいご存じですか?
  • 1