ํ๋ก์ธ์ค์ ๋ฌธ์ ์
- ํ๋ก์ธ์ค ์์ฑ์ ์ค๋ฒํค๋๊ฐ ํผ
- ๋ฉ๋ชจ๋ฆฌ ํ ๋น โ fork() โ PCB โ Page mapping table โ โฆ
- Process context switching์ ์ค๋ฒํค๋๊ฐ ํผ
- ๊ธฐ์กด์ ์ฒ๋ฆฌํ๋ ๋ ์ง์คํฐ ์ ๋ณด๋ค ์ ์ฅ, ์ฒ๋ฆฌ ์์ญ ์ ์ฅ, ์๋ก์ด ์ปจํ
์คํธ๋ฅผ ๋ถ์ด์ค๊ณ ..
- ์๋ก ๋ฉ๋ชจ๋ฆฌ์์ ๋ ์ง์คํฐ ๊ฐ ๊ฐ์ ธ์ค๊ณ , ์ฒ๋ฆฌ ์์น ๊ฐ์ ธ์ค๊ณ ..
- ํ๋ก์ธ์ค ๊ฐ์ ํต์ ์ด ์ด๋ ค์
- ํ๋ก์ธ์ค๋ค์ ์์ ํ ๋
๋ฆฝ๋ ์ฃผ์ ๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์์
- ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๋ผ๋ฆฌ ๊ฐ์
๋ถ๊ฐ
- ํ๋ก์ธ์ค ๊ฐ์ ํต์ ์ ์ํด ๋ณ๋์ ๋ฐฉ๋ฒ์ด ํ์
- shared memory, socket, message queue๋ฑ
- ๋ฏธ๋์ด ํ๋ ์ด์ด์ ๊ฒฝ์ฐ
- ์์์ฒ๋ฆฌ
- ์๋ง์ฒ๋ฆฌ
- ์๋ฆฌ ์ฒ๋ฆฌ
- โฆ.
- ๊ธฐ๋ฅ๋ค์ด ๋์์ ์๋์ด ์ด๋ค์ ธ์ผ ํจ!
- โ์ฌ์ค ์ง์ง๋ก ๋์๋ ์๋โ โ โ์๋ถํ โ
- ๊ฐ ๊ธฐ๋ฅ๋ค์ด ํ๋ก์ธ์ค ๊ธฐ๋ฐ โ๋ฉํฐํ์คํนโ์ด๋ผ๋ฉด?
- context switching ํ๊ธฐ์๋ ํ๋ํ๋๊ฐ ๋๋ฌด ๋ฌด๊ฑฐ์
- ์๋ถํ ์ฌ์ด์ ์๊ฐ์ด ๊ธธ์ด์ง ์ ๋ฐ์ ์๋ค!
์ฐ๋ ๋
- ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด์ ๊ณ ์!
- ํ๋ก์ธ์ค๋ณด๋ค โ์์โ ์คํ๋จ์, ์ด์์ฒด์ ๊ฐ ์์
์ โ์ค์ผ์ฅด๋งโ ํ๋ ๋จ์
- CPU ์ค์ผ์ฅด๋ฌ๊ฐ CPU์ ์์
์ ์ ๋ฌํ๋ ๋จ์
- ์ฐ๋ ๋๋ฅผ lightweight process๋ผ๊ณ ๋ถ๋ฆ
- ํ๋ก์ธ์ค์ ์์ฑ ๋ฐ ์๋ฉธ์ ๋ฐ๋ฅธ ์ค๋ฒํค๋ ๊ฐ์
- ๋น ๋ฅธ Context switching, ์์ฌ์ด ํต์
ํ๋ก์ธ์ค๋ ์ฐ๋ ๋ ์ปจํ
์ด๋
- ์ฐ๋ ๋๋ ๊ณง ํจ์! ํ๋ก์ธ์ค๋ ๋ฐ๋์ 1๊ฐ ์ด์์ ์ฐ๋ ๋๋ก ๊ตฌ์ฑ: ๋ฉ์ธ ์ฐ๋ ๋(main)
- ํ๋์ ์ฐ๋ ๋๊ฐ ์ฌ๋ฌ๊ฐ์ ์ฐ๋ ๋๋ฅผ ๊ฐ์ง ์๋ ์์ โ ๋ฉํฐ์ฐ๋ ๋
- ๋ค๋ฅธ ์ฐ๋ ๋๋ค์ ํจ์๋ฅผ ์ฐ๋ ๋๋ก ๋ง๋ค์ด์ค ๊ฒ์ ์์ฒญํ์ฌ ์์ฑ๋จ
- ๊ทธ๋ฆฌ๊ณ ๊ฐ ์ฐ๋ ๋๋ง๋ค TCB(Thead Control Block)์ด ์์ฑ๋๊ณ ํ๋ก์ธ์ค์ ์ํ ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด PCB๋ TCB์ ์ฐ๊ฒฐ๋๋ค.
- ํ๋ก์ธ์ค๋ ์ฐ๋ ๋๋ค์ ๊ณต์ ๊ณต๊ฐ ์ ๊ณต
- ๋ชจ๋ ์ฐ๋ ๋๋ ํ๋ก์ธ์ค์ ์ฝ๋, ๋ฐ์ดํฐ, ํ์ ๊ณต์ โ ์ฐ๋ ๋ ์ฌ์ด์ ํต์ ์ฉ์ด
- โ๋จ, ์คํ๋ง์ ์ฐ๋ ๋ ๋ณ๋ก ๋ณ๋์ ๊ณต๊ฐ์ ์ฌ์ฉโ
- ์ฐ๋ ๋์ ์๋ช
๊ณผ ํ๋ก์ธ์ค์ ์๋ช
- ์ฐ๋ ๋๋ก ๋ง๋ ํจ์ ์ข
๋ฃ๋๋ฉด, ์ฐ๋ ๋ ์ข
๋ฃ
- ์ฐ๋ ๋๊ฐ ์ข
๋ฃ๋๋ฉด TCB๋ ์ ๊ฑฐ
- ํ๋ก์ธ์ค์ ์ํ ๋ชจ๋ ์ฐ๋ ๋๊ฐ ์ข
๋ฃ๋ ๋,
- ํ๋ก์ธ์ค๊ฐ ๊ฐ์ ์ข
๋ฃ๋๋ฉด?
- ๋น์ฐํ ์ฐ๋ ๋๋ ์ข
๋ฃ
- ํ๋ก์ธ์ค๋ ์ฐ๋ ๋๋ค๊ฐ์ ๊ณต์ ์์ ์ ๊ณต
- Data ์์ญ์ ํ์คํ ๊ณต์ ๋จ
- stack ์์ญ์ ๋ณ๊ฐ!
- ์ฐ๋ ๋์ ์คํ ์์๋ ์ ์ ์์
- ๊ณต์ ์์(์ ์ญ๋ณ์)์ ํฉ์ด 0์ด ๋์ง ์๋๋ค!
์ฐ๋ ๋ ์ฅ์ ๋ฐ ๋จ์
- ์ฅ์
- CPU ์๋ต์ฑ ํฅ์
- ์์ ๊ณต์ , ํจ์จ์ฑ ํฅ์
- ๋ค์ค CPU ์ด์ฉ ์ฉ์ด
- ๋จ์
- ๋ชจ๋ ์์์ ๊ณต์ ํ๋ค? โ ํ๋์ ์ฐ๋ ๋๊ฐ ์๋ชป๋๋ฉด ํ๋ก์ธ์ค ์ ์ฒด๊ฐ ์ฃฝ์ ์ ์์!
- ๋๋ฌด ๋ง์ ์ฐ๋ ๋? โ ๋๋ฌด ๋ง์ Context switching ๋ฐ์!
์ฐ๋ ๋ ์ฃผ์๊ณต๊ฐ
- ์ฐ๋ ๋๊ฐ ์์ฑ๋๊ณ ์คํํ๋ ๋์ ์ ๊ทผ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- ์ฐ๋ ๋์ ์ฃผ์๊ณต๊ฐ์ ํ๋ก์ธ์ค์ ์ฃผ์๊ณต๊ฐ ๋ด์ ์์ฑ
- ์ผ๋ฐ ํจ์๊ฐ ์์ง์ ์ธ ๊ด๊ณ๋ผ๋ฉด, ์ฐ๋ ๋๋ side by side ํํ
- ์ฐ๋ ๋ ์ฌ์ ๊ณต๊ฐ
- ์ฐ๋ ๋ ์ฝ๋(Thread code)
- ์ฐ๋ ๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง(Thread local storage)
- ์ฐ๋ ๋ ์คํ(Thread stack)
- ์ฐ๋ ๋ ์ฌ์ด์ ๊ณต์ ๊ณต๊ฐ
- ํ๋ก์ธ์ค ์ฝ๋
- ํ๋ก์ธ์ค์ ๋ฐ์ดํฐ ๊ณต๊ฐ
- ํ๋ก์ธ์ค์ ํ ์์ญ
์ฐ๋ ๋ ๋ผ์ดํ ์ฌ์ดํด
- ํ๋ก์ธ์ค ๋ผ์ดํ ์ฌ์ดํด๊ณผ ๋น์ท โ TCB๋ก ๊ด๋ฆฌ
- ์ฐ๋ ๋์ ์ํ ๋ณํ
- ์ค๋น ์ํ(Ready) - ์ฐ๋ ๋๊ฐ ์ค์ผ์ค ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ
- ์คํ ์ํ(Running) - ์ฐ๋ ๋๊ฐ CPU์ ์ํด ์คํ ์ค์ธ ์ํ
- ๋๊ธฐ ์ํ(Blocked) - ์ฐ๋ ๋๊ฐ ์
์ถ๋ ฅ์ ์์ฒญํ๊ฑฐ๋ sleep()๊ณผ ๊ฐ์ ์์คํ
ํธ์ถ๋ก ์ธํด ์ปค๋์ ์ํด ์ค๋จ๋ ์ํ
- ์ข
๋ฃ ์ํ(Terminated) - ์ฐ๋ ๋๊ฐ ์ข
๋ฃํ ์ํ
Thread operation
- ์ฐ๋ ๋ ์์ฑ
- ์ฐ๋ ๋๋ ์ฐ๋ ๋๋ฅผ ์์ฑํ๋ ์์คํ
ํธ์ถ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ค๋ฅธ ์ฐ๋ ๋ ์์ฑ ๊ฐ๋ฅ
- ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๋ฉด ์๋์ผ๋ก main ์ฐ๋ ๋ ์์ฑ
- ์ฐ๋ ๋ ์ข
๋ฃ
- ํ๋ก์ธ์ค ์ข
๋ฃ์ ์ฐ๋ ๋ ์ข
๋ฃ๋ ๊ตฌ๋ถ
- ํ๋ก์ธ์ค ์ข
๋ฃ
- ํ๋ก์ธ์ค์ ์ด๋ค ์ฐ๋ ๋๋ผ๋ exit() ์์คํ
ํธ์ถ์ ๋ถ๋ฅด๋ฉด ํ๋ก์ธ์ค ์ข
๋ฃ(๋ชจ๋ ์ฐ๋ ๋ ์ข
๋ฃ)
- ๋ฉ์ธ ์ฐ๋ ๋์ ์ข
๋ฃ - ๋ชจ๋ ์ฐ๋ ๋ ์ข
๋ฃ
- ๋ชจ๋ ์ฐ๋ ๋ ์ข
๋ฃ๋๋ฉด ํ๋ก์ธ์ค ์ข
๋ฃ
- ์ฐ๋ ๋ ์ข
๋ฃ
- pthread_exit()์ฒ๋ผ ์ฐ๋ ๋๋ง ์ข
๋ฃํ๋ ํจ์ ํธ์ถ์ ํด๋น ์ฐ๋ ๋๋ง ์ข
๋ฃ
- mainํจ์์์ pthread_exit() ํธ์ถํด๋ ๋ฉ์ธ ์ฐ๋ ๋๋ง ์ข
๋ฃ(๋๋จธ์ง ์ฐ๋ ๋ ์์กด)
- ์ฐ๋ ๋ ์กฐ์ธ(join)
- ์ฐ๋ ๋๊ฐ ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ์ข
๋ฃ๋ ๋๊น์ง ๋๊ธฐ
- ์ฃผ๋ก ๋ถ๋ชจ ์ฐ๋ ๋์์ ์์ ์ฐ๋ ๋์ ์ข
๋ฃ ๋๊ธฐ
- ์ฐ๋ ๋ ์๋ณด(yield)
- ์ฐ๋ ๋๊ฐ ์๋ฐ์ ์ผ๋ก yield()์ ๊ฐ์ ํจ์๋ฅผ ํตํด ์์ ์ ์คํ์ ์ค๋จํ๊ณ ๋ค๋ฅธ ์ฐ๋ ๋๋ฅผ ์ค์ผ์คํ๋๋ก ์ง์
Thread Context
- ์ฐ๋ ๋์ ์คํ์ค์ธ ์ํ์ ๋ณด๋ TCB(Thread Control Block)์ ์ ์ฅ
- TCB(Thread Control Block)
- ์ฐ๋ ๋๊ฐ ์์ฑ๋ ๋, ์ปค๋์ ์ํด ์์ฑ
- ์ฐ๋ ๋๊ฐ ์ข
๋ฃ๋๋ฉด ๊ฐ์ด ์ฌ๋ผ์ง
- ๊ฐ์ข
CPU ๋ ์ง์คํฐ ๊ฐ์ ๊ด๋ฆฌ
- PC: ์คํ์ค์ธ ์ฝ๋ ์ฃผ์
- SP: ์คํ ์ค์ธ ํจ์์ ์คํ ์ฃผ์
- Flag: ํ์ฌ CPU์ ์ํ ์ฃผ์
- ๋๋จธ์ง ๋ฉ๋ชจ๋ฆฌ๋ค์ ์ด์ฐจํผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๋ ์ง์คํฐ ๊ฐ๋ค๋ง ์ ์ฅํ๋ฉด CPU์ ๋ณต๊ทํ ๋ ์ด์ ์ ์ํ๋ก ๋์๊ฐ ์ ์์
Thread Context Swithcing
- ํ์ฌ ์คํ ์ค์ธ ์ฐ๋ ๋๋ฅผ ์ค๋จํ๊ณ ๋ค๋ฅธ ์ฐ๋ ๋์๊ฒ CPU ํ ๋น, ํ์ฌ CPU Context๋ฅผ TCB์ ์ ์ฅํ๊ณ ๋ค๋ฅธ TCB์ ์ ์ฅ๋ ์ปจํ
์คํธ๋ฅผ CPU์ ์ ์ฌ
- CPU ๋ ์ง์คํฐ ์ ์ฅ ๋ฐ ๋ณต๊ท
- ํ์ฌ ์คํ ์ค์ธ ์ฐ๋ ๋ A์ ์ปจํ
์คํธ๋ฅผ TCB-A์ ์ ์ฅ
- TCB์ ์ ์ฅ๋ ์ฐ๋ ๋ B์ ์ปจํ
์คํธ๋ฅผ CPU์ ์ ์ฌ
- CPU๋ ์ฐ๋ ๋ B๊ฐ ์ด์ ์ ์ค๋จ๋์๋ ์์น์์ ์คํ ๊ฐ๋ฅ
- SP ๋ ์ง์คํธ๋ฅผ ๋ณต๊ทํจ์ผ๋ก์ ์์ ์ ์ด์ ์คํ์ ๋์ฐพ๊ฒ ๋จ
- ์คํ์๋ ์ด์ ์ ์ค๋จ๋ ๋ ํจ์์ ๋งค๊ฐ๋ณ์๋ ์ง์ญ๋ณ์๋ค ๊ทธ๋๋ก ์ ์ฅ๋์ด ์์
- ์ปค๋ ์ ๋ณด ์์
- TCB-A์ TCB-B์ ์ฐ๋ ๋ ์ํ ์ ๋ณด๋ CPU ์ฌ์ฉ์๊ฐ ์์
- TCB-A๋ฅผ ์ค๋น๋ฆฌ์คํธ๋ ๋ธ๋ก๋ฆฌ์คํธ๋ก ์ฎ๊น
- TCB-B๋ ์ค๋น๋ฆฌ์คํธ์์ ๋ถ๋ฆฌ
Overhead in context switching
- Context switching์ ์๋นํ ๋น์ผ ์ฐ์ฐ ์ค ํ๋!
- ์์
์ ๋ฐ๊พธ๊ธฐ ์ํด ํ๋ ์์
- CPU๊ฐ ๋ค๋ฅธ ํ ์ผ์ ๋ชปํ๊ณ ๋ค๋ฅธ ์์
์ ๋ฆฌ์์ค๋ฅผ ๋นผ์๊ธด๋ค! โ CPU ์๊ฐ ์๋ชจ
- Context switching์ ๊ทธ ์๊ฐ์ด ๊ธธ๊ฑฐ๋ ์ฆ์ ๊ฒฝ์ฐ ์ปดํจํฐ ์ฒ๋ฆฌ์จ์ด ์ฌ๊ฐํ๊ฒ ์ ํ๋ ์ ์์
- ๋์ผํ ํ๋ก์ธ์ค์ ๋ค๋ฅธ ์ฐ๋ ๋๋ก ์ค์์นญ ๋๋ ๊ฒฝ์ฐ
- ์ปจํ
์คํธ ์ ์ฅ ๋ฐ ๋ณต๊ท
- CPU์ ์ปจํ
์คํธ(PC, SP, ๋ ์ง์คํฐ) TCB์ ์ ์ฅ
- TCB๋ก๋ถํฐ ์ฐ๋ ๋ ์ปจํ
์คํธ๋ฅผ CPU์ ๋ณต๊ท
- ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ฐ๋ ๋๋ก ์ค์์นญ ๋๋ ๊ฒฝ์ฐ
- ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ๊ต์ฒด๋๋ฉด, CPU์ ์คํ๊ณต๊ฐ์ด ๋ฐ๋๋ ํฐ ๋ณํ๋ก ์ถ๊ฐ์ ์ธ ์ค๋ฒํค๋ ๋ฐ์
- ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋
- ์์คํ
๋ด์ ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ๋งคํ ํ
์ด๋ธ์ ์๋ก์ด ํ๋ก์ธ์ค์ ๋งคํ ํ
์ด๋ธ๋ก ๋ณ๊ฒฝ
- ์ถ๊ฐ์ ์ธ ์บ์ ์ค๋ฒํค๋
- ํ๋ก์ธ์ค๊ฐ ๋ฐ๋๊ธฐ ๋๋ฌธ์ CPU ์บ์์ ๋ด๊ธด ์ฝ๋์ ๋ฐ์ดํฐ ๋ฌด๋ ฅํ
- ์ ํ๋ก์ธ์ค์ ์ฐ๋ ๋๊ฐ ์คํ๋๊ธฐ ๋๋ฌธ์ CPU ์บ์ ๋ฏธ์ค ๋ฐ์, ๋ค์ ์ฑ์ฐ๋๋ฐ ์๋นํ ์๊ฐ ์์
Kernel-level thread
- ์ด์์ฒด์ ์์ ๊ด๋ฆฌํ๋ ์ฐ๋ ๋
- ์ปค๋ ์ฐ๋ ๋: ์ปค๋์ด ์ง์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์ฐ๋ ๋
- ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์คํ
ํธ์ถ์ ํตํด ์ปค๋ ๋ ๋ฒจ ์ฐ๋ ๋ ์์ฑ
- ์ปค๋์ด ์ฐ๋ ๋์ ๋ํ ์ ๋ณด(TCB)๋ฅผ ์ปค๋ ๊ณต๊ฐ์ ์์ฑํ๊ณ ์์ โ ์ปค๋์ ์ํด ์ค์ผ์ค
- ์ฐ๋ ๋ ์ฃผ์ ๊ณต๊ฐ(์ฐ๋ ๋ ์ฝ๋์ ๋ฐ์ดํฐ): ์ฌ์ฉ์ ๊ณต๊ฐ์ ์กด์ฌ
- ๋ฉ์ธ ์ฐ๋ ๋๋ ์ปค๋ ์ฐ๋ ๋
- ์์ฉํ๋ก๊ทธ๋จ์ด ์ ์ฌ๋์ด ํ๋ก์ธ์ค๊ฐ ์์ฑ๋ ๋, ์๋์ผ๋ก ์ปค๋์ main ์ฐ๋ ๋ ์์ฑ
- ์์ ์ปค๋ ๋ ๋ฒจ ์ฐ๋ ๋
- ๋ถํ
๋๋ถํฐ ์ปค๋์ ๊ธฐ๋ฅ์ ๋๊ธฐ ์ํด ๋ง๋ค์ด์ง ์ฐ๋ ๋
- ์ปค๋ ์ฝ๋๋ฅผ ์คํํ๋ ์ปค๋ ์ฐ๋ ๋
- ์ฐ๋ ๋ ์ฃผ์๊ณต๊ฐ์ ๋ชจ๋ ์ปค๋ ๊ณต๊ฐ์ ํ์ฑ
- ์ปค๋ ๋ชจ๋์์ ์๋, ์ฌ์ฉ์ ๋ชจ๋์์ ์คํ๋๋ ์ผ์ ์์
User-level thread
- User-space์์ ๊ด๋ฆฌํ๋ ์ฐ๋ ๋
- ์ฌ์ฉ์ ์ฐ๋ ๋: ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํด ๊ตฌํ๋ ์ผ๋ฐ์ ์ธ ์ฐ๋ ๋
- ์์ฉํ๋ก๊ทธ๋จ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ฅผ ํธ์ถํ์ฌ ์ฌ์ฉ์ ๋ ๋ฒจ ์ฐ๋ ๋ ์์ฑ
- ์ฐ๋ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฐ๋ ๋ ์ ๋ณด(U-TCB)๋ฅผ ์ฌ์ฉ์ ๊ณต๊ฐ์ ์์ฑํ๊ณ ์์
- ์ฐ๋ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉ์ ๊ณต๊ฐ์ ์กด์ฌ
- ์ฐ๋ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํด ์ค์ผ์ฅด
- ์ปค๋์ ์ฌ์ฉ์ ๋ ๋ฒจ ์ฐ๋ ๋์ ์กด์ฌ์ ๋ํด ์ ์ ์์ โ ํ๋์ ํ๋ก์ธ์ค๋ก๋ง ์ธ์
- ์ฐ๋ ๋ ์ฃผ์ ๊ณต๊ฐ(์ฐ๋ ๋ ์ฝ๋๋ ๋ฐ์ดํฐ): ์ฌ์ฉ์ ๊ณต๊ฐ์ ์กด์ฌ
Multithreading model
- ๋ฉํฐ ์ฐ๋ ๋์ ๊ตฌํ
- ์์ฉํ๋ก๊ทธ๋จ์์ ์์ฑํ ์ฐ๋ ๋๊ฐ ์์คํ
์์ ์คํ๋๋๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ
- ์ฌ์ฉ์๊ฐ ๋ง๋ ์ฐ๋ ๋๊ฐ ์์คํ
์์ ์ค์ผ์ค๋๊ณ ์คํ๋๋๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ
- ์ฐ๋ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ปค๋์ ์์คํ
ํธ์ถ์ ์ํธ ํ๋ ฅ ํ์
- Many to One โN:1โ model
- N๊ฐ์ ์ฌ์ฉ์ ๋ ๋ฒจ ์ฐ๋ ๋๋ฅผ 1๊ฐ์ ์ปค๋ ๋ ๋ฒจ ์ฐ๋ ๋๋ก ๋งคํ
- One to One โ1:1โ model
- 1๊ฐ์ ์ฌ์ฉ์ ๋ ๋ฒจ ์ฐ๋ ๋๋ฅผ 1๊ฐ์ ์ปค๋ ๋ ๋ฒจ ์ฐ๋ ๋๋ก ๋งคํ
- Many to Many โN:Nโ model
- N๊ฐ์ ์ฌ์ฉ์ ๋ ๋ฒจ ์ฐ๋ ๋๋ฅผ N๊ฐ์ ์ปค๋ ๋ ๋ฒจ ์ฐ๋ ๋๋ก ๋งคํ
๋ฉํฐ ์ฐ๋ ๋์ fork()์ exec()
- ๋ฉํฐ ์ฐ๋ ๋์์ fork() ์์คํ
์ฝ์ ์คํํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
- ์ฌ๋ฌ ์ฐ๋ ๋ ์ค ํ ์ฐ๋ ๋๊ฐ fork()๋ฅผ ํธ์ถ โ ์๋ก์ด ํ๋ก์ธ์ค๋ fork()๋ฅผ โํธ์ถํ ์ฐ๋ ๋๋งโ ๋ณต์
- ํ ์ฐ๋ ๋๊ฐ exec()๋ฅผ ํธ์ถ โ ํ๋ก์ธ์ค ์ ์ฒด๊ฐ ์ฌ๋ผ์ง
- ๊ทธ๋ฌ๋ฉด fork()๊ฐ ๋ชจ๋ ์ฐ๋ ๋๋ฅผ ๋ณต์ ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
- c.f., ๋ช๋ช ์์คํ
์ ์ ์ฒด ์ฐ๋ ๋๋ฅผ ๋ณต์ ํ๋ fork๋ ์ง์ํจโฆ ๊ทธ๋ฌ๋
- fork() ์ดํ exec()๋ฅผ ํธ์ถํ๋ฉด, ๋ชจ๋ ์ฐ๋ ๋๋ฅผ ๋ณต์ ํ ์ด์ ๊ฐ ์์
- fork() ์ดํ exec()๋ฅผ ํธ์ถํ์ง ์๋๋ค๋ฉด, ๋ชจ๋ ์ฐ๋ ๋์ ๋ณต์ ๊ฐ ์๋ฏธ๊ฐ ์์
์์๋๊ธฐํ ๋ฌธ์ : Thread-safe ๊ฐ๋
- ํ๋์ ์์์ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๋์์ ์ ๊ทผ โ ๊ณต์ ๋ฐ์ดํฐ ํผ์ ๋ฌธ์
- Thread-safe
- ๋ฉํฐ ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์ ์ด๋ค ํจ์๋ ๋ณ์, ๊ฐ์ฒด์ ์ฌ๋ฌ ์ฐ๋ ๋๋ก๋ถํฐ ๋์์ ์ ๊ทผ์ด ์ด๋ค์ ธ๋ ํ๋ก๊ทธ๋จ ์คํ์ ๋ฌธ์ ๊ฐ ์์์ ๋ปํจ
- Thread-safe๋ฅผ ์งํค๊ธฐ ์ํด
- Re-entrancy
- ์ด๋ค ํจ์๊ฐ ํ ์ฐ๋ ๋์ ์ํด ์คํ๋๊ณ ์์ ๋, ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ๊ทธ ํจ์๋ฅผ ํธ์ถํ๋๋ผ๋ ๊ฐ๊ฐ์๊ฒ ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ ธ์ผ ํจ
- Thread-local storage
- ๊ณต์ ์์์ ์ฌ์ฉ์ ์ต๋ํ ์ค์ฌ, ๊ฐ๊ฐ์ ์ฐ๋ ๋๋ค๋ง ์ ๊ทผ ๊ฐ๋ฅํ ๊ณต๊ฐ์ ์ฌ์ฉํจ์ผ๋ก์จ ๋์ ์ ๊ทผ์ ๋ง์
- ์ด ๋ฐฉ๋ฒ์ ๋๊ธฐํ ์ํ์ ๊ด๋ จ๋์ด ์๊ณ , ๊ณต์ ์ํ๋ฅผ ํผํ ์ ์์ ๋ ์ฌ์ฉ
- Mutual exclusion
- ๊ณต์ ์์์ ๊ผญ ์ฌ์ฉํด์ผํ ๋, ํด๋น ์์์ ์ ๊ทผ์ ์ธ๋งํฌ์ด ๋ฑ์ ๋ฝ์ผ๋ก ํต์
- Atomic operations
- ๊ณต์ ์์์ ์ ๊ทผํ ๋ ์์ ์ฐ์ฐ์ ์ด์ฉํ๊ฑฐ๋ โ์์์ โ์ผ๋ก ์ ์๋ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํจ์ผ๋ก์จ ์ํธ ๋ฐฐ์ ๋ฅผ ๊ตฌํ
ํ๋ก์ธ์ค์ ์ฐ๋ ๋
- ํ๋ก์ธ์ค๋ ์ฐ๋ ๋๋ค์ ๊ณต์ ๊ณต๊ฐ์ด๋ค
- ์ฐ๋ ๋์ ์ฃผ์ ๊ณต๊ฐ์ด ํ์ฑ๋๊ณ ๊ณต์ ๋จ
- ํ๋ก์ธ์ค๋ ์ด์์ฒด์ ๊ฐ ์์ฉํ๋ก๊ทธ๋จ์ ์ ์ฌํ๋ ๋จ์์ด๊ณ , ์ฐ๋ ๋๋ ์คํ ๋จ์์ด๋ค.
- PCB์ ์ ์ฅ๋ ์ ๋ณด๋ ํ๊ฒฝ ์ปจํ
์คํธ
- TCB์ ์ ์ฅ๋ ์ ๋ณด๋ ์คํ ์ปจํ
์คํธ
- ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํ ์ฐ๋ ๋ ์ค์์นญ๋ณด๋ค ๋์ผํ ํ๋ก์ธ์ค์ ์ํ ์ฐ๋ ๋ ์ค์์นญ์ ์๋๊ฐ ๋ ๋น ๋ฅด๋ค.
- ํ๋ก์ธ์ค์ ๋ชจ๋ ์ฐ๋ ๋๊ฐ ์ข
๋ฃํ ๋ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋๋ค.
์ฐ๋ ๋๋ก ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ฉด
- ๋ณ๋ ฌ ์คํ ๋๋ถ์ ์คํ ์ฑ๋ฅ์ด ์ข์์ง๋ค.
- ์ฐ์ํ ์๋ต์ฑ์ ๊ฐ์ง๋ค.
- ํ ์ฐ๋ ๋๊ฐ ๋ธ๋ก๋์ด๋ ๋ค๋ฅธ ์ฐ๋ ๋๋ฅผ ํตํด ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์๋ต ๊ฐ๋ฅ
- ์๋ฒ ํ๋ก๊ทธ๋จ์ ์ด์ฉํ๋๋ฐ ์ฉ์ด
- ์์คํ
์์ ์ฌ์ฉ์ ํจ์จ์ฑ๋ ์ข์์ง๋ค.
- ์ฐ๋ ๋๋ ํ๋ก์ธ์ค์ ๋นํด ์์ฑ ์ ์ง์ ๋ฉ๋ชจ๋ฆฌ๋ ์์ ์ ๊ฒ ์ฌ์ฉ
- ์์ฉํ๋ก๊ทธ๋จ ๊ตฌ์กฐ์ ๋จ์ํ
- ์์ฉํ๋ก๊ทธ๋จ์ ์์
๊ธฐ์ค์ผ๋ก ์ฌ๋ฌ ํจ์๋ก ๋ถํ
- ๊ฐ ํจ์๋ณ๋ก ์ฐ๋ ๋๋ฅผ ๋ง๋ค์ด ๋์ ์คํ
- ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ ์ฉ์ด, ํ๋ก๊ทธ๋จ์ ๋์ ํ์ฅ์ฑ
- ์์ฑ์ด ์ฝ๊ณ ํจ์จ์ ์ธ ํต์