Project 02: Implementing a simple kernel-level thread
Operating System
Due date
2025. 05. 28. 23:59
Overview ๊ฐ์
- ์ด ํ๋ก์ ํธ๋ xv6 ์ด์์ฒด์ ์์ ์ปค๋ ์์ค ์ค๋ ๋(kernel-level thread)์ ๋จ์ํ๋ ๋ฒ์ ์ ๊ตฌํํ๋ ๊ฒ์ด๋ค.
- ์ปค๋ ์์ค ์ค๋ ๋๋ ํ๋์ ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ ์คํ ์ปจํ ์คํธ(๋ ์ง์คํฐ ์ํ, ์คํ)๋ฅผ ๊ฐ์ง๋ฉด์ ์ฃผ์ ๊ณต๊ฐ, ํ์ผ descriptor ๋ฑ์ ์์์ ๊ณต์ ํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
Key Implementation Requirements ํต์ฌ ๊ตฌํ ์๊ตฌ์ฌํญ
- ์๋ก์ด ์์คํ
ํธ์ถ
clone()์ ๊ตฌํํด ์๋ก์ด ์ปค๋ ์์ค ์ค๋ ๋๋ฅผ ์์ฑ - ์๋ก์ด ์์คํ
ํธ์ถ
join()์ ๊ตฌํํด ์ปค๋ ์์ค ์ค๋ ๋ ์ข ๋ฃ ๋๊ธฐ - ์ฌ์ฉ์ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์
thread_create()์thread_join()์ ์์ฑํ์ฌ ์ ์์คํ ํธ์ถ์ ๊ฐ์ kernel/proc.c๋ด์ ๊ด๋ จ ํจ์๋ค์ ์์ ํ์ฌ ์ปค๋ ์์ค ์ค๋ ๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋๋ก ํ ๊ฒ
Special Characteristics ํน์ฑ
์ด xv6 ์ปค๋ ์์ค ์ค๋ ๋๋ ๊ธฐ์กด์ ์ผ๋ฐ์ ์ธ ์ค๋ ๋์ ๋ค์๊ณผ ๊ฐ์ ์ฐจ์ด์ ์ด ์๋ค
- ๊ฐ ์ค๋ ๋๋
clone์์ ์ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ํ์ผ descriptor ํ ์ด๋ธ์ ๋ณต์ฌํ์ฌ ์์ ํ๋ค - ๋ฉ์ธ ์ค๋ ๋๊ฐ
exit()์ ํธ์ถํ๋ฉด ๋ชจ๋ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋ค (ํ๋ก์ธ์ค ์ ์ฒด ์ข ๋ฃ) - ์ด๋ค ์ค๋ ๋๋ผ๋
exit()์ ํธ์ถํ๋ฉด ํด๋น ์ค๋ ๋๋ ์ข ๋ฃ๋๋ค proc๊ตฌ์กฐ์ฒด๋ฅผ ์ค๋ ๋ ์ ์ด ๋ธ๋ก(TCB)๋ก ์ฌ์ฌ์ฉํ ์ ์๋ค
API Details: System calls ์์คํ ์ฝ
int clone(void(*fcn)(void*, void*), void *arg1, void *arg2, void *stack);
- ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์ ๊ณต์ ํ๋ ์๋ก์ด ์ปค๋ ์์ค ์ค๋ ๋๋ฅผ ์์ฑ
fcn: ์ค๋ ๋๊ฐ ์คํํ ํจ์arg1,arg2: ์ค๋ ๋์ ์ ๋ฌ๋ ์ธ์stack: ์ค๋ ๋ ์ฌ์ฉ์ ๊ณต๊ฐ์ ์คํ (ํ์ด์ง ์ ๋ ฌ ํ์, ์ต์ 1 ํ์ด์ง ์ด์)- ์ฑ๊ณต ์ ์ ์ค๋ ๋์ PID ๋ฐํ, ์คํจ ์ -1 ๋ฐํ
int join(void **stack);
- ์์ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๋๊ธฐ
stack: ์ข ๋ฃ๋ ์ค๋ ๋์ ์คํ ์ฃผ์๋ฅผ ์ ์ฅํ ํฌ์ธํฐ- ์ฑ๊ณต ์ ์ข ๋ฃ๋ ์ค๋ ๋์ PID ๋ฐํ, ์คํจ ์ -1 ๋ฐํ
API Details: User Library Functions ์ฌ์ฉ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์
user/thread.h์user/thread.c์ ๊ตฌํ- Makefile์
thread.o๋ฅผ ์ถ๊ฐํ์ฌ ๋งํฌ int thread_create(void (*start_routine)(void *, void *), void *arg1, void *arg2);- ์คํ๊ณผ
clone์ ์ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น - ์ ์ค๋ ๋์ PID ๋ฐํ ๋๋ -1 ๋ฐํ
- ์คํ๊ณผ
int thread_join();- ์ข ๋ฃ๋ ์ค๋ ๋๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ํด๋น ์คํ์ ํด์
- ์ข ๋ฃ๋ ์ค๋ ๋์ PID ๋ฐํ ๋๋ -1 ๋ฐํ
System Call Modifications ์์คํ ์ฝ ์์
๋ค์ ์์คํ ํธ์ถ๋ค์ด ์ค๋ ๋์ ํจ๊ป ์ ์ ์๋ํ๋๋ก ๋ณด์ฅํด์ผ ํจ
fork: ์ค๋ ๋๋ ์ฃผ์ ๊ณต๊ฐ์ ๋ณต์ฌํด์ ์ ์์ ์ผ๋ก ํธ์ถ๋์ด์ผ ํจexec: ๋ชจ๋ ์ค๋ ๋๋ฅผ ์ ๋ฆฌํ๊ณ ์ ํ๋ก์ธ์ค๋ฅผ ์์sbrk: ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ ํ๊ฒ ํ ๋น ๊ฐ๋ฅํด์ผ ํจkill: ์ข ๋ฃ๋๋ ์ค๋ ๋๊ฐ ๋ชจ๋ ์ค๋ ๋๋ฅผ ํจ๊ป ์ข ๋ฃ์์ผ์ผ ํจsleep: ํธ์ถํ ์ค๋ ๋์๋ง ์ํฅ์ ๋ฏธ์ณ์ผ ํจpipe: ๋ชจ๋ ์ค๋ ๋๊ฐ ํ๋ฉด์ ์ถ๋ ฅํ ์ ์์ด์ผ ํจ
Tips for Development ๊ฐ๋ฐ์ ์ํ ํ
๊ธฐ๋ณธ xv6 ์ค์ผ์ค๋ฌ(๋ผ์ด๋ ๋ก๋น)๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ
xv6์
fork,exec,exit,wait์ฝ๋๋ฅผ ๋ฉด๋ฐํ ๋ถ์๊ฒฝ์ ์กฐ๊ฑด ๋ฐฉ์ง๋ฅผ ์ํด ์ ์ ํ ์ ๊ธ ์ฌ์ฉ
Resource ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ์ ํ ํด์ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ํ
Thread์ process์ ์ฐจ์ด๋ฅผ ๋ช ํํ ์ดํดํ ๊ฒ
- ์ด๋ค ์์์ด ๊ณต์ ๋๊ณ ์ด๋ค ์์์ด ๋ ๋ฆฝ์ ์ธ์ง ์ฃผ์ ๊น๊ฒ ๊ตฌ๋ถ
- ์ด ํ๋ก์ ํธ์์ ์ ๊ณต๋๋ ๊ธฐ๋ณธ ์ฝ๋๋ ์ด๋ฏธ ์ผ๋ถ ๋ณ๊ฒฝ๋ ์ฝ๋์ด๋ฉฐ, ๊ทธ ๋ณ๊ฒฝ ๋ด์ฉ์ ์ํค์ ๋ฌธ์ํํด์ผ ํจ
Wiki ์ํค
- Design: ์๊ตฌ์ฌํญ ์ถฉ์กฑ์ ์ํ ๊ตฌํ ์ ๊ทผ ๋ฐฉ์ ์ค๋ช
- Implementation: ์ฃผ์ ์ฝ๋ ์์ ๋ฐ ๊ทธ ๋ชฉ์ ์ค๋ช
- Results: ๊ตฌํ ๊ฒฐ๊ณผ ์ฆ๊ฑฐ ์ ์ (์ปดํ์ผ ๋ก๊ทธ, ์คํ ํ๋ฉด, ํ๋ก๊ทธ๋จ ์ค๋ช ๋ฑ)
- Troubleshooting: ๋ฌธ์ ์ํฉ๊ณผ ํด๊ฒฐ ๊ณผ์ ์์
- Additional content: ํ์ ์ ๊ด๋ จ ์๋ฃ ํฌํจ ๊ฐ๋ฅ
Evaluation ํ๊ฐ
Completeness: xv6 ์์คํ ์ด ์ฌ์์ ๋ง๊ฒ ์ ์ ์๋ํด์ผ ํจ
Wiki & Comment Grading: ์ํค ๋ฌธ์ํ ํ์ง๋ ํ๊ฐ์ ๋ฐ์๋จ. ์ต๋ํ ์์ธํ ์์ฑํ ๊ฒ
Deadline: ๋ง๊ฐ ๊ธฐํ ์์. ๋ง๊ฐ ํ์๋ GitHub ์ฐ๊ธฐ ๊ถํ์ด ์ฒ ํ๋จ
- ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ์ง ๋ง์์ค!
Submission ์ ์ถ
- GitHub๋ฅผ ํตํด ์ฝ๋์ ์ํค๋ฅผ ์ ์ถ
- ๊ณต์ง์ฌํญ ์ฐธ์กฐํ์ฌ ์ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ
- ๋ ํฌ์งํ ๋ฆฌ ์ด๋ฆ์
project02-[student ID]๋ก ์ค์ - ์ํค ํ์ผ ์ด๋ฆ:
05_project02_[class number]_[student ID].pdf
- ์ ์ถ ๋ง๊ฐ์ผ: 2025๋
5์ 25์ผ 23:59
- ๋ง๊ฐ์ผ ์ดํ 2025๋ 5์ 26์ผ 23:59๊น์ง ์ด๋ฉ์ผ ์ ์ถ ๊ฐ๋ฅ. ๋จ, ์ ์์ 50%๋ง ์ธ์ ํจ.

