SlideShare a Scribd company logo
ゼロから始める自作
CPU 入門
セキュリティ・キャンプフォーラム2015
ローレイヤー勉強会
お前だれよ
● 川田 裕貴 @hktechno
o 筑波大学 システム情報工学研究科
コンピュータサイエンス専攻 M1
o セキュリティ&プログラミングキ
ャンプ
2008 プログラミングコース参加
 2009, 10, 12 OS 組チューター
とても、ローレイヤーな話をします
低レイヤとは システムソフトウェア
VM
OS Kernel
アセンブラ
バイナリ
CPU
CPUマニアが考
えるローレイヤ
自作PC != 自作コンピュータ
本格的自作コンピューター
自作コンピューターというのであれば、CPU
から作らなければ!
・命令セット
・MMU
・IOコントローラ
全部作る
Open Design Computer Project
● オリジナル ”コンピューター” を作った
o CPU だけじゃない
o 基板から、CPU から、ペリフェラルまで
● 2011年度 IPA未踏 IT 人材発掘育成事業採択
● http://open-arch.org/
● ↓一緒にやってる人
@cpu_labs
mist32 プロセッサ
● 名前の由来はわからないw
● 32bit RISC アーキテクチャ
● 2オペランド
● Out of order 実行
● レジスタリネーミング
● 投機的実行
● オープンソース
CPU も自作できる
● がんばれば。
CPU 自作って楽しいの?
● 楽しい。
● 作りながら学べる。
● 理由:
o やってる人が少ない
o なんかかっこいい
o 自分の好きなように設計できる
o 上から下まで全部自由
自作 CPU で広がる夢
● CPU を自作することで....
o こんな命令があればセキュアになるのに
o こんな機能があればセキュアになるのに
o こんな命令セットもうイヤだ!
o ぼくのかんがえたさいきょうの CPU!
自作 CPU を作ってどうする?
● 考えてはいけない。
● とりあえず作ってみると楽しい
● 期待してはいけないこと:
o 既存の CPU より性能の良い物ができる
o 誰かに使ってもらえる
o 実用性
o 就活の役に立つ
CPU 自作のメリット
● 得ることができる特殊能力
o C のコードから吐かれるアセンブラがわ
かるようになる
o アセンブラからバイナリが想像できるよ
うになる
o アセンブラの命令列から、命令がどうや
って実行されるかがわかる
とりあえず、自作 CPU の民を増やしたい!
そもそも CPU とは
● 何が違うか
o アセンブラが違うだけ?
● Intel x86
● Power PC
● SPARC
● ARM Cortex-A
● ARM Cortex-M
● AVR
● PIC
CPU の分類?
CPU 自作の構成要素
● ISA (命令セットアーキテクチャ)
● プロセッサコア
● ペリフェラル
o MMU
o 割り込み
o タイマー
o など...
● ソフトウェア
o アセンブラ, コンパイラ, OS...
ISA (命令セット)
● 自作 CPU の唯一?見える部分
o バイナリ、アセンブラは見ることが可能
● ISA の設計は楽しい
● バグが発生しない!
● バイナリアンの君なら、きっと既存の ISA
への不満もたまってるはず
ISA (命令セット)
● 命令フォーマット
o 種類、オペランドの数、どうやってバイ
ナリに詰め込むかなど...
● ニーモニック
o add, sub, shr, sar, jxx…
● どんな命令を用意するか
o 変態命令をつけるとか
o 例えば、”短歌” に最適化された命令
ISA の例
● 固定長 4byte
● 半固定長 2byte, 4byte
● 可変長
● 変種
o BPT(Byte Per Tanka)世界一の命令セット
o 絶対 ASCII が現れない命令セット
o 全部 ASCII で書ける命令セット
プロセッサコア
● 命令の実行ユニットを何かしらで作る
● 一番の肝
o 工夫をたくさん入れる
o 先人たちの知識を利用する
o または、全く新しいものを作る
4bit CPU の回路
どうやってコアを書くか
● FPGA を使う
o 回路を動的に構成できる魔法の LSI
o Verilog HDL とか VHDL を使って書く
● FPGA は速い!は間違い
o 実際の素子と比べると、とても遅い。
o 特別な処理を回路に起こすと、速い
(ただし、専用の IC よりはずっと遅い)
基本的なパイプライン
● Instruction Fetch
● Instruction Decode
● Execution
o Memory Access
● Write Back
● Instruction Fetch
● Instruction Buffer
● Instruction Decode
● Dispatch
● Execution
MIST32 (In-order: MIST1032ISA)
IB
実行ポート
4個 OoOな領域
2命令同時
Fetch
Decode
…
(Super-
Scalar)
● ほとんどのプロセッサでは、
アセンブラの通りには実行されていない
o 高速化のため
o ハードウェアが実行しやすいように実行
したほうが速い
● ソフトウェアで頑張ればよいのでは?
o 夢の VLIW...
アセンブラと実行順序
Out of Order Execution (例)
mov eax, [eax]
xor ebx, ebx
add ebx, eax
inc ecx
add eax, ecx
Load (遅
い)
↑の命令とは依存がない
↑の命令とは依存がない
1
1
2
1
2
命令の順番を入れ替えても構わない
しかも、開いてるポートに並列に実行できる
Out of Order Execution
● Register Renaming
o 物理レジスタを仮想レジスタにリネーム
o 命令の依存をより少なくできる
mov eax, [eax]
inc eax
mov [eax], eax
mov eax, ebx
mov eax, [eax]
同じ eax レジスタ
だが、依存はない
← 先に実行可能
ゼロから始める自作 CPU 入門
http://arstechnica.com/business/2010/09/intels-next-must-have-upgrade-a-look-at-sandy-bridge/
プロセッサコアの設計
● レジスタ
o 何 bit でいくつ用意するか
● パイプライン
o どういう構成で、何段にするか
● 実行ユニット
o 何個用意するか、並列化させるか
● その他もろもろ
o 分岐予測、投機的実行など...
プロセッサコアと ISA
● 便利な命令や、複雑な命令をたくさん積め
ばいいじゃないか?
o そういうわけにも行かない
● 回路規模
o 複雑な実行ユニットは、回路規模が大き
くなる、クリティカルパスが長くなる
o クロックが上がらなくなる
MMU とか
● 作らなくても良い
● ただし、OS を動かすには普通は必要
● 実は作るのが結構大変
o ページテーブルを考えたり、
TLB の事を考えたり...
シミュレータ
● 実機より信頼の置けるシミュレータ
o シミュレータが信頼出来ないと
デバッグで死ぬ!
● 簡単なものでもいいからつくろう
o cycle-accurate でなくてもよい
● シミュレータの高速化も、また楽しい
アセンブラ・コンパイラ
● コアだけでは、プログラムは書けない
o ハンドアセンブルで書く人は除く
● アセンブラやコンパイラが必要
o 一般的には binutils, gcc を使うが?
o 簡単なものなら自作も可能
オペレーティングシステム
● OS も自作可能、だが...
● mist32 向けには xv6 を移植した
o Unix V6 っぽい何か
o その上で mruby もうごく
o http://www.slideshare.net/hktechno/xv6-mist32-mruby
OS を移植すると...
● OS のことも学べる
o どうやって起動するのか
o OS を動かすにはどんな機能が必要か
o どうすれば、もっと速く OS を実行でき
るか...
まとめ
CPU を自作すると...
低レイヤーな知識が大体学べる。超楽しい。
ソフトウェアの高速化、OS の作り方、コンパ
イラ・アセンブラ、CPU のパイプラインの中
身、などを学びたいなら CPU を作ろう。

More Related Content

PDF
Linux女子部 systemd徹底入門
PDF
CXL_説明_公開用.pdf
PDF
Ethernetの受信処理
PDF
組み込み関数(intrinsic)によるSIMD入門
PDF
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PDF
ELFの動的リンク
PDF
ARM Trusted FirmwareのBL31を単体で使う!
Linux女子部 systemd徹底入門
CXL_説明_公開用.pdf
Ethernetの受信処理
組み込み関数(intrinsic)によるSIMD入門
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
アーキテクチャから理解するPostgreSQLのレプリケーション
ELFの動的リンク
ARM Trusted FirmwareのBL31を単体で使う!

What's hot (20)

PDF
プログラムを高速化する話
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PDF
30分で分かる!OSの作り方 ver.2
PDF
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PDF
PG-REXで学ぶPacemaker運用の実例
PPTX
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
PPTX
「おうちクラウド」が今熱い!
PDF
初心者向けCTFのWeb分野の強化法
PDF
分散学習のあれこれ~データパラレルからモデルパラレルまで~
PDF
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
PDF
コンテナにおけるパフォーマンス調査でハマった話
PDF
レシピの作り方入門
PPT
Glibc malloc internal
PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PDF
仮想化環境におけるパケットフォワーディング
PDF
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
本当は恐ろしい分散システムの話
PDF
Dockerからcontainerdへの移行
PDF
CRC-32
PDF
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
プログラムを高速化する話
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
30分で分かる!OSの作り方 ver.2
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PG-REXで学ぶPacemaker運用の実例
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
「おうちクラウド」が今熱い!
初心者向けCTFのWeb分野の強化法
分散学習のあれこれ~データパラレルからモデルパラレルまで~
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
コンテナにおけるパフォーマンス調査でハマった話
レシピの作り方入門
Glibc malloc internal
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
仮想化環境におけるパケットフォワーディング
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
本当は恐ろしい分散システムの話
Dockerからcontainerdへの移行
CRC-32
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
Ad

Viewers also liked (20)

PDF
低レイヤー入門
PDF
機械語プログラミング
PDF
C++でできる!OS自作入門
PDF
ハッキング実演
PDF
やってよかったOS作り
PDF
CTF超入門 (for 第12回セキュリティさくら)
PDF
確率論基礎
PDF
EthernetやCPUなどの話
PDF
経験過程
PDF
Life with jupyter
PPTX
「数学の世界」発表資料
PPTX
仕事の流儀 Vol1 基本編_ver1.1_外部公開ver
PDF
H231126 統計および確率を利用した予測と判断rev1
PPTX
便利な数を100億個の乱数から算出
PDF
Cpu cache arch
PDF
MLaPP 2章 「確率」(前編)
PPTX
ベイズ基本0425
PDF
カップルが一緒にお風呂に入る割合をベイズ推定してみた
PDF
Cpu pipeline basics
PDF
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
低レイヤー入門
機械語プログラミング
C++でできる!OS自作入門
ハッキング実演
やってよかったOS作り
CTF超入門 (for 第12回セキュリティさくら)
確率論基礎
EthernetやCPUなどの話
経験過程
Life with jupyter
「数学の世界」発表資料
仕事の流儀 Vol1 基本編_ver1.1_外部公開ver
H231126 統計および確率を利用した予測と判断rev1
便利な数を100億個の乱数から算出
Cpu cache arch
MLaPP 2章 「確率」(前編)
ベイズ基本0425
カップルが一緒にお風呂に入る割合をベイズ推定してみた
Cpu pipeline basics
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
Ad

Similar to ゼロから始める自作 CPU 入門 (20)

PDF
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
PDF
Boost.勉強会 #13 @仙台 鳥小屋
PDF
seccamp2012 チューター発表
PPTX
Meltdown を正しく理解する
PDF
SpectreとMeltdown:最近のCPUの深い話
PDF
20th ACRi Webinar - Kyoto SU Presentation
PDF
初心者がOpenIndianaで自宅サーバを作ったよって話
PDF
Movidius Neral Compute Stickを使ってみた
PDF
マイコンボード色々
PPTX
Osoljp201204
PDF
OpenCLに触れてみよう
KEY
PyOpenCLによるGPGPU入門
PDF
PEZY-SC programming overview
KEY
関東GPGPU勉強会 LLVM meets GPU
PDF
TensorFlow Liteを使った組み込みディープラーニング開発
PDF
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
PDF
[D12] NonStop SQLって何? by Susumu Yamamoto
PDF
ソフトウェア技術者から見たFPGAの魅力と可能性
PPTX
2014 1018 OSC-Fall Tokyo NETMF
PDF
本当にわかる Spectre と Meltdown
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
Boost.勉強会 #13 @仙台 鳥小屋
seccamp2012 チューター発表
Meltdown を正しく理解する
SpectreとMeltdown:最近のCPUの深い話
20th ACRi Webinar - Kyoto SU Presentation
初心者がOpenIndianaで自宅サーバを作ったよって話
Movidius Neral Compute Stickを使ってみた
マイコンボード色々
Osoljp201204
OpenCLに触れてみよう
PyOpenCLによるGPGPU入門
PEZY-SC programming overview
関東GPGPU勉強会 LLVM meets GPU
TensorFlow Liteを使った組み込みディープラーニング開発
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
[D12] NonStop SQLって何? by Susumu Yamamoto
ソフトウェア技術者から見たFPGAの魅力と可能性
2014 1018 OSC-Fall Tokyo NETMF
本当にわかる Spectre と Meltdown

More from Hirotaka Kawata (9)

PDF
Kotest を使って 快適にテストを書こう - KotlinFest 2024
PDF
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
PDF
Micro Python で組み込み Python
PDF
Introduction of PyCon JP 2014 in PyCon SG
PDF
xv6 + mist32 + mruby
PDF
産学間連携推進室(AC部屋) 2012 成果報告会
PDF
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
ODP
Open Design Computer Project - Tsukuba.pm
ODP
About University of Tsukuba Linux User Group
Kotest を使って 快適にテストを書こう - KotlinFest 2024
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
Micro Python で組み込み Python
Introduction of PyCon JP 2014 in PyCon SG
xv6 + mist32 + mruby
産学間連携推進室(AC部屋) 2012 成果報告会
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Open Design Computer Project - Tsukuba.pm
About University of Tsukuba Linux User Group

ゼロから始める自作 CPU 入門