Project 02: Test Code
Implementing a simple kernel-level thread
Due date
2025. 05. 28. 23:59
Notice
ํ๋ก์ ํธ ๋ง๊ฐ์ผ์ด ์ฐ์ฅ๋์์ต๋๋ค.
- GitHub์ 5์ 28์ผ 11:59PM๊น์ง ์ ์ถํ์ธ์.
- ์ง๊ฐ ์ ์ถ์ 5์ 29์ผ 11:59PM๊น์ง ์ด๋ฉ์ผ๋ก ๋ณด๋ด์ธ์.
- ํ๋ก์ ํธ 3์ 29์ผ์ ๊ณต๊ฐ๋ฉ๋๋ค.
์ด๋ฒ ๊ณผ์ ๋ ์ ๊ณต๋ ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค๋ง ์ ํํ ๋์ํ๋ฉด ํต๊ณผ์ ๋๋ค. (ํฌ๊ธฐํ์ง ๋ง์ธ์!)
- ์์ ์ ์ถ๋ ฅ ๋ฉ์์ง๋ ์์์ผ ๋ฟ์ด๋ฏ๋ก ์์ ๋กญ๊ฒ ์์ฑํด๋ ๋ฉ๋๋ค.
- ์ถ๋ ฅ ์ซ์๋ ์์๋ ์ ํํ ์ผ์นํ ํ์ ์์ต๋๋ค.
- ๊ฒฐ๊ณผ๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ฌ๋ฐ๋ฅด๋ฉด ๋ฉ๋๋ค.
- ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๊ฒ ๋์๋ค๋ฉด, ๊ทธ ์ด์ ๋ฅผ ์ํค์ ์์ฑํ์ธ์.
Tips
- ์ค๋ ๋ ๊ฐ์ ๊ณต์ ๋๋ ๊ฒ๊ณผ ๊ณต์ ๋์ง ์๋ ๊ฒ์ ๊ณ ๋ คํ๊ณ ๊ตฌํํ์ธ์.
- ํจ์ ์ฃผ์๋ 0์ผ๋ก ๋ณด์ผ ์ ์์ต๋๋ค.
(gdb) p/x &main_thread
$1 = 0x0
Test 1
- ์ด ํ ์คํธ๋ thread API์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๊ณต์ ์ฌ๋ถ๋ฅผ ๊ฒ์ฆํฉ๋๋ค.
- Thread 0์ ์ ์ญ ๋ณ์๋ฅผ ์์ ํ๊ณ , ๋๋จธ์ง ์ค๋ ๋๋ ์ฆ์ ์ข ๋ฃํฉ๋๋ค.
- Thread 0์ ๋ง์ง๋ง์ ์ข ๋ฃํด์ผ ํ๋ฉฐ, ๋ฉ์ธ ์ค๋ ๋๋ Thread 0์ด ์ํํ ์์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์ด์ผ ํฉ๋๋ค.
[TEST#1]
Thread 1 start
Thread 2 start
Thread 3 start
Thread 1 end
Thread 2 end
Thread 3 end
Thread 0 start
Thread 0 end
TEST#1 Passed
Test 2
- ์ด ํ ์คํธ๋ ์ค๋ ๋๊ฐ ๋ ๊ฐ์ ์ธ์๋ฅผ ์ ํํ ๋ฐ๊ณ ๊ณต์ ์์์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๋์ง ๊ฒ์ฆํฉ๋๋ค.
- ๋ฉ์ธ ์ค๋ ๋๋ ์ค๋ ๋๋ค์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋์ง๋ ํจ๊ป ๊ฒ์ฌํฉ๋๋ค.
[TEST#2]
Thread 0 start, iter=0
Thread 0 end
Thread 1 start, iter=1000
Thread 1 end
Thread 2 start, iter=2000
Thread 2 end
Thread 3 start, iter=3000
Thread 3 end
Thread 4 start, iter=4000
Thread 4 end
TEST#2 Passed
Test 3
- ์ด ํ ์คํธ๋ fork๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ๊ฒ์ฆํฉ๋๋ค.
- fork ์ดํ, ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ๊ธฐ์กด ๋ฉ์ธ ์ค๋ ๋์ ์ฃผ์ ๊ณต๊ฐ์ ์ ์งํ๊ณ , ์์ ํ๋ก์ธ์ค๋ ๋ณ๋์ ์ฃผ์ ๊ณต๊ฐ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
- ์์์ด ๋ถ๋ชจ์ ์ฃผ์ ๊ณต๊ฐ์ ๊ณต์ ํ๋ค๋ฉด ์๋ฌ๋ฅผ ๊ฐ์งํฉ๋๋ค.
[TEST#3]
Thread 0 start
Thread 1 start
Thread 2 start
Thread 3 start
Child of thread 0 start
Child of thread 0 end
Child of thread 1 start
Child of thread 1 end
Child of thread 2 start
Child of thread 2 end
Child of thread 3 start
Child of thread 3 end
Thread 0 end
Thread 1 end
Thread 2 end
Thread 3 end
TEST#3 Passed
Test 4
- ์ด ํ
์คํธ๋ sbrk ํธ์ถ์ ์ค๋ ๋๊ฐ ์ ๋๋ก ์ฒ๋ฆฌํ๋์ง ๊ฒ์ฆํฉ๋๋ค.
- malloc์ ๋ด๋ถ์ ์ผ๋ก sbrk๋ฅผ ํธ์ถํฉ๋๋ค.
- ํ๋์ ์ค๋ ๋๊ฐ ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ ๊ทผํ ๋ ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
- ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๊ฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ๊ฒฝ์ฐ, ์ฃผ์๊ฐ ์ค๋ณต๋์ง ์์์ผ ํฉ๋๋ค.
[TEST#4]
addr 0 at break = 0x88888801000
addr 1 at break = 0x88888801400
addr 2 at break = 0x88888801800
addr 3 at break = 0x88888801c00
addr 4 at break = 0x88888802000
TEST#4 Passed
Test 5
- ์ด ํ ์คํธ๋ ์ค๋ ๋๊ฐ kill ์์คํ ์ฝ์ ์ ๋๋ก ์ฒ๋ฆฌํ๋์ง ๊ฒ์ฆํฉ๋๋ค.
- ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด ๋ชจ๋ ์ค๋ ๋๋ ํจ๊ป ์ข ๋ฃ๋์ด์ผ ํฉ๋๋ค.
- ๋ค๋ฅธ ์ค๋ ๋ ์ค ํ๋๊ฐ ์ข ๋ฃ๋๋ฉด, ๊ทธ ์ค๋ ๋๋ง ์ข ๋ฃ๋์ด์ผ ํฉ๋๋ค.
[TEST#5]
Thread 0 start, pid 29
Thread 1 start, pid 29
Thread 2 start, pid 29
Thread 3 start, pid 29
Thread 4 start, pid 29
Thread 2 end
Thread 0 end
TEST#5 Passed
Test 6
- ์ด ํ ์คํธ๋ exec ์์คํ ์ฝ์ ์ค๋ ๋๊ฐ ์ ๋๋ก ์ฒ๋ฆฌํ๋์ง ๊ฒ์ฆํฉ๋๋ค.
- Thread 0์ thread_fcn ํ๋ก๊ทธ๋จ์ ์คํํฉ๋๋ค.
- exec์ด ํธ์ถ๋๋ฉด, ๋ชจ๋ ์ค๋ ๋๋ ์ข ๋ฃ๋๊ณ ์๋ก์ด ์ด๋ฏธ์ง๋ก ๋์ฒด๋์ด์ผ ํฉ๋๋ค.
[TEST#6]
Thread 0 start
Thread 1 start
Thread 2 start
Thread 3 start
Thread 4 start
Executing...
Thread exec test 0
TEST#6 Passed
Result
$ thread_test
[TEST#1] Passed
[TEST#2] Passed
[TEST#3] Passed
[TEST#4] Passed
[TEST#5] Passed
[TEST#6] Passed
All tests passed. Great job!

