• 締切済み

Linuxソフトウェア割り込み

Linuxの初心者です。 Linuxのソフトウェア割り込みはシステムコールによるものだと聞いています。 実際にシステムコールを利用した時に、いつ割り込みが行われ、ユーザ空間からカーネル空間に移行されたが分かりません。 何か確認する方法というものはあるのでしょうか? よろしくお願いします。

みんなの回答

  • k-841
  • ベストアンサー率27% (129/465)
回答No.3

それぞれ man で機能は調べましたか?(中には man が用意されていないものもありますが・・・)また、Web検索などで意味を調べるのも良いでしょう。 私の知識量は限られていますので、全てについて答えられるわけではありません。目的が何であるかはわかりませんが、調べ方を知るだけでも目的にずっと近づけると思いますよ。

hokaido
質問者

お礼

さっそくのご返事ありがとうございます。 manなのですが英語の部分のページがあったもので、調べる事ができませんでした(自分の知識不足なのですが…)。 書かれている物は自分なりに解釈はしました。 質問に対して、無理を言ってすみませんでした。

全文を見る
すると、全ての回答が全文表示されます。
  • k-841
  • ベストアンサー率27% (129/465)
回答No.2

まず、man strace でstraceのマニュアルを見て下さい。その上でさらにわからないことがあれば、何がわからないのか、もしくは何がしたいのかを補足して下さい。漠然と中身を説明せよと言われても、何を説明してよいか見当がつきません。

hokaido
質問者

補足

返事が遅れてすいませんでした。 straceを使って、実際にプログラムがどのシステムコールを呼び出しているかを、straceのオプション-cをつかって表しました。 そこでopenやwriteは分かるのですが、old_mmap,munmap,fstat64,set_thread_area,mmap2,brk のシステムコールが何をしているのかが分かりません。どのようなことをするためのものなのか分かりますでしょうか?よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • k-841
  • ベストアンサー率27% (129/465)
回答No.1

デバグの目的で動的にトレースするという意味であれば、straceコマンドを利用すれば良いと思います。straceはシステムコールとシグナルをトレースするものです。

hokaido
質問者

お礼

早速のご返事ありがとうございます。 straceを使えば、デバッグができるとの事ですが、実際に strace -c 実行ファイル とコマンドをしたところ、そのプログラムで使用されたシステムコールが表示されたのですが、いまいちよく分かりません。 strace 実行ファイル でもあまり分かりませんでした。 もしよろしければ簡単に中身を説明してはもらえないでしょうか。基本的な質問だとは思うのですが、よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Linuxについて教えてください

    LinuxユーザーのDragonです。 最近、愛用のPearOSを使ってて思った、Linuxについての疑問を教えてください。 その一 Linuxのカーネルのビルド方法を教えてください。 (できたら、カーネルのビルド後、デスクトップ環境 X Window System を導入する方法も 教えてください。) その二 OSのことや、パソコンのことを深く知ることができるサイトや本ってありますか? (おもにOSの分野はLinuxについて沢山知りたいです。) その三 Linuxのことから外れますが、インターネットセキュリティのことが学べる書籍やサイト ってありますか? 中学三年生のアホな僕に知識を恵んでください。 御回答のほど、宜しくお願いします。

  • Linuxカーネルで使用されているシステムコール一覧が知りたいです。

    Linuxカーネルで使用されているシステムコールの処理内容が書かれている書籍はないでしょうか?いろいろ調べたのですが発見できていません。昔PC98シリーズであったBIOSリファレンスマニュアル的なものが無いか期待しているのですが... LinuxカーネルはVer 2.6.15.2を見てますが特にこだわっていません。 よろしく、お願いします。

  • OSの割り込みについて

    以下の各々の割り込みについて。 必要な処理を、なぜ他の方法ではなく、割り込みを通してOSに行ってもらうのか? よくわからなかったので、どなたか教えてください。 ・ハードウェアの誤り検出 ・入出力処理終了の報告 ・タイマ ・外部信号割り込み ・ソフトウェアの誤り検出 ・ページフォールト/アドレス変換例外 ・システムコール/カーネルコール

  • カーネルの再構築

    はじめまして。私はLinuxの初心者です。 今回、RHL9.0を使ってのカーネルの再構築をしようと思っています。 なぜかというとシステムコールの追加の設定をして、それを適用させるにはカーネルの再構築をする必要があると聞きました。 いろいろ調べてみたのですがこれを言うものが見つかりません。解答の方よろしくお願いします。 カーネルのバージョンは2.4.20-8です。

  • linux kernelの勉強法

    linuxユーザ(Fedoraが中心)になって5年程経つのですが、仕事のためにもLinux kernelを勉強してみようと思っています。そこで、仕事または趣味でLinux kernelを究めた方、または今勉強している方にお聞きしたいのですが、どのようにして勉強しましたか?私はkernelとdevice driverの本を読んでいるのですが、本を読んでいるだけだとなかなか進展がありません。実際にコードを書くプロジェクトみたいなのがあればいいのですが、何から手を付けてよいのか迷っている状況です。 C/C++プログラミング、OS一般、そしてlinuxの基本的な概念(仮想メモリ、ファイルシステム、スケジューリング等)は一応理解しているつもりですが、ソースコードを読んで理解するの苦労しています。 何か経験談とかアドバイスを聞かせて頂ければありがたいです。

  • Linuxでの10msスリープ

    Linux初心者です。よろしくお願いします。 Cで記述された旧式のRTOSでのプログラム をLinux環境に移植しようとしていて、 Timesys Linuxを購入予定ですがまだ入手で きてないので、Vine Linux 2.6で試運転させて います。 10ms毎の周期起床するタスクを旧記述では カーネルコールのsleep()で起床待ちさせて 起床タイミングはカーネルのスケジューラに 任せていたため、同じように動かそうとタスク をPosixThreadにしてその上でusleep(), nanosleep()等を実行してみたのですが、 待機時間が2ms以下か、20m以上になってしま って上手くスリープしてくれません。 (スケジューリング周期は10msです。) 標準のLinuxで10ms(毎のスケジューリング タイミングまで)待たせる場合はどういう 方法をとるとよいでしょうか?

  • WindowsでのC と LinuxでのC の違いについて

    これから、Linux OSでC言語のプログラミングを行うことになりました。ディストリビューションはVine Linux 3.2 を利用します。 開発方法としては、Windows Xp 上でgccを利用できるIDE(Dev-C++ 4.9.9.2を利用します)で開発を行い(テスト的にコンパイル)、できたソースをLinux上でコンパイル・リンクするという方法で行おうと考えています。 そこで、疑問があります。 ANSIライブラリの中にはシステムコールを実行するものがあると思います。システムコールはOSの一部の機能ということですので、WindowsとLinuxとでは当然その機能は違ってくると思います。 つまり、WindowsでANSIライブラリを利用して実装したプログラム(コンパイルもとおる)がLinux上で正常に機能するのか(そもそもコンパイルがとおるか)がわかりません。 どなたかご教授いただけましたら幸いです。 宜しくお願いします。

  • Linuxのトラブルを解決するのに役立つソフトウェアを探しています。

    現在、Linuxを勉強している者です。 Linuxでトラブルに遭遇した時に、 その原因を調査したり、解決するのに役立つソフトウェアを探しています。 現在動作しているプロセスが、 どのファイルを操作しているのか等が分かるようなソフトウェアは無いでしょうか。 あるいは、設定ファイルの変化を監視や比較をしたり、 ファイル内に特定の文字列を含むテキストを調査したり等、 トラブルの解決に役立ちそうなソフトウェアなら何でも結構ですので、 ご存知の方がおられましたらお教え頂けないでしょうか。 それ以外でも、トラブルを解決するのに役立つ方法や情報など、 何でも結構ですので、何卒よろしくお願い致します。

  • taskSpawnはLinuxでは何に該当?

    VxWorksのtaskSpawnと同様のシステムコールはLinuxにありますか? あるのならば使用方法を教えてください。

  • LinuxのDMA転送でのメモリ操作について

    Linux初心者です。 ユーザモードで動作しているプロセスからデバイスドライバに対してDMA転送要求を行った場合、ドライバでDMAバッファ用のメモリを確保すると思います。 ドライバはDMA転送用バッファとして、GFP_DMA指定でkmallocし、確保されるメモリ領域はZONE_DMAだと思います。 (PCIデバイスドライバの場合は、上記指定は必須ではないみたいですが。) ここで疑問なのですが、カーネルモードでしかアクセスできないZONE_DMA領域を、ユーザモードのプロセスがどのように扱うのでしょうか? ある本で「ユーザモードで動作中でもシステムコールに関してはCPU内でカーネルモードで動作する」というのを見たことがあるのですが、これによってZONE_DMA領域にアクセスできるようになるということでしょうか? ご存知の方がいたら、よろしくお願いします。 また、そもそも質問内容(前提)の間違えなどありましたらご指摘いただきたいです。