[pintOS] Project2-1. Argument passing

์˜ˆ๋‹ˆยท2021๋…„ 2์›” 18์ผ
1

pintOSํ”„๋กœ์ ํŠธ

๋ชฉ๋ก ๋ณด๊ธฐ
6/6

๐Ÿ“… ๊ธฐ๊ฐ„ : 2021.02.04(๋ชฉ) ~ 2021.02.05(๊ธˆ)


1. ๊ณผ์ œ ๋ชฉํ‘œ

์ปค๋งจ๋“œ ๋ผ์ธ์—์„œ์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„์„œ ์‹คํ–‰์‹œ์ผœ๋ณด์ž!
์ปค๋งจ๋“œ ๋ผ์ธ์˜ ๋ฌธ์ž์—ด์„ ํ† ํฐ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ ๊ฐœ๋ฐœํ•˜์ž!
ํ˜„์žฌ Pintos๋Š” ํ”„๋กœ๊ทธ๋žจ๊ณผ ์ธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.
(ex: $ls โ€“a /* Pintos๋Š” โ€˜ls -aโ€™๋ฅผ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ๋ช…์œผ๋กœ ์ธ์‹)
ํ”„๋กœ๊ทธ๋žจ ์ด๋ฆ„๊ณผ ์ธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์Šคํƒ์— ์ €์žฅ, ์ธ์ž๋ฅผ ํ”„๋กœ๊ทธ๋žจ์— ์ „๋‹ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•ด๋ณด์ž!


2. ๋ฐฐ๊ฒฝ์ง€์‹

2-1. ํ•€ํ† ์Šค์˜ ์‹คํ–‰ ํ๋ฆ„

ํ˜„์žฌ

main() -> run_action() -> ์œ ์ € ํ”„๋กœ๊ทธ๋žจ์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์œ ์ € ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด
-> run_task() -> process_execute() -> thread_create() -> process_wait() -> ์Šค์ผ€์ค„๋˜์—ˆ๋‹ค๋ฉด -> start_process() -> load() -> ๋กœ๋“œ ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด -> user program ์‹คํ–‰ (์‹คํŒจํ–ˆ๋‹ค๋ฉด thread_exit())

๋ณ€๊ฒฝ ํ›„

main() -> run_action() -> ์œ ์ € ํ”„๋กœ๊ทธ๋žจ์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์œ ์ € ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด
-> run_task() -> process_execute() -> ์ปค๋งจ๋“œ ๋ผ์ธ์—์„œ ํ”„๋กœ์„ธ์Šค ์ด๋ฆ„ ํ™•์ธ -> thread_create() -> process_wait() -> ์Šค์ผ€์ค„๋˜์—ˆ๋‹ค๋ฉด -> start_process() -> ์ปค๋งจ๋“œ ๋ผ์ธ Parsing ํ•˜์—ฌ ์ธ์ž ํ™•์ธ -> load() -> ์ธ์ž๋“ค์„ ์Šคํƒ์— ์‚ฝ์ž… -> ๋กœ๋“œ ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด -> user program ์‹คํ–‰ (์‹คํŒจํ–ˆ๋‹ค๋ฉด thread_exit())

์ด๋ ‡๊ฒŒ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ!

2.2 ํ•จ์ˆ˜ ์ธ์ž ์ „๋‹ฌ

  • ํ•จ์ˆ˜ํ˜ธ์ถœ ๋ฐฉ์‹ (80x86)
    - ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ธ์ž ๊ฐ’์€ ์˜ค๋ฅธ์ชฝ -> ์™ผ์ชฝ ์ˆœ์œผ๋กœ ์Šคํƒ์— ์ €์žฅ
    -Return Address : Caller(ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ถ€๋ถ„)์˜ ๋‹ค์Œ ์ˆ˜ํ–‰ ๋ช…๋ น์–ด ์ฃผ์†Œ
    -Callee(ํ˜ธ์ถœ ๋ฐ›์€ ํ•จ์ˆ˜)์˜ ๋ฆฌํ„ด ๊ฐ’์€ rax ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ (์šฐ๋ฆฌ์˜ pintos๋Š” 64bit์ด๋ฏ€๋กœ rax ์ด์šฉ! (32๋น„ํŠธ๋ผ๋ฉด eax))

0๊ฐœ์˜ ๋Œ“๊ธ€