サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 17
www.valinux.co.jp
はじめに likely リンクリスト あとがき 執筆者 : 小田 逸郎 ※ 「新Linuxカーネル解読室落穂拾い」連載記事一覧はこちら はじめに 今回から、コードの解説を行っていきたいと思います。Linuxのコードを読んでいると、最初は分からないことだらけで、いろいろ調べて行くうちにどんどん発散してしまって収拾が付かなくなることが良くあると思います。調べて見ると、あまり処理の本質に関係なくて、そんなに調べる必要なかったということも良くあります。本ブログでは、コードを読んでいて、あれ、これなんだろうと思うような事項に関し、あまり深く考える必要がなくなるような情報提供を心掛けたいと思っています。コードを読んでいく中で処理の本質に関係ない部分に費やす時間が短くなれば、コードを読む際の精神的負担も軽減されるのではないかと思います。 likely 最初はほんの小ネタです。コードを読んでいると、よく以
はじめに コードの取得 ドキュメント カーネルのビルド 準備 基本手順 .configの作成 ビルド インストール あとがき 執筆者 : 小田 逸郎 はじめに OS徒然草のネタもなくなってきたということで、新しいシリーズを始めることにしました。徒然草の方は、OS一般の話題でしたが、今度は、Linuxに限定した話をしていきます。筆者も昔は、Linuxの障害解析などを実施したりして、Linuxのコードをバリバリ読んでいた時期もあるのですが、最近はとんとご無沙汰で、知らないうちになんだかいろいろな機能が追加されていたりとか、コードの大きな修正が入っていたりとかしているようです。そんな訳で、筆者もあらためてLinuxの勉強をし直そうじゃないかと考えました。もちろん、弊社の若手達が新解読室プロジェクトを始めたことに刺激を受けたというのもあります。 ただし、新しい機能についてどしどし説明しようというの
新Linuxカーネル解読室のブログ連載が始まってから1年が経ちました。 本記事では、ブログ連載1周年を記念して、新Linuxカーネル解読室プロジェクト(以降、本PJ)がはじまった経緯や今後の方針、および執筆の裏側についてお話します。 執筆者 : 稲葉 貴昭 ※「新Linuxカーネル解読室」連載記事一覧はこちら 新Linuxカーネル解読室のはじまり 本PJの話が最初に出たのは2024年3月26日、年度末の飲み会での何気ない会話からでした。 「解読室の改訂版を作りたい!」(高橋) 「あーなるほどぉ」(稲葉) 「VAのプレゼンス向上にもなるし、やろうやろう」(狭間) 「ははは(ま、酒回ってるし、寝て起きたら忘れているだろう)」(稲葉) (数日後) 「あれ、開始はいつからにする?」(高橋) 「なぬぅぅ!!!」(稲葉) 本PJは、こんな感じで飲み会ノリが発端となっています。 社内で仲間を募ったらすぐ
「Linuxカーネル2.6解読室」(以降、旧版)出版後、Linuxには多くの機能が追加され、エンタープライズ領域をはじめとする様々な場所で使われるようになりました。 それに伴いコードが肥大かつ複雑化し、多くのエンジニアにとって解読不能なブラックボックスとなっています。 世界中のトップエンジニア達の傑作であるLinuxカーネルにメスを入れ、ブラックボックスをこじ開けて、時に好奇心の赴くままにカーネルの世界を解読する「新Linuxカーネル解読室」プロジェクト。 本稿では、ネットワーク機能のIPレイヤーの受信処理ついてカーネルv6.8のコードをベースに解説します。 はじめに 1. 概要 2. ルーティング処理 2.1 dst_entry構造体とルーティング処理 2.2 ルーティングテーブル(FIB: Forwarding Information Base)の検索処理 3. dst_entry構造
メモリ管理 OSの仮想空間レイアウト 実ページ管理 動的メモリ割り当て プロセス空間 実ページの回収処理 あとがき 執筆者 : 小田 逸郎 ※ 「OS徒然草」連載記事一覧はこちら メモリ管理 今回はメモリ管理にまつわるお話です。メモリは、OSが管理するコンピュータリソースとしては、CPUと並んで最も重要なリソースです。メモリ管理は、OSの機能として必須のコアなコンポーネントであると言えます。 OSの仮想空間レイアウト メモリ管理を設計する上で考慮すべき事項はいろいろとありますが、筆者は、OSの仮想アドレス空間(以下、単に仮想空間)のレイアウトがまずは気になってしまいます。その前に、そもそもOSを仮想空間で動かすのかということも一考の余地があります。と言うのも、筆者がOSに関わり始めた当初は、OSは実アドレス空間(ページングオフ)で動いており、プロセスだけが仮想空間で動いていました。かなり昔
「Linuxカーネル2.6解読室」(以降、旧版)出版後、Linuxには多くの機能が追加され、エンタープライズ領域をはじめとする様々な場所で使われるようになりました。 それに伴いコードが肥大かつ複雑化し、多くのエンジニアにとって解読不能なブラックボックスとなっています。 世界中のトップエンジニア達の傑作であるLinuxカーネルにメスを入れ、ブラックボックスをこじ開けて、時に好奇心の赴くままにカーネルの世界を解読する「新Linuxカーネル解読室」プロジェクト。 はじめに 応答性に関わる機能 応答性とは 割り込み処理のスレッド化 排他制御における優先度継承 Preemptibleなスピンロック 割り込み禁止区間中のスピンロック取得 RCU参照区間におけるスピンロック Preemptibleなソフト割り込み禁止区間 余談 執筆者 : 高倉 遼 ※ 「新Linuxカーネル解読室」連載記事一覧はこちら
ファイル管理 参照カウント キャッシュ 信頼性 あとがき 執筆者 : 小田 逸郎 ※ 「OS徒然草」連載記事一覧はこちら ファイル管理 OSの大切な役割として、ハードウェアの資源を管理し、抽象化して分かりやすいインターフェースでユーザーに提供するというものがあります。その典型的な例がファイル管理と言えます。計算には入出力データが付き物で、それらのデータを二次記憶装置(典型的にはハードディスク)に格納することが多いでしょう。ユーザー自身が直接ディスクを操作してデータを格納しないといけないとなると、それは面倒過ぎます。ハードウェアの仕様書を読んで、操作方法を把握する必要がありますし、ハードウェアによって、操作方法が異なりますからね。ディスクのどこの領域を使うか考えるのも面倒ですし、複数のユーザーがいるとき、領域が被らないよう、調整する方法を考える必要があります。そんな心配をOSがすべて解消して
「Linuxカーネル2.6解読室」(以降、旧版)出版後、Linuxには多くの機能が追加され、エンタープライズ領域をはじめとする様々な場所で使われるようになりました。 それに伴いコードが肥大かつ複雑化し、多くのエンジニアにとって解読不能なブラックボックスとなっています。 世界中のトップエンジニア達の傑作であるLinuxカーネルにメスを入れ、ブラックボックスをこじ開けて、時に好奇心の赴くままにカーネルの世界を解読する「新Linuxカーネル解読室」プロジェクト。 本稿では、カーネルモジュール機能実装の概要について説明します。 はじめに 1. 動かしてみよう 1.1 ビルドする 1.2 組込む 1.3 停止させる 2. 動作の概要 3. カーネルモジュール起動の動作フロー 4. カーネルモジュールの削除 最後に おまけ ~ カーネルモジュール組み込み機構の歴史 おまけ ~ カーネルモジュールへの署
「Linuxカーネル2.6解読室」(以降、旧版)出版後、Linuxには多くの機能が追加され、エンタープライズ領域をはじめとする様々な場所で使われるようになりました。 それに伴いコードが肥大かつ複雑化し、多くのエンジニアにとって解読不能なブラックボックスとなっています。 世界中のトップエンジニア達の傑作であるLinuxカーネルにメスを入れ、ブラックボックスをこじ開けて、時に好奇心の赴くままにカーネルの世界を解読する「新Linuxカーネル解読室」プロジェクト。 本稿では、ネットワーク機能におけるパケットの受信処理についてカーネルv6.8のコードをベースに解説します。 はじめに 1. 前回のおさらい 2. 上位レイヤへの配送: e1000_receive_skb()関数以降の処理について 2.1 前提知識: EtherTypeとpacket_type構造体 2.2 概要 2.3 __netif_
「Linuxカーネル2.6解読室」(以降、旧版)出版後、Linuxには多くの機能が追加され、エンタープライズ領域をはじめとする様々な場所で使われるようになりました。 それに伴いコードが肥大かつ複雑化し、多くのエンジニアにとって解読不能なブラックボックスとなっています。 世界中のトップエンジニア達の傑作であるLinuxカーネルにメスを入れ、ブラックボックスをこじ開けて、時に好奇心の赴くままにカーネルの世界を解読する「新Linuxカーネル解読室」プロジェクト。 この「タスクスケジューラ」の記事(いくつかの記事に分ける予定です)では、カーネルv6.8におけるタスクスケジューラの仕組みや実装について解説したいと思います。 1. 概要 1.1 タスクスケジューラとは 1.2 スケジューリングクラス 1.2.1 概要 1.2.2 ユーザAPIとの関係 1.2.3 スケジューラコアとスケジューリングクラ
「Linuxカーネル2.6解読室」(以降、旧版)出版後、Linuxには多くの機能が追加され、エンタープライズ領域をはじめとする様々な場所で使われるようになりました。 それに伴いコードが肥大かつ複雑化し、多くのエンジニアにとって解読不能なブラックボックスとなっています。 世界中のトップエンジニア達の傑作であるLinuxカーネルにメスを入れ、ブラックボックスをこじ開けて、時に好奇心の赴くままにカーネルの世界を解読する「新Linuxカーネル解読室」プロジェクト。 本稿では、ネットワーク機能の受信処理におけるEthernetドライバについてカーネルv6.8のコードをベースに解説します。 はじめに 前提条件 1. 概要 2. 割り込みハンドラにおける処理 3. ポーリングハンドラ(NAPI)による受信処理 3.1 前提知識: sk_buff構造体 3.2 概要 4. sk_buff構造体の生成 4.
はじめに 実装方針 仮想CPU 実行モード タイマ割り込み ソフトウェア割り込み メモリ割付け 動かしてみよう 割付けアドレスを確認 ハイパーバイザー無しでゲストOSを動かしてみよう 最後に 執筆者 : 高橋 浩和 ※ 「RISC-V OSを作ろう」連載記事一覧はこちら ※ 「RISC-V OS」のコードはgithubにて公開しています。 はじめに 「RISC-V OSを作ろう」 の番外編です。 RISC-Vのハイパーバイザー拡張機能(Hypervisor Extension)を使って、実際に動作する小さなハイパーバイザーを実装します。Sophia OS自体はそのままに、ここで作成したハイパーバイザー上で動作させます。 実装方針 ハイパーバイザー上で2つのゲストOSを動かすことにします。下記OSを動かすのに必要十分な機能をもったハイパーバイザーを実現します。Sophia OSを動かすハイパ
「Linuxカーネル2.6解読室」(以降、旧版)出版後、Linuxには多くの機能が追加され、エンタープライズ領域をはじめとする様々な場所で使われるようになりました。 それに伴いコードが肥大かつ複雑化し、多くのエンジニアにとって解読不能なブラックボックスとなっています。 世界中のトップエンジニア達の傑作であるLinuxカーネルにメスを入れ、ブラックボックスをこじ開けて、時に好奇心の赴くままにカーネルの世界を解読する「新Linuxカーネル解読室」プロジェクト。 1. はじめに 1.1. RWロックとRCUのおさらい 2. netfilterについて 2.1. netfilterのデータ構造・実装 2.2. ルールの参照 2.3. ルールの追加・更新 3. RWロック・RCUの比較 3.1. RWロックで保護した場合 3.1.1. 競合区間の保護 3.2. RCUで保護した場合 3.3. 更新処
仮想空間 仮想アドレス アドレス変換機構 プログラムの配置 オンデマンド 実アドレス空間 実 vs 物理 あとがき 執筆者 : 小田 逸郎 ※ 「OS徒然草」連載記事一覧はこちら 仮想空間 弊社は、Linuxカーネル(等基盤系OSS)の障害解析サービスを提供しています。サービスを提供する相手は、エンドユーザではなく、基盤の運用やサポートを行っている部署の方々となります。そうした方々に障害解析だけでなく、Linuxカーネルの内部構造だとかクラッシュダンプの解析の仕方だとかの勉強会を提供したりすることもあります。そうした方々は、普通のエンジニアに比べれば、コンピュータに詳しいはずなのですが、それでも仮想空間という概念を把握するのには苦労しているように見受けられます。今回は、仮想空間を巡るお話です。仮想空間というものは、OSを語る上で外せないものですので、本稿が、仮想空間を理解するための助けにな
コンテキストスイッチ 割り込み スーパバイザモード あとがき 執筆者 : 小田 逸郎 ※ 「OS徒然草」連載記事一覧はこちら コンテキストスイッチ OSの開発をしていると、必然的にシステムコールを使用したプログラムを作成することになります。誰しも始めたての頃は、fork(2)システムコールを不思議に思うのではないかと思います。 pid_t pid; pid = fork(); if (pid == 0) { /* child. child start here */ } else if (pid == -1) { /* error */ } else { /* parent */ } forkの復帰値が親と子で違っていて、それで自分が親か子かを区別できるというのは、どんな仕掛けになっているのだろうと気になりますよね*1。 似たような例としては、setjmp(3)、longjmp(3)関数が
「Linuxカーネル2.6解読室」(以降、旧版)出版後、Linuxには多くの機能が追加され、エンタープライズ領域をはじめとする様々な場所で使われるようになりました。 それに伴いコードが肥大かつ複雑化し、多くのエンジニアにとって解読不能なブラックボックスとなっています。 世界中のトップエンジニア達の傑作であるLinuxカーネルにメスを入れ、ブラックボックスをこじ開けて、時に好奇心の赴くままにカーネルの世界を解読する「新Linuxカーネル解読室」プロジェクト。 本稿では、旧版第21章で解説されていたソケットインターフェースについて、カーネルv6.8のコードをベースに主にデータ構造を中心に解説します。(前回の続きになります。) はじめに 1. socket構造体とsock構造体の生成 1.1. socket構造体の生成 1.2. プロトコル依存部の処理 1.2.1 プロトコル依存部分のデータ構築
はじめに コンピュータのアーキテクチャ プログラムの構造 あとがき 執筆者 : 小田 逸郎 ※ 「OS徒然草」連載記事一覧はこちら はじめに 筆者は自分のことを OS 開発者 (OS屋) だと思ってます。最近は、OSにあまり深く関われていないのですが、筆者が若かりし頃に情熱を注いだものであり、筆者の基盤をなしているものであることには間違いないです。 筆者が OS (UNIX) の開発に携わり始めたのは、1986年のことなので、もう40年近く経ってしまいました。その間に OS の規模も随分大きくなってしまったようです。 筆者が始めた頃の UNIX は、デバイスドライバを除くと、20K行くらいだったと記憶しています。 全コードをラインプリンタで出力、コピー、製本し、皆で読み合わせて、勉強会をしたりしていました。そんなことができる分量だったのです。 今の Linux の規模はどれくらいでしょうか
はじめに 自宅PC編 会社サーバ編 感想等 執筆者:佐藤友昭 ※ 「ディスアグリゲーテッドコンピューティングとは何か?」連載記事一覧はこちら はじめに 作業ログや検討メモ、参照した定型論文や書籍、ネット上の記事、視聴した講演やウェビナーのメモ等、日常を記録する情報は日々増えていく。これらの情報はできれば後に役立てたいと思うが、筆者の場合、なかなか上手くいかない。自分の外部記憶を紐解いてみると、記録したことすら忘れてしまっている項目が大半である。本稿では、ローカルLLMとRAGを用いて自分の外部記憶にいろいろと質問できるようにする方法を入門的に紹介する。決してベストプラクティス的な内容ではない。 自宅PC編 まずは、普段自宅で使用しているLinux PCを実験台として使えそうか試してみてから会社のサーバに適用してみることにする。 第一の要件は、ローカル環境で動作することである。情報の性質によ
「Linuxカーネル2.6解読室」(以降、旧版)出版後、Linuxには多くの機能が追加され、エンタープライズ領域をはじめとする様々な場所で使われるようになりました。 それに伴いコードが肥大かつ複雑化し、多くのエンジニアにとって解読不能なブラックボックスとなっています。 世界中のトップエンジニア達の傑作であるLinuxカーネルにメスを入れ、ブラックボックスをこじ開けて、時に好奇心の赴くままにカーネルの世界を解読する「新Linuxカーネル解読室」プロジェクト。 本稿では、旧版1章で解説されていた「プロセススケジューリング」の内、プロセスディスパッチャ(タスクの切り替え処理)について、カーネルv6.8/x86_64のコードをベースに解説します。 1. 前提知識 1.1 スタック 1.1.1 概要 1.1.2 PUSH/POP命令 1.1.3 CALL/RET命令 1.2 task_struct構
「Linuxカーネル2.6解読室」(以降、旧版)出版後、Linuxには多くの機能が追加され、エンタープライズ領域をはじめとする様々な場所で使われるようになりました。 それに伴いコードが肥大かつ複雑化し、多くのエンジニアにとって解読不能なブラックボックスとなっています。 世界中のトップエンジニア達の傑作であるLinuxカーネルにメスを入れ、ブラックボックスをこじ開けて、時に好奇心の赴くままにカーネルの世界を解読する「新Linuxカーネル解読室」プロジェクト。 本稿では、旧版第21章で解説されていたソケットインターフェースについて、カーネルv6.8のコードをベースに主にデータ構造を中心に解説します。 はじめに ソケットの実体と概要 ソケット操作関数の実装 ファイル操作関数によるソケット操作の実装 次回予告: ソケット生成編 執筆者 : 須田 哲志、稲葉 貴昭 ※ 「新Linuxカーネル解読室」
Linuxコード解析の初心者向けシリーズがスタート! 本シリーズでは、Linuxにテーマを絞り、これからコード解析に挑戦したい方に向けて"入口"となる情報をお届けします。 筆者の視点から、「ちょっと気になるポイント」や「今さら聞けない基礎知識」をやさし…
「Linuxカーネル2.6解読室」(以降、旧版)出版後、Linuxには多くの機能が追加され、エンタープライズ領域をはじめとする様々な場所で使われるようになりました。 それに伴いコードが肥大かつ複雑化し、多くのエンジニアにとって解読不能なブラックボックスとなっています。 世界中のトップエンジニア達の傑作であるLinuxカーネルにメスを入れ、ブラックボックスをこじ開けて、時に好奇心の赴くままにカーネルの世界を解読する「新Linuxカーネル解読室」プロジェクト。 本稿では、旧版第3章で解説されていたソフト割り込み処理について、カーネルv6.8/arm64のコードをベースに解説します。 はじめに 割り込み禁止区間と応答性について perfにおけるNMI割り込みから見る応答性 ソフト割り込み処理 ソフト割り込み処理の考え方 ソフト割り込み実行までの流れ ソフト割り込み要求(RCU_SOFTIRQの場
Linuxカーネルコード解析プロジェクト立ち上げ Linuxカーネル成長の歴史 カーネルの大きさ バージョン番号 SCM導入 カーネル機能の変遷 執筆者 : 高橋 浩和 ※ 「新Linuxカーネル解読室」連載記事一覧はこちら Linuxカーネルコード解析プロジェクト立ち上げ 弊社内にて若手技術者が中心となり、最新のLinuxカーネルコード全体を読み解くプロジェクトが進行中です。 解析したコードのうち興味を惹かれたもの、重要そうなものを中心にブログ記事にまとめていく予定です。 詳解LinuxカーネルやLinuxカーネル2.6解読室を執筆していたころよりLinuxカーネルは大きく膨れ上がっています。 どこまで辿り着けるかは分かりませんが、気長にお待ちください。 対象Linuxカーネルのバージョンは6.8 ブログ執筆中に興味深い機能が取り込まれたら、より新しいバージョンのカーネルについて解説する
「RISC-V OSを作ろう」の番外編スタートです! RISC-V のハイパーバイザー拡張機能 (Hypervisor Extension) を使って、実際に動作する小さなハイパーバイザーを実装し、動かしてみましょう。
はじめに Wasmの特徴 仮想マシン実行環境 スタック 関数 グローバル変数 メモリ テーブル 命令セット データ型 数値演算 ベクトル演算 変数、メモリ、テーブルアクセス 制御フロー ランタイムとのインターフェース バイナリフォーマット タイプ インポート 関数 テーブル メモリ グローバル エクスポート スタート エレメント データ 終わりに 執筆者 : 小田 逸郎 はじめに WebAssembly(以下、Wasm)というものが世間で話題となっているようです。 元々、Webブラウザで実行されるバイトコードであるという程度の認識で、Java みたいなものか(?)くらいの感想しかなく、あまり関心はなかったのでした。 しかしながら、最近、Kubernetesでコンテナの代わりにWasmアプリケーション を扱えるような記述を見かけるに至り、「は?(なんじゃそりゃ)」と、 にわかに関心が出てきた
1. 静的コード解析 2. Infer 3. 調査環境 4. Inferのビルド 5. Inferで解析できるようにLinuxカーネルソースコードに少し修正を加える 6. LinuxカーネルソースコードをInferで検証 7. 解析結果に対する精査の一例 7.1. 真のバグの例 7.2. フォールスポジティブの例 7.3. 真のバグか判断に困るものの例 8. 結論とこれから 執筆者 : 岡部 究 1. 静的コード解析 普段の開発で品質向上させるためにどのような手法を採用されているでしょうか。おそらくユニットテストや結合テストを代表するテストを使っているのではないでしょうか。 このテスト手法は現実的ですがざっと挙げるだけでも以下の課題があります: 入力と出力をテストケースと呼ばれる例として与えるので全ての場合を網羅することは不可能 テストの網羅率を上げるにはユニットテストのような小さい単位で
1. 細々とした予備知識 1.1 Qemuのデバイスエミュレーション 1.2 QemuのCPUエミュレーション 1.3 Qemuのスレッド 2. 追加のI/OスレッドとAioContext 2.1 追加のI/Oスレッド 2.2 AioContext 2.3 Big Qemu Lock 3. AioContextの各種イベント処理 3.1 AioHandler 3.2 event_notifier 3.3 タイマー、Bottom half 3.5 スレッドプール 執筆者 : 箕浦 真 こういう 仕事をしていると、ときどきQemuの仕組みや内部動作をお客様に説明する必要があることがあるが、そういう時に「Qemuの〜についてはここを見てね」と言えるような文書があるといいなぁと思って自分で作ってみることにした。 1. 細々とした予備知識 1.1 Qemuのデバイスエミュレーション Qemuはコンピ
1. はじめに 2. 使用環境 3. コンパイル 4. opensnoopとは 5. opensnoop.bpf.cの解説 5.1 mapの宣言 5.2 BPFプログラムのメイン処理 5.2.1 33-68行目 5.2.2 88-124行目 5.2.3 プログラムタイプとコンテキスト 5.3 opensnoop.bpf.cのコンパイル 6. opensnoop.cの解説 6.1 ヘッダファイルのインクルード 6.2 BPFアプリケーションのメイン処理 6.3 231-232行目 6.4 opensnoop_bpf__open 6.4.1 bpf_object__init_maps 6.4.2 bpf_object_init_progs 6.5 241-245行目 6.6 opensnoop_bpf__load 6.6.1 bpf_object__create_maps 6.6.2 bpf_
Linuxのコードを読むと、つい細部に気を取られて本質から外れてしまうことがあります。本ブログでは「これは何だろう?」と思う部分について、深追いせず理解できる情報を提供し、コード読解の負担を軽減することを目指します。
次のページ
このページを最初にブックマークしてみませんか?
『VA LINUX SYSTEMS JAPAN VAリナックス』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く