์คํฐ๋๋ฅผ ์ด์ํ๊ณ ์์ต๋๋ค. ํด๋น repository์ ๊ฐ๋ฉด ๋ ๋ง์ ์ ๋ณด๋ฅผ ๋ณด์ค ์ ์์ต๋๋ค!
ํนํ close ๋ PR์ ๋ณด์๋ฉด, ์ด๋ค ๋ถ๋ถ์ ๋ํด์ ๊ณ ๋ฏผํ๊ณ ์คํฐ๋์๋ค๊ณผ ์ด์ผ๊ธฐ๋๋ด๋์ง ๋ณด์ค ์ ์์ต๋๋ค
https://github.com/JulSaMo/CS-start
๐ ๋ค์ด๊ฐ๋ฉฐ
๐ธ Process Management
CPU๊ฐ ํ๋ก์ธ์ค๊ฐ ์ด๋ฌ๊ฐ์ผ ๋, CPU ์ค์ผ์ฅด๋ง์ ํตํด ๊ด๋ฆฌํ๋ ๊ฒ์ ๋งํ๋ค.
https://velog.io/@hyehello/CS-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-OS-04.-Process-Management
๐ PCB (Process Control Block) ์ด๋?
- ์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ์ ์ดํ๊ธฐ ์ํด ์ ๋ณด๋ฅผ ์ ์ฅํด ๋๋ ๊ณณ์ผ๋ก, ํ๋ก์ธ์ค์ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ตฌ์กฐ์ฒด์ด๋ค.
- ํ๋ก์ธ์ค ์ํ ๊ด๋ฆฌ์ Context Switching์ ์ํด ํ์ํ๋ค.
- PCB๋ ํ๋ก์ธ์ค ์์ฑ ์ ๋ง๋ค์ด์ง๋ฉฐ ์ฃผ๊ธฐ์ต์ฅ์น์ ์ ์ง๋๋ค.
CPU์ ๊ธํ ํ๋ก์ธ์ค ์ฒ๋ฆฌ ๋๋ฌธ์ ๊ธด๊ธ ์์ฒญ์ด ์์ ๋, ๊ธฐ์กด์ ์์ ํ๋ ํ๋ก์ธ์ค๋ฅผ ์ด๋๊ฐ์ ์์์ ์ฅํด๋์์ผ ๊ธํ ์ ๋ฅผ ๋นจ๋ฆฌ ์ฒ๋ฆฌํ ํ์ ๋ค์ ๋ถ๋ฌ์ฌ ์ ์์ ๊ฒ์ด๋ค. ์ฆ, ํ๋ก์ธ์ค์ ๊ดํ ์ ๋ณด๋ค์ ์ด๋๊ฐ์ ๋์ ๊ณต๊ฐ์ด ํ์ํ๊ณ , ์ด ๊ณต๊ฐ์ด PCB ์ด๋ค.
์ฆ, PCB๋ ์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค์ ๋ํ ์ค์ํ ์ ๋ณด๋ฅผ ์ ์ฅํด ๋์ ์ ์๋ ์ ์ฅ ์ฅ์
ํ๋ก๊ทธ๋จ ์คํ → ํ๋ก์ธ์ค ์์ฑ → ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์ (์ฝ๋, ๋ฐ์ดํฐ, ์คํ) ์์ฑ → ์ด ํ๋ก์ธ์ค์ ๋ฉํ๋ฐ์ดํฐ๋ค์ด PCB์ ์ ์ฅ
๐ธPCB ์์ ๋ค์ด์๋ ์ ๋ณด, Process Metadata
ํ๋ก์ธ์ค๋ค์ ํน์ง์ ๊ฐ๊ณ ์๋ ๊ฒ์ Process Metadata ๋ผ๊ณ ํ๋ค .
- Process ID: ํ๋ก์ธ์ค๋ฅผ ๊ตฌ๋ถํ๋ ID
- PID๋ผ๊ณ ๋ ๋ถ๋ฅด๊ธฐ๋ํ๊ณ , ํ๋ก์ธ์ค์ ๊ณ ์ ๋ฒํธ์ด๋ค.
- Process State: ๊ฐ ํ๋ก์ธ์ค๋ค์ ์ํ๋ฅผ ์ ์ฅํ๋ค
- ์ค๋น, ๋๊ธฐ, ์คํ ๋ฑ์ ์ํ
- Program Counter: ๋ค์ Instruction์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ์นด์ดํฐ. CPU๋ ์ด ๊ฐ์ ํตํด Process์ Instruction์ ์ํํ๋ค.
- ์ปดํจํฐ์์ ๋งํ๋ Instruction๋ ์ปดํจํฐ์๊ฒ ์ผ์ ์ํค๋ ๋จ์๋ก, ์ปดํจํฐ๊ฐ ์์๋ค์ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ์ด๋ฃจ์ด์ง ๋ช ๋ น์ด๋ค.
- ํ๋์จ์ด์์ ์ฌ์ฉํ๋ ๋ช ๋ น์ด์ด๋ค. (์ฌ์ฉ์๊ฐ ์ํํ๋๋ช ๋ น์ command, ์ํํธ์จ์ด์ ์ธ ๋ช ๋ น์ statement)
- Register: Accumulator, CPU Register, General Register ๋ฑ์ ํฌํจํ๋ค.
- CPU Scheduling Information: ์ฐ์ ์์, ์ต์ข ์คํ ์๊ฐ, CPU ์ ์ ์๊ฐ ๋ฑ์ด ํฌํจ๋๋ค.
- Memory Information: ํด๋น ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ (lower bound~upper bound) ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- Process Information: ํ์ด์ง ํ ์ด๋ธ, ์ค์ผ์ฅด๋ง ํ ํฌ์ธํฐ, ์์ ์, ๋ถ๋ชจ ๋ฑ
- Device I/O Status: ํ๋ก์ธ์ค์ ํ ๋น๋ ์ ์ถ๋ ฅ ์ฅ์น ๋ชฉ๋ก, ์ด๋ฆฐ ํ๋ฆฐ ๋ชฉ๋ก ๋ฑ
- Pointer: ๋ถ๋ชจ/์์ ํ๋ก์ธ์ค์ ๋ํ ํฌ์ธํฐ, ์์์ ๋ํ ํฌ์ธํฐ ๋ฑ
- Open File List: ํ๋ก์ธ์ค๋ฅผ ์ํด ์ด๋ ค์๋ ํ์ผ์ ๋ฆฌ์คํธ
์์ PCB ์ ๋ณด๊ฐ ์๋ ํ ์ด๋ธ์ฒ๋ผ ์ ์ฅ๋๋ค !!
๐ธPCB ๊ด๋ฆฌ ๋ฐฉ๋ฒ
Linked List ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌํ๋ค.
PCB List Head์ PCB๊ฐ ์์ฑ๋ ๋๋ง๋ค ํ๋์ฉ ๋ฐ์ดํฐ๊ฐ ๋ถ๊ฒ ๋๋ค. ์ฃผ์ ๊ฐ์ผ๋ก ์ฐ๊ฒฐ์ด ์ด๋ฃจ์ด์ ธ์๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ด๊ธฐ ๋๋ฌธ์ ์ฝ์
๊ณผ ์ญ์ ๊ฐ ์ฉ์ดํ๋ค.
์ฆ, ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๋ฉด ํด๋น PCB๊ฐ ์์ฑ๋๊ณ , ํ๋ก์ธ์ค ์๋ฃ ์ ์ ๊ฑฐ๋๋ค. ์ด๋ ๊ฒ ์ํ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋ณ๊ฒฝํ ๋ CPU์ ๋ ์ง์คํฐ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ Context Switching ์ด๋ผ๊ณ ํ๋ค.
< ํ๋ก์ธ์ค ์์ฑ ๊ณผ์ >
1. ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์ํ ํ๋ก์ธ์ค ์๋ณ์๋ฅผ ํ ๋นํ๋ค.
2. ์๋ก์ด ํ๋ก์ธ์ค์ ํ ์ฃผ์ ๊ณต๊ฐ๊ณผ ํ๋ก์ธ์ค ์ ์ด๋ธ๋ก(PCB)๋ฅผ ํ ๋นํ๋ค.
3. ์๋ก์ด ํ๋ก์ธ์ค์ ํ๋ก์ธ์ ์ ์ด ๋ธ๋ก์ ์ด๊ธฐํํ๋ค. (์ํ์ ๋ณด, ์นด์ดํฐ, ์ฐ์ ์์ ๋ฑ)
4. ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์ค์ผ์ค๋ง ํ์ ์ค๋น/๋ณด๋ฅ ๋ฆฌ์คํธ์ ์ฐ๊ฒฐํ๋ค.
๐ Context Switching
๐ธ Context Switching ์ด๋?
๋ฉํฐํ๋ก์ธ์ค ํ๊ฒฝ์์ CPU๊ฐ ์ด๋ค ํ๋์ ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ณ ์๋ ์ํ์์ ์ธํฐ๋ฝํธ ์์ฒญ์ ์ํด ๋ค์ ์ฐ์ ์์์ ํ๋ก์ธ์ค๊ฐ ์คํ๋์ด์ผํ ๋ ๊ธฐ์กด์ ํ๋ก์ธ์ค ์ํ ๋๋ ๋ ์ง์คํฐ๊ฐ (Context)๋ฅผ ์ ์ฅํ๊ณ CPU๊ฐ ๋ค์ ํ๋ก์ธ์ค๋ฅผ ์ํํ๋๋ก ์๋ก์ด ํ๋ก์ธ์ค์ ์ํ ๋๋ ๋ ์ง์คํฐ๊ฐ(Context)์ผ๋ก ๊ต์ฒดํ๋ ์์
- ์ธํฐ๋ฝํธ (Interrupt) : CPU๊ฐ ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ์์ ๋ ์คํ์ค์ธ ํ๋ก๊ทธ๋จ ๋ฐ์์ ์์ธ ์ํฉ์ด ๋ฐ์ํ์ฌ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ CPU์๊ฒ ์๋ ค ์์ธ ์ํฉ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋งํ๋ค. (I/O request, CPU ์ฌ์ฉ ์๊ฐ์ด ๋ง๋ฃ๋์๋, ์์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค ๋ ๋ฑ๊ณผ ๊ฐ์ ์ํฉ์ด ์ธํฐ๋ฝํธ ์์ฒญ์ด๋ค)
(์ฌ์ด๋ง๋ก ํ๋ก์ธ์ค๊ฐ ํ๋ ์ผ์ ๋ฉ์ถ๊ณ ์ด๋ฏธ ์ ํด์ง ์ฝ๋์์ ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค.)
๐ Context(๋ ์ง์คํฐ ๊ฐ)์ด๋?
์ฌ์ฉ์์ ๋ค๋ฅธ ์ฌ์ฉ์, ์ฌ์ฉ์์ ์์คํ ๋๋ ๋๋ฐ์ด์ค๊ฐ์ ์ํธ์์ฉ์ ์ํฅ์ ๋ฏธ์น๋ ์ฌ๋, ์ฅ์, ๊ฐ์ฒด ๋ฑ์ ํ์ฌ ์ํฉ(์ํ)๋ฅผ ๊ท์ ํ๋ ์ ๋ณด๋ค์ ๋งํ๋ค. ์ฆ ์ฌ๊ธฐ์ ๋์จ Context์ ์๋ฏธ๋ CPU๊ฐ ํด๋น ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ธฐ ์ํ ํด๋น ํ๋ก์ธ์ค์ ์ ๋ณด๋ค์ด๋ค. (์ด ์ ๋ณด๋ค์ ์์ ๋์จ PCB์ ์ ์ฅ๋๋ค, ์ฆ PCB์ ์ ์ฅ๋๋ ์ ๋ณด๋ค์ด Context = ๋ ์ง์คํฐ๊ฐ!)
โ ๏ธ ์ฃผ์
์ฐธ๊ณ ๋ก Context Switching์ด ๋ฐ์ํ ๋, ํด๋น CPU๋ ์๋ฌด๋ฐ ์ผ์ ํ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ Context Switching์ด ์ฆ์์ง๋ฉด ์คํ๋ ค ์ค๋ฒํค๋๊ฐ ๋ฐ์ํด์ ํจ์จ(์ฑ๋ฅ)์ด ๋จ์ด์ง๋ค.
๐ธ Context Switching ์ ์ด๋ป๊ฒ ์งํ๋๋๊ฐ?
- Task์ ๋๋ถ๋ถ ์ ๋ณด๋ Register์ ์ ์ฅ๋๊ณ PCB๋ก ๊ด๋ฆฌ๋๊ณ ์๋ค.
- ํ์ฌ ์คํํ๊ณ ์๋ Task์ PCB์ ๋ณด๋ฅผ ์ ์ฅํ๊ฒ ๋๋ค. (Process Stack, Ready Queue)
- ๋ค์ ์คํํ Task์ PCB ์ ๋ณด๋ฅผ ์ฝ์ด Register์ ์ ์ฌํ๊ณ CPU๊ฐ ์ด์ ์ ์งํํ๋ ๊ณผ์ ์ ์ฐ์์ ์ผ๋ก ์ํํ ์ ์๋ค.
๐ธ Context Switching ๊ณผ์
- ์ธํฐ๋ฝํธ ์์คํ ์ฝ์ด ๋ฐ์ํ๋ฉด p0์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ
- p1 ์คํํ๊ธฐ ์ํด์ p1์ ์ ๋ณด๋ค์ ๊ฐ์ง๊ณ ์ด
- ๊ทธ๋ฆฌ๊ณ p1์ด ์คํ๋๊ณ , ๋ค์ p0๋ก ๋์๊ฐ๋ ค๋ฉด
- ๋ค์ ์งํ
๐ธ Context switching์ ์ค๋ฒํค๋
- idle : ์๋ฌด๊ฒ๋ ๋์ํ์ง ์๋ ์ํ๋ฅผ ์๋ฏธ
์ด๋ ๊ฒ Idle๊ฐ ๊ฒน์น๋ ์๊ธฐ๋ค์ ์ค๋ฒํค๋๋ผ๊ณ ํ๋ค. ์ด๋ CPU๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ ์ค์ด๋ผ ์๋ฌด๊ฒ๋ ํ์ง ์๋ ์ํ์ด๋ค. Thread๊ฐ ๋ง์์ง๋ฉด Context swtiching์ด ๋ง์์ ธ์ ์ค๋ฒํค๋๊ฐ ์ ์ ์ฆ๊ฐํด์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ค.
๐ธ Context Switching swift์์๋ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋?
Task.yield()
์ด ํค์๋๋ฅผ ์ฐพ์๋ณด๋ฉด ๋ ๊ฒ ๊ฐ๋ค. ๊ณต์ ๋ฌธ์์์๋ ์๋์ ๊ฐ์ด ์ค๋ช ํ๋ค.
ํ์ฌ ์์ ์ ์ผ์ ์ค๋จํ๊ณ ๋ค๋ฅธ ์์ ์ ์คํํ ์ ์๋๋ก ํ๋ ๊ฒ
https://developer.apple.com/documentation/swift/task/yield()
โ
๋ฉด์ ์์ ๋์๋ ์ง๋ฌธ
(https://nesoy.github.io/articles/2018-11/Context-Switching)
- Computer ๊ฐ ๋งค๋ฒ ํ๋์ Task๋ง ์ฒ๋ฆฌํ ์ ์๋ค๋ฉด?
- ํ๋์ Task๊ฐ ๋๋ ๋ ๊น์ง ๋ค์ Task๋ ๊ธฐ๋ค๋ฆด์๋ฐ์ ์๊ณ , ๋์์ ์์ ํ ์ ์๋ ํ๊ฒฝ์ด ๋ง๋ค์ด์ง๊ฒ ๋๋ฉด์ ๋ฐ์์๋๊ฐ ๋งค์ฐ ๋๋ฆด ๊ฒ์ ๋๋ค.
- ๊ทธ๋ ๋ค๋ฉด ๋ค์ํ ์ฌ๋๋ค์ด ๋์์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ํ๊ธฐ ์ํด์ ์ด๋ป๊ฒ ํด์ผํ ๊น?
- computer ๋ฉํฐํ์คํน์ ํตํด ๋น ๋ฅธ ๋ฐ์์๋๋ก ์๋ตํ ์ ์์ต๋๋ค.
- ๋น ๋ฅธ์๋๋ก Task ๋ฅผ ๋ฐ๊ฟ๊ฐ๋ฉฐ ์คํํ๊ธฐ ๋๋ฌธ์ ์ฌ๋์ ๋์ผ๋ก ๋ดฃ์๋๋ ๋์์ ์งํ๋๋ ๊ฒ์ฒ๋ผํ๋ ์ฅ์ ์ด ์์ต๋๋ค.
- CPU ๊ฐ Task๋ฅผ ๋น ๋ฅด๊ฒ ๋ฐ๊ฟ๊ฐ๋ฉฐ ์คํํ๊ธฐ ์ํด์ Context Switchng์ด ํ์ํ๊ฒ ๋์์ต๋๋ค.
- Context Switching์ด๋ ๋ฌด์์
๋๊น?
- CPU๊ฐ ์ด๋ ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ณ ์์๋, ์ธํฐ๋ฝํธ ์์ฒญ์ด ์์ ๊ฒฝ์ฐ ๊ธฐ์กด์ ํ๋ก์ธ์ค์ ์ํ๋ฅผ PCB์ ์ ์ฅํ๊ณ , ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์ํํ๋๋ก ํ๋ก์ธ์ค๋ฅผ ๊ต์ฒดํ๋ ์์ ์ ์๋ฏธํฉ๋๋ค.
- ์ Context Switching์ด ํ์ํ๊ฐ?
- Context Switching์ด ์๊ธฐ ๋๋ฌธ์, ๋์์ ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋์ํ๋ ๊ฒ์ฒ๋ผ ํ๋ก์ธ์ค๋ฅผ ์คํ์ํฌ ์ ์์ต๋๋ค. ํ์ง๋ง ์ฌ์ค์ context switching์ด ์ผ์ด๋ ๋๋ CPU์ ๋์์ด ๋ฉ์ถ๋ '์ค๋ฒํค๋'๊ฐ ๋ฐ์ํ์ฌ ์ฑ๋ฅ์ ํ์ ์์ธ์ด ๋๊ธฐ๋ ํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ CPU ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์์๋ ํน๋ณํ ์ ๊ฒฝ์จ์ ๊ณ ๋ คํด์ผํ๋ ์ ์ด๊ธฐ ๋๋ฌธ์ ์ค์ํฉ๋๋ค!
- Context Switching ์ ์ด๋ป๊ฒ ์งํ๋๋์?
- ๋ฉํฐ์ฐ๋ ๋๋ก ์์ ์ค์ธ ํ๊ฒฝ์์, ๊ธฐ์กด ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ณ ์๋ ๋์ค ์ธํฐ๋ฝํธ ์์ฒญ์ด ์๋ ๊ฒฝ์ฐ ๊ธฐ์กด ํ ์คํฌ๋ฅผ PCB์ ์ ์ฅํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ก์ด ํ๋ก์ธ์ค๋ก๋ถํฐ ์ ๋ณด๋ฅผ reload ํ์ฌ ์คํ์ ์งํํฉ๋๋ค. ์ด๋ ๊ฒ Context switching ํ๋ ๊ณผ์ ์์๋ CPU๋ ๋์์ ๋ฉ์ถ๊ฒ ๋ฉ๋๋ค. ์๋ก์ด ํ๋ก์ธ์ค์ ํ ์คํฌ๋ฅผ ๋๋ด๋ฉด PCB์ ์ ์ฅํ๊ณ , ๊ธฐ์กด์ ํ๋ก์ธ์ค ํ์คํฌ๋ฅผ ๋ค์ reloadํ์ฌ ํ์คํฌ๋ฅผ ์งํํฉ๋๋ค.
๐ References
https://foxtrotin.tistory.com/295
https://dev-mystory.tistory.com/119
https://velog.io/@hoyun7443/PCB
https://nesoy.github.io/articles/2018-11/Context-Switching
https://www.youtube.com/watch?v=-4HKhwlH3FQ
'Computer > Computer Science' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Operating System] (iOS) ์ธ๋งํฌ์ด (Semaphore), ๋ฎคํ ์ค (Mutex) (0) | 2022.09.08 |
---|---|
[Operating System] (iOS) IPC ์ด๋? (Inter-Process Communication) (0) | 2022.09.07 |
[Operating System] (iOS) System Call (์์คํ ์ฝ, ์์คํ ํธ์ถ์ด๋?) (0) | 2022.09.07 |
[Network] HTTP์ HTTPS์ ๋์๊ณผ์ ์ค๋ช ํ๊ธฐ (2) | 2022.09.05 |
[Network] TCP์ UDP์ ๊ฐ๋ , ๊ณตํต์ , ์ฐจ์ด์ (0) | 2022.09.04 |