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
8k
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
⾮構造化データを価値に変える AI エージェント基盤とその組織
ivry_presentationmaterials
0
160
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
130
ハードウェアコンペでもAI駆動開発が進んでいる話
iotengineer22
1
710
USB PDを使ってスマホを労わりたい
raspython3
0
170
V8のArray.prototype.flatを最大約20倍速くするまでと、巨大OSSへの大規模コミットの道のり
riyaamemiya
0
280
AIカンパニーへの転換を支えた、エンジニアの仕事の再定義
kworkdev
PRO
2
710
ai_cording_with_k8s_knowledge.pdf
mochizuki875
1
350
Post AI時代のリファクタリング実践記 / Refactoring in the post AI era
kaminashi
1
210
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
340
Cognition AI Japan - ウェビナー2_テストQA_運用監視
cogakira
0
140
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
430
Webの常識が通じないHTMLメールのダークモード
teamlab
PRO
0
100
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
890
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
460
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
sira's awesome portfolio website redesign presentation
elsirapls
0
450
How to Think Like a Performance Engineer
csswizardry
28
2.9k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
320
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
630
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
940
Designing for humans not robots
tammielis
254
26k
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 ؾʹͳΔ