๐ ํ๋ก์ธ์ค๋?
ํ๋ก์ธ์ค๋ ํ๋ก๊ทธ๋จ์ด ์คํ์ํฌ ๋, ๋ณด์กฐ๊ธฐ์ต์ฅ์น์ ์ ์ฅ๋ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ ์ฌํ๊ณ ์คํ์ ์ํค๋๋ฐ, ๊ทธ ๊ณผ์ ์ 'ํ๋ก์ธ์ค ์์ฑ' ์ด๋ผ๊ณ ํ๋ฉฐ ํด๋นํ๋ ํ๋ก๊ทธ๋จ์ ํ๋ก์ธ์ค๋ผ๊ณ ํ๋ค.
์ฌ์ฉ์๋ ์ปดํจํฐ๋ฅผ ์คํํ๋ ์๊ฐ๋ถํฐ ๋ค์ํ ํ๋ก๊ทธ๋จ์ ์ด์ฉํ๋ฉด์๊น์ง ์ฌ๋ฌ๊ฐ์ง ํ๋ก์ธ์ค๋ฅผ ์คํ์ํค๊ฒ ๋๋๋ฐ, ์ฌ์ฉ์๊ฐ ๋ณด๋ ์์์(์ง์ ์คํ ์ค์ธ) ์คํ๋๋ ํ๋ก์ธ์ค๋ ํฌ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค(forground process) ๋ผ๊ณ ํ๊ณ , ์ฌ์ฉ์๊ฐ ๋ณด์ง ์๋ ์ํ์์ ์๋์ผ๋ก ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค(background process)๋ผ๊ณ ํ๋ค.
๐งฉ ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก(PCB)
ํ๋ก์ธ์ค์ ์คํ์ ์ํด์ CPU๋ฅผ ํ์๋ก ํ๋๋ฐ, CPU๋ ํ์ ๋ ์ฉ๋์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ๋์์ ์์ฉํ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด ํ๋ก์ธ์ค๋ค์ ์์๋๋ก ์คํ์ด ๋๊ณ , ํ์ ๋ ์๊ฐ(์ธํฐ๋ฝํธ)์ ๊ฐ์ง๊ฒ ๋๋๋ฐ ์ด ํ์ ๋ ์๊ฐ์ด ๋๋๊ฒ ๋๋ฉด ๋ค์ ์ฐจ๋ก๊ฐ ์ฌ ๋๊น์ง ์ ์ผ ๋ค๋ก ์ด๋ํ๊ฒ ๋๋ ๊ตฌ์กฐ(FIFO)๋ฅผ ๊ฐ์ง๋ค.
์ฌ๊ธฐ์์ ์ด์์ฒด์ ๋ ํ๋ก์ธ์ค์ ์คํ ์์๋ฅผ ๊ด๋ฆฌํ๊ณ , ํ๋ก์ธ์ค์ CPU๋ฅผ ๋น๋กฏํ ์์์ ๋ฐฐ๋ถํ๋ ์ญํ ์ ํ๋ค. ์ฌ๊ธฐ์์ ์ด์ฉํ๋ ๊ฒ์ด ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก(PCB : Process Control Block) ์ด๊ณ , PCB์๋ ํด๋น ํ๋ก์ธ์ค๋ฅผ ์๋ณํ๊ธฐ ์ํด ํ์ํ ์ ๋ณด๋ค์ด ์ ์ฅ๋๋ฉฐ ์ปค๋ ์์ญ์ ์์ฑ๋๋ค.
PCB์ ์์ฑ ์์ ์ ํ๋ก์ธ์ค ์์ฑ ์์ ์ด๋ฉฐ, ํ๋ก์ธ์ค์ ์คํ์ด ์ข ๋ฃ๋๋ ์์ ์ ํ๊ธฐ๋๋ค.
PCB์ ๋ค์ด๊ฐ๋ ๊ฐ์ ๋ค์๊ณผ ๊ฐ๋ค
- PID(Process ID) : ํ๋ก์ธ์ค๋ฅผ ์๋ณํ๊ธฐ ์ํด ๋ถ์ฌ๋๋ ๊ณ ์ ๋ฒํธ. ์ค๋ณต๋๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋๋ผ๋ ๋๋ฒ ์คํ๋ ๊ฒฝ์ฐ ๋๊ฐ์ ํ๋ก์ธ์ค ์์ฑ
- ๋ ์ง์คํฐ ๊ฐ : ์์ ์ ์คํ ์ฐจ๋ก์ผ ๋, ์์ ๋ด์ฉ์ ์ด์ด์ ์คํํ๊ธฐ ์ํด ์ด์ ๊น์ง ์ฌ์ฉํ๋ ๋ ์ง์คํฐ์ ์ค๊ฐ๊ฐ์ ๋ณต์ํ๋ค.
- ํ๋ก์ธ์ค ์ํ : ํ์ฌ ํ๋ก์ธ์ค๊ฐ ์ด๋ค ์ํ์ธ์ง ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- CPU ์ค์ผ์ค๋ง ์ ๋ณด : ํ๋ก์ธ์ค๊ฐ ์ธ์ , ์ด๋ค ์์๋ก CPU๋ฅผ ํ ๋น๋ฐ๋์ง index์ ๋ํ ์ ๋ณด
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ ๋ณด : ํ๋ก์ธ์ค๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ์์น(์ฃผ์๊ฐ)์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ์ด๋ ์ฃผ์๊ฐ์ ์ ์ฅ๋์ด์๋์ง์ ๋ํ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ๋ค.
- ์ฌ์ฉํ ํ์ผ๊ณผ ์ ์ถ๋ ฅ์ฅ์น ๋ชฉ๋ก : ํ๋ก์ธ์ค๊ฐ ์คํ ๊ณผ์ ์์ ํน์ ์ ์ถ๋ ฅ์ฅ์น ๋๋ ํ์ผ ๋ฑ์ ์ฌ์ฉํ๋ฉด, PCB์ ํด๋น ๋ด์ฉ์ด ๋ช ์๋๋ค.
๐ ๋ฌธ๋งฅ ๊ตํ
๋ฌธ๋งฅ(context)์ ํ๋ก์ธ์ค ์ํ์ ์ฌ๊ฐํ๊ธฐ ์ํด ๊ธฐ์ตํด์ผ ํ ์ ๋ณด๋ฅผ ๋ปํ๋ค. ์๋ฅผ ๋ค์ด ํ๋ก๊ทธ๋จ ์นด์ดํฐ, ๋ ์ง์คํฐ์ ๊ฐ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ๋ณด, ๊ฐ์ข PCB์ ๋ค์ด๊ฐ๋ ์ ๋ณด๋ค์ด๋ค. ํ๋ก์ธ์ค๊ฐ ์คํ ์๊ฐ์ด ๋ค ๋์ด ๊ทธ ์์๊ฐ ๋๋๊ฑฐ๋ ์๊ธฐ์น ๋ชปํ ์ํฉ์ ์ข ๋ฃ๋์ด ์ธํฐ๋ฝํธ ๋ฐ์ ์ ์ด์์ฒด์ ์์ ํด๋น ํ๋ก์ธ์ค์ PCB์ context๋ฅผ ๋ฐฑ์ ํ๋ค. ๊ทธ ํ๋ก์ธ์ค๊ฐ ์ ์ผ ๋ค๋ก ์ฎ๊ฒจ๊ฐ๊ณ ์ ์ผ ์์ ์๋ ๋ค์ ํ๋ก์ธ์ค๋ฅผ ์คํํ ๋ ์์ ๋ค์ด์๋ ์คํ ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ์ ๋ถ๋ฌ์จ๋ค.
์ด์ ๊ฐ์ด ๊ธฐ์กด์ ์คํํ๋ ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ์ PCB์ ๋ฐฑ์ ํ๊ณ , ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ฉฐ PCB์์ ๋ฌธ๋งฅ ์ ๋ณด๋ฅผ ๋ณต๊ตฌํ๋ฉฐ ์คํํ๋ ๊ฒ์ ๋ฌธ๋งฅ ๊ตํ(context switching)์ด๋ผ๊ณ ํ๋ค.
๐กํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ
์ปค๋ ์์ญ์ PCB๊ฐ ์์ฑ๋๋ ๊ฒ๊ณผ ๊ฐ์ด, ์ฌ์ฉ์ ์์ญ ๋ด ์ฝ๋ ์์ญ, ๋ฐ์ดํฐ ์์ญ, ํ ์์ญ, ์คํ ์์ญ์ผ๋ก ๋๋์ด์ ์ ์ฅ๋๋ค.
- ์ฝ๋ ์์ญ(code segment/text segment) - ์ ์ ํ ๋น ์์ญ
ใ์คํํ ์ ์๋ ๋ช ๋ น์ด(์ฝ๋)๊ฐ ์ ์ฅ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ฒ ์๋ CPU๊ฐ ์คํํ ๋ช ๋ น์ด๋ค์ด ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ read-only๋ก ์ง์ ๋๋ค.
- ๋ฐ์ดํฐ ์์ญ(data segment) - ์ ์ ํ ๋น ์์ญ
ใํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ์ ์งํ ๋ฐ์ดํฐ(์ ์ญ ๋ณ์ ๋ฑ)์ด ์ ์ฅ๋๋ ๊ณต๊ฐ
- ํ ์์ญ(heap segment) - ๋์ ํ ๋น ์์ญ
ใํ๋ก๊ทธ๋จ์ ๋ง๋๋ ์ฌ์ฉ์๊ฐ ์ง์ ํ ๋นํ ์ ์๋ ์ ์ฅ ๊ณต๊ฐ์ด๋ค. ํด๋น ๊ณต๊ฐ์ ํ ๋นํ๋ค๋ฉด ๊ทธ๊ฒ์ ๊ณ์ ํ ๋นํ๋ ๊ฒ์ด ์๋ ๊ณต๊ฐ์ ๋ํ ๋ฐํ์ด ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค. ์ด๋ฃจ์ด์ง์ง ์๋๋ค๋ฉด ํ ๋น ๊ณต๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ด๋ํ์ฌ memory leak์ ๋ฐ์์ํจ๋ค. ๋ฉ๋ชจ๋ฆฌ์ ๋ฎ์ ์ฃผ์์์ ๋์ ์ฃผ์๋ก ํ ๋น๋๋ค.- ์คํ ์์ญ(stack segment) - ๋์ ํ ๋น ์์ญใ์ผ์์ ์ผ๋ก ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ด๋ค. ๋ํ์ ์ผ๋ก๋ ๋งค๊ฐ ๋ณ์์ ์ง์ญ ๋ณ์๊ฐ ์กด์ฌํ๋ค. ์คํ์ ๋ฐ์ดํฐ๋ฅผ pushํ๊ณ ์ฌ์ฉ์ด ๋๋ ๋ค ํ์ํ์ง ์์ ๋ฐ์ดํฐ๋ฅผ popํ๋ค. (control + z ํ์ control + v) ๋ฉ๋ชจ๋ฆฌ์ ๋์ ์ฃผ์์์ ๋ฎ์ ์ฃผ์๋ก ํ ๋น๋๋ค.
'CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
03. ์ค๋ ๋ (0) | 2024.03.08 |
---|---|
02. ํ๋ก์ธ์ค ์ํ์ ๊ณ์ธต ๊ตฌ์กฐ (1) | 2024.03.08 |