SlideShare una empresa de Scribd logo
1 de 33
Descargar para leer sin conexión
タイマー
@uchan_nos
第14回 自作OSもくもく会
2019/01/20
時間計測の必要性
• 時計表示
• タスク切り替え
• sleep関数の実装
• 時間計測はOSを構成する基礎技術の1つ
パソコン用タイマーの種類
• PIT
• RTC
• HPET
• ACPI PM Timer
• Local APIC Timer
• TSC
PIT
• PIT: Programmable Interval Timer
• Programmable = 周期などを設定できる
• Interval = 間隔
• 「30日でできる!OS自作入門」でおなじみ
• 一定周期ごとに割り込みを発生させる
• ビープ音を鳴らす
• レガシーデバイス
RTC
• RTC: Real Time Clock
• 日時(年月日,時分秒)を扱う時計
• バッテリバックアップされている唯一のタイマー
• レガシーデバイス
HPET
• HPET: High Precision Event Timer
• High Precision = 高精度
• Event = ?(特に意味はないと思う)
• 分解能が100nsより優れていることが保証されている
• = 周波数が10MHz以上
• 割り込みを発生させられる
• レガシーデバイス(後述)
ACPI PM Timer
• PM: Power Management
• Power Management = 電源管理
• ACPI規格で定められているタイマー
• もともとはスリープ状態の時間を測るため,らしい
• でも,汎用的に使える
Local APIC Timer
• Local APIC規格で定められたタイマー
• Local = CPUコア内
• APIC = Advanced Programmable Interrupt Controller
• 各CPUコア内に存在する
→ 使用時オーバーヘッドが小さい
• 割り込みを発生させられる
TSC
• TSC: Time Stamp Counter
• 各CPUコア内に存在する
• CPUの動作クロックを数えるカウンタ
• CPUが省電力状態になっても周波数が変わらないもの
→ Invariant TSC
タイマーまとめ
名前 周波数 割り込み レガシー
PIT 1.193182MHz 可 レガシー
RTC 32.768KHz 可 レガシー
HPET 機種依存,レジスタから取得可 可 レガシー
ACPI PM Timer 3.579545MHz 不可
Local APIC Timer 機種依存,取得不可 可
TSC 機種依存,取得不可 不可
Invariant TSC 機種依存,レジスタから取得可 不可
レガシーデバイス
• Legacy = 遺産
• 現代におけるレガシーデバイスの定義(筆者独自の定義)
• 存在をシステマチックに確かめる術がないもの
• レジスタにアクセスしてみないとデバイスの有無が分からない
• 電源管理できないもの
• 省電力モードでも常に動き続ける
• この定義で行けばHPETはレガシーではないが…
HPETはレガシーデバイスか
• “N-series Intel Pentium Processors and Intel Celeron
Processors Datasheet - Volume 1 of 3”, Feb. 2016
• によれば,NシリーズのPentiumおよびCeleronでは
HPETはPCU-iLB内に存在
• PCU = Platform Controller Unit
• iLB = The Intel Legacy Block
• iLBは8259 PIC, I/O-APIC, 8254 PIT, HPET, RTCを含む
• → HPETはレガシーデバイスの仲間!
XSDTを確認してみる
• XSDT = ACPIのルートテーブル
• NシリーズCerelon搭載パソコン
• CPU: Celeron N3050
• PC名: Shuttle XS36V5
• 確かにHPETがXSDTに無い!
• ちなみにQEMUでは
FACP, APIC, HPET, BGRT が見える
筆者おすすめの組み合わせ
• 初期計時:ACPI PM Timer
• 普段使い:Local APIC Timer
• ACPI PM Timerは規格ではオプショナルだが事実上標準ぽい
• https://japan.zdnet.com/article/20365868/
• 「ACPI対応のマザーボードであれば、このタイマーが提供される。」
• Local APIC TimerはIntel SDMに載っている標準デバイス
初期計時のためのタイマー選定 1/2
• 最初から動作周波数が分かっているタイマーを使って
Local APIC Timerの周波数を測りたい
• 動作周波数が既知のタイマー
• PIT
• RTC
• HPET
• ACPI PM Timer
• Invariant TSC
• なるべく分解能が優れ,レガシーでないタイマーを選びたい
初期計時のためのタイマー選定 2/2
• レガシーでない,周波数が既知のタイマー
• ACPI PM Timer
• Invariant TSC
• Invariant TSCはレジスタから周波数を取得できるが,
BIOSの設定によってはズレることがある
• Bus Clockを変更するとズレる
• CPUによってはTSCがInvariantではない
• ということで,ACPI PM Timerを選ぶのをおすすめする
普段使いのためのタイマー選定
• 割り込みに対応したタイマーの中で,
動作オーバーヘッドが小さいものを使いたい
• 割り込みに対応したタイマー
• PIT
• RTC
• HPET
• Local APIC Timer
• この中でレガシーでないのはLocal APIC Timerのみ
• 動作オーバーヘッドが最も小さいのもLocal APIC Timer
タイマーの接続図
CPUコア
Local APIC Timer
Platform Controller Hub
ACPI PM Timer
バス
• Local APIC Timer, TSC
• CPUコア内に実装されている
• PIT, RTC, HPET, ACPI PM Timer
• CPU外に実装されている
• アーキテクチャ依存の場所
• Intel 5シリーズ以降はPCH内
TSC
RTCPIT HPET
ACPI PM Timerの使い方
UEFIで起動してからタイマーで時間を測るまでの道のり
大まかな流れ
• ACPIのXSDTを得る
• XSDTからFADTを探す
• FADTのPM_TMR_BLKレジスタを読む
• TMR_VALレジスタを読む
XSDTを得る
• ACPIのXSDTを取得する
• UEFI環境での方法は大神さんの同人誌が参考になる
• 『フルスクラッチで作る!x86_64自作OS パート2』
http://yuma.ohgami.jp/x86_64-Jisaku-OS-2/01_acpi.html
• ざっくり言うと
• EFI_SYSTEM_TABLE
• → EFI_CONFIGURATION_TABLE
• → RSDP
• → XSDT
XSDTからFADTを探す
• FADTのシグネチャは”FACP”
• テーブル名とシグネチャが異なるので注意!
• XSDTは64ビットアドレスの配列
• 順にアドレスが指す先を読んでFADTを探す
ACPI Specification, Version 6.2 Errata Aより
Sig = “FACP”である
ディスクリプタを探す
FADTのPM_TMR_BLKレジスタを読む
• FADTの位置が分かればPM_TMR_BLKレジスタを読める
• PM_TMR_BLKはFADT先頭から76バイト目
ACPI Specification, Version 6.2 Errata Aより
TMR_VALレジスタを読む
• PM_TMR_BLKはACPI PM Timer関連の
レジスタブロックを指すアドレス
• PM_TMR_BLKの説明に“System port address”とある
• メモリアドレスではなくI/Oポートのアドレスである
• movではなく,in命令で読む
• uint32_t pm_tmr_blk = *(uint32_t*)(fadt_addr + 76);
• uint32_t tmr_val = io_in32(pm_tmr_blk);
TMR_VALレジスタ
• 3.579545MHzでカウントアップし続ける
• 24ビットで1周 = 約4.69秒で1周
• 時間を測るにはこんな風にする(1秒測る例)
• uint32_t initial_val = io_in32(pm_tmr_blk);
• uint32_t target_val = initial_val + 3579545;
• While (io_in32(pm_tmr_blk) < target_val);
target_valが
24ビット以上に
ならないように
注意
Local APIC Timerの使い方
LVT Timerレジスタを設定
• LVT Timerレジスタ = FEE0 0320H
• ビット18:17でモードを設定
• 00b: One-shotモード
• 01b: Periodicモード
• 10b: TSC-deadlineモード
• 他のビットは割り込み関係の設定.
• ビット16を1にしておくと割り込みが発生しない.
Initial Countレジスタを設定
• Initial Countレジスタ = FEE0 0380H
• 0より大きな値を書くとタイマーの動作開始
• One-shotモード
• 値がCurrent Countレジスタにコピーされ,
Current Countレジスタがカウントダウンされる
• Periodicモード
• Current Countレジスタが0になると割り込み発生後,
Initial Countレジスタから値が再設定される
• 詳しくはIntel SDM Vol.3, “10.5.4 APIC Timer”
Periodicモード
Initial Countレジスタ
に値Nを書き込む
Current Countレジスタの値
0
N
時刻
割り込み 割り込み
補足: レジスタアドレスの謎
• Local APIC Timer関連のレジスタはアドレス固定
• Initial Countレジスタ = FEE0 0380H
• LVT Timerレジスタ = FEE0 0320H
• しかし,Local APIC Timerは各コア毎に存在するはず
• 同じアドレスなのに,なぜ区別できるのだろうか
CPUコア1
Initial Count
メモリバス
FEE0 0320
DDR SDRAM
EAX
mov [eax], ebx
LVT Timer
アドレスデコーダ
0003 0000EBX
FEE0 0000H
- FEE0 0400H
CPUコアN
Local APICレジスタへのアクセスは
CPUコア内部で完結する
→同じアドレスでも競合しない

Más contenido relacionado

La actualidad más candente

Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Shin Ohno
 
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)KyutatsuNishiura
 
5分で分かるgitのrefspec
5分で分かるgitのrefspec5分で分かるgitのrefspec
5分で分かるgitのrefspecikdysfm
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...
Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...
Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...whywaita
 
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するStargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するKohei Tokunaga
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Yuichi Ito
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理Takuya ASADA
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方akira6592
 
KVM環境におけるネットワーク速度ベンチマーク
KVM環境におけるネットワーク速度ベンチマークKVM環境におけるネットワーク速度ベンチマーク
KVM環境におけるネットワーク速度ベンチマークVirtualTech Japan Inc.
 
TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術
TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術
TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術Hiroaki Nagashima
 

La actualidad más candente (20)

入門!Jenkins
入門!Jenkins入門!Jenkins
入門!Jenkins
 
perfを使ったPostgreSQLの解析(前編)
perfを使ったPostgreSQLの解析(前編)perfを使ったPostgreSQLの解析(前編)
perfを使ったPostgreSQLの解析(前編)
 
mTCP使ってみた
mTCP使ってみたmTCP使ってみた
mTCP使ってみた
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
 
5分で分かるgitのrefspec
5分で分かるgitのrefspec5分で分かるgitのrefspec
5分で分かるgitのrefspec
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...
Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...
Development myshoes and Provide Cycloud-hosted runner -- GitHub Actions with ...
 
Aio
AioAio
Aio
 
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するStargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方
 
GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出
 
KVM環境におけるネットワーク速度ベンチマーク
KVM環境におけるネットワーク速度ベンチマークKVM環境におけるネットワーク速度ベンチマーク
KVM環境におけるネットワーク速度ベンチマーク
 
TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術
TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術
TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術
 

Similar a Timers

04 後期勉強会一年の部【小野寺】
04 後期勉強会一年の部【小野寺】04 後期勉強会一年の部【小野寺】
04 後期勉強会一年の部【小野寺】yu-Linux
 
Craft CMSに最適なサーバはどんな環境?
Craft CMSに最適なサーバはどんな環境?Craft CMSに最適なサーバはどんな環境?
Craft CMSに最適なサーバはどんな環境?Kei Mikage
 
NSG フローログを支える技術 - NVF Advanced Flow Logging
NSG フローログを支える技術 - NVF Advanced Flow LoggingNSG フローログを支える技術 - NVF Advanced Flow Logging
NSG フローログを支える技術 - NVF Advanced Flow Logging順也 山口
 
130711 01
130711 01130711 01
130711 01openrtm
 
Linuxの2038年問題を調べてみた
Linuxの2038年問題を調べてみたLinuxの2038年問題を調べてみた
Linuxの2038年問題を調べてみたwata2ki
 
20200709 fjt7tdmi-blog-appendix
20200709 fjt7tdmi-blog-appendix20200709 fjt7tdmi-blog-appendix
20200709 fjt7tdmi-blog-appendixAkifumi Fujita
 

Similar a Timers (9)

04 後期勉強会一年の部【小野寺】
04 後期勉強会一年の部【小野寺】04 後期勉強会一年の部【小野寺】
04 後期勉強会一年の部【小野寺】
 
Clock / Timer
Clock / TimerClock / Timer
Clock / Timer
 
Craft CMSに最適なサーバはどんな環境?
Craft CMSに最適なサーバはどんな環境?Craft CMSに最適なサーバはどんな環境?
Craft CMSに最適なサーバはどんな環境?
 
NSG フローログを支える技術 - NVF Advanced Flow Logging
NSG フローログを支える技術 - NVF Advanced Flow LoggingNSG フローログを支える技術 - NVF Advanced Flow Logging
NSG フローログを支える技術 - NVF Advanced Flow Logging
 
130711 01
130711 01130711 01
130711 01
 
Interrupts on xv6
Interrupts on xv6Interrupts on xv6
Interrupts on xv6
 
Linuxの2038年問題を調べてみた
Linuxの2038年問題を調べてみたLinuxの2038年問題を調べてみた
Linuxの2038年問題を調べてみた
 
20200709 fjt7tdmi-blog-appendix
20200709 fjt7tdmi-blog-appendix20200709 fjt7tdmi-blog-appendix
20200709 fjt7tdmi-blog-appendix
 
2016-ShowNet-PTP (Precision Time Protocol)
2016-ShowNet-PTP (Precision Time Protocol)2016-ShowNet-PTP (Precision Time Protocol)
2016-ShowNet-PTP (Precision Time Protocol)
 

Más de uchan_nos

MikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するMikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するuchan_nos
 
小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器uchan_nos
 
トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路uchan_nos
 
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクトOpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクトuchan_nos
 
自作言語でお絵描き
自作言語でお絵描き自作言語でお絵描き
自作言語でお絵描きuchan_nos
 
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会uchan_nos
 
サイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返るサイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返るuchan_nos
 
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道USB3.0ドライバ開発の道
USB3.0ドライバ開発の道uchan_nos
 
Security Nextcamp remote mob programming
Security Nextcamp remote mob programmingSecurity Nextcamp remote mob programming
Security Nextcamp remote mob programminguchan_nos
 
Langsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPSLangsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPSuchan_nos
 
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作uchan_nos
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装uchan_nos
 
1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPGuchan_nos
 
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osレガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osuchan_nos
 
Building libc++ for toy OS
Building libc++ for toy OSBuilding libc++ for toy OS
Building libc++ for toy OSuchan_nos
 
プランクトンサミットの歴史2019
プランクトンサミットの歴史2019プランクトンサミットの歴史2019
プランクトンサミットの歴史2019uchan_nos
 
Introduction of security camp 2019
Introduction of security camp 2019Introduction of security camp 2019
Introduction of security camp 2019uchan_nos
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2uchan_nos
 
USB3 host driver program structure
USB3 host driver program structureUSB3 host driver program structure
USB3 host driver program structureuchan_nos
 
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)uchan_nos
 

Más de uchan_nos (20)

MikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するMikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続する
 
小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器
 
トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路
 
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクトOpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
 
自作言語でお絵描き
自作言語でお絵描き自作言語でお絵描き
自作言語でお絵描き
 
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会
 
サイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返るサイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返る
 
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道USB3.0ドライバ開発の道
USB3.0ドライバ開発の道
 
Security Nextcamp remote mob programming
Security Nextcamp remote mob programmingSecurity Nextcamp remote mob programming
Security Nextcamp remote mob programming
 
Langsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPSLangsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPS
 
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装
 
1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG1を書いても0が読める!?隠れた重要命令INVLPG
1を書いても0が読める!?隠れた重要命令INVLPG
 
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osレガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free os
 
Building libc++ for toy OS
Building libc++ for toy OSBuilding libc++ for toy OS
Building libc++ for toy OS
 
プランクトンサミットの歴史2019
プランクトンサミットの歴史2019プランクトンサミットの歴史2019
プランクトンサミットの歴史2019
 
Introduction of security camp 2019
Introduction of security camp 2019Introduction of security camp 2019
Introduction of security camp 2019
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
 
USB3 host driver program structure
USB3 host driver program structureUSB3 host driver program structure
USB3 host driver program structure
 
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
業務時間で書いたパッチは誰のもの?OSS活動にまつわる罠 (builderscon tokyo 2018)
 

Timers