CPU๊ฐ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด CPU ์ค์ผ์ค๋ง์ ํ์ฉํ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค. ์ด๋ CPU๋ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ์ธ์ํ ์ ์์ด์ผ ํฉ๋๋ค.
ํ๋ก์ธ์ค์ ํน์ฑ์ ๋ด๊ณ ์๋ ๊ฒ์ด ๋ฐ๋ก process Metadata
์
๋๋ค.
์ด ๋ฉํ๋ฐ์ดํฐ๋ ํ๋ก์ธ์ค๊ฐ ์์ฑ๋ ๋ PCB(Process Control Block)๋ผ๋ ๊ตฌ์กฐ์ฒด์ ์ ์ฅ๋ฉ๋๋ค.
PCB๋ ํ๋ก์ธ์ค ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ผ๋ก, ๊ฐ PCB๋ ํ๋์ ํ๋ก์ธ์ค ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
ํ๋ก๊ทธ๋จ ์คํ -> ํ๋ก์ธ์ค ์์ฑ -> ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์ (์ฝ๋, ๋ฐ์ดํฐ, ์คํ) ์์ฑ -> ์ด ํ๋ก์ธ์ค ๋ฉํ๋ฐ์ดํฐ๋ค์ด PCB์ ์ ์ฅ๋ฉ๋๋ค.
CPU๋ ํ๋ก์ธ์ค์ ์ํ์ ๋ฐ๋ผ ๊ต์ฒด ์์ ์ ์ํํฉ๋๋ค. (์: ์ธํฐ๋ฝํธ ๋ฐ์ ์ ํ ๋น๋ฐ์ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ ์ํ๊ฐ ๋๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์คํ๋ ๋) ์ด๋, ๋ค์ ์ํํ ๋๊ธฐ ์ค์ธ ํ๋ก์ธ์ค์ ์ ๋ณด๋ฅผ PCB์ ์ ์ฅํด๋๋ ๊ฒ์ด ํ์ํฉ๋๋ค.
PCB๋ Linked List ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌ๋ฉ๋๋ค. PCB List Head์ PCB๊ฐ ์์ฑ๋ ๋๋ง๋ค ์ฐ๊ฒฐ๋๋ฉฐ, ์ฃผ์๊ฐ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ด ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ์ฉ์ดํฉ๋๋ค. ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๋ฉด PCB๊ฐ ์์ฑ๋๊ณ , ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋๋ฉด ์ ๊ฑฐ๋ฉ๋๋ค.
์ด๋ ๊ฒ ์ํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋ณ๊ฒฝํ ๋, CPU์ ๋ ์ง์คํฐ ์ ๋ณด(ํ์ฌ ์งํ ์ค์ธ ํ๋ก์ธ์ค ์ ๋ณด)๊ฐ ๋ณ๊ฒฝ๋๋ ๊ณผ์ ์ Context Switching
์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
ํ๋ก์ธ์ค์ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ํ๋ ์ผ๋ จ์ ๊ณผ์ ์ ๋๋ค. ์ฆ, ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ ์ํ๋ก ์ ํ๋ ๋ ๊ทธ ์ํ๋ฅผ ๋ณด๊ดํ๊ณ , ๋๊ธฐํ๊ณ ์๋ ๋ค์ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ฉด์ ์ด์ ์ ๋ณด๊ดํ ํ๋ก์ธ์ค ์ํ๋ฅผ ๋ณต๊ตฌํ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค.
ํ๋ก์ธ์ค๋ ๊ฐ๊ธฐ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋ฐ์ ์ฌ์ฉํ๋ฏ๋ก, ์บ์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ธฐํ์ ๊ฐ์ ๋ฌด๊ฑฐ์ด ์์ ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. CPU๋ ์ด์ ํ๋ก์ธ์ค ์ํ๋ฅผ PCB์ ๋ณด๊ดํ๊ณ , ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ ๋ณด๋ฅผ PCB์์ ์ฝ์ด ๋ ์ง์คํฐ์ ์ ์ฌํ๋ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๊ฑฐ๋, ์คํ ์ค์ธ CPU ์ฌ์ฉ ํ๊ฐ ์๊ฐ์ด ์์ง๋๊ฑฐ๋, ์
์ถ๋ ฅ์ ์ํด ๋๊ธฐํด์ผ ํ๋ ๊ฒฝ์ฐ์ Context Switching์ด ๋ฐ์ํฉ๋๋ค. ์ฆ, ํ๋ก์ธ์ค๊ฐ Ready -> Running, Running -> Ready, Running -> Waiting์ฒ๋ผ ์ํ ๋ณ๊ฒฝ ์ ๋ฐ์ํฉ๋๋ค!
Overhead๋ ๊ณผ๋ถํ๋ผ๋ ์๋ฏธ๋ก, ์ผ๋ฐ์ ์ผ๋ก ๋ถ์ ์ ์ธ ์๋ฏธ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ํ์ง๋ง ํ๋ก์ธ์ค ์์ ์ค์๋ Overhead๋ฅผ ๊ฐ์ํด์ผ ํ๋ ์ํฉ์ด ์กด์ฌํฉ๋๋ค.
ํ๋ก์ธ์ค๋ฅผ ์ํํ๋ค๊ฐ ์ ์ถ๋ ฅ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ฌ ํด๋น ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ ์ํ๋ก ์ ํ๋ ์ ์์ต๋๋ค. ์ด๋ ๋๊ธฐ ์ํ๋ก ์ง์ ํ ํ๋ก์ธ์ค์ ์์ฒญ์ ์ธ๋ถ์์ ์ฒ๋ฆฌ๋๋ฉฐ, CPU๋ฅผ ๊ทธ๋ฅ ๋๊ฒ ๋๋ ๊ฒ๋ณด๋ค ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์ํํ๋ ๊ฒ์ด ํจ์จ์ ์ ๋๋ค.
์ฆ, CPU์ ๊ณ์ ํ๋ก์ธ์ค๋ฅผ ์คํ์ํค๊ธฐ ์ํด ์ค๋ฒํค๋๋ฅผ ๊ฐ์ํ๋ฉด์๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ ๊ฒ์ด Context Switching์ ๋ชฉ์ ์ ๋๋ค. CPU๋ฅผ ๋๋ฆฌ์ง ์๋๋ก ํ์ฌ ์ฌ์ฉ์์๊ฒ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋ฐ ๊ธฐ์ฌํฉ๋๋ค.
[1] velog - [์ด์์ฒด์ ]CPU ์ค์ผ์ค๋ง(feat. PCB, Context Switching) (https://velog.io/@tjdtn0219/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9CCPU-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81feat.-PCB-Context-Switching)
[2] ํฐ์คํ ๋ฆฌ - [์ด์์ฒด์ ] CPU ์ค์ผ์ค๋ง - ๐ปํ๋ฒํ ๊ณต๋์์ ๊ฐ๋ฐ ๋
ธํธ๐ป (https://rob-coding.tistory.com/31)
[3] GitHub - [Operating System - Chapter 5] CPU ์ค์ผ์ค๋ง (https://imbf.github.io/computer-science(cs)/2020/10/18/CPU-Scheduling.html)
[4] ํฐ์คํ ๋ฆฌ - [์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ ํ๊ธฐ] 4๊ณผ๋ชฉ - ํ๋ก์ธ์ค, ์ค๋ ๋, CPU ์ค์ผ์ค๋ง ... (https://pupbani.tistory.com/132)