Save 37% off PRO during our Black Friday Sale! »

スケジューラから学ぶGoランタイム 〜code reading of runtime pkg〜

3933b943fb70400bbc26f3cb78d8204c?s=47 H.Saki
November 13, 2021

スケジューラから学ぶGoランタイム 〜code reading of runtime pkg〜

21/11/13 Go Conference 2021 Autumnにて発表

https://gocon.jp/2021autumn/
https://gocon.connpass.com/event/213865/

3933b943fb70400bbc26f3cb78d8204c?s=128

H.Saki

November 13, 2021
Tweet

Transcript

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

    Conference 2021 Autumn, NOV 13 2021
  2. 自己紹介 About Me l ͖͞ )4BLJ ◦ ౦େ޻ֶ෦ ˠ ࠓ೥͔Β৽ࣾձਓ

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

    ◦ 5XJUUFS!TBLJFOHJOFFS l աڈͷ੒Ռ෺ FUDʜ ͜ΕΛॻ͘ͷʹΊͬͪΌۤ࿑ͨ͠ ಛʹ৘ใιʔεΛ͋ͨΔͨΊʹ SVOUJNFύοέʔδΛίʔυϦʔςΟϯά͢Δͱ͜Ζ ࣥචʹ͔͔ͬͨ࣌ؒϲ݄
  4. アジェンダ  ϥϯλΠϜͱ͸ ʜʜϥϯλΠϜͬͯԿʁ  (PϥϯλΠϜͷίϯϙʔωϯτ ʜʜϥϯλΠϜͬͯͲΜͳ෦඼Ͱग़དྷ͍ͯΔͷʁ  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ ʜʜϥϯλΠϜʹ͸͜ͷΑ͏ͳػೳ͕͋Γ·͢

     ϥϯλΠϜ͕བྷΉॲཧ ʜʜϥϯλΠϜͷػೳ͸͜ͷΑ͏ͳ৔ॴ Ϣʔεέʔε Ͱ࢖ΘΕ·͢  ϥϯλΠϜΛֶͿʹ͸
  5. おことわり ͜ͷηογϣϯͰ͸ɺҎԼͷ͜ͱ͸ط஌ͱͯ͠ѻΘ͍͖ͤͯͨͩ·͢ɻ l ΰʔϧʔνϯͱ͸Կ͔ l ฒߦॲཧͱ͸Կ͔ l ॳาతͳίϯϐϡʔλʔαΠΤϯε ◦ $16

    ϓϩηε εϨου ʜͳͲͦͷลͷ୯ޠ͕෼͔Ε͹0,
  6. アジェンダ  ϥϯλΠϜͱ͸ ᶃ ϥϯλΠϜͱ͸Կ͔ʁ ᶄ (Pͷεέδϡʔϥʔͷ໾ׂ  (PϥϯλΠϜͷίϯϙʔωϯτ 

    εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸
  7. 「ランタイム」とは何か? from Wikipedia 1. ランタイムとは ϥϯλΠϜγεςϜ ӳޠSVOUJNFTZTUFN·ͨ͸SVOUJNFTZTUFN ͱ͸ɺ ओʹ࣮ߦϞσϧͷҰ෦Λ࣮૷͢Δ΋ͷͰ͋Δɻ ϓϩάϥϜͷ௚઀ͷ࡞༻Ͱͳ͍ৼΔ෣͍͸͢΂ͯϥϯλΠϜγεςϜͷৼΔ෣͍Ͱ͋Δɺͱ

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

    ͍͏෩ʹϥϯλΠϜγεςϜΛఆٛ͢Δํ๏΋͋Δɻ  8JLJQFEJBΑΓ ͳΔ΄ͲΘ͔ΒΜ
  9. 「ランタイム」の具体例 1. ランタイムとは (PͰ͸։ൃऀ͕ϏδωεϩδοΫͷهड़ʹ஫ྗͰ͖ΔΑ͏ʹɺ͋Δఔ౓ͷ͜ͱ ͸ʮϥϯλΠϜʯଆͰ࣮ߦͯ͘͠Ε·͢ɻ ϝϞϦͷׂΓ౰ͯ intܕͭΛ֨ೲ͢ΔϝϞϦ͸ ࣗಈͰ֬อ͞ΕΔ ஫$ݴޠͩͱmallocͳͲͰ ໌ࣔతʹ֬อ͢Δඞཁ͋Γ

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

    (PϥϯλΠϜͷ໾ׂ ΨϕʔδίϨΫτ εέδϡʔϦϯά ࢖͍ऴΘͬͨม਺arrayͷ ϝϞϦղ์͸ࣗಈͰߦΘΕΔ ஫$ݴޠͩͱfreeͰ ໌ࣔతʹղ์͢Δඞཁ͋Γ ฒߦͳؔ਺Λ࣮ࡍʹͲͷλΠ ϛϯάͰಈ͔͢ͷ͔͸ࣗಈͰ ௐ੔͞ΕΔ
  11. アジェンダ  ϥϯλΠϜͱ͸ ᶃ ϥϯλΠϜͱ͸Կ͔ʁ ᶄ (Pͷεέδϡʔϥʔͷ໾ׂ  (Pεέδϡʔϥͷߏ੒ཁૉ 

    εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸
  12. Goのスケジューラーの役割(1/5) 1. ランタイムとは ฒߦʹ࣮ߦ͢Δΰʔϧʔνϯͷ਺͕ɺϓϩάϥϜͰ࢖༻Ͱ͖Δ04εϨου਺Α Γ΋গͳ͔ͬͨ৔߹͸࿩͕؆୯ɻ୯७ʹରԠͤ͞Δ͜ͱ͕Ͱ͖·͢ɻ idle ฒྻʹ࣮ߦ͢Δΰʔϧʔνϯ਺ 04εϨου ͷ৔߹ go

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

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

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

    go MyFunc2() ϓϩάϥϜத 04εϨου UJNF idle myFunc2 go MyFunc3() idle myFunc3 go MyFunc4() ΨϕʔδίϨΫτΛ (PͷλΠϛϯάͰೖΕΔ͜ͱ͕Ͱ͖Δ myFunc1 GC myFunc1
  17. ここまでのまとめ l ϥϯλΠϜ͸ɺϓϩάϥϚ͕ϏδωεϩδοΫ෦෼ͷ։ൃʹ஫ྗͰ͖ΔΑ͏ ʹɺϓϩάϥϜΛಈ͔ͨ͢ΊʹඞཁͳॾػೳΛҾ͖ड͚ͯ͘Ε͍ͯΔ l ϥϯλΠϜ͕࣋ͭͭͷػೳ͕εέδϡʔϦϯά l ಠࣗʹεέδϡʔϥʔΛ࣋ͭ͜ͱͰɺʮ͍ͭͲΜͳΰʔϧʔνϯ͕࣮ߦ͞Ε Δͷ͔ʯΛ(PMJLFʹܾΊΔ͜ͱ͕Ͱ͖͍ͯΔ

  18. アジェンダ  (PϥϯλΠϜͷίϯϙʔωϯτ ᶃ ( . 1ͱ͸ʁ ᶄ ௥Ճͷߏ੒ཁૉ 

    ϥϯλΠϜͱ͸  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸
  19. コンポーネントって一体どういうこと 2. Goランタイムのコンポーネント ཁ͢ΔʹɺʮSVOUJNFύοέʔδͰΑ͘ग़ͯ͘Δߏ଄ମɾม਺ɾؔ਺ʯͷ࿩Λ͜ Ε͔Β͠·͢ɻ PTύοέʔδͷ৔߹ TRMύοέʔδͷ৔߹ SVOUJNFύοέʔδͷ৔߹ PT'JMFܕͷಋೖ TRM%#ܕͷಋೖ

    5PCFDPOUJOVFEʜ ϑΝΠϧૢ࡞͍ͨ͠Ͱ͢ %#઀ଓ͍ͨ͠Ͱ͢ εέδϡʔϦϯά͍ͨ͠Ͱ͢
  20. Goランタイムのコンポーネント 2. Goランタイムのコンポーネント SVOUJNFύοέʔδ಺ʹ)"$,*/(NEͱ͍͏ϑΝΠϧ͕͋Γɺͦ͜ʹ͸ҎԼͷ Α͏ʹهड़͞Ε͍ͯ·͢ɻ 5IFTDIFEVMFSNBOBHFTUISFFUZQFTPGSFTPVSDFTUIBUQFSWBEFUIFSVOUJNF (T .T BOE1T ༁

    εέδϡʔϥͷ໾ׂ͸(PϥϯλΠϜΛࢧ͑ΔҎԼͭͷϦιʔεΛ؅ཧ͢Δ͜ͱͰ͋Δɻ Ұͭ͸( ΋͏Ұͭ͸. ͦͯ͠࠷ޙʹ1Ͱ͋Δɻ  SVOUJNF)"$,*/(NE ϥϯλΠϜΛࢧ͑Δʮ( . 1ʯͱ͸Կ͔ʁ
  21. Goランタイムのコンポーネント 2. Goランタイムのコンポーネント (PεέδϡʔϥͰ͸ɺҎԼͷ( . 1Λ͏·͘૊Έ߹ΘͤΔ͜ͱͰ࢓ࣄΛߦͳͬ ͍ͯ·͢ɻ ໊শ (PSPVUJOF (

    . 1 .BDIJOF 1SPDFTTPS ΰʔϧʔνϯͦͷ΋ͷɻ goจʹΑͬͯىಈ͞Εɺؔ਺ͷ࣮ߦ͕ऴΘͬͨΒऴྃ͞ΕΔɻ 04εϨουɻ (Pͷίʔυ΍ϥϯλΠϜίʔυΛ࣮ߦͨ͠ΓɺγεςϜίʔϧΛݺ ΜͩΓΞΠυϧʹͳͬͨΓ͢Δɻ ΰʔϧʔνϯΛ࣮ߦ͢Δͷʹඞཁͳ1$Ϧιʔεɻ 04εέδϡʔϥʹͱͬͯͷ$16ͷΑ͏ͳ΋ͷɻ ུশ ֓ཁ
  22. コードを実行するために必要なもの 2. Goランタイムのコンポーネント ϓϩάϥϜͷίʔυͱ͍͏όΠτྻ͚ͩͰ͸ɺͦΕΛಈ͔͢͜ͱ͸Ͱ͖ͳ͍ɻಈ ͔͢ʹ͸04εϨουͱ$16ίΞ͕ඞཁͰ͋Δɻ ϓϩάϥϜίʔυͷΈ ϓϩάϥϜίʔυͱ ͦΕ͕ͷͬͨϝϞϦۭ͚ؒͩ ˣ ࣮ߦ͢Δ͜ͱ͕Ͱ͖ͳ͍

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

    ϓϩάϥϜίʔυͱ ͦΕ͕ͷͬͨϝϞϦۭ͚ؒͩ ˣ ࣮ߦ͢Δ͜ͱ͕Ͱ͖ͳ͍ Πϝʔδ (ͱ.ͷΈ (ͱ.ͱ1 ϓϩάϥϜϝϞϦͱ 04εϨου͚ͩ ˣ ࣮ߦ͢Δ͜ͱ͕Ͱ͖ͳ͍ ϓϩάϥϜϝϞϦͱ 04εϨουͱ Ծ૝ $16 ˣ ࣮ߦͰ͖Δ ( γʔϯʜ . ( γʔϯʜ ϝϞϦ ϝϞϦ εϨου 1 . ( ϝϞϦ εϨου $16 ΢Οʔϯʂ
  24. Goランタイムのコンポーネント(再掲) 2. Goランタイムのコンポーネント (PεέδϡʔϥͰ͸ɺҎԼͷ( . 1Λ͏·͘૊Έ߹ΘͤΔ͜ͱͰ࢓ࣄΛߦͳͬ ͍ͯ·͢ɻ ໊শ (PSPVUJOF (

    . 1 .BDIJOF 1SPDFTTPS ΰʔϧʔνϯͦͷ΋ͷɻ goจʹΑͬͯىಈ͞Εɺؔ਺ͷ࣮ߦ͕ऴΘͬͨΒऴྃ͞ΕΔɻ 04εϨουɻ (Pͷίʔυ΍ϥϯλΠϜίʔυΛ࣮ߦͨ͠ΓɺγεςϜίʔϧΛݺ ΜͩΓΞΠυϧʹͳͬͨΓ͢Δɻ ΰʔϧʔνϯΛ࣮ߦ͢Δͷʹඞཁͳ1$Ϧιʔεɻ 04εέδϡʔϥʹͱͬͯͷ$16ͷΑ͏ͳ΋ͷɻ ུশ ֓ཁ
  25. G構造体 〜ゴールーチン〜(1/4) 2. Goランタイムのコンポーネント (͸ɺΰʔϧʔνϯͦͷ΋ͷΛࢦ͢SVOUJNFύοέʔδ಺ͷߏ଄ମͰ͢ɻ ग़యSVOUJNFSVOUJNFHP (

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

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

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

  29. Goランタイムのコンポーネント(再掲) 2. Goランタイムのコンポーネント (PεέδϡʔϥͰ͸ɺҎԼͷ( . 1Λ͏·͘૊Έ߹ΘͤΔ͜ͱͰ࢓ࣄΛߦͳͬ ͍ͯ·͢ɻ ໊শ (PSPVUJOF (

    . 1 .BDIJOF 1SPDFTTPS ΰʔϧʔνϯͦͷ΋ͷɻ goจʹΑͬͯىಈ͞Εɺؔ਺ͷ࣮ߦ͕ऴΘͬͨΒऴྃ͞ΕΔɻ 04εϨουɻ (Pͷίʔυ΍ϥϯλΠϜίʔυΛ࣮ߦͨ͠ΓɺγεςϜίʔϧΛݺ ΜͩΓΞΠυϧʹͳͬͨΓ͢Δɻ ΰʔϧʔνϯΛ࣮ߦ͢Δͷʹඞཁͳ1$Ϧιʔεɻ 04εέδϡʔϥʹͱͬͯͷ$16ͷΑ͏ͳ΋ͷɻ ུশ ֓ཁ
  30. M構造体 〜OSスレッド〜(1/4) 2. Goランタイムのコンポーネント .͸ɺ(Λ࣮ߦ͢ΔͨΊͷ04εϨουΛදݱͨ͠ߏ଄ମͰ͢ɻ . ग़యSVOUJNFSVOUJNFHP

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

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

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

    ग़యSVOUJNFSVOUJNFHP
  34. Goランタイムのコンポーネント(再掲) 2. Goランタイムのコンポーネント (PεέδϡʔϥͰ͸ɺҎԼͷ( . 1Λ͏·͘૊Έ߹ΘͤΔ͜ͱͰ࢓ࣄΛߦͳͬ ͍ͯ·͢ɻ ໊শ (PSPVUJOF (

    . 1 .BDIJOF 1SPDFTTPS ΰʔϧʔνϯͦͷ΋ͷɻ goจʹΑͬͯىಈ͞Εɺؔ਺ͷ࣮ߦ͕ऴΘͬͨΒऴྃ͞ΕΔɻ 04εϨουɻ (Pͷίʔυ΍ϥϯλΠϜίʔυΛ࣮ߦͨ͠ΓɺγεςϜίʔϧΛݺ ΜͩΓΞΠυϧʹͳͬͨΓ͢Δɻ ΰʔϧʔνϯΛ࣮ߦ͢Δͷʹඞཁͳ1$Ϧιʔεɻ 04εέδϡʔϥʹͱͬͯͷ$16ͷΑ͏ͳ΋ͷɻ ུশ ֓ཁ
  35. P構造体 〜仮想PCリソース〜(1/3) 2. Goランタイムのコンポーネント 1ߏ଄ମ͸ɺ04εϨουΛ࣮ࡍʹಈ͔͢1$ϦιʔεΛද͠·͢ɻ 1 ग़యSVOUJNFSVOUJNFHP

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

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

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

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

    ( . TZTNPO ( ৔߹ʹΑͬͯ͸ෳ਺ݸੜ੒͞ΕΔ ( ( (
  40. アジェンダ  (PϥϯλΠϜͷίϯϙʔωϯτ ᶃ ( . 1ͱ͸ʁ ᶄ ௥Ճͷߏ੒ཁૉ 

    ϥϯλΠϜͱ͸  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸
  41. Goランタイムの全体図(再掲) 2. Goランタイムのコンポーネント (PϥϯλΠϜͷ෦඼ಉ࢜ͷؔ܎Λ·ͱΊΔͱɺҎԼͷਤͷΑ͏ʹදͤ·͢ɻ . (  ( ( (

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

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

    ಛఆͷ1ʹґଘ͠ͳ͍(ΛͨΊ͓ͯ͘ άϩʔόϧΩϡʔ ग़యSVOUJNFSVOUJNFHP
  44. Goランタイムの全体図(再掲) 2. Goランタイムのコンポーネント (PϥϯλΠϜͷ෦඼ಉ࢜ͷؔ܎Λ·ͱΊΔͱɺҎԼͷਤͷΑ͏ʹදͤ·͢ɻ . (  ( ( (

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

    ( ( . ( TZTNPO͸௨ৗͷ1ͱ͸ಠཱͯ͠ಈ͘ ग़యSVOUJNFQSPDHP
  46. Goランタイムの全体図(再掲) 2. Goランタイムのコンポーネント (PϥϯλΠϜͷ෦඼ಉ࢜ͷؔ܎Λ·ͱΊΔͱɺҎԼͷਤͷΑ͏ʹදͤ·͢ɻ . (  ( ( (

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

    (ͷதͰ͸TDIFEVMFؔ਺͕ಈ࡞͢Δ ग़యSVOUJNFSVOUJNFHP
  48. G,M,P以外の追加コンポーネント 2. Goランタイムのコンポーネント ͜ͷ5BMLͰ͸ɺ( . 1ʹՃ͑ͯҎԼͷͭ΋ʮεέδϡʔϥͷઆ໌ʹग़ͯ͘Δ ߏ੒ཁૉʯͱͯ͠औΓ্͍͛ͨͱࢥ͍·͢ɻ ໊শ runtime. sched

    TDIFE TZTNPO ( runtime. sysmon G0 (PϥϯλΠϜશମͷ؀ڥ৘ใΛอ͓࣋ͯͨ͘͠Ίͷάϩʔόϧม਺ɻ γεςϜϞχλɻ ϓϩάϥϜ࣮ߦ͕ԁ׈ʹߦΘΕ͍ͯΔ͔ɺϘτϧωοΫͱͳ͍ͬͯ Δΰʔϧʔνϯ͕ଘࡏ͍ͯ͠ͳ͍͔Λ؂ࢹ͢Δɻ (Pͷεέδϡʔϥͦͷ΋ͷΛಈ͔͢(ɻ ུশ ֓ཁ
  49. アジェンダ  ϥϯλΠϜͱ͸  (PϥϯλΠϜͷίϯϙʔωϯτ  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ 

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

    ϓϦΤϯϓγϣϯ ( . . ( . ( ( .
  51. 説明を始める前に 3. スケジューリングとプリエンプション l ͔͜͜ΒͷεϥΠυͰ͸ɺҎԼͭΛݟͤͳ͕Βઆ໌Λ͍ͯ͠·͢ ◦ SVOUJNFύοέʔδͷιʔείʔυ ◦ Πϝʔδਤ l

    ʮ৘ใྔ͕ଟ͍͗ͯͬ͢ͺ͍͍ͬͺ͍ʂʯͱͳͬͨΒɺΠϝʔδਤ͚ͩݟͯ ฉ͘ɺͱ͍͏ͷͰ΋ߏ͍·ͤΜ ◦ εϥΠυ಺ʹίʔυͷग़యΛ໌هͯ͋͠ΔͷͰɺޙ͔Βੋඇʮ͋ʔ͋ͷ ਤͷಈ͖Λ࣮૷͍ͯ͠Δͷ͸͔͜͜ʯͱ௥ͬͯ΋Β͑Δͱخ͍͠Ͱ͢
  52. アジェンダ  ϥϯλΠϜͱ͸  (PϥϯλΠϜͷίϯϙʔωϯτ  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ ᶃ ϓϦΤϯϓγϣϯͷ࢓૊Έ ᶄ

    εέδϡʔϥͷ࣮૷  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸
  53. プリエンプション対象の検出(1/3) 3. スケジューリングとプリエンプション 1 . (  ( ( (

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

    . TZTNPO ( ؂ࢹ ͦͯͦ͠ͷSFUBLFؔ਺ͷதͰɺQSFFNQUPOFؔ਺͕௚Ͱݺ͹Ε͍ͯ·͢ɻ ௕͘ಉ͡΋ͷΛ࣮ߦதͩͬͨΓ γεςϜίʔϧʹೖ͍ͬͯΔ1͕͋Ε͹ ϓϦΤϯϓτ͍ͨ͠ͳʜ ग़యSVOUJNFQSPDHP
  55. プリエンプション対象の検出(3/3) 3. スケジューリングとプリエンプション QSFFNQUPOFؔ਺ͷதͰ͸ʮ͜ͷ(Λ੾Γ཭͍ͯͩ͘͠͞Ͷʯͱ͍͏ϑϥάཱͯ Λ͍ͯ͠·͢ɻ࣮ࡍʹ(Λ੾Γ཭͢࡞ۀ͸ɺ·ͨผʹߦΘΕ·͢ɻ 1 . (  (

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

  57. GとMの切り離し作業(2/4) 3. スケジューリングとプリエンプション 1 . (  ( ( (

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

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

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

    λͱ͸ผͷλΠϛϯά λΠϛϯά͸༷ʑ
  61. アジェンダ  ϥϯλΠϜͱ͸  (PϥϯλΠϜͷίϯϙʔωϯτ  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ ᶃ ϓϦΤϯϓγϣϯͷ࢓૊Έ ᶄ

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

  63. 実行可能なGを探索(1/9) 〜 グローバルキューの確認 3. スケジューリングとプリエンプション ग़యSVOUJNFQSPDHP 1 . ( 

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

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

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

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

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

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

     ۭ FQPMM Πϯ ελ ϯε *0ऴΘͬͨ(͕ͳ͍͔ ໰͍߹Θͤ ग़యSVOUJNFQSPDHP
  70. 実行可能なGを探索(8/9) 〜 work-steal 3. スケジューリングとプリエンプション ͦΕͰ΋ͳ͚Ε͹XPSLTUFBMͱݺ͹ΕΔڍಈΛ࣮ߦ͠·͢ɻ 1 . ( 

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

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

  73. 選んだGを実行させる(1/2) 3. スケジューリングとプリエンプション 1 . (  ( ( (

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

    (ͷεςʔλεΛ (SVOOBCMF͔Β(SVOOJOH΁ ग़యSVOUJNFQSPDHP
  75. スケジューリングまとめ 3. スケジューリングとプリエンプション l εέδϡʔϦϯάʹख͖͢ͷ.ʹ৽ͨͳ(Λ͕͋ͯ͏ l TDIFEVMFؔ਺ʹΑΔ৽͍͠(ͷ୳͠ํ͸ҎԼ ◦ άϩʔόϧΩϡʔ ˠ

    ϩʔΧϧΩϡʔ ˠ ωοτϫʔΫ*0଴ͪ ˠ XPSLTUFBM l (Λ୳͖ͯͨ͠ޙʹɺFYFDVUFؔ਺ʹ࣮ͯࡍʹ(.Λ݁߹ͤ͞Δ࡞ۀΛߦ͏
  76. アジェンダ  ϥϯλΠϜͱ͸  (PϥϯλΠϜͷίϯϙʔωϯτ  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ 

    ϥϯλΠϜΛֶͿʹ͸ ষ ষ 1 . ( SVOUJNFύοέʔδ 1 . ( SVOUJNFύοέʔδ ར༻
  77. G,M,Pが絡む処理 4. ランタイムが絡む処理 ࣮ߦޮ཰Λ্͛ΔͨΊʹɺҎԼͷॲཧ͸( . 1͕བྷΉ͜ͱ͕ଟ͍ɻ SVOUJNFʹΑΔ( . 1ૢ࡞͕ൃੜ͢Δॲཧ γεςϜίʔϧͷݺͼग़͠

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

    ωοτϫʔΫ*0 PT0QFOؔ਺ʹΑͬͯ γεςϜίʔϧPQFO͕ ཪͰݺ͹ΕΔ DPOO3FBEϝιουͷ࣮ߦͰ ड৴଴ػঢ়ଶʹͳΔ
  79. G,M,Pの付け替えイメージ(1/2) 4. ランタイムが絡む処理 γεςϜίʔϧݺͼग़͠ʹ͸͕͔͔࣌ؒΔͨΊɺݺͼग़͠தʹผͷ࣮ߦՄೳͷ( Λಈ͔ͨ͠ํ͕ޮ཰͕͍͍ͷͰ͢ɻ 1 . (  (

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

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

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

  83. システムコールの呼び出し〜 Mの切り離し(3/6) 4. ランタイムが絡む処理 1 . (  ( (

    ( SFFOUFSTZTDBMMؔ਺தͰɺ( .ͷ੾Γ཭͕͠ߦΘΕ·͢ɻ .ͱ1Λ੾Γ཭͢ γεςϜίʔϧͷݺͼग़͠ ग़యSVOUJNFQSPDHP
  84. システムコールの呼び出し 〜 新規Mの割り当て(4/6) 4. ランタイムが絡む処理 ৗ࣌Քಇ͍ͯ͠ΔTZTNPOͷதͰɺSFUBLFؔ਺͕ݺ͹Ε͍ͯ·͢ɻ ࠶ܝ . TZTNPO (

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

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

    ( ( ( . ֎͞Εͨ.ͷ୅ΘΓʹ ৽͍͠.͕͕͋ͯ͏ . TZTNPO ( ग़యSVOUJNFQSPDHP
  87. アジェンダ  ϥϯλΠϜͱ͸  (PϥϯλΠϜͷίϯϙʔωϯτ  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ 

    ϥϯλΠϜΛֶͿʹ͸
  88. Goランタイムの要素はGとMとP – by 公式Doc 5. ランタイムを学ぶには SVOUJNFύοέʔδ಺ʹ)"$,*/(NEʹ͸ɺ͔֬ʹʮ( . 1Λίϯτϩʔϧ͢ Δͷ͕(PϥϯλΠϜͷ࢓ࣄͩʯͱॻ͔Ε͍ͯ·͢ɻ

    5IFTDIFEVMFSNBOBHFTUISFFUZQFTPGSFTPVSDFTUIBUQFSWBEFUIFSVOUJNF (T .T BOE1T ༁ εέδϡʔϥͷ໾ׂ͸(PϥϯλΠϜΛࢧ͑ΔҎԼͭͷϦιʔεΛ؅ཧ͢Δ͜ͱͰ͋Δɻ Ұͭ͸( ΋͏Ұͭ͸. ͦͯ͠࠷ޙʹ1Ͱ͋Δɻ  SVOUJNF)"$,*/(NE ϥϯλΠϜΛཧղ͢Δʹ͸ɺ( . 1ͭΛཧղ͍ͯ͠Ε͹े෼ʁ
  89. G,M,Pで行う動きはたくさんある 5. ランタイムを学ぶには ͔֬ʹɺ(PϥϯλΠϜͷதͰߦΘΕΔॲཧ͸ɺ΄ͱΜͲ( . 1͕བྷΉ΋ͷ͹͔ ΓͰ͢ɻ γεςϜίʔϧͷݺͼग़͠ ( .

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

    . 1ૢ࡞ͷ۩ମྫ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά 1 . ( ( ( . 1 . ( ( ( 1 . ( ( ( (ͷ੾Γ཭͠͸୭͕΍Δͷʁ ͜ͷ(.ඥ෇͚Λ΍͍ͬͯ ͏ͷ͸Ͳ͜ͷ୭ʁ ( . 1Λಈ͔͢ओମ͕Կͳͷ͔ʹ͍ͭͯԿ΋આ໌͕ͳ͍ʂ
  91. Goランタイム勉強して散々苦しんだ人の心の叫び 5. ランタイムを学ぶには ( . 1ͷཁૉ͚ͩͰ આ໌Λࡁ·ͤΑ͏ͱ͢Δͷ͸΍Ίͯ͘Εʂʂ

  92. 苦労した上で得た感想 5. ランタイムを学ぶには ( . 1ΛͲ͔͜Βௐୡ͖ͯͯ͠Ͳ͜ʹ֨ೲ͢Δͷ͔ɺͦΕΛ΍Δͷ͸୭ͳͷ͔ɺ ͱ͍͏࿩͸͜ͷཁૉ͚ͩͰ͸ऩ·Βͳ͍ͷͰ͸ʁͱ͍͏ײ૝Λ๊͖·ͨ͠ɻ γεςϜίʔϧͷݺͼग़͠ ( .

    1ૢ࡞ͷ۩ମྫ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά 1 . ( ( ( . 1 . ( ( ( 1 . ( ( ( (ͷ੾Γ཭͠͸୭͕΍Δͷʁ ͜ͷ(.ඥ෇͚Λ΍͍ͬͯ ͏ͷ͸Ͳ͜ͷ୭ʁ TZTNPO͕΍Δ ˠ͜ͷޙ άϩʔόϧΩϡʔʹೖΔ (͕΍Δ άϩʔόϧΩϡʔ౳͔Β ୳ͯ͘͠Δ
  93. 提言1: Goランタイムの部品は6つ 5. ランタイムを学ぶには ϥϯλΠϜͷڍಈΛޠΔ্Ͱ܁Γฦ͠ొ৔͢Δ֓೦͸ɺ( . 1͚ͩʹݶΒͳ͍ɻ ໾ׂ ΰʔϧʔνϯ (

    . 1 04εϨου ࣮ߦϦιʔεɺԾ૝$16 ུশ ໾ׂ ϥϯλΠϜશମͷঢ়ଶ؅ཧ TDIFE TZTNPO ( γεςϜϞχλ εέδϡʔϥͷ࣮ଶ ུশ ( . 1 ( ( ( . TZTNPO ( ( 
  94. つまずきポイント2: 似たような動きがいっぱい出てくる 5. ランタイムを学ぶには ( . 1Λ෇͚ͨΓ֎ͨ͠Γ͢Δಈ͖͕ࢁͷΑ͏ʹग़͖ͯͯɺͻͨ͢Βࠞཚ͠·͠ ͨɻ γεςϜίʔϧͷݺͼग़͠ (

    . 1ૢ࡞ͷ۩ମྫ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά 1 . ( ( ( . 1 . ( ( ( 1 . ( ( ( ͔͠΋͜Ε͸(ͷબͼํ·Ͱ ߟ͑ͳ͖Ό͍͚ͳ͍
  95. 何でこんなことになってるのか 5. ランタイムを学ぶには (P౰࣌ͷεέδϡʔϥEFTJHO%PDͷఏҊ͕ʮ1Λಋೖˠͦ͏͢Δͱγες Ϝίʔϧݺͼग़͠͸͜͏ͳΔʯͱ͍͏࿦ௐͩͬͨͩͬͨͷͰɺͦΕ͕࢒͍ͬͯΔɻ l (P4DBMBCMF(P4DIFEVMFS%FTJHO%PD ◦ ҙ༁ͦͷ ϥϯλΠϜʹ1Λ৽͘͠࡞Ζ͏ͥ

    ◦ ҙ༁ͦͷ 1ಋೖͨ͠Βɺྫ͑͹γεςϜίʔϧݺͼग़͠͸͜͏࣮૷͞ΕΔΑ l .PSTJOHbT#MPHd5IF(PTDIFEVMFS ༗໊ͳ(.1ਤΛࡌͤͨϒϩά ◦ γεςϜίʔϧ࣌ͷਤΛࡌͤΔ ◦ TUFBMXPSL࣌ͷਤΛࡌͤΔ
  96. 提言2: ランタイムの機能と挙動は分けて考えませんか 5. ランタイムを学ぶには ʮ෦඼ͦͷ΋ͷͷಈ͖ʯͳͷ͔ʮ෦඼Λ࢖ͬͨಈ͖ʯͳͷ͔ͱ͍͏໨ઢͰΈΔͱɺ ࣅͨ֓೦͕੔ཧ͞Ε͍͍ͯΜ͡Όͳ͍Ͱ͠ΐ͏͔ɻ γεςϜίʔϧͷݺͼग़͠ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά (Λ࣮ߦ͍ͯ͠ͳ͍.ʹ

    ৽͍͠(ׂ͕Γ౰ͯΒΕΔ γεςϜίʔϧʹ൐͍ .ͷ෇͚ସ͕͑ߦΘΕΔ TZTNPOͰϑϥάΛ͚ͭͯ ͋ΔλΠϛϯάͰ .͔Βͷ੾Γ཭͕͠ߦΘΕΔ 1 . ( ( ( ( . 1 . ( ( ( ( 1 . ( ( ( ( ϥϯλΠϜͷػೳ ϥϯλΠϜͷڍಈ
  97. ຊηογϣϯͷ·ͱΊ

  98. 1章 ランタイムとは l (PϥϯλΠϜϓϩάϥϜΛಈ͔͢ͷʹඞཁͳࡉʑͱͨ͠ॲཧΛɺਓͷ୅Θ ΓʹҾ͖ड͚ͯ͘ΕΔՕॴ ϝϞϦͷׂΓ౰ͯ intܕͭΛ֨ೲ͢ΔϝϞϦ͸ ࣗಈͰ֬อ͞ΕΔ ஫$ݴޠͩͱmallocͳͲͰ ໌ࣔతʹ֬อ͢Δඞཁ͋Γ

    (PϥϯλΠϜͷ໾ׂ ΨϕʔδίϨΫτ εέδϡʔϦϯά ࢖͍ऴΘͬͨม਺arrayͷ ϝϞϦղ์͸ࣗಈͰߦΘΕΔ ஫$ݴޠͩͱfreeͰ ໌ࣔతʹղ์͢Δඞཁ͋Γ ฒߦͳؔ਺Λ࣮ࡍʹͲͷλΠ ϛϯάͰಈ͔͢ͷ͔͸ࣗಈͰ ௐ੔͞ΕΔ
  99. 2章 Goランタイムのコンポーネント l (PϥϯλΠϜʹ͸ͭͷίϯϙʔωϯτ͕͋Γ·͢ɻ ໾ׂ ΰʔϧʔνϯ ( . 1 04εϨου

    ࣮ߦϦιʔεɺԾ૝$16 ུশ ໾ׂ ϥϯλΠϜશମͷঢ়ଶ؅ཧ TDIFE TZTNPO ( γεςϜϞχλ εέδϡʔϥͷ࣮ଶ ུশ ( . 1 ( ( ( . TZTNPO ( ( 
  100. 3章 スケジューリングとプリエンプション l εέδϡʔϦϯά(ͱ.Λͭͳ͛Δ l ϓϦΤϯϓγϣϯ(ͱ.Λ੾Γ཭͢ l ͲͪΒ΋(PϥϯλΠϜ͕ߦ͏ػೳͰ͢ γεςϜίʔϧͷݺͼग़͠ (

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

    ( . 1ૢ࡞ͷ۩ମྫ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά 1 . ( ( ( . 1 . ( ( ( 1 . ( ( (
  102. ΈΜͳSVOUJNFύοέʔδΛಡ΋͏ ɾТɾ ϊγ ࢲͷ͜ͱ͸ݏ͍Ͱ΋(PϥϯλΠϜ͚ͩ͸ݏ͍ʹͳΒͳ͍Ͱ͍ͩ͘͞ খ੠

  103. 5IBOLZPVGPSMJTUFOJOH