2020-03-29から1日間の記事一覧

Linuxカーネル4.1のプロセススケジューラ(ドラフト)

はじめに 本記事は昔書いたlinuxカーネル4.1のプロセススケジューラの実装について途中まで書いたけど諸事情により二年くらい放置していたドラフトです。死蔵するのももったいないので公開しておきます。今現在のカーネルに比べてずいぶんと変わっていること…

謎のコンテナランタイムlinuxd

はじめに 本記事はLinux Advent Calenda 2018の最終日、25日目の記事です。 ここ数年、一つないし複数のプロセスから成るアプリをコンテナと呼ばれるサンドボックス上で動かすのが流行っています。このときアプリを動かす実行環境のことをコンテナランタイム…

OSSの継続性を推測する基準の例

はじめに みなさんは自分が欲しい機能を持ったOSSを見つけたものの「使っているうちに開発が止まったりしないだろうか」と思ったことはないでしょうか。あるいは似たような複数のOSSのうちのどれを採用するかという選択を迫られて悩んだ経験はないでしょうか…

Linuxカーネルに関する独自コードをメンテナンスするコスト

はじめに Linuxカーネル(以下カーネル)に機能を追加する、あるいはバグを修正する自作コードには次の2つの種類があります。 独自カーネルモジュールの作成 カーネル本体の変更 これらの変更を長期間メンテナンスするには次の方法があります。 Linux開発コミ…

Linuxのプロセススケジューラから見たSocionext SC2A11

はじめに 本記事はSocionext SC2A11のキャッシュメモリ構成の続きです。今回はLinuxのプロセススケジューラにはこのCPUがどのように見えているかについて調べました。 まずは前提知識としてLinuxカーネルのプロセススケジューラに存在するロードバランサとい…

Socionext SC2A11のキャッシュメモリ構成の推測

はじめに 本記事はARM v8 アーキテクチャのネイティブな開発環境を提供するSC0FQAA-Bに搭載されているSocionext SC2A11 (24コア)のキャッシュメモリがそれぞれどのコア間で共有されているかを調べた結果をまとめた記事です。 なぜそんなことをしたかというと…

ソートの計算量と現実のプログラム

ソートアルゴリズムについての小ネタ。「ソートは迷わずクイックソート」と言われることがよくありますが1、場合によってはそれが最適ではないこともあるという話。ここではクイックソートと挿入ソートを比較します。 O-記法で書くとクイックソートの平均計…

カーネルモジュール作成によるlinuxカーネル開発入門 - 第五回 排他制御

前回作成したスタックは、手元の端末でみなさんが対話的に操作しているうちは何も問題が起きません。しかし、このスタックを複数の処理が同時に操作した場合は問題が発生します。今回は、前回作成したスタックにどのような問題が存在しているのか、および、…

Linuxカーネルソースの統計情報

はじめに 本記事はlinuxカーネルのソース分析によって、このソフトウェアの様々な特徴を可視化します。ソースの総行数といったありがちなものから、1つのバージョン内のrelease candidate(rc)ごとのパッチ数の推移やサブシステムごとのデータなども出してい…

Linuxカーネルで学ぶC言語のマクロ

はじめに 本記事は電子書籍版もあります。 linuxカーネルはC言語のマクロを駆使して書かれています。それらのうち、凝ったマクロになじみの無い人には初見では意図がわからない&わかってみれば面白いであろうものをいくつか紹介いたします。対象読者は、C言…

カーネルモジュール作成によるlinuxカーネル開発入門 - 第四回 リスト

はじめに 本記事は第三回の続きです。前回までの記事を既に見ていることが前提です。 今回はカーネル内の代表的なデータ構造であるリストについて学びます。その過程で、カーネル内においてメモリを動的に割り当てる方法についても学びます。 リストの構造 …

科学実験のようにスケジューラの挙動を観測する

はじめに 本書の主な対象読者はlinuxを含むOSのプロセススケジューラについて聞いたことがない人や、名前は知っているけど具体的に何をするものかをよく知らない人です。 linux kernelは複数プロセスを同時に動作させる(正確にはさせているように見せかける)…