ÄÁÅÙÃ÷»ó¼¼º¸±â

ÄÚµå·Î ¾Ë¾Æº¸´Â ARM ¸®´ª½º Ä¿³Î
ÄÚµå·Î ¾Ë¾Æº¸´Â ARM ¸®´ª½º Ä¿³Î
  • ÀúÀÚÀ±¼®ÈÆ,¹®¿µÀÏ,±¸º»±Ô,À¯ÈñÀç °øÀú
  • ÃâÆÇ»çÁ¦ÀÌÆà
  • ÃâÆÇÀÏ2020-01-02
  • µî·ÏÀÏ2020-12-21
º¸À¯ 1, ´ëÃâ 0, ¿¹¾à 0, ´©Àû´ëÃâ 7, ´©Àû¿¹¾à 0

Ã¥¼Ò°³

ÃֽŠARM64 Ä¿³ÎÀ» ÄÚµå ·¹º§¿¡¼­ »ó¼¼È÷ ºÐ¼®ÇÏ´Ù!

Çö¾÷¿¡¼­ Ä¿³Î ¾÷¹«¸¦ ÇÏ°í Àְųª, Ãë¹Ì·Î Ä¿³Î ºÐ¼®À» ½ÃÀÛÇßÁö¸¸ ¹æ´ëÇÑ ¾ç°ú ³­ÇØÇÑ ÄÚµå ¶§¹®¿¡ ¾î·Á¿òÀ» °Þ°í Àִ°¡? ½Ã°£ÀÌ ºÎÁ·ÇÏ¿© ¾îµð¼­ºÎÅÍ ½ÃÀÛÇØ¾ß ÇÒÁö °¥ÇÇÁ¶Â÷ ÀâÁö ¸øÇÏ°í Àִ°¡? ¿À·¡Àü¿¡ ±¸ÀÔÇÑ Ã¥À» µÚÀû°Å¸®Áö¸¸ Ä¿³Î ¹öÀüÀÌ ¸ÂÁö ¾Ê¾Æ ½Ã°£¸¸ ³¶ºñÇÏ°í ÀÖÁö´Â ¾ÊÀº°¡? ÃֽŠĿ³Î ÇнÀ¿¡ ¾î·Á¿òÀ» °Þ´Â ÀÌ·± ºÐµéÀ» À§ÇØ ¡¶ÄÚµå·Î ¾Ë¾Æº¸´Â ARM ¸®´ª½º Ä¿³Î¡·À» Àü¸é °³Á¤ÇÏ¿© Ãâ°£Çß´Ù. ÀÌ Ã¥Àº ÃֽŠARM64 Ä¿³ÎÀÇ ÁÖ¿ä ¼­ºê½Ã½ºÅÛÀ» ÄÚµå ·¹º§¿¡¼­ ºÐ¼®ÇÏ°í ÀÖÀ¸¸ç, ±âÁ¸ ¿ø¸®¸¦ Äڵ带 Á÷Á¢ ÂѾư¡¸ç ¸íÄèÇÏ°Ô ¼Ò°³ÇÏ°í ÀÖ¾î Ä¿³Î ¿£Áö´Ï¾îµé¿¡
°Ô ÈǸ¢ÇÑ ±æÀâÀÌ°¡ µÉ °ÍÀÌ´Ù.

¸ñÂ÷

1Àå ARMv8 ¾ÆÅ°ÅØó 1
1.1 ARMv8 ¼Ò°³ 4
1.1.1 ÀͼÁ¼Ç ¸ðµ¨ 5
1.1.2 ÀͼÁ¼Ç ·¹º§ º¯°æ 6
1.1.3 ½ÇÇà »óÅ 7
1.1.4 ½ÇÇà »óÅ º¯°æ 7
1.2 ARMv8 ·¹Áö½ºÅÍ 8
1.2.1 ÇÁ·Î¼¼¼­ »óÅ ·¹Áö½ºÅÍ(PSTATE) 9
1.2.2 AArch64 Æ¯¼ö ¸ñÀû ·¹Áö½ºÅÍ 10
1.2.3 ½Ã½ºÅÛ ·¹Áö½ºÅÍ 12
1.2.4 ABIÀÇ ·¹Áö½ºÅÍ »ç¿ë ±ÔÄ¢ 12
1.3 AArch64 ÀͼÁ¼Ç Çڵ鸵 13
1.3.1 ÀͼÁ¼Ç Å¸ÀÔ 14
1.3.2 µ¿±â ¹× ºñµ¿±â ÀͼÁ¼Ç 15
1.3.3 ÀͼÁ¼Ç Çڵ鸵 16
1.3.4 ÀͼÁ¼Ç¿¡ ÀÇÇØ º¯°æµÇ´Â ½ÇÇà »óÅ¿͠ÀͼÁ¼Ç ·¹º§ 17
1.3.5 AArch64 ÀͼÁ¼Ç º¤ÅÍ Å×À̺í 19
1.3.6 ÀÎÅÍ·´Æ® Çڵ鸵 20
1.3.7 GIC Ç¥ÁØ ÀÎÅÍ·´Æ® ÄÁÆ®·Ñ·¯ 21
1.4 Ä³½Ã 21
1.4.1 Ä³½Ã ±¸Á¶ 22
1.4.2 Ä³½Ã ÄÁÆ®·Ñ·¯ 24
1.4.3 Ä³½Ã Á¤Ã¥ 24
1.4.4 Ä³½Ã ÀÏ°ü¼ºÀÇ µÎ °¡Áö °üÁ¡ 25
1.4.5 Ä³½Ã °ü¸® 27
1.4.6 Ä³½Ã Å½»ö 27
1.5 MMU 28
1.5.1 °¡»ó ÁÖ¼Ò¸¦ ¹°¸® ÁּҷΠº¯È¯ 29
1.5.2 AArch64ÀÇ Å×ÀÌºí µð½ºÅ©¸³ÅÍ Á¾·ù 30
1.5.3 Ä¿³Î°ú ¾ÖÇø®ÄÉÀ̼ÇÀÇ °¡»ó ÁÖ¼Ò °ø°£ ºÐ¸® 32
1.5.4 º¯È¯ Å×À̺íÀÇ cacheable°ú shareable ¼Ó¼º 33
1.5.5 µð½ºÅ©¸³ÅÍ ¸Þ¸ð¸® ¼Ó¼º 34
1.5.6 ½ÃÅ¥¸®Æ¼¿Í MMU 36
1.5.7 ÄÁÅؽºÆ® ½ºÀ§Äª 36
1.6 ¸Þ¸ð¸® ¿À´õ¸µ 37
1.6.1 ¸Þ¸ð¸® Å¸ÀÔ 39
1.6.2 ¹è¸®¾î 41
1.6.3 ¸Þ¸ð¸® ¼Ó¼º 42
1.7 ¸ÖƼÄÚ¾î ÇÁ·Î¼¼¼­ 44
1.7.1 ¸ÖƼÇÁ·Î¼¼½Ì ½Ã½ºÅÛ 44
1.7.2 Ä³½Ã ÀÏ°ü¼º 47
1.7.3 Å¬·¯½ºÅÍ ³»ÀÇ ¸ÖƼÄÚ¾î Ä³½Ã ÀÏ°ü¼º 48
1.7.4 ¹ö½º ÇÁ·ÎÅäÄÝ°ú Ä³½Ã ÀÏ°ü¼º ÀÎÅÍÄ¿³ØÆ® 51
1.8 Àü·Â °ü¸® 52
1.8.1 À¯ÈÞ »óÅ °ü¸® 52
1.8.2 ¼ÒºñÀü·ù °ü·Ã ÀνºÆ®·°¼Ç 54
1.8.3 PSCI 54

2Àå Ä¿³Î ½ÃÀÛÇϱâ 57
2.1 Ä¿³ÎÀÇ ÁøÀÔÁ¡ head.S 60
2.1.1 ºÎÆ® ÆĶó¹ÌÅÍ ÀúÀå 62
2.1.2 EL2 ¼³Á¤ 63
2.1.3 CPU ºÎÆ® ¸ðµå ÀúÀå 64
2.1.4 ÆäÀÌÁö Å×ÀÌºí »ý¼º 65
2.1.5 CPU ÃʱâÈ­ 71
2.2 ÀͼÁ¼Ç Çڵ鸵 78
2.2.1 ÀͼÁ¼Ç º¤ÅÍ 79
2.2.2 ÀͼÁ¼Ç Å×ÀÌºí ¿£Æ®¸® 84
2.3 µð¹ÙÀ̽º Æ®¸® 94
2.3.1 µð¹ÙÀ̽º Æ®¸®ÀÇ Çʿ伺 94
2.3.2 µð¹ÙÀ̽º Æ®¸® ÀÛ¼ºÇϱâ 95
2.3.3 early FDT »ç¿ë 96
2.3.4 FDT¸¦ Ç®¾î³½ ÈÄ »ç¿ë 107

3Àå ÆäÀÌ¡°ú ¸ÅÇΠ125
3.1 ARM64 ÆäÀÌ¡ 127
3.1.1 °¡»ó ÁÖ¼Ò °ø°£ 127
3.1.2 ÆäÀÌÁö Å×ÀÌºí °³¿ä 130
3.1.3 ÆäÀÌ¡ ÃʱâÈ­ 134
3.1.4 ÆäÀÌÁö Å×ÀÌºí »ý¼º 142
3.1.5 ÆäÀÌÁö Å×ÀÌºí ·¹Áö½ºÅÍ ¼³Á¤ 151
3.1.6 ÆäÀÌÁö Å×ÀÌºí ¹× ÁÖ¼Ò º¯È¯ API 158
3.2 °íÁ¤ ¸ÅÇÎ(fixmap) 161
3.2.1 °íÁ¤ ¸ÅÇΠÃʱâÈ­ 162
3.2.2 °íÁ¤ ¸ÅÇΰú ¾ð¸ÅÇΠ164
3.2.3 °íÁ¤ ¸ÅÇΠ°ü·Ã API 166
3.3 ¿¬¼ÓµÈ °¡»ó ÁÖ¼Ò °ø°£ ¸ÅÇÎ(vmap) 168
3.3.1 vmap ¿µ¿ª °ü¸® 168
3.3.2 vmap 172
3.3.3 vmap_area ÇÒ´ç 176
3.3.4 vunmap 186
3.3.5 vmap_area ÇÒ´ç°ú ÇØÁ¦ 192
3.4 I/O ¸Þ¸ð¸® ¸ÅÇÎ(ioremap) 200
3.4.1 early I/O ¸Þ¸ð¸® ¸ÅÇΠ200
3.4.2 I/O ¸Þ¸ð¸® ¸ÅÇΠ205
3.5 ÆäÀÌÁö µð½ºÅ©¸³ÅÍ ¸ÅÇÎ(vmemmap) 213
3.5.1 vmemmap È°¼ºÈ­ 214

4À堸޸𸮠°ü¸® 219
4.1 early ¸Þ¸ð¸® ÇÒ´çÀÚ: memblock 221
4.1.1 memblock ±¸Á¶ 222
4.1.2 memblock ÃʱâÈ­ 224
4.1.3 memblock ÇÒ´ç°ú ÇØÁ¦ 229
4.1.4 memblock Ãß°¡ 232
4.1.5 memblock »èÁ¦ 240
4.2 ¸Þ¸ð¸® ¸ðµ¨ 245
4.2.1 ¸Þ¸ð¸® ¸ðµ¨ÀÇ Á¾·ù 246
4.2.2 ¸Þ¸ð¸® ¸Ê(mem_map) 249
4.3 Á¸ 254
4.3.1 Á¸ Å¸ÀÔ 254
4.3.2 ºÎÆ® ¸Þ¸ð¸® ÃʱâÈ­ 257
4.3.3 vmemmapÀ» »ç¿ëÇϴ sparse ¸Þ¸ð¸® ¸ðµ¨ 277
4.4 ¹öµð ½Ã½ºÅÛ 309
4.4.1 ¹öµð ½Ã½ºÅÛÀÇ ±¸Á¶ 309
4.4.2 ÃÖÃÊ ¹öµð ±¸¼º °úÁ¤ 312
4.4.3 ¹öµð ½Ã½ºÅÛÀÇ ÆäÀÌÁö ÇÒ´ç 322
4.4.4 ¹öµð ½Ã½ºÅÛÀÇ ÆäÀÌÁö ÇØÁ¦ 336
4.5 per-cpu ÆäÀÌÁö ÇÁ·¹ÀӠij½Ã(pcp) 343
4.5.1 pcp ÃʱâÈ­ °úÁ¤ 344
4.5.2 pcp ±¸¼ºÇϱâ 344
4.5.3 pcp¿¡¼­ÀÇ ÆäÀÌÁö ÇÒ´ç 346
4.5.4 pcp·ÎÀÇ ÆäÀÌÁö ÇØÁ¦ 349
4.5.5 pcp¸¦ ¹öµð ½Ã½ºÅÛÀ¸·Î È¸¼öÇϱâ 354
4.6 ÆäÀÌÁö ÇÒ´çÀÚ 356
4.6.1 ±¸Á¶ 356
4.6.2 NUMA Áö¿ø 357
4.6.3 Á¸ ±¸¼º ¹× zonelist 358
4.6.4 zonelist ÃʱâÈ­ 361
4.6.5 NUMA ¸Þ¸ð¸® Á¤Ã¥ ÃʱâÈ­ 370
4.6.6 ÆäÀÌÁö ÇÒ´ç 373
4.6.7 fastpath ÆäÀÌÁö ÇÒ´ç 375
4.6.8 ´õƼ ÆäÀÌÁö 384
4.6.9 slowpath ÆäÀÌÁö ÇÒ´ç 388
4.6.10 ¿öÅ͸¶Å© 395
4.7 ½½·¦ ÇÒ´çÀÚ 410
4.7.1 ½½·¦, ½½·´, ½½·Ó 410
4.7.2 ½½·¦ °´Ã¼ ±¸Á¶ 412
4.7.3 kmem_cache ÃʱâÈ­ 413
4.7.4 kmem Ä³½Ã »ý¼º 426
4.7.5 ½½·¦ ÆäÀÌÁö ÇÒ´ç 442
4.7.6 ½½·¦ °´Ã¼ ÇÒ´ç 449
4.7.7 ½½·¦ °´Ã¼ ÇØÁ¦ 472
4.8 kmalloc°ú vmalloc 487
4.8.1 kmalloc°ú vmallocÀǠƯ¡ 487
4.8.2 GFP(Get Free Page) Ç÷¡±× 488
4.8.3 kmalloc ÇÒ´ç 490
4.8.4 kmallocÀ¸·Î ÇÒ´çÇÑ ¸Þ¸ð¸® ÇØÁ¦ 496
4.8.5 vmalloc ÃʱâÈ­ 498
4.8.6 vmallocÀ» »ç¿ëÇÑ ¸Þ¸ð¸® ÇÒ´ç 500
4.8.7 vmalloc( )À¸·Î ÇÒ´ç¹ÞÀº ¸Þ¸ð¸® ÇØÁ¦ 505
4.9 per-cpu ÇÒ´çÀÚ 507
4.9.1 °³¿ä 507
4.9.2 per-cpu ÃʱâÈ­ 523
4.9.3 first chunk ±¸¼º 545
4.9.4 ½½·¦ ÇÒ´çÀÚ È°¼ºÈ­ ÈÄ per-cpu ÃʱâÈ­ 555
4.9.5 per-cpu µ¿Àû ÇÒ´ç 556

5Àå Å½ºÅ© °ü¸® 575
5.1 Å½ºÅ© Ç¥Çö 577
5.1.1 ÇÁ·Î¼¼½º¿Í ½º·¹µåÀÇ Â÷ÀÌ, ±×¸®°í Å½ºÅ© 577
5.1.2 Å½ºÅ©¸¦ Ç¥ÇöÇϴ ÀڷᱸÁ¶ 578
5.1.3 ÃʱâÈ­ °úÁ¤ 579
5.2 PID °ü¸®Çϱâ 586
5.2.1 PID¸¦ Ç¥ÇöÇϴ ÀڷᱸÁ¶ 586
5.2.2 PID ÇÒ´çÇϱâ 591
5.2.3 PID ÇØÁ¦Çϱâ 598
5.2.4 PID ÇÒ´çÀ» À§ÇÑ ÃʱâÈ­ °úÁ¤ 600
5.2.5 °ü·Ã API 603
5.3 ½ÇÇà »óÅ °ü¸®Çϱâ 604
5.3.1 Å½ºÅ©ÀÇ ÁÖ¿ä ½ÇÇà »óÅ 605
5.3.2 °ü·Ã API 606
5.4 ¿ì¼±¼øÀ§ °ü¸®Çϱâ 607
5.4.1 nice °ª°ú ¿ì¼±¼øÀ§ 607
5.4.2 static priority, normal priority, dynamic priority 608
5.4.3 ¿ì¼±¼øÀ§ ¼³Á¤Çϱâ 608
5.4.4 PI boosting priority leak°ú ¿ì¼±¼øÀ§ ¸®¼Â 613
5.5 Å½ºÅ© »ý¼ºÇϱâ 614
5.5.1 _do_fork( ): Å½ºÅ© »ý¼ºÀÇ ½ÃÀÛÁ¡ 614
5.5.2 copy_process( ): Å½ºÅ© º¹»çÇϱâ 616
5.6 Å½ºÅ© Á¾·áÇϱâ 636
5.6.1 do_exit( ) 637
5.7 idle ½º·¹µå(swapper) 640
5.7.1 idle ½º·¹µå°¡ ½ÇÇàµÇ´Â °úÁ¤ 641
5.7.2 idle ½º·¹µå°¡ Çϴ ÀÏ 642
5.7.3 idle ½º·¹µå°¡ ¼³Á¤µÇ´Â °úÁ¤ 645
5.7.4 ÃʱâÈ­ °úÁ¤ ºÐ¼® 646
5.8 Å½ºÅ© °ü·Ã ÀڷᱸÁ¶ÀÇ Çʵ堼³¸í 652
5.8.1 task_struct ±¸Á¶Ã¼ 652
5.8.2 thread_info ±¸Á¶Ã¼ 655
5.8.3 thread_struct ±¸Á¶Ã¼ 656

6Àå Å½ºÅ© ½ºÄÉÁÙ¸µ 657
6.1 ½ºÄÉÁÙ·¯ÀÇ ÁÖ¿ä °³³ä 660
6.1.1 load weight¿Í virtual runtime 660
6.1.2 ½ºÄÉÁÙ¸µ ·¹ÀÌÅϽÿ͠ŸÀÓ ½½¶óÀ̽º 663
6.1.3 ·±Å¥¿Í CFS ·±Å¥, ·¹µå ºí·¢ Æ®¸® 666
6.1.4 Å½ºÅ© ±×·ì°ú ½ºÄÉÁÙ¸µ ¿£Æ¼Æ¼ 669
6.1.5 ½ºÄÉÁÙ¸µ Å¬·¡½º, ½ºÄÉÁÙ¸µ Á¤Ã¥ 674
6.2 ¸ÞÀΠ½ºÄÉÁÙ·¯ 675
6.2.1 Å¸À̸ӠÀÎÅÍ·´Æ®¸¦ ÀÌ¿ëÇÑ ÁÖ±âÀûÀΠ½ºÄÉÁÙ¸µ 676
6.2.2 ºñÁÖ±âÀûÀΠ½ºÄÉÁÙ¸µ 678
6.2.3 ½ºÄÉÁÙ¸µ ½ÃÀÛÇϱâ: schedule( ), preempt_schedule_irq( ), preempt_schedule_common( ) 682
6.2.4 ½ºÄÉÁÙ¸µ ¿äûÇϱâ, ¿äû Ã¼Å©Çؼ­ ½ºÄÉÁÙ¸µ ½ÃµµÇϱâ 685
6.2.5 ½ºÄÉÁÙ¸µÀÇ ÇÙ½É: _ _schedule( ) 688
6.2.6 Å½ºÅ© ±ú¿ì±â: try_to_wake_up( ) 697
6.3 CFS(Completely Fair Scheduling) 710
6.3.1 Å½ºÅ©¸¦ ·±Å¥¿¡ »ðÀÔÇϱâ 710
6.3.2 Å½ºÅ©¸¦ ·±Å¥¿¡¼­ ¼±ÅÃÇϱâ 717
6.3.3 Å½ºÅ©¸¦ ·±Å¥¿¡¼­ Á¦°ÅÇϱâ 729
6.3.4 ÁÖ±âÀûÀ¸·Î ¹ß»ýÇϴ ƽ Ã³¸®Çϱâ 734
6.3.5 ½ºÄÉÁÙ¸µ ¿£Æ¼Æ¼ÀÇ ½ÇÇà½Ã°£ °ü¸®Çϱâ 737
6.3.6 Å¸ÀÓ ½½¶óÀ̽º °ü¸®Çϱâ 742
6.4 ½ºÄÉÁÙ·¯ ÃʱâÈ­Çϱâ 747
6.4.1 sched_init( ): ½ºÄÉÁÙ·¯ ÃʱâÈ­Çϱâ 747

7Àå SMP¿Í cpu ÅäÆú·ÎÁö 755
7.1 SMP¸¦ À§ÇÑ Ä¿³Î Áö¿ø 757
7.2 cpu ÅäÆú·ÎÁö 758
7.2.1 MPIDR ÇؽàÅ×À̺í 762
7.2.2 cpumask map 768
7.3 Secondary Booting 770
7.3.1 ARM: SMP ¿ÀÆÛ·¹À̼Ǡ770
7.3.2 ARM64: cpu ¿ÀÆÛ·¹À̼Ǡ772
7.3.3 PSCI(Power State Coordination Interface) 777
7.3.4 ARM64 non-boot cpu ºÎÆà781

8Àå ÀÎÅÍ·´Æ® 803
8.1 ÀÎÅÍ·´Æ®ÀÇ °³³ä 805
8.1.1 ÀÎÅÍ·´Æ®¶õ ¹«¾ùÀΰ¡? 805
8.1.2 ÀÎÅÍ·´Æ® ÄÁÆ®·Ñ·¯ 805
8.2 ¸®´ª½º ÀÎÅÍ·´Æ® ¼­ºê½Ã½ºÅÛ 807
8.2.1 irq_chip: ÀÎÅÍ·´Æ® ÄÁÆ®·Ñ·¯ 807
8.2.2 irq_domain: ÀÎÅÍ·´Æ® µµ¸ÞÀΠ808
8.2.3 irq_desc: ÀÎÅÍ·´Æ® µð½ºÅ©¸³ÅÍ 809
8.3 ÀÎÅÍ·´Æ® Çڵ鷯 µî·Ï°ú Ã³¸® 810
8.3.1 ÀÎÅÍ·´Æ® Çڵ鷯 µî·Ï 810
8.3.2 ÀÎÅÍ·´Æ® Çڵ鷯 È£Ãâ °úÁ¤ 813
8.3.3 ÀÎÅÍ·´Æ® È°¼ºÈ­¿Í ºñÈ°¼ºÈ­ 816
8.3.4 ÀÎÅÍ·´Æ® ÃʱâÈ­ °úÁ¤ 819
8.4 ÀÎÅÍ·´Æ® Áö¿¬ Ã³¸® 825
8.4.1 top-half¿Í bottom-half 825
8.4.2 softirq 826
8.4.3 ¿öÅ©Å¥ 833
8.4.4 threaded irq 843

9À堽ð£°ú Å¸À̸Ӡ°ü¸® 847
9.1 °øÅë Å¬·Ï ÇÁ·¹ÀÓ¿öÅ©(CCF) 849
9.1.1 Å¬·Ï 850
9.1.2 ±âº»ÀûÀΠŬ·ÏÀÇ ±¸¼º¿ä¼Ò 850
9.1.3 CLK ÇÁ·¹ÀÓ °èÃþ ±¸ÇöÀ» À§ÇÑ ÀÎÅÍÆäÀ̽º 853
9.1.4 °ü·Ã ÃʱâÈ­ ÇÔ¼ö 857
9.2 Å¸ÀÓ ¼­ºê½Ã½ºÅÛ 859
9.2.1 ±âº» ±¸¼º °³¿ä 860
9.2.2 Å¬·Ï ¼Ò½º 860
9.2.3 Å¬·Ï À̺¥Æ® 865
9.2.4 Æ½ µð¹ÙÀ̽º 868
9.3 Å¸À̸Ӡ°ü¸® 872
9.3.1 Å¸À̸Ӡ°³¿ä 872
9.3.2 ÀúÇػ󵵠ŸÀ̸Ӡ874
9.3.3 °íÇػ󵵠ŸÀ̸Ӡ879

ã¾Æº¸±â 887

ÇÑÁÙ ¼­Æò