Slide 1

Slide 1 text

スケジューラから学ぶGoランタイム 〜 code reading of runtime pkg〜 さき(H.Saki) @saki-engineer Go Conference 2021 Autumn, NOV 13 2021

Slide 2

Slide 2 text

自己紹介 About Me l ͖͞ )4BLJ ○ ౦େ޻ֶ෦ ˠ ࠓ೥͔Β৽ࣾձਓ ○ 5XJUUFS!TBLJFOHJOFFS l աڈͷ੒Ռ෺ FUDʜ

Slide 3

Slide 3 text

自己紹介 About Me l ͖͞ )4BLJ ○ ౦େ޻ֶ෦ ˠ ࠓ೥͔Β৽ࣾձਓ ○ 5XJUUFS!TBLJFOHJOFFS l աڈͷ੒Ռ෺ FUDʜ ͜ΕΛॻ͘ͷʹΊͬͪΌۤ࿑ͨ͠ ಛʹ৘ใιʔεΛ͋ͨΔͨΊʹ SVOUJNFύοέʔδΛίʔυϦʔςΟϯά͢Δͱ͜Ζ ࣥචʹ͔͔ͬͨ࣌ؒϲ݄

Slide 4

Slide 4 text

アジェンダ  ϥϯλΠϜͱ͸ ʜʜϥϯλΠϜͬͯԿʁ  (PϥϯλΠϜͷίϯϙʔωϯτ ʜʜϥϯλΠϜͬͯͲΜͳ෦඼Ͱग़དྷ͍ͯΔͷʁ  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ ʜʜϥϯλΠϜʹ͸͜ͷΑ͏ͳػೳ͕͋Γ·͢  ϥϯλΠϜ͕བྷΉॲཧ ʜʜϥϯλΠϜͷػೳ͸͜ͷΑ͏ͳ৔ॴ Ϣʔεέʔε Ͱ࢖ΘΕ·͢  ϥϯλΠϜΛֶͿʹ͸

Slide 5

Slide 5 text

おことわり ͜ͷηογϣϯͰ͸ɺҎԼͷ͜ͱ͸ط஌ͱͯ͠ѻΘ͍͖ͤͯͨͩ·͢ɻ l ΰʔϧʔνϯͱ͸Կ͔ l ฒߦॲཧͱ͸Կ͔ l ॳาతͳίϯϐϡʔλʔαΠΤϯε ○ $16 ϓϩηε εϨου ʜͳͲͦͷลͷ୯ޠ͕෼͔Ε͹0,

Slide 6

Slide 6 text

アジェンダ  ϥϯλΠϜͱ͸ ᶃ ϥϯλΠϜͱ͸Կ͔ʁ ᶄ (Pͷεέδϡʔϥʔͷ໾ׂ  (PϥϯλΠϜͷίϯϙʔωϯτ  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸

Slide 7

Slide 7 text

「ランタイム」とは何か? from Wikipedia 1. ランタイムとは ϥϯλΠϜγεςϜ ӳޠSVOUJNFTZTUFN·ͨ͸SVOUJNFTZTUFN ͱ͸ɺ ओʹ࣮ߦϞσϧͷҰ෦Λ࣮૷͢Δ΋ͷͰ͋Δɻ ϓϩάϥϜͷ௚઀ͷ࡞༻Ͱͳ͍ৼΔ෣͍͸͢΂ͯϥϯλΠϜγεςϜͷৼΔ෣͍Ͱ͋Δɺͱ ͍͏෩ʹϥϯλΠϜγεςϜΛఆٛ͢Δํ๏΋͋Δɻ  8JLJQFEJBΑΓ

Slide 8

Slide 8 text

「ランタイム」とは何か? from Wikipedia 1. ランタイムとは ϥϯλΠϜγεςϜ ӳޠSVOUJNFTZTUFN·ͨ͸SVOUJNFTZTUFN ͱ͸ɺ ओʹ࣮ߦϞσϧͷҰ෦Λ࣮૷͢Δ΋ͷͰ͋Δɻ ϓϩάϥϜͷ௚઀ͷ࡞༻Ͱͳ͍ৼΔ෣͍͸͢΂ͯϥϯλΠϜγεςϜͷৼΔ෣͍Ͱ͋Δɺͱ ͍͏෩ʹϥϯλΠϜγεςϜΛఆٛ͢Δํ๏΋͋Δɻ  8JLJQFEJBΑΓ ͳΔ΄ͲΘ͔ΒΜ

Slide 9

Slide 9 text

「ランタイム」の具体例 1. ランタイムとは (PͰ͸։ൃऀ͕ϏδωεϩδοΫͷهड़ʹ஫ྗͰ͖ΔΑ͏ʹɺ͋Δఔ౓ͷ͜ͱ ͸ʮϥϯλΠϜʯଆͰ࣮ߦͯ͘͠Ε·͢ɻ ϝϞϦͷׂΓ౰ͯ intܕͭΛ֨ೲ͢ΔϝϞϦ͸ ࣗಈͰ֬อ͞ΕΔ ஫$ݴޠͩͱmallocͳͲͰ ໌ࣔతʹ֬อ͢Δඞཁ͋Γ (PϥϯλΠϜͷ໾ׂ ΨϕʔδίϨΫτ εέδϡʔϦϯά ࢖͍ऴΘͬͨม਺arrayͷ ϝϞϦղ์͸ࣗಈͰߦΘΕΔ ஫$ݴޠͩͱfreeͰ ໌ࣔతʹղ์͢Δඞཁ͋Γ ฒߦͳؔ਺Λ࣮ࡍʹͲͷλΠ ϛϯάͰಈ͔͢ͷ͔͸ࣗಈͰ ௐ੔͞ΕΔ

Slide 10

Slide 10 text

「ランタイム」の具体例 1. ランタイムとは (PͰ͸։ൃऀ͕ϏδωεϩδοΫͷهड़ʹ஫ྗͰ͖ΔΑ͏ʹɺ͋Δఔ౓ͷ͜ͱ ͸ʮϥϯλΠϜʯଆͰ࣮ߦͯ͘͠Ε·͢ɻ ϝϞϦͷׂΓ౰ͯ intܕͭΛ֨ೲ͢ΔϝϞϦ͸ ࣗಈͰ֬อ͞ΕΔ ஫$ݴޠͩͱmallocͳͲͰ ໌ࣔతʹ֬อ͢Δඞཁ͋Γ (PϥϯλΠϜͷ໾ׂ ΨϕʔδίϨΫτ εέδϡʔϦϯά ࢖͍ऴΘͬͨม਺arrayͷ ϝϞϦղ์͸ࣗಈͰߦΘΕΔ ஫$ݴޠͩͱfreeͰ ໌ࣔతʹղ์͢Δඞཁ͋Γ ฒߦͳؔ਺Λ࣮ࡍʹͲͷλΠ ϛϯάͰಈ͔͢ͷ͔͸ࣗಈͰ ௐ੔͞ΕΔ

Slide 11

Slide 11 text

アジェンダ  ϥϯλΠϜͱ͸ ᶃ ϥϯλΠϜͱ͸Կ͔ʁ ᶄ (Pͷεέδϡʔϥʔͷ໾ׂ  (Pεέδϡʔϥͷߏ੒ཁૉ  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸

Slide 12

Slide 12 text

Goのスケジューラーの役割(1/5) 1. ランタイムとは ฒߦʹ࣮ߦ͢Δΰʔϧʔνϯͷ਺͕ɺϓϩάϥϜͰ࢖༻Ͱ͖Δ04εϨου਺Α Γ΋গͳ͔ͬͨ৔߹͸࿩͕؆୯ɻ୯७ʹରԠͤ͞Δ͜ͱ͕Ͱ͖·͢ɻ idle ฒྻʹ࣮ߦ͢Δΰʔϧʔνϯ਺ 04εϨου ͷ৔߹ go MyFunc1() ϓϩάϥϜத 04εϨου UJNF idle myFunc2 idle myFunc1 go MyFunc2()

Slide 13

Slide 13 text

Goのスケジューラーの役割(2/5) 1. ランタイムとは ͔͠͠ΰʔϧʔνϯͷ਺͕04εϨου਺Λ্ճ͍ͬͯΔ৔߹͸ɺ͏·͍۩߹ʹ ϦιʔεΛ෼͚߹͏ඞཁ͕͋Γ·͢ɻ ฒྻʹ࣮ߦ͢Δΰʔϧʔνϯ਺ 04εϨου ͷ৔߹ go MyFunc1() go MyFunc2() ϓϩάϥϜத 04εϨου UJNF idle myFunc2 myFunc1 go MyFunc3() go MyFunc4() idle myFunc3

Slide 14

Slide 14 text

Goのスケジューラーの役割(3/5) 1. ランタイムとは ͔͠͠ΰʔϧʔνϯͷ਺͕04εϨου਺Λ্ճ͍ͬͯΔ৔߹͸ɺ͏·͍۩߹ʹ ϦιʔεΛ෼͚߹͏ඞཁ͕͋Γ·͢ɻ idle idle ฒྻʹ࣮ߦ͢Δΰʔϧʔνϯ਺ 04εϨου ͷ৔߹ go MyFunc1() go MyFunc2() ϓϩάϥϜத 04εϨου UJNF myFunc2 myFunc1 go MyFunc3() go MyFunc4() myFunc3 MyFunc4͚͕࣮ͩߦ͞Εͳ͍·· ࢒ͬͯ͠·͍ͬͯΔ

Slide 15

Slide 15 text

Goのスケジューラーの役割(4/5) 1. ランタイムとは ͦ͜Ͱ(Pͷεέδϡʔϥʔ͸ɺΰʔϧʔνϯ04εϨουؒͷׂΓ౰ͯΛௐ੔ ͢Δ໾ׂΛ୲͍·͢ɻ ฒྻʹ࣮ߦ͢Δΰʔϧʔνϯ਺ 04εϨου ͷ৔߹ go MyFunc1() go MyFunc2() ϓϩάϥϜத 04εϨου UJNF idle myFunc2 go MyFunc3() idle myFunc3 go MyFunc4() myFunc1 myFunc4 εέδϡʔϥ͕myFunc1Λதஅͤ͞ɺ myFunc4ʹϦιʔεΛ౉͢

Slide 16

Slide 16 text

Goのスケジューラーの役割(5/5) 1. ランタイムとは ·ͨεέδϡʔϥ͸ɺΰʔϧʔνϯ͚ͩͰ͸ͳ͘ɺΨϕʔδίϨΫτͷΑ͏ͳผ ͷϥϯλΠϜͷػೳ·Ͱ߹Θ࣮ͤͯߦλΠϛϯάΛௐ੔͢Δ͜ͱ͕Ͱ͖·͢ɻ ฒྻʹ࣮ߦ͢Δΰʔϧʔνϯ਺ 04εϨου ͷ৔߹ go MyFunc1() go MyFunc2() ϓϩάϥϜத 04εϨου UJNF idle myFunc2 go MyFunc3() idle myFunc3 go MyFunc4() ΨϕʔδίϨΫτΛ (PͷλΠϛϯάͰೖΕΔ͜ͱ͕Ͱ͖Δ myFunc1 GC myFunc1

Slide 17

Slide 17 text

ここまでのまとめ l ϥϯλΠϜ͸ɺϓϩάϥϚ͕ϏδωεϩδοΫ෦෼ͷ։ൃʹ஫ྗͰ͖ΔΑ͏ ʹɺϓϩάϥϜΛಈ͔ͨ͢ΊʹඞཁͳॾػೳΛҾ͖ड͚ͯ͘Ε͍ͯΔ l ϥϯλΠϜ͕࣋ͭͭͷػೳ͕εέδϡʔϦϯά l ಠࣗʹεέδϡʔϥʔΛ࣋ͭ͜ͱͰɺʮ͍ͭͲΜͳΰʔϧʔνϯ͕࣮ߦ͞Ε Δͷ͔ʯΛ(PMJLFʹܾΊΔ͜ͱ͕Ͱ͖͍ͯΔ

Slide 18

Slide 18 text

アジェンダ  (PϥϯλΠϜͷίϯϙʔωϯτ ᶃ ( . 1ͱ͸ʁ ᶄ ௥Ճͷߏ੒ཁૉ  ϥϯλΠϜͱ͸  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸

Slide 19

Slide 19 text

コンポーネントって一体どういうこと 2. Goランタイムのコンポーネント ཁ͢ΔʹɺʮSVOUJNFύοέʔδͰΑ͘ग़ͯ͘Δߏ଄ମɾม਺ɾؔ਺ʯͷ࿩Λ͜ Ε͔Β͠·͢ɻ PTύοέʔδͷ৔߹ TRMύοέʔδͷ৔߹ SVOUJNFύοέʔδͷ৔߹ PT'JMFܕͷಋೖ TRM%#ܕͷಋೖ 5PCFDPOUJOVFEʜ ϑΝΠϧૢ࡞͍ͨ͠Ͱ͢ %#઀ଓ͍ͨ͠Ͱ͢ εέδϡʔϦϯά͍ͨ͠Ͱ͢

Slide 20

Slide 20 text

Goランタイムのコンポーネント 2. Goランタイムのコンポーネント SVOUJNFύοέʔδ಺ʹ)"$,*/(NEͱ͍͏ϑΝΠϧ͕͋Γɺͦ͜ʹ͸ҎԼͷ Α͏ʹهड़͞Ε͍ͯ·͢ɻ 5IFTDIFEVMFSNBOBHFTUISFFUZQFTPGSFTPVSDFTUIBUQFSWBEFUIFSVOUJNF (T .T BOE1T ༁ εέδϡʔϥͷ໾ׂ͸(PϥϯλΠϜΛࢧ͑ΔҎԼͭͷϦιʔεΛ؅ཧ͢Δ͜ͱͰ͋Δɻ Ұͭ͸( ΋͏Ұͭ͸. ͦͯ͠࠷ޙʹ1Ͱ͋Δɻ  SVOUJNF)"$,*/(NE ϥϯλΠϜΛࢧ͑Δʮ( . 1ʯͱ͸Կ͔ʁ

Slide 21

Slide 21 text

Goランタイムのコンポーネント 2. Goランタイムのコンポーネント (PεέδϡʔϥͰ͸ɺҎԼͷ( . 1Λ͏·͘૊Έ߹ΘͤΔ͜ͱͰ࢓ࣄΛߦͳͬ ͍ͯ·͢ɻ ໊শ (PSPVUJOF ( . 1 .BDIJOF 1SPDFTTPS ΰʔϧʔνϯͦͷ΋ͷɻ goจʹΑͬͯىಈ͞Εɺؔ਺ͷ࣮ߦ͕ऴΘͬͨΒऴྃ͞ΕΔɻ 04εϨουɻ (Pͷίʔυ΍ϥϯλΠϜίʔυΛ࣮ߦͨ͠ΓɺγεςϜίʔϧΛݺ ΜͩΓΞΠυϧʹͳͬͨΓ͢Δɻ ΰʔϧʔνϯΛ࣮ߦ͢Δͷʹඞཁͳ1$Ϧιʔεɻ 04εέδϡʔϥʹͱͬͯͷ$16ͷΑ͏ͳ΋ͷɻ ུশ ֓ཁ

Slide 22

Slide 22 text

コードを実行するために必要なもの 2. Goランタイムのコンポーネント ϓϩάϥϜͷίʔυͱ͍͏όΠτྻ͚ͩͰ͸ɺͦΕΛಈ͔͢͜ͱ͸Ͱ͖ͳ͍ɻಈ ͔͢ʹ͸04εϨουͱ$16ίΞ͕ඞཁͰ͋Δɻ ϓϩάϥϜίʔυͷΈ ϓϩάϥϜίʔυͱ ͦΕ͕ͷͬͨϝϞϦۭ͚ؒͩ ˣ ࣮ߦ͢Δ͜ͱ͕Ͱ͖ͳ͍ Πϝʔδ ίʔυ εϨουͷΈ ίʔυ εϨου $16 ϓϩάϥϜϝϞϦͱ 04εϨου͚ͩ ˣ ࣮ߦ͢Δ͜ͱ͕Ͱ͖ͳ͍ ϓϩάϥϜϝϞϦͱ 04εϨουͱ Ծ૝ $16 ˣ ࣮ߦͰ͖Δ γʔϯʜ γʔϯʜ DPEF 04 εϨου $16 ΢Οʔϯʂ DPEF 04 εϨου DPEF

Slide 23

Slide 23 text

Goランタイム上でのモデリング 2. Goランタイムのコンポーネント (PϥϯλΠϜͷ( . 1͸ɺઌ΄Ͳͷ࿩ΛϞσϦϯάͨ͠΋ͷͰ͢ɻجຊతʹɺ ( . 1͕ͭଗΘͳ͍ͱϓϩάϥϜΛ࣮ߦ͢Δ͜ͱ͕Ͱ͖·ͤΜɻ (ͷΈ ϓϩάϥϜίʔυͱ ͦΕ͕ͷͬͨϝϞϦۭ͚ؒͩ ˣ ࣮ߦ͢Δ͜ͱ͕Ͱ͖ͳ͍ Πϝʔδ (ͱ.ͷΈ (ͱ.ͱ1 ϓϩάϥϜϝϞϦͱ 04εϨου͚ͩ ˣ ࣮ߦ͢Δ͜ͱ͕Ͱ͖ͳ͍ ϓϩάϥϜϝϞϦͱ 04εϨουͱ Ծ૝ $16 ˣ ࣮ߦͰ͖Δ ( γʔϯʜ . ( γʔϯʜ ϝϞϦ ϝϞϦ εϨου 1 . ( ϝϞϦ εϨου $16 ΢Οʔϯʂ

Slide 24

Slide 24 text

Goランタイムのコンポーネント(再掲) 2. Goランタイムのコンポーネント (PεέδϡʔϥͰ͸ɺҎԼͷ( . 1Λ͏·͘૊Έ߹ΘͤΔ͜ͱͰ࢓ࣄΛߦͳͬ ͍ͯ·͢ɻ ໊শ (PSPVUJOF ( . 1 .BDIJOF 1SPDFTTPS ΰʔϧʔνϯͦͷ΋ͷɻ goจʹΑͬͯىಈ͞Εɺؔ਺ͷ࣮ߦ͕ऴΘͬͨΒऴྃ͞ΕΔɻ 04εϨουɻ (Pͷίʔυ΍ϥϯλΠϜίʔυΛ࣮ߦͨ͠ΓɺγεςϜίʔϧΛݺ ΜͩΓΞΠυϧʹͳͬͨΓ͢Δɻ ΰʔϧʔνϯΛ࣮ߦ͢Δͷʹඞཁͳ1$Ϧιʔεɻ 04εέδϡʔϥʹͱͬͯͷ$16ͷΑ͏ͳ΋ͷɻ ུশ ֓ཁ

Slide 25

Slide 25 text

G構造体 〜ゴールーチン〜(1/4) 2. Goランタイムのコンポーネント (͸ɺΰʔϧʔνϯͦͷ΋ͷΛࢦ͢SVOUJNFύοέʔδ಺ͷߏ଄ମͰ͢ɻ ग़యSVOUJNFSVOUJNFHP (

Slide 26

Slide 26 text

G構造体 〜ゴールーチン〜(2/4) 2. Goランタイムのコンポーネント NϑΟʔϧυʹͯɺͦͷ(ʹඥͮ͘04εϨου͕ࢦఆ͞Ε͍ͯ·͢ɻ . ( ͦͷΰʔϧʔνϯΛಈ͔͢ 04εϨου͕ NϑΟʔϧυͰࢦఆ͞Ε͍ͯΔ ग़యSVOUJNFSVOUJNFHP

Slide 27

Slide 27 text

G構造体 〜ゴールーチン〜(3/4) 2. Goランタイムのコンポーネント ΰʔϧʔνϯ্Ͱ࣮ߦ͢Δίʔυ͕ࡌΔϝϞϦϑΟʔϧυ΋͋Γ·͢ɻ . ( ͦͷΰʔϧʔνϯͰ࣮ߦ͢Δॲཧ͕ͷͬͨ ϝϞϦΞυϨε͕TDIFEʹ֨ೲ ग़యSVOUJNFSVOUJNFHP

Slide 28

Slide 28 text

G構造体 〜ゴールーチン〜(4/4) 2. Goランタイムのコンポーネント ݱࡏͷΰʔϧʔνϯͷεςʔλεΛද͢ϑΟʔϧυ͕͋Γ·͢ɻ . ( (͕ࠓͲͷΑ͏ͳঢ়ଶͳͷ͔ εςʔλε͕֨ೲ͞Ε͍ͯΔ ग़యSVOUJNFSVOUJNFHP

Slide 29

Slide 29 text

Goランタイムのコンポーネント(再掲) 2. Goランタイムのコンポーネント (PεέδϡʔϥͰ͸ɺҎԼͷ( . 1Λ͏·͘૊Έ߹ΘͤΔ͜ͱͰ࢓ࣄΛߦͳͬ ͍ͯ·͢ɻ ໊শ (PSPVUJOF ( . 1 .BDIJOF 1SPDFTTPS ΰʔϧʔνϯͦͷ΋ͷɻ goจʹΑͬͯىಈ͞Εɺؔ਺ͷ࣮ߦ͕ऴΘͬͨΒऴྃ͞ΕΔɻ 04εϨουɻ (Pͷίʔυ΍ϥϯλΠϜίʔυΛ࣮ߦͨ͠ΓɺγεςϜίʔϧΛݺ ΜͩΓΞΠυϧʹͳͬͨΓ͢Δɻ ΰʔϧʔνϯΛ࣮ߦ͢Δͷʹඞཁͳ1$Ϧιʔεɻ 04εέδϡʔϥʹͱͬͯͷ$16ͷΑ͏ͳ΋ͷɻ ུশ ֓ཁ

Slide 30

Slide 30 text

M構造体 〜OSスレッド〜(1/4) 2. Goランタイムのコンポーネント .͸ɺ(Λ࣮ߦ͢ΔͨΊͷ04εϨουΛදݱͨ͠ߏ଄ମͰ͢ɻ . ग़యSVOUJNFSVOUJNFHP

Slide 31

Slide 31 text

M構造体 〜OSスレッド〜(2/4) 2. Goランタイムのコンポーネント ࠓݱࡏ04εϨου.্Ͱಈ͍͍ͯΔ(Λද͢ϑΟʔϧυ͕͋Γ·͢ɻ . ( ͦͷ.ͷ্Ͱಈ͔͍ͯ͠Δ( ग़యSVOUJNFSVOUJNFHP

Slide 32

Slide 32 text

M構造体 〜OSスレッド〜(3/4) 2. Goランタイムのコンポーネント ࠓͷ.ࣗ਎͕ඥͮ͘Ծ૝1$Ϧιʔε1Λද͢ϑΟʔϧυ΋͋Γ·͢ɻ 1 . ( ͦͷ.Λಈ͔͍ͯ͠Δ1 ग़యSVOUJNFSVOUJNFHP

Slide 33

Slide 33 text

M構造体 〜OSスレッド〜(4/4) 2. Goランタイムのコンポーネント N04ϑΟʔϧυͷதʹ͸ɺ04εϨουͷ࣮ମ͕֨ೲ͞Ε͍ͯ·͢ɻ 1 . ( 04εϨου͕ தʹೖ͍ͬͯΔ ग़యSVOUJNFSVOUJNFHP

Slide 34

Slide 34 text

Goランタイムのコンポーネント(再掲) 2. Goランタイムのコンポーネント (PεέδϡʔϥͰ͸ɺҎԼͷ( . 1Λ͏·͘૊Έ߹ΘͤΔ͜ͱͰ࢓ࣄΛߦͳͬ ͍ͯ·͢ɻ ໊শ (PSPVUJOF ( . 1 .BDIJOF 1SPDFTTPS ΰʔϧʔνϯͦͷ΋ͷɻ goจʹΑͬͯىಈ͞Εɺؔ਺ͷ࣮ߦ͕ऴΘͬͨΒऴྃ͞ΕΔɻ 04εϨουɻ (Pͷίʔυ΍ϥϯλΠϜίʔυΛ࣮ߦͨ͠ΓɺγεςϜίʔϧΛݺ ΜͩΓΞΠυϧʹͳͬͨΓ͢Δɻ ΰʔϧʔνϯΛ࣮ߦ͢Δͷʹඞཁͳ1$Ϧιʔεɻ 04εέδϡʔϥʹͱͬͯͷ$16ͷΑ͏ͳ΋ͷɻ ུশ ֓ཁ

Slide 35

Slide 35 text

P構造体 〜仮想PCリソース〜(1/3) 2. Goランタイムのコンポーネント 1ߏ଄ମ͸ɺ04εϨουΛ࣮ࡍʹಈ͔͢1$ϦιʔεΛද͠·͢ɻ 1 ग़యSVOUJNFSVOUJNFHP

Slide 36

Slide 36 text

P構造体 〜仮想PCリソース〜(2/3) 2. Goランタイムのコンポーネント ݱࡏͷ1͕ඥ͍͍ͮͯΔ.Λද͢ϑΟʔϧυ͕͋Γ·͢ɻ 1 . ͦͷ1Ͱࠓಈ͔͍ͯ͠Δ. ग़యSVOUJNFSVOUJNFHP

Slide 37

Slide 37 text

P構造体 〜仮想PCリソース〜(3/3) 2. Goランタイムのコンポーネント ࣮ߦ༧ఆͷ(ΛͨΊ͓ͯͨ͘ΊͷϩʔΧϧΩϡʔΛද͢ϑΟʔϧυ΋͋Γ·͢ɻ 1 . ( ( ͦͷ1Ͱ࣮ߦ͢Δ༧ఆͷ(ΛΩϡʔͰͨΊ͓ͯ͘ (ͷϩʔΧϧΩϡʔ ग़యSVOUJNFSVOUJNFHP

Slide 38

Slide 38 text

Goランタイムの全体図(仮) 2. Goランタイムのコンポーネント (PϥϯλΠϜͷ෦඼ಉ࢜ͷؔ܎Λ·ͱΊΔͱɺҎԼͷਤͷΑ͏ʹදͤ·͢ɻ 1 . ( ( ( ৔߹ʹΑͬͯ͸ෳ਺ݸੜ੒͞ΕΔ

Slide 39

Slide 39 text

Goランタイムの全体図 2. Goランタイムのコンポーネント (PϥϯλΠϜͷ෦඼ಉ࢜ͷؔ܎Λ·ͱΊΔͱɺҎԼͷਤͷΑ͏ʹදͤ·͢ɻ 1 . (  ( ( ( . TZTNPO ( ৔߹ʹΑͬͯ͸ෳ਺ݸੜ੒͞ΕΔ ( ( (

Slide 40

Slide 40 text

アジェンダ  (PϥϯλΠϜͷίϯϙʔωϯτ ᶃ ( . 1ͱ͸ʁ ᶄ ௥Ճͷߏ੒ཁૉ  ϥϯλΠϜͱ͸  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸

Slide 41

Slide 41 text

Goランタイムの全体図(再掲) 2. Goランタイムのコンポーネント (PϥϯλΠϜͷ෦඼ಉ࢜ͷؔ܎Λ·ͱΊΔͱɺҎԼͷਤͷΑ͏ʹදͤ·͢ɻ . (  ( ( ( . TZTNPO ( TDIFE SVOR ( ( (

Slide 42

Slide 42 text

グローバル変数sched(1/2) 2. Goランタイムのコンポーネント TDIFE͸ɺ(PϥϯλΠϜશମͰ࢖͏஋ɾΦϒδΣΫτΛ֨ೲ͢ΔͨΊͷάϩʔ όϧม਺Ͱ͢ɻ TDIFE த਎͸TDIFEUܕΛݟΕ͹Θ͔Δ ग़యSVOUJNFSVOUJNFHP

Slide 43

Slide 43 text

グローバル変数sched(2/2) 2. Goランタイムのコンポーネント TDIFEͷதʹ͸ɺϥϯλΠϜશମͰڞ༗͢Δ(ΛͨΊ͓ͯ͘Ωϡʔ͕ଘࡏ͠ɺ1 ͷϩʔΧϧΩϡʔͱରൺͯ͠άϩʔόϧΩϡʔͱݺ͹Ε͍ͯ·͢ɻ TDIFE SVOR ( ( ( ಛఆͷ1ʹґଘ͠ͳ͍(ΛͨΊ͓ͯ͘ άϩʔόϧΩϡʔ ग़యSVOUJNFSVOUJNFHP

Slide 44

Slide 44 text

Goランタイムの全体図(再掲) 2. Goランタイムのコンポーネント (PϥϯλΠϜͷ෦඼ಉ࢜ͷؔ܎Λ·ͱΊΔͱɺҎԼͷਤͷΑ͏ʹදͤ·͢ɻ . (  ( ( ( ( ( ( . TZTNPO (

Slide 45

Slide 45 text

sysmon関数 〜システムモニタ〜 2. Goランタイムのコンポーネント TZTNPOؔ਺͸ɺSVOUJNFύοέʔδ಺ʹଘࡏ͢Δؔ਺Ͱ͢ɻ 1ͳ͠Ͱಈ࡞͠ɺγεςϜϞχλͱͯ͠ͷ໾ׂΛՌͨ͠·͢ɻ 1 . ( ( ( ( . ( TZTNPO͸௨ৗͷ1ͱ͸ಠཱͯ͠ಈ͘ ग़యSVOUJNFQSPDHP

Slide 46

Slide 46 text

Goランタイムの全体図(再掲) 2. Goランタイムのコンポーネント (PϥϯλΠϜͷ෦඼ಉ࢜ͷؔ܎Λ·ͱΊΔͱɺҎԼͷਤͷΑ͏ʹදͤ·͢ɻ . (  ( ( ( ( ( ( . TZTNPO (

Slide 47

Slide 47 text

G0 〜スケジューラ専用の特別なゴールーチンG〜 2. Goランタイムのコンポーネント Ϣʔβʔ͕ॻ͍ͨίʔυΛ֨ೲ͢Δ(ͱ͸ผʹɺεέδϡʔϥؔ਺Λಈ͔ͨ͢Ί ͷಛผͳΰʔϧʔνϯ͕ଘࡏ͓ͯ͠ΓɺͦΕ͸(ͱݺ͹Ε͍ͯ·͢ɻ . ( (  (ͷதͰ͸TDIFEVMFؔ਺͕ಈ࡞͢Δ ग़యSVOUJNFSVOUJNFHP

Slide 48

Slide 48 text

G,M,P以外の追加コンポーネント 2. Goランタイムのコンポーネント ͜ͷ5BMLͰ͸ɺ( . 1ʹՃ͑ͯҎԼͷͭ΋ʮεέδϡʔϥͷઆ໌ʹग़ͯ͘Δ ߏ੒ཁૉʯͱͯ͠औΓ্͍͛ͨͱࢥ͍·͢ɻ ໊শ runtime. sched TDIFE TZTNPO ( runtime. sysmon G0 (PϥϯλΠϜશମͷ؀ڥ৘ใΛอ͓࣋ͯͨ͘͠Ίͷάϩʔόϧม਺ɻ γεςϜϞχλɻ ϓϩάϥϜ࣮ߦ͕ԁ׈ʹߦΘΕ͍ͯΔ͔ɺϘτϧωοΫͱͳ͍ͬͯ Δΰʔϧʔνϯ͕ଘࡏ͍ͯ͠ͳ͍͔Λ؂ࢹ͢Δɻ (Pͷεέδϡʔϥͦͷ΋ͷΛಈ͔͢(ɻ ུশ ֓ཁ

Slide 49

Slide 49 text

アジェンダ  ϥϯλΠϜͱ͸  (PϥϯλΠϜͷίϯϙʔωϯτ  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸ ষ ষ 1 . ( 1 . (

Slide 50

Slide 50 text

スケジューリングとプリエンプション 3. スケジューリングとプリエンプション ͜ͷ5BMLͰ͸ʮεέδϡʔϦϯάʯͱʮϓϦΤϯϓγϣϯʯ͕ࣔ͢ൣғΛɺҎ ԼͷΑ͏ʹఆٛ͠·͢ɻ (Λ࣮ߦ͍ͯ͠ͳ͍.͕͋ͬͨ৔߹ɺ ͦ͜Ͱ୅ΘΓʹ࣮ߦ͢Δ(ΛબΜͰׂΓ౰ͯΔ εέδϡʔϦϯά Ұఆͷ৚݅Λຬͨͨ͠(Λ.͔Β੾Γ཭͠ɺ ϦιʔεΛ։์͢Δ ϓϦΤϯϓγϣϯ ( . . ( . ( ( .

Slide 51

Slide 51 text

説明を始める前に 3. スケジューリングとプリエンプション l ͔͜͜ΒͷεϥΠυͰ͸ɺҎԼͭΛݟͤͳ͕Βઆ໌Λ͍ͯ͠·͢ ○ SVOUJNFύοέʔδͷιʔείʔυ ○ Πϝʔδਤ l ʮ৘ใྔ͕ଟ͍͗ͯͬ͢ͺ͍͍ͬͺ͍ʂʯͱͳͬͨΒɺΠϝʔδਤ͚ͩݟͯ ฉ͘ɺͱ͍͏ͷͰ΋ߏ͍·ͤΜ ○ εϥΠυ಺ʹίʔυͷग़యΛ໌هͯ͋͠ΔͷͰɺޙ͔Βੋඇʮ͋ʔ͋ͷ ਤͷಈ͖Λ࣮૷͍ͯ͠Δͷ͸͔͜͜ʯͱ௥ͬͯ΋Β͑Δͱخ͍͠Ͱ͢

Slide 52

Slide 52 text

アジェンダ  ϥϯλΠϜͱ͸  (PϥϯλΠϜͷίϯϙʔωϯτ  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ ᶃ ϓϦΤϯϓγϣϯͷ࢓૊Έ ᶄ εέδϡʔϥͷ࣮૷  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸

Slide 53

Slide 53 text

プリエンプション対象の検出(1/3) 3. スケジューリングとプリエンプション 1 . (  ( ( ( . TZTNPO ( ؂ࢹ ৗ࣌Քಇ͍ͯ͠ΔTZTNPOͷதͰɺSFUBLFؔ਺͕ݺ͹Ε͍ͯ·͢ɻ ग़యSVOUJNFQSPDHP ௕͘ಉ͡΋ͷΛ࣮ߦதͩͬͨΓ γεςϜίʔϧʹೖ͍ͬͯΔ1͕͋Ε͹ ϓϦΤϯϓτ͍ͨ͠ͳʜ

Slide 54

Slide 54 text

プリエンプション対象の検出(2/3) 3. スケジューリングとプリエンプション 1 . (  ( ( ( . TZTNPO ( ؂ࢹ ͦͯͦ͠ͷSFUBLFؔ਺ͷதͰɺQSFFNQUPOFؔ਺͕௚Ͱݺ͹Ε͍ͯ·͢ɻ ௕͘ಉ͡΋ͷΛ࣮ߦதͩͬͨΓ γεςϜίʔϧʹೖ͍ͬͯΔ1͕͋Ε͹ ϓϦΤϯϓτ͍ͨ͠ͳʜ ग़యSVOUJNFQSPDHP

Slide 55

Slide 55 text

プリエンプション対象の検出(3/3) 3. スケジューリングとプリエンプション QSFFNQUPOFؔ਺ͷதͰ͸ʮ͜ͷ(Λ੾Γ཭͍ͯͩ͘͠͞Ͷʯͱ͍͏ϑϥάཱͯ Λ͍ͯ͠·͢ɻ࣮ࡍʹ(Λ੾Γ཭͢࡞ۀ͸ɺ·ͨผʹߦΘΕ·͢ɻ 1 . (  ( ( ( . TZTNPO ( ϑϥάཱͯ ʮϓϦΤϯϓτର৅ʹͳͬͨʯͱ͍͏ ϑϥάཱͯ ग़యSVOUJNFQSPDHP

Slide 56

Slide 56 text

GとMの切り離し作業(1/4) 3. スケジューリングとプリエンプション ྫ͑͹ελοΫ͕৽͘͠࡞ΒΕΔͱ͖ͳͲ͸ϓϦΤϯϓτ͕ߦΘΕɺ࠷ऴతʹ HPTDIFE*NQMؔ਺Ͱ੾Γ཭͠࡞ۀ͕ͳ͞Ε·͢ɻ ग़యSVOUJNFTUBDLHP ग़యSVOUJNFQSPDHP

Slide 57

Slide 57 text

GとMの切り離し作業(2/4) 3. スケジューリングとプリエンプション 1 . (  ( ( ( TDIFE SVOR ( ( ( (ͷεςʔλεΛมߋ (SVOOJOHˠ (SVOOBCMF . TZTNPO ( ग़యSVOUJNFQSPDHP

Slide 58

Slide 58 text

GとMの切り離し作業(3/4) 3. スケジューリングとプリエンプション 1 . (  ( ( ( (Λ.͔Β੾Γ཭͢ TDIFE SVOR ( ( ( . TZTNPO ( ग़యSVOUJNFQSPDHP

Slide 59

Slide 59 text

GとMの切り離し作業(4/4) 3. スケジューリングとプリエンプション 1 . (  ( ( ( . TZTNPO ( TDIFE SVOR ( ( ( ( .͔Β੾Γ཭ͨ͠(Λ (ͷάϩʔόϧΩϡʔʹೖΕΔ ग़యSVOUJNFQSPDHP

Slide 60

Slide 60 text

プリエンプションまとめ 3. スケジューリングとプリエンプション l ϓϦΤϯϓγϣϯʹ(ͱ.Λ੾Γ཭ͯ͠ϦιʔεΛղ์͢Δ l γεςϜϞχλ͕ϥϯλΠϜશମΛ؂ࢹͯ͠ɺର৅ͱͳΔ(Λݟ͚ͭͨΒ ʮ͜ͷ(ΛϓϦΤϯϓτ͍ͯͩ͘͠͞ʯͱ͍͏ϑϥάΛཱͯΔ l ϓϦΤϯϓτϑϥάཱ͕ͬͨ(Λ࣮ࡍʹ.͔Β੾Γ཭͢࡞ۀ͸γεςϜϞχ λͱ͸ผͷλΠϛϯά λΠϛϯά͸༷ʑ

Slide 61

Slide 61 text

アジェンダ  ϥϯλΠϜͱ͸  (PϥϯλΠϜͷίϯϙʔωϯτ  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ ᶃ ϓϦΤϯϓγϣϯͷ࢓૊Έ ᶄ εέδϡʔϥͷ࣮૷  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸

Slide 62

Slide 62 text

スケジューラの大枠 3. スケジューリングとプリエンプション (Pͷεέδϡʔϥ͕ߦͳ͍ͬͯΔ͜ͱ͸ɺʮ࣮ߦ͢Δ(ΛબఆʯˠʮׂΓ౰ ͯʯͰ͢ɻ // 実行するGを探して、gpに入れる ग़యSVOUJNFQSPDHP // 割り当て

Slide 63

Slide 63 text

実行可能なGを探索(1/9) 〜 グローバルキューの確認 3. スケジューリングとプリエンプション ग़యSVOUJNFQSPDHP 1 . (  ( ( TDIFE SVOR ( ( ( ͨ·ʹνΣοΫ ·ͣ͸ɺʮάϩʔόϧΩϡʔʹ࣮ߦՄೳͳ(͕͋Δ͔ʯΛ֬ೝ͠·͢ɻ

Slide 64

Slide 64 text

実行可能なGを探索(2/9) 〜 グローバルキューの確認 3. スケジューリングとプリエンプション ग़యSVOUJNFQSPDHP 1 . (  ( ( ·ͣ͸ɺʮάϩʔόϧΩϡʔʹ࣮ߦՄೳͳ(͕͋Δ͔ʯΛ֬ೝ͠·͢ɻ εέδϡʔϥ ࣍͸͜ΕΛ࣮ߦ͠Α͏ TDIFE SVOR ( ( (

Slide 65

Slide 65 text

実行可能なGを探索(3/9) 〜 ローカルキューの確認 3. スケジューリングとプリエンプション ࣍ʹɺʮεέδϡʔϥ͕ಈ͍͍ͯΔ1ͷϩʔΧϧΩϡʔʹ࣮ߦՄೳͳ(͕͋Δ ͔ʯΛ֬ೝ͠·͢ɻ 1 . (  ( ( νΣοΫ ग़యSVOUJNFQSPDHP

Slide 66

Slide 66 text

実行可能なGを探索(4/9) 〜 ローカルキューの確認 3. スケジューリングとプリエンプション ࣍ʹɺʮεέδϡʔϥ͕ಈ͍͍ͯΔ1ͷϩʔΧϧΩϡʔʹ࣮ߦՄೳͳ(͕͋Δ ͔ʯΛ֬ೝ͠·͢ɻ 1 . (  ( ( εέδϡʔϥ ࣍͸͜ΕΛ࣮ߦ͠Α͏ ग़యSVOUJNFQSPDHP

Slide 67

Slide 67 text

実行可能なGを探索(5/9) 〜 キューになかった場合 3. スケジューリングとプリエンプション Ωϡʔதʹ࣮ߦՄೳͳ(͕ͳ͔ͬͨ৔߹͸ɺGJOESVOBCMFؔ਺Λ࣮ߦͯ͠ଞͰݟ ͚ͭʹ͍͘͜ͱʹͳΓ·͢ɻ 1 . (  ۭ ۭ PSະνΣοΫ TDIFE SVOR ग़యSVOUJNFQSPDHP

Slide 68

Slide 68 text

実行可能なGを探索(6/9) 〜 キューを再確認 3. スケジューリングとプリエンプション GJOESVOBCMFؔ਺ͷதͰ͸ɺ·ͣ͸άϩʔόϧΩϡʔͱϩʔΧϧΩϡʔͷνΣο Ϋ΋ߦ͍·͢ɻ ग़యSVOUJNFQSPDHP

Slide 69

Slide 69 text

実行可能なGを探索(7/9) 〜 ネットワークI/O待ちの確認 3. スケジューリングとプリエンプション ͦͷ࣍ʹɺOFUQPMMʹͯʮ*0଴͕ͪऴΘ࣮ͬͯߦՄೳʹͳͬͨ(ʯ͕ͳ͍͔Ͳ͏ ͔ΛνΣοΫ͠·͢ɻ 1 . (  ۭ FQPMM Πϯ ελ ϯε *0ऴΘͬͨ(͕ͳ͍͔ ໰͍߹Θͤ ग़యSVOUJNFQSPDHP

Slide 70

Slide 70 text

実行可能なGを探索(8/9) 〜 work-steal 3. スケジューリングとプリエンプション ͦΕͰ΋ͳ͚Ε͹XPSLTUFBMͱݺ͹ΕΔڍಈΛ࣮ߦ͠·͢ɻ 1 . (  ۭ 1 . (  ( ( ( ( ( ग़యSVOUJNFQSPDHP

Slide 71

Slide 71 text

実行可能なGを探索(9/9) 〜 work-steal 3. スケジューリングとプリエンプション ͦΕͰ΋ͳ͚Ε͹XPSLTUFBMͱݺ͹ΕΔڍಈΛ࣮ߦ͠·͢ɻ 1 . (  ( ( ( 1 . (  ( ( εέδϡʔϥ ๩͍͠1͔Β(ΛԣऔΓ͢Δ ग़యSVOUJNFQSPDHP

Slide 72

Slide 72 text

スケジューラの大枠(再掲) 3. スケジューリングとプリエンプション ࣮ߦ͢Δ(ΛܾΊͨͱ͜ΖͰɺࠓ౓͸ͦΕΛ࣮ࡍʹFYFDVUF͢Δͱ͜ΖΛ֬ೝ͠ ͯΈ·͢ɻ // 実行するGを探して、gpに入れる ग़యSVOUJNFQSPDHP

Slide 73

Slide 73 text

選んだGを実行させる(1/2) 3. スケジューリングとプリエンプション 1 . (  ( ( ( ( (ͱ.Λ݁߹ ग़యSVOUJNFQSPDHP

Slide 74

Slide 74 text

選んだGを実行させる(2/2) 3. スケジューリングとプリエンプション 1 . (  ( ( ( (ͷεςʔλεΛ (SVOOBCMF͔Β(SVOOJOH΁ ग़యSVOUJNFQSPDHP

Slide 75

Slide 75 text

スケジューリングまとめ 3. スケジューリングとプリエンプション l εέδϡʔϦϯάʹख͖͢ͷ.ʹ৽ͨͳ(Λ͕͋ͯ͏ l TDIFEVMFؔ਺ʹΑΔ৽͍͠(ͷ୳͠ํ͸ҎԼ ○ άϩʔόϧΩϡʔ ˠ ϩʔΧϧΩϡʔ ˠ ωοτϫʔΫ*0଴ͪ ˠ XPSLTUFBM l (Λ୳͖ͯͨ͠ޙʹɺFYFDVUFؔ਺ʹ࣮ͯࡍʹ(.Λ݁߹ͤ͞Δ࡞ۀΛߦ͏

Slide 76

Slide 76 text

アジェンダ  ϥϯλΠϜͱ͸  (PϥϯλΠϜͷίϯϙʔωϯτ  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸ ষ ষ 1 . ( SVOUJNFύοέʔδ 1 . ( SVOUJNFύοέʔδ ར༻

Slide 77

Slide 77 text

G,M,Pが絡む処理 4. ランタイムが絡む処理 ࣮ߦޮ཰Λ্͛ΔͨΊʹɺҎԼͷॲཧ͸( . 1͕བྷΉ͜ͱ͕ଟ͍ɻ SVOUJNFʹΑΔ( . 1ૢ࡞͕ൃੜ͢Δॲཧ γεςϜίʔϧͷݺͼग़͠ ωοτϫʔΫ*0 PT0QFOؔ਺ʹΑͬͯ γεςϜίʔϧPQFO͕ ཪͰݺ͹ΕΔ DPOO3FBEϝιουͷ࣮ߦͰ ड৴଴ػঢ়ଶʹͳΔ

Slide 78

Slide 78 text

G,M,Pが絡む処理 4. ランタイムが絡む処理 ࣮ߦޮ཰Λ্͛ΔͨΊʹɺҎԼͷॲཧ͸( . 1͕བྷΉ͜ͱ͕ଟ͍ɻ SVOUJNFʹΑΔ( . 1ૢ࡞͕ൃੜ͢Δॲཧ γεςϜίʔϧͷݺͼग़͠ ωοτϫʔΫ*0 PT0QFOؔ਺ʹΑͬͯ γεςϜίʔϧPQFO͕ ཪͰݺ͹ΕΔ DPOO3FBEϝιουͷ࣮ߦͰ ड৴଴ػঢ়ଶʹͳΔ

Slide 79

Slide 79 text

G,M,Pの付け替えイメージ(1/2) 4. ランタイムが絡む処理 γεςϜίʔϧݺͼग़͠ʹ͸͕͔͔࣌ؒΔͨΊɺݺͼग़͠தʹผͷ࣮ߦՄೳͷ( Λಈ͔ͨ͠ํ͕ޮ཰͕͍͍ͷͰ͢ɻ 1 . (  ( ( ( γεςϜίʔϧͷݺͼग़͠

Slide 80

Slide 80 text

G,M,Pの付け替えイメージ(2/2) 4. ランタイムが絡む処理 γεςϜίʔϧݺͼग़͠ʹ͸͕͔͔࣌ؒΔͨΊɺݺͼग़͠தʹผͷ࣮ߦՄೳͷ( Λಈ͔ͨ͠ํ͕ޮ཰͕͍͍ͷͰ͢ɻ 1 . (  ( ( ( ݺͼग़͠தͷ( .Λ ੾Γ཭͠ . ผͷ.Λ͚ͭΔ

Slide 81

Slide 81 text

システムコールの呼び出し 〜 Mの切り離し(1/6) 4. ランタイムが絡む処理 γεςϜίʔϧݺͼग़࣌͠ʹݺ͹ΕΔTZTDBMM4ZTDBMMͷ࣮ଶ͸ɺSVOUJNFύοέ ʔδ಺ʹ͋Γ·͢ɻ ग़యSVOUJNFTZT@EBSXJOHP

Slide 82

Slide 82 text

システムコールの呼び出し〜 Mの切り離し(2/6) 4. ランタイムが絡む処理 TZTDBMM@TZTDBMMͷޙ͸ɺFOUFSTZTDBMMˠSFFOUFSTZTDBMMͷॱʹؔ਺͕ݺͼग़͞Ε ·͢ɻ ग़యSVOUJNFQSPDHP

Slide 83

Slide 83 text

システムコールの呼び出し〜 Mの切り離し(3/6) 4. ランタイムが絡む処理 1 . (  ( ( ( SFFOUFSTZTDBMMؔ਺தͰɺ( .ͷ੾Γ཭͕͠ߦΘΕ·͢ɻ .ͱ1Λ੾Γ཭͢ γεςϜίʔϧͷݺͼग़͠ ग़యSVOUJNFQSPDHP

Slide 84

Slide 84 text

システムコールの呼び出し 〜 新規Mの割り当て(4/6) 4. ランタイムが絡む処理 ৗ࣌Քಇ͍ͯ͠ΔTZTNPOͷதͰɺSFUBLFؔ਺͕ݺ͹Ε͍ͯ·͢ɻ ࠶ܝ . TZTNPO ( 1 . (  ( ( ( ग़యSVOUJNFQSPDHP

Slide 85

Slide 85 text

システムコールの呼び出し 〜 新規Mの割り当て(5/6) 4. ランタイムが絡む処理 SFUBLFؔ਺ͷதͰ͸ɺϓϦΤϯϓτؔ਺ͷଞʹ΋IBOEPGGQؔ਺ͱ͍͏΋ͷ͕ݺ ͹Ε͍ͯͯɺ͔ͦ͜Β࠷ऴతʹTUBSUN͕ݺ͹Ε͍ͯ·͢ɻ ग़యSVOUJNFQSPDHP

Slide 86

Slide 86 text

システムコールの呼び出し 〜 新規Mの割り当て(6/6) 4. ランタイムが絡む処理 ͦͷTUBSUNؔ਺ͷதͰɺ1ʹ৽͍͠.Λ͕͍͋ͯͬͯ·͢ɻ 1 . (  ( ( ( . ֎͞Εͨ.ͷ୅ΘΓʹ ৽͍͠.͕͕͋ͯ͏ . TZTNPO ( ग़యSVOUJNFQSPDHP

Slide 87

Slide 87 text

アジェンダ  ϥϯλΠϜͱ͸  (PϥϯλΠϜͷίϯϙʔωϯτ  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸

Slide 88

Slide 88 text

Goランタイムの要素はGとMとP – by 公式Doc 5. ランタイムを学ぶには SVOUJNFύοέʔδ಺ʹ)"$,*/(NEʹ͸ɺ͔֬ʹʮ( . 1Λίϯτϩʔϧ͢ Δͷ͕(PϥϯλΠϜͷ࢓ࣄͩʯͱॻ͔Ε͍ͯ·͢ɻ 5IFTDIFEVMFSNBOBHFTUISFFUZQFTPGSFTPVSDFTUIBUQFSWBEFUIFSVOUJNF (T .T BOE1T ༁ εέδϡʔϥͷ໾ׂ͸(PϥϯλΠϜΛࢧ͑ΔҎԼͭͷϦιʔεΛ؅ཧ͢Δ͜ͱͰ͋Δɻ Ұͭ͸( ΋͏Ұͭ͸. ͦͯ͠࠷ޙʹ1Ͱ͋Δɻ  SVOUJNF)"$,*/(NE ϥϯλΠϜΛཧղ͢Δʹ͸ɺ( . 1ͭΛཧղ͍ͯ͠Ε͹े෼ʁ

Slide 89

Slide 89 text

G,M,Pで行う動きはたくさんある 5. ランタイムを学ぶには ͔֬ʹɺ(PϥϯλΠϜͷதͰߦΘΕΔॲཧ͸ɺ΄ͱΜͲ( . 1͕བྷΉ΋ͷ͹͔ ΓͰ͢ɻ γεςϜίʔϧͷݺͼग़͠ ( . 1ૢ࡞ͷ۩ମྫ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά 1 . ( ( ( . 1 . ( ( ( 1 . ( ( (

Slide 90

Slide 90 text

つまずきポイント1: だけどそのG,M,Pを動かしているのは誰 5. ランタイムを学ぶには ͕ͨΑ͘Α͘ߟ͑ͯΈΔͱɺ͜ΕΒͭͷಈ͖Λ( . 1͚ͩͰ੾ΓऔͬͯΈͯΈ Δͱɺ৭ʑͱٙ໰఺͕ଟ͔ͬͨͷͰ͢ɻ γεςϜίʔϧͷݺͼग़͠ ( . 1ૢ࡞ͷ۩ମྫ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά 1 . ( ( ( . 1 . ( ( ( 1 . ( ( ( (ͷ੾Γ཭͠͸୭͕΍Δͷʁ ͜ͷ(.ඥ෇͚Λ΍͍ͬͯ ͏ͷ͸Ͳ͜ͷ୭ʁ ( . 1Λಈ͔͢ओମ͕Կͳͷ͔ʹ͍ͭͯԿ΋આ໌͕ͳ͍ʂ

Slide 91

Slide 91 text

Goランタイム勉強して散々苦しんだ人の心の叫び 5. ランタイムを学ぶには ( . 1ͷཁૉ͚ͩͰ આ໌Λࡁ·ͤΑ͏ͱ͢Δͷ͸΍Ίͯ͘Εʂʂ

Slide 92

Slide 92 text

苦労した上で得た感想 5. ランタイムを学ぶには ( . 1ΛͲ͔͜Βௐୡ͖ͯͯ͠Ͳ͜ʹ֨ೲ͢Δͷ͔ɺͦΕΛ΍Δͷ͸୭ͳͷ͔ɺ ͱ͍͏࿩͸͜ͷཁૉ͚ͩͰ͸ऩ·Βͳ͍ͷͰ͸ʁͱ͍͏ײ૝Λ๊͖·ͨ͠ɻ γεςϜίʔϧͷݺͼग़͠ ( . 1ૢ࡞ͷ۩ମྫ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά 1 . ( ( ( . 1 . ( ( ( 1 . ( ( ( (ͷ੾Γ཭͠͸୭͕΍Δͷʁ ͜ͷ(.ඥ෇͚Λ΍͍ͬͯ ͏ͷ͸Ͳ͜ͷ୭ʁ TZTNPO͕΍Δ ˠ͜ͷޙ άϩʔόϧΩϡʔʹೖΔ (͕΍Δ άϩʔόϧΩϡʔ౳͔Β ୳ͯ͘͠Δ

Slide 93

Slide 93 text

提言1: Goランタイムの部品は6つ 5. ランタイムを学ぶには ϥϯλΠϜͷڍಈΛޠΔ্Ͱ܁Γฦ͠ొ৔͢Δ֓೦͸ɺ( . 1͚ͩʹݶΒͳ͍ɻ ໾ׂ ΰʔϧʔνϯ ( . 1 04εϨου ࣮ߦϦιʔεɺԾ૝$16 ུশ ໾ׂ ϥϯλΠϜશମͷঢ়ଶ؅ཧ TDIFE TZTNPO ( γεςϜϞχλ εέδϡʔϥͷ࣮ଶ ུশ ( . 1 ( ( ( . TZTNPO ( ( 

Slide 94

Slide 94 text

つまずきポイント2: 似たような動きがいっぱい出てくる 5. ランタイムを学ぶには ( . 1Λ෇͚ͨΓ֎ͨ͠Γ͢Δಈ͖͕ࢁͷΑ͏ʹग़͖ͯͯɺͻͨ͢Βࠞཚ͠·͠ ͨɻ γεςϜίʔϧͷݺͼग़͠ ( . 1ૢ࡞ͷ۩ମྫ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά 1 . ( ( ( . 1 . ( ( ( 1 . ( ( ( ͔͠΋͜Ε͸(ͷબͼํ·Ͱ ߟ͑ͳ͖Ό͍͚ͳ͍

Slide 95

Slide 95 text

何でこんなことになってるのか 5. ランタイムを学ぶには (P౰࣌ͷεέδϡʔϥEFTJHO%PDͷఏҊ͕ʮ1Λಋೖˠͦ͏͢Δͱγες Ϝίʔϧݺͼग़͠͸͜͏ͳΔʯͱ͍͏࿦ௐͩͬͨͩͬͨͷͰɺͦΕ͕࢒͍ͬͯΔɻ l (P4DBMBCMF(P4DIFEVMFS%FTJHO%PD ○ ҙ༁ͦͷ ϥϯλΠϜʹ1Λ৽͘͠࡞Ζ͏ͥ ○ ҙ༁ͦͷ 1ಋೖͨ͠Βɺྫ͑͹γεςϜίʔϧݺͼग़͠͸͜͏࣮૷͞ΕΔΑ l .PSTJOHbT#MPHd5IF(PTDIFEVMFS ༗໊ͳ(.1ਤΛࡌͤͨϒϩά ○ γεςϜίʔϧ࣌ͷਤΛࡌͤΔ ○ TUFBMXPSL࣌ͷਤΛࡌͤΔ

Slide 96

Slide 96 text

提言2: ランタイムの機能と挙動は分けて考えませんか 5. ランタイムを学ぶには ʮ෦඼ͦͷ΋ͷͷಈ͖ʯͳͷ͔ʮ෦඼Λ࢖ͬͨಈ͖ʯͳͷ͔ͱ͍͏໨ઢͰΈΔͱɺ ࣅͨ֓೦͕੔ཧ͞Ε͍͍ͯΜ͡Όͳ͍Ͱ͠ΐ͏͔ɻ γεςϜίʔϧͷݺͼग़͠ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά (Λ࣮ߦ͍ͯ͠ͳ͍.ʹ ৽͍͠(ׂ͕Γ౰ͯΒΕΔ γεςϜίʔϧʹ൐͍ .ͷ෇͚ସ͕͑ߦΘΕΔ TZTNPOͰϑϥάΛ͚ͭͯ ͋ΔλΠϛϯάͰ .͔Βͷ੾Γ཭͕͠ߦΘΕΔ 1 . ( ( ( ( . 1 . ( ( ( ( 1 . ( ( ( ( ϥϯλΠϜͷػೳ ϥϯλΠϜͷڍಈ

Slide 97

Slide 97 text

ຊηογϣϯͷ·ͱΊ

Slide 98

Slide 98 text

1章 ランタイムとは l (PϥϯλΠϜϓϩάϥϜΛಈ͔͢ͷʹඞཁͳࡉʑͱͨ͠ॲཧΛɺਓͷ୅Θ ΓʹҾ͖ड͚ͯ͘ΕΔՕॴ ϝϞϦͷׂΓ౰ͯ intܕͭΛ֨ೲ͢ΔϝϞϦ͸ ࣗಈͰ֬อ͞ΕΔ ஫$ݴޠͩͱmallocͳͲͰ ໌ࣔతʹ֬อ͢Δඞཁ͋Γ (PϥϯλΠϜͷ໾ׂ ΨϕʔδίϨΫτ εέδϡʔϦϯά ࢖͍ऴΘͬͨม਺arrayͷ ϝϞϦղ์͸ࣗಈͰߦΘΕΔ ஫$ݴޠͩͱfreeͰ ໌ࣔతʹղ์͢Δඞཁ͋Γ ฒߦͳؔ਺Λ࣮ࡍʹͲͷλΠ ϛϯάͰಈ͔͢ͷ͔͸ࣗಈͰ ௐ੔͞ΕΔ

Slide 99

Slide 99 text

2章 Goランタイムのコンポーネント l (PϥϯλΠϜʹ͸ͭͷίϯϙʔωϯτ͕͋Γ·͢ɻ ໾ׂ ΰʔϧʔνϯ ( . 1 04εϨου ࣮ߦϦιʔεɺԾ૝$16 ུশ ໾ׂ ϥϯλΠϜશମͷঢ়ଶ؅ཧ TDIFE TZTNPO ( γεςϜϞχλ εέδϡʔϥͷ࣮ଶ ུশ ( . 1 ( ( ( . TZTNPO ( ( 

Slide 100

Slide 100 text

3章 スケジューリングとプリエンプション l εέδϡʔϦϯά(ͱ.Λͭͳ͛Δ l ϓϦΤϯϓγϣϯ(ͱ.Λ੾Γ཭͢ l ͲͪΒ΋(PϥϯλΠϜ͕ߦ͏ػೳͰ͢ γεςϜίʔϧͷݺͼग़͠ ( . 1ૢ࡞ͷ۩ମྫ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά 1 . ( ( ( . 1 . ( ( ( 1 . ( ( (

Slide 101

Slide 101 text

4章 ランタイムが絡む処理 l ( . 1ͷ੾Γ཭͢ɾͭͳ͛Δ࡞ۀ͸ɺϓϩάϥϜ࣮ߦޮ཰Λ্͛ΔͨΊʹߦ ΘΕΔ͜ͱ͕͋Δ l ͜ͷૢ࡞ʹ͸(PϥϯλΠϜ͕ີ઀ʹབྷΜͰ͍Δ γεςϜίʔϧͷݺͼग़͠ ( . 1ૢ࡞ͷ۩ମྫ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά 1 . ( ( ( . 1 . ( ( ( 1 . ( ( (

Slide 102

Slide 102 text

ΈΜͳSVOUJNFύοέʔδΛಡ΋͏ ɾТɾ ϊγ ࢲͷ͜ͱ͸ݏ͍Ͱ΋(PϥϯλΠϜ͚ͩ͸ݏ͍ʹͳΒͳ͍Ͱ͍ͩ͘͞ খ੠

Slide 103

Slide 103 text

5IBOLZPVGPSMJTUFOJOH