๐ ์ง๋ฌธ์ WeareSoft๋์ tech-interview๋ฅผ ์ฐธ๊ณ ํ์์ต๋๋ค.
- ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์ฐจ์ด(Process vs Thread)๋ฅผ ์๋ ค์ฃผ์ธ์.
- ๋ฉํฐ ํ๋ก์ธ์ค ๋์ ๋ฉํฐ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
- ์บ์์ ์ง์ญ์ฑ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- Thread-safe์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์. (hint: critical section)
- ๋ฎคํ ์ค์ ์ธ๋งํฌ์ด์ ์ฐจ์ด๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
- ์ค์ผ์ค๋ฌ๊ฐ ๋ฌด์์ด๊ณ , ๋จ๊ธฐ/์ค๊ธฐ/์ฅ๊ธฐ๋ก ๋๋๋ ๊ธฐ์ค์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- CPU ์ค์ผ์ค๋ฌ์ธ FCFS, SJF, SRTF, RR, Priority Scheduling์ ๋ํด ๊ฐ๋ตํ ์ค๋ช ํด์ฃผ์ธ์.
- ๋๊ธฐ์ ๋น๋๊ธฐ์ ์ฐจ์ด๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ต์๋ ๋ฌด์์ด ์๋์ง ๊ฐ๋ตํ ์ค๋ช ํด์ฃผ์ธ์.
- ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- ๊ต์ฐฉ์ํ(๋ฐ๋๋ฝ, Deadlock)์ ๊ฐ๋ ๊ณผ ์กฐ๊ฑด์ ์ค๋ช ํด์ฃผ์ธ์.
- ์ฌ์ฉ์ ์์ค ์ค๋ ๋์ ์ปค๋ ์์ค ์ค๋ ๋์ ์ฐจ์ด๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
- ์ธ๋ถ ๋จํธํ์ ๋ด๋ถ ๋จํธํ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- Context Switching์ด ๋ฌด์์ธ์ง ์ค๋ช ํ๊ณ ๊ณผ์ ์ ๋์ดํด์ฃผ์ธ์.
- Swapping์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
ํ๋ก๊ทธ๋จ(Program)์ด๋ ํ์ผ์ด ์ ์ฅ ์ฅ์น์ ์ ์ฅ๋์ด ์์ง๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ์์ง ์์ ์ ์ ์ธ ์ํ๋ฅผ ๋งํ๋ค.
ํ๋ก์ธ์ค(Process)๋ ์ด์์ฒด์ ๋ก๋ถํฐ ์์คํ ์์์ ํ ๋น๋ฐ๋ ์์ ์ ๋จ์๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์ ์คํ๋๊ณ ์๋ ํ๋ก๊ทธ๋จ์ ์ธ์คํด์ค(๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด)๋ฅผ ์๋ฏธํ๋ค.
ํ ๋น๋ฐ๋ ์์คํ ์์์ ์
- CPU ์๊ฐ
- ์ด์๋๊ธฐ ์ํด ํ์ํ ์ฃผ์ ๊ณต๊ฐ
- Code, Data, Stack, Heap์ ๊ตฌ์กฐ๋ก ๋์ด ์๋ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
ํ๋ก์ธ์ค์ ํน์ง
- ํ๋ก์ธ์ค๋ ๊ฐ๊ฐ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ(Code, Data, Stack, Heap์ ๊ตฌ์กฐ)์ ํ ๋น๋ฐ๋๋ค.
- ํ๋ก์ธ์ค๋น ์ต์ 1๊ฐ์ ์ค๋ ๋(๋ฉ์ธ ์ค๋ ๋)๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ๊ฐ ํ๋ก์ธ์ค๋ ๋ณ๋์ ์ฃผ์ ๊ณต๊ฐ์์ ์คํ๋๋ฉฐ, ํ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ณ์๋ ์๋ฃ๊ตฌ์กฐ์ ์ ๊ทผํ ์ ์๋ค.
- ํ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์์์ ์ ๊ทผํ๋ ค๋ฉด ํ๋ก์ธ์ค ๊ฐ์ ํต์ (IPC, Inter-Process Communication)์ ์ฌ์ฉํด์ผ ํ๋ค.
์ค๋ ๋(Thread)๋ ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์์์ ์ด์ฉํ๋ ์คํ์ ๋จ์๋ก ํ๋ก์ธ์ค์๋ ๋ค๋ฅธ ๋ ์์ ์คํ ๋จ์ ๊ฐ๋ ์ด๋ค. ์ค๋ ๋๋ ํ๋ก์ธ์ค์ ์ฝ๋์ ์ ์๋ ์ ์ฐจ์ ๋ฐ๋ผ ์คํ๋๋ ํน์ ํ ์ํ ๊ฒฝ๋ก์ด๋ค.
์ค๋ ๋์ ํน์ง
- ์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด์์ ๊ฐ๊ฐ Stack ์์ญ๋ง ๋ฐ๋ก ํ ๋น๋ฐ๊ณ Code, Data, Heap ์์ญ์ ๊ณต์ ํ๋ค.
- ์ค๋ ๋๋ ํ ํ๋ก์ธ์ค ๋ด์์ ๋์๋๋ ์ฌ๋ฌ ์คํ์ ํ๋ฆ์ผ๋ก, ํ๋ก์ธ์ค ๋ด์ ์ฃผ์ ๊ณต๊ฐ์ด๋ ์์๋ค(ํ ๊ณต๊ฐ ๋ฑ)์ ๊ฐ์ ํ๋ก์ธ์ค ๋ด์ ์ค๋ ๋๋ผ๋ฆฌ ๊ณต์ ํ๋ฉด์ ์คํ๋๋ค.
- ๊ฐ์ ํ๋ก์ธ์ค ์์ ์๋ ์ฌ๋ฌ ์ค๋ ๋๋ค์ ๊ฐ์ ํ ๊ณต๊ฐ์ ๊ณต์ ํ๋ค. ๋ฐ๋ฉด์ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ๊ทผํ ์ ์๋ค.
- ๊ฐ๊ฐ์ ์ค๋ ๋๋ ๋ณ๋์ ๋ ์ง์คํฐ์ ์คํ์ ๊ฐ๊ณ ์์ง๋ง, ํ ๋ฉ๋ชจ๋ฆฌ๋ ์๋ก ์ฝ๊ณ ์ธ ์ ์๋ค.
- ํ ์ค๋ ๋๊ฐ ํ๋ก์ธ์ค ์์์ ๋ณ๊ฒฝํ๋ฉด, ๋ค๋ฅธ ์ด์ ์ค๋ ๋(sibling thread)๋ ๊ทธ ๋ณ๊ฒฝ ๊ฒฐ๊ณผ๋ฅผ ์ฆ์ ๋ณผ ์ ์๋ค.
- [OS] ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์ฐจ์ด - Heee's Development Blog
- ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์ฐจ์ด - ๊ฐ๋ฐ์ฅ
๋ฉํฐ ํ๋ก์ธ์ค๋ ํ๋์ ์์ฉํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ก ๊ตฌ์ฑํ์ฌ ๊ฐ ํ๋ก์ธ์ค๊ฐ ํ๋์ ์์ ์ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๊ฒ์ด๋ค.
์ฅ์
: ์ฌ๋ฌ ๊ฐ์ ์์ ํ๋ก์ธ์ค ์ค ํ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๊ทธ ์์ ํ๋ก์ธ์ค๋ง ์ฃฝ๋ ๊ฒ ์ด์์ผ๋ก ๋ค๋ฅธ ์ํฅ์ด ํ์ฐ๋์ง ์๋๋ค.๋จ์
- Context Switching ๊ณผ์ ์์ ์บ์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ธฐํ ๋ฑ ๋ฌด๊ฑฐ์ด ์์ ์ด ์งํ๋๊ณ ๋ง์ ์๊ฐ์ด ์๋ชจ๋๋ ๋ฑ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
- ํ๋ก์ธ์ค๋ ๊ฐ๊ฐ์ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ๋น๋ฐ์๊ธฐ ๋๋ฌธ์ ํ๋์ ํ๋ก๊ทธ๋จ์ ์ํ๋ ํ๋ก์ธ์ค๋ค ์ฌ์ด์ ๋ณ์๋ฅผ ๊ณต์ ํ ์ ์๋ค.
๋ฉํฐ ์ค๋ ๋๋ ํ๋์ ์์ฉํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ก ๊ตฌ์ฑํ๊ณ ๊ฐ ์ค๋ ๋๋ก ํ์ฌ๊ธ ํ๋์ ์์ ์ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๊ฒ์ด๋ค. ์๋์ฐ, ๋ฆฌ๋ ์ค ๋ฑ ๋ง์ ์ด์์ฒด์ ๋ค์ด ๋ฉํฐ ํ๋ก์ธ์ฑ์ ์ง์ํ๊ณ ์์ง๋ง ๋ฉํฐ ์ค๋ ๋๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๊ณ ์๋ค. ์น ์๋ฒ๋ ๋ํ์ ์ธ ๋ฉํฐ ์ค๋ ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด๋ค.
์ฅ์
- ํ๋ก์ธ์ค๋ฅผ ์์ฑํ์ฌ ์์์ ํ ๋นํ๋ ์์คํ ์ฝ์ด ์ค์ด๋ค์ด ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
- ์ค๋ ๋ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ๊ฐ๋จํด์ง๊ณ ์์คํ ์์ ์๋ชจ๊ฐ ์ค์ด๋ค๊ฒ ๋๋ค.
- ์ค๋ ๋ ์ฌ์ด์ ์์ ๋์ด ์์ Context Switching์ด ๋น ๋ฅด๋ค.
- ์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด์ Stack ์์ญ์ ์ ์ธํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ํต์ ์ ๋ถ๋ด์ด ์ ๋ค.
๋จ์
- ์ฃผ์ ๊น์ ์ค๊ณ๊ฐ ํ์ํ๋ฉฐ, ๋๋ฒ๊น ์ด ๊น๋ค๋กญ๋ค.
- ๋จ์ผ ํ๋ก์ธ์ค ์์คํ ์ ๊ฒฝ์ฐ ํจ๊ณผ๋ฅผ ๊ธฐ๋ํ๊ธฐ ์ด๋ ต๋ค.
- ํ๋ก์ธ์ค ๋ฐ์์ ์ค๋ ๋ ๊ฐ๊ฐ์ ์ ์ดํ ์ ์๋ค.
- ๋ฉํฐ ์ค๋ ๋์ ๊ฒฝ์ฐ ์์ ๊ณต์ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.(๋๊ธฐํ ๋ฌธ์ )
- ํ๋์ ์ค๋ ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ ์ฒด ํ๋ก์ธ์ค๊ฐ ์ํฅ์ ๋ฐ๋๋ค.
๋ฉํฐ ํ๋ก์ธ์ค ๋์ ๋ฉํฐ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ์์์ ํจ์จ์ฑ ์ฆ๋
ํ๋ก์ธ์ค ๊ฐ์ Context Switching ์ ๋จ์ํ CPU ๋ ์ง์คํฐ ๊ต์ฒด๋ฟ๋ง ์๋๋ผ RAM๊ณผ CPU ์ฌ์ด์ ์บ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ๋ฐ์ดํฐ๊น์ง ์ด๊ธฐํ๋๋ฏ๋ก ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค. ๋ฉํฐ ํ๋ก์ธ์ค๋ก ์คํ๋๋ ์์ ์ ๋ฉํฐ ์ค๋ ๋๋ก ์คํํ ๊ฒฝ์ฐ, ํ๋ก์ธ์ค๋ฅผ ์์ฑํ์ฌ ์์์ ํ ๋นํ๋ ์์คํ ์ฝ์ด ์ค์ด๋ค์ด ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๋ ๋ฆฝ์ ์ธ ํ๋ก์ธ์ค์ ๋ฌ๋ฆฌ ์ค๋ ๋ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ๊ฐ๋จํด์ง๊ณ ์์คํ ์์ ์๋ชจ๊ฐ ์ค์ด๋ค๊ฒ ๋๋ค.
- ์ฒ๋ฆฌ ๋น์ฉ ๊ฐ์ ๋ฐ ์๋ต ์๊ฐ ๋จ์ถ
์ค๋ ๋๋ Stack ์์ญ์ ์ ์ธํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค ๊ฐ์ ํต์ (IPC)๋ณด๋ค ์ค๋ ๋ ๊ฐ์ ํต์ ์ ๋น์ฉ์ด ์ ์ผ๋ฏ๋ก ์์ ๋ค ๊ฐ์ ํต์ ์ ๋ถ๋ด์ด ์ค์ด๋ ๋ค.
Context Switching ์ ์ค๋ ๋๋ Stack ์์ญ๋ง ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค ๊ฐ์ ์ ํ ์๋๋ณด๋ค ์ค๋ ๋ ๊ฐ์ ์ ํ ์๋๊ฐ ๋น ๋ฅด๋ค.
Context Switching
CPU์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋์๊ฐ๋ฉด์ ์์ ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ด ๊ณผ์ ์ Context Switching๋ผ ํ๋ค. ๋์ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ๋ฅผ ํ๋ฉด์ ํด๋น ํ๋ก์ธ์ค์ ์ํ(Context)๋ฅผ ๋ณด๊ดํ๊ณ , ๋๊ธฐํ๊ณ ์๋ ๋ค์ ์์์ ํ๋ก์ธ์ค๊ฐ ๋์ํ๋ฉด์ ์ด์ ์ ๋ณด๊ดํ๋ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ณต๊ตฌํ๋ ์์ ์ ๋งํ๋ค.
๋๊ธฐํ ๋ฌธ์ (Synchronization Issue)
๋ฉํฐ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๊ฐ์ ์ค๋ ๋ ์ค ์ด๋ค ๊ฒ์ด ์ด๋ค ์์๋ก ์คํ๋ ์ง ๊ทธ ์์๋ฅผ ์ ์ ์๋ค. ๋ง์ฝ A ์ค๋ ๋๊ฐ ์ด๋ค ์์์ ์ฌ์ฉํ๋ค๊ฐ B ์ค๋ ๋๋ก ์ ์ด๊ถ์ด ๋์ด๊ฐ ํ B ์ค๋ ๋๊ฐ ํด๋น ์์์ ์์ ํ์ ๋, ๋ค์ ์ ์ด๊ถ์ ๋ฐ์ A ์ค๋ ๋๊ฐ ํด๋น ์์์ ์ ๊ทผํ์ง ๋ชปํ๊ฑฐ๋ ๋ฐ๋ ์์์ ์ ๊ทผํ๊ฒ ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ด์ฒ๋ผ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ํจ๊ป ์ ์ญ ๋ณ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์๋ ์ถฉ๋์ ๋๊ธฐํ ๋ฌธ์ ๋ผ๊ณ ํ๋ค.
Context Switching์ ๋ํ ์์ธํ ๋ด์ฉ์ #14. Context Switching์ด ๋ฌด์์ธ์ง ์ค๋ช ํ๊ณ ๊ณผ์ ์ ๋์ดํด์ฃผ์ธ์. ์ฐธ๊ณ !
- [OS] ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์ฐจ์ด - Heee's Development Blog
- ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์ฐจ์ด - ๊ฐ๋ฐ์ฅ
์บ์ ๋ฉ๋ชจ๋ฆฌ๋ CPU์ ์ฒ๋ฆฌ ์๋์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ์ฐจ์ด๋ก ์ธํ ๋ณ๋ชฉํ์์ ์ํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ณ ์ ๋ฒํผ ๋ฉ๋ชจ๋ฆฌ์ด๋ค. ์ฃผ๊ธฐ์ต์ฅ์น์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ก์ธ์คํ๋ ค๋ฉด ๋น๊ต์ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋๋ฐ ์ด๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ก์ธ์คํ ์ ์๋๋ก ์ค๊ฐ์ ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ ๊ฒ์ด๋ค. ์ฃผ๊ธฐ์ต์ฅ์น ๋ด์์ ์์ฃผ ์ฝ๊ณ ์ฐ๋ ๋ฐ์ดํฐ์ ์ผ๋ถ๋ฅผ ์บ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ๋ฌ์ ์๋ ์ฐจ์ด๋ฅผ ์ค์ด๊ณ , ์ฃผ๊ธฐ์ต์ฅ์น์ CPU ๊ฐ ์ ํธ ๊ตํ์ ์ด์ฉ๋๋ Memory Bandwidth๋ฅผ I/O ์ฌ์ฉ์ ์ง์คํ ์ ์๊ฒ ๋ง๋ ๋ค.
์บ์ ๋ฉ๋ชจ๋ฆฌ๋ ์ ์ค๋ฅ (Hit rate)
์ ๊ทน๋ํํ๊ธฐ ์ํด ๋ฐ์ดํฐ ์ง์ญ์ฑ(Locality)์ ์๋ฆฌ
๋ฅผ ์ฌ์ฉํ๋ค. ์ง์ญ์ฑ์ ์ ์ ์กฐ๊ฑด์ผ๋ก๋ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ์ฝ๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ท ๋ฑํ๊ฒ ์ก์ธ์คํ์ง ์๋๋ค๋ ํน์ฑ์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ค. ์ฆ, ์ง์ญ์ฑ(Locality)
์ด๋ ๊ธฐ์ต ์ฅ์น ๋ด์ ์ ๋ณด๋ฅผ ๊ท ์ผํ๊ฒ ์ก์ธ์คํ๋ ๊ฒ์ด ์๋ ์ด๋ ํ์๊ฐ์ ํน์ ๋ถ๋ถ์ ์ง์ค์ ์ผ๋ก ์ฐธ์กฐํ๋ ํน์ฑ์ด๋ค.
๋ฐ์ดํฐ ์ง์ญ์ฑ์ ๋ํ์ ์ผ๋ก ์๊ฐ์ ์ง์ญ์ฑ(Temporal Locality)
, ๊ณต๊ฐ์ ์ง์ญ์ฑ(Spatial Locality)
, ์์ฐจ์ ์ง์ญ์ฑ(Sequential Locality)
์ผ๋ก ๋๋๋ค.
์๊ฐ์ ์ง์ญ์ฑ(temporal locality): CPU๊ฐ ํ ๋ฒ ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ๋ค์ ์ฐธ์กฐํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
๊ณต๊ฐ์ ์ง์ญ์ฑ(spatial locality): CPU๊ฐ ์ฐธ์กฐํ ๋ฐ์ดํฐ์ ์ธ์ ํ ๋ฐ์ดํฐ ์ญ์ ์ฐธ์กฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
์์ฐจ์ ์ง์ญ์ฑ(sequential locality): ๋ถ๊ธฐ๊ฐ ๋ฐ์ํ์ง ์๋ ํ ๋ช ๋ น์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ์์๋๋ก ์ธ์ถ/์คํ๋๋ค.
์ง์ญ์ฑ์ ์ด๋๊น์ง๋ ๊ฒฝํฅ์ ๋ํ ๊ฒ์ด๋ฏ๋ก ํญ์ ์บ์์ ๋์ ์ ์ค๋ฅ ์ ๋ณด์ฅํด ์ฃผ์ง๋ ์๋๋ค.
์ ์ค๋ฅ (Hit rate)
์บ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ์ปดํจํฐ ์์คํ ์ CPU๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๊ธฐ ์ ๋จผ์ ์บ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ํ๋ ๋ฐ์ดํฐ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค. ์ด๋ ํ์ํ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ค(hit), ์๋ ๊ฒฝ์ฐ๋ฅผ ์คํจ(miss)๋ผ๊ณ ํ๋ค.
์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ์บ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ฐพ์ ํ๋ฅ ์ ์ ์ค๋ฅ (hit rate)์ด๋ผ๊ณ ํ๋ค.
์บ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฑ๋ฅ์ ์ ์ค๋ฅ ์ ์ํด ๊ฒฐ์ ๋๋ค.
- [OS] ์บ์(Cache) ? - ์ด์ ๋ณด๋ค ํ ๊ฑธ์ ๋
- ์บ์(Cache) ๋ฉ๋ชจ๋ฆฌ์ ์ง์ญ์ฑ::ํ๋์จ์ด - ์ ์ด๋ถ
- ์บ์ - ์ํค๋ฐฑ๊ณผ
- ์บ์ ๋ฉ๋ชจ๋ฆฌ(cache memory)์ ๊ฐ์ ์ ๋ฆฌ - ์ฝ์๋ผ์๋ฝ's BLOG
์ค๋ ๋ ์์ (Thread-safe)
์ด๋ ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ค ํจ์๋ ๋ณ์, ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผํด๋ ํ๋ก๊ทธ๋จ ์คํ์ ๋ฌธ์ ๊ฐ ์์์ ๋ปํ๋ค. ์ฆ, ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๋์์ ๋์ผํ ์ฝ๋๋ฅผ ์คํ์์ผฐ์ ๋ ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ๊ฒ์ ๋งํ๋ค.
import threading
from threading import Thread
def increase_count():
global count
for _ in range(1000000):
count += 1
if __name__=="__main__":
count = 0
# ์ค๋ ๋ ์์ฑ
thread_a = Thread(target=increase_count, name="thread a")
thread_b = Thread(target=increase_count, name="thread b")
# ์ค๋ ๋ ์คํ
thread_a.start()
thread_b.start()
# ์ค๋ ๋ ์ข
๋ฃ
thread_a.join()
thread_b.join()
print("์ต์ข
count:", count)
๋ค์์ ์ค๋ ๋ ์์ ํ์ง ์์ ๊ฒฝ์ฐ์ ์ฝ๋์ด๋ค. ์ฌ์ฉ์๊ฐ ์ํ๋ ๊ฒฐ๊ณผ๋ ์ค๋ ๋๊ฐ ํจ์๋ฅผ ์คํํ ์์ 1000000์ ๊ณฑํ ๊ฐ์ด count์ ๊ฐ์ด ๋๋ ๊ฒ์ด๋ค. ํ์ง๋ง ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ฉด, count๋ 2000000๊ฐ ์๋ 1448523์ด ๋์จ๋ค. (์คํํ ๋๋ง๋ค ๊ฐ์ด ๋ฌ๋ผ์ง๋ค)
์ ๊ทธ๋ด๊น? ๋ฐ๋ก ๋ ์ค๋ ๋๊ฐ count ๋ณ์๋ฅผ ๊ณต์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋ ๊ณต์ ์์์ ์ ๊ทผํ๋ ์ฝ๋ ์์ญ์ ์๊ณ ์์ญ(critical section)
์ด๋ผ๊ณ ํ๋ฉฐ, ๋ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ์๊ณ ์์ญ์ ์ ๊ทผํ๋ ๊ฒ์ ๋ง๋ ๊ฒ์ ์ํธ ๋ฐฐ์ (mutual exclusion)
๋ผ๊ณ ํ๋ค.
ํ์ด์ฌ์์๋ threading ๋ชจ๋์ ์๋ Lock ๊ฐ์ฒด๋ก ์ํธ ๋ฐฐ์ ๋ฅผ ์ํฌ ์ ์๋ค. ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ต์ข count๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ 2000000์ด ๋์จ๋ค.
import threading
from threading import Thread
def increase_count():
lock.acquire()
global count
for _ in range(1000000):
count += 1
lock.release()
if __name__=="__main__":
count = 0
# ์ค๋ ๋ ๋ฝ ์์ฑ
lock = threading.Lock()
# ์ค๋ ๋ ์์ฑ
thread_a = Thread(target=increase_count, name="thread a")
thread_b = Thread(target=increase_count, name="thread b")
# ์ค๋ ๋ ์คํ
thread_a.start()
thread_b.start()
# ์ค๋ ๋ ์ข
๋ฃ
thread_a.join()
thread_b.join()
print("์ต์ข
count:", count)
- ์ค๋ ๋ ์์ - ์ํค๋ฐฑ๊ณผ
- [OS] Lecture 6. Process Synchronization and Mutual Exclusion (1/7) - Introduction / ์ด์์ฒด์ ๊ฐ์ - HPC Lab. KOREATECH
์ํธ๋ฐฐ์ (Mutual Exclusion, Mutex)
๋ ํ ์ค๋ ๋/ํ๋ก์ธ์ค๊ฐ ์๊ณ ์์ญ์ ์์ผ๋ฉด ๋ค๋ฅธ ์ค๋ ๋/ํ๋ก์ธ์ค๊ฐ ๋ชป ๋ค์ด์ค๋๋ก ๋ง๋ ๊ฒ์ ๋งํ๋ค. ์ํธ๋ฐฐ์ ๋ ๋ค์๊ณผ ๊ฐ์ด ์ํ๋๋ค.
- ์๊ณ ์์ญ ์ง์ ์ ๋ค๋ฅธ ์ค๋ ๋/ํ๋ก์ธ์ค๊ฐ ์๊ณ ์์ญ์ ์์ ์๋์ง ๊ฒ์ฌํ๋ค.
- ์๋ค๋ฉด ์๊ณ ์์ญ์ ์ง์ ํ์ฌ ๊ณต์ ์์์ ์ ๊ทผํ๋ค. ์๋ค๋ฉด ๊ธฐ๋ค๋ฆฐ๋ค.
- ๋๋๋ฉด ์๊ณ ์์ญ์ ๋ฒ์ด๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ์๊ณ ์์ญ์ ๋ฒ์ด๋ฌ์์ ์๋ฆฐ๋ค.
์ธ๋งํฌ์ด(Semaphore)
๋ ํ์ฌ ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋ ์ค๋ ๋/ํ๋ก์ธ์ค์ ์๋ฅผ ๋ํ๋ด๋ ๊ฐ์ ๋์ด ์ํธ๋ฐฐ์ ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ๋งํ๋ค. ์ธ๋งํฌ์ด๋ ๋ณ์๋ก ์์ด ์๋ ์ ์ S(์ฌ๋ฌ ๊ฐ๊ฐ ์กด์ฌ ๊ฐ๋ฅ)์, ํจ์๋ก ์ด๊ธฐํ ์ฐ์ฐ, P(๊ฒ์ฌ), V(์ฆ๊ฐ) ์ฐ์ฐ์ด ์์ผ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ด ์ํ๋๋ค.
- ๋ณ์ S๋ฅผ ์ด๊ธฐํ ์ฐ์ฐ์ ํตํด ์ด๊ธฐํ ์ํจ๋ค.
- P ํจ์๋ฅผ ์คํํ์ฌ S๊ฐ 0๋ณด๋ค ํฐ์ง ๊ฒ์ฌํ๋ค.
- ๋ง์ฝ 0๋ณด๋ค ํฌ๋ค๋ฉด, S๋ฅผ 1 ๊ฐ์์ํค๊ณ ์๊ณ ์์ญ์ ์ง์ ํ์ฌ ๊ณต์ ์์์ ์ ๊ทผํ๋ค.
- ํฌ์ง ์๋ค๋ฉด, ์ค๋ ๋/ํ๋ก์ธ์ค๋ฅผ Ready Queue์ ๋ฃ์ด ๋๊ธฐ์ํจ๋ค.
- ์๊ณ ์์ญ์์ ๋์จ ์ค๋ ๋/ํ๋ก์ธ์ค๋ V ํจ์๋ฅผ ์คํํ์ฌ Ready Queue์ ์ค๋ ๋/ํ๋ก์ธ์ค๊ฐ ์๋์ง ์ฒดํฌํ๋ค. ๋ง์ฝ ์๋ค๋ฉด, ๊ทธ ์ค 1๊ฐ๋ฅผ ์๊ณ ์์ญ์ ์ง์ ์ํจ๋ค. ์๋ค๋ฉด, S๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
- ๋ฎคํ ์ค(Mutex)์ ์ธ๋งํฌ์ด(Semaphore)์ ์ฐจ์ด - Worth spreading
- [OS] Lecture 6. Process Synchronization and Mutual Exclusion (1/7) - Introduction / ์ด์์ฒด์ ๊ฐ์ - HPC Lab. KOREATECH
- [OS] Lec 6. Process Synchronization and Mutual Exclusion (5/7) - Semaphore (OS supported Sol. 2) - HPC Lab. KOREATECH
์ค์ผ์ค๋ฌ๊ฐ ๋ฌด์์ด๊ณ , ๋จ๊ธฐ/์ค๊ธฐ/์ฅ๊ธฐ๋ก ๋๋๋ ๊ธฐ์ค์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์์คํ
๋ด์๋ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์กด์ฌํ๋ค. ์ด ๋ ์๊ฐ(time)๊ณผ ๊ณต๊ฐ(space) ์ฆ, ์์์ ํ ๋นํ ํ๋ก์ธ์ค๋ฅผ ์ ํํด์ผ ํ๋๋ฐ, ์ด ์ญํ ์ ๋งก์ ๊ฒ์ ์ค์ผ์ค๋ฌ
๋ผ๊ณ ํ๋ค.
์ค์ผ์ค๋ฌ์ ๋ชฉ์ ์ ์์คํ ์ฑ๋ฅ ํฅ์์ด๋ฉฐ ๋ํ์ ์ธ ์์คํ ์ฑ๋ฅ ์งํ๋ก ์๋ต์๊ฐ(response time), ์์ ์ฒ๋ฆฌ๋(throughput), ์์ ํ์ฉ๋(resource utilization)์ด ์๋ค. ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค์ํ ์ฑ๋ฅ ์งํ๋ฅผ ๊ณ ๋ คํ์ฌ ์ค์ผ์ค๋ฌ๋ฅผ ์ ํํ๋ค.
์ค์ผ์ค๋ฌ๋ ๋ฐ์ํ๋ ๋น๋์ ํ ๋นํ๋ ์์์ ๋ฐ๋ผ ์ฅ๊ธฐ/์ค๊ธฐ/๋จ๊ธฐ ์ค์ผ์ค๋ฌ๋ก ๋๋ ์ ์๋ค.
์ฅ๊ธฐ ์ค์ผ์ค๋ฌ(Long-term Scheduler)
๋ ์์คํ
์ ์ ์ถํ ์์
์ ๊ฒฐ์ ํ๋ Job Scheduling(Job โ created)์์ ์ฌ์ฉํ๋ฉฐ, ์์คํ
๋ด์ ํ๋ก์ธ์ค ์๋ฅผ ์กฐ์ ํ๋ค. ์ด ๋ ์ค์ํ ๊ฒ์ CPU๋ I/O๋ ๋ชจ๋ ์จ์ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด์ I/O bounded์ compute-bounded ํ๋ก์ธ์ค๋ค์ ์ ์์ด์ ์ ํํด์ผ ํ๋ค.
์ค๊ธฐ ์ค์ผ์ค๋ฌ(Mid-term Scheduler)
๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๊ฒฐ์ ํ๋ Memory Allocation(suspended ready โ ready)์์ ์ฌ์ฉํ๋ค.
๋จ๊ธฐ ์ค์ผ์ค๋ฌ(Short-term Scheduler)
๋ ํ๋ก์ธ์๋ฅผ ํ ๋น ๋ฐ์ ํ๋ก์ธ์ค๋ฅผ ๊ฒฐ์ ํ๋ Process Scheduling(ready โ running)์์ ์ฌ์ฉํ๋ฉฐ, ๊ฐ์ฅ ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ฏ๋ก ๋งค์ฐ ๋นจ๋ผ์ผ ํ๋ค.
์๋ต์๊ฐ vs ์์ ์ฒ๋ฆฌ๋ vs ์์ ํ์ฉ๋
์๋ต์๊ฐ(response time)
: ์์ ์์ฒญ์ผ๋ก๋ถํฐ ์๋ต์ ๋ฐ์ ๋๊น์ง์ ์๊ฐ์์ ์ฒ๋ฆฌ๋(throughput)
: ๋จ์ ์๊ฐ ๋์ ์๋ฃ๋ ์์ ์ ์์์ ํ์ฉ๋(resource time)
: ์ฃผ์ด์ง ์๊ฐ๋์ ์์์ด ํ์ฉ๋ ์๊ฐ
I/O Bounded ํ๋ก์ธ์ค vs Compute-bounded ํ๋ก์ธ์ค
I/O Bounded ํ๋ก์ธ์ค
: I/O ๋๊ธฐ์๊ฐ์ด ๊ธด ํ๋ก์ธ์คCompute-bounded ํ๋ก์ธ์ค
: CPU ์ฌ์ฉ์๊ฐ์ด ๊ธด ํ๋ก์ธ์ค
์ค์ผ์ค๋ง์ ๋จ๊ณ
CPU ์ค์ผ์ค๋ฌ์ธ FCFS, SJF, SRTF, RR, Priority Scheduling์ ๋ํด ๊ฐ๋ตํ ์ค๋ช ํด์ฃผ์ธ์.
์ค์ผ์ค๋ง ์ ์ฑ
์ค์ผ์ค๋ง ์ ์ฑ (scheduling policy)์ ๋ฐ๋ผ ์ค์ผ์ค๋ฌ๋ฅผ ์ ์ /๋น์ ์ ๊ณผ ์ ์ /๋์ ์ฐ์ ์์๋ก ๋๋ ์ ์๋ค.
-
๋น์ ์ ์ค์ผ์ค๋ง(Non-preemptive scheduling)
: ํ ๋น ๋ฐ์ ์์์ ์ค์ค๋ก ๋ฐ๋ฉํ ๋๊น์ง ์ฌ์ฉํ๋ค. ์ด๋ Context Switching ๋ถํ๊ฐ ์ ๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ์ฐ์ ์์๊ฐ ๋์ ํ๋ก์ธ์ค๊ฐ ๋ค์ด์ฌ ๊ฒฝ์ฐ ์ฐ์ ์์๊ฐ ์ญ์ ๋์ด ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค์ ์ฒ๋ฆฌ ์๊ฐ์ด ๋์ด๋ ํ๊ท ์๋ต์๊ฐ์ด ์ฆ๊ฐํ๋ค๋ ๋จ์ ์ด ์๋ค. -
์ ์ ์ค์ผ์ฅด๋ง(Preemptive Scheduling)
: ํ์์ ์ํด ์์์ ๋นผ์๊ธธ ์ ์๋ค. ๋น์ ์ ์ค์ผ์ค๋ง๊ณผ ๋ค๋ฅด๊ฒ Context Switching ๋ถํ๊ฐ ํฌ์ง๋ง, ์๋ต์ฑ์ด ๋์ผ๋ฏ๋ก real-time system, time-sharing system์ ์ ํฉํ๋ค. -
์ ์ ์ฐ์ ์์(Static Priority)
: ํ๋ก์ธ์ค ์์ฑ ์ ๊ฒฐ์ ๋ ์ฐ์ ์์๊ฐ ์ ์ง๋๋ค. ์ด๋ ๊ตฌํ์ ์ฝ๊ฒ ํ๊ณ , Context Switching์ด ๋ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๋ถํ๊ฐ ์ ๋ค. ํ์ง๋ง ์์คํ ํ๊ฒฝ ๋ณํ์ ๋ํ ๋์์ด ์ด๋ ต๋ค. -
๋์ ์ฐ์ ์์(Dynamic Priority)
: ํ๋ก์ธ์ค์ ์ํ ๋ณํ์ ๋ฐ๋ผ ์ฐ์ ์์๋ฅผ ๋ณ๊ฒฝํ๋ค. ๊ตฌํ์ด ๋ณต์กํ์ง๋ง ์์คํ ํ๊ฒฝ ๋ณํ์ ์ ์ฐํ๊ฒ ๋์์ด ๊ฐ๋ฅํ๋ค.
๋ํ์ ์ธ ์ค์ผ์ค๋ฌ
FCFS(First Come First Service)
๋ ๋น์ ์ ์ค์ผ์ค๋ฌ๋ก, Ready Queue์ ๋จผ์ ๋์ฐฉํ ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ๋ค. ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ด ์ผ๊ด ์ฒ๋ฆฌ ์์คํ
์ ์ ํฉํ๋ค. ํ์ง๋ง ๋ง์ฝ ์ํ์๊ฐ์ด ๊ธด ํ๋ก์ธ์ค๊ฐ ๋จผ์ ๋์ฐฉํ๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋๊ธฐ์๊ฐ์ด ๊ธธ์ด์ง๋ Convoy Effect๋ก ์ธํด ํ๊ท ์๋ต์๊ฐ์ด ๊ธธ๋ค๋ ๋จ์ ์ด ์๋ค.
RR(Round Robin)
์ ์ ์ ์ค์ผ์ค๋ฌ๋ก, Ready Queue์ ๋จผ์ ๋์ฐฉํ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ๋ค๋ ์ ์์ FCFS์ ๊ฐ์ง๋ง ์์ ์ฌ์ฉ ์๊ฐ(time quantum)์ด ์๋ค๋ ์ ์์ ์ฐจ์ด๊ฐ ์๋ค. ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ ์๊ฐ์ด ์ง๋๋ฉด ์์์ ๋ฐ๋ฉํ๊ฒ ํ์ฌ ํน์ ํ๋ก์ธ์ค์ ์์ ๋
์ ์ ๋ฐฉ์งํ๋ค.
SJF(Shortest Job First)
๋ ๋น์ ์ ์ค์ผ์ค๋ฌ๋ก, CPU burst time์ด ๊ฐ์ฅ ์์ ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ๋ค. ๊ฐ์ฅ ์คํ์๊ฐ์ด ์ ์ ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋๊ธฐ ์๊ฐ์ ์ค์ผ ์ ์์ง๋ง, ์คํ์๊ฐ์ ์์ธกํ๋ค๋ ์ ์์ ๋นํ์ค์ ์ด๋ฉฐ ๊ณ์ํด์ ์งง์ ํ๋ก์ธ์ค๋ง ์ฒ๋ฆฌํ๋ฏ๋ก ๊ธด ํ๋ก์ธ์ค๋ ๋ค๋ก ๋ฐ๋ฆฐ๋ค๋ ๋จ์ ์ด ์๋ค.
SRTF(Shortest Remaining Time First)
๋ ์ ์ ์ค์ผ์ค๋ฌ๋ก, ์์ฌ ์คํ ์๊ฐ์ด ๋ ์ ์ ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ๋ค. SJF์ ์ฅ์ ์ ๊ทน๋ํ ํ์ผ๋, ํ๋ก์ธ์ค ์์ฑ ์ ์ด ์คํ ์๊ฐ ์์ธก์ด ํ์ํ๊ณ ์์ฌ ์๊ฐ์ ๊ณ์ ์ถ์ ํด์ผ ํด์ overhead๊ฐ ํฌ๊ณ ๊ตฌํ ๋ฐ ์ฌ์ฉ์ด ๋นํ์ค์ ์ด๋ค.
Priority Scheduling
์ ๊ฐ ํ๋ก์ธ์ค์ ์ง์ ๋ ์ฐ์ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ๋ค. ์ด ๋ฐฉ์์ ๋จ์ ์ ๊ณ์ํด์ ์ฐ์ ์์๊ฐ ๋์ ํ๋ก์ธ์ค๊ฐ ๋ค์ด์ค๋ฉด ๊ทธ ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ๋ฏ๋ก ๋ฎ์ ํ๋ก์ธ์ค๋ ๋ค๋ก ๋ฐ๋ฆฌ๋ starvation ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ ์ผ์ ์๊ฐ ์ด์ ๊ธฐ๋ค๋ฆฌ๋ฉด ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ๋์ฌ์ฃผ๋ aging ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
- [OS] Lecture 5. Process Scheduling (2/4) - FCFS, RR / ์ด์์ฒด์ ๊ฐ์ - HPC Lab. KOREATECH
- [OS] Lecture 5. Process Scheduling (3/4) - SPN, SRTN, HRRN / ์ด์์ฒด์ ๊ฐ์ - HPC Lab. KOREATECH
- CPU Scheduling, Process ์ดํดํ๊ธฐ - ์ด์ฉ์ง ์ค๋์
๋๊ธฐ๋ ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ํ์์ผ ๋ค์ ์์ฒญ์ ์งํํ๋ ๋ฐฉ์์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ๋๊น์ง ๋๊ธฐํด์ผํ๋ค. ๋๊ธฐ๋ ์ง๊ด์ ์ธ ๊ตฌ์กฐ์ด์ง๋ง ๋นํจ์จ์ ์ด๋ค.
๋น๋๊ธฐ๋ ์์ฒญ ๊ฒฐ๊ณผ์ ๊ด๊ณ ์์ด ๋ฐ๋ก ๋ค์ ์์ฒญ์ ์ํํ๊ณ , ๊ฒฐ๊ณผ๋ ์ฝ๋ฐฑ
ํจ์๋ฅผ ํตํด ๋ฐ๋๋ค. ๋น๋๊ธฐ๋ ์ค๊ณ๊ฐ ๋ณต์กํ์ง๋ง ํจ์จ์ ์ด๋ค.
Blocking, Non-Blocking
Blocking ๊ณผ Non-Blocking์ ๊ฒฐ๊ณผ์ ๋ํ ๊ด์ ๋ณด๋ค๋ System Call(์ง์ ์ ์ดํ ์ ์๋ ๋์์ ์ฒ๋ฆฌ)
์ ๊ด์ ์ผ๋ก ์ดํดํ ์ ์๋ค. Blocking์ System Call ์ด ์๋ฃ๋ ๋๊น์ง Waiting Queue์์ ๋๊ธฐํ๋ค. Non-Blocking์ System Call์ด ์๋ฃ์ ์๊ด์์ด ์์ ์ ์์
์ ์งํํ๋ค.
- ๋๊ธฐ(Synchronous) ์์ ๊ณผ ๋น๋๊ธฐ(Asynchronous) ์์ , ๊ทธ๋ฆฌ๊ณ ๋ธ๋ฝ(Blocking) ๊ณผ ๋๋ธ๋ฝ(Non-Blocking) ์ ๊ฐ๋ - Jins' Dev Inside
- Synchronous(๋๊ธฐ) Vs Asynchronous(๋น๋๊ธฐ) - Nesoy Blog
- [์ฉ์ด์ ๋ฆฌ] ๋๊ธฐ๋ฐฉ์&๋น๋๊ธฐ๋ฐฉ์ ๋น๊ต - ๊ณ ๊ตฌ๋ง
- ๋๊ธฐ๋ฐฉ์, ๋น๋๊ธฐ๋ฐฉ์ - fromzoo
์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ต์ด ํ์ํ๋ค.
์ค์
ํ๋ก์ธ์ค๊ฐ ์คํ๋๊ธฐ ์ํด์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ์ผํ๋ค. ์คํ๋์ด์ผ ํ๋ ์ฌ๋ฌ ํ๋ก์ธ์ค ์ค, ๊ธฐ์กด์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ํ๋ก์ธ์ค๋ฅผ ๋ณด์กฐ ๊ธฐ์ต์ฅ์น (HDD, SSD) ๋ก ๋ณด๋ด๋ ๊ฒ์ swap-out, ๋ณด์กฐ ๊ธฐ์ต์ฅ์น์ ์๋ ํ๋ก์ธ์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ๊ฒ์ swap-in ์ด๋ผ๊ณ ํ๋ค. ์ด๋ค ํ๋ก์ธ์ค๋ฅผ swap-out ์ํฌ์ง์ ๋ํ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก๋ round-robin ์ด ์๋ค.
๋ ์์ธํ ์ค๋ช ์ 15. Swapping์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์์ ์ฐธ๊ณ !
์์ถ
๋ฉ๋ชจ๋ฆฌ์ ํ๋ก์ธ์ค๋ค์ ์ฌ๋ฆฌ๋ค๋ณด๋ฉด ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ๋น ๊ณต๊ฐ(free) ์ด ์๊ธด๋ค. ์ด ๊ณต๊ฐ์ fragmentation(๋จํธํ) ์ด๋ผ๊ณ ํ๋ค. ํ์ฌ ๋ฉ๋ชจ๋ฆฌ์์ ํ๋ก์ธ์ค์ ๋จํธํ๋ฅผ ํ์ ํ๊ณ ํ๋ก์ธ์ค๊ฐ ์ฐ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ํ ๋น๋๊ฒ ๋จํธํ๋ฅผ ์์ ๋ ๋ฐฉ๋ฒ์ ์์ถ์ด๋ผ ํ๋ค. ์์ถ์ ํจ์จ์ ์ด์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ข์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ด ์๋๋ค.
ํ์ด์ง
๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ํ๋ก์ธ์ค๋ฅผ ํ ๋นํ์ง ์๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ด์ง๋ผ๋ ๋จ์๋ก ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋๋ ์ ํ์ด์ง์ ํ๋ก์ธ์ค๋ฅผ ์ฌ๋ฆฌ๋ ๋ฐฉ๋ฒ์ด๋ค. ํ๋ก์ธ์ค๊ฐ ํ์ด์ง ํฌ๊ธฐ๋ณด๋ค ํฌ๋ค๋ฉด ์ฌ๋ฌ ํ์ด์ง๋ฅผ ์ฌ์ฉํ๋ค. ํ์ด์ง ํฌ๊ธฐ๋ณด๋ค ์์ ํ๋ก์ธ์ค๊ฐ ํ ๋น๋๋ฉด ๋ด๋ถ์ ์ผ๋ก ๊ณต๊ฐ์ด ๋จ๋ ๋ด๋ถ ๋จํธํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ธ๊ทธ๋ฉํ ์ด์
ํ์ด์ง์ ๋ฌผ๋ฆฌ์ ๋จ์๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ด๋ค๋ฉด, ์ธ๊ทธ๋ฉํ ์ด์ ์ ๋ ผ๋ฆฌ์ ๋จ์๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋๋ค. ์ด๋ฅผ ์ํด ์ธ๊ทธ๋ฉํ ์ด์ ํ ์ด๋ธ์ ์ฌ์ฉํ๊ณ , ํ ์ด๋ธ์๋ ์์์ฃผ์์ธ base ์ ์ต๋ ํฌ๊ธฐ์ธ limit ๊ฐ ํฌํจ๋์ด ์๋ค. ์ธ๊ทธ๋ฉํ ์ด์ ์ ์ธ๊ทธ๋ฉํธ ๊ฐ์ ํ ๋น๋์ง ์์ ๊ณต๊ฐ์ด ๋จ๋ ์ธ๋ถ ๋จํธํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- [CS ๊ธฐ์ด - ์ด์์ฒด์ ] ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ต - deannn.log
- ์ค์ํ์ด๋? - ์ํ์ฐ๊ฐ ๋ง๋๋ ์ธ์
- [์ด์์ฒด์ (OS)] 14. ์ธ๊ทธ๋ฉํ ์ด์ - ๋์ ๋์
๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ณด๋ค ํฐ ํ๋ก์ธ์ค๋ ์ด๋ป๊ฒ ํด์ผ ์คํ์ด๋ ๊น? ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก, ํ๋ก์ธ์ค์์ ํ์ํ ๋ถ๋ถ๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค ์คํ์ด ๊ฐ๋ฅํ๊ฒ ๋์ํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ผ๊ณ ํ๋ค. ํ์ด์ง์ ์ธ๊ทธ๋ฉํ ์ด์ ์ค ์ฃผ๋ก ํ์ด์ง๋ฅผ ์ด์ฉํ๋ Demand Paging ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
Demand Paging ๋ ํ๋ก์ธ์ค์์ ํ์ฌ ํ์ํ ํ์ด์ง๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ฅผ ์ํ ํ์ด์ง ํ ์ด๋ธ์ ๊ธฐ์กด์ ํ ์ด๋ธ์์ valid ์ modified ๊ฐ ์ถ๊ฐ์ ์ผ๋ก ํ์ํ๋ค.
valid ๋ ํด๋น ํ์ด์ง๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ์ฉ๋๊ณ ์๋์ง๋ฅผ ๋ํ๋ธ๋ค. ํ์ด์ง๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๊ฒฝ์ฐ (valid == 0) ๋ฅผ page fault ๋ผ๊ณ ํ๋ค. ์๋์ ๊ณผ์ ์ผ๋ก ํ์ด์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๋ค.
- ํด๋น ํ์ด์ง valid bit ํ์ธ
- valid ๊ฐ 0 ์ด๋ฉด CPU ์ธํฐ๋ฝํธ, ํด๋น ISR ๋ก ์ด๋
- ISR ์์ backing store ๋ฅผ ํ์ํ์ฌ ํด๋น ํ๋ก์ธ์ค์ ํ์ด์ง ์ฐพ์
- ํด๋น ํ์ด์ง๋ฅผ ๋น ํ๋ ์์ ํ ๋น
- ํ์ด์ง ํ ์ด๋ธ ๊ฐฑ์ (valid 1 ๋ก ๋ณ๊ฒฝ)
- ๋ค์ ํ๋ก์ธ์ค ์คํ
์ฌ๋ฌ ํ๋ก์ธ์ค์ ํ์ํ ํ์ด์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ๊ฒ์ ํจ์จ์ ์ด๋ค. ํ์ง๋ง ๊ฒฐ๊ตญ ํ์ ๋ ์์์ ์ฐ๋ค๋ณด๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฝ์ฐจ๋ ์์ ์ด ์๊ธด๋ค. ์ด ๋ ์ด๋ค ํ์ด์ง๋ฅผ ๋ด๋ฆด์ง Page Replacement ๋ฅผ ํ๋จํด์ผ ํ๋ค.
๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ ํ์ด์ง๊ฐ ๋ค์ ๋ด๋ ค๊ฐ๋ฉด victim page ๋ผ๊ณ ํ๋๋ฐ, modified bit ๋ฅผ ํ์ธํ์ฌ ํ์ด์ง๊ฐ ์์ ๋์ง ์์ (modified == 0) ํ์ด์ง ์ค ๋๋คํ๊ฒ ํน์ ๊ฐ์ฅ ๋จผ์ ์ฌ๋ผ์จ ํ์ด์ง๋ฅผ ๋ด๋ฆด ์ ์๋ค.
๊ต์ฐฉ์ํ๋, ๋ ๊ฐ ์ด์์ ์์ ์ด ์๋ก ์๋๋ฐฉ์ ์์ ์ด ๋๋๊ธฐ ๋ง์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ์ ์ผ๋ก ์๋ฌด๊ฒ๋ ์๋ฃ๋์ง ๋ชปํ๋ ์ํ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๊ต์ฐฉ์ํ์ ์กฐ๊ฑด์ ์๋์ ๊ฐ๋ค.
- ์ํธ๋ฐฐ์ (Mutual exclusion) : ํ๋ก์ธ์ค๋ค์ด ํ์๋ก ํ๋ ์์์ ๋ํด ๋ฐฐํ์ ์ธ ํต์ ๊ถ์ ์๊ตฌํ๋ค.
- ์ ์ ๋๊ธฐ(Hold and wait) : ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ ์์์ ๊ฐ์ง ์ํ์์ ๋ค๋ฅธ ์์์ ๊ธฐ๋ค๋ฆฐ๋ค.
- ๋น์ ์ (No preemption) : ํ๋ก์ธ์ค๊ฐ ์ด๋ค ์์์ ์ฌ์ฉ์ ๋๋ผ ๋๊น์ง ๊ทธ ์์์ ๋บ์ ์ ์๋ค.
- ์ํ๋๊ธฐ(Circular wait) : ๊ฐ ํ๋ก์ธ์ค๋ ์ํ์ ์ผ๋ก ๋ค์ ํ๋ก์ธ์ค๊ฐ ์๊ตฌํ๋ ์์์ ๊ฐ์ง๊ณ ์๋ค.
ํ์ฌ ๋๋ถ๋ถ์ ์ด์์ฒด์ ๋ค์ ๊ต์ฐฉ์ํ๋ฅผ ๋ง๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ์ฌ, ์ด์์ฒด์ ๋ง๋ค ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๊ต์ฐฉ์ํ์ ๋์ํ๋ค. ์ฃผ์ ์ ๊ทผ ๋ฐฉ์์ ์๋ฐฉ
, ํํผ
, ๋ฌด์
, ๋ฐ๊ฒฌ
, ํ๋ณต
๋ฑ์ด ์๋ค. ์ด ์ค์์ ์๋ฐฉ์ ์์ ๊ต์ฐฉ์ํ์ ์กฐ๊ฑด
์ค ํ๋๋ฅผ ์ ๊ฑฐํ๋ ๋ฐฉ์์ผ๋ก ์งํ๋๋ฉฐ, ํํผ๋ ๋ถ๊ฐ์ ์ธ ๊ต์ฐฉ์ํ ํํผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค. ๋ํ ํ๋ณต์ ์ํด์๋ "๊ต์ฐฉ์ํ์ ์๋ ํ๋ก์ธ์ค๋ค์ ํ๋์ฉ ์ข
๋ฃํด๊ฐ๋ ๋ฐฉ๋ฒ"๊ณผ "์ฌ์ฉ๋๋ ์์์ด ์ ์ ํ๋ก์ธ์ค ๋ฑ์ ์์ฃผ๋ก ์์์ ์ ์ ํ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ"์ด ์ฐ์ธ๋ค.
Dining Philosophers ๋ฌธ์ ๋ฅผ ๋ ์ฌ๋ฆฌ๋ฉด, ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
- ๊ต์ฐฉ ์ํ - ์ํค๋ฐฑ๊ณผ
- [OS] ๊ต์ฐฉ์ํ๋ ๋ฌด์์ธ๊ฐ? - ์ฝ๋ฉํฉํ ๋ฆฌ
- KOCW ์ด์์ฒด์ 8: ์์ฌํ๋ ์ฒ ํ์ ๋ฌธ์ , ํด๊ฒฐ ์ฝ๋(Dining Philosopher Problem) - ํ์ Qriosity Log
์ฌ์ฉ์ ์์ค ์ค๋ ๋๋, ์ ์ ๋ ๋ฒจ์์ ์์ฑ๋๊ณ ๋์ํ๋ ์ค๋ ๋์ด๋ค. ์ปค๋์ด ์ ๊ณตํ๋ pthread์ ๊ฐ์ ์ค๋ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ ๋๋ฅผ ๋ง๋ค๊ณ , ์ฌ์ฉ์ ๋จ์์ ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๋ค๋ ํน์ง์ ๊ฐ์ง๋ค.
์ฌ์ฉ์ ์์ค ์ค๋ ๋๋ ์ค์ผ์ค๋ง ๊ฒฐ์ ์ด๋ ๋๊ธฐํ๋ฅผ ์ํด ์ปค๋์ ํธ์ถํ์ง ์๊ณ ์ฌ์ฉ์ ์์ค์ ์ค๋ ๋ ์ค์ผ์ค๋ฌ๋ฅผ ์ด์ฉํ๋ค. ๋ฐ๋ผ์ (์ฌ์ฉ์/์ปค๋)๋ชจ๋ ์ ํ๊ณผ Context Switch๊ฐ ์์ด, ์ธํฐ๋ฝํธ ๋ฐ์ ์์๋ ์ค๋ฒํค๋๊ฐ ์ ๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์ ์์ค ์ค๋ ๋๋ ์์คํ ์ ๋ฐ์ ๊ฑธ์น ์ค์ผ์ค๋ง ์ฐ์ ์์๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์, ๋ฌด์จ ์ค๋ ๋๊ฐ ๋จผ์ ๋์ํ ์ง ๋ชจ๋ฅธ๋ค๋ ๋จ์ ๊ณผ ํ๋ก์ธ์ค์ ์ํ ์ค๋ ๋ ์ค I/O ์์ ๋ฑ์ ์ํด ํ๋๋ผ๋ ๋ธ๋ฝ(block)์ด ๊ฑธ๋ฆฐ๋ค๋ฉด ์ ์ฒด ์ค๋ ๋๊ฐ ๋ธ๋ฝ๋๋ค๋ ๋จ์ ๋ ์กด์ฌํ๋ค.
์ปค๋ ์์ค ์ค๋ ๋๋, ์ปค๋ ๋ ๋ฒจ์์ ์์ฑ๋๋ ์ค๋ ๋๋ก, ์ปค๋์ด ์ง์ ๊ด๋ฆฌํ๋ค๋ ํน์ง์ด ์๋ค. ํ๋์ ํ๋ก์ธ์ค๋ ์ ์ด๋ ํ๋์ ์ปค๋ ์ค๋ ๋๋ฅผ ๊ฐ์ง๊ฒ ๋๋ฉฐ, ํ๋ก๊ทธ๋๋จธ ์์ฒญ์ ๋ฐ๋ผ ์ค๋ ๋๋ฅผ ์์ฑํ๋๋ผ๋, ์ค์ผ์ค๋งํ๋ ์ฃผ์ฒด๊ฐ ์ปค๋์ด๋ฉด ์ปค๋ ๋ ๋ฒจ(Kernel Level) ์ค๋ ๋๋ผ๊ณ ํ๋ค.
์ปค๋ ์์ค ์ค๋ ๋๋ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค. ํ๋ก์ธ์ค์ ์ค๋ ๋๋ค์ ๋ช๋ช ํ๋ก์ธ์์ ํ๊บผ๋ฒ์ ๋์คํจ์น(dispatch) ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฉํฐํ๋ก์ธ์ ํ๊ฒฝ์์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋์ํ๋ค. ๋ํ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ ์ถ๋ ฅ ์์ ์ด ๋ค ๋๋ ๋๊น์ง ๋ค๋ฅธ ์ค๋ ๋๋ฅผ ์ฌ์ฉํด ๋ค๋ฅธ ์์ ์ ์งํํ ์ ์๋ค. ์ปค๋์ด ๊ฐ ์ค๋ ๋๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, ์ปค๋์ด ์ง์ ์ค๋ ๋๋ฅผ ์ ๊ณตํด ์ฃผ๊ธฐ ๋๋ฌธ์ ์์ ์ฑ๊ณผ ๋ค์ํ ๊ธฐ๋ฅ์ด ์ ๊ณต๋๋ค.
๋ฐ๋ฉด์ ์ค์ผ์ค๋ง๊ณผ ๋๊ธฐํ๋ฅผ ์ํด ์ปค๋์ ํธ์ถํ๋๋ฐ ๋ฌด๊ฒ๊ณ ์ค๋๊ฑธ๋ฆฐ๋ค๋ ๋จ์ ์ด ์๋ค. ๋ํ, ์ปค๋ ์์ค ์ค๋ ๋๋ ์ค์ผ์ค๋ง ๊ณผ์ ์์, ์ ์ฅํ ๋ด์ฉ์ ๋ค์ ๋ถ๋ฌ์ค๋ ๊ณผ์ ์ด ํ์ํ๋ค. ์ด๋, ์ฌ์ฉ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋๋ก์ ์ ํ์ด ๋น๋ฒํ๊ฒ ์ด๋ค์ ธ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํ๋ค. ๋ํ ์ฌ์ฉ์๊ฐ ํ๋ก๊ทธ๋๋ฐํ ๋ ๊ตฌํํ๊ธฐ ์ด๋ ต๊ณ ์์์ ๋ ๋ง์ด ์๋นํ๋ ๊ฒฝํฅ์ด ์๋ค๋ ๋จ์ ์ด ์๋ค.
๋ฉํฐ ์ค๋ ๋ ๋ชจ๋ธ
์ฌ์ฉ์ ์์ค ์ค๋ ๋์ ์ปค๋ ์์ค ์ค๋ ๋์ ์๊ธฐํ๊ธฐ ์ ์, ๋ฉํฐ ์ค๋ ๋ ๋ชจ๋ธ์ ๋จผ์ ์ดํดํ๋ ๊ฒ์ด ์ข๋ค. ๋ฉํฐ ์ค๋ ๋ ๋ชจํ์ด ์์ ๊ฐ์ด ์กด์ฌํ๊ณ , ์ด๋ค ๋ฉํฐ ์ค๋ ๋ ๋ชจ๋ธ์ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ์, ๋ค๋ฅด๊ฒ ๋์ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์/์ปค๋ ์์ค ์ค๋ ๋ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค. ์ถ๊ฐ์ ์ผ๋ก, ๋ค๋๋ค ๋ชจ๋ธ๊ณผ ์ผ๋์ผ ๋ชจ๋ธ๊ณผ ๋ค๋์ผ ๋ชจ๋ธ์ ๋ชจ๋ ์ฑํํ์ฌ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์ด๋ฅผ ํผํฉํ ๋ชจ๋ธ
์ด๋ผ๊ณ ํ๋ค.
์ฌ์ฉ์/์ปค๋ ์์ค ์ค๋ ๋ ๊ตฌ์กฐ ์ฐจ์ด
์ค๋ ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ
- kernel์ ์ง์์์ด ์์ ํ user space์์๋ง library๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ: ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ ์์คํ ํธ์ถ์ด ์๋๋ผ ์ฌ์ฉ์ ๊ณต๊ฐ์ ์ง์ญํจ์๋ฅผ ํธ์ถํ๋ค.
- ์ด์์ฒด์ ์ ์ํด kernel space์์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ: ๋ผ์ด๋ธ๋ฌ๋ฆฌ API๋ฅผ ํธ์ถํ๋ ๊ฒ์ kernel system call์ ์ฌ์ฉํ๋ค.
- ์ปค๋ ๋ ๋ฒจ ์ค๋ ๋ vs ์ฌ์ฉ์ ๋ ๋ฒจ ์ค๋ ๋ - Crocus
- ์ด์์ฒด์ - ์ฐ๋ ๋๋?(Thread,์ฌ์ฉ์ ์์ค ์ฐ๋ ๋, ์ปค๋ ์์ค ์ฐ๋ ๋, ํผํฉํ ์ฐ๋ ๋) -์ฝ๋ฉ์คํํธ
- ์ค๋ ๋ ๋ชจ๋ธ, ์ฌ์ฉ - ckstn0777
๋ฉ๋ชจ๋ฆฌ ๋จํธํ(Memory Fragmentation) ๋ RAM์์ ๋ฉ๋ชจ๋ฆฌ์ ๊ณต๊ฐ์ด ์์ ์กฐ๊ฐ์ผ๋ก ๋๋์ด์ ธ ์ฌ์ฉ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์กด์ฌํ์ง๋ง, ํ ๋น์ด ๋ถ๊ฐ๋ฅํ ์ํ๋ฅผ ๋งํ๋ค. ์์ธํ ์ค๋ช ํ์๋ฉด, ์ด๋ค ํ์คํฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๊ธฐ ์ํด์๋, ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ์ํ๋ค. ๊ทธ๋ฌ๋ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๊ฐ ์ผ์ด๋๋ฉด, ํ ๋น๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋์ด ์ถฉ๋ถํด๋, ์ด๋ค์ด ์์ ๋ฉ๋ชจ๋ฆฌ ํํธ(Memory Fragment)์ผ๋ก ์กด์ฌํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ๋ถ๊ฐ๋ฅํ ์ํฉ์ด ๋ฐ์ํ๋ค.
๋ด๋ถ ๋จํธํ(Internal Fragmentation) ๋, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ๋ ํ๋ก์ธ์ค๊ฐ ํ์ํ ์๋ณด๋ค ๋ ํฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋์ด์ ํ๋ก์ธ์ค์์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ญ๋น ๋๋ ์ํฉ์ ๋งํ๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ๋ชจ์ฅ์ ์ผฐ๋๋ฐ OS๊ฐ 4kb๋ฅผ ํ ๋นํด์ฃผ์๋ค๊ณ ํด๋ณด์. ๊ทธ๋ฐ๋ฐ ์ค์ ๋ก๋ 1kb๋งํผ๋ง ์ฌ์ฉํ๋ค๊ณ ํ๋ค๋ฉด, ํ์ ์ด์์ผ๋ก ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์์ผ๋ฏ๋ก ๋ด๋ถ ๋จํธํ๊ฐ 3kb๋งํผ ์๊ฒผ๋ค๊ณ ํ ์ ์๋ค.
์ธ๋ถ ๋จํธํ(External Fragmentation) ๋, ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค๊ฐ์ค๊ฐ์ ์กด์ฌํด์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ถฉ๋ถํ์ง๋ง ์ค์ ๋ก ํ ๋นํ ์ ์๋ ์ํฉ์ ๋งํ๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๊ณ ํด์ ๋๋ ์์
์ด ๋ฐ๋ณต๋ ๋ ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค๊ฐ์ ์๊ธฐ๊ฒ ๋๋ค. ์ด๋ฅผ hole์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด๋ ๊ฒ ์ค๊ฐ์ ๋ผ์ธ hole๋ค์ด ๋ง์์ง๋ฉด, ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ก ์ธํด, ์ด ๊ฐ์ฉ๊ณต๊ฐ์ด ์ถฉ๋ถํ๋๋ผ๋ ์๋ก์ด ํ์คํฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์ง ๋ชปํ๋ ์ํฉ์ด ์ฌ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ์์ ๊ทธ๋ฆผ์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๊ณผ ํด์ ์ ๋ฐ๋ณต์ผ๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ์ค๊ฐ์ ๋น hole๋ค์ด ๋ง๋ค์ด์ก๋ค๊ณ ํด๋ณด์. ํ์ฌ ๋ชจ๋ hole์ ์ดํฉ์ 16MB ์ด๊ณ , 9MB์ง๋ฆฌ ํ๋ก์ธ์ค๋ฅผ ํ ๋นํ๊ณ ์ ํ๋ค. ๋น ๋ฉ๋ชจ๋ฆฌ์ ๊ณต๊ฐ์ค์ ์ ์ผ ํฐ ๋น ๋ฉ๋ชจ๋ฆฌ(hole)์ ํฌ๊ธฐ๊ฐ 9MB ๋ณด๋ค ์์ ๋, ์ธ๋ถ ๋จํธํ๊ฐ ์ผ์ด๋ฌ๋ค๊ณ ํ ์ ์๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐฉ๋ฒ
๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐฉ๋ฒ์ ํฌ๊ฒ ์ฐ์ํ ๋น ๋ฐฉ์๊ณผ ๋ถ์ฐ์ ํ ๋น ๋ฐฉ์์ผ๋ก ๋๋ ์ ์๋ค. ์ฐ์ํ ๋น ๋ฐฉ์์๋ ๊ณ ์ ๋ถํ ๋ฐฉ์
, ๊ฐ๋ณ๋ถํ ๋ฐฉ์
์ด ์๊ณ , ๋ถ์ฐ์ ํ ๋น ๋ฐฉ์์๋ ํ์ด์ง ๊ธฐ๋ฒ
๊ณผ ์ธ๊ทธ๋ฉํ
์ด์
๊ธฐ๋ฒ
, ํ์ด์ง๋ ์ธ๊ทธ๋ฉํ
์ด์
(Paged Segmentations) ๊ธฐ๋ฒ ๋ฑ์ด ์๋ค.
- ์์ถ(Compaction)๊ธฐ๋ฒ
์ฃผ๊ธฐ์ ์ผ๋ก ์ญ์ ๊ณต๊ฐ์ ํ์ํ์ฌ, ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค. ๊ทธ๋ฌ๋ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค๋ ๋จ์ ์ด ์๋ค.
- ํ์ด์ง(Paging)๊ธฐ๋ฒ: ๊ฐ์๋ฉ๋ชจ๋ฆฌ์ฌ์ฉ, ์ธ๋ถ ๋จํธํ ํด๊ฒฐ, ๋ด๋ถ ๋จํธํ ์กด์ฌ
์ฝ๊ฒ๋งํด, ํ๋ก์ธ์ค๋ฅผ ์ผ์ ํ ๋จ์๋ก ์๋ผ์ ์ฌ์ฉํ์๋ ๋ฐฉ์์ด๋ค. ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์ ๋์ผํ ํฌ๊ธฐ์ ํ์ด์ง ๋จ์๋ก ๋๋์ด ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ก ๋ค๋ฅธ ์์น์ ํ์ด์ง๋ค์ ์ ์ฅํ๋ ๋ฐฉ์์ ๋งํ๋ค. ์ด๋, ๋ ผ๋ฆฌ(๊ฐ์) ๋ฉ๋ชจ๋ฆฌ์ ๋จ์๋ ํ์ด์ง(page), ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ๋จ์๋ ํ๋ ์(frame)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
ํ์ด์ง ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฐ์์ ์ด์ง ์์ ๊ณต๊ฐ๋ ํ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ธ๋ถ ๋จํธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ๋์ ํ์ด์ง ๋จ์์ ์๋ง๊ฒ ๊ฝ์ฑ์ ์ฐ๋๊ฒ ์๋๋ฏ๋ก ๋ด๋ถ ๋จํธํ ๋ฌธ์ ๋ ์ฌ์ ํ ์กด์ฌํ๋ค. ํ์ด์ง ๋จ์๋ฅผ ์๊ฒํ๋ฉด ๋ด๋ถ ๋จํธํ ๋ฌธ์ ๋ ํด๊ฒฐํ ์ ์๊ฒ ์ง๋ง ๋์ page mapping ๊ณผ์ ์ด ๋ง์์ง๋ฏ๋ก ์คํ๋ ค ํจ์จ์ด ๋จ์ด์ง ์ ์๋ค.
- ์ธ๊ทธ๋ฉํ ์ด์ (Segmentation)๊ธฐ๋ฒ: ๊ฐ์๋ฉ๋ชจ๋ฆฌ์ฌ์ฉ, ๋ด๋ถ ๋จํธํ ํด๊ฒฐ, ์ธ๋ถ ๋จํธํ ์กด์ฌ
ํ๋์ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ฑํ๋ ์ฃผ์ ๊ณต๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก ์ฝ๋, ๋ฐ์ดํฐ, ์คํ ๋ฑ์ ์๋ฏธ ์๋ ๋จ์๋ค๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ด๋ ๊ฒ ๊ธฐ๋ฅ์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ๋์ ์ธ๊ทธ๋จผํธ ๋จ์๋ก ์ผ์, ๋ถํ ํ์ฌ ์ ์ฅ๋๋ค. ์ฆ, ํ์ด์ง๊ธฐ๋ฒ์์ ๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ ํฌ๊ธฐ์ ๋จ์๋ก ๋ถํ ํ์ง๋ง ์ธ๊ทธ๋ฉํ ์ด์ ๊ธฐ๋ฒ์์๋ ๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ก ํฌ๊ธฐ๊ฐ ๋ค๋ฅธ ๋ ผ๋ฆฌ์ ๋จ์์ธ ์ธ๊ทธ๋จผํธ๋ก ๋ถํ ํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ์ฌ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ก ๋ณํ์ ํ๊ฒ ๋๋ค. ๊ฐ ์ธ๊ทธ๋จผํธ๋ ์ฐ์์ ์ธ ๊ณต๊ฐ์ ์ ์ฅ๋์ด ์๋ค. ์ธ๊ทธ๋จผํธ๋ค์ ํฌ๊ธฐ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ ๋ถํ ํด ๋ ์ ์๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋ ๋ ๋น ๊ณต๊ฐ์ ์ฐพ์ ํ ๋นํด์ผํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก mapping์ ์ํด ์ธ๊ทธ๋จผํธ ํ ์ด๋ธ์ด ํ์ํ๋ค.
ํ๋ก์ธ์ค๊ฐ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ๋งํผ ํ ๋นํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ๋จํธํ๋ ์ผ์ด๋์ง ์์ผ๋ ์ฌ์ ํ ์ค๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ฉด ์๊ธฐ๋ hole, ์ฆ ์ธ๋ถ ๋จํธํ ๋ฌธ์ ๋ ์ฌ์ ํ ์กด์ฌํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋จํธํ(Memory Fragmentation)๊ฐ ๋ฌด์์ด๊ณ ์ ๋ฐ์ํ๋๊ฐ? - ๊ธฐ๋ณธ๊ธฐ๋ฅผ ์๋ ์ ์๋ง์ถ์ด ์ฝ๋ฉ๋ธ๋ก๊ทธ
- os/CH.07 ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ - cs-special-forces-headquarters
- ๋ฉ๋ชจ๋ฆฌ ๋จํธํ(Memory Fragmentation)๊ฐ ๋ฌด์์ด๊ณ ์ ๋ฐ์ํ๋๊ฐ? - ๊ธฐ๋ณธ๊ธฐ๋ฅผ ์๋ ์ ์๋ง์ถ์ด ์ฝ๋ฉ๋ธ๋ก๊ทธ
Context Switching์ด๋, ํ์ฌ ์คํ์ค์ธ ํ๋ก์ธ์ค์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์คํ์ํฌ ๋ ๋ฐ์ํ๋ค. CPU๋ ํ๋์ ํ๋ก์ธ์ค ์ ๋ณด๋ง ๊ธฐ์ตํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ธฐ ์ํด์๋, ๊ธฐ์กด์ ์คํ์ค์ด๋ ํ๋ก์ธ์ค์ ์ํ ๋๋ ๋ ์ง์คํฐ ๊ฐ(Context)์ PCB์ ์ ์ฅํด์ผ ํ๋ค. ๊ธฐ์กด์ ๊ฐ์ ์ ์ฅํ ํ, ๋ค์ ์คํ์ํฌ ํ๋ก์ธ์ค์ ์ํ์ ๋ ์ง์คํฐ๊ฐ์ PCB์์ ์ฝ์ด์์ ๋ ์ง์คํฐ์ ์ ์ฌํ๋ ์์ ์ Context Switching ์ด๋ผ ํ๋ค.
Context Switching ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- Interrupt๋ ์์คํ ํธ์ถ์ ์ํด context switching ์๊ตฌ
- User Mode์์ Kernel Mode๋ก ๋ณ๊ฒฝ
- ๊ธฐ์กด ํ๋ก์ธ์ค์ ํ์ฌ context๋ฅผ PCB์ ์ ์ฅ
- ๋ค์์ ์คํํ ํ๋ก์ธ์ค์ ์ํ์ ๋ณด๋ฅผ PCB์์ ๋ณต๊ตฌํ ํ ๋ค์ ํ๋ก์ธ์ค๋ฅผ ์คํ
- Kernel Mode์์ User Mode๋ก ๋ณ๊ฒฝ
Context Switching์ด ๋ฐ์ํ๋ ์ํฉ
Context Switching์ ์ธํฐ๋ฝํธ ๋ฐ์ ์์ ๋ฐ์ํ๊ณ , ์ธํฐ๋ฝํธ๋ ์คํ ์ค์ธ CPU ์ฌ์ฉ ํ ๋น ์๊ฐ์ ๋ชจ๋ ์๋ชจํ๊ฑฐ๋, ์ ์ถ๋ ฅ์ ์ํด ๋๊ธฐํ๋ ๊ฒฝ์ฐ์ ๋ฐ์ํ๋ฉฐ, ํ๋ก์ธ์ค์ CPU ์ ์ด๊ถ์ด ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ์ด์๋๋ ์ํฉ์ผ๋ก ๋ณผ ์ ์๋ค. ๋ฐ๋ผ์, ํ๋ก์ธ์ค ์ํ์๋ ๊ด๋ จ์ด ์์ผ๋ฉฐ, 3๊ฐ์ง ์ํ ๋ณํ์ ๋ฐ๋ผ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ค. Context Switch๋ฅผ ํ๋ ์ฃผ์ฒด๋ OS ์ค์ผ์ค๋ฌ์ด๋ค.
running
โready
ready
โrunning
running
โwaiting
PCB(Process Control Block)
ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋๋ฐ ์์ด ํ์ํ ์ ๋ณด(๋ฉํ ๋ฐ์ดํฐ)๋ฅผ ๋ด๊ณ ์๋ ์ด์์ฒด์ ์ปค๋์ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ํ๋ก์ธ์ค๊ฐ ์์ฑ๋ ๋๋ง๋ค ๊ณ ์ ์ PCB๊ฐ ์์ฑ๋๋ฉฐ, ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋๋ฉด PCB๋ ์ ๊ฑฐ๋๋ค. PCB์๋ Process ID
, Process State
(ex. ready, running), Program Counter
(๋ค์ instruction), Register ๊ฐ
, Pointer
, CPU scheduling/Memory/Process information
๋ฑ์ ์ ๋ณด๊ฐ ํฌํจ๋๋ค.
Thread ๋จ์์ Context Switching
Process๋ Thread๋ณด๋ค Context Switching ์ค๋ฒํค๋๊ฐ ํฌ๋ค. Thread๋ Stack ์์ญ์ ์ ์ธํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- os/CH.05 ํ๋ก์ธ์ค ๊ด๋ฆฌ - cs-special-forces-headquarters
- OS - Context Switch(์ปจํ ์คํธ ์ค์์น)๊ฐ ๋ฌด์์ธ๊ฐ? - ๊ธฐ๋ณธ๊ธฐ๋ฅผ ์๋ ์ ์๋ง์ถ์ด ์ฝ๋ฉ๋ธ๋ก๊ทธ
- [Context Switching] ํ๋ก์ธ์ค์ ์ฐ๋ ๋์์์ ์ปจํ ์คํธ ์ค์์นญ - ์๋น๋ก์ด ๊ฐ๋ฐ์ผ๊ธฐ
- Context Switching - ์ง์๋คํ
- [OS] PCB์ Context Switching - require('develop')
์ค์ํ(Swapping)์ด๋, ์ฃผ๊ธฐ์ต์ฅ์น(๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ)์ ์ ์ฌํ ํ๋์ ํ๋ก์ธ์ค์ ๋ณด์กฐ๊ธฐ์ต์ฅ์น(ํ๋๋์คํฌ)์ ์ ์ฌํ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ต์ฒดํ๋ ๊ธฐ๋ฒ์ด๋ค.
ํ๋ก์ธ์ค๊ฐ ์คํ๋๊ธฐ ์ํด์๋, ํ๋ก์ธ์ค์ ๋ช ๋ น์ด์ ๋ช ๋ น์ด๊ฐ ์ ๊ทผํ๋ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด์์ด์ผ ํ๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ฉด, ๋ฉ๋ชจ๋ฆฌ ๋ด์ ์กด์ฌํ๋ ๊ธฐ์กด ํ๋ก์ธ์ค๋ฅผ backing store(ํ๋๋์คํฌ, ๋ณด์กฐ๊ธฐ์ต์ฅ์น)๋ผ๋ ๊ณต๊ฐ์ผ๋ก ๋ด๋ฆด ์ ์๋ค.(=์ซ์๋ธ๋ค) ๊ทธ๋ฆฌ๊ณ ๋ค์ ํ์ํ ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ๋ฌ์์ ์ฌ์ฉํ ์๋ ์๋ค. ํ์์๋ ๋ฐ์ดํฐ๋ฅผ backing store์ ์ ์ฅํ๋ ๊ฒ์ swap out, ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ๊ฒ์ swap in์ด๋ผ๊ณ ํ๋ค. (๋ฉ๋ชจ๋ฆฌ ๊ธฐ์ค์ผ๋ก in, out) ํ๋ก์ธ์ค ๋จ์๋ก swap in, swap outํ๋ ๊ฒ์ swapping์ด๋ผ๊ณ ํ๋ค.
ํ์ค ์ค์ํ๊ณผ ํ์ด์ง ๋จ์ ์ค์ํ
์ค์ํ์ ์ฌ์ฉํ๋ฉด, ์ค์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ ๋ง์ ํ๋ก์ธ์ค๋ฅผ ์์ฉํ ์ ์๋ค. ์ค์ํ์ ๊ฐ์ฅ ์ค์ํ ์ญํ ์ ํ๋ก์ธ์ค์ ์๋ฅผ ์กฐ์ ํ์ฌ, ๋ค์ค ํ๋ก๊ทธ๋๋ฐ์ ์ ๋(degree of muliprogramming)๋ฅผ ์กฐ์ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ ํด ์ํ๊ฐ ์ค๋ ์ง์๋๋ ํ๋ก์ธ์ค๊ฐ ์ค์ํ์ ์ ํฉํ๋ฉฐ, swap out ๋ ๋์ ํ๋ก์ธ์ค๋ ์ค์ํผ(swapper)๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ค๊ธฐ ์ค์ผ์ฅด๋ฌ(medium-term scheduler)์ ์ํด ์ ์ ๋๋ค. ์ฃผ์ํ ์ ์, ์ค์ํ์ด๋ผ๋ ๊ฐ๋ ์ด ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋์ด ๊ทธ ์ฃผ์ ๊ณต๊ฐ์ ๋์คํฌ๋ก ๋ด์ซ๋ ๊ฒ์ด ์๋๋ผ, ํน์ ํ ์ด์ ๋ก ์ํ ์ค์ธ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์ ์ผ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ๋์คํฌ๋ก ๋ด๋ ค๋๋ ๊ฒ์ ์๋ฏธํ๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ ์์ ๊ฐ์ด ํ๋ก์ธ์ค ๋จ์๋ก ์ค์ํํ๋ ํ์ค ์ค์ํ ๋ฐฉ๋ฒ์ ์ต๊ทผ์ ๋ง์ด ์ฌ์ฉ๋์ง ์๋๋ค. ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ์ฅ์น ์ฌ์ด์ ํ๋ก์ธ์ค ์ ์ฒด๋ฅผ ์ด๋์ํค๋ ๊ฒ์ด ํ๋ค๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ , ํ์ด์ง ๋จ์ ์ค์ํ์ ์ด์ฉํ๋ค.
Backing Store
์ค์ ์์ญ(swap area)๋ผ๊ณ ๋ ๋ถ๋ฅด๋ฉฐ, ๋์คํฌ ๋ด์ ํ์ผ ์์คํ ๊ณผ๋ ๋ณ๋๋ก ์กด์ฌํ๋ ์ผ์ ์์ญ์ ๋งํ๋ค. ํ๋ก์ธ์ค๊ฐ ์ํ์ค์ธ ๋์์๋ง ๋์คํฌ์ ์ผ์์ ์ผ๋ก ์ ์ฅํ๋ ๊ณต๊ฐ์ด๋ฏ๋ก ์ ์ฅ ๊ธฐ๊ฐ์ด ์๋์ ์ผ๋ก ์งง์ ์ ์ฅ๊ณต๊ฐ์ด๋ค. ๋ค์์ ์ฌ์ฉ์ ํ๋ก์ธ์ค๋ฅผ ๋ด์ ์ ์์ ๋งํผ ์ถฉ๋ถํ ํฐ ์ ์ฅ๊ณต๊ฐ์ด์ด์ผ ํ๊ณ ์ด๋ ์ ๋์ ์ ๊ทผ ์๋๊ฐ ๋ณด์ฅ๋์ด์ผ ํ๋ค๋ ํน์ง์ด ์๋ค.