uchan note

プログラミングや電子工作の話題を書きます

東工大での自作OSの講義を担当します

この記事は 自作OS Advent Calendar 2020 の2日目の記事です。

概要

uchan は東京工業大学で特任助教をしておりますが,なんと自作 OS の授業をさせていただけることになりました。 残念ながら今年度限りの開講ですが,なるべく楽しい授業を提供したいと思います。

続きを読む

USB3.0ドライバ開発の道

この記事は 自作OS Advent Calendar 2020 の1日目の記事です。

概要

自作 OS である MikanOS 用の USB3.0 ホストコントローラドライバ(xHCI ドライバ)を開発する際に遭遇した様々な罠に遭遇しました。 罠の概要と解決した方法を集めて紹介します。

f:id:uchan_nos:20201201071550p:plain
MikanOS の完成画像

本文

本文はスライドです。

www2.slideshare.net

※12/1 に記事を間に合わせるために極限まで省力化したブログ記事ですみません( ;∀;)

MOVZX r64, r/m8は何のために存在するのか分からない

MOVZX は,レジスタやメモリの値を,それよりビット数の大きいレジスタに 0 拡張しつつコピーする x86-64 の命令です。 その中の MOVZX r64, r/m8 の存在意義が分からなかったので,どなたかご存知の方は教えてください。

続きを読む

C++ の release sequence の意味と役割

C++ の release sequence とはアトミック変数の読み書きに関するルールです。release sequence は release store を先頭とし,それに続く read-modify-write の列です。先頭の store,または後続の read-modify-write によって書き込まれた値を acquire load した際に store と load 間に happens-before 関係を付与するためのルールが release sequence です。この記事では release sequence が何を表すのかと,どんな時に役立つのかを解説します。

想定読者

  • 最小限のオーバーヘッドで異なるスレッド間の操作に happens-before 関係を付けたい人
  • C++ のメモリモデルを深く理解するために release sequence を理解しようとしている人
続きを読む

データ競合と happens-before 関係

この記事は,マルチスレッドのプログラムでしばしば見る,そして発見が困難であるバグ「データ競合」と,それを見つけるのによく使われる「happens-before 関係」について解説します。 筆者は特に x86-64 アーキテクチャにおけるバグ検出に興味がありますので,一般的な話というよりは x86-64 に寄せた話になります。

想定読者

  • データ競合バグの発生原理やアトミック変数を使ったバグの防止方法を知りたいと思っているプログラマ
  • データ競合バグを検出する手法,特に happens-before 関係を勉強したいプログラム解析手法の研究者

x86-64 & C++ を例に説明しますが,その他のアーキテクチャや言語にも通じる話もたくさんあります。

続きを読む

std::atomic の挙動がメモリオーダーによりどう異なるか

C++ の std::atomic がメモリオーダーの指定によってどう挙動が変わるかを調べました。 x86-64 アーキテクチャにおいて,アトミック変数の読み書きがどのような機械語になるかが主なテーマです。

(2020/06/15 筆者の知識がアップデートされましたので記事を大きく修正しました)

続きを読む

ccコマンドが無いとIntel Pinが実行できない

新規にインストールした Ubuntu 20.04 上で Intel Pin 3.13 (March 25, 2020) が上手く動かなかったので原因究明したメモです。 make と g++ パッケージのみを導入した状態では /usr/bin/cc が存在せず,それが原因で Intel Pin ツールのビルドが上手くいっていない問題に遭遇しました。

続きを読む