タグ

LInuxとカーネルに関するatm_09_tdのブックマーク (16)

  • Linuxがブートするまで

    普段Linuxを使っていながら、vmlinuzやinitrd.imgというファイルは何なのか、 あやふやにしか理解していなかったので、一通りLinuxマシンのブートの仕組みを 勉強してみた結果を書き留めておく。なお、BIOSとGRUB Legacyの環境を前提としている。 EFIやGRUB2を使った環境については、今後いずれ勉強していきたい。 基的にOSの起動は、単純・低機能なプログラムが、より複雑・高機能なプログラムを 読み込み起動するという処理を連鎖的に行う仕組みになっている。 Linuxでは、下記のプログラムが順に起動していく: BIOSブートローダ (GRUB)Stage 1Stage 1.5Stage 2LinuxカーネルInit以下では、それぞれのプログラムについて順に要約して述べていく。 1. BIOS現在一般的なx86/x86-64 CPUは、電源が投入されると、0xff

  • netmap でわかる Linux カーネルハック入門 - かーねるさんとか

    以前のエントリー*1で、netmap API を使ったアプリケーションを作成する方法やデータ構造についてとりあげました。今回は少しレイヤーを下げて、カーネルのどのような機能を使って、netmap API が作られているのかについてまとめました。 Linux カーネルハックを始めてみたいけれど、何から手をつければよいかわからないという方にとって、netmap で使われているカーネルハックの方法について知ることは、とても良い導入の一つだと思います。 Linux カーネルハック netmap は、キャラクタデバイスのカーネルモジュールとして実装されています。今回はキャラクタデバイスのカーネルモジュールで何ができるのか、ということと、netmap がそれらをどのように使っているかについて説明します。 カーネルハックで、Linux カーネルに新しい機能を追加する場合に、カーネルのソースコードを直接変

    netmap でわかる Linux カーネルハック入門 - かーねるさんとか
  • プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る

    書籍の中から有用な技術情報をピックアップして紹介するシリーズ。今回は、秀和システム発行の書籍『ハロー“Hello, World” OSと標準ライブラリのシゴトとしくみ(2015年9月11日発行)』からの抜粋です。 ご注意:稿は、著者及び出版社の許可を得て、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。 ※編集部注:前回記事「エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね?」はこちら Linuxカーネルの処理を見てみよう ここまでは主にglibcが持つスタートアップと終了処理について見てきた。 しかしOSカーネルの中では、プログラムの起動時にはどのような処理が行われているのだろうか。 例えばプログラムの実行はエントリ・ポイントから開始される、という説明をした。ということはエントリ

    プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る
  • カーネルエクスプロイト入門 - Linuxカーネル解析の基礎 - - るくすの日記 ~ Out_Of_Range ~

    0. はじめに 記事は、Linuxを対象としたカーネルエクスプロイトの入門記事です。 カーネルエクスプロイトというのは、Linuxや*BSD、Windowsを始めとするカーネル自身の脆弱性を突くエクスプロイトです。 基的にカーネルはシステム内で最高権限を持つ特権モードで動作しているので、ここを悪用されるとシステムの大部分(ほぼ全て)を掌握されてしまいます。 エクスプロイトと言うと、普通はユーザー空間で動作しているアプリケーションのバグをつく物が多いですが、これだと限られたレベルの権限しか奪えません。 SELinuxやjailを始めとする、OSレベルでの保護機構に阻まれるとたちまち効力を失ったりします。 しかし、カーネル自体の脆弱性をつくカーネルエクスプロイトを利用すると最高権限での任意コード実行が可能なため、大抵の保護機構はものともしません。 このカーネルエクスプロイトが特に効力を発揮

    カーネルエクスプロイト入門 - Linuxカーネル解析の基礎 - - るくすの日記 ~ Out_Of_Range ~
  • Linuxプロセスとカーネル読解のとっかかり - Qiita

    概要 Linux Kernelを読み解くためのとっかかりとしてLinuxのプロセスの理解(SoftwareDesign2014年8月号の特集参照)に焦点をあててみたいと思います。プロセス、スレッド、CPUについての話の後、最新カーネルのダウンロードからちょっとした中身の確認までやります。サンプルコードもありますが、サービス影響のあるサーバでは実行しないでください。 プロセスとスレッド プロセスとは Linux上で動いているプログラム スレッドが無い時はプロセスが実行単位 スレッドとは Linuxプロセスにおけるスレッド 「1つのプロセスの中で複数の実行単位を持てるように機能拡張したもの」(SoftwareDesign2014年8月号) CPUにおけるスレッド 「最小の処理単位」 プロセス2が終わった後に処理できるプロセス3がある例 スレッドを利用しない場合(左図) プロセス2の処理が終わる

    Linuxプロセスとカーネル読解のとっかかり - Qiita
  • Linux Insides : カーネル起動プロセス part4 | POSTD

    64ビットモードへの移行 Kernel booting process もパート4になりました。4回目の今回は、 プロテクトモード での最初の一歩についてご紹介します。CPUがサポートする ロングモード 、 SSE(ストリーミングSIMD拡張命令) 、 ページング方式 、そしてページテーブルの初期化やロングモードへの移行のお話しです。 注:このパートでは、アセンブリ言語のソースコードが頻出しますので、知識がない方は、事前に参考書を読むなどして理解を深めておいてください。 前回の パート では、 arch/x86/boot/pmjump.S 内にある32ビットのエントリーポイントにジャンプするところで終了しました。

    Linux Insides : カーネル起動プロセス part4 | POSTD
  • Linux Insides : カーネル起動プロセス part1 | POSTD

    ブートローダからカーネルまで これまでの私の ブログ投稿 を読まれた方はご存じかと思いますが、しばらく前から低水準言語を使うようになりました。Linux用x8664アセンブリ言語プログラミングについても書いています。また、同時にLinuxのソースコードにも触れるようになりました。下層がどのように機能しているのか、コンピュータでプログラムがどのように実行されるのか、どのようにメモリに配置されるのか、カーネルがどのように処理や記憶をするのか、下層でネットワークスタックがどのように動くのかなどなど、多くのことを理解しようと意欲が湧いています。これをきっかけに、 **x8664** 版Linuxカーネルについてシリーズを書いてみようと思いました。 私はプロのカーネルプログラマではないことと、仕事でもカーネルのコードを書いていないことをご了承ください。個人的な趣味です。私は下層で何が起きているのかと

    Linux Insides : カーネル起動プロセス part1 | POSTD
  • カーネル空間までコード追っていこう@Linux

    こんにちは。@kokukumaです。 これは、KLab Advent Calendar6日目の記事です。6番手も緊張しますね(棒読み)。 今日はLinuxでプログラムの挙動を追って行く時に、便利なコマンド達を紹介したいと思います。 コードを追っていく流れに合わせて、6つのパートに分けて紹介していきます。 ユーザ 計測する(ユーザ) コードを読む(ユーザ) 挙動を把握する(ユーザ) カーネル 計測する(カーネル) コードを読む(カーネル) 挙動を把握する(カーネル) 環境はdebian前提で話しています、あしからず。 ユーザ空間で計測する コードを追おうと思う人の目的は、「そのコードを速くしたい」がほとんどでしょう。 そんなとき、いきなりコード読んでも心が折れるだけなので、この辺のツールを使ってどこが遅いのか調べます。 time 誰でも知ってるtimeコマンド。とりあえず時間測って比較すると

    カーネル空間までコード追っていこう@Linux
  • perf + Flame Graphs で Linux カーネル内のボトルネックを特定する - ablog

    Linuxでddで1GBのファイルを作成し perf でプロファイリングし、Flame Graph (炎のグラフ?)にして可視化したものです。 Flame Graphs は perf(Linux)、SystemTap(Linux)、DTrace(Solaris、Oracle Linux(UEK)、Mac OS X、FreeBSD)、XPerf.exe(Windows) などでのプロファイリング結果を可視化して最も使われているコードパスを早く正確に特定することができます。実体はプロファイリング結果をグラフ(SVG)に変換する Perl スクリプトです。 下から上に行くほどコールスタックが深く、左から関数名のアルファベット順でソートされています。一番上で横幅が広い関数がCPUを長く使っています。今回は "_aesni_enc1" つまり暗号化がボトルネックになっていることがわかります。 システ

    perf + Flame Graphs で Linux カーネル内のボトルネックを特定する - ablog
  • Linuxカーネルに関する技術ドキュメント「Linux internals」の第2部が公開される | ソフトアンテナ

    Linuxハッカーを目指す技術者に役立ちそうな技術ドキュメント「Linux internals」の第2部が公開されています(Hacker News)。これは前回紹介した第1部の続編となるドキュメントで、カーネルのセットアップが完了し、アセンブラ言語からC言語のmain関数がよびだされた後、を解説するものとなっています。 具体的には、プロテクトモード、起動パラメーターのzeropageへのコピー、コンソールの初期化、ヒープの初期化、CPUの検証、メモリの検出、キーボードの検出、Querying(様々な情報の取得)などのトピック関して解説されています。 次回第3部は、ビデオモードの設定と、その他プロテクトモードへ移行する前に行う各種準備、プロテクトモードへの移行を解説する予定となっています。

    Linuxカーネルに関する技術ドキュメント「Linux internals」の第2部が公開される | ソフトアンテナ
  • 30日でできない 自作Linuxクローン開発 - るくすの日記 ~ Out_Of_Range ~

    この記事は 自作OS Advent Calendar 2014 - Adventar 12/25の記事です。 一ヶ月程前からLinuxカーネルのコードを読み始めたので、解読ついでに自分でもカーネルを作ってみました。 とはいっても、まだ半分も完成してないです() 当初は、30日でできる 自作Linuxクローン開発 を予定していたのですが、 予想以上の規模で、解読とフルスクラッチ開発を併行するのは結構大変でした... という訳で、現在実装できている所まで紹介します。 開発レポジトリはこちらです。 RKX1209/Abyon · GitHub (インストール方法や実行方法はここに書いてます) 実装した機能 プロセススケジューラー Runキュー ハードウェア割り込み(PIC 8259A) 遅延割り込み Tasklet グローバルタイマー(PIT) タイマーリスト 仮想ページング(IA-32 MMU

    30日でできない 自作Linuxクローン開発 - るくすの日記 ~ Out_Of_Range ~
  • Linux Torvalds、最近のCPUのPage Faultのコストにご不満の様子

    Linus Torvalds - Google+ - One of the things I end up doing is do a lot of performance… Linus Torvaldsが、最近のIntelのCPUは、通常以外の処理のコスト、つまりPage faultのコストが上がっているので、問題であるとしている。 俺はよくカーネルコードのパフォーマンスプロファイリングをやる。特に、VMとかファイルシステム周りに対してだ。 俺がよくやるのは、「うまくいってるとき」に対する計測だ。つまり、だいたいほぼ完璧にキャッシュされてる状況だな。というのも、俺はもちろんIOのことは気にかけているが、俺の個人的なワークロードはたいてい、うまくキャッシュされてるからだ。たとえば、俺にとってよくあるロードは、pullした後のフルカーネルビルドだ。これにどのくらいの時間がかかるかが問題になる

  • 読み取り権限がなく実行権限だけのファイルが実行できるのはなぜ? - カーネルのソースを読む - - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く

    きっかけはこのツイート。 基礎的なことなんだろうけど理解できてないこと。 読み取り権限のない実行権限だけのファイルってどういう扱いになるんだろう。— ゑぬぽい改@電探が出(ん)たん? (@NPoi) March 27, 2014 実際にやってみるとわかるけど、実行権限だけついてるファイルは実行可能です。でも、「読み込めないのに実行できる」というのは直感に反するような気もしますね。だって、実行するためにはプログラムをメモリに読み込む必要がありますから!ではなぜ実行権限だけのファイルが実行できるのか、その仕組みを解説します。 実行とはなにか、どういう仕組みなのか Linux において実行とは「forkしてexecする」です(そのへんの詳しい話は プロセスさん を読もう!)。 fork も exec もシステムコール(正確には execve がシステムコールで exec はそのフロントエンドだけ

    読み取り権限がなく実行権限だけのファイルが実行できるのはなぜ? - カーネルのソースを読む - - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く
  • Linuxカーネル解読室輪講@はてな 第15章 - Tous Les Jours 攻防記

    VFSのところを担当してきました。 SlideView more presentations from Kazki Matsumoto.

    Linuxカーネル解読室輪講@はてな 第15章 - Tous Les Jours 攻防記
  • さらに分かっておきたいトランジスタの種類 − @IT MONOist

    組み込みソフトウェア/ハードウェア開発における技術力の向上、改善・最適化などを幅広く支援する“組み込み開発エキスパート”のための情報フォーラム

  • 『Linuxカーネル解読室』輪講 #1「プロセススケジューリング」 - Kentaro Kuribayashi's blog

    Linuxカーネルの話を知りたいなーってんで、『Linuxカーネル解読室』の輪講を始めました。とりあえず、カーネルのソースをがりがり読み込むというよりは、ざっくりと動作を把握しようという感じで。今日の初回は、第1章「プロセススケジューリング」を読みました。この分野にまったくもって不案内なので、難しい……。少しづつでも理解を進めたいです。 以下に資料を貼り付けておきます。実際には、id:naoyaをはじめとした参加者によるフォローに助けられて進めた感じなので、資料だけだといろいろとアレな面もあるとは思います。 Linuxカーネル2.6解読室 作者: 高橋浩和,小田逸郎,山幡為佐久出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/11/18メディア: 単行購入: 13人 クリック: 189回この商品を含むブログ (116件) を見る [24時間365日] サーバ/インフラを支

    『Linuxカーネル解読室』輪講 #1「プロセススケジューリング」 - Kentaro Kuribayashi's blog
  • 1