uchan note

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

戸狩温泉スキー場で初滑り

この記事は2021年1月に戸狩温泉スキー場に行った記録です。スキーを計画している方の参考になるような記事を目指しました。 技術記事ではないのですが、uchanがスキー好きなのでご容赦ください… 概要 2021年1月4日から2泊3日で戸狩温泉スキー場へ行きました…

Raspberry PiのGPIO2と3のプルアップ抵抗に注意

Raspberry Pi の GPIO2/3 に備わっているプルアップ抵抗はソフトウェアで無効化することができず、かつ抵抗値が小さいため、注意が必要だという話です。 概要 Raspberry Pi の GPIO はシリーズ共通のピン配置で、電子工作に大活躍します。 GPIO は基本的に O…

Thunderbolt 3対応SSDアダプタWL-UTE02をMac mini (M1, 2020)で使ってみた

Apple Silicon(M1)搭載のMac miniを購入し、Thunderbolt 3対応のアダプタを使ってSSDを増設してみました。 今回買ったアダプタは WL-UTE02、SSD は WD Blue SN550 2TBです。4 万円未満で 2TB の SSD を増設できてお得でした。 速度は書き込み 1,800MB/s、…

Raspberry Pi 4 のセットアップをしてみた

この記事は 自作OS Advent Calendar 2020 の 8 日目の記事です。 概要 Raspberry Pi 4 を買ってセットアップしたので,その過程を記録しました。 これから買う方の参考になれば幸いです。 この記事では OS のインストールと SSH で公開鍵認証を用いて接続す…

セキュリティ・キャンプ 2020 の OS 開発ゼミまとめ

この記事は 自作OS Advent Calendar 2020 の 6 日目の記事です。 セキュリティ・キャンプ とは毎年夏に開催される,合宿形式の勉強会です。 情報セキュリティ分野で活躍する講師が受講生にみっちりと講義や演習を実施します。 2020 年は新型コロナウイルスの…

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

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

USB3.0ドライバ開発の道

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

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…

データ競合と happens-before 関係

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

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 ツールのビルドが上手くいっ…

ベクタークロックと競合検査

ベクタークロック(vector clock)という名前は,クロック(時計)を並べたベクターというところからきています。 マルチスレッドプログラムの競合検査の分野で言うベクタークロックは,各スレッドの論理時刻を並べたものです。 uchan がベクタークロックを…

seccamp2020

技術書典応援祭 自作OS関連の頒布物一覧

技術書典 応援祭 が 3 月 7 日に開始しましたね。 サークル単位の頒布物一覧を探しにくいようなので,サークル「bitnos」の頒布物をまとめておきます。 この記事を読む方は自作 OS に興味があると思うので,他サークルの自作 OS 関連物も後半にまとめていま…

人々が OS を自作するきっかけは何だろう

OS 自作はとてもニッチな趣味ですが,ときどきやっている人を見かけます。 「OS を自作してみよう」と思うまでには,まずコンピュータに触れる経験が必要で,加えて OS の存在に気付く必要があるはずです。 業務命令で OS を自作するようなケースを除けば,O…

【技術書典 応援祭】OS 自作技術 ステップアップ問題集を出します

技術書オンリーの同人誌即売会「技術書典 応援祭」が,2020/03/07(土)からオンライン開催されます。 『OS 自作技術 ステップアップ問題集』と『マイクロカーネルの設計と実装』を頒布しますのでお知らせします。 頒布情報 技術書典 8 は開催中止です。 そ…

ファジングツール syzkaller は何を検査するものなの?

OSSセキュリティ技術の会 第七回勉強会 に参加してきました。 syzkaller が何を,どうやって検査するのか,原理を忘れないうちにメモします。 ファジング ファジングはプログラム解析手法の 1 つです。入力値をいろいろ変えて与えてみてバグが発生するかどう…

プログラム解析の目的

来年からサイボウズ・ラボ株式会社に所属して研究活動をすることになりました。 研究テーマは今のところプログラム解析をやろうと思っています。 プログラム解析は初心者ですので勉強したことをブログにしてみます。 プログラム解析の目的の一つはデバッグ支…

MikanOSの歴史

この記事は 自作 OS アドベントカレンダー 2019 の 2 日目の記事です。 MikanOS 筆者(uchan_nos)はここ数年,教育用 OS である MikanOS(ミカノス)を作っています。 MikanOS は「未完」と「蜜柑」を掛けた名前です。 MikanOS は教育用 OS と言っている通…

「asm volatile」におけるvolatileの効果

インラインアセンブラは低レイヤプログラミングをする人にとっては有名な機能ですが,私はなぜ「volatile」を付ける必要があるのかイマイチ分かりませんでした。いままで「volatile」を付けずとも意図通り動いていたからです。しかし今回,「volatile」を付…

FIFOバッファ

この記事はプログラミング,とりわけ自作OSに興味を持った計算機科学初心者の方に向け,FIFOバッファの紹介,および具体的な実装例を紹介するものです. FIFOバッファとは何か,自作OSでの応用例,ナイーブな実装例と性能を多少考慮した改良例を紹介します.

割り込み「ベクタ」と呼ぶ理由

割り込みハンドラへのポインタを配列状に並べたものを「割り込みベクタテーブル」と呼びます。英語ではInterrupt Vector Table。なぜ「ベクタ(ベクトル)」という語が使われるのか疑問に思い、ツイッターで聞いたりした結果、ベクタはポインタとほぼ同じ意…

セキュリティキャンプ2019全国大会 OS開発ゼミ 紹介

このページはセキュリティキャンプ全国大会 2019 の集中開発コース「OS 開発ゼミ」の紹介ページです. OS 開発ゼミ 基本情報 OS 開発ゼミの基本的な情報は以下の通りです。 イベント:セキュリティキャンプ全国大会 2019 コース:集中開発コース トラック:…

【技術書典6】「Local APICタイマー入門」を出します(ダウンロード頒布有)

大人気の技術書オンリーの同人誌即売会「技術書典 6」が、2019/04/14(日)に池袋サンシャインシティで開かれます。 今回は「Local APICタイマー入門」を出しますので、そのお知らせです。 頒布情報 日時 2019 年 4 月 14 日(日) 場所 池袋サンシャインシ…

std::function のオーバーヘッド計測

C++

C++ の std::function による呼び出しオーバーヘッドを計測してみました.

C++ autoの使いどころ・使わない方が良い場面

C++

この記事では C++11 から導入された型推論 auto の使いどころ,使うべきでない場面を紹介します. 可読性や保守性の高いプログラムにするために記事が役立てば幸いです. (筆者の考え方が偏っているかもしれません.是非,ご意見ご感想をお寄せください) …

uchanの自作OS的な自分史

筆者(uchan)は現在,自作OSの分野で精力的に活動しています.そんな筆者も最初から知識が有ったわけではありません.当然ですが最初は初心者でした.このエッセイは,筆者の自作OS人生を振り返り,何のきっかけで自作OSに足を踏み入れ,どうやって成長した…

ClangdでC++ソースコードを補完する際にコンパイルオプションを指定する方法

この記事では Clangd を使って C++ のソースコードを補完する際に独自のコンパイルオプションを指定する方法を説明します.

そこのあなた!OSCに出展してみない?

皆さんはOSC(オープンソースカンファレンス)はご存知ですか?一言で言えば「オープンソースの文化祭」的イベントで、OSSを開発、利用、販売しているような企業やコミュニティが集まってブース展示やセミナーを開催します。 私は参加自体は以前からしていま…