Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
HaskellでOSを作りたい
Search
mzp
November 04, 2014
Technology
7.9k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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.5k
The reason for using reason
mzp
2
3k
ぺろぺろ - Github pull request bot framework -
mzp
2
3.4k
Love💕LivePhotos
mzp
0
1.6k
日本語入力とLisp
mzp
1
3.6k
Amazon EC2 スポットインスタンスを開発環境にする話
mzp
0
1.6k
クラウドサービスを活用した開発環境
mzp
1
3.4k
Other Decks in Technology
See All in Technology
Mastering Agentic Development: Harness Engineering for Effective Coding Agents
konippi
3
550
Argo CDとAtlantisで実現するインフラ管理のセルフサービス化──小規模SREチームで支えるプラットフォーム
cassius7
0
120
Azure Serverless 2026:Production-ready な AI エージェント基盤 / Azure Serverless 2026: Production-Ready AI Agent Platform
miyake
2
600
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
4
2.2k
AIエージェントの一手は 誰も見ていない - Falco拡張OSS「Prempti」とeBPFで サーバーレス実行基盤を二層防御する
keitah
1
570
Cloudflare Workers 向けアプリを C# で構築する ~WASM Native AOT への道~
nenonaninu
1
1.5k
おい、エージェントを使って終わらせろ
nwiizo
3
940
SREは、MCPとAutopilotをこう使え!
kazumax55
3
960
AWS FinOps Agent 結局何が得意なの?
siromi
0
170
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
4
3.8k
JSONataとAWS Step Functionsで目指すRuntimelessな世界
mu7889yoon
1
500
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
300
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
570
Deep Space Network (abreviated)
tonyrice
0
320
Git: the NoSQL Database
bkeepers
PRO
432
67k
The Curse of the Amulet
leimatthew05
3
15k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
450
Visualization
eitanlees
153
17k
Docker and Python
trallard
47
4.2k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
240
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Building AI with AI
inesmontani
PRO
1
1.2k
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 ؾʹͳΔ