タグ

mmapに関するyukimori_726のブックマーク (10)

  • Linuxでユーザー空間で動作するプログラムとハードウェアがメモリを共有するためのデバイスドライバ(x86対応?) - Qiita

    Linuxでユーザー空間で動作するプログラムとハードウェアがメモリを共有するためのデバイスドライバ(x86対応?)LinuxkernelFPGAx86 はじめに 前回投稿した「Linuxでユーザー空間で動作するプログラムとハードウェアがメモリを共有するためのデバイスドライバ」で紹介したudmabufは、もともと Xilinx 社の Zynq など ARM アーキテクチャ用に作ったものでした。 今回、ちょっとしたことがあって x86 アーキテクチャ用にコンパイルしてみたのですが、その際に判かった点を防備録として残しておきます。 x86 アーキテクチャ用に修正した点 pgprot_dmacoherent() が未定義 まず x86 アーキテクチャ用にコンパイルしてみて通らなかったところがここです。pgprot_noncached()、pgprot_writecombine()、pgprot_d

    Linuxでユーザー空間で動作するプログラムとハードウェアがメモリを共有するためのデバイスドライバ(x86対応?) - Qiita
  • mmapでドライバ的なコードを書くのもアリなのでは?

  • ROP stagerによるシェルコード実行をやってみる - ももいろテクノロジー

    DEPが有効な状況では、スタックバッファオーバーフローなどから命令を実行させるためにROPと呼ばれる手法が使われる。 さらに、ROPを使って任意の処理を実行させる方法として、実行可能なメモリ領域(stage)を動的に確保し、そこに通常のシェルコードをコピーし実行させるという方法が知られている。 この際使われるROPシーケンスはROP stagerと呼ばれる。 ここでは、DEPが有効な状況下で、mmapを使ったROP stagerによるシェルコード実行をやってみる。 環境 Ubuntu 12.04 LTS 32bit版 $ uname -a Linux vm-ubuntu32 3.11.0-15-generic #25~precise1-Ubuntu SMP Thu Jan 30 17:42:40 UTC 2014 i686 i686 i386 GNU/Linux $ lsb_release

    ROP stagerによるシェルコード実行をやってみる - ももいろテクノロジー
  • mmapのAPI : kei@sodan

    まずはmmap()のAPIを説明します。 fd = open(file, access); a' = mmap(a, n, prot, share, fd, offset); まずは普通にファイルをopen()で開きます。その後、mmap()でマップします。 aは「この仮想メモリアドレスにマップしてほしい」という値を指定できるのですが、普通はNULLでOKです。nはファイルの何バイト目をマップするのか、offsetは何バイト目からをマップするのかという指定です。 shareという引数がありますが、これは複数のプロセスが同じファイルをmmapしたときの動作です。 shareにMAP_PRIVATEを指定すると、そのプロセスは別のコピーを見て、プロセス間でデータは共有されません。メモリ上に複数データがある…ということで、ディスクにはどのデータを書いていいのか分からないので、書き込み結果はファイ

  • mmap+POSIXセマフォによる高速なプロセス間通信 - mp::ipc_vector - Blog by Sadayuki Furuhashi

    同じホストの異なるプロセスの間で、高速な通信を行いたいときがあります: fork() したプロセスと通信したい場合や、「アプリケーションたくさん → localhostのクライアントデーモン1つ → サーバー」という形で接続したい*1 *2 場合などなど。 あるいは共有リソースを管理するプロセスが必要なとき、具体的には memcached が localhost で動いるイメージ。 こんなときに高速なプロセス間通信がしたい。スレッドなみに高速だと嬉しい。 そこで、POSIXセマフォを使って排他制御をしつつ、mmap(2) を使って共有したメモリの上でデータをやりとりすることで、高速にプロセス間で通信を行えるようにするライブラリを作ってみました。 さっそくベンチマーク: 時間 スループット換算 UNIXドメインソケット 4.44 sec 25 MB/s ipc_vector(sleepなし)

    mmap+POSIXセマフォによる高速なプロセス間通信 - mp::ipc_vector - Blog by Sadayuki Furuhashi
  • malloc〜中級編〜 - Qiita

    一応前回初級編だったので名目上タイトルを中級編にしましたが、中級編かなぁ……。まだ初級編のような気はします。 最初で書くべきことではあったのですが、今回の勉強は小崎資広さんがThe 67th Yokohama Kernel Reading Partyという怪しげな(褒めてます)集まりで発表した「mallocの旅」を参考にしています。結構図とか真似したりしてますし、家のほうを参照したほうがいいかもしれませんね。色々省略とかしてますし。 動画 資料 というか、前回のブログは図に間違いが少しあります。まあ崩壊するほどじゃないので気にしないことにします。 じゃあまず、前回のおさらいでも。 K&R malloc、すげえフラグメンテーション頻発する! K&R mallocが主流だった頃は「メモリはプログラムの最初に一気に確保するもの」だった メモリが充分に空いている状態で必要なメモリを一気に確保する

    malloc〜中級編〜 - Qiita
  • tailを実装する - Qiita

    file_path = ARGV[0] row_limit = ARGV[1].to_i buffer = [] File.foreach(file_path) do |line| buffer << line buffer.shift if buffer.size > row_limit end puts buffer まず、元の記事のコメント欄より。Rubyでやるならこれでいい気がする。この特徴は シンプル ファイルを全部読む メモリ使用量は表示する分 など。試してみると意外と早い。 バッファー版 def reverse_chunks(file, size) n = file.size / size n -= 1 if file.size == n * size len = file.size - n * size until n < 0 file.seek(n * size) yie

    tailを実装する - Qiita
  • mmapのほうがreadより速いという迷信について - kazuhoのメモ置き場

    @ITに以下のような記事が出て、 今回からしばらくの間は、まったく逆の例、つまり使うとプログラムの処理性能が上がるというシステムコールを紹介していく。システムコールを呼ぶ回数は少ない方が処理性能は高くなるという原則は変わらないが、呼び出しておくと処理性能が向上するシステムコールというものが存在するのだ。こうしたシステムコールを使わないでいることは、とてももったいない。 今回紹介するシステムコールは「mmap(2)」だ。ここでは詳しく仕組みを解説しないが、mmap(2)は、プログラムの処理性能に必ず良い影響を与える。 やはりあった? 高速化に効くシステムコール (1/2):知ってトクするシステムコール(3) - @IT それを真に受けたのか、「Go言語でmmapシステムコールを使ったファイル読み込みの高速化検討とC言語のコンパイラの話 - ryochack.blog」のようなブログエントリも

    mmapのほうがreadより速いという迷信について - kazuhoのメモ置き場
  • やはりあった? 高速化に効くシステムコール

    やはりあった? 高速化に効くシステムコール:知ってトクするシステムコール(3)(1/2 ページ) 単純にシステムコールを使えば、プログラムの処理速度が一気に上がるという都合のいい話はありませんと説明してきました。しかし、簡単に使えて、ある程度の処理速度向上を見込めるシステムコールも存在します。今回は、このシステムコールを使うと、どうして処理速度が上がるのかということを解説します。この点を理解すると、プログラムの処理速度を上げるための戦略が見えてくるはずです(編集部) 呼び出すとプログラムの処理性能が上がるシステムコール 前回は、システムコールを直接記述する場合には「使い方を間違えると、まったく性能を発揮できないひどいプログラムができてしまう」ということを、実例を交えて紹介した。標準ライブラリの機能はよく考えて作ってあり、特に強い理由や、はっきりとした目的があるというわけでもなければ、システ

    やはりあった? 高速化に効くシステムコール
  • Linuxのmmap()を通して、アドレス空間の扱いを垣間見る - Qiita

    近況 飲んで帰ってきて、気づいたらこんなの書いていました。 ちょっと具体性に乏しいので、もう少し後でパッチを書きます。 (でも、明日は会社の歓迎会で飲んでくるのだ) 前回のあらましと今回見るところ 前回、仮想アドレスと物理アドレスの紐付けをする処理とそのデータ構造のページテーブルを見ました。 そして、今回はユーザ空間へのアドレス空間マップを行うmmap()を見ることで、仮想アドレス空間の扱いの一端をかいま見てみましょう。 mmapの実装 mmapは以下の実装である。 (厳密に言うと、システムコールのベクタではないので「システムコールの開始地点」ではない) asmlinkage long sys32_mmap(struct mmap_arg_struct32 __user *arg) { struct mmap_arg_struct32 a; if (copy_from_user(&a, a

    Linuxのmmap()を通して、アドレス空間の扱いを垣間見る - Qiita
  • 1