2020-03-26から1日間の記事一覧
はじめに ソフトウェアの世界にはいろいろな仕事があります。何も知らない人から見て一番脚光を浴びがちなのが開発者、とくにプログラマーでしょう。スーパープログラマーを題材とした漫画やアニメ、映画はたくさんあります。しかし、それ以外の仕事は実際や…
はじめに Linuxカーネル開発を学ぶためにhello worldモジュールからはじめて少しづつ強化する記事を過去にいくつか書きました。これはちゃんとやれば身に付くことは身に付くのですが、非常に地味なので、よほどカーネルに興味を持っている人以外には退屈でし…
はじめに なんらかの理由によってOSやOSカーネルに興味を持つ人は多々います。しかし、その次のステップとしてどんな本を読めばいいんだろうと思っている人はこれまたいっぱいいます。そこで、長年Linuxカーネルにかかわってきた筆者がこれまでに読んでよか…
はじめに システムを一時的に停止させるstop-machineというカーネルモジュールを紹介します。ソースはここにあります。使いかたはREADMEを見てもらえればわかります。 Ubuntu 18.04上でlinuxカーネル4.18.0-18-genericを起動させた状態で動作検証をしました…
はじめに プログラマがソフトウェアを作るとユーザがつきます。ユーザがそのソフトウェアを使っていて何らかの問題が発生すると「このソフトはバグってる、直して!」と言われることがままあります。それに対して「いや、仕様だから」と突っぱねられることが…
はじめに 本記事はLinux環境における次のようなことをざっくり理解するための記事です。 Application Programming Interface(API)って何? Application Binary Interface(ABI)って何? システムコールとAPIとABIの関係って? それぞれ何がどう違うの? この手の…
はじめに Linuxカーネル(以下カーネルと表記)の外部ユーザ空間とのインターフェースはシステムコールが増えることはあっても既存のものが変更されることはほとんどなく、極力互換性が保たれるようになっています。しかしカーネル内部のインターフェースはめ…
はじめに 本記事はLinuxのプロセススケジューラから見たSocionext SC2A11の続きです。Socionext SC0FQAA-B(以下「本マシン」と記載)は24コアのSC2A11を1つ搭載しています。このマシンがNUMAかどうか、言い方を変えるとSC2A11内の各コアがすべてのメモリに等…
ほそく 2019/2/19 追記: 当初"false sharing"と書いていたのはすべて誤りで実際は"キャッシュのスラッシング"でした。すいません。 はじめに 本記事は、AMD社のRyzen1800x(以下1800xと記載)においてキャッシュのスラッシング(以下スラッシングと記載)が発生…
はじめに 本記事はLinux Advent Calendar 2017の最終日、25日目の記事です。 みなさんはWindows Subsystem for Linux(WSL)というWindowsのソフトウェアをご存知でしょうか。これはUbuntu, openSUSE, あるいはSUSE Linux Enterpriseという3つのLinux distribu…
はじめに 本記事はlinuxにおいてメモリ上に作成するブロックデバイスであるbrdというカーネルの機能について説明します。 用途 ブロックデバイスを直接しようする各種ファイルシステムやDB、partedなどのパーティショニングツールのテストが主な用途でしょう…
はじめに 本記事はGoでlinuxのdirect I/Oを使う方法について書いたものです。A Tour of Goを全部終えた人なら読めると思います。 ソフトウェアバージョン OS: Ubuntu 16.04 kernel: 4.4.0-83-generic go: 1.9 きっかけ Linuxのdirect I/Oは、read/write時用…
(2017年12月25日注) 本記事より新しいバージョンのWindowsについての類似記事を書きましたので、本記事のかわりにそちらをごらんください。 はじめに わたしの手持ちのノートPCにはWindows10が入っています。もっぱらWindows Subsystem for Linux(WSL, いわ…
はじめに 本記事はlinuxに存在する1Address Space Location Randomization(ASLR)、およびKASLR(Kernel ASLR)という、やたら長い名前のセキュリティ機能を紹介するものです。メモリアドレスの概念やC言語ポインタが理解できれば読める内容だと思います。 ASLR…
はじめに Docker社はDockerCon2017において、Dockerコンテナの実行にフォーカスした軽量Linuxである、LinuxKitをリリースしました。 以下関連URLです。 Docker、「LinuxKit」を発表。コンテナランタイムのためだけにゼロから開発されたセキュアなLinux Subsy…
はじめに 本記事は、何らかの理由によってパッチの内容が壊れてしまう理由と、その対処方法について述べます。IT系に限っても「パッチ」という言葉には様々な意味がありますが、本記事で言うパッチとは、diffコマンドやgit format-patchなどによって作成した…
Linux Kernelにはバージョン名(本記事執筆時点では4.x)に加えてコードネームが存在します。Linux 4.10-rc6 Released, Now Codenamed The "Fearless Coyote"のように、記事のタイトルにコードネームを持ってきたり、コードネームが記事の中に記載されたりする…
はじめに 本記事は第二回の続きです。前回までの記事を既に見ていることが前提です。 今回は、今後凝ったカーネルモジュールを作るにあたって必要になってくる、デバッグに有用なdebugfsというファイルシステムについて学びます。debugfsはカーネルとユーザ…
はじめに bashには次の2つの理由によって、組み込みコマンド(builtin command)というものが存在します。 スクリプトの高速化のため。組み込みコマンドであれば通常のコマンドを実行する場合に比べてプロセスの生成コスト(fork()/exec())が削減できる bash自…
はじめに 本記事は、他人の書いたソフトウェアのバグに遭遇したときにどうするかという流れを、実例を基にして、ストーリー仕立てでなるべく具体的に書きました。このようなときの対処に不慣れな人に、実際のデバッグ、バグレポート、および修正案の提出まで…
はじめに 本記事は第一回の続きです。前回までの記事を既に見た上で開発環境ができていることを前提としています。 前回書いたコードはモジュールをロードした時とアンロードしたときだけ動いていました。今回は、ある時点から一定時間後に所定の処理をする…
はじめに 本記事の内容はUbuntu16.04でのみ確認しています。同名の電子書籍においてはUbuntu 18.04に対応しています。 本記事の目的は、linuxのカーネルモジュール(以下カーネルモジュール)というものの作成を通じてlinuxカーネル(以下カーネル)の開発に最低…
はじめに これはLinux Advent Calendar 2016 14日目の記事です。 本記事では、ワンコマンドでお手軽にlinuxカーネル開発/自動テスト環境を構築する方法を紹介します。その後開発、自動テストの流れについてもチュートリアル形式で紹介します。本記事ではelkd…
はじめに 既存の単純なコマンドを組み合わせてスクリーンキャストを採取する方法を紹介します。 git repoはここです。本体は高々20行のbash scriptであるsimple-screencast1つだけです。 実行環境と必要なパッケージ 2016/12/04時点での最新のdebian testing…
はじめに みなさんはGNU linker(以下ld)やlinker scriptという言葉をご存知でしょうか。組み込み系のかたやOS屋さん以外のかたにとっては、直接使うものではないので、馴染みのないものだと思います。ldの役割は、皆さんが書いたソースファイルからコンパイ…
はじめに これはLinux Advent Calendar 2015 3日目の記事を2016/2/2に編集したものです。 Linuxにおいてシステムの物理メモリが枯渇したOut-Of-Memory(OOM)という状態になった際の挙動について説明しています。OOMに関連が深いsysctlパラメタを紹介するとと…
はじめに 本記事は、Linux Advent Calendar 2014 7日目の記事を2016/2/2に編集したものです。linux kernelをビルドする際に使用するmakeのターゲット(以下"makeターゲット"と記載)について、よく使われる便利なもの、面白いもの、小咄などの紹介を目的としま…
はじめに この文書は2013 Kernel/VM Advent Calendarの2日目のために書いたものを2016/2/2に編集したものです。 Linux の stable kernel というカーネルのリリース作業、およびそれに関わると、何がいいかということを説明します。自分がかつて2年ほどこの作…
はじめに 本記事は2010年10月に某所で書いた記事を2016/2/2に編集したものです。 プログラムの入門書を読んだ上でプログラムを書いた経験があるけれども、そこからステップアップするために何をしていいのかわからないという人向けの本をいくつか紹介したい…
はじめに v1: 2016/2/1: この記事は カーネル/VMアドベントカレンダー2011 のために書いたものを2016/2/1に編集したものです。 v2: 2019/8/31: プロジェクトからフェードアウトした現状を追記しました。それにあわせて内容を一部修正しました 本記事の目的は…