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
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.3k
Love💕LivePhotos
mzp
0
1.5k
日本語入力とLisp
mzp
1
3.5k
Amazon EC2 スポットインスタンスを開発環境にする話
mzp
0
1.5k
クラウドサービスを活用した開発環境
mzp
1
3.3k
Other Decks in Technology
See All in Technology
Tebiki Engineering Team Deck
tebiki
0
23k
Amazon Bedrock AgentCore 認証・認可入門
hironobuiga
2
460
セキュリティ はじめの一歩
nikinusu
0
1.3k
最速で価値を出すための プロダクトエンジニアのツッコミ術
kaacun
1
430
【インシデント入門】サイバー攻撃を受けた現場って何してるの?
shumei_ito
0
1.3k
しろおびセキュリティへ ようこそ
log0417
0
210
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
600
日本語テキストと音楽の対照学習の技術とその応用
lycorptech_jp
PRO
1
380
新規事業における「一部だけどコア」な AI精度改善の優先順位づけ
zerebom
0
440
Amazon ElastiCacheのコスト最適化を考える/Elasticache Cost Optimization
quiver
0
330
今日から始めるAmazon Bedrock AgentCore
har1101
4
260
Vitest Highlights in Angular
rainerhahnekamp
0
120
Featured
See All Featured
So, you think you're a good person
axbom
PRO
2
1.9k
Fireside Chat
paigeccino
41
3.8k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
390
YesSQL, Process and Tooling at Scale
rocio
174
15k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
150
Measuring & Analyzing Core Web Vitals
bluesmoon
9
740
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
61
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
55
49k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
160
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
190
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
150
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 ؾʹͳΔ