uchan note

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

OS自作ゼミの紹介 - セキュリティ・キャンプ全国大会 2022

このページはセキュリティ・キャンプ全国大会 2022 の開発コース「OS 自作ゼミ」の紹介ページです。 参加費無料で講義を受けることができますので、22 歳以下の方は是非応募してください。 OS 自作ゼミ 基本情報 OS 自作ゼミの基本的な情報は以下の通りです…

OS自作入門の出版を振り返る

この記事は 自作OS Advent Calendar 2021 の 4 日目の記事として書かれました。 人生の一大事 今年は私にとって大きな出来事がありました。それは出版と結婚です。この記事では前者について述べます。 2021 年 3 月に ゼロからの OS 自作入門 を出版しました…

タイガーブックを読む:LR(0)構文解析は先読みするのか

最新コンパイラ構成技法(原題「Modern Compiler Implementation in ML」、通称「タイガーブック」)の「3.3 LR 構文解析」の節を読んで理解したことをメモする記事です。 シリーズぽい記事タイトルですが、シリーズにする予定は今のところありません。

KiCad + FlatCAM で KitMill 用の基板切削データを作る

KitMill CL200(あるいは CL100/CL420)で基板切削をするための CNC プログラム(KitMill を制御するデータ)を作る手順のメモです。 実験的に切削した基板(導体面) 記事はこちらに移動しました KiCad + FlatCAM で KitMill 用の基板切削データを作る | el…

GCC 11のビルドとldconfig

GCC 11 をソースコードからビルドする方法と、GCC 11 に付属する標準 C++ ライブラリを利用するための ldconfig コマンドを紹介します。 GCC 11.1.0 のビルド 基本は Build GCC 11 from source on Ubuntu と同じ手順で OK です。 Ubuntu 18.04 と 20.04 でビ…

OS自作ゼミの紹介 - セキュリティ・キャンプ全国大会 Yトラック

このページはセキュリティ・キャンプ全国大会 2021 の集中コース「OS 自作ゼミ」の紹介ページです。 参加費無料で講義を受けることができますので、22 歳以下の方は是非応募してください。 (本記事は随時更新するかもしれません。特に 4 月中は更新頻度が高…

『ゼロからのOS自作入門』に込めた思い

2021 年 3 月 22 日に『ゼロからの OS 自作入門』を出版する予定です。 本書は OS を手作りする本で、現代のパソコンでちゃんと起動する点が特長です。 15 年前の 2006 年に出版された『30 日でできる!OS 自作入門』を読んで育った私(uchan)が その後継と…

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

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

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

Raspberry Pi の GPIO2/3 に備わっているプルアップ抵抗はソフトウェアで無効化することができず、かつ抵抗値が小さいため、注意が必要だという話です。

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。なぜ「ベクタ(ベクトル)」という語が使われるのか疑問に思い、ツイッターで聞いたりした結果、ベクタはポインタとほぼ同じ意…