Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
HaskellでOSを作りたい
Search
mzp
November 04, 2014
Technology
2
7.8k
HaskellでOSを作りたい
関数なんたらの集い
http://connpass.com/event/8634/
で使用したスライドです。
mzp
November 04, 2014
Tweet
Share
More Decks by mzp
See All by mzp
アイドルとして勤務する -理論と実践- / Work as cute idol. - theory & practice - #imas_hack
mzp
2
18k
日本語入力の落とし穴
mzp
4
14k
アイマスハッカソン 2017-ライブの感動を再現する
mzp
1
2.4k
The reason for using reason
mzp
2
3k
ぺろぺろ - Github pull request bot framework -
mzp
2
3.2k
Love💕LivePhotos
mzp
0
1.5k
日本語入力とLisp
mzp
1
3.4k
Amazon EC2 スポットインスタンスを開発環境にする話
mzp
0
1.5k
クラウドサービスを活用した開発環境
mzp
1
3.3k
Other Decks in Technology
See All in Technology
QAエンジニアがプロダクト専任で チームの中に入ると。。。?/登壇資料(杉森 太樹)
hacobu
PRO
0
170
短期間でRAGシステムを実現 お客様と歩んだ生成AI内製化への道のり
taka0709
1
250
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
hanhan1978
6
2.3k
【Android】テキスト選択色の問題修正で心がけたこと
tonionagauzzi
0
130
AWS資格は取ったけどIAMロールを腹落ちできてなかったので、年内に整理してみた
hiro_eng_
0
100
AI時代におけるドメイン駆動設計 入門 / Introduction to Domain-Driven Design in the AI Era
fendo181
0
610
[2025-11-06] ベイズ最適化の基礎とデザイン支援への応用(CVIMチュートリアル)
yuki_koyama
1
440
Pythonで構築する全国市町村ナレッジグラフ: GraphRAGを用いた意味的地域検索への応用
negi111111
8
3.3k
AIエージェントを導入する [ 社内ナレッジ活用編 ] / Implement AI agents
glidenote
1
340
マイクロリブート ~ACEマインドセットで実現するアジャイル~
sony
0
140
ピープルウエア x スタートアップ
operando
3
3.8k
バクラクの AI-BPO を支える AI エージェント 〜とそれを支える Bet AI Guild〜
tomoaki25
1
160
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
Writing Fast Ruby
sferik
630
62k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
GitHub's CSS Performance
jonrohan
1032
470k
For a Future-Friendly Web
brad_frost
180
10k
The Cult of Friendly URLs
andyhume
79
6.7k
The Cost Of JavaScript in 2023
addyosmani
55
9.2k
Git: the NoSQL Database
bkeepers
PRO
431
66k
Unsuck your backbone
ammeep
671
58k
[RailsConf 2023] Rails as a piece of cake
palkan
57
6k
Transcript
)BTLFMMͰ04Λ࡞Γ͍ͨ !N[Q
ࣗݾհ w 5XJUUFS!N[Q w 0$BNM͕͖Ͱ͢ɻ w )FSPLVͰಈ͘Α͏ʹͨ͠ͷͰɺΈΜͳͬͯ͘ ͍ͩ͞ɻ w ීஈ໊ݹͰɺ3BJMTϓϩάϥϚͬͯ·͢ɻ
ؔܕݴޠͰ 04࡞Γ͍ͨͰ͢ΑͶ
w ͍ΘΏΔී௨ʹ͏04 w (6*Λ࣋ͬͯͨΓ͢Δ w αʔόʹ͏04 w (6*࣋ͬͯͳ͍͜ͱ͕ ଟ͍ w
1$Ҏ֎ͷػցͰಈ͘04 w ϦΞϧλΠϜੑ͕͋ͬͨ Γͳ͔ͬͨΓ 04ͷछྨ σεΫτοϓ04 αʔό04 ࠐΈ04 ը໘ඳը͕େมͦ͏ʜɻ ϓϩηεཧͱ͔Λਅ໘ ʹΔͱେมͦ͏ʜɻ ͍Ζ͍ΖಠಛͰͭΒ͍ɻ ˞ݸਓͷݟղͰ͢ ˠͬͱखܰͳΰʔϧ͕΄͍͠
04ͱԿ͔ IUUQCMPHTVQFSNPNPOHBDPNBSUJDMFTWJNWJNFNBDTNFIUNM 7JN"EWFOU$BMFOEBS
04ͱͯ͠ͷWJN
04ͱԿ͔ WJN&NBDT͕ಈ͚04Ͱ͋Δ ͱ͍͏ΞϓϦέʔγϣϯ͕ಈ͚04Ͱ͋Δ )FMMP XPSME͕ಈ͚04Ͱ͋Δ
୯ҰΞϓϦέʔγϣϯ༻04 w 6OJLFSOFM<> &YPLFSOFM<>ͳͲͱݺΕΔ w 7.্Ͱಈ࡞ͤ͞Δ͜ͱ͕લఏ w ௨ৗͷ04ʹର͢Δར w ༨ܭͳͷ͕ͳ͍ͷͰɺΑΓηΩϡΞ
w ༨ͳϑΝΠεγεςϜωοτϫʔΫελοΫ͕ͳ͍ͷͰɺ ύϑΥʔϚϯε͕͍͍ w 04શମʹͬͨ࠷దԽΛ͔͚ΕΔ <>6OJLFSOFMTMJCSBSZPQFSBUJOHTZTUFNTGPSUIFDMPVE IUUQEMBDNPSHDJUBUJPODGN JE <>&YPLFSOFMBOPQFSBUJOHTZTUFNBSDIJUFDUVSFGPSBQQMJDBUJPOMFWFMSFTPVSDFNBOBHFNFOUIUUQEMBDNPSHDJUBUJPODGN JE
୯ҰΞϓϦέʔγϣϯ༻04ͷྫ w .JSBHFIUUQXXXPQFONJSBHFPSH 0$BNMͷϓϩάϥϜΛίϯύΠϧ͠ɺ9FO্Ͱಈ࡞ͤ͞ΕΔɻ 9FO1SPKFDUͷҰ෦ɻ w 04WIUUQPTWJP ֤छϋΠύʔόΠβʔ্ͰΞϓϦέʔγϣϯΛಈ࡞ͤ͞Δɻ ྫSVCZ
OPEFKT MVB NSVCZ NFNDBDIFE NZTRM SFEJT +7. FUD w )B-7.ɾɾɾ)BTLFMM༻ w &SMBOH0O9FOɾɾɾ&SMBOH༻
.JSBHFͷΈ 9FO .JOJ04 .JOJ04 0UIFS04 0$BNM ϥϯλΠϜ ()$ ϥϯλΠϜ 0$BNM
ϓϩάϥϜ )BTLFMM ϓϩάϥϜ 9FOઐ༻ͷ04ɻ 9FOͷιʔεπϦʔʹಉࠝ ͞ΕͯΔ
.JOJ04ओͳػೳ w ίϯιʔϧͷ*0 w ԾϝϞϦ w ڠௐܕ ϊϯϓϦΤϯςΟϒ εϨου w
MJCD5$1*1ελοΫಈ࡞͢Δ ˠ͜Ε૬ͷͷΛؔܕݴޠͰॻ͘ͷ͕ඪ
طଘͷࣄྫ w 'VOLIUUQIPNFHOBPSHGVOL w 4OPXqBLF04IUUQTDPEFHPPHMFDPNQTOPXqBLFPT w )PVTFIUUQQSPHSBNBUJDBDTQEYFEV)PVTF
.FUBTFQJ IUUQXXXNFUBTFQJPSH w A
ৄ͘͠ЕΧ່Ͱ w ЕΧ່ͱ͍͏ٕज़ܥಉਓࢽʹৄ͘͠ॻ͔ΕͯΔɻ w ࠓ͢༰ʹ͍ۙͷרͱר͋ͨΓ IUUQXXXQBSBJTPMBOHPSHJLNTN
εφον։ൃ ˠطଘͷઃܭΛྲྀ༻Ͱ͖Δ҆৺ײɺϞνϕʔγϣϯͷҡ࣋
BKID BGPSLPGKID w .FUBTFQJ͕GPSLͨ͠)BTLFMMίϯύΠϥ w ಛ w ()$͡Όͳ͍ w )BTLFMMΛίϯύΠϧͯ͠$Λੜ͢Δ
w ϥϯλΠϜ͕ίϯύΫτґଘ͢Δ104*9"1*͕গͳ ͍ w $ͱ૬ޓݺͼग़͕͠؆୯ʹͰ͖Δ
ݱ࣌ͰͷՌ ྃ wλΠϚͷॳظԽ wϖʔδςʔϒϧͷॳظԽ wίϯιʔϧͷॳظԽ wεϨουεέδϡʔϥͷॳظԽ ະྃ wσόΠεͷॳظԽ w֤छ"1* wऴྃॲཧ
IUUQTHJUIVCDPNN[QNJOJPTXJUIBKID
σϞ
ͭΒ͔ͬͨͱ͜Ζ
ߏମ Data Section = Section { sectionId :: Word32
, sectionOffset :: Word32 } deriving (Show,Eq) instance Storable Section where sizeof _ = 8 alignment _ = 4 peek ptr = do a1 <- peek (ptr `plusPtr` 0) :: IO Word32 a2 <- peek (ptr `plusPtr` 4) :: IO Word32 return $ Section a1 a2 struct { uint32_t id; uint32_t offset; } Section; $ݴޠଆ )BTLFMMଆ
ߏମ struct { time_t now; // Ͳ͔͜Ͱtypedef͞Εͯͯܕ͕Θ͔Βͳ͍ struct {
int x; }; // ߏମ͕ຒΊࠐ·Ε͍ͯΔ.. union { .... }; // unionͬͯͲ͏ͬͯHaskellͰѻ͏ΜͩΑ #ifdef LIB_C // ͑ɺڥʹΑͬͯαΠζҧ͏ͷ? int extra_fields; #end ... } Section;
ճආࡦ w ΞΫηαΛ$ݴޠͰఆٛͨ͠ w ໘ͳΦϑηοτܭࢉΛ$ݴޠʹ·͔ͤΕΔ struct { uint32_t id; uint32_t
offset; } Section; uint32_t get_id(struct Section* p) { ... } uint32_t get_offset(struct Section* p) { ... }
*0Ϟφυ IUUQTQMTNVHNVHDPN)VNPS-BNCEBDBUTJU4,9LK
*0Ϟφυ w େͷ͕ؔ*0 Λฦ͢ඞཁ͕͋Δɻ setRunnable :: Ptr Thread -> IO
() clearRunnable :: Ptr Thread -> IO () isRunnable :: Ptr Thread -> IO Bool initSched :: IO () initSched = do printk "Initialising scheduler\n" thread <- createThread funPtr setIdleThread thread initList =<< getThreadList thread return () w େͷ͕ؔ*0 Λฦ͢ඞཁ͕͋Δɻ w ͋Μ·Γ)BTLFMMͬΆ͘ͳ͍
ίϯύΠϥͷෆ۩߹ w ૺ۰ͨ͠ෆ۩߹ w $ͷؔʹͨ͠ϙΠϯλ͕($ʹճऩ͞ΕΔ w λΠϛϯάʹΑͬͯɺར༻தͷྖҬճऩ͞ΕΔ w )BTLFMMίϯύΠϥͷ($ͷόάमਖ਼͖ͼ͍͠ w
ԆධՁͳͷͰ͍ͭॲཧ͕Δ͔Θ͔ΓͮΒ͍ w ͍ͭ($͞ΕΔ͔͔Βͳ͍
·ͱΊ w )BTLFMMͰ04Λॻ͜͏ͱ͠·ͨ͠ɻ w BKID͑ͦΕͳΓʹ͍͚·͢ɻ w ͰɺͦΕͳΓʹۤ࿑͋Γ·͢ɻ w )BTLFMMίϯύΠϥͷσόοάͭΒ͍ɻ
ࠓޙͷ՝ w .FUBTFQJతʹ"54ʹྗ͠͡ΊͯΔΒ͍͠ w ઢܗܕ͕͑Δ͍ͭ͢͝ w ϥϯλΠϜখ͍͞ w ؾʹͳΔ