๋ค์ด๊ฐ๊ธฐ ์ ์
์ด์์ฒด์ ์ ๋์ ๊ณผ์ (Dual-Mode Execution)
- User Mode : ์ผ๋ฐ์ ์์ฉํ๋ก๊ทธ๋จ ๊ตฌ๋ ํ๊ฒฝ
- Kernel Mode : ์ปค๋ ๊ตฌ๋ ํ๊ฒฝ(User Mode์ ๋ฌ๋ฆฌ system call(H/W ๊ด๋ จ) ํธ์ถ ๊ฐ๋ฅ) โ๏ธ PintOS ํ๊ฒฝ
์ฒซ ์ด์์ฒด์ ๊ตฌ๋ ์ ์ด๊ธฐํ ์์ ๋ฐ ๋ถํ ์์ ์ผ๋ก ์ธํด ์ปค๋ ๋ชจ๋๋ก ์์๋๊ณ , ๊ณง๋ฐ๋ก ์ฌ์ฉ์ ๋ชจ๋๋ก ์ ํ๋๋ค. ์ด๋ Kernel Mode์์์ ์์ ์ด ์ปดํจํฐ ์ ๋ฐ์ ์ํฅ์ ์ค ์ ์๋ ์์ ์ด๊ธฐ์ ์ผ๋ฐ ์ฌ์ฉ์์ ์ ๊ทผ์ ์ ํํ๊ธฐ ์ํจ์ด๋ค.
- User Mode์์ 'system call'์ ํธ์ถ
- User Mode์์ ์์ ์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ ์ด์์ฒด์ ์ ์์
Interrupt?
Interrupt(์ธํฐ๋ฝํธ)๋ ์ปดํจํฐ ์์คํ ์์ ๋ฐ์ํ๋ '์ค๋จ ์ ํธ'๋ก CPU๊ฐ ํน์ ํ๋ก๊ทธ๋จ ์คํ ์ '์ ๊น' ์ค๋จ์ํค๊ณ ๋ค๋ฅธ ์์ ์ํ ํ ๊ธฐ์กด ์์ ์ผ๋ก ๋์๊ฐ๊ฒ ํ๋ ๋ฉ์ปค๋์ฆ์ด๋ค. ์๋ฅผ ๋ค์ด, ์ผ์ ํ๋ค๊ฐ ์ ํ๊ฐ ์ธ๋ฆฌ๋ฉด(์ธํฐ๋ฝํธ) ์ ํ๋ฅผ ๋๋ธ ํ์ ๋ค์ ์๋ ํ๋์ผ๋ก ๋์๊ฐ๋ ๊ฒ๊ณผ ์ ์ฌํ๋ค.
Interrupt ๋์ ๊ณผ์
- ์ธํฐ๋ฝํธ ์์ฒญ ๋ฐ์
- ex. ๋คํธ์ํฌ ์นด๋์์ ๋ฐ์ดํฐ ํจํท์ด ๋์ฐฉํ ์๊ฐ์ ์ธํฐ๋ฝํธ ์์ฒญ ๋ฐ์ ๊ฐ๋ฅ
- ํ๋ก๊ทธ๋จ ์ํ ์ค๋จ
- ์์คํ ์์ ์ฑ์ ์ํด 'ํ ์คํ ์ค์ธ ๋ช ๋ น์ด๊ฐ ์๋ฃ๋๋ ์์ '์ ํ๋ก๊ทธ๋จ ์ค๋จ
- ์ํ์ ์ฅ
- ํ๋ก๊ทธ๋จ ์นด์ดํฐ(PC)์ ์ ์ฅ๋ ์ฃผ์์ ์ํ ๋ ์ง์คํฐ ๋ฑ์ ์ค์ ์ ๋ณด๋ฅผ ์ฃผ๋ก '์คํ'์ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ์์ ํ๊ฒ ์ ์ฅ
- ์ธํฐ๋ฝํธ ์ ์ฒ๋ฆฌ ์คํ
- ์ธํฐ๋ฝํธ ์์ธ ํ์
- CPU๋ ์ธํฐ๋ฝํธ ๋ฒกํฐ๋ฅผ ํตํด ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด ์์น๋ฅผ ์ฐพ์์ ๋ฃจํด ์คํ
- ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด(ISR) ์คํ
- ์ธํฐ๋ฝํธ '์์ธ ์ฒ๋ฆฌ'
- ๋ณต์ ๋ฐ ์คํ ์ฌ๊ฐ
- ์คํ์ ์ ์ฅ๋์ด ์๋ PC ๊ฐ๊ณผ ์ํ ๋ ์ง์คํฐ๊ฐ ๋ณต์๋๋ฉฐ ๊ธฐ์กด ์ํ ์ค๋จ๋์๋ ์ง์ ์์ ์คํ ์ฌ๊ฐ
System Call
์์คํ ์ฝ(System Call)์ด๋?
ํ๋ก์ธ์ค๊ฐ ์์คํ ์ ์์์ด๋, ์๋น์ค(H/W)๋ฅผ ํ์๋ก ํ ๊ฒฝ์ฐ ์ด์์ฒด์ ์ ์์ฒญํ๋ ๊ฒ์ ์์คํ ์ฝ์ด๋ผ๊ณ ํ๋ค. ์ ์ ๋ชจ๋์์๋ ์ํ๋ ์ ์๊ณ , ๋ฐ๋์ Kernel Mode๋ก ํธ์ถ(call)ํ์ฌ์ ์ํ๋์ด์ผ ํ๋ค.
์์คํ ์ฝ์ ๋์ ๊ณผ์
User application(process)์์ ์์คํ ์ฝ ํธ์ถ ์
- Process๋ 'Kernel mode'๋ก ์ง์
- OS๋ ๊ฐ ์์คํ ์ฝ์ ๊ณ ์ ๋ฒํธ ํ ๋น ํ ๊ฐ ๋ฒํธ์ ๋ง๋ ์ ์ด ๋ฃจํด ์ ์
- ์ปค๋์ ์๋น์ค ๋ฃจํด ์ฒ๋ฆฌ ํ ๋ค์ ์ฌ์ฉ์ ๋ชจ๋๋ก ์ ํํ์ฌ ๊ธฐ์กด์ ํ๋ก์ธ์ค๊ฐ ๊ณ์ ์คํ๋๋๋ก ํจ
์์คํ ์ฝ ๋ฐ์ ์ ๊ธฐ๋ฅ์ด๋ ์์คํ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ ๋ง์ ์ ๋ณด๊ฐ ๋ด๊ธด '๋งค๊ฐ๋ณ์'๊ฐ ํ์ํ ์ ์๋ค. ๋งค๊ฐ ๋ณ์๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์๋ ์ธ ๊ฐ์ง๊ฐ ์๋ค.
- ๋งค๊ฐ ๋ณ์๋ฅผ CPU ๋ ์ง์คํฐ๋ฅผ ํตํด ์ ๋ฌํจ
- ์๋๊ฐ ๋น ๋ฅด๋ฉฐ, CPU ๋ ์ง์คํฐ์ ์ง์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ฅํจ
- CPU ๋ ์ง์คํฐ์ ๊ฐ์๊ฐ ํ์ ๋์ด ์๊ธฐ์ ๋ค๋ ์ ๋ฌ์๋ ๋ถ์ ํฉ
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํด ์ ๋ฌํจ
- ๋งค๊ฐ๋ณ์๊ฐ ๋ง๊ฑฐ๋ ํฌ๊ธฐ๊ฐ ํด ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ฅ ํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ ์ง์คํฐ์ ์ ๋ฌ
- ๋ฐ์ดํฐ ์์ ์ ํ์ด ์์ด ํจ์จ์
- ์คํ์ ํตํ ์ ๋ฌ
- ํ๋ก๊ทธ๋จ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์คํ์ push(์ ๋ฌ) ํ ์ปค๋์ ์ด ์คํ์์ ๋งค๊ฐ๋ณ์๋ฅผ popํ์ฌ ์ฌ์ฉ
- ์คํ ์์๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ฉ์ด
Priority Scheduling("์ฐ์ ์์๊ฐ ๋์ ์์ ์ด ๋จผ์ ์คํ๋ผ์ผ์ง!")
์ฉ๊ด๋ก๊ฐ 600๋ ์จ๋ฅผ ๋์ด๊ฐ๋ฉด, ์จ๋๋ฅผ ๋ด๋ ค์ผ ํ๋ ์์ ์ด ์ํ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์. ์ด ์์ ์ ์ฐ์ ์์๋ ๋งค์ฐ ๋๋ค. ๊ทธ๋ฐ๋ฐ, ๋ค๋ฅธ ํ์ฐฎ์ ์์ ์ ํ๋๋ผ ์ด ์์ ์ด ํ ์์๋ก ๋ฐ๋ฆฌ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์จ๋๋ฅผ ๋ด๋ฆฌ์ง ๋ชป ํด ๋ํ์ฌ๊ณ ๋ก ์ด์ด์ง ์ ์๋ค. ์ด์ ์ ์ฌํ ์ผ์ด NASA์์ ์ค์ ๋ก ์์๋ค(!).
์ด๋ ๊ฒ ์ค์ํ '์ฐ์ ์์ ์ค์ผ์ฅด๋ง'์ ๋ํด ์์๋ณด์.
Priority Inversion Problem
์ฐ์ ์์๊ฐ ๋์ ์ฐ๋ ๋๊ฐ ์ฐ์ ์์ ๋ฎ์ ์ฐ๋ ๋ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ํ์์ Priority Inversion์ด๋ผ๊ณ ํ๋ค. ์ด๋ฌํ Inversion ๋ฐ์ ์ ์์์ ์ธ๊ธํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ์ ์ ์ ํ ์ฒ๋ฆฌ๊ฐ ํ์๋ค. ์ฌ๋ฌ ๋ฐฉ๋ฒ ์ค Priority๊ฐ ๋์ Thread์ Priority๋ฅผ ๋ฎ์ Thread๊ฐ ๋ฐ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ์ด๋ฅผ 'donation'์ด๋ผ๊ณ ํ๋ค.
Multiple Donation
์ ์ด๋ฏธ์ง์ Thread M, Thread H์ ๊ฐ์ด ์ฌ๋ฌ Thread์์ ํ Thread์ ์ฌ๋ฌ๋ฒ donationํ๋ ์ํฉ์ด๋ค.(Thread L, M, H๋ ๊ฐ๊ฐ Priority Low, Medium, High)
- Thread M, H์ ๊ฐ์ด ์ฌ๋ฌ Thread์์ ํ Thread L์ ์ฌ๋ฌ๋ฒ donation ํ๋ ์ํฉ
- Thread L์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ Thread H๋ถํฐ ์คํ ํ ๋ค์ ์ฐ์ ์์(M)๋ก ๋์ด๊ฐ
Nested Donation
- Thread H๋ lock B๋ฅผ ์์ฒญํ๊ณ โก๏ธ lock B๋ฅผ ์ป์ ๋๊น์ง ๋๊ธฐํ๊ณ , lock B์ Holder์ธ Thread M์ Lock A๋ฅผ ์์ฒญํ๊ณ โก๏ธ ์ป์ ๋๊น์ง ๋๊ธฐ
- Thread H โก๏ธ M โก๏ธ L ์์ผ๋ก H์ ์ฐ์ ์์๊ฐ Thread L, M์๊ฒ ๋ชจ๋ donation ๋์ด์ผ ํจ
๐ ๊ตฌํ ์ค ๋ฐ์ ๊ฐ๋ฅํ ๋ฒ๊ทธ(์ฌ์ง ์ฒจ๋ถ ์์ )
- Thread๊ฐ ์ข
๋ฃ๋์ง ์๊ณ (ํน์ ์๋ก์ด Thread๊ฐ ์์ ์๊ณ ) ๋ฌดํ loop์ ๋น ์ง๋ ๋ฒ๊ทธ
- ์ข ๋ฃ Thread ๋ค์์ ์ฐ๊ฒฐํด์ฃผ๋ ํฌ์ธํฐ๋ฅผ ํ์ธํ ํ์๊ฐ ์์(ํฌ์ธํฐ ์์ ๊ฒฝ์ฐ ๋ฌดํ loop)
- Thread๊ฐ ์ข ๋ฃ ์์ฒด๋ฅผ ๋ชปํ๋ ๊ฒฝ์ฐ๋ ๋ชป ๋ณธ ๊ฑฐ ๊ฐ์
- ํ
์คํธ ์ผ์ด์ค์ Output์ด ๋ฐฐ์ด์ผ ๊ฒฝ์ฐ ํ์์ ์ฐ์ ์์ ๋ณ๋์ด ์๋ ๊ฒฝ์ฐ
- init_priority์ Thread์ ์ด๊ธฐ priority๊ฐ ํ ๋น๋์ด ์ ํ์ฉ๋๋์ง ํ์ธ ํ์
'๐งญ KAIST JUNGLE > Pintos' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[PintOS] User Program - System Call2 (Project 2, TIL) (0) | 2024.05.14 |
---|---|
[PintOS] User Program - System Call (Project 2, TIL) (1) | 2024.05.08 |
[PintOS] User Program - Arguments parsing (Project 2, TIL) (0) | 2024.05.06 |
[PintOS] User Program - ๋ฐฐ๊ฒฝ์ง์(Project 2, TIL) (0) | 2024.05.04 |
[PintOS] Thread - Alarm Clock (Project 1) (0) | 2024.04.29 |