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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mzp
November 04, 2014
Technology
7.9k
2
Share
HaskellでOSを作りたい
関数なんたらの集い
http://connpass.com/event/8634/
で使用したスライドです。
mzp
November 04, 2014
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.3k
Love💕LivePhotos
mzp
0
1.5k
日本語入力とLisp
mzp
1
3.5k
Amazon EC2 スポットインスタンスを開発環境にする話
mzp
0
1.6k
クラウドサービスを活用した開発環境
mzp
1
3.3k
Other Decks in Technology
See All in Technology
「SaaSの次の時代」に重要性を増すステークホルダーマネジメントの要諦 ~解像度を圧倒的に高めPdMの価値を最大化させる方法~
kakehashi
PRO
3
2.5k
プラットフォームエンジニアリングの実践 - AWS コンテナサービスで構築する社内プラットフォーム / AWS Containers Platform Meetup #1
literalice
1
210
AWS DevOps Agentはチームメイトになれるのか?/ Can AWS DevOps Agent become a teammate
kinunori
6
770
EMから幅を広げるために最近挑戦していること / Recent challenges I'm undertaking to expand my horizons beyond EM
hiro_torii
1
120
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
79k
マルチプロダクトの信頼性を効率良く保っていくために
kworkdev
PRO
0
170
MLOps導入のための組織作りの第一歩
akasan
0
370
これからの「データマネジメント」の話をしよう
sansantech
PRO
0
150
今年注目する!データ分析プラットフォームでのAIの活用
nayuts
0
160
[最強DB講義]推薦システム | 評価編
recsyslab
PRO
0
110
AI時代のガードレールとしてのAPIガバナンス
nagix
0
310
Claude Code を安全に使おう勉強会 / Claude Code Security Basics
masahirokawahara
12
36k
Featured
See All Featured
Writing Fast Ruby
sferik
630
63k
Exploring anti-patterns in Rails
aemeredith
3
320
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
370
エンジニアに許された特別な時間の終わり
watany
106
240k
Navigating Weather and Climate Data
rabernat
0
170
My Coaching Mixtape
mlcsv
0
110
Building the Perfect Custom Keyboard
takai
2
730
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
680
Embracing the Ebb and Flow
colly
88
5k
The Cult of Friendly URLs
andyhume
79
6.8k
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 ؾʹͳΔ