Skip to content

A programming assignment I took for grad admission (Nov 2021)

Notifications You must be signed in to change notification settings

canplane/CALAB-loader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

97 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

CALAB-loader

[CaSys Lab] ์„์‚ฌ ์‹ ์ž…์ƒ ์„ ๋ฐœ ํ”„๋กœ์ ํŠธ 1์ฐจ - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋žฉ

  • Duration : 2021-11-04 ~ 2021-11-14
  • Mentor : Bokyung Cha

1. ๊ตฌํ˜„ ์™„๋ฃŒ ์ƒํ™ฉ

  • ์š”๊ตฌ ์‚ฌํ•ญ์ด์—ˆ๋˜ ๋ชจ๋“  ํŒŒํŠธ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    • Part 1: All-at-once loading, Demand loading, Memory access errors, Interface
    • Part 2: Return to the program loader (Option 1, 2 ๋ชจ๋‘), Back-to-back loading, User-level threading
  • ๋ชจ๋“  ํŒŒํŠธ์— ๋Œ€ํ•ด์„œ All-at-once / demand loader๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. (apager.c, dpager.c)

  • ๋ชจ๋“  ํŒŒํŠธ์— ๋Œ€ํ•ด์„œ makefile์„ ์ƒ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. (์ปดํŒŒ์ผ: $ make [apager | dpager | test], ์‹คํ–‰: $ make [run_apager | run_dpager])

  • ์ตœ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ ค ๋…ธ๋ ฅํ•˜์˜€๊ณ , loader์™€ ๊ทธ ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ํฐํŠธ ์Šคํƒ€์ผ๋ง์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ์ฒจ๋ถ€๋“œ๋ฆด ์†Œ์Šค ์ฝ”๋“œ์˜ ์ฃผ์š” ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    part-1/ (Part 1)
      apager.c
      dpager.c
      common.c (All-at-once, Demand loader์—์„œ ๊ณตํ†ต๋˜๋Š” ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•œ ์ฝ”๋“œ)
      Makefile
      example/ (ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ)
        my_test.c (์ง์ ‘ ์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ)
    
    part-2/ (Part 2)
      option-1/ (Option 1: return_to_loader() ๋ฐฉ์‹)
        2-back_to_back/ (Back-to-back loader)
          apager.c
          dpager.c
          common.c (All-at-once, Demand loader์—์„œ ๊ณตํ†ต๋˜๋Š” ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•œ ์ฝ”๋“œ)
          Makefile
    
        3-thread/ (User-level threading)
          apager.c
          dpager.c
          common.c (All-at-once, Demand loader์—์„œ ๊ณตํ†ต๋˜๋Š” ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•œ ์ฝ”๋“œ)
          queue.c (์Šค์ผ€์ค„๋ง์—์„œ ์“ฐ์ด๋Š” Ready queue๊ฐ€ ๊ธฐ๋ฐ˜ํ•˜๋Š” generic Queue ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„ ์ฝ”๋“œ)
          Makefile
    
        interrupt.c (return_to_loader(), yield()๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๊ณ  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋‹จ์— include๋˜๋Š” ์ฝ”๋“œ)
    
        example/ (ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ)
          yield/ (User-level threading์—์„œ yield() ํ…Œ์ŠคํŠธ ์ฝ”๋“œ)
            a.c (A-1 -> A-2 -> A-3 -> return)
            b.c (B-1 -> B-2 -> B-3 -> return)
            c.c (C-1 -> C-2 -> C-3 -> return)
    
          โ€ฆ (Part 2 ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ์ฃผ์–ด์ง„ ์ฝ”๋“œ๋“ค)
          my_test.c (์ง์ ‘ ์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ)
    
      option-2/ (์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ •์ด ์—†๋Š” ๋ฐฉ์‹)
        2-back_to_back/ (Back-to-back loader)
          apager.c
          dpager.c
          common.c (All-at-once, Demand loader์—์„œ ๊ณตํ†ต๋˜๋Š” ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•œ ์ฝ”๋“œ)
          Makefile
    
        example/ (ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ)
          โ€ฆ (Part 2 ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ์ฃผ์–ด์ง„ ์ฝ”๋“œ๋“ค)
          my_test.c (์ง์ ‘ ์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ)
    

2. ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ์ƒํ™ฉ

  • Part 1์˜ ๋ชจ๋“  ๊ตฌํ˜„ ์ฝ”๋“œ๋Š” ์ œ๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ ํŒŒ์ผ(my_test.c)์— ๋Œ€ํ•ด์„œ ์ •์ƒ ์ž‘๋™์„ ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    • ์ œ๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ ํŒŒ์ผ(my_test.c)์— ๋Œ€ํ•ด์„œ ์ •์ƒ ์ž‘๋™ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • Demand loader์—์„œ, ์ง„์งœ๋กœ segmentation fault๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์„ signal handling ํ•จ์ˆ˜์—์„œ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ข…๋ฃŒ์‹œํ‚ด์„ ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • Part 2์˜ ๋ชจ๋“  ๊ตฌํ˜„ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ…Œ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ๊ฑฐ์ณค์Šต๋‹ˆ๋‹ค.

    • Part 2 ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ์ „๋‹ฌ๋ฐ›์€ ์ฝ”๋“œ๋“ค(segfault.c ์ œ์™ธ)๊ณผ, ์ง์ ‘ ์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ(my_test.c)๋ฅผ ๊ฐ™์ด ์‹คํ–‰ํ•˜์˜€์„ ๋•Œ ์ •์ƒ ์ž‘๋™ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ์ œ๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ ํŒŒ์ผ(my_test.c)๋ฅผ 8๋ฒˆ ์ค‘๋ณต ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์ •์ƒ ์ž‘๋™ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • User-level threading์˜ ๊ฒฝ์šฐ, ์ง์ ‘ ์ž‘์„ฑํ•œ yield/a.c, yield/b.c, yield/c.c 3๊ฐœ์˜ ์ฝ”๋“œ์—์„œ yield()๋ฅผ ๊ต๋Œ€๋กœ ์ž˜ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.

3. ์ง„ํ–‰ ์ƒํ™ฉ

  • Part 2์—์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ loader๋กœ ๋ณต๊ท€ํ•˜๋Š” ๋ฐฉ์•ˆ์€ system call๊ณผ ISR์— ์ฐฉ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„ํ•œ ISR ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๋„˜๊ธฐ๊ณ , setjmp(), longjmp()๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ๋งฅ๋ฝ์„ ์ €์žฅํ•˜๊ณ  ์ƒ๋Œ€ํŽธ์œผ๋กœ jumpํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

  • Part 2์˜ Back-to-back loader์—์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์ˆ˜์ • ์—†์ด loader๋กœ ๋‹ค์‹œ ๋ณต๊ท€ํ•˜๋Š” ๋ฐฉ์•ˆ์€ loader๋ฅผ fork์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ ์„ฑ๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • Part 2์˜ Return to the program loader ์ฝ”๋“œ๋Š” Back-to-back loading ์ฝ”๋“œ์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ด๋ผ ์ƒ๊ฐํ•˜์—ฌ, ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๊ณ  Back-to-back loading๋ถ€ํ„ฐ ๊ตฌํ˜„ ์„ฑ๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • Part 2์˜ User-level threading์˜ ๊ฒฝ์šฐ, ์ตœ๋Œ€ 8๊ฐœ์˜ thread๊นŒ์ง€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋‹จ, static linking ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ ๊ฐ thread๋Š” 0x1000000 ~ 0x5000000์˜ ๊ณต๊ฐ„์„ ๊ท ๋“ฑํ•˜๊ฒŒ ๋‚˜๋ˆˆ ์˜์—ญ์— ์ ์ ˆํžˆ load๋˜๋„๋ก ์ปดํŒŒ์ผ ์˜ต์…˜์„ ์ ์šฉ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

About

A programming assignment I took for grad admission (Nov 2021)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors