๋ฆฌ๋ ์ค OS์ ์๋ธ์์คํ (๋ ผ๋ฌธ: Conceptual Architecture of the Linux Kernel)
[+] ๊ด๋ จ ๋ ผ๋ฌธ: https://docs.huihoo.com/linux/kernel/a1/index.html
* ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์์ฑ์ค์ธ ์ปจํ ์ธ ์ ๋๋ค.
* ๋ง์ผ ์๋ชป๋ ๋ด์ฉ/์ค์ญ์ด ์๋ ๊ฒฝ์ฐ ํธํ ๋๊ธ์ ํตํด ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
- ๋ฆฌ๋ ์ค ์ปค๋์ ์ ์ฒด์ ์ธ ์์คํ ์ ์ผ๋ถ๋ก ์ฐธ์ฌํ๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋ฉฐ, ๊ณ ๋ฆฝ๋ ์ํ์์๋ ๋ฌด์ฉํฉ๋๋ค.
- ์๋ Figure 2.1์ ์ ์ฒด ๋ฆฌ๋ ์ค ์ด์ ์ฒด์ ๊ฐ ๋ชจ๋ํ, ์ ์ง๋ณด์์ ์ฉ์ด์ฑ, ๊ธฐ๋ฅ ๋ถ๋ฆฌ, ์ด๊ธฐ์ข ๊ฐ์ ์ ์ฐ์ฑ ๋ฑ์ ์ํด ๊ฐ๊ฐ์ ์๋ธ ์์คํ ์ผ๋ก ๋๋์ด์ ธ ์๋ ๋ชจ์ต์ ๋๋ค.
1. Linux SubSystem
๊ฐ ์๋ธ์์คํ ๋ ์ด์ด๋ ๋ฐ๋ก ์ธ์ ํ ์๋ธ์์คํ ๋ ์ด์ด์๋ง ํต์ ํ ์ ์์ต๋๋ค. ๋ํ, ์๋ธ์์คํ ๊ฐ์ ์์กด์ฑ์ ํํฅ์์ ๋๋ค. ์๋จ์ ๊ฐ๊น์ธ ์๋ก ํ์ ๋ ์ด์ด์ ์์กดํ์ง๋ง ํ๋จ์ ๊ฐ๊น์ด ์๋ธ์์คํ ์ ์์ ๋ ์ด์ด์ ์์กดํ์ง ์์ต๋๋ค.
- ํ๋์จ์ด ์ปจํธ๋กค๋ฌ:
์ด ์๋ธ์์คํ ์ ๋ฆฌ๋ ์ค ์์คํ ์ ๋ฌผ๋ฆฌ์ ํ๋์จ์ด ์ฅ์น์ ์์์ ๊ด๋ฆฌํ๊ณ ์ ์ดํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ฆฌ๋ ์ค ์์คํ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฌผ๋ฆฌ์ ์ฅ์น๋ก ๊ตฌ์ฑ๋๋ฉฐ, CPU, ๋ฉ๋ชจ๋ฆฌ ํ๋์จ์ด, ํ๋๋์คํฌ ๋ฐ ๋คํธ์ํฌ ํ๋์จ์ด ๋ฑ์ ์์์ User Application ๋ฐ OS ์๋น์ค์ ์ ๊ณตํ๊ธฐ ์ํด System call ๋๋ API ํจ์ ํธ์ถ ๋ฑ์ ํตํด ์ปค๋์ ์์ฒญํฉ๋๋ค.
- ๋ฆฌ๋ ์ค ์ปค๋:
์ปค๋์ CPU๋ฅผ ํฌํจํ ํ๋์จ์ด ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ์ ์ถ์ํํ๊ณ ์ค์ฌํฉ๋๋ค.
- OS ์๋น์ค:
์ด์ ์ฒด์ ์ ์ผ๋ถ๋ก ๊ฐ์ฃผ๋๋ ์ผ๋ฐ์ ์ธ ์๋น์ค๋ค (๋ช ๋ น ์ ธ ๋ฑ) ๋ฐ ์ปค๋์ ๋ํ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค(์ปดํ์ผ๋ฌ ๋๊ตฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ ์ด ์๋ธ์์คํ ์ ํฌํจ๋ฉ๋๋ค.
- User Application:
์ปดํจํฐ ์์คํ ์ด ์ด๋ค ์ฉ๋๋ก ์ฌ์ฉ๋๋์ง์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ง๋ง ์ ํ์ ์ผ๋ก ๊ฐ์ข ์์ฉ ํ๋ก๊ทธ๋จ ๋ฐ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์์ต๋๋ค.
[+] ํ๋์จ์ด ์์์ด OS ๋ฐ User Application์ ์ ๊ณต๋๋ ๊ณผ์
1. App/OS ์๋น์ค์์ ์ปค๋์ ํ์ ์์์ ์์ฒญ (system call / API ํจ์ ํธ์ถ)
2. ์ปค๋ ๋ด ์์ฒญ ์ฒ๋ฆฌ:
์ปค๋์ ํด๋น ์์ฒญ์ด ์ด๋ค ํ๋์จ์ด ์์์ ์ ๊ทผํ๊ฑฐ๋ ๊ด๋ จ ์์ ์ ์ํํด์ผ ํ๋์ง ๊ฒฐ์ ํฉ๋๋ค.
- ํ์ผ ์์คํ ์ ๊ทผ, ๋ฉ๋ชจ๋ฆฌ ํ ๋น, ๋คํธ์ํฌ ํต์ , ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ ํธ์ถ ๋ฑ ๋ค์ํ ์์ ์ด ์์ ์ ์์ต๋๋ค.
3. ์ปค๋์ ํ๋์จ์ด ์์ ๊ด๋ฆฌ:
์ปค๋์ ์ด๋ฌํ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์ํด CPU์๊ฐ, ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ, ์ ์ฅ ์ฅ์น ๋ฑ๊ณผ ๊ฐ์ ์์์ ํ ๋น ๋ฐ ๊ด๋ฆฌํฉ๋๋ค.
4. ์์ฒญ ์๋ฃ ๋ฐ ๊ฒฐ๊ณผ ๋ฐํ:
์ปค๋์ App/OS ์ ์์ ์ ์ฑ๊ณต/์คํจ ์ฌ๋ถ, ๋ฐ์ดํฐ ์ฝ๊ธฐ ๋๋ ์ฐ๊ธฐ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
2. Purpose of the Kernel
๋ฆฌ๋
์ค ์ปค๋์ ์ฌ์ฉ์ ํ๋ก์ธ์ค์ ๊ฐ์ ๋จธ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฆฌ๋
์ค ์ปค๋์ ๋ชจ๋ ํ๋์จ์ด๋ฅผ ์ผ๊ด๋ ๊ฐ์ ์ธํฐํ์ด์ค๋ก ์ถ์ํํ๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค ์์ฑ์ ์ํด ์ปดํจํฐ์ ์ด๋ค ๋ฌผ๋ฆฌ์ ํ๋์จ์ด๊ฐ ์ค์น๋์ด ์๋์ง ์ ํ ์ ํ์๊ฐ ์์ต๋๋ค. ์ด์ ๋๋ถ์ด ๋ฆฌ๋
์ค๋ ์ฌ์ฉ์ ํ๋ก์ธ์ค์ ํฌ๋ช
ํ๊ฒ ๋ฉํฐํ์คํน์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ํ๋ก์ธ์ค๋ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ๋ค๋ฅธ ํ๋์จ์ด ์์์ ๋
์ ํ์ฌ ์ปดํจํฐ์์ ์คํ๋๊ณ ์๋ ์ ์ผํ ํ๋ก์ธ์ค์ฒ๋ผ ์๋ํ๋ ๊ฒ ์ฒ๋ผ ๋ณด์ผ ์ ์์ต๋๋ค. ํ์ง๋ง ์ค์ ๋ก ์ปค๋์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ๋์์ ๋ณ๋ ฌ๋ก ์คํํ๋ฉฐ, ํ๋ก์ธ์ค ๊ฐ ๋ณด์์ด ์ ์ง๋๋ ๋์ ๊ฐ ํ๋ก์ธ์ค๊ฐ ํ๋์จ์ด ์์์ ๊ณต์ ํ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ์ค๊ฐํ๋ ์ญํ ์ ํฉ๋๋ค.
* ๋์ ์คํ: ์ปค๋์ ๋ค์ํ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋์ ์คํ์ ์ํด ๊ฐ ํ๋ก์ธ์ค๊ฐ ๋ณ๋์ ์คํ ํ๊ฒฝ์์ ์คํ๋ ์ ์๊ฒ ๊ด๋ฆฌํฉ๋๋ค.
* ํ๋ก์ธ์ค ๋ณด์: ๊ฐ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ธ ์คํ ๋จ์๋ก ๋ถ๋ฆฌ๋๋ฉฐ, ํ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฐ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ์ ์๋๋ก ๊ฐ ํ๋ก์ธ์ค๊ฐ ์์ฒด์ ์ผ๋ก ๊ณ ์ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ง๋๋ก ํฉ๋๋ค: [1], [+] ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ณต๊ฐ
3. Overview of the Kernel Structure
Figure 2.2๋ ๋ฆฌ๋ ์ค ์ปค๋์ 5๊ฐ์ง ์ฃผ์ ์๋ธ์์คํ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
1. ํ๋ก์ธ์ค ์ค์ผ์ฅด๋ฌ(SCHED):
SCHED(Process Scheduler)๋ CPU์ ๋ํ ํ๋ก์ธ์ค ์ก์ธ์ค๋ฅผ ์ ์ดํ๋ ์ญํ ์ ํฉ๋๋ค. ์ค์ผ์ค๋ฌ๋ ํ์ํ ํ๋์จ์ด ์์ ์ ์ปค๋์ด ์ ๋์ ์ํํ๋๋ก ๋ณด์ฅํ๋ฉด์ ํ๋ก์ธ์ค๊ฐ CPU์ ๊ณต์ ํ๊ฒ ์ก์ธ์คํ ์ ์๋๋ก ์ ์ฑ ์ ์ํํฉ๋๋ค.
2. ๋ฉ๋ชจ๋ฆฌ ๋งค๋์ (MM):
MM(Memory Manager)๋ ๋ค์ ๊ฐ์ ํ๋ก์ธ์ค๋ค์ด ๋จธ์ ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ ์์คํ
์ ์์ ํ๊ฒ ๊ณต์ ํ ์ ์๋๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ๊ด๋ฆฌํฉ๋๋ค. ๋ํ MM์ ํ๋ก์ธ์ค ๋์์ ์ํด ์์คํ
๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ์๊ตฌ ๋ ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ํ๋ ์ญํ ๋ ํฉ๋๋ค. ํ๋ก์ธ์ค ๋์ ์ค ์์คํ
์์ ์ฌ์ฉ๋์ง ์๋ ํ๋ก์ธ์ค์ ๋ฐ์ดํฐ์ ์ฝ๋๋ฅผ ํ์ด์ง ์์(Page Out) ํ์ฌ ํ์ฌ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ(RAM)์์ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง๋ฅผ ํด์ ํ๊ณ , ํ์ผ ์์คํ
์ ์ฌ์ฉํด ํ๋ ๋์คํฌ๋ก ์ค์ ์์(Swap Out) ํ์ฌ ํด๋น ํ์ด์ง๋ฅผ ํ๋ ๋์คํฌ๋ก ์ฎ๊น๋๋ค.
- ํ์ฌ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ(RAM)์์ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง๋ฅผ ํด์ : Page Out
- ํ์ฌ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ(RAM)์์ ํ๋ ๋์คํฌ ์ค์ ์์ญ์ผ๋ก ํ์ด์ง๋ฅผ ์ด๋: Swap Out
3. ๊ฐ์ ํ์ผ ์์คํ (VFS)
VFS(Virtual File System)๋ ๋ชจ๋ ๋๋ฐ์ด์ค์ ๊ณตํต ํ์ผ ์ธํฐํ์ด์ค(open/read/write/close ๋ฑ)๋ฅผ ์ ๊ณตํ์ฌ ๋ค์ํ ํ๋์จ์ด ๋๋ฐ์ด์ค์ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ถ์ํํ๋ฉฐ, ์ด์ธ์๋ ๋ค๋ฅธ ์ด์ ์ฒด์ ์ ํธํ๋๋ ์ฌ๋ฌ ํ์ผ ์์คํ ํ์์ ์ง์ํฉ๋๋ค: [+] ๋ฆฌ๋ ์ค ์ปค๋ ์๋ธ์์คํ - ๊ฐ์ ํ์ผ ์์คํ (Virtual File System)
4. ๋คํธ์ํฌ ์ธํฐํ์ด์ค(NET)
NET(Network Interface)์ ์ฌ๋ฌ ๋คํธ์ํน ํ์ค๊ณผ ๋ค์ํ ๋คํธ์ํฌ ํ๋์จ์ด์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
5. ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC- Inter-Process Communication)
IPC ์๋ธ์์คํ ์ ๋จ์ผ ๋ฆฌ๋ ์ค ์์คํ ๋ด์์ ํ๋ก์ธ์ค๊ฐ ํต์ ์ ์ํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
References:
[1] https://ko.wikipedia.org/wiki/%EA%B0%80%EC%83%81_%EC%A3%BC%EC%86%8C_%EA%B3%B5%EA%B0%84